blob: 746b1b000ef101a9e149a4d6c36eddfb98a2b462 [file] [log] [blame]
Joey Goulyccd04892013-09-13 13:46:57 +00001; RUN: llc < %s -mtriple=armv8-linux-gnueabihf -mattr=+fp-armv8 -float-abi=hard | FileCheck %s
Joey Gouly881eab52013-08-22 15:29:11 +00002@varfloat = global float 0.0
3@vardouble = global double 0.0
4define void @test_vsel32sgt(i32 %lhs32, i32 %rhs32, float %a, float %b) {
5; CHECK: test_vsel32sgt
6 %tst1 = icmp sgt i32 %lhs32, %rhs32
7 %val1 = select i1 %tst1, float %a, float %b
8 store float %val1, float* @varfloat
9; CHECK: cmp r0, r1
10; CHECK: vselgt.f32 s0, s0, s1
11 ret void
12}
13define void @test_vsel64sgt(i32 %lhs32, i32 %rhs32, double %a, double %b) {
14; CHECK: test_vsel64sgt
15 %tst1 = icmp sgt i32 %lhs32, %rhs32
16 %val1 = select i1 %tst1, double %a, double %b
17 store double %val1, double* @vardouble
18; CHECK: cmp r0, r1
19; CHECK: vselgt.f64 d16, d0, d1
20 ret void
21}
22define void @test_vsel32sge(i32 %lhs32, i32 %rhs32, float %a, float %b) {
23; CHECK: test_vsel32sge
24 %tst1 = icmp sge i32 %lhs32, %rhs32
25 %val1 = select i1 %tst1, float %a, float %b
26 store float %val1, float* @varfloat
27; CHECK: cmp r0, r1
28; CHECK: vselge.f32 s0, s0, s1
29 ret void
30}
31define void @test_vsel64sge(i32 %lhs32, i32 %rhs32, double %a, double %b) {
32; CHECK: test_vsel64sge
33 %tst1 = icmp sge i32 %lhs32, %rhs32
34 %val1 = select i1 %tst1, double %a, double %b
35 store double %val1, double* @vardouble
36; CHECK: cmp r0, r1
37; CHECK: vselge.f64 d16, d0, d1
38 ret void
39}
40define void @test_vsel32eq(i32 %lhs32, i32 %rhs32, float %a, float %b) {
41; CHECK: test_vsel32eq
42 %tst1 = icmp eq i32 %lhs32, %rhs32
43 %val1 = select i1 %tst1, float %a, float %b
44 store float %val1, float* @varfloat
45; CHECK: cmp r0, r1
46; CHECK: vseleq.f32 s0, s0, s1
47 ret void
48}
49define void @test_vsel64eq(i32 %lhs32, i32 %rhs32, double %a, double %b) {
50; CHECK: test_vsel64eq
51 %tst1 = icmp eq i32 %lhs32, %rhs32
52 %val1 = select i1 %tst1, double %a, double %b
53 store double %val1, double* @vardouble
54; CHECK: cmp r0, r1
55; CHECK: vseleq.f64 d16, d0, d1
56 ret void
57}
58define void @test_vsel32slt(i32 %lhs32, i32 %rhs32, float %a, float %b) {
59; CHECK: test_vsel32slt
60 %tst1 = icmp slt i32 %lhs32, %rhs32
61 %val1 = select i1 %tst1, float %a, float %b
62 store float %val1, float* @varfloat
63; CHECK: cmp r0, r1
Weiming Zhao63871d22013-12-18 22:25:17 +000064; CHECK: vselge.f32 s0, s1, s0
Joey Gouly881eab52013-08-22 15:29:11 +000065 ret void
66}
67define void @test_vsel64slt(i32 %lhs32, i32 %rhs32, double %a, double %b) {
68; CHECK: test_vsel64slt
69 %tst1 = icmp slt i32 %lhs32, %rhs32
70 %val1 = select i1 %tst1, double %a, double %b
71 store double %val1, double* @vardouble
72; CHECK: cmp r0, r1
Weiming Zhao63871d22013-12-18 22:25:17 +000073; CHECK: vselge.f64 d16, d1, d0
Joey Gouly881eab52013-08-22 15:29:11 +000074 ret void
75}
76define void @test_vsel32sle(i32 %lhs32, i32 %rhs32, float %a, float %b) {
77; CHECK: test_vsel32sle
78 %tst1 = icmp sle i32 %lhs32, %rhs32
79 %val1 = select i1 %tst1, float %a, float %b
80 store float %val1, float* @varfloat
81; CHECK: cmp r0, r1
Weiming Zhao63871d22013-12-18 22:25:17 +000082; CHECK: vselgt.f32 s0, s1, s0
Joey Gouly881eab52013-08-22 15:29:11 +000083 ret void
84}
85define void @test_vsel64sle(i32 %lhs32, i32 %rhs32, double %a, double %b) {
86; CHECK: test_vsel64sle
87 %tst1 = icmp sle i32 %lhs32, %rhs32
88 %val1 = select i1 %tst1, double %a, double %b
89 store double %val1, double* @vardouble
90; CHECK: cmp r0, r1
Weiming Zhao63871d22013-12-18 22:25:17 +000091; CHECK: vselgt.f64 d16, d1, d0
Joey Gouly881eab52013-08-22 15:29:11 +000092 ret void
93}
94define void @test_vsel32ogt(float %lhs32, float %rhs32, float %a, float %b) {
95; CHECK: test_vsel32ogt
96 %tst1 = fcmp ogt float %lhs32, %rhs32
97 %val1 = select i1 %tst1, float %a, float %b
98 store float %val1, float* @varfloat
99; CHECK: vcmpe.f32 s0, s1
100; CHECK: vselgt.f32 s0, s2, s3
101 ret void
102}
103define void @test_vsel64ogt(float %lhs32, float %rhs32, double %a, double %b) {
104; CHECK: test_vsel64ogt
105 %tst1 = fcmp ogt float %lhs32, %rhs32
106 %val1 = select i1 %tst1, double %a, double %b
107 store double %val1, double* @vardouble
108; CHECK: vcmpe.f32 s0, s1
109; CHECK: vselgt.f64 d16, d1, d2
110 ret void
111}
112define void @test_vsel32oge(float %lhs32, float %rhs32, float %a, float %b) {
113; CHECK: test_vsel32oge
114 %tst1 = fcmp oge float %lhs32, %rhs32
115 %val1 = select i1 %tst1, float %a, float %b
116 store float %val1, float* @varfloat
117; CHECK: vcmpe.f32 s0, s1
118; CHECK: vselge.f32 s0, s2, s3
119 ret void
120}
121define void @test_vsel64oge(float %lhs32, float %rhs32, double %a, double %b) {
122; CHECK: test_vsel64oge
123 %tst1 = fcmp oge float %lhs32, %rhs32
124 %val1 = select i1 %tst1, double %a, double %b
125 store double %val1, double* @vardouble
126; CHECK: vcmpe.f32 s0, s1
127; CHECK: vselge.f64 d16, d1, d2
128 ret void
129}
130define void @test_vsel32oeq(float %lhs32, float %rhs32, float %a, float %b) {
131; CHECK: test_vsel32oeq
132 %tst1 = fcmp oeq float %lhs32, %rhs32
133 %val1 = select i1 %tst1, float %a, float %b
134 store float %val1, float* @varfloat
135; CHECK: vcmpe.f32 s0, s1
136; CHECK: vseleq.f32 s0, s2, s3
137 ret void
138}
139define void @test_vsel64oeq(float %lhs32, float %rhs32, double %a, double %b) {
140; CHECK: test_vsel64oeq
141 %tst1 = fcmp oeq float %lhs32, %rhs32
142 %val1 = select i1 %tst1, double %a, double %b
143 store double %val1, double* @vardouble
144; CHECK: vcmpe.f32 s0, s1
145; CHECK: vseleq.f64 d16, d1, d2
146 ret void
147}
148define void @test_vsel32ugt(float %lhs32, float %rhs32, float %a, float %b) {
149; CHECK: test_vsel32ugt
150 %tst1 = fcmp ugt float %lhs32, %rhs32
151 %val1 = select i1 %tst1, float %a, float %b
152 store float %val1, float* @varfloat
153; CHECK: vcmpe.f32 s1, s0
154; CHECK: vselge.f32 s0, s3, s2
155 ret void
156}
157define void @test_vsel64ugt(float %lhs32, float %rhs32, double %a, double %b) {
158; CHECK: test_vsel64ugt
159 %tst1 = fcmp ugt float %lhs32, %rhs32
160 %val1 = select i1 %tst1, double %a, double %b
161 store double %val1, double* @vardouble
162; CHECK: vcmpe.f32 s1, s0
163; CHECK: vselge.f64 d16, d2, d1
164 ret void
165}
166define void @test_vsel32uge(float %lhs32, float %rhs32, float %a, float %b) {
167; CHECK: test_vsel32uge
168 %tst1 = fcmp uge float %lhs32, %rhs32
169 %val1 = select i1 %tst1, float %a, float %b
170 store float %val1, float* @varfloat
171; CHECK: vcmpe.f32 s1, s0
172; CHECK: vselgt.f32 s0, s3, s2
173 ret void
174}
175define void @test_vsel64uge(float %lhs32, float %rhs32, double %a, double %b) {
176; CHECK: test_vsel64uge
177 %tst1 = fcmp uge float %lhs32, %rhs32
178 %val1 = select i1 %tst1, double %a, double %b
179 store double %val1, double* @vardouble
180; CHECK: vcmpe.f32 s1, s0
181; CHECK: vselgt.f64 d16, d2, d1
182 ret void
183}
184define void @test_vsel32olt(float %lhs32, float %rhs32, float %a, float %b) {
185; CHECK: test_vsel32olt
186 %tst1 = fcmp olt float %lhs32, %rhs32
187 %val1 = select i1 %tst1, float %a, float %b
188 store float %val1, float* @varfloat
189; CHECK: vcmpe.f32 s1, s0
190; CHECK: vselgt.f32 s0, s2, s3
191 ret void
192}
193define void @test_vsel64olt(float %lhs32, float %rhs32, double %a, double %b) {
194; CHECK: test_vsel64olt
195 %tst1 = fcmp olt float %lhs32, %rhs32
196 %val1 = select i1 %tst1, double %a, double %b
197 store double %val1, double* @vardouble
198; CHECK: vcmpe.f32 s1, s0
199; CHECK: vselgt.f64 d16, d1, d2
200 ret void
201}
202define void @test_vsel32ult(float %lhs32, float %rhs32, float %a, float %b) {
203; CHECK: test_vsel32ult
204 %tst1 = fcmp ult float %lhs32, %rhs32
205 %val1 = select i1 %tst1, float %a, float %b
206 store float %val1, float* @varfloat
207; CHECK: vcmpe.f32 s0, s1
208; CHECK: vselge.f32 s0, s3, s2
209 ret void
210}
211define void @test_vsel64ult(float %lhs32, float %rhs32, double %a, double %b) {
212; CHECK: test_vsel64ult
213 %tst1 = fcmp ult float %lhs32, %rhs32
214 %val1 = select i1 %tst1, double %a, double %b
215 store double %val1, double* @vardouble
216; CHECK: vcmpe.f32 s0, s1
217; CHECK: vselge.f64 d16, d2, d1
218 ret void
219}
220define void @test_vsel32ole(float %lhs32, float %rhs32, float %a, float %b) {
221; CHECK: test_vsel32ole
222 %tst1 = fcmp ole float %lhs32, %rhs32
223 %val1 = select i1 %tst1, float %a, float %b
224 store float %val1, float* @varfloat
225; CHECK: vcmpe.f32 s1, s0
226; CHECK: vselge.f32 s0, s2, s3
227 ret void
228}
229define void @test_vsel64ole(float %lhs32, float %rhs32, double %a, double %b) {
230; CHECK: test_vsel64ole
231 %tst1 = fcmp ole float %lhs32, %rhs32
232 %val1 = select i1 %tst1, double %a, double %b
233 store double %val1, double* @vardouble
234; CHECK: vcmpe.f32 s1, s0
235; CHECK: vselge.f64 d16, d1, d2
236 ret void
237}
238define void @test_vsel32ule(float %lhs32, float %rhs32, float %a, float %b) {
239; CHECK: test_vsel32ule
240 %tst1 = fcmp ule float %lhs32, %rhs32
241 %val1 = select i1 %tst1, float %a, float %b
242 store float %val1, float* @varfloat
243; CHECK: vcmpe.f32 s0, s1
244; CHECK: vselgt.f32 s0, s3, s2
245 ret void
246}
247define void @test_vsel64ule(float %lhs32, float %rhs32, double %a, double %b) {
248; CHECK: test_vsel64ule
249 %tst1 = fcmp ule float %lhs32, %rhs32
250 %val1 = select i1 %tst1, double %a, double %b
251 store double %val1, double* @vardouble
252; CHECK: vcmpe.f32 s0, s1
253; CHECK: vselgt.f64 d16, d2, d1
254 ret void
255}
256define void @test_vsel32ord(float %lhs32, float %rhs32, float %a, float %b) {
257; CHECK: test_vsel32ord
258 %tst1 = fcmp ord float %lhs32, %rhs32
259 %val1 = select i1 %tst1, float %a, float %b
260 store float %val1, float* @varfloat
261; CHECK: vcmpe.f32 s0, s1
262; CHECK: vselvs.f32 s0, s3, s2
263 ret void
264}
265define void @test_vsel64ord(float %lhs32, float %rhs32, double %a, double %b) {
266; CHECK: test_vsel64ord
267 %tst1 = fcmp ord float %lhs32, %rhs32
268 %val1 = select i1 %tst1, double %a, double %b
269 store double %val1, double* @vardouble
270; CHECK: vcmpe.f32 s0, s1
271; CHECK: vselvs.f64 d16, d2, d1
272 ret void
273}
274define void @test_vsel32une(float %lhs32, float %rhs32, float %a, float %b) {
275; CHECK: test_vsel32une
276 %tst1 = fcmp une float %lhs32, %rhs32
277 %val1 = select i1 %tst1, float %a, float %b
278 store float %val1, float* @varfloat
279; CHECK: vcmpe.f32 s0, s1
280; CHECK: vseleq.f32 s0, s3, s2
281 ret void
282}
283define void @test_vsel64une(float %lhs32, float %rhs32, double %a, double %b) {
284; CHECK: test_vsel64une
285 %tst1 = fcmp une float %lhs32, %rhs32
286 %val1 = select i1 %tst1, double %a, double %b
287 store double %val1, double* @vardouble
288; CHECK: vcmpe.f32 s0, s1
289; CHECK: vseleq.f64 d16, d2, d1
290 ret void
291}
292define void @test_vsel32uno(float %lhs32, float %rhs32, float %a, float %b) {
293; CHECK: test_vsel32uno
294 %tst1 = fcmp uno float %lhs32, %rhs32
295 %val1 = select i1 %tst1, float %a, float %b
296 store float %val1, float* @varfloat
297; CHECK: vcmpe.f32 s0, s1
298; CHECK: vselvs.f32 s0, s2, s3
299 ret void
300}
301define void @test_vsel64uno(float %lhs32, float %rhs32, double %a, double %b) {
302; CHECK: test_vsel64uno
303 %tst1 = fcmp uno float %lhs32, %rhs32
304 %val1 = select i1 %tst1, double %a, double %b
305 store double %val1, double* @vardouble
306; CHECK: vcmpe.f32 s0, s1
307; CHECK: vselvs.f64 d16, d1, d2
308 ret void
309}