blob: 516b2dd58b9955dccf7cc43f0028816feef060b9 [file] [log] [blame]
Adhemerval Zanella56775e02012-10-30 13:50:19 +00001; RUN: llc -mcpu=pwr6 -mattr=+altivec < %s | FileCheck %s
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +00002
Alp Tokerf907b892013-12-05 05:44:44 +00003; Check vector comparisons using altivec. For non-native types, just basic
Adhemerval Zanella56775e02012-10-30 13:50:19 +00004; comparison instruction check is done. For altivec supported type (16i8,
5; 8i16, 4i32, and 4f32) all the comparisons operators (==, !=, >, >=, <, <=)
6; are checked.
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +00007
8
9target 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"
10target triple = "powerpc64-unknown-linux-gnu"
11
12define <2 x i8> @v2si8_cmp(<2 x i8> %x, <2 x i8> %y) nounwind readnone {
13 %cmp = icmp eq <2 x i8> %x, %y
14 %sext = sext <2 x i1> %cmp to <2 x i8>
15 ret <2 x i8> %sext
16}
Stephen Lind24ab202013-07-14 06:24:09 +000017; CHECK-LABEL: v2si8_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +000018; CHECK: vcmpequb {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
19
20
21define <4 x i8> @v4si8_cmp(<4 x i8> %x, <4 x i8> %y) nounwind readnone {
22 %cmp = icmp eq <4 x i8> %x, %y
23 %sext = sext <4 x i1> %cmp to <4 x i8>
24 ret <4 x i8> %sext
25}
Stephen Lind24ab202013-07-14 06:24:09 +000026; CHECK-LABEL: v4si8_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +000027; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
28
29
30define <8 x i8> @v8si8_cmp(<8 x i8> %x, <8 x i8> %y) nounwind readnone {
31 %cmp = icmp eq <8 x i8> %x, %y
32 %sext = sext <8 x i1> %cmp to <8 x i8>
33 ret <8 x i8> %sext
34}
Stephen Lind24ab202013-07-14 06:24:09 +000035; CHECK-LABEL: v8si8_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +000036; CHECK: vcmpequh {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
37
38
Alp Toker1d099d92014-06-19 19:41:26 +000039; Additional tests for v16i8 since it is a altivec native type
Adhemerval Zanella56775e02012-10-30 13:50:19 +000040
41define <16 x i8> @v16si8_cmp_eq(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +000042 %cmp = icmp eq <16 x i8> %x, %y
43 %sext = sext <16 x i1> %cmp to <16 x i8>
44 ret <16 x i8> %sext
45}
Stephen Lind24ab202013-07-14 06:24:09 +000046; CHECK-LABEL: v16si8_cmp_eq:
Adhemerval Zanella56775e02012-10-30 13:50:19 +000047; CHECK: vcmpequb 2, 2, 3
48
49define <16 x i8> @v16si8_cmp_ne(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
50entry:
51 %cmp = icmp ne <16 x i8> %x, %y
52 %sext = sext <16 x i1> %cmp to <16 x i8>
53 ret <16 x i8> %sext
54}
Stephen Lind24ab202013-07-14 06:24:09 +000055; CHECK-LABEL: v16si8_cmp_ne:
Adhemerval Zanella56775e02012-10-30 13:50:19 +000056; CHECK: vcmpequb [[RET:[0-9]+]], 2, 3
Benjamin Kramer01b75cc2013-03-09 18:25:40 +000057; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +000058
59define <16 x i8> @v16si8_cmp_le(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
60entry:
61 %cmp = icmp sle <16 x i8> %x, %y
62 %sext = sext <16 x i1> %cmp to <16 x i8>
63 ret <16 x i8> %sext
64}
Stephen Lind24ab202013-07-14 06:24:09 +000065; CHECK-LABEL: v16si8_cmp_le:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +000066; CHECK: vcmpgtsb [[RET:[0-9]+]], 2, 3
67; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +000068
69define <16 x i8> @v16ui8_cmp_le(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
70entry:
71 %cmp = icmp ule <16 x i8> %x, %y
72 %sext = sext <16 x i1> %cmp to <16 x i8>
73 ret <16 x i8> %sext
74}
Stephen Lind24ab202013-07-14 06:24:09 +000075; CHECK-LABEL: v16ui8_cmp_le:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +000076; CHECK: vcmpgtub [[RET:[0-9]+]], 2, 3
77; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +000078
79define <16 x i8> @v16si8_cmp_lt(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
80entry:
81 %cmp = icmp slt <16 x i8> %x, %y
82 %sext = sext <16 x i1> %cmp to <16 x i8>
83 ret <16 x i8> %sext
84}
Stephen Lind24ab202013-07-14 06:24:09 +000085; CHECK-LABEL: v16si8_cmp_lt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +000086; CHECK: vcmpgtsb 2, 3, 2
87
88define <16 x i8> @v16ui8_cmp_lt(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
89entry:
90 %cmp = icmp ult <16 x i8> %x, %y
91 %sext = sext <16 x i1> %cmp to <16 x i8>
92 ret <16 x i8> %sext
93}
Stephen Lind24ab202013-07-14 06:24:09 +000094; CHECK-LABEL: v16ui8_cmp_lt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +000095; CHECK: vcmpgtub 2, 3, 2
96
97define <16 x i8> @v16si8_cmp_gt(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
98entry:
99 %cmp = icmp sgt <16 x i8> %x, %y
100 %sext = sext <16 x i1> %cmp to <16 x i8>
101 ret <16 x i8> %sext
102}
Stephen Lind24ab202013-07-14 06:24:09 +0000103; CHECK-LABEL: v16si8_cmp_gt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000104; CHECK: vcmpgtsb 2, 2, 3
105
106define <16 x i8> @v16ui8_cmp_gt(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
107entry:
108 %cmp = icmp ugt <16 x i8> %x, %y
109 %sext = sext <16 x i1> %cmp to <16 x i8>
110 ret <16 x i8> %sext
111}
Stephen Lind24ab202013-07-14 06:24:09 +0000112; CHECK-LABEL: v16ui8_cmp_gt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000113; CHECK: vcmpgtub 2, 2, 3
114
115define <16 x i8> @v16si8_cmp_ge(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
116entry:
117 %cmp = icmp sge <16 x i8> %x, %y
118 %sext = sext <16 x i1> %cmp to <16 x i8>
119 ret <16 x i8> %sext
120}
Stephen Lind24ab202013-07-14 06:24:09 +0000121; CHECK-LABEL: v16si8_cmp_ge:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000122; CHECK: vcmpgtsb [[RET:[0-9]+]], 3, 2
123; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000124
125define <16 x i8> @v16ui8_cmp_ge(<16 x i8> %x, <16 x i8> %y) nounwind readnone {
126entry:
127 %cmp = icmp uge <16 x i8> %x, %y
128 %sext = sext <16 x i1> %cmp to <16 x i8>
129 ret <16 x i8> %sext
130}
Stephen Lind24ab202013-07-14 06:24:09 +0000131; CHECK-LABEL: v16ui8_cmp_ge:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000132; CHECK: vcmpgtub [[RET:[0-9]+]], 3, 2
133; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000134
135
136define <32 x i8> @v32si8_cmp(<32 x i8> %x, <32 x i8> %y) nounwind readnone {
137 %cmp = icmp eq <32 x i8> %x, %y
138 %sext = sext <32 x i1> %cmp to <32 x i8>
139 ret <32 x i8> %sext
140}
Stephen Lind24ab202013-07-14 06:24:09 +0000141; CHECK-LABEL: v32si8_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000142; CHECK: vcmpequb {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
143; CHECK: vcmpequb {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
144
145
146define <2 x i16> @v2si16_cmp(<2 x i16> %x, <2 x i16> %y) nounwind readnone {
147 %cmp = icmp eq <2 x i16> %x, %y
148 %sext = sext <2 x i1> %cmp to <2 x i16>
149 ret <2 x i16> %sext
150}
Stephen Lind24ab202013-07-14 06:24:09 +0000151; CHECK-LABEL: v2si16_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000152; CHECK: vcmpequh {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
153
154
155define <4 x i16> @v4si16_cmp(<4 x i16> %x, <4 x i16> %y) nounwind readnone {
156 %cmp = icmp eq <4 x i16> %x, %y
157 %sext = sext <4 x i1> %cmp to <4 x i16>
158 ret <4 x i16> %sext
159}
Stephen Lind24ab202013-07-14 06:24:09 +0000160; CHECK-LABEL: v4si16_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000161; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
162
163
Alp Toker1d099d92014-06-19 19:41:26 +0000164; Additional tests for v8i16 since it is an altivec native type
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000165
166define <8 x i16> @v8si16_cmp_eq(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
167entry:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000168 %cmp = icmp eq <8 x i16> %x, %y
169 %sext = sext <8 x i1> %cmp to <8 x i16>
170 ret <8 x i16> %sext
171}
Stephen Lind24ab202013-07-14 06:24:09 +0000172; CHECK-LABEL: v8si16_cmp_eq:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000173; CHECK: vcmpequh 2, 2, 3
174
175define <8 x i16> @v8si16_cmp_ne(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
176entry:
177 %cmp = icmp ne <8 x i16> %x, %y
178 %sext = sext <8 x i1> %cmp to <8 x i16>
179 ret <8 x i16> %sext
180}
Stephen Lind24ab202013-07-14 06:24:09 +0000181; CHECK-LABEL: v8si16_cmp_ne:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000182; CHECK: vcmpequh [[RET:[0-9]+]], 2, 3
183; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
184
185define <8 x i16> @v8si16_cmp_le(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
186entry:
187 %cmp = icmp sle <8 x i16> %x, %y
188 %sext = sext <8 x i1> %cmp to <8 x i16>
189 ret <8 x i16> %sext
190}
Stephen Lind24ab202013-07-14 06:24:09 +0000191; CHECK-LABEL: v8si16_cmp_le:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000192; CHECK: vcmpgtsh [[RET:[0-9]+]], 2, 3
193; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000194
195define <8 x i16> @v8ui16_cmp_le(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
196entry:
197 %cmp = icmp ule <8 x i16> %x, %y
198 %sext = sext <8 x i1> %cmp to <8 x i16>
199 ret <8 x i16> %sext
200}
Stephen Lind24ab202013-07-14 06:24:09 +0000201; CHECK-LABEL: v8ui16_cmp_le:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000202; CHECK: vcmpgtuh [[RET:[0-9]+]], 2, 3
203; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000204
205define <8 x i16> @v8si16_cmp_lt(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
206entry:
207 %cmp = icmp slt <8 x i16> %x, %y
208 %sext = sext <8 x i1> %cmp to <8 x i16>
209 ret <8 x i16> %sext
210}
Stephen Lind24ab202013-07-14 06:24:09 +0000211; CHECK-LABEL: v8si16_cmp_lt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000212; CHECK: vcmpgtsh 2, 3, 2
213
214define <8 x i16> @v8ui16_cmp_lt(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
215entry:
216 %cmp = icmp ult <8 x i16> %x, %y
217 %sext = sext <8 x i1> %cmp to <8 x i16>
218 ret <8 x i16> %sext
219}
Stephen Lind24ab202013-07-14 06:24:09 +0000220; CHECK-LABEL: v8ui16_cmp_lt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000221; CHECK: vcmpgtuh 2, 3, 2
222
223define <8 x i16> @v8si16_cmp_gt(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
224entry:
225 %cmp = icmp sgt <8 x i16> %x, %y
226 %sext = sext <8 x i1> %cmp to <8 x i16>
227 ret <8 x i16> %sext
228}
Stephen Lind24ab202013-07-14 06:24:09 +0000229; CHECK-LABEL: v8si16_cmp_gt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000230; CHECK: vcmpgtsh 2, 2, 3
231
232define <8 x i16> @v8ui16_cmp_gt(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
233entry:
234 %cmp = icmp ugt <8 x i16> %x, %y
235 %sext = sext <8 x i1> %cmp to <8 x i16>
236 ret <8 x i16> %sext
237}
Stephen Lind24ab202013-07-14 06:24:09 +0000238; CHECK-LABEL: v8ui16_cmp_gt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000239; CHECK: vcmpgtuh 2, 2, 3
240
241define <8 x i16> @v8si16_cmp_ge(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
242entry:
243 %cmp = icmp sge <8 x i16> %x, %y
244 %sext = sext <8 x i1> %cmp to <8 x i16>
245 ret <8 x i16> %sext
246}
Stephen Lind24ab202013-07-14 06:24:09 +0000247; CHECK-LABEL: v8si16_cmp_ge:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000248; CHECK: vcmpgtsh [[RET:[0-9]+]], 3, 2
249; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000250
251define <8 x i16> @v8ui16_cmp_ge(<8 x i16> %x, <8 x i16> %y) nounwind readnone {
252entry:
253 %cmp = icmp uge <8 x i16> %x, %y
254 %sext = sext <8 x i1> %cmp to <8 x i16>
255 ret <8 x i16> %sext
256}
Stephen Lind24ab202013-07-14 06:24:09 +0000257; CHECK-LABEL: v8ui16_cmp_ge:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000258; CHECK: vcmpgtuh [[RET:[0-9]+]], 3, 2
259; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000260
261
262define <16 x i16> @v16si16_cmp(<16 x i16> %x, <16 x i16> %y) nounwind readnone {
263 %cmp = icmp eq <16 x i16> %x, %y
264 %sext = sext <16 x i1> %cmp to <16 x i16>
265 ret <16 x i16> %sext
266}
Stephen Lind24ab202013-07-14 06:24:09 +0000267; CHECK-LABEL: v16si16_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000268; CHECK: vcmpequh {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
269; CHECK: vcmpequh {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
270
271
272define <32 x i16> @v32si16_cmp(<32 x i16> %x, <32 x i16> %y) nounwind readnone {
273 %cmp = icmp eq <32 x i16> %x, %y
274 %sext = sext <32 x i1> %cmp to <32 x i16>
275 ret <32 x i16> %sext
276}
Stephen Lind24ab202013-07-14 06:24:09 +0000277; CHECK-LABEL: v32si16_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000278; CHECK: vcmpequh {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
279; CHECK: vcmpequh {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
280; CHECK: vcmpequh {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
281; CHECK: vcmpequh {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
282
283
284define <2 x i32> @v2si32_cmp(<2 x i32> %x, <2 x i32> %y) nounwind readnone {
285 %cmp = icmp eq <2 x i32> %x, %y
286 %sext = sext <2 x i1> %cmp to <2 x i32>
287 ret <2 x i32> %sext
288}
Stephen Lind24ab202013-07-14 06:24:09 +0000289; CHECK-LABEL: v2si32_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000290; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
291
292
Alp Toker1d099d92014-06-19 19:41:26 +0000293; Additional tests for v4si32 since it is an altivec native type
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000294
295define <4 x i32> @v4si32_cmp_eq(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
296entry:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000297 %cmp = icmp eq <4 x i32> %x, %y
298 %sext = sext <4 x i1> %cmp to <4 x i32>
299 ret <4 x i32> %sext
300}
Stephen Lind24ab202013-07-14 06:24:09 +0000301; CHECK-LABEL: v4si32_cmp_eq:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000302; CHECK: vcmpequw 2, 2, 3
303
304define <4 x i32> @v4si32_cmp_ne(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
305entry:
306 %cmp = icmp ne <4 x i32> %x, %y
307 %sext = sext <4 x i1> %cmp to <4 x i32>
308 ret <4 x i32> %sext
309}
Stephen Lind24ab202013-07-14 06:24:09 +0000310; CHECK-LABEL: v4si32_cmp_ne:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000311; CHECK: vcmpequw [[RCMP:[0-9]+]], 2, 3
312; CHECK-NEXT: vnor 2, [[RCMP]], [[RCMP]]
313
314define <4 x i32> @v4si32_cmp_le(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
315entry:
316 %cmp = icmp sle <4 x i32> %x, %y
317 %sext = sext <4 x i1> %cmp to <4 x i32>
318 ret <4 x i32> %sext
319}
Stephen Lind24ab202013-07-14 06:24:09 +0000320; CHECK-LABEL: v4si32_cmp_le:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000321; CHECK: vcmpgtsw [[RET:[0-9]+]], 2, 3
322; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000323
324define <4 x i32> @v4ui32_cmp_le(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
325entry:
326 %cmp = icmp ule <4 x i32> %x, %y
327 %sext = sext <4 x i1> %cmp to <4 x i32>
328 ret <4 x i32> %sext
329}
Stephen Lind24ab202013-07-14 06:24:09 +0000330; CHECK-LABEL: v4ui32_cmp_le:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000331; CHECK: vcmpgtuw [[RET:[0-9]+]], 2, 3
332; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000333
334define <4 x i32> @v4si32_cmp_lt(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
335entry:
336 %cmp = icmp slt <4 x i32> %x, %y
337 %sext = sext <4 x i1> %cmp to <4 x i32>
338 ret <4 x i32> %sext
339}
Stephen Lind24ab202013-07-14 06:24:09 +0000340; CHECK-LABEL: v4si32_cmp_lt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000341; CHECK: vcmpgtsw 2, 3, 2
342
343define <4 x i32> @v4ui32_cmp_lt(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
344entry:
345 %cmp = icmp ult <4 x i32> %x, %y
346 %sext = sext <4 x i1> %cmp to <4 x i32>
347 ret <4 x i32> %sext
348}
Stephen Lind24ab202013-07-14 06:24:09 +0000349; CHECK-LABEL: v4ui32_cmp_lt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000350; CHECK: vcmpgtuw 2, 3, 2
351
352define <4 x i32> @v4si32_cmp_gt(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
353entry:
354 %cmp = icmp sgt <4 x i32> %x, %y
355 %sext = sext <4 x i1> %cmp to <4 x i32>
356 ret <4 x i32> %sext
357}
Stephen Lind24ab202013-07-14 06:24:09 +0000358; CHECK-LABEL: v4si32_cmp_gt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000359; CHECK: vcmpgtsw 2, 2, 3
360
361define <4 x i32> @v4ui32_cmp_gt(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
362entry:
363 %cmp = icmp ugt <4 x i32> %x, %y
364 %sext = sext <4 x i1> %cmp to <4 x i32>
365 ret <4 x i32> %sext
366}
Stephen Lind24ab202013-07-14 06:24:09 +0000367; CHECK-LABEL: v4ui32_cmp_gt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000368; CHECK: vcmpgtuw 2, 2, 3
369
370define <4 x i32> @v4si32_cmp_ge(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
371entry:
372 %cmp = icmp sge <4 x i32> %x, %y
373 %sext = sext <4 x i1> %cmp to <4 x i32>
374 ret <4 x i32> %sext
375}
Stephen Lind24ab202013-07-14 06:24:09 +0000376; CHECK-LABEL: v4si32_cmp_ge:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000377; CHECK: vcmpgtsw [[RET:[0-9]+]], 3, 2
378; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000379
380define <4 x i32> @v4ui32_cmp_ge(<4 x i32> %x, <4 x i32> %y) nounwind readnone {
381entry:
382 %cmp = icmp uge <4 x i32> %x, %y
383 %sext = sext <4 x i1> %cmp to <4 x i32>
384 ret <4 x i32> %sext
385}
Stephen Lind24ab202013-07-14 06:24:09 +0000386; CHECK-LABEL: v4ui32_cmp_ge:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000387; CHECK: vcmpgtuw [[RET:[0-9]+]], 3, 2
388; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000389
390
391define <8 x i32> @v8si32_cmp(<8 x i32> %x, <8 x i32> %y) nounwind readnone {
392 %cmp = icmp eq <8 x i32> %x, %y
393 %sext = sext <8 x i1> %cmp to <8 x i32>
394 ret <8 x i32> %sext
395}
Stephen Lind24ab202013-07-14 06:24:09 +0000396; CHECK-LABEL: v8si32_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000397; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
398; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
399
400
401define <16 x i32> @v16si32_cmp(<16 x i32> %x, <16 x i32> %y) nounwind readnone {
402 %cmp = icmp eq <16 x i32> %x, %y
403 %sext = sext <16 x i1> %cmp to <16 x i32>
404 ret <16 x i32> %sext
405}
Stephen Lind24ab202013-07-14 06:24:09 +0000406; CHECK-LABEL: v16si32_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000407; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
408; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
409; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
410; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
411
412
413define <32 x i32> @v32si32_cmp(<32 x i32> %x, <32 x i32> %y) nounwind readnone {
414 %cmp = icmp eq <32 x i32> %x, %y
415 %sext = sext <32 x i1> %cmp to <32 x i32>
416 ret <32 x i32> %sext
417}
Stephen Lind24ab202013-07-14 06:24:09 +0000418; CHECK-LABEL: v32si32_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000419; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
420; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
421; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
422; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
423; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
424; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
425; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
426; CHECK: vcmpequw {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
427
428
429define <2 x float> @v2f32_cmp(<2 x float> %x, <2 x float> %y) nounwind readnone {
430entry:
431 %cmp = fcmp oeq <2 x float> %x, %y
432 %sext = sext <2 x i1> %cmp to <2 x i32>
433 %0 = bitcast <2 x i32> %sext to <2 x float>
434 ret <2 x float> %0
435}
Stephen Lind24ab202013-07-14 06:24:09 +0000436; CHECK-LABEL: v2f32_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000437; CHECK: vcmpeqfp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
438
439
Alp Toker1d099d92014-06-19 19:41:26 +0000440; Additional tests for v4f32 since it is a altivec native type
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000441
442define <4 x float> @v4f32_cmp_eq(<4 x float> %x, <4 x float> %y) nounwind readnone {
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000443entry:
444 %cmp = fcmp oeq <4 x float> %x, %y
445 %sext = sext <4 x i1> %cmp to <4 x i32>
446 %0 = bitcast <4 x i32> %sext to <4 x float>
447 ret <4 x float> %0
448}
Stephen Lind24ab202013-07-14 06:24:09 +0000449; CHECK-LABEL: v4f32_cmp_eq:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000450; CHECK: vcmpeqfp 2, 2, 3
451
452define <4 x float> @v4f32_cmp_ne(<4 x float> %x, <4 x float> %y) nounwind readnone {
453entry:
454 %cmp = fcmp une <4 x float> %x, %y
455 %sext = sext <4 x i1> %cmp to <4 x i32>
456 %0 = bitcast <4 x i32> %sext to <4 x float>
457 ret <4 x float> %0
458}
Stephen Lind24ab202013-07-14 06:24:09 +0000459; CHECK-LABEL: v4f32_cmp_ne:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000460; CHECK: vcmpeqfp [[RET:[0-9]+]], 2, 3
461; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
462
463define <4 x float> @v4f32_cmp_le(<4 x float> %x, <4 x float> %y) nounwind readnone {
464entry:
465 %cmp = fcmp ole <4 x float> %x, %y
466 %sext = sext <4 x i1> %cmp to <4 x i32>
467 %0 = bitcast <4 x i32> %sext to <4 x float>
468 ret <4 x float> %0
469}
Stephen Lind24ab202013-07-14 06:24:09 +0000470; CHECK-LABEL: v4f32_cmp_le:
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000471; CHECK: vcmpgefp 2, 3, 2
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000472
473define <4 x float> @v4f32_cmp_lt(<4 x float> %x, <4 x float> %y) nounwind readnone {
474entry:
475 %cmp = fcmp olt <4 x float> %x, %y
476 %sext = sext <4 x i1> %cmp to <4 x i32>
477 %0 = bitcast <4 x i32> %sext to <4 x float>
478 ret <4 x float> %0
479}
Stephen Lind24ab202013-07-14 06:24:09 +0000480; CHECK-LABEL: v4f32_cmp_lt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000481; CHECK: vcmpgtfp 2, 3, 2
482
483define <4 x float> @v4f32_cmp_ge(<4 x float> %x, <4 x float> %y) nounwind readnone {
484entry:
485 %cmp = fcmp oge <4 x float> %x, %y
486 %sext = sext <4 x i1> %cmp to <4 x i32>
487 %0 = bitcast <4 x i32> %sext to <4 x float>
488 ret <4 x float> %0
489}
Stephen Lind24ab202013-07-14 06:24:09 +0000490; CHECK-LABEL: v4f32_cmp_ge:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000491; CHECK: vcmpgefp 2, 2, 3
492
493define <4 x float> @v4f32_cmp_gt(<4 x float> %x, <4 x float> %y) nounwind readnone {
494entry:
495 %cmp = fcmp ogt <4 x float> %x, %y
496 %sext = sext <4 x i1> %cmp to <4 x i32>
497 %0 = bitcast <4 x i32> %sext to <4 x float>
498 ret <4 x float> %0
499}
Stephen Lind24ab202013-07-14 06:24:09 +0000500; CHECK-LABEL: v4f32_cmp_gt:
Adhemerval Zanella56775e02012-10-30 13:50:19 +0000501; CHECK: vcmpgtfp 2, 2, 3
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000502
Ulrich Weigandc4cc7fe2014-08-04 13:13:57 +0000503define <4 x float> @v4f32_cmp_ule(<4 x float> %x, <4 x float> %y) nounwind readnone {
504entry:
505 %cmp = fcmp ule <4 x float> %x, %y
506 %sext = sext <4 x i1> %cmp to <4 x i32>
507 %0 = bitcast <4 x i32> %sext to <4 x float>
508 ret <4 x float> %0
509}
510; CHECK-LABEL: v4f32_cmp_ule:
511; CHECK: vcmpgtfp [[RET:[0-9]+]], 2, 3
512; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
513
514define <4 x float> @v4f32_cmp_ult(<4 x float> %x, <4 x float> %y) nounwind readnone {
515entry:
516 %cmp = fcmp ult <4 x float> %x, %y
517 %sext = sext <4 x i1> %cmp to <4 x i32>
518 %0 = bitcast <4 x i32> %sext to <4 x float>
519 ret <4 x float> %0
520}
521; CHECK-LABEL: v4f32_cmp_ult:
522; CHECK: vcmpgefp [[RET:[0-9]+]], 2, 3
523; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
524
525define <4 x float> @v4f32_cmp_uge(<4 x float> %x, <4 x float> %y) nounwind readnone {
526entry:
527 %cmp = fcmp uge <4 x float> %x, %y
528 %sext = sext <4 x i1> %cmp to <4 x i32>
529 %0 = bitcast <4 x i32> %sext to <4 x float>
530 ret <4 x float> %0
531}
532; CHECK-LABEL: v4f32_cmp_uge:
533; CHECK: vcmpgtfp [[RET:[0-9]+]], 3, 2
534; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
535
536define <4 x float> @v4f32_cmp_ugt(<4 x float> %x, <4 x float> %y) nounwind readnone {
537entry:
538 %cmp = fcmp ugt <4 x float> %x, %y
539 %sext = sext <4 x i1> %cmp to <4 x i32>
540 %0 = bitcast <4 x i32> %sext to <4 x float>
541 ret <4 x float> %0
542}
543; CHECK-LABEL: v4f32_cmp_ugt:
544; CHECK: vcmpgefp [[RET:[0-9]+]], 3, 2
545; CHECK-NEXT: vnor 2, [[RET]], [[RET]]
546
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000547
548define <8 x float> @v8f32_cmp(<8 x float> %x, <8 x float> %y) nounwind readnone {
549entry:
550 %cmp = fcmp oeq <8 x float> %x, %y
551 %sext = sext <8 x i1> %cmp to <8 x i32>
552 %0 = bitcast <8 x i32> %sext to <8 x float>
553 ret <8 x float> %0
554}
Stephen Lind24ab202013-07-14 06:24:09 +0000555; CHECK-LABEL: v8f32_cmp:
Adhemerval Zanellafe3f7932012-10-08 18:59:53 +0000556; CHECK: vcmpeqfp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}
557; CHECK: vcmpeqfp {{[0-9]+}}, {{[0-9]+}}, {{[0-9]+}}