1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
3 define <8 x i8> @cmeq8xi8(<8 x i8> %A, <8 x i8> %B) {
4 ; CHECK-LABEL: cmeq8xi8:
5 ; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
6 %tmp3 = icmp eq <8 x i8> %A, %B;
7 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
11 define <16 x i8> @cmeq16xi8(<16 x i8> %A, <16 x i8> %B) {
12 ; CHECK-LABEL: cmeq16xi8:
13 ; CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
14 %tmp3 = icmp eq <16 x i8> %A, %B;
15 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
19 define <4 x i16> @cmeq4xi16(<4 x i16> %A, <4 x i16> %B) {
20 ; CHECK-LABEL: cmeq4xi16:
21 ; CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
22 %tmp3 = icmp eq <4 x i16> %A, %B;
23 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
27 define <8 x i16> @cmeq8xi16(<8 x i16> %A, <8 x i16> %B) {
28 ; CHECK-LABEL: cmeq8xi16:
29 ; CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
30 %tmp3 = icmp eq <8 x i16> %A, %B;
31 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
35 define <2 x i32> @cmeq2xi32(<2 x i32> %A, <2 x i32> %B) {
36 ; CHECK-LABEL: cmeq2xi32:
37 ; CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
38 %tmp3 = icmp eq <2 x i32> %A, %B;
39 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
43 define <4 x i32> @cmeq4xi32(<4 x i32> %A, <4 x i32> %B) {
44 ; CHECK-LABEL: cmeq4xi32:
45 ; CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
46 %tmp3 = icmp eq <4 x i32> %A, %B;
47 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
51 define <2 x i64> @cmeq2xi64(<2 x i64> %A, <2 x i64> %B) {
52 ; CHECK-LABEL: cmeq2xi64:
53 ; CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
54 %tmp3 = icmp eq <2 x i64> %A, %B;
55 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
59 define <8 x i8> @cmne8xi8(<8 x i8> %A, <8 x i8> %B) {
60 ; CHECK-LABEL: cmne8xi8:
61 ; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
62 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
63 %tmp3 = icmp ne <8 x i8> %A, %B;
64 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
68 define <16 x i8> @cmne16xi8(<16 x i8> %A, <16 x i8> %B) {
69 ; CHECK-LABEL: cmne16xi8:
70 ; CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
71 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
72 %tmp3 = icmp ne <16 x i8> %A, %B;
73 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
77 define <4 x i16> @cmne4xi16(<4 x i16> %A, <4 x i16> %B) {
78 ; CHECK-LABEL: cmne4xi16:
79 ; CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
80 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
81 %tmp3 = icmp ne <4 x i16> %A, %B;
82 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
86 define <8 x i16> @cmne8xi16(<8 x i16> %A, <8 x i16> %B) {
87 ; CHECK-LABEL: cmne8xi16:
88 ; CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
89 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
90 %tmp3 = icmp ne <8 x i16> %A, %B;
91 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
95 define <2 x i32> @cmne2xi32(<2 x i32> %A, <2 x i32> %B) {
96 ; CHECK-LABEL: cmne2xi32:
97 ; CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
98 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
99 %tmp3 = icmp ne <2 x i32> %A, %B;
100 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
104 define <4 x i32> @cmne4xi32(<4 x i32> %A, <4 x i32> %B) {
105 ; CHECK-LABEL: cmne4xi32:
106 ; CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
107 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
108 %tmp3 = icmp ne <4 x i32> %A, %B;
109 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
113 define <2 x i64> @cmne2xi64(<2 x i64> %A, <2 x i64> %B) {
114 ; CHECK-LABEL: cmne2xi64:
115 ; CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
116 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
117 %tmp3 = icmp ne <2 x i64> %A, %B;
118 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
122 define <8 x i8> @cmgt8xi8(<8 x i8> %A, <8 x i8> %B) {
123 ; CHECK-LABEL: cmgt8xi8:
124 ; CHECK: cmgt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
125 %tmp3 = icmp sgt <8 x i8> %A, %B;
126 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
130 define <16 x i8> @cmgt16xi8(<16 x i8> %A, <16 x i8> %B) {
131 ; CHECK-LABEL: cmgt16xi8:
132 ; CHECK: cmgt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
133 %tmp3 = icmp sgt <16 x i8> %A, %B;
134 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
138 define <4 x i16> @cmgt4xi16(<4 x i16> %A, <4 x i16> %B) {
139 ; CHECK-LABEL: cmgt4xi16:
140 ; CHECK: cmgt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
141 %tmp3 = icmp sgt <4 x i16> %A, %B;
142 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
146 define <8 x i16> @cmgt8xi16(<8 x i16> %A, <8 x i16> %B) {
147 ; CHECK-LABEL: cmgt8xi16:
148 ; CHECK: cmgt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
149 %tmp3 = icmp sgt <8 x i16> %A, %B;
150 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
154 define <2 x i32> @cmgt2xi32(<2 x i32> %A, <2 x i32> %B) {
155 ; CHECK-LABEL: cmgt2xi32:
156 ; CHECK: cmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
157 %tmp3 = icmp sgt <2 x i32> %A, %B;
158 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
162 define <4 x i32> @cmgt4xi32(<4 x i32> %A, <4 x i32> %B) {
163 ; CHECK-LABEL: cmgt4xi32:
164 ; CHECK: cmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
165 %tmp3 = icmp sgt <4 x i32> %A, %B;
166 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
170 define <2 x i64> @cmgt2xi64(<2 x i64> %A, <2 x i64> %B) {
171 ; CHECK-LABEL: cmgt2xi64:
172 ; CHECK: cmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
173 %tmp3 = icmp sgt <2 x i64> %A, %B;
174 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
178 define <8 x i8> @cmlt8xi8(<8 x i8> %A, <8 x i8> %B) {
179 ; CHECK-LABEL: cmlt8xi8:
180 ; Using registers other than v0, v1 are possible, but would be odd.
181 ; LT implemented as GT, so check reversed operands.
182 ; CHECK: cmgt {{v[0-9]+}}.8b, v1.8b, v0.8b
183 %tmp3 = icmp slt <8 x i8> %A, %B;
184 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
188 define <16 x i8> @cmlt16xi8(<16 x i8> %A, <16 x i8> %B) {
189 ; CHECK-LABEL: cmlt16xi8:
190 ; Using registers other than v0, v1 are possible, but would be odd.
191 ; LT implemented as GT, so check reversed operands.
192 ; CHECK: cmgt {{v[0-9]+}}.16b, v1.16b, v0.16b
193 %tmp3 = icmp slt <16 x i8> %A, %B;
194 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
198 define <4 x i16> @cmlt4xi16(<4 x i16> %A, <4 x i16> %B) {
199 ; CHECK-LABEL: cmlt4xi16:
200 ; Using registers other than v0, v1 are possible, but would be odd.
201 ; LT implemented as GT, so check reversed operands.
202 ; CHECK: cmgt {{v[0-9]+}}.4h, v1.4h, v0.4h
203 %tmp3 = icmp slt <4 x i16> %A, %B;
204 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
208 define <8 x i16> @cmlt8xi16(<8 x i16> %A, <8 x i16> %B) {
209 ; CHECK-LABEL: cmlt8xi16:
210 ; Using registers other than v0, v1 are possible, but would be odd.
211 ; LT implemented as GT, so check reversed operands.
212 ; CHECK: cmgt {{v[0-9]+}}.8h, v1.8h, v0.8h
213 %tmp3 = icmp slt <8 x i16> %A, %B;
214 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
218 define <2 x i32> @cmlt2xi32(<2 x i32> %A, <2 x i32> %B) {
219 ; CHECK-LABEL: cmlt2xi32:
220 ; Using registers other than v0, v1 are possible, but would be odd.
221 ; LT implemented as GT, so check reversed operands.
222 ; CHECK: cmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
223 %tmp3 = icmp slt <2 x i32> %A, %B;
224 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
228 define <4 x i32> @cmlt4xi32(<4 x i32> %A, <4 x i32> %B) {
229 ; CHECK-LABEL: cmlt4xi32:
230 ; Using registers other than v0, v1 are possible, but would be odd.
231 ; LT implemented as GT, so check reversed operands.
232 ; CHECK: cmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
233 %tmp3 = icmp slt <4 x i32> %A, %B;
234 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
238 define <2 x i64> @cmlt2xi64(<2 x i64> %A, <2 x i64> %B) {
239 ; CHECK-LABEL: cmlt2xi64:
240 ; Using registers other than v0, v1 are possible, but would be odd.
241 ; LT implemented as GT, so check reversed operands.
242 ; CHECK: cmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
243 %tmp3 = icmp slt <2 x i64> %A, %B;
244 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
248 define <8 x i8> @cmge8xi8(<8 x i8> %A, <8 x i8> %B) {
249 ; CHECK-LABEL: cmge8xi8:
250 ; CHECK: cmge {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
251 %tmp3 = icmp sge <8 x i8> %A, %B;
252 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
256 define <16 x i8> @cmge16xi8(<16 x i8> %A, <16 x i8> %B) {
257 ; CHECK-LABEL: cmge16xi8:
258 ; CHECK: cmge {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
259 %tmp3 = icmp sge <16 x i8> %A, %B;
260 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
264 define <4 x i16> @cmge4xi16(<4 x i16> %A, <4 x i16> %B) {
265 ; CHECK-LABEL: cmge4xi16:
266 ; CHECK: cmge {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
267 %tmp3 = icmp sge <4 x i16> %A, %B;
268 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
272 define <8 x i16> @cmge8xi16(<8 x i16> %A, <8 x i16> %B) {
273 ; CHECK-LABEL: cmge8xi16:
274 ; CHECK: cmge {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
275 %tmp3 = icmp sge <8 x i16> %A, %B;
276 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
280 define <2 x i32> @cmge2xi32(<2 x i32> %A, <2 x i32> %B) {
281 ; CHECK-LABEL: cmge2xi32:
282 ; CHECK: cmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
283 %tmp3 = icmp sge <2 x i32> %A, %B;
284 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
288 define <4 x i32> @cmge4xi32(<4 x i32> %A, <4 x i32> %B) {
289 ; CHECK-LABEL: cmge4xi32:
290 ; CHECK: cmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
291 %tmp3 = icmp sge <4 x i32> %A, %B;
292 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
296 define <2 x i64> @cmge2xi64(<2 x i64> %A, <2 x i64> %B) {
297 ; CHECK-LABEL: cmge2xi64:
298 ; CHECK: cmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
299 %tmp3 = icmp sge <2 x i64> %A, %B;
300 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
304 define <8 x i8> @cmle8xi8(<8 x i8> %A, <8 x i8> %B) {
305 ; CHECK-LABEL: cmle8xi8:
306 ; Using registers other than v0, v1 are possible, but would be odd.
307 ; LE implemented as GE, so check reversed operands.
308 ; CHECK: cmge {{v[0-9]+}}.8b, v1.8b, v0.8b
309 %tmp3 = icmp sle <8 x i8> %A, %B;
310 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
314 define <16 x i8> @cmle16xi8(<16 x i8> %A, <16 x i8> %B) {
315 ; CHECK-LABEL: cmle16xi8:
316 ; Using registers other than v0, v1 are possible, but would be odd.
317 ; LE implemented as GE, so check reversed operands.
318 ; CHECK: cmge {{v[0-9]+}}.16b, v1.16b, v0.16b
319 %tmp3 = icmp sle <16 x i8> %A, %B;
320 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
324 define <4 x i16> @cmle4xi16(<4 x i16> %A, <4 x i16> %B) {
325 ; CHECK-LABEL: cmle4xi16:
326 ; Using registers other than v0, v1 are possible, but would be odd.
327 ; LE implemented as GE, so check reversed operands.
328 ; CHECK: cmge {{v[0-9]+}}.4h, v1.4h, v0.4h
329 %tmp3 = icmp sle <4 x i16> %A, %B;
330 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
334 define <8 x i16> @cmle8xi16(<8 x i16> %A, <8 x i16> %B) {
335 ; CHECK-LABEL: cmle8xi16:
336 ; Using registers other than v0, v1 are possible, but would be odd.
337 ; LE implemented as GE, so check reversed operands.
338 ; CHECK: cmge {{v[0-9]+}}.8h, v1.8h, v0.8h
339 %tmp3 = icmp sle <8 x i16> %A, %B;
340 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
344 define <2 x i32> @cmle2xi32(<2 x i32> %A, <2 x i32> %B) {
345 ; CHECK-LABEL: cmle2xi32:
346 ; Using registers other than v0, v1 are possible, but would be odd.
347 ; LE implemented as GE, so check reversed operands.
348 ; CHECK: cmge {{v[0-9]+}}.2s, v1.2s, v0.2s
349 %tmp3 = icmp sle <2 x i32> %A, %B;
350 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
354 define <4 x i32> @cmle4xi32(<4 x i32> %A, <4 x i32> %B) {
355 ; CHECK-LABEL: cmle4xi32:
356 ; Using registers other than v0, v1 are possible, but would be odd.
357 ; LE implemented as GE, so check reversed operands.
358 ; CHECK: cmge {{v[0-9]+}}.4s, v1.4s, v0.4s
359 %tmp3 = icmp sle <4 x i32> %A, %B;
360 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
364 define <2 x i64> @cmle2xi64(<2 x i64> %A, <2 x i64> %B) {
365 ; CHECK-LABEL: cmle2xi64:
366 ; Using registers other than v0, v1 are possible, but would be odd.
367 ; LE implemented as GE, so check reversed operands.
368 ; CHECK: cmge {{v[0-9]+}}.2d, v1.2d, v0.2d
369 %tmp3 = icmp sle <2 x i64> %A, %B;
370 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
374 define <8 x i8> @cmhi8xi8(<8 x i8> %A, <8 x i8> %B) {
375 ; CHECK-LABEL: cmhi8xi8:
376 ; CHECK: cmhi {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
377 %tmp3 = icmp ugt <8 x i8> %A, %B;
378 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
382 define <16 x i8> @cmhi16xi8(<16 x i8> %A, <16 x i8> %B) {
383 ; CHECK-LABEL: cmhi16xi8:
384 ; CHECK: cmhi {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
385 %tmp3 = icmp ugt <16 x i8> %A, %B;
386 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
390 define <4 x i16> @cmhi4xi16(<4 x i16> %A, <4 x i16> %B) {
391 ; CHECK-LABEL: cmhi4xi16:
392 ; CHECK: cmhi {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
393 %tmp3 = icmp ugt <4 x i16> %A, %B;
394 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
398 define <8 x i16> @cmhi8xi16(<8 x i16> %A, <8 x i16> %B) {
399 ; CHECK-LABEL: cmhi8xi16:
400 ; CHECK: cmhi {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
401 %tmp3 = icmp ugt <8 x i16> %A, %B;
402 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
406 define <2 x i32> @cmhi2xi32(<2 x i32> %A, <2 x i32> %B) {
407 ; CHECK-LABEL: cmhi2xi32:
408 ; CHECK: cmhi {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
409 %tmp3 = icmp ugt <2 x i32> %A, %B;
410 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
414 define <4 x i32> @cmhi4xi32(<4 x i32> %A, <4 x i32> %B) {
415 ; CHECK-LABEL: cmhi4xi32:
416 ; CHECK: cmhi {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
417 %tmp3 = icmp ugt <4 x i32> %A, %B;
418 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
422 define <2 x i64> @cmhi2xi64(<2 x i64> %A, <2 x i64> %B) {
423 ; CHECK-LABEL: cmhi2xi64:
424 ; CHECK: cmhi {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
425 %tmp3 = icmp ugt <2 x i64> %A, %B;
426 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
430 define <8 x i8> @cmlo8xi8(<8 x i8> %A, <8 x i8> %B) {
431 ; CHECK-LABEL: cmlo8xi8:
432 ; Using registers other than v0, v1 are possible, but would be odd.
433 ; LO implemented as HI, so check reversed operands.
434 ; CHECK: cmhi {{v[0-9]+}}.8b, v1.8b, v0.8b
435 %tmp3 = icmp ult <8 x i8> %A, %B;
436 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
440 define <16 x i8> @cmlo16xi8(<16 x i8> %A, <16 x i8> %B) {
441 ; CHECK-LABEL: cmlo16xi8:
442 ; Using registers other than v0, v1 are possible, but would be odd.
443 ; LO implemented as HI, so check reversed operands.
444 ; CHECK: cmhi {{v[0-9]+}}.16b, v1.16b, v0.16b
445 %tmp3 = icmp ult <16 x i8> %A, %B;
446 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
450 define <4 x i16> @cmlo4xi16(<4 x i16> %A, <4 x i16> %B) {
451 ; CHECK-LABEL: cmlo4xi16:
452 ; Using registers other than v0, v1 are possible, but would be odd.
453 ; LO implemented as HI, so check reversed operands.
454 ; CHECK: cmhi {{v[0-9]+}}.4h, v1.4h, v0.4h
455 %tmp3 = icmp ult <4 x i16> %A, %B;
456 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
460 define <8 x i16> @cmlo8xi16(<8 x i16> %A, <8 x i16> %B) {
461 ; CHECK-LABEL: cmlo8xi16:
462 ; Using registers other than v0, v1 are possible, but would be odd.
463 ; LO implemented as HI, so check reversed operands.
464 ; CHECK: cmhi {{v[0-9]+}}.8h, v1.8h, v0.8h
465 %tmp3 = icmp ult <8 x i16> %A, %B;
466 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
470 define <2 x i32> @cmlo2xi32(<2 x i32> %A, <2 x i32> %B) {
471 ; CHECK-LABEL: cmlo2xi32:
472 ; Using registers other than v0, v1 are possible, but would be odd.
473 ; LO implemented as HI, so check reversed operands.
474 ; CHECK: cmhi {{v[0-9]+}}.2s, v1.2s, v0.2s
475 %tmp3 = icmp ult <2 x i32> %A, %B;
476 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
480 define <4 x i32> @cmlo4xi32(<4 x i32> %A, <4 x i32> %B) {
481 ; CHECK-LABEL: cmlo4xi32:
482 ; Using registers other than v0, v1 are possible, but would be odd.
483 ; LO implemented as HI, so check reversed operands.
484 ; CHECK: cmhi {{v[0-9]+}}.4s, v1.4s, v0.4s
485 %tmp3 = icmp ult <4 x i32> %A, %B;
486 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
490 define <2 x i64> @cmlo2xi64(<2 x i64> %A, <2 x i64> %B) {
491 ; CHECK-LABEL: cmlo2xi64:
492 ; Using registers other than v0, v1 are possible, but would be odd.
493 ; LO implemented as HI, so check reversed operands.
494 ; CHECK: cmhi {{v[0-9]+}}.2d, v1.2d, v0.2d
495 %tmp3 = icmp ult <2 x i64> %A, %B;
496 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
500 define <8 x i8> @cmhs8xi8(<8 x i8> %A, <8 x i8> %B) {
501 ; CHECK-LABEL: cmhs8xi8:
502 ; CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
503 %tmp3 = icmp uge <8 x i8> %A, %B;
504 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
508 define <16 x i8> @cmhs16xi8(<16 x i8> %A, <16 x i8> %B) {
509 ; CHECK-LABEL: cmhs16xi8:
510 ; CHECK: cmhs {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
511 %tmp3 = icmp uge <16 x i8> %A, %B;
512 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
516 define <4 x i16> @cmhs4xi16(<4 x i16> %A, <4 x i16> %B) {
517 ; CHECK-LABEL: cmhs4xi16:
518 ; CHECK: cmhs {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
519 %tmp3 = icmp uge <4 x i16> %A, %B;
520 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
524 define <8 x i16> @cmhs8xi16(<8 x i16> %A, <8 x i16> %B) {
525 ; CHECK-LABEL: cmhs8xi16:
526 ; CHECK: cmhs {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
527 %tmp3 = icmp uge <8 x i16> %A, %B;
528 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
532 define <2 x i32> @cmhs2xi32(<2 x i32> %A, <2 x i32> %B) {
533 ; CHECK-LABEL: cmhs2xi32:
534 ; CHECK: cmhs {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
535 %tmp3 = icmp uge <2 x i32> %A, %B;
536 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
540 define <4 x i32> @cmhs4xi32(<4 x i32> %A, <4 x i32> %B) {
541 ; CHECK-LABEL: cmhs4xi32:
542 ; CHECK: cmhs {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
543 %tmp3 = icmp uge <4 x i32> %A, %B;
544 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
548 define <2 x i64> @cmhs2xi64(<2 x i64> %A, <2 x i64> %B) {
549 ; CHECK-LABEL: cmhs2xi64:
550 ; CHECK: cmhs {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
551 %tmp3 = icmp uge <2 x i64> %A, %B;
552 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
556 define <8 x i8> @cmls8xi8(<8 x i8> %A, <8 x i8> %B) {
557 ; CHECK-LABEL: cmls8xi8:
558 ; Using registers other than v0, v1 are possible, but would be odd.
559 ; LS implemented as HS, so check reversed operands.
560 ; CHECK: cmhs {{v[0-9]+}}.8b, v1.8b, v0.8b
561 %tmp3 = icmp ule <8 x i8> %A, %B;
562 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
566 define <16 x i8> @cmls16xi8(<16 x i8> %A, <16 x i8> %B) {
567 ; CHECK-LABEL: cmls16xi8:
568 ; Using registers other than v0, v1 are possible, but would be odd.
569 ; LS implemented as HS, so check reversed operands.
570 ; CHECK: cmhs {{v[0-9]+}}.16b, v1.16b, v0.16b
571 %tmp3 = icmp ule <16 x i8> %A, %B;
572 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
576 define <4 x i16> @cmls4xi16(<4 x i16> %A, <4 x i16> %B) {
577 ; CHECK-LABEL: cmls4xi16:
578 ; Using registers other than v0, v1 are possible, but would be odd.
579 ; LS implemented as HS, so check reversed operands.
580 ; CHECK: cmhs {{v[0-9]+}}.4h, v1.4h, v0.4h
581 %tmp3 = icmp ule <4 x i16> %A, %B;
582 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
586 define <8 x i16> @cmls8xi16(<8 x i16> %A, <8 x i16> %B) {
587 ; CHECK-LABEL: cmls8xi16:
588 ; Using registers other than v0, v1 are possible, but would be odd.
589 ; LS implemented as HS, so check reversed operands.
590 ; CHECK: cmhs {{v[0-9]+}}.8h, v1.8h, v0.8h
591 %tmp3 = icmp ule <8 x i16> %A, %B;
592 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
596 define <2 x i32> @cmls2xi32(<2 x i32> %A, <2 x i32> %B) {
597 ; CHECK-LABEL: cmls2xi32:
598 ; Using registers other than v0, v1 are possible, but would be odd.
599 ; LS implemented as HS, so check reversed operands.
600 ; CHECK: cmhs {{v[0-9]+}}.2s, v1.2s, v0.2s
601 %tmp3 = icmp ule <2 x i32> %A, %B;
602 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
606 define <4 x i32> @cmls4xi32(<4 x i32> %A, <4 x i32> %B) {
607 ; CHECK-LABEL: cmls4xi32:
608 ; Using registers other than v0, v1 are possible, but would be odd.
609 ; LS implemented as HS, so check reversed operands.
610 ; CHECK: cmhs {{v[0-9]+}}.4s, v1.4s, v0.4s
611 %tmp3 = icmp ule <4 x i32> %A, %B;
612 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
616 define <2 x i64> @cmls2xi64(<2 x i64> %A, <2 x i64> %B) {
617 ; CHECK-LABEL: cmls2xi64:
618 ; Using registers other than v0, v1 are possible, but would be odd.
619 ; LS implemented as HS, so check reversed operands.
620 ; CHECK: cmhs {{v[0-9]+}}.2d, v1.2d, v0.2d
621 %tmp3 = icmp ule <2 x i64> %A, %B;
622 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
626 define <8 x i8> @cmtst8xi8(<8 x i8> %A, <8 x i8> %B) {
627 ; CHECK-LABEL: cmtst8xi8:
628 ; CHECK: cmtst {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
629 %tmp3 = and <8 x i8> %A, %B
630 %tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
631 %tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
635 define <16 x i8> @cmtst16xi8(<16 x i8> %A, <16 x i8> %B) {
636 ; CHECK-LABEL: cmtst16xi8:
637 ; CHECK: cmtst {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
638 %tmp3 = and <16 x i8> %A, %B
639 %tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
640 %tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
644 define <4 x i16> @cmtst4xi16(<4 x i16> %A, <4 x i16> %B) {
645 ; CHECK-LABEL: cmtst4xi16:
646 ; CHECK: cmtst {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
647 %tmp3 = and <4 x i16> %A, %B
648 %tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
649 %tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
653 define <8 x i16> @cmtst8xi16(<8 x i16> %A, <8 x i16> %B) {
654 ; CHECK-LABEL: cmtst8xi16:
655 ; CHECK: cmtst {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
656 %tmp3 = and <8 x i16> %A, %B
657 %tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
658 %tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
662 define <2 x i32> @cmtst2xi32(<2 x i32> %A, <2 x i32> %B) {
663 ; CHECK-LABEL: cmtst2xi32:
664 ; CHECK: cmtst {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
665 %tmp3 = and <2 x i32> %A, %B
666 %tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
667 %tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
671 define <4 x i32> @cmtst4xi32(<4 x i32> %A, <4 x i32> %B) {
672 ; CHECK-LABEL: cmtst4xi32:
673 ; CHECK: cmtst {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
674 %tmp3 = and <4 x i32> %A, %B
675 %tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
676 %tmp5 = sext <4 x i1> %tmp4 to <4 x i32>
680 define <2 x i64> @cmtst2xi64(<2 x i64> %A, <2 x i64> %B) {
681 ; CHECK-LABEL: cmtst2xi64:
682 ; CHECK: cmtst {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
683 %tmp3 = and <2 x i64> %A, %B
684 %tmp4 = icmp ne <2 x i64> %tmp3, zeroinitializer
685 %tmp5 = sext <2 x i1> %tmp4 to <2 x i64>
691 define <8 x i8> @cmeqz8xi8(<8 x i8> %A) {
692 ; CHECK-LABEL: cmeqz8xi8:
693 ; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #{{0x0|0}}
694 %tmp3 = icmp eq <8 x i8> %A, zeroinitializer;
695 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
699 define <16 x i8> @cmeqz16xi8(<16 x i8> %A) {
700 ; CHECK-LABEL: cmeqz16xi8:
701 ; CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #{{0x0|0}}
702 %tmp3 = icmp eq <16 x i8> %A, zeroinitializer;
703 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
707 define <4 x i16> @cmeqz4xi16(<4 x i16> %A) {
708 ; CHECK-LABEL: cmeqz4xi16:
709 ; CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #{{0x0|0}}
710 %tmp3 = icmp eq <4 x i16> %A, zeroinitializer;
711 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
715 define <8 x i16> @cmeqz8xi16(<8 x i16> %A) {
716 ; CHECK-LABEL: cmeqz8xi16:
717 ; CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #{{0x0|0}}
718 %tmp3 = icmp eq <8 x i16> %A, zeroinitializer;
719 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
723 define <2 x i32> @cmeqz2xi32(<2 x i32> %A) {
724 ; CHECK-LABEL: cmeqz2xi32:
725 ; CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0x0|0}}
726 %tmp3 = icmp eq <2 x i32> %A, zeroinitializer;
727 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
731 define <4 x i32> @cmeqz4xi32(<4 x i32> %A) {
732 ; CHECK-LABEL: cmeqz4xi32:
733 ; CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0x0|0}}
734 %tmp3 = icmp eq <4 x i32> %A, zeroinitializer;
735 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
739 define <2 x i64> @cmeqz2xi64(<2 x i64> %A) {
740 ; CHECK-LABEL: cmeqz2xi64:
741 ; CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0x0|0}}
742 %tmp3 = icmp eq <2 x i64> %A, zeroinitializer;
743 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
748 define <8 x i8> @cmgez8xi8(<8 x i8> %A) {
749 ; CHECK-LABEL: cmgez8xi8:
750 ; CHECK: cmge {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #{{0x0|0}}
751 %tmp3 = icmp sge <8 x i8> %A, zeroinitializer;
752 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
756 define <16 x i8> @cmgez16xi8(<16 x i8> %A) {
757 ; CHECK-LABEL: cmgez16xi8:
758 ; CHECK: cmge {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #{{0x0|0}}
759 %tmp3 = icmp sge <16 x i8> %A, zeroinitializer;
760 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
764 define <4 x i16> @cmgez4xi16(<4 x i16> %A) {
765 ; CHECK-LABEL: cmgez4xi16:
766 ; CHECK: cmge {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #{{0x0|0}}
767 %tmp3 = icmp sge <4 x i16> %A, zeroinitializer;
768 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
772 define <8 x i16> @cmgez8xi16(<8 x i16> %A) {
773 ; CHECK-LABEL: cmgez8xi16:
774 ; CHECK: cmge {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #{{0x0|0}}
775 %tmp3 = icmp sge <8 x i16> %A, zeroinitializer;
776 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
780 define <2 x i32> @cmgez2xi32(<2 x i32> %A) {
781 ; CHECK-LABEL: cmgez2xi32:
782 ; CHECK: cmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0x0|0}}
783 %tmp3 = icmp sge <2 x i32> %A, zeroinitializer;
784 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
788 define <4 x i32> @cmgez4xi32(<4 x i32> %A) {
789 ; CHECK-LABEL: cmgez4xi32:
790 ; CHECK: cmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0x0|0}}
791 %tmp3 = icmp sge <4 x i32> %A, zeroinitializer;
792 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
796 define <2 x i64> @cmgez2xi64(<2 x i64> %A) {
797 ; CHECK-LABEL: cmgez2xi64:
798 ; CHECK: cmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0x0|0}}
799 %tmp3 = icmp sge <2 x i64> %A, zeroinitializer;
800 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
805 define <8 x i8> @cmgez8xi8_alt(<8 x i8> %A) {
806 ; CHECK-LABEL: cmgez8xi8_alt:
807 ; CHECK: cmge {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #{{0x0|0}}
808 %sign = ashr <8 x i8> %A, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
809 %not = xor <8 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
813 define <16 x i8> @cmgez16xi8_alt(<16 x i8> %A) {
814 ; CHECK-LABEL: cmgez16xi8_alt:
815 ; CHECK: cmge {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #{{0x0|0}}
816 %sign = ashr <16 x i8> %A, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
817 %not = xor <16 x i8> %sign, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
821 define <4 x i16> @cmgez4xi16_alt(<4 x i16> %A) {
822 ; CHECK-LABEL: cmgez4xi16_alt:
823 ; CHECK: cmge {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #{{0x0|0}}
824 %sign = ashr <4 x i16> %A, <i16 15, i16 15, i16 15, i16 15>
825 %not = xor <4 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1>
829 define <8 x i16> @cmgez8xi16_alt(<8 x i16> %A) {
830 ; CHECK-LABEL: cmgez8xi16_alt:
831 ; CHECK: cmge {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #{{0x0|0}}
832 %sign = ashr <8 x i16> %A, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
833 %not = xor <8 x i16> %sign, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
837 define <2 x i32> @cmgez2xi32_alt(<2 x i32> %A) {
838 ; CHECK-LABEL: cmgez2xi32_alt:
839 ; CHECK: cmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0x0|0}}
840 %sign = ashr <2 x i32> %A, <i32 31, i32 31>
841 %not = xor <2 x i32> %sign, <i32 -1, i32 -1>
845 define <4 x i32> @cmgez4xi32_alt(<4 x i32> %A) {
846 ; CHECK-LABEL: cmgez4xi32_alt:
847 ; CHECK: cmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0x0|0}}
848 %sign = ashr <4 x i32> %A, <i32 31, i32 31, i32 31, i32 31>
849 %not = xor <4 x i32> %sign, <i32 -1, i32 -1, i32 -1, i32 -1>
853 define <2 x i64> @cmgez2xi64_alt(<2 x i64> %A) {
854 ; CHECK-LABEL: cmgez2xi64_alt:
855 ; CHECK: cmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0x0|0}}
856 %sign = ashr <2 x i64> %A, <i64 63, i64 63>
857 %not = xor <2 x i64> %sign, <i64 -1, i64 -1>
862 define <8 x i8> @cmgtz8xi8(<8 x i8> %A) {
863 ; CHECK-LABEL: cmgtz8xi8:
864 ; CHECK: cmgt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #{{0x0|0}}
865 %tmp3 = icmp sgt <8 x i8> %A, zeroinitializer;
866 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
870 define <16 x i8> @cmgtz16xi8(<16 x i8> %A) {
871 ; CHECK-LABEL: cmgtz16xi8:
872 ; CHECK: cmgt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #{{0x0|0}}
873 %tmp3 = icmp sgt <16 x i8> %A, zeroinitializer;
874 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
878 define <4 x i16> @cmgtz4xi16(<4 x i16> %A) {
879 ; CHECK-LABEL: cmgtz4xi16:
880 ; CHECK: cmgt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #{{0x0|0}}
881 %tmp3 = icmp sgt <4 x i16> %A, zeroinitializer;
882 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
886 define <8 x i16> @cmgtz8xi16(<8 x i16> %A) {
887 ; CHECK-LABEL: cmgtz8xi16:
888 ; CHECK: cmgt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #{{0x0|0}}
889 %tmp3 = icmp sgt <8 x i16> %A, zeroinitializer;
890 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
894 define <2 x i32> @cmgtz2xi32(<2 x i32> %A) {
895 ; CHECK-LABEL: cmgtz2xi32:
896 ; CHECK: cmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0x0|0}}
897 %tmp3 = icmp sgt <2 x i32> %A, zeroinitializer;
898 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
902 define <4 x i32> @cmgtz4xi32(<4 x i32> %A) {
903 ; CHECK-LABEL: cmgtz4xi32:
904 ; CHECK: cmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0x0|0}}
905 %tmp3 = icmp sgt <4 x i32> %A, zeroinitializer;
906 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
910 define <2 x i64> @cmgtz2xi64(<2 x i64> %A) {
911 ; CHECK-LABEL: cmgtz2xi64:
912 ; CHECK: cmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0x0|0}}
913 %tmp3 = icmp sgt <2 x i64> %A, zeroinitializer;
914 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
918 define <8 x i8> @cmlez8xi8(<8 x i8> %A) {
919 ; CHECK-LABEL: cmlez8xi8:
920 ; CHECK: cmle {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #{{0x0|0}}
921 %tmp3 = icmp sle <8 x i8> %A, zeroinitializer;
922 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
926 define <16 x i8> @cmlez16xi8(<16 x i8> %A) {
927 ; CHECK-LABEL: cmlez16xi8:
928 ; CHECK: cmle {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #{{0x0|0}}
929 %tmp3 = icmp sle <16 x i8> %A, zeroinitializer;
930 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
934 define <4 x i16> @cmlez4xi16(<4 x i16> %A) {
935 ; CHECK-LABEL: cmlez4xi16:
936 ; CHECK: cmle {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #{{0x0|0}}
937 %tmp3 = icmp sle <4 x i16> %A, zeroinitializer;
938 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
942 define <8 x i16> @cmlez8xi16(<8 x i16> %A) {
943 ; CHECK-LABEL: cmlez8xi16:
944 ; CHECK: cmle {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #{{0x0|0}}
945 %tmp3 = icmp sle <8 x i16> %A, zeroinitializer;
946 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
950 define <2 x i32> @cmlez2xi32(<2 x i32> %A) {
951 ; CHECK-LABEL: cmlez2xi32:
952 ; CHECK: cmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0x0|0}}
953 %tmp3 = icmp sle <2 x i32> %A, zeroinitializer;
954 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
958 define <4 x i32> @cmlez4xi32(<4 x i32> %A) {
959 ; CHECK-LABEL: cmlez4xi32:
960 ; CHECK: cmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0x0|0}}
961 %tmp3 = icmp sle <4 x i32> %A, zeroinitializer;
962 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
966 define <2 x i64> @cmlez2xi64(<2 x i64> %A) {
967 ; CHECK-LABEL: cmlez2xi64:
968 ; CHECK: cmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0x0|0}}
969 %tmp3 = icmp sle <2 x i64> %A, zeroinitializer;
970 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
974 define <8 x i8> @cmltz8xi8(<8 x i8> %A) {
975 ; CHECK-LABEL: cmltz8xi8:
976 ; CHECK: cmlt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #{{0x0|0}}
977 %tmp3 = icmp slt <8 x i8> %A, zeroinitializer;
978 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
982 define <16 x i8> @cmltz16xi8(<16 x i8> %A) {
983 ; CHECK-LABEL: cmltz16xi8:
984 ; CHECK: cmlt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #{{0x0|0}}
985 %tmp3 = icmp slt <16 x i8> %A, zeroinitializer;
986 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
990 define <4 x i16> @cmltz4xi16(<4 x i16> %A) {
991 ; CHECK-LABEL: cmltz4xi16:
992 ; CHECK: cmlt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #{{0x0|0}}
993 %tmp3 = icmp slt <4 x i16> %A, zeroinitializer;
994 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
998 define <8 x i16> @cmltz8xi16(<8 x i16> %A) {
999 ; CHECK-LABEL: cmltz8xi16:
1000 ; CHECK: cmlt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #{{0x0|0}}
1001 %tmp3 = icmp slt <8 x i16> %A, zeroinitializer;
1002 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1006 define <2 x i32> @cmltz2xi32(<2 x i32> %A) {
1007 ; CHECK-LABEL: cmltz2xi32:
1008 ; CHECK: cmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0x0|0}}
1009 %tmp3 = icmp slt <2 x i32> %A, zeroinitializer;
1010 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1014 define <4 x i32> @cmltz4xi32(<4 x i32> %A) {
1015 ; CHECK-LABEL: cmltz4xi32:
1016 ; CHECK: cmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0x0|0}}
1017 %tmp3 = icmp slt <4 x i32> %A, zeroinitializer;
1018 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1022 define <2 x i64> @cmltz2xi64(<2 x i64> %A) {
1023 ; CHECK-LABEL: cmltz2xi64:
1024 ; CHECK: cmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0x0|0}}
1025 %tmp3 = icmp slt <2 x i64> %A, zeroinitializer;
1026 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1030 define <8 x i8> @cmneqz8xi8(<8 x i8> %A) {
1031 ; CHECK-LABEL: cmneqz8xi8:
1032 ; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #{{0x0|0}}
1033 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1034 %tmp3 = icmp ne <8 x i8> %A, zeroinitializer;
1035 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1039 define <16 x i8> @cmneqz16xi8(<16 x i8> %A) {
1040 ; CHECK-LABEL: cmneqz16xi8:
1041 ; CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #{{0x0|0}}
1042 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1043 %tmp3 = icmp ne <16 x i8> %A, zeroinitializer;
1044 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1048 define <4 x i16> @cmneqz4xi16(<4 x i16> %A) {
1049 ; CHECK-LABEL: cmneqz4xi16:
1050 ; CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #{{0x0|0}}
1051 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1052 %tmp3 = icmp ne <4 x i16> %A, zeroinitializer;
1053 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1057 define <8 x i16> @cmneqz8xi16(<8 x i16> %A) {
1058 ; CHECK-LABEL: cmneqz8xi16:
1059 ; CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #{{0x0|0}}
1060 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1061 %tmp3 = icmp ne <8 x i16> %A, zeroinitializer;
1062 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1066 define <2 x i32> @cmneqz2xi32(<2 x i32> %A) {
1067 ; CHECK-LABEL: cmneqz2xi32:
1068 ; CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0x0|0}}
1069 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1070 %tmp3 = icmp ne <2 x i32> %A, zeroinitializer;
1071 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1075 define <4 x i32> @cmneqz4xi32(<4 x i32> %A) {
1076 ; CHECK-LABEL: cmneqz4xi32:
1077 ; CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0x0|0}}
1078 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1079 %tmp3 = icmp ne <4 x i32> %A, zeroinitializer;
1080 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1084 define <2 x i64> @cmneqz2xi64(<2 x i64> %A) {
1085 ; CHECK-LABEL: cmneqz2xi64:
1086 ; CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0x0|0}}
1087 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1088 %tmp3 = icmp ne <2 x i64> %A, zeroinitializer;
1089 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1093 define <8 x i8> @cmhsz8xi8(<8 x i8> %A) {
1094 ; CHECK-LABEL: cmhsz8xi8:
1095 ; CHECK: movi {{v[0-9]+}}.8b, #{{0x2|2}}
1096 ; CHECK-NEXT: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1097 %tmp3 = icmp uge <8 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1098 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1102 define <16 x i8> @cmhsz16xi8(<16 x i8> %A) {
1103 ; CHECK-LABEL: cmhsz16xi8:
1104 ; CHECK: movi {{v[0-9]+}}.16b, #{{0x2|2}}
1105 ; CHECK-NEXT: cmhs {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1106 %tmp3 = icmp uge <16 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1107 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1111 define <4 x i16> @cmhsz4xi16(<4 x i16> %A) {
1112 ; CHECK-LABEL: cmhsz4xi16:
1113 ; CHECK: movi {{v[0-9]+}}.4h, #{{0x2|2}}
1114 ; CHECK-NEXT: cmhs {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1115 %tmp3 = icmp uge <4 x i16> %A, <i16 2, i16 2, i16 2, i16 2>
1116 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1120 define <8 x i16> @cmhsz8xi16(<8 x i16> %A) {
1121 ; CHECK-LABEL: cmhsz8xi16:
1122 ; CHECK: movi {{v[0-9]+}}.8h, #{{0x2|2}}
1123 ; CHECK-NEXT: cmhs {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1124 %tmp3 = icmp uge <8 x i16> %A, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1125 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1129 define <2 x i32> @cmhsz2xi32(<2 x i32> %A) {
1130 ; CHECK-LABEL: cmhsz2xi32:
1131 ; CHECK: movi {{v[0-9]+}}.2s, #{{0x2|2}}
1132 ; CHECK-NEXT: cmhs {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1133 %tmp3 = icmp uge <2 x i32> %A, <i32 2, i32 2>
1134 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1138 define <4 x i32> @cmhsz4xi32(<4 x i32> %A) {
1139 ; CHECK-LABEL: cmhsz4xi32:
1140 ; CHECK: movi {{v[0-9]+}}.4s, #{{0x2|2}}
1141 ; CHECK-NEXT: cmhs {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1142 %tmp3 = icmp uge <4 x i32> %A, <i32 2, i32 2, i32 2, i32 2>
1143 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1147 define <2 x i64> @cmhsz2xi64(<2 x i64> %A) {
1148 ; CHECK-LABEL: cmhsz2xi64:
1149 ; CHECK: mov w[[TWO:[0-9]+]], #2
1150 ; CHECK-NEXT: {{v[0-9]+}}.2d, x[[TWO]]
1151 ; CHECK-NEXT: cmhs {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1152 %tmp3 = icmp uge <2 x i64> %A, <i64 2, i64 2>
1153 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1158 define <8 x i8> @cmhiz8xi8(<8 x i8> %A) {
1159 ; CHECK-LABEL: cmhiz8xi8:
1160 ; CHECK: movi {{v[0-9]+}}.8b, #{{0x1|1}}
1161 ; CHECK-NEXT: cmhi {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1162 %tmp3 = icmp ugt <8 x i8> %A, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1163 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1167 define <16 x i8> @cmhiz16xi8(<16 x i8> %A) {
1168 ; CHECK-LABEL: cmhiz16xi8:
1169 ; CHECK: movi {{v[0-9]+}}.16b, #{{0x1|1}}
1170 ; CHECK-NEXT: cmhi {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1171 %tmp3 = icmp ugt <16 x i8> %A, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1172 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1176 define <4 x i16> @cmhiz4xi16(<4 x i16> %A) {
1177 ; CHECK-LABEL: cmhiz4xi16:
1178 ; CHECK: movi {{v[0-9]+}}.4h, #{{0x1|1}}
1179 ; CHECK-NEXT: cmhi {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
1180 %tmp3 = icmp ugt <4 x i16> %A, <i16 1, i16 1, i16 1, i16 1>
1181 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1185 define <8 x i16> @cmhiz8xi16(<8 x i16> %A) {
1186 ; CHECK-LABEL: cmhiz8xi16:
1187 ; CHECK: movi {{v[0-9]+}}.8h, #{{0x1|1}}
1188 ; CHECK-NEXT: cmhi {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
1189 %tmp3 = icmp ugt <8 x i16> %A, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1190 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1194 define <2 x i32> @cmhiz2xi32(<2 x i32> %A) {
1195 ; CHECK-LABEL: cmhiz2xi32:
1196 ; CHECK: movi {{v[0-9]+}}.2s, #{{0x1|1}}
1197 ; CHECK-NEXT: cmhi {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1198 %tmp3 = icmp ugt <2 x i32> %A, <i32 1, i32 1>
1199 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1203 define <4 x i32> @cmhiz4xi32(<4 x i32> %A) {
1204 ; CHECK-LABEL: cmhiz4xi32:
1205 ; CHECK: movi {{v[0-9]+}}.4s, #{{0x1|1}}
1206 ; CHECK-NEXT: cmhi {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1207 %tmp3 = icmp ugt <4 x i32> %A, <i32 1, i32 1, i32 1, i32 1>
1208 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1212 define <2 x i64> @cmhiz2xi64(<2 x i64> %A) {
1213 ; CHECK-LABEL: cmhiz2xi64:
1214 ; CHECK: mov w[[ONE:[0-9]+]], #1
1215 ; CHECK-NEXT: dup {{v[0-9]+}}.2d, x[[ONE]]
1216 ; CHECK-NEXT: cmhi {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1217 %tmp3 = icmp ugt <2 x i64> %A, <i64 1, i64 1>
1218 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1222 define <8 x i8> @cmlsz8xi8(<8 x i8> %A) {
1223 ; CHECK-LABEL: cmlsz8xi8:
1224 ; Using registers other than v0, v1 are possible, but would be odd.
1225 ; LS implemented as HS, so check reversed operands.
1226 ; CHECK: movi {{v1.8b|v1.2d}}, #{{0x0|0}}
1227 ; CHECK-NEXT: cmhs {{v[0-9]+}}.8b, v1.8b, v0.8b
1228 %tmp3 = icmp ule <8 x i8> %A, zeroinitializer;
1229 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1233 define <16 x i8> @cmlsz16xi8(<16 x i8> %A) {
1234 ; CHECK-LABEL: cmlsz16xi8:
1235 ; Using registers other than v0, v1 are possible, but would be odd.
1236 ; LS implemented as HS, so check reversed operands.
1237 ; CHECK: movi {{v1.16b|v1.2d}}, #{{0x0|0}}
1238 ; CHECK-NEXT: cmhs {{v[0-9]+}}.16b, v1.16b, v0.16b
1239 %tmp3 = icmp ule <16 x i8> %A, zeroinitializer;
1240 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1244 define <4 x i16> @cmlsz4xi16(<4 x i16> %A) {
1245 ; CHECK-LABEL: cmlsz4xi16:
1246 ; Using registers other than v0, v1 are possible, but would be odd.
1247 ; LS implemented as HS, so check reversed operands.
1248 ; CHECK: movi {{v1.8b|v1.2d}}, #{{0x0|0}}
1249 ; CHECK-NEXT: cmhs {{v[0-9]+}}.4h, v1.4h, v0.4h
1250 %tmp3 = icmp ule <4 x i16> %A, zeroinitializer;
1251 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1255 define <8 x i16> @cmlsz8xi16(<8 x i16> %A) {
1256 ; CHECK-LABEL: cmlsz8xi16:
1257 ; Using registers other than v0, v1 are possible, but would be odd.
1258 ; LS implemented as HS, so check reversed operands.
1259 ; CHECK: movi {{v1.16b|v1.2d}}, #{{0x0|0}}
1260 ; CHECK-NEXT: cmhs {{v[0-9]+}}.8h, v1.8h, v0.8h
1261 %tmp3 = icmp ule <8 x i16> %A, zeroinitializer;
1262 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1266 define <2 x i32> @cmlsz2xi32(<2 x i32> %A) {
1267 ; CHECK-LABEL: cmlsz2xi32:
1268 ; Using registers other than v0, v1 are possible, but would be odd.
1269 ; LS implemented as HS, so check reversed operands.
1270 ; CHECK: movi {{v1.8b|v1.2d}}, #{{0x0|0}}
1271 ; CHECK-NEXT: cmhs {{v[0-9]+}}.2s, v1.2s, v0.2s
1272 %tmp3 = icmp ule <2 x i32> %A, zeroinitializer;
1273 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1277 define <4 x i32> @cmlsz4xi32(<4 x i32> %A) {
1278 ; CHECK-LABEL: cmlsz4xi32:
1279 ; Using registers other than v0, v1 are possible, but would be odd.
1280 ; LS implemented as HS, so check reversed operands.
1281 ; CHECK: movi {{v1.16b|v1.2d}}, #{{0x0|0}}
1282 ; CHECK-NEXT: cmhs {{v[0-9]+}}.4s, v1.4s, v0.4s
1283 %tmp3 = icmp ule <4 x i32> %A, zeroinitializer;
1284 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1288 define <2 x i64> @cmlsz2xi64(<2 x i64> %A) {
1289 ; CHECK-LABEL: cmlsz2xi64:
1290 ; Using registers other than v0, v1 are possible, but would be odd.
1291 ; LS implemented as HS, so check reversed operands.
1292 ; CHECK: movi {{v1.16b|v1.2d}}, #{{0x0|0}}
1293 ; CHECK-NEXT: cmhs {{v[0-9]+}}.2d, v1.2d, v0.2d
1294 %tmp3 = icmp ule <2 x i64> %A, zeroinitializer;
1295 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1299 define <8 x i8> @cmloz8xi8(<8 x i8> %A) {
1300 ; CHECK-LABEL: cmloz8xi8:
1301 ; Using registers other than v0, v1 are possible, but would be odd.
1302 ; LO implemented as HI, so check reversed operands.
1303 ; CHECK: movi v1.8b, #{{0x2|2}}
1304 ; CHECK-NEXT: cmhi {{v[0-9]+}}.8b, v1.8b, {{v[0-9]+}}.8b
1305 %tmp3 = icmp ult <8 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1306 %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
1310 define <16 x i8> @cmloz16xi8(<16 x i8> %A) {
1311 ; CHECK-LABEL: cmloz16xi8:
1312 ; Using registers other than v0, v1 are possible, but would be odd.
1313 ; LO implemented as HI, so check reversed operands.
1314 ; CHECK: movi v1.16b, #{{0x2|2}}
1315 ; CHECK-NEXT: cmhi {{v[0-9]+}}.16b, v1.16b, v0.16b
1316 %tmp3 = icmp ult <16 x i8> %A, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1317 %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
1321 define <4 x i16> @cmloz4xi16(<4 x i16> %A) {
1322 ; CHECK-LABEL: cmloz4xi16:
1323 ; Using registers other than v0, v1 are possible, but would be odd.
1324 ; LO implemented as HI, so check reversed operands.
1325 ; CHECK: movi v1.4h, #{{0x2|2}}
1326 ; CHECK-NEXT: cmhi {{v[0-9]+}}.4h, v1.4h, v0.4h
1327 %tmp3 = icmp ult <4 x i16> %A, <i16 2, i16 2, i16 2, i16 2>
1328 %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
1332 define <8 x i16> @cmloz8xi16(<8 x i16> %A) {
1333 ; CHECK-LABEL: cmloz8xi16:
1334 ; Using registers other than v0, v1 are possible, but would be odd.
1335 ; LO implemented as HI, so check reversed operands.
1336 ; CHECK: movi v1.8h, #{{0x2|2}}
1337 ; CHECK-NEXT: cmhi {{v[0-9]+}}.8h, v1.8h, v0.8h
1338 %tmp3 = icmp ult <8 x i16> %A, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1339 %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
1343 define <2 x i32> @cmloz2xi32(<2 x i32> %A) {
1344 ; CHECK-LABEL: cmloz2xi32:
1345 ; Using registers other than v0, v1 are possible, but would be odd.
1346 ; LO implemented as HI, so check reversed operands.
1347 ; CHECK: movi v1.2s, #{{0x2|2}}
1348 ; CHECK-NEXT: cmhi {{v[0-9]+}}.2s, v1.2s, v0.2s
1349 %tmp3 = icmp ult <2 x i32> %A, <i32 2, i32 2>
1350 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1354 define <4 x i32> @cmloz4xi32(<4 x i32> %A) {
1355 ; CHECK-LABEL: cmloz4xi32:
1356 ; Using registers other than v0, v1 are possible, but would be odd.
1357 ; LO implemented as HI, so check reversed operands.
1358 ; CHECK: movi v1.4s, #{{0x2|2}}
1359 ; CHECK-NEXT: cmhi {{v[0-9]+}}.4s, v1.4s, v0.4s
1360 %tmp3 = icmp ult <4 x i32> %A, <i32 2, i32 2, i32 2, i32 2>
1361 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1365 define <2 x i64> @cmloz2xi64(<2 x i64> %A) {
1366 ; CHECK-LABEL: cmloz2xi64:
1367 ; Using registers other than v0, v1 are possible, but would be odd.
1368 ; LO implemented as HI, so check reversed operands.
1369 ; CHECK: mov w[[TWO:[0-9]+]], #2
1370 ; CHECK-NEXT: dup v1.2d, x[[TWO]]
1371 ; CHECK-NEXT: cmhi {{v[0-9]+}}.2d, v1.2d, v0.2d
1372 %tmp3 = icmp ult <2 x i64> %A, <i64 2, i64 2>
1373 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1378 define <2 x i32> @fcmoeq2xfloat(<2 x float> %A, <2 x float> %B) {
1379 ; CHECK-LABEL: fcmoeq2xfloat:
1380 ; CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1381 %tmp3 = fcmp oeq <2 x float> %A, %B
1382 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1386 define <4 x i32> @fcmoeq4xfloat(<4 x float> %A, <4 x float> %B) {
1387 ; CHECK-LABEL: fcmoeq4xfloat:
1388 ; CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1389 %tmp3 = fcmp oeq <4 x float> %A, %B
1390 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1393 define <2 x i64> @fcmoeq2xdouble(<2 x double> %A, <2 x double> %B) {
1394 ; CHECK-LABEL: fcmoeq2xdouble:
1395 ; CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1396 %tmp3 = fcmp oeq <2 x double> %A, %B
1397 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1401 define <2 x i32> @fcmoge2xfloat(<2 x float> %A, <2 x float> %B) {
1402 ; CHECK-LABEL: fcmoge2xfloat:
1403 ; CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1404 %tmp3 = fcmp oge <2 x float> %A, %B
1405 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1409 define <4 x i32> @fcmoge4xfloat(<4 x float> %A, <4 x float> %B) {
1410 ; CHECK-LABEL: fcmoge4xfloat:
1411 ; CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1412 %tmp3 = fcmp oge <4 x float> %A, %B
1413 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1416 define <2 x i64> @fcmoge2xdouble(<2 x double> %A, <2 x double> %B) {
1417 ; CHECK-LABEL: fcmoge2xdouble:
1418 ; CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1419 %tmp3 = fcmp oge <2 x double> %A, %B
1420 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1424 define <2 x i32> @fcmogt2xfloat(<2 x float> %A, <2 x float> %B) {
1425 ; CHECK-LABEL: fcmogt2xfloat:
1426 ; CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
1427 %tmp3 = fcmp ogt <2 x float> %A, %B
1428 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1432 define <4 x i32> @fcmogt4xfloat(<4 x float> %A, <4 x float> %B) {
1433 ; CHECK-LABEL: fcmogt4xfloat:
1434 ; CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
1435 %tmp3 = fcmp ogt <4 x float> %A, %B
1436 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1439 define <2 x i64> @fcmogt2xdouble(<2 x double> %A, <2 x double> %B) {
1440 ; CHECK-LABEL: fcmogt2xdouble:
1441 ; CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
1442 %tmp3 = fcmp ogt <2 x double> %A, %B
1443 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1447 define <2 x i32> @fcmole2xfloat(<2 x float> %A, <2 x float> %B) {
1448 ; CHECK-LABEL: fcmole2xfloat:
1449 ; Using registers other than v0, v1 are possible, but would be odd.
1450 ; OLE implemented as OGE, so check reversed operands.
1451 ; CHECK: fcmge {{v[0-9]+}}.2s, v1.2s, v0.2s
1452 %tmp3 = fcmp ole <2 x float> %A, %B
1453 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1457 define <4 x i32> @fcmole4xfloat(<4 x float> %A, <4 x float> %B) {
1458 ; CHECK-LABEL: fcmole4xfloat:
1459 ; Using registers other than v0, v1 are possible, but would be odd.
1460 ; OLE implemented as OGE, so check reversed operands.
1461 ; CHECK: fcmge {{v[0-9]+}}.4s, v1.4s, v0.4s
1462 %tmp3 = fcmp ole <4 x float> %A, %B
1463 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1466 define <2 x i64> @fcmole2xdouble(<2 x double> %A, <2 x double> %B) {
1467 ; CHECK-LABEL: fcmole2xdouble:
1468 ; Using registers other than v0, v1 are possible, but would be odd.
1469 ; OLE implemented as OGE, so check reversed operands.
1470 ; CHECK: fcmge {{v[0-9]+}}.2d, v1.2d, v0.2d
1471 %tmp3 = fcmp ole <2 x double> %A, %B
1472 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1476 define <2 x i32> @fcmolt2xfloat(<2 x float> %A, <2 x float> %B) {
1477 ; CHECK-LABEL: fcmolt2xfloat:
1478 ; Using registers other than v0, v1 are possible, but would be odd.
1479 ; OLE implemented as OGE, so check reversed operands.
1480 ; CHECK: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1481 %tmp3 = fcmp olt <2 x float> %A, %B
1482 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1486 define <4 x i32> @fcmolt4xfloat(<4 x float> %A, <4 x float> %B) {
1487 ; CHECK-LABEL: fcmolt4xfloat:
1488 ; Using registers other than v0, v1 are possible, but would be odd.
1489 ; OLE implemented as OGE, so check reversed operands.
1490 ; CHECK: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1491 %tmp3 = fcmp olt <4 x float> %A, %B
1492 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1495 define <2 x i64> @fcmolt2xdouble(<2 x double> %A, <2 x double> %B) {
1496 ; CHECK-LABEL: fcmolt2xdouble:
1497 ; Using registers other than v0, v1 are possible, but would be odd.
1498 ; OLE implemented as OGE, so check reversed operands.
1499 ; CHECK: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1500 %tmp3 = fcmp olt <2 x double> %A, %B
1501 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1505 define <2 x i32> @fcmone2xfloat(<2 x float> %A, <2 x float> %B) {
1506 ; CHECK-LABEL: fcmone2xfloat:
1507 ; Using registers other than v0, v1 are possible, but would be odd.
1508 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
1509 ; CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
1510 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1511 ; CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1512 %tmp3 = fcmp one <2 x float> %A, %B
1513 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1517 define <4 x i32> @fcmone4xfloat(<4 x float> %A, <4 x float> %B) {
1518 ; CHECK-LABEL: fcmone4xfloat:
1519 ; Using registers other than v0, v1 are possible, but would be odd.
1520 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
1521 ; CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
1522 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1523 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1524 %tmp3 = fcmp one <4 x float> %A, %B
1525 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1528 define <2 x i64> @fcmone2xdouble(<2 x double> %A, <2 x double> %B) {
1529 ; CHECK-LABEL: fcmone2xdouble:
1530 ; Using registers other than v0, v1 are possible, but would be odd.
1531 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
1532 ; CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
1533 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1534 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1535 ; todo check reversed operands
1536 %tmp3 = fcmp one <2 x double> %A, %B
1537 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1542 define <2 x i32> @fcmord2xfloat(<2 x float> %A, <2 x float> %B) {
1543 ; CHECK-LABEL: fcmord2xfloat:
1544 ; Using registers other than v0, v1 are possible, but would be odd.
1545 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
1546 ; CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
1547 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1548 ; CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1549 %tmp3 = fcmp ord <2 x float> %A, %B
1550 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1555 define <4 x i32> @fcmord4xfloat(<4 x float> %A, <4 x float> %B) {
1556 ; CHECK-LABEL: fcmord4xfloat:
1557 ; Using registers other than v0, v1 are possible, but would be odd.
1558 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
1559 ; CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
1560 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1561 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1562 %tmp3 = fcmp ord <4 x float> %A, %B
1563 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1567 define <2 x i64> @fcmord2xdouble(<2 x double> %A, <2 x double> %B) {
1568 ; CHECK-LABEL: fcmord2xdouble:
1569 ; Using registers other than v0, v1 are possible, but would be odd.
1570 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
1571 ; CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
1572 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1573 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1574 %tmp3 = fcmp ord <2 x double> %A, %B
1575 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1580 define <2 x i32> @fcmuno2xfloat(<2 x float> %A, <2 x float> %B) {
1581 ; CHECK-LABEL: fcmuno2xfloat:
1582 ; Using registers other than v0, v1 are possible, but would be odd.
1583 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
1584 ; CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
1585 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1586 ; CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1587 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1588 %tmp3 = fcmp uno <2 x float> %A, %B
1589 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1593 define <4 x i32> @fcmuno4xfloat(<4 x float> %A, <4 x float> %B) {
1594 ; CHECK-LABEL: fcmuno4xfloat:
1595 ; Using registers other than v0, v1 are possible, but would be odd.
1596 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
1597 ; CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
1598 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1599 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1600 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1601 %tmp3 = fcmp uno <4 x float> %A, %B
1602 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1606 define <2 x i64> @fcmuno2xdouble(<2 x double> %A, <2 x double> %B) {
1607 ; CHECK-LABEL: fcmuno2xdouble:
1608 ; Using registers other than v0, v1 are possible, but would be odd.
1609 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
1610 ; CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
1611 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1612 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1613 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1614 %tmp3 = fcmp uno <2 x double> %A, %B
1615 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1619 define <2 x i32> @fcmueq2xfloat(<2 x float> %A, <2 x float> %B) {
1620 ; CHECK-LABEL: fcmueq2xfloat:
1621 ; Using registers other than v0, v1 are possible, but would be odd.
1622 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
1623 ; CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
1624 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1625 ; CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1626 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1627 %tmp3 = fcmp ueq <2 x float> %A, %B
1628 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1632 define <4 x i32> @fcmueq4xfloat(<4 x float> %A, <4 x float> %B) {
1633 ; CHECK-LABEL: fcmueq4xfloat:
1634 ; Using registers other than v0, v1 are possible, but would be odd.
1635 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
1636 ; CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
1637 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1638 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1639 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1640 %tmp3 = fcmp ueq <4 x float> %A, %B
1641 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1645 define <2 x i64> @fcmueq2xdouble(<2 x double> %A, <2 x double> %B) {
1646 ; CHECK-LABEL: fcmueq2xdouble:
1647 ; Using registers other than v0, v1 are possible, but would be odd.
1648 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
1649 ; CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
1650 ; CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1651 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1652 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1653 %tmp3 = fcmp ueq <2 x double> %A, %B
1654 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1658 define <2 x i32> @fcmuge2xfloat(<2 x float> %A, <2 x float> %B) {
1659 ; CHECK-LABEL: fcmuge2xfloat:
1660 ; Using registers other than v0, v1 are possible, but would be odd.
1661 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
1662 ; CHECK: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
1663 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1664 %tmp3 = fcmp uge <2 x float> %A, %B
1665 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1669 define <4 x i32> @fcmuge4xfloat(<4 x float> %A, <4 x float> %B) {
1670 ; CHECK-LABEL: fcmuge4xfloat:
1671 ; Using registers other than v0, v1 are possible, but would be odd.
1672 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
1673 ; CHECK: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
1674 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1675 %tmp3 = fcmp uge <4 x float> %A, %B
1676 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1680 define <2 x i64> @fcmuge2xdouble(<2 x double> %A, <2 x double> %B) {
1681 ; CHECK-LABEL: fcmuge2xdouble:
1682 ; Using registers other than v0, v1 are possible, but would be odd.
1683 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
1684 ; CHECK: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
1685 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1686 %tmp3 = fcmp uge <2 x double> %A, %B
1687 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1691 define <2 x i32> @fcmugt2xfloat(<2 x float> %A, <2 x float> %B) {
1692 ; CHECK-LABEL: fcmugt2xfloat:
1693 ; Using registers other than v0, v1 are possible, but would be odd.
1694 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
1695 ; CHECK: fcmge {{v[0-9]+}}.2s, v1.2s, v0.2s
1696 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1697 %tmp3 = fcmp ugt <2 x float> %A, %B
1698 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1702 define <4 x i32> @fcmugt4xfloat(<4 x float> %A, <4 x float> %B) {
1703 ; CHECK-LABEL: fcmugt4xfloat:
1704 ; Using registers other than v0, v1 are possible, but would be odd.
1705 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
1706 ; CHECK: fcmge {{v[0-9]+}}.4s, v1.4s, v0.4s
1707 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1708 %tmp3 = fcmp ugt <4 x float> %A, %B
1709 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1712 define <2 x i64> @fcmugt2xdouble(<2 x double> %A, <2 x double> %B) {
1713 ; CHECK-LABEL: fcmugt2xdouble:
1714 ; CHECK: fcmge {{v[0-9]+}}.2d, v1.2d, v0.2d
1715 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1716 %tmp3 = fcmp ugt <2 x double> %A, %B
1717 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1721 define <2 x i32> @fcmule2xfloat(<2 x float> %A, <2 x float> %B) {
1722 ; CHECK-LABEL: fcmule2xfloat:
1723 ; Using registers other than v0, v1 are possible, but would be odd.
1724 ; ULE implemented as !OGT.
1725 ; CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
1726 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1727 %tmp3 = fcmp ule <2 x float> %A, %B
1728 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1732 define <4 x i32> @fcmule4xfloat(<4 x float> %A, <4 x float> %B) {
1733 ; CHECK-LABEL: fcmule4xfloat:
1734 ; Using registers other than v0, v1 are possible, but would be odd.
1735 ; ULE implemented as !OGT.
1736 ; CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
1737 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1738 %tmp3 = fcmp ule <4 x float> %A, %B
1739 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1742 define <2 x i64> @fcmule2xdouble(<2 x double> %A, <2 x double> %B) {
1743 ; CHECK-LABEL: fcmule2xdouble:
1744 ; Using registers other than v0, v1 are possible, but would be odd.
1745 ; ULE implemented as !OGT.
1746 ; CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
1747 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1748 %tmp3 = fcmp ule <2 x double> %A, %B
1749 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1753 define <2 x i32> @fcmult2xfloat(<2 x float> %A, <2 x float> %B) {
1754 ; CHECK-LABEL: fcmult2xfloat:
1755 ; Using registers other than v0, v1 are possible, but would be odd.
1756 ; ULT implemented as !OGE.
1757 ; CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
1758 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1759 %tmp3 = fcmp ult <2 x float> %A, %B
1760 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1764 define <4 x i32> @fcmult4xfloat(<4 x float> %A, <4 x float> %B) {
1765 ; CHECK-LABEL: fcmult4xfloat:
1766 ; Using registers other than v0, v1 are possible, but would be odd.
1767 ; ULT implemented as !OGE.
1768 ; CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
1769 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1770 %tmp3 = fcmp ult <4 x float> %A, %B
1771 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1774 define <2 x i64> @fcmult2xdouble(<2 x double> %A, <2 x double> %B) {
1775 ; CHECK-LABEL: fcmult2xdouble:
1776 ; Using registers other than v0, v1 are possible, but would be odd.
1777 ; ULT implemented as !OGE.
1778 ; CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
1779 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1780 %tmp3 = fcmp ult <2 x double> %A, %B
1781 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1785 define <2 x i32> @fcmune2xfloat(<2 x float> %A, <2 x float> %B) {
1786 ; CHECK-LABEL: fcmune2xfloat:
1787 ; Using registers other than v0, v1 are possible, but would be odd.
1789 ; CHECK: fcmeq {{v[0-9]+}}.2s, v0.2s, v1.2s
1790 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1791 %tmp3 = fcmp une <2 x float> %A, %B
1792 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1796 define <4 x i32> @fcmune4xfloat(<4 x float> %A, <4 x float> %B) {
1797 ; CHECK-LABEL: fcmune4xfloat:
1798 ; Using registers other than v0, v1 are possible, but would be odd.
1800 ; CHECK: fcmeq {{v[0-9]+}}.4s, v0.4s, v1.4s
1801 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1802 %tmp3 = fcmp une <4 x float> %A, %B
1803 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1806 define <2 x i64> @fcmune2xdouble(<2 x double> %A, <2 x double> %B) {
1807 ; CHECK-LABEL: fcmune2xdouble:
1808 ; Using registers other than v0, v1 are possible, but would be odd.
1810 ; CHECK: fcmeq {{v[0-9]+}}.2d, v0.2d, v1.2d
1811 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1812 %tmp3 = fcmp une <2 x double> %A, %B
1813 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1817 define <2 x i32> @fcmoeqz2xfloat(<2 x float> %A) {
1818 ; CHECK-LABEL: fcmoeqz2xfloat:
1819 ; CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1820 %tmp3 = fcmp oeq <2 x float> %A, zeroinitializer
1821 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1825 define <4 x i32> @fcmoeqz4xfloat(<4 x float> %A) {
1826 ; CHECK-LABEL: fcmoeqz4xfloat:
1827 ; CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1828 %tmp3 = fcmp oeq <4 x float> %A, zeroinitializer
1829 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1832 define <2 x i64> @fcmoeqz2xdouble(<2 x double> %A) {
1833 ; CHECK-LABEL: fcmoeqz2xdouble:
1834 ; CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1835 %tmp3 = fcmp oeq <2 x double> %A, zeroinitializer
1836 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1841 define <2 x i32> @fcmogez2xfloat(<2 x float> %A) {
1842 ; CHECK-LABEL: fcmogez2xfloat:
1843 ; CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1844 %tmp3 = fcmp oge <2 x float> %A, zeroinitializer
1845 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1849 define <4 x i32> @fcmogez4xfloat(<4 x float> %A) {
1850 ; CHECK-LABEL: fcmogez4xfloat:
1851 ; CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1852 %tmp3 = fcmp oge <4 x float> %A, zeroinitializer
1853 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1856 define <2 x i64> @fcmogez2xdouble(<2 x double> %A) {
1857 ; CHECK-LABEL: fcmogez2xdouble:
1858 ; CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1859 %tmp3 = fcmp oge <2 x double> %A, zeroinitializer
1860 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1864 define <2 x i32> @fcmogtz2xfloat(<2 x float> %A) {
1865 ; CHECK-LABEL: fcmogtz2xfloat:
1866 ; CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1867 %tmp3 = fcmp ogt <2 x float> %A, zeroinitializer
1868 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1872 define <4 x i32> @fcmogtz4xfloat(<4 x float> %A) {
1873 ; CHECK-LABEL: fcmogtz4xfloat:
1874 ; CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1875 %tmp3 = fcmp ogt <4 x float> %A, zeroinitializer
1876 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1879 define <2 x i64> @fcmogtz2xdouble(<2 x double> %A) {
1880 ; CHECK-LABEL: fcmogtz2xdouble:
1881 ; CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1882 %tmp3 = fcmp ogt <2 x double> %A, zeroinitializer
1883 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1887 define <2 x i32> @fcmoltz2xfloat(<2 x float> %A) {
1888 ; CHECK-LABEL: fcmoltz2xfloat:
1889 ; CHECK: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1890 %tmp3 = fcmp olt <2 x float> %A, zeroinitializer
1891 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1895 define <4 x i32> @fcmoltz4xfloat(<4 x float> %A) {
1896 ; CHECK-LABEL: fcmoltz4xfloat:
1897 ; CHECK: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1898 %tmp3 = fcmp olt <4 x float> %A, zeroinitializer
1899 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1903 define <2 x i64> @fcmoltz2xdouble(<2 x double> %A) {
1904 ; CHECK-LABEL: fcmoltz2xdouble:
1905 ; CHECK: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1906 %tmp3 = fcmp olt <2 x double> %A, zeroinitializer
1907 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1911 define <2 x i32> @fcmolez2xfloat(<2 x float> %A) {
1912 ; CHECK-LABEL: fcmolez2xfloat:
1913 ; CHECK: fcmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1914 %tmp3 = fcmp ole <2 x float> %A, zeroinitializer
1915 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1919 define <4 x i32> @fcmolez4xfloat(<4 x float> %A) {
1920 ; CHECK-LABEL: fcmolez4xfloat:
1921 ; CHECK: fcmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1922 %tmp3 = fcmp ole <4 x float> %A, zeroinitializer
1923 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1927 define <2 x i64> @fcmolez2xdouble(<2 x double> %A) {
1928 ; CHECK-LABEL: fcmolez2xdouble:
1929 ; CHECK: fcmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1930 %tmp3 = fcmp ole <2 x double> %A, zeroinitializer
1931 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1935 define <2 x i32> @fcmonez2xfloat(<2 x float> %A) {
1936 ; CHECK-LABEL: fcmonez2xfloat:
1937 ; ONE with zero = OLT | OGT
1938 ; CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1939 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1940 ; CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1941 %tmp3 = fcmp one <2 x float> %A, zeroinitializer
1942 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1946 define <4 x i32> @fcmonez4xfloat(<4 x float> %A) {
1947 ; CHECK-LABEL: fcmonez4xfloat:
1948 ; ONE with zero = OLT | OGT
1949 ; CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1950 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1951 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1952 %tmp3 = fcmp one <4 x float> %A, zeroinitializer
1953 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1956 define <2 x i64> @fcmonez2xdouble(<2 x double> %A) {
1957 ; CHECK-LABEL: fcmonez2xdouble:
1958 ; ONE with zero = OLT | OGT
1959 ; CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1960 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1961 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1962 %tmp3 = fcmp one <2 x double> %A, zeroinitializer
1963 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1967 define <2 x i32> @fcmordz2xfloat(<2 x float> %A) {
1968 ; CHECK-LABEL: fcmordz2xfloat:
1969 ; ORD with zero = OLT | OGE
1970 ; CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1971 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
1972 ; CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
1973 %tmp3 = fcmp ord <2 x float> %A, zeroinitializer
1974 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
1978 define <4 x i32> @fcmordz4xfloat(<4 x float> %A) {
1979 ; CHECK-LABEL: fcmordz4xfloat:
1980 ; ORD with zero = OLT | OGE
1981 ; CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1982 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
1983 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1984 %tmp3 = fcmp ord <4 x float> %A, zeroinitializer
1985 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
1988 define <2 x i64> @fcmordz2xdouble(<2 x double> %A) {
1989 ; CHECK-LABEL: fcmordz2xdouble:
1990 ; ORD with zero = OLT | OGE
1991 ; CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1992 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
1993 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
1994 %tmp3 = fcmp ord <2 x double> %A, zeroinitializer
1995 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
1999 define <2 x i32> @fcmueqz2xfloat(<2 x float> %A) {
2000 ; CHECK-LABEL: fcmueqz2xfloat:
2001 ; UEQ with zero = !ONE = !(OLT |OGT)
2002 ; CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2003 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2004 ; CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2005 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2006 %tmp3 = fcmp ueq <2 x float> %A, zeroinitializer
2007 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2011 define <4 x i32> @fcmueqz4xfloat(<4 x float> %A) {
2012 ; CHECK-LABEL: fcmueqz4xfloat:
2013 ; UEQ with zero = !ONE = !(OLT |OGT)
2014 ; CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2015 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2016 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2017 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2018 %tmp3 = fcmp ueq <4 x float> %A, zeroinitializer
2019 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2023 define <2 x i64> @fcmueqz2xdouble(<2 x double> %A) {
2024 ; CHECK-LABEL: fcmueqz2xdouble:
2025 ; UEQ with zero = !ONE = !(OLT |OGT)
2026 ; CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2027 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2028 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2029 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2030 %tmp3 = fcmp ueq <2 x double> %A, zeroinitializer
2031 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2035 define <2 x i32> @fcmugez2xfloat(<2 x float> %A) {
2036 ; CHECK-LABEL: fcmugez2xfloat:
2037 ; UGE with zero = !OLT
2038 ; CHECK: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2039 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2040 %tmp3 = fcmp uge <2 x float> %A, zeroinitializer
2041 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2045 define <4 x i32> @fcmugez4xfloat(<4 x float> %A) {
2046 ; CHECK-LABEL: fcmugez4xfloat:
2047 ; UGE with zero = !OLT
2048 ; CHECK: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2049 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2050 %tmp3 = fcmp uge <4 x float> %A, zeroinitializer
2051 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2054 define <2 x i64> @fcmugez2xdouble(<2 x double> %A) {
2055 ; CHECK-LABEL: fcmugez2xdouble:
2056 ; UGE with zero = !OLT
2057 ; CHECK: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2058 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2059 %tmp3 = fcmp uge <2 x double> %A, zeroinitializer
2060 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2064 define <2 x i32> @fcmugtz2xfloat(<2 x float> %A) {
2065 ; CHECK-LABEL: fcmugtz2xfloat:
2066 ; UGT with zero = !OLE
2067 ; CHECK: fcmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2068 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2069 %tmp3 = fcmp ugt <2 x float> %A, zeroinitializer
2070 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2074 define <4 x i32> @fcmugtz4xfloat(<4 x float> %A) {
2075 ; CHECK-LABEL: fcmugtz4xfloat:
2076 ; UGT with zero = !OLE
2077 ; CHECK: fcmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2078 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2079 %tmp3 = fcmp ugt <4 x float> %A, zeroinitializer
2080 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2083 define <2 x i64> @fcmugtz2xdouble(<2 x double> %A) {
2084 ; CHECK-LABEL: fcmugtz2xdouble:
2085 ; UGT with zero = !OLE
2086 ; CHECK: fcmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2087 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2088 %tmp3 = fcmp ugt <2 x double> %A, zeroinitializer
2089 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2093 define <2 x i32> @fcmultz2xfloat(<2 x float> %A) {
2094 ; CHECK-LABEL: fcmultz2xfloat:
2095 ; ULT with zero = !OGE
2096 ; CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2097 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2098 %tmp3 = fcmp ult <2 x float> %A, zeroinitializer
2099 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2103 define <4 x i32> @fcmultz4xfloat(<4 x float> %A) {
2104 ; CHECK-LABEL: fcmultz4xfloat:
2105 ; CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2106 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2107 %tmp3 = fcmp ult <4 x float> %A, zeroinitializer
2108 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2112 define <2 x i64> @fcmultz2xdouble(<2 x double> %A) {
2113 ; CHECK-LABEL: fcmultz2xdouble:
2114 ; CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2115 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2116 %tmp3 = fcmp ult <2 x double> %A, zeroinitializer
2117 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2122 define <2 x i32> @fcmulez2xfloat(<2 x float> %A) {
2123 ; CHECK-LABEL: fcmulez2xfloat:
2124 ; ULE with zero = !OGT
2125 ; CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2126 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2127 %tmp3 = fcmp ule <2 x float> %A, zeroinitializer
2128 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2132 define <4 x i32> @fcmulez4xfloat(<4 x float> %A) {
2133 ; CHECK-LABEL: fcmulez4xfloat:
2134 ; ULE with zero = !OGT
2135 ; CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2136 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2137 %tmp3 = fcmp ule <4 x float> %A, zeroinitializer
2138 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2142 define <2 x i64> @fcmulez2xdouble(<2 x double> %A) {
2143 ; CHECK-LABEL: fcmulez2xdouble:
2144 ; ULE with zero = !OGT
2145 ; CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2146 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2147 %tmp3 = fcmp ule <2 x double> %A, zeroinitializer
2148 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2152 define <2 x i32> @fcmunez2xfloat(<2 x float> %A) {
2153 ; CHECK-LABEL: fcmunez2xfloat:
2154 ; UNE with zero = !OEQ with zero
2155 ; CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2156 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2157 %tmp3 = fcmp une <2 x float> %A, zeroinitializer
2158 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2162 define <4 x i32> @fcmunez4xfloat(<4 x float> %A) {
2163 ; CHECK-LABEL: fcmunez4xfloat:
2164 ; UNE with zero = !OEQ with zero
2165 ; CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2166 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2167 %tmp3 = fcmp une <4 x float> %A, zeroinitializer
2168 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2171 define <2 x i64> @fcmunez2xdouble(<2 x double> %A) {
2172 ; CHECK-LABEL: fcmunez2xdouble:
2173 ; UNE with zero = !OEQ with zero
2174 ; CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2175 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2176 %tmp3 = fcmp une <2 x double> %A, zeroinitializer
2177 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
2182 define <2 x i32> @fcmunoz2xfloat(<2 x float> %A) {
2183 ; CHECK-LABEL: fcmunoz2xfloat:
2184 ; UNO with zero = !ORD = !(OLT | OGE)
2185 ; CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2186 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #{{0.0|0}}
2187 ; CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2188 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
2189 %tmp3 = fcmp uno <2 x float> %A, zeroinitializer
2190 %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
2194 define <4 x i32> @fcmunoz4xfloat(<4 x float> %A) {
2195 ; CHECK-LABEL: fcmunoz4xfloat:
2196 ; UNO with zero = !ORD = !(OLT | OGE)
2197 ; CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2198 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #{{0.0|0}}
2199 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2200 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2201 %tmp3 = fcmp uno <4 x float> %A, zeroinitializer
2202 %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
2206 define <2 x i64> @fcmunoz2xdouble(<2 x double> %A) {
2207 ; CHECK-LABEL: fcmunoz2xdouble:
2208 ; UNO with zero = !ORD = !(OLT | OGE)
2209 ; CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2210 ; CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #{{0.0|0}}
2211 ; CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2212 ; CHECK-NEXT: {{mvn|not}} {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
2213 %tmp3 = fcmp uno <2 x double> %A, zeroinitializer
2214 %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>