xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/vec_rounding.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr6 -mattr=+altivec < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Check vector round to single-precision toward -infinity (vrfim)
4*9880d681SAndroid Build Coastguard Worker; instruction generation using Altivec.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"
7*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu"
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.floor.v2f64(<2 x double> %p)
10*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @floor_v2f64(<2 x double> %p)
11*9880d681SAndroid Build Coastguard Worker{
12*9880d681SAndroid Build Coastguard Worker  %t = call <2 x double> @llvm.floor.v2f64(<2 x double> %p)
13*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %t
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_v2f64:
16*9880d681SAndroid Build Coastguard Worker; CHECK: frim
17*9880d681SAndroid Build Coastguard Worker; CHECK: frim
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.floor.v4f64(<4 x double> %p)
20*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @floor_v4f64(<4 x double> %p)
21*9880d681SAndroid Build Coastguard Worker{
22*9880d681SAndroid Build Coastguard Worker  %t = call <4 x double> @llvm.floor.v4f64(<4 x double> %p)
23*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %t
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_v4f64:
26*9880d681SAndroid Build Coastguard Worker; CHECK: frim
27*9880d681SAndroid Build Coastguard Worker; CHECK: frim
28*9880d681SAndroid Build Coastguard Worker; CHECK: frim
29*9880d681SAndroid Build Coastguard Worker; CHECK: frim
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.ceil.v2f64(<2 x double> %p)
32*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @ceil_v2f64(<2 x double> %p)
33*9880d681SAndroid Build Coastguard Worker{
34*9880d681SAndroid Build Coastguard Worker  %t = call <2 x double> @llvm.ceil.v2f64(<2 x double> %p)
35*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %t
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ceil_v2f64:
38*9880d681SAndroid Build Coastguard Worker; CHECK: frip
39*9880d681SAndroid Build Coastguard Worker; CHECK: frip
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.ceil.v4f64(<4 x double> %p)
42*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @ceil_v4f64(<4 x double> %p)
43*9880d681SAndroid Build Coastguard Worker{
44*9880d681SAndroid Build Coastguard Worker  %t = call <4 x double> @llvm.ceil.v4f64(<4 x double> %p)
45*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %t
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ceil_v4f64:
48*9880d681SAndroid Build Coastguard Worker; CHECK: frip
49*9880d681SAndroid Build Coastguard Worker; CHECK: frip
50*9880d681SAndroid Build Coastguard Worker; CHECK: frip
51*9880d681SAndroid Build Coastguard Worker; CHECK: frip
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.trunc.v2f64(<2 x double> %p)
54*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @trunc_v2f64(<2 x double> %p)
55*9880d681SAndroid Build Coastguard Worker{
56*9880d681SAndroid Build Coastguard Worker  %t = call <2 x double> @llvm.trunc.v2f64(<2 x double> %p)
57*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %t
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: trunc_v2f64:
60*9880d681SAndroid Build Coastguard Worker; CHECK: friz
61*9880d681SAndroid Build Coastguard Worker; CHECK: friz
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.trunc.v4f64(<4 x double> %p)
64*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @trunc_v4f64(<4 x double> %p)
65*9880d681SAndroid Build Coastguard Worker{
66*9880d681SAndroid Build Coastguard Worker  %t = call <4 x double> @llvm.trunc.v4f64(<4 x double> %p)
67*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %t
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: trunc_v4f64:
70*9880d681SAndroid Build Coastguard Worker; CHECK: friz
71*9880d681SAndroid Build Coastguard Worker; CHECK: friz
72*9880d681SAndroid Build Coastguard Worker; CHECK: friz
73*9880d681SAndroid Build Coastguard Worker; CHECK: friz
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)
76*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @nearbyint_v2f64(<2 x double> %p)
77*9880d681SAndroid Build Coastguard Worker{
78*9880d681SAndroid Build Coastguard Worker  %t = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %p)
79*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %t
80*9880d681SAndroid Build Coastguard Worker}
81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_v2f64:
82*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint
83*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)
86*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @nearbyint_v4f64(<4 x double> %p)
87*9880d681SAndroid Build Coastguard Worker{
88*9880d681SAndroid Build Coastguard Worker  %t = call <4 x double> @llvm.nearbyint.v4f64(<4 x double> %p)
89*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %t
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_v4f64:
92*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint
93*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint
94*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint
95*9880d681SAndroid Build Coastguard Worker; CHECK: bl nearbyint
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.floor.v4f32(<4 x float> %p)
99*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @floor_v4f32(<4 x float> %p)
100*9880d681SAndroid Build Coastguard Worker{
101*9880d681SAndroid Build Coastguard Worker  %t = call <4 x float> @llvm.floor.v4f32(<4 x float> %p)
102*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %t
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_v4f32:
105*9880d681SAndroid Build Coastguard Worker; CHECK: vrfim
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.floor.v8f32(<8 x float> %p)
108*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @floor_v8f32(<8 x float> %p)
109*9880d681SAndroid Build Coastguard Worker{
110*9880d681SAndroid Build Coastguard Worker  %t = call <8 x float> @llvm.floor.v8f32(<8 x float> %p)
111*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %t
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: floor_v8f32:
114*9880d681SAndroid Build Coastguard Worker; CHECK: vrfim
115*9880d681SAndroid Build Coastguard Worker; CHECK: vrfim
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.ceil.v4f32(<4 x float> %p)
118*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @ceil_v4f32(<4 x float> %p)
119*9880d681SAndroid Build Coastguard Worker{
120*9880d681SAndroid Build Coastguard Worker  %t = call <4 x float> @llvm.ceil.v4f32(<4 x float> %p)
121*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %t
122*9880d681SAndroid Build Coastguard Worker}
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ceil_v4f32:
124*9880d681SAndroid Build Coastguard Worker; CHECK: vrfip
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.ceil.v8f32(<8 x float> %p)
127*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @ceil_v8f32(<8 x float> %p)
128*9880d681SAndroid Build Coastguard Worker{
129*9880d681SAndroid Build Coastguard Worker  %t = call <8 x float> @llvm.ceil.v8f32(<8 x float> %p)
130*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %t
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: ceil_v8f32:
133*9880d681SAndroid Build Coastguard Worker; CHECK: vrfip
134*9880d681SAndroid Build Coastguard Worker; CHECK: vrfip
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.trunc.v4f32(<4 x float> %p)
137*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @trunc_v4f32(<4 x float> %p)
138*9880d681SAndroid Build Coastguard Worker{
139*9880d681SAndroid Build Coastguard Worker  %t = call <4 x float> @llvm.trunc.v4f32(<4 x float> %p)
140*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %t
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: trunc_v4f32:
143*9880d681SAndroid Build Coastguard Worker; CHECK: vrfiz
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.trunc.v8f32(<8 x float> %p)
146*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @trunc_v8f32(<8 x float> %p)
147*9880d681SAndroid Build Coastguard Worker{
148*9880d681SAndroid Build Coastguard Worker  %t = call <8 x float> @llvm.trunc.v8f32(<8 x float> %p)
149*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %t
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: trunc_v8f32:
152*9880d681SAndroid Build Coastguard Worker; CHECK: vrfiz
153*9880d681SAndroid Build Coastguard Worker; CHECK: vrfiz
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)
156*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @nearbyint_v4f32(<4 x float> %p)
157*9880d681SAndroid Build Coastguard Worker{
158*9880d681SAndroid Build Coastguard Worker  %t = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %p)
159*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %t
160*9880d681SAndroid Build Coastguard Worker}
161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_v4f32:
162*9880d681SAndroid Build Coastguard Worker; CHECK: vrfin
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)
165*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @nearbyint_v8f32(<8 x float> %p)
166*9880d681SAndroid Build Coastguard Worker{
167*9880d681SAndroid Build Coastguard Worker  %t = call <8 x float> @llvm.nearbyint.v8f32(<8 x float> %p)
168*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %t
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: nearbyint_v8f32:
171*9880d681SAndroid Build Coastguard Worker; CHECK: vrfin
172*9880d681SAndroid Build Coastguard Worker; CHECK: vrfin
173