Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AArch64 / icmp.ll
blob6baf1a84d407c4da7255fdb0c26f36f773bd482a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3 ; RUN: llc -mtriple=aarch64 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define i64 @i64_i64(i64 %a, i64 %b, i64 %d, i64 %e) {
6 ; CHECK-LABEL: i64_i64:
7 ; CHECK:       // %bb.0: // %entry
8 ; CHECK-NEXT:    cmp x0, x1
9 ; CHECK-NEXT:    csel x0, x2, x3, lt
10 ; CHECK-NEXT:    ret
11 entry:
12   %c = icmp slt i64 %a, %b
13   %s = select i1 %c, i64 %d, i64 %e
14   ret i64 %s
17 define i32 @i32_i32(i32 %a, i32 %b, i32 %d, i32 %e) {
18 ; CHECK-LABEL: i32_i32:
19 ; CHECK:       // %bb.0: // %entry
20 ; CHECK-NEXT:    cmp w0, w1
21 ; CHECK-NEXT:    csel w0, w2, w3, lt
22 ; CHECK-NEXT:    ret
23 entry:
24   %c = icmp slt i32 %a, %b
25   %s = select i1 %c, i32 %d, i32 %e
26   ret i32 %s
29 define i16 @i16_i16(i16 %a, i16 %b, i16 %d, i16 %e) {
30 ; CHECK-LABEL: i16_i16:
31 ; CHECK:       // %bb.0: // %entry
32 ; CHECK-NEXT:    sxth w8, w0
33 ; CHECK-NEXT:    cmp w8, w1, sxth
34 ; CHECK-NEXT:    csel w0, w2, w3, lt
35 ; CHECK-NEXT:    ret
36 entry:
37   %c = icmp slt i16 %a, %b
38   %s = select i1 %c, i16 %d, i16 %e
39   ret i16 %s
42 define i8 @i8_i8(i8 %a, i8 %b, i8 %d, i8 %e) {
43 ; CHECK-LABEL: i8_i8:
44 ; CHECK:       // %bb.0: // %entry
45 ; CHECK-NEXT:    sxtb w8, w0
46 ; CHECK-NEXT:    cmp w8, w1, sxtb
47 ; CHECK-NEXT:    csel w0, w2, w3, lt
48 ; CHECK-NEXT:    ret
49 entry:
50   %c = icmp slt i8 %a, %b
51   %s = select i1 %c, i8 %d, i8 %e
52   ret i8 %s
55 define <2 x i1> @test_v2i64_eq(<2 x i64> %v1, <2 x i64> %v2) {
56 ; CHECK-LABEL: test_v2i64_eq:
57 ; CHECK:       // %bb.0:
58 ; CHECK-NEXT:    cmeq v0.2d, v0.2d, v1.2d
59 ; CHECK-NEXT:    xtn v0.2s, v0.2d
60 ; CHECK-NEXT:    ret
61   %cmp = icmp eq <2 x i64> %v1, %v2
62   ret <2 x i1> %cmp
65 define <4 x i1> @test_v4i64_eq(<4 x i64> %v1, <4 x i64> %v2) {
66 ; CHECK-SD-LABEL: test_v4i64_eq:
67 ; CHECK-SD:       // %bb.0: // %entry
68 ; CHECK-SD-NEXT:    cmeq v1.2d, v1.2d, v3.2d
69 ; CHECK-SD-NEXT:    cmeq v0.2d, v0.2d, v2.2d
70 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
71 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
72 ; CHECK-SD-NEXT:    ret
74 ; CHECK-GI-LABEL: test_v4i64_eq:
75 ; CHECK-GI:       // %bb.0: // %entry
76 ; CHECK-GI-NEXT:    cmeq v0.2d, v0.2d, v2.2d
77 ; CHECK-GI-NEXT:    cmeq v1.2d, v1.2d, v3.2d
78 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
79 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
80 ; CHECK-GI-NEXT:    ret
81 entry:
82   %cmp = icmp eq <4 x i64> %v1, %v2
83   ret <4 x i1> %cmp
86 define <4 x i1> @test_v4i32_eq(<4 x i32> %v1, <4 x i32> %v2) {
87 ; CHECK-LABEL: test_v4i32_eq:
88 ; CHECK:       // %bb.0:
89 ; CHECK-NEXT:    cmeq v0.4s, v0.4s, v1.4s
90 ; CHECK-NEXT:    xtn v0.4h, v0.4s
91 ; CHECK-NEXT:    ret
92   %cmp = icmp eq <4 x i32> %v1, %v2
93   ret <4 x i1> %cmp
96 define <2 x i1> @test_v2i32_eq(<2 x i32> %v1, <2 x i32> %v2) {
97 ; CHECK-LABEL: test_v2i32_eq:
98 ; CHECK:       // %bb.0:
99 ; CHECK-NEXT:    cmeq v0.2s, v0.2s, v1.2s
100 ; CHECK-NEXT:    ret
101   %cmp = icmp eq <2 x i32> %v1, %v2
102   ret <2 x i1> %cmp
105 define <2 x i1> @test_v2i16_eq(<2 x i16> %v1, <2 x i16> %v2) {
106 ; CHECK-SD-LABEL: test_v2i16_eq:
107 ; CHECK-SD:       // %bb.0:
108 ; CHECK-SD-NEXT:    movi d2, #0x00ffff0000ffff
109 ; CHECK-SD-NEXT:    and v1.8b, v1.8b, v2.8b
110 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v2.8b
111 ; CHECK-SD-NEXT:    cmeq v0.2s, v0.2s, v1.2s
112 ; CHECK-SD-NEXT:    ret
114 ; CHECK-GI-LABEL: test_v2i16_eq:
115 ; CHECK-GI:       // %bb.0:
116 ; CHECK-GI-NEXT:    movi d2, #0x00ffff0000ffff
117 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v2.8b
118 ; CHECK-GI-NEXT:    and v1.8b, v1.8b, v2.8b
119 ; CHECK-GI-NEXT:    cmeq v0.2s, v0.2s, v1.2s
120 ; CHECK-GI-NEXT:    ret
121   %cmp = icmp eq <2 x i16> %v1, %v2
122   ret <2 x i1> %cmp
125 define <8 x i1> @test_v8i16_eq(<8 x i16> %v1, <8 x i16> %v2) {
126 ; CHECK-LABEL: test_v8i16_eq:
127 ; CHECK:       // %bb.0:
128 ; CHECK-NEXT:    cmeq v0.8h, v0.8h, v1.8h
129 ; CHECK-NEXT:    xtn v0.8b, v0.8h
130 ; CHECK-NEXT:    ret
131   %cmp = icmp eq <8 x i16> %v1, %v2
132   ret <8 x i1> %cmp
135 define <4 x i1> @test_v4i16_eq(<4 x i16> %v1, <4 x i16> %v2) {
136 ; CHECK-LABEL: test_v4i16_eq:
137 ; CHECK:       // %bb.0:
138 ; CHECK-NEXT:    cmeq v0.4h, v0.4h, v1.4h
139 ; CHECK-NEXT:    ret
140   %cmp = icmp eq <4 x i16> %v1, %v2
141   ret <4 x i1> %cmp
144 define <16 x i1> @test_v16i8_eq(<16 x i8> %v1, <16 x i8> %v2) {
145 ; CHECK-LABEL: test_v16i8_eq:
146 ; CHECK:       // %bb.0:
147 ; CHECK-NEXT:    cmeq v0.16b, v0.16b, v1.16b
148 ; CHECK-NEXT:    ret
149   %cmp = icmp eq <16 x i8> %v1, %v2
150   ret <16 x i1> %cmp
153 define <8 x i1> @test_v8i8_eq(<8 x i8> %v1, <8 x i8> %v2) {
154 ; CHECK-LABEL: test_v8i8_eq:
155 ; CHECK:       // %bb.0:
156 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, v1.8b
157 ; CHECK-NEXT:    ret
158   %cmp = icmp eq <8 x i8> %v1, %v2
159   ret <8 x i1> %cmp
162 define <2 x i1> @test_v2i64_ne(<2 x i64> %v1, <2 x i64> %v2) {
163 ; CHECK-LABEL: test_v2i64_ne:
164 ; CHECK:       // %bb.0:
165 ; CHECK-NEXT:    cmeq v0.2d, v0.2d, v1.2d
166 ; CHECK-NEXT:    mvn v0.16b, v0.16b
167 ; CHECK-NEXT:    xtn v0.2s, v0.2d
168 ; CHECK-NEXT:    ret
169   %cmp = icmp ne <2 x i64> %v1, %v2
170   ret <2 x i1> %cmp
173 define <4 x i1> @test_v4i64_ne(<4 x i64> %v1, <4 x i64> %v2) {
174 ; CHECK-SD-LABEL: test_v4i64_ne:
175 ; CHECK-SD:       // %bb.0: // %entry
176 ; CHECK-SD-NEXT:    cmeq v1.2d, v1.2d, v3.2d
177 ; CHECK-SD-NEXT:    cmeq v0.2d, v0.2d, v2.2d
178 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
179 ; CHECK-SD-NEXT:    mvn v0.16b, v0.16b
180 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
181 ; CHECK-SD-NEXT:    ret
183 ; CHECK-GI-LABEL: test_v4i64_ne:
184 ; CHECK-GI:       // %bb.0: // %entry
185 ; CHECK-GI-NEXT:    cmeq v0.2d, v0.2d, v2.2d
186 ; CHECK-GI-NEXT:    cmeq v1.2d, v1.2d, v3.2d
187 ; CHECK-GI-NEXT:    mvn v0.16b, v0.16b
188 ; CHECK-GI-NEXT:    mvn v1.16b, v1.16b
189 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
190 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
191 ; CHECK-GI-NEXT:    ret
192 entry:
193   %cmp = icmp ne <4 x i64> %v1, %v2
194   ret <4 x i1> %cmp
197 define <4 x i1> @test_v4i32_ne(<4 x i32> %v1, <4 x i32> %v2) {
198 ; CHECK-LABEL: test_v4i32_ne:
199 ; CHECK:       // %bb.0:
200 ; CHECK-NEXT:    cmeq v0.4s, v0.4s, v1.4s
201 ; CHECK-NEXT:    mvn v0.16b, v0.16b
202 ; CHECK-NEXT:    xtn v0.4h, v0.4s
203 ; CHECK-NEXT:    ret
204   %cmp = icmp ne <4 x i32> %v1, %v2
205   ret <4 x i1> %cmp
208 define <2 x i1> @test_v2i32_ne(<2 x i32> %v1, <2 x i32> %v2) {
209 ; CHECK-LABEL: test_v2i32_ne:
210 ; CHECK:       // %bb.0:
211 ; CHECK-NEXT:    cmeq v0.2s, v0.2s, v1.2s
212 ; CHECK-NEXT:    mvn v0.8b, v0.8b
213 ; CHECK-NEXT:    ret
214   %cmp = icmp ne <2 x i32> %v1, %v2
215   ret <2 x i1> %cmp
218 define <2 x i1> @test_v2i16_ne(<2 x i16> %v1, <2 x i16> %v2) {
219 ; CHECK-SD-LABEL: test_v2i16_ne:
220 ; CHECK-SD:       // %bb.0:
221 ; CHECK-SD-NEXT:    movi d2, #0x00ffff0000ffff
222 ; CHECK-SD-NEXT:    and v1.8b, v1.8b, v2.8b
223 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v2.8b
224 ; CHECK-SD-NEXT:    cmeq v0.2s, v0.2s, v1.2s
225 ; CHECK-SD-NEXT:    mvn v0.8b, v0.8b
226 ; CHECK-SD-NEXT:    ret
228 ; CHECK-GI-LABEL: test_v2i16_ne:
229 ; CHECK-GI:       // %bb.0:
230 ; CHECK-GI-NEXT:    movi d2, #0x00ffff0000ffff
231 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v2.8b
232 ; CHECK-GI-NEXT:    and v1.8b, v1.8b, v2.8b
233 ; CHECK-GI-NEXT:    cmeq v0.2s, v0.2s, v1.2s
234 ; CHECK-GI-NEXT:    mvn v0.8b, v0.8b
235 ; CHECK-GI-NEXT:    ret
236   %cmp = icmp ne <2 x i16> %v1, %v2
237   ret <2 x i1> %cmp
240 define <8 x i1> @test_v8i16_ne(<8 x i16> %v1, <8 x i16> %v2) {
241 ; CHECK-LABEL: test_v8i16_ne:
242 ; CHECK:       // %bb.0:
243 ; CHECK-NEXT:    cmeq v0.8h, v0.8h, v1.8h
244 ; CHECK-NEXT:    mvn v0.16b, v0.16b
245 ; CHECK-NEXT:    xtn v0.8b, v0.8h
246 ; CHECK-NEXT:    ret
247   %cmp = icmp ne <8 x i16> %v1, %v2
248   ret <8 x i1> %cmp
251 define <4 x i1> @test_v4i16_ne(<4 x i16> %v1, <4 x i16> %v2) {
252 ; CHECK-LABEL: test_v4i16_ne:
253 ; CHECK:       // %bb.0:
254 ; CHECK-NEXT:    cmeq v0.4h, v0.4h, v1.4h
255 ; CHECK-NEXT:    mvn v0.8b, v0.8b
256 ; CHECK-NEXT:    ret
257   %cmp = icmp ne <4 x i16> %v1, %v2
258   ret <4 x i1> %cmp
261 define <16 x i1> @test_v16i8_ne(<16 x i8> %v1, <16 x i8> %v2) {
262 ; CHECK-LABEL: test_v16i8_ne:
263 ; CHECK:       // %bb.0:
264 ; CHECK-NEXT:    cmeq v0.16b, v0.16b, v1.16b
265 ; CHECK-NEXT:    mvn v0.16b, v0.16b
266 ; CHECK-NEXT:    ret
267   %cmp = icmp ne <16 x i8> %v1, %v2
268   ret <16 x i1> %cmp
271 define <8 x i1> @test_v8i8_ne(<8 x i8> %v1, <8 x i8> %v2) {
272 ; CHECK-LABEL: test_v8i8_ne:
273 ; CHECK:       // %bb.0:
274 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, v1.8b
275 ; CHECK-NEXT:    mvn v0.8b, v0.8b
276 ; CHECK-NEXT:    ret
277   %cmp = icmp ne <8 x i8> %v1, %v2
278   ret <8 x i1> %cmp
281 define <2 x i1> @test_v2i64_ugt(<2 x i64> %v1, <2 x i64> %v2) {
282 ; CHECK-LABEL: test_v2i64_ugt:
283 ; CHECK:       // %bb.0:
284 ; CHECK-NEXT:    cmhi v0.2d, v0.2d, v1.2d
285 ; CHECK-NEXT:    xtn v0.2s, v0.2d
286 ; CHECK-NEXT:    ret
287   %cmp = icmp ugt <2 x i64> %v1, %v2
288   ret <2 x i1> %cmp
291 define <4 x i1> @test_v4i64_ugt(<4 x i64> %v1, <4 x i64> %v2) {
292 ; CHECK-SD-LABEL: test_v4i64_ugt:
293 ; CHECK-SD:       // %bb.0: // %entry
294 ; CHECK-SD-NEXT:    cmhi v1.2d, v1.2d, v3.2d
295 ; CHECK-SD-NEXT:    cmhi v0.2d, v0.2d, v2.2d
296 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
297 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
298 ; CHECK-SD-NEXT:    ret
300 ; CHECK-GI-LABEL: test_v4i64_ugt:
301 ; CHECK-GI:       // %bb.0: // %entry
302 ; CHECK-GI-NEXT:    cmhi v0.2d, v0.2d, v2.2d
303 ; CHECK-GI-NEXT:    cmhi v1.2d, v1.2d, v3.2d
304 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
305 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
306 ; CHECK-GI-NEXT:    ret
307 entry:
308   %cmp = icmp ugt <4 x i64> %v1, %v2
309   ret <4 x i1> %cmp
312 define <4 x i1> @test_v4i32_ugt(<4 x i32> %v1, <4 x i32> %v2) {
313 ; CHECK-LABEL: test_v4i32_ugt:
314 ; CHECK:       // %bb.0:
315 ; CHECK-NEXT:    cmhi v0.4s, v0.4s, v1.4s
316 ; CHECK-NEXT:    xtn v0.4h, v0.4s
317 ; CHECK-NEXT:    ret
318   %cmp = icmp ugt <4 x i32> %v1, %v2
319   ret <4 x i1> %cmp
322 define <2 x i1> @test_v2i32_ugt(<2 x i32> %v1, <2 x i32> %v2) {
323 ; CHECK-LABEL: test_v2i32_ugt:
324 ; CHECK:       // %bb.0:
325 ; CHECK-NEXT:    cmhi v0.2s, v0.2s, v1.2s
326 ; CHECK-NEXT:    ret
327   %cmp = icmp ugt <2 x i32> %v1, %v2
328   ret <2 x i1> %cmp
331 define <2 x i1> @test_v2i16_ugt(<2 x i16> %v1, <2 x i16> %v2) {
332 ; CHECK-SD-LABEL: test_v2i16_ugt:
333 ; CHECK-SD:       // %bb.0:
334 ; CHECK-SD-NEXT:    movi d2, #0x00ffff0000ffff
335 ; CHECK-SD-NEXT:    and v1.8b, v1.8b, v2.8b
336 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v2.8b
337 ; CHECK-SD-NEXT:    cmhi v0.2s, v0.2s, v1.2s
338 ; CHECK-SD-NEXT:    ret
340 ; CHECK-GI-LABEL: test_v2i16_ugt:
341 ; CHECK-GI:       // %bb.0:
342 ; CHECK-GI-NEXT:    movi d2, #0x00ffff0000ffff
343 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v2.8b
344 ; CHECK-GI-NEXT:    and v1.8b, v1.8b, v2.8b
345 ; CHECK-GI-NEXT:    cmhi v0.2s, v0.2s, v1.2s
346 ; CHECK-GI-NEXT:    ret
347   %cmp = icmp ugt <2 x i16> %v1, %v2
348   ret <2 x i1> %cmp
351 define <8 x i1> @test_v8i16_ugt(<8 x i16> %v1, <8 x i16> %v2) {
352 ; CHECK-LABEL: test_v8i16_ugt:
353 ; CHECK:       // %bb.0:
354 ; CHECK-NEXT:    cmhi v0.8h, v0.8h, v1.8h
355 ; CHECK-NEXT:    xtn v0.8b, v0.8h
356 ; CHECK-NEXT:    ret
357   %cmp = icmp ugt <8 x i16> %v1, %v2
358   ret <8 x i1> %cmp
361 define <4 x i1> @test_v4i16_ugt(<4 x i16> %v1, <4 x i16> %v2) {
362 ; CHECK-LABEL: test_v4i16_ugt:
363 ; CHECK:       // %bb.0:
364 ; CHECK-NEXT:    cmhi v0.4h, v0.4h, v1.4h
365 ; CHECK-NEXT:    ret
366   %cmp = icmp ugt <4 x i16> %v1, %v2
367   ret <4 x i1> %cmp
370 define <16 x i1> @test_v16i8_ugt(<16 x i8> %v1, <16 x i8> %v2) {
371 ; CHECK-LABEL: test_v16i8_ugt:
372 ; CHECK:       // %bb.0:
373 ; CHECK-NEXT:    cmhi v0.16b, v0.16b, v1.16b
374 ; CHECK-NEXT:    ret
375   %cmp = icmp ugt <16 x i8> %v1, %v2
376   ret <16 x i1> %cmp
379 define <8 x i1> @test_v8i8_ugt(<8 x i8> %v1, <8 x i8> %v2) {
380 ; CHECK-LABEL: test_v8i8_ugt:
381 ; CHECK:       // %bb.0:
382 ; CHECK-NEXT:    cmhi v0.8b, v0.8b, v1.8b
383 ; CHECK-NEXT:    ret
384   %cmp = icmp ugt <8 x i8> %v1, %v2
385   ret <8 x i1> %cmp
388 define <2 x i1> @test_v2i64_uge(<2 x i64> %v1, <2 x i64> %v2) {
389 ; CHECK-LABEL: test_v2i64_uge:
390 ; CHECK:       // %bb.0:
391 ; CHECK-NEXT:    cmhs v0.2d, v0.2d, v1.2d
392 ; CHECK-NEXT:    xtn v0.2s, v0.2d
393 ; CHECK-NEXT:    ret
394   %cmp = icmp uge <2 x i64> %v1, %v2
395   ret <2 x i1> %cmp
398 define <4 x i1> @test_v4i64_uge(<4 x i64> %v1, <4 x i64> %v2) {
399 ; CHECK-SD-LABEL: test_v4i64_uge:
400 ; CHECK-SD:       // %bb.0: // %entry
401 ; CHECK-SD-NEXT:    cmhs v1.2d, v1.2d, v3.2d
402 ; CHECK-SD-NEXT:    cmhs v0.2d, v0.2d, v2.2d
403 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
404 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
405 ; CHECK-SD-NEXT:    ret
407 ; CHECK-GI-LABEL: test_v4i64_uge:
408 ; CHECK-GI:       // %bb.0: // %entry
409 ; CHECK-GI-NEXT:    cmhs v0.2d, v0.2d, v2.2d
410 ; CHECK-GI-NEXT:    cmhs v1.2d, v1.2d, v3.2d
411 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
412 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
413 ; CHECK-GI-NEXT:    ret
414 entry:
415   %cmp = icmp uge <4 x i64> %v1, %v2
416   ret <4 x i1> %cmp
419 define <4 x i1> @test_v4i32_uge(<4 x i32> %v1, <4 x i32> %v2) {
420 ; CHECK-LABEL: test_v4i32_uge:
421 ; CHECK:       // %bb.0:
422 ; CHECK-NEXT:    cmhs v0.4s, v0.4s, v1.4s
423 ; CHECK-NEXT:    xtn v0.4h, v0.4s
424 ; CHECK-NEXT:    ret
425   %cmp = icmp uge <4 x i32> %v1, %v2
426   ret <4 x i1> %cmp
429 define <2 x i1> @test_v2i32_uge(<2 x i32> %v1, <2 x i32> %v2) {
430 ; CHECK-LABEL: test_v2i32_uge:
431 ; CHECK:       // %bb.0:
432 ; CHECK-NEXT:    cmhs v0.2s, v0.2s, v1.2s
433 ; CHECK-NEXT:    ret
434   %cmp = icmp uge <2 x i32> %v1, %v2
435   ret <2 x i1> %cmp
438 define <2 x i1> @test_v2i16_uge(<2 x i16> %v1, <2 x i16> %v2) {
439 ; CHECK-SD-LABEL: test_v2i16_uge:
440 ; CHECK-SD:       // %bb.0:
441 ; CHECK-SD-NEXT:    movi d2, #0x00ffff0000ffff
442 ; CHECK-SD-NEXT:    and v1.8b, v1.8b, v2.8b
443 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v2.8b
444 ; CHECK-SD-NEXT:    cmhs v0.2s, v0.2s, v1.2s
445 ; CHECK-SD-NEXT:    ret
447 ; CHECK-GI-LABEL: test_v2i16_uge:
448 ; CHECK-GI:       // %bb.0:
449 ; CHECK-GI-NEXT:    movi d2, #0x00ffff0000ffff
450 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v2.8b
451 ; CHECK-GI-NEXT:    and v1.8b, v1.8b, v2.8b
452 ; CHECK-GI-NEXT:    cmhs v0.2s, v0.2s, v1.2s
453 ; CHECK-GI-NEXT:    ret
454   %cmp = icmp uge <2 x i16> %v1, %v2
455   ret <2 x i1> %cmp
458 define <8 x i1> @test_v8i16_uge(<8 x i16> %v1, <8 x i16> %v2) {
459 ; CHECK-LABEL: test_v8i16_uge:
460 ; CHECK:       // %bb.0:
461 ; CHECK-NEXT:    cmhs v0.8h, v0.8h, v1.8h
462 ; CHECK-NEXT:    xtn v0.8b, v0.8h
463 ; CHECK-NEXT:    ret
464   %cmp = icmp uge <8 x i16> %v1, %v2
465   ret <8 x i1> %cmp
468 define <4 x i1> @test_v4i16_uge(<4 x i16> %v1, <4 x i16> %v2) {
469 ; CHECK-LABEL: test_v4i16_uge:
470 ; CHECK:       // %bb.0:
471 ; CHECK-NEXT:    cmhs v0.4h, v0.4h, v1.4h
472 ; CHECK-NEXT:    ret
473   %cmp = icmp uge <4 x i16> %v1, %v2
474   ret <4 x i1> %cmp
477 define <16 x i1> @test_v16i8_uge(<16 x i8> %v1, <16 x i8> %v2) {
478 ; CHECK-LABEL: test_v16i8_uge:
479 ; CHECK:       // %bb.0:
480 ; CHECK-NEXT:    cmhs v0.16b, v0.16b, v1.16b
481 ; CHECK-NEXT:    ret
482   %cmp = icmp uge <16 x i8> %v1, %v2
483   ret <16 x i1> %cmp
486 define <8 x i1> @test_v8i8_uge(<8 x i8> %v1, <8 x i8> %v2) {
487 ; CHECK-LABEL: test_v8i8_uge:
488 ; CHECK:       // %bb.0:
489 ; CHECK-NEXT:    cmhs v0.8b, v0.8b, v1.8b
490 ; CHECK-NEXT:    ret
491   %cmp = icmp uge <8 x i8> %v1, %v2
492   ret <8 x i1> %cmp
495 define <2 x i1> @test_v2i64_ult(<2 x i64> %v1, <2 x i64> %v2) {
496 ; CHECK-LABEL: test_v2i64_ult:
497 ; CHECK:       // %bb.0:
498 ; CHECK-NEXT:    cmhi v0.2d, v1.2d, v0.2d
499 ; CHECK-NEXT:    xtn v0.2s, v0.2d
500 ; CHECK-NEXT:    ret
501   %cmp = icmp ult <2 x i64> %v1, %v2
502   ret <2 x i1> %cmp
505 define <4 x i1> @test_v4i64_ult(<4 x i64> %v1, <4 x i64> %v2) {
506 ; CHECK-SD-LABEL: test_v4i64_ult:
507 ; CHECK-SD:       // %bb.0: // %entry
508 ; CHECK-SD-NEXT:    cmhi v1.2d, v3.2d, v1.2d
509 ; CHECK-SD-NEXT:    cmhi v0.2d, v2.2d, v0.2d
510 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
511 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
512 ; CHECK-SD-NEXT:    ret
514 ; CHECK-GI-LABEL: test_v4i64_ult:
515 ; CHECK-GI:       // %bb.0: // %entry
516 ; CHECK-GI-NEXT:    cmhi v0.2d, v2.2d, v0.2d
517 ; CHECK-GI-NEXT:    cmhi v1.2d, v3.2d, v1.2d
518 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
519 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
520 ; CHECK-GI-NEXT:    ret
521 entry:
522   %cmp = icmp ult <4 x i64> %v1, %v2
523   ret <4 x i1> %cmp
526 define <4 x i1> @test_v4i32_ult(<4 x i32> %v1, <4 x i32> %v2) {
527 ; CHECK-LABEL: test_v4i32_ult:
528 ; CHECK:       // %bb.0:
529 ; CHECK-NEXT:    cmhi v0.4s, v1.4s, v0.4s
530 ; CHECK-NEXT:    xtn v0.4h, v0.4s
531 ; CHECK-NEXT:    ret
532   %cmp = icmp ult <4 x i32> %v1, %v2
533   ret <4 x i1> %cmp
536 define <2 x i1> @test_v2i32_ult(<2 x i32> %v1, <2 x i32> %v2) {
537 ; CHECK-LABEL: test_v2i32_ult:
538 ; CHECK:       // %bb.0:
539 ; CHECK-NEXT:    cmhi v0.2s, v1.2s, v0.2s
540 ; CHECK-NEXT:    ret
541   %cmp = icmp ult <2 x i32> %v1, %v2
542   ret <2 x i1> %cmp
545 define <2 x i1> @test_v2i16_ult(<2 x i16> %v1, <2 x i16> %v2) {
546 ; CHECK-LABEL: test_v2i16_ult:
547 ; CHECK:       // %bb.0:
548 ; CHECK-NEXT:    movi d2, #0x00ffff0000ffff
549 ; CHECK-NEXT:    and v0.8b, v0.8b, v2.8b
550 ; CHECK-NEXT:    and v1.8b, v1.8b, v2.8b
551 ; CHECK-NEXT:    cmhi v0.2s, v1.2s, v0.2s
552 ; CHECK-NEXT:    ret
553   %cmp = icmp ult <2 x i16> %v1, %v2
554   ret <2 x i1> %cmp
557 define <8 x i1> @test_v8i16_ult(<8 x i16> %v1, <8 x i16> %v2) {
558 ; CHECK-LABEL: test_v8i16_ult:
559 ; CHECK:       // %bb.0:
560 ; CHECK-NEXT:    cmhi v0.8h, v1.8h, v0.8h
561 ; CHECK-NEXT:    xtn v0.8b, v0.8h
562 ; CHECK-NEXT:    ret
563   %cmp = icmp ult <8 x i16> %v1, %v2
564   ret <8 x i1> %cmp
567 define <4 x i1> @test_v4i16_ult(<4 x i16> %v1, <4 x i16> %v2) {
568 ; CHECK-LABEL: test_v4i16_ult:
569 ; CHECK:       // %bb.0:
570 ; CHECK-NEXT:    cmhi v0.4h, v1.4h, v0.4h
571 ; CHECK-NEXT:    ret
572   %cmp = icmp ult <4 x i16> %v1, %v2
573   ret <4 x i1> %cmp
576 define <16 x i1> @test_v16i8_ult(<16 x i8> %v1, <16 x i8> %v2) {
577 ; CHECK-LABEL: test_v16i8_ult:
578 ; CHECK:       // %bb.0:
579 ; CHECK-NEXT:    cmhi v0.16b, v1.16b, v0.16b
580 ; CHECK-NEXT:    ret
581   %cmp = icmp ult <16 x i8> %v1, %v2
582   ret <16 x i1> %cmp
585 define <8 x i1> @test_v8i8_ult(<8 x i8> %v1, <8 x i8> %v2) {
586 ; CHECK-LABEL: test_v8i8_ult:
587 ; CHECK:       // %bb.0:
588 ; CHECK-NEXT:    cmhi v0.8b, v1.8b, v0.8b
589 ; CHECK-NEXT:    ret
590   %cmp = icmp ult <8 x i8> %v1, %v2
591   ret <8 x i1> %cmp
594 define <2 x i1> @test_v2i64_ule(<2 x i64> %v1, <2 x i64> %v2) {
595 ; CHECK-LABEL: test_v2i64_ule:
596 ; CHECK:       // %bb.0:
597 ; CHECK-NEXT:    cmhs v0.2d, v1.2d, v0.2d
598 ; CHECK-NEXT:    xtn v0.2s, v0.2d
599 ; CHECK-NEXT:    ret
600   %cmp = icmp ule <2 x i64> %v1, %v2
601   ret <2 x i1> %cmp
604 define <4 x i1> @test_v4i64_ule(<4 x i64> %v1, <4 x i64> %v2) {
605 ; CHECK-SD-LABEL: test_v4i64_ule:
606 ; CHECK-SD:       // %bb.0: // %entry
607 ; CHECK-SD-NEXT:    cmhs v1.2d, v3.2d, v1.2d
608 ; CHECK-SD-NEXT:    cmhs v0.2d, v2.2d, v0.2d
609 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
610 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
611 ; CHECK-SD-NEXT:    ret
613 ; CHECK-GI-LABEL: test_v4i64_ule:
614 ; CHECK-GI:       // %bb.0: // %entry
615 ; CHECK-GI-NEXT:    cmhs v0.2d, v2.2d, v0.2d
616 ; CHECK-GI-NEXT:    cmhs v1.2d, v3.2d, v1.2d
617 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
618 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
619 ; CHECK-GI-NEXT:    ret
620 entry:
621   %cmp = icmp ule <4 x i64> %v1, %v2
622   ret <4 x i1> %cmp
625 define <4 x i1> @test_v4i32_ule(<4 x i32> %v1, <4 x i32> %v2) {
626 ; CHECK-LABEL: test_v4i32_ule:
627 ; CHECK:       // %bb.0:
628 ; CHECK-NEXT:    cmhs v0.4s, v1.4s, v0.4s
629 ; CHECK-NEXT:    xtn v0.4h, v0.4s
630 ; CHECK-NEXT:    ret
631   %cmp = icmp ule <4 x i32> %v1, %v2
632   ret <4 x i1> %cmp
635 define <2 x i1> @test_v2i32_ule(<2 x i32> %v1, <2 x i32> %v2) {
636 ; CHECK-LABEL: test_v2i32_ule:
637 ; CHECK:       // %bb.0:
638 ; CHECK-NEXT:    cmhs v0.2s, v1.2s, v0.2s
639 ; CHECK-NEXT:    ret
640   %cmp = icmp ule <2 x i32> %v1, %v2
641   ret <2 x i1> %cmp
644 define <2 x i1> @test_v2i16_ule(<2 x i16> %v1, <2 x i16> %v2) {
645 ; CHECK-LABEL: test_v2i16_ule:
646 ; CHECK:       // %bb.0:
647 ; CHECK-NEXT:    movi d2, #0x00ffff0000ffff
648 ; CHECK-NEXT:    and v0.8b, v0.8b, v2.8b
649 ; CHECK-NEXT:    and v1.8b, v1.8b, v2.8b
650 ; CHECK-NEXT:    cmhs v0.2s, v1.2s, v0.2s
651 ; CHECK-NEXT:    ret
652   %cmp = icmp ule <2 x i16> %v1, %v2
653   ret <2 x i1> %cmp
656 define <8 x i1> @test_v8i16_ule(<8 x i16> %v1, <8 x i16> %v2) {
657 ; CHECK-LABEL: test_v8i16_ule:
658 ; CHECK:       // %bb.0:
659 ; CHECK-NEXT:    cmhs v0.8h, v1.8h, v0.8h
660 ; CHECK-NEXT:    xtn v0.8b, v0.8h
661 ; CHECK-NEXT:    ret
662   %cmp = icmp ule <8 x i16> %v1, %v2
663   ret <8 x i1> %cmp
666 define <4 x i1> @test_v4i16_ule(<4 x i16> %v1, <4 x i16> %v2) {
667 ; CHECK-LABEL: test_v4i16_ule:
668 ; CHECK:       // %bb.0:
669 ; CHECK-NEXT:    cmhs v0.4h, v1.4h, v0.4h
670 ; CHECK-NEXT:    ret
671   %cmp = icmp ule <4 x i16> %v1, %v2
672   ret <4 x i1> %cmp
675 define <16 x i1> @test_v16i8_ule(<16 x i8> %v1, <16 x i8> %v2) {
676 ; CHECK-LABEL: test_v16i8_ule:
677 ; CHECK:       // %bb.0:
678 ; CHECK-NEXT:    cmhs v0.16b, v1.16b, v0.16b
679 ; CHECK-NEXT:    ret
680   %cmp = icmp ule <16 x i8> %v1, %v2
681   ret <16 x i1> %cmp
684 define <8 x i1> @test_v8i8_ule(<8 x i8> %v1, <8 x i8> %v2) {
685 ; CHECK-LABEL: test_v8i8_ule:
686 ; CHECK:       // %bb.0:
687 ; CHECK-NEXT:    cmhs v0.8b, v1.8b, v0.8b
688 ; CHECK-NEXT:    ret
689   %cmp = icmp ule <8 x i8> %v1, %v2
690   ret <8 x i1> %cmp
693 define <2 x i1> @test_v2i64_sgt(<2 x i64> %v1, <2 x i64> %v2) {
694 ; CHECK-LABEL: test_v2i64_sgt:
695 ; CHECK:       // %bb.0:
696 ; CHECK-NEXT:    cmgt v0.2d, v0.2d, v1.2d
697 ; CHECK-NEXT:    xtn v0.2s, v0.2d
698 ; CHECK-NEXT:    ret
699   %cmp = icmp sgt <2 x i64> %v1, %v2
700   ret <2 x i1> %cmp
703 define <4 x i1> @test_v4i64_sgt(<4 x i64> %v1, <4 x i64> %v2) {
704 ; CHECK-SD-LABEL: test_v4i64_sgt:
705 ; CHECK-SD:       // %bb.0: // %entry
706 ; CHECK-SD-NEXT:    cmgt v1.2d, v1.2d, v3.2d
707 ; CHECK-SD-NEXT:    cmgt v0.2d, v0.2d, v2.2d
708 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
709 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
710 ; CHECK-SD-NEXT:    ret
712 ; CHECK-GI-LABEL: test_v4i64_sgt:
713 ; CHECK-GI:       // %bb.0: // %entry
714 ; CHECK-GI-NEXT:    cmgt v0.2d, v0.2d, v2.2d
715 ; CHECK-GI-NEXT:    cmgt v1.2d, v1.2d, v3.2d
716 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
717 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
718 ; CHECK-GI-NEXT:    ret
719 entry:
720   %cmp = icmp sgt <4 x i64> %v1, %v2
721   ret <4 x i1> %cmp
724 define <4 x i1> @test_v4i32_sgt(<4 x i32> %v1, <4 x i32> %v2) {
725 ; CHECK-LABEL: test_v4i32_sgt:
726 ; CHECK:       // %bb.0:
727 ; CHECK-NEXT:    cmgt v0.4s, v0.4s, v1.4s
728 ; CHECK-NEXT:    xtn v0.4h, v0.4s
729 ; CHECK-NEXT:    ret
730   %cmp = icmp sgt <4 x i32> %v1, %v2
731   ret <4 x i1> %cmp
734 define <2 x i1> @test_v2i32_sgt(<2 x i32> %v1, <2 x i32> %v2) {
735 ; CHECK-LABEL: test_v2i32_sgt:
736 ; CHECK:       // %bb.0:
737 ; CHECK-NEXT:    cmgt v0.2s, v0.2s, v1.2s
738 ; CHECK-NEXT:    ret
739   %cmp = icmp sgt <2 x i32> %v1, %v2
740   ret <2 x i1> %cmp
743 define <2 x i1> @test_v2i16_sgt(<2 x i16> %v1, <2 x i16> %v2) {
744 ; CHECK-SD-LABEL: test_v2i16_sgt:
745 ; CHECK-SD:       // %bb.0:
746 ; CHECK-SD-NEXT:    shl v1.2s, v1.2s, #16
747 ; CHECK-SD-NEXT:    shl v0.2s, v0.2s, #16
748 ; CHECK-SD-NEXT:    sshr v1.2s, v1.2s, #16
749 ; CHECK-SD-NEXT:    sshr v0.2s, v0.2s, #16
750 ; CHECK-SD-NEXT:    cmgt v0.2s, v0.2s, v1.2s
751 ; CHECK-SD-NEXT:    ret
753 ; CHECK-GI-LABEL: test_v2i16_sgt:
754 ; CHECK-GI:       // %bb.0:
755 ; CHECK-GI-NEXT:    shl v0.2s, v0.2s, #16
756 ; CHECK-GI-NEXT:    shl v1.2s, v1.2s, #16
757 ; CHECK-GI-NEXT:    sshr v0.2s, v0.2s, #16
758 ; CHECK-GI-NEXT:    sshr v1.2s, v1.2s, #16
759 ; CHECK-GI-NEXT:    cmgt v0.2s, v0.2s, v1.2s
760 ; CHECK-GI-NEXT:    ret
761   %cmp = icmp sgt <2 x i16> %v1, %v2
762   ret <2 x i1> %cmp
765 define <8 x i1> @test_v8i16_sgt(<8 x i16> %v1, <8 x i16> %v2) {
766 ; CHECK-LABEL: test_v8i16_sgt:
767 ; CHECK:       // %bb.0:
768 ; CHECK-NEXT:    cmgt v0.8h, v0.8h, v1.8h
769 ; CHECK-NEXT:    xtn v0.8b, v0.8h
770 ; CHECK-NEXT:    ret
771   %cmp = icmp sgt <8 x i16> %v1, %v2
772   ret <8 x i1> %cmp
775 define <4 x i1> @test_v4i16_sgt(<4 x i16> %v1, <4 x i16> %v2) {
776 ; CHECK-LABEL: test_v4i16_sgt:
777 ; CHECK:       // %bb.0:
778 ; CHECK-NEXT:    cmgt v0.4h, v0.4h, v1.4h
779 ; CHECK-NEXT:    ret
780   %cmp = icmp sgt <4 x i16> %v1, %v2
781   ret <4 x i1> %cmp
784 define <16 x i1> @test_v16i8_sgt(<16 x i8> %v1, <16 x i8> %v2) {
785 ; CHECK-LABEL: test_v16i8_sgt:
786 ; CHECK:       // %bb.0:
787 ; CHECK-NEXT:    cmgt v0.16b, v0.16b, v1.16b
788 ; CHECK-NEXT:    ret
789   %cmp = icmp sgt <16 x i8> %v1, %v2
790   ret <16 x i1> %cmp
793 define <8 x i1> @test_v8i8_sgt(<8 x i8> %v1, <8 x i8> %v2) {
794 ; CHECK-LABEL: test_v8i8_sgt:
795 ; CHECK:       // %bb.0:
796 ; CHECK-NEXT:    cmgt v0.8b, v0.8b, v1.8b
797 ; CHECK-NEXT:    ret
798   %cmp = icmp sgt <8 x i8> %v1, %v2
799   ret <8 x i1> %cmp
802 define <2 x i1> @test_v2i64_sge(<2 x i64> %v1, <2 x i64> %v2) {
803 ; CHECK-LABEL: test_v2i64_sge:
804 ; CHECK:       // %bb.0:
805 ; CHECK-NEXT:    cmge v0.2d, v0.2d, v1.2d
806 ; CHECK-NEXT:    xtn v0.2s, v0.2d
807 ; CHECK-NEXT:    ret
808   %cmp = icmp sge <2 x i64> %v1, %v2
809   ret <2 x i1> %cmp
812 define <4 x i1> @test_v4i64_sge(<4 x i64> %v1, <4 x i64> %v2) {
813 ; CHECK-SD-LABEL: test_v4i64_sge:
814 ; CHECK-SD:       // %bb.0: // %entry
815 ; CHECK-SD-NEXT:    cmge v1.2d, v1.2d, v3.2d
816 ; CHECK-SD-NEXT:    cmge v0.2d, v0.2d, v2.2d
817 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
818 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
819 ; CHECK-SD-NEXT:    ret
821 ; CHECK-GI-LABEL: test_v4i64_sge:
822 ; CHECK-GI:       // %bb.0: // %entry
823 ; CHECK-GI-NEXT:    cmge v0.2d, v0.2d, v2.2d
824 ; CHECK-GI-NEXT:    cmge v1.2d, v1.2d, v3.2d
825 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
826 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
827 ; CHECK-GI-NEXT:    ret
828 entry:
829   %cmp = icmp sge <4 x i64> %v1, %v2
830   ret <4 x i1> %cmp
833 define <4 x i1> @test_v4i32_sge(<4 x i32> %v1, <4 x i32> %v2) {
834 ; CHECK-LABEL: test_v4i32_sge:
835 ; CHECK:       // %bb.0:
836 ; CHECK-NEXT:    cmge v0.4s, v0.4s, v1.4s
837 ; CHECK-NEXT:    xtn v0.4h, v0.4s
838 ; CHECK-NEXT:    ret
839   %cmp = icmp sge <4 x i32> %v1, %v2
840   ret <4 x i1> %cmp
843 define <2 x i1> @test_v2i32_sge(<2 x i32> %v1, <2 x i32> %v2) {
844 ; CHECK-LABEL: test_v2i32_sge:
845 ; CHECK:       // %bb.0:
846 ; CHECK-NEXT:    cmge v0.2s, v0.2s, v1.2s
847 ; CHECK-NEXT:    ret
848   %cmp = icmp sge <2 x i32> %v1, %v2
849   ret <2 x i1> %cmp
852 define <2 x i1> @test_v2i16_sge(<2 x i16> %v1, <2 x i16> %v2) {
853 ; CHECK-SD-LABEL: test_v2i16_sge:
854 ; CHECK-SD:       // %bb.0:
855 ; CHECK-SD-NEXT:    shl v1.2s, v1.2s, #16
856 ; CHECK-SD-NEXT:    shl v0.2s, v0.2s, #16
857 ; CHECK-SD-NEXT:    sshr v1.2s, v1.2s, #16
858 ; CHECK-SD-NEXT:    sshr v0.2s, v0.2s, #16
859 ; CHECK-SD-NEXT:    cmge v0.2s, v0.2s, v1.2s
860 ; CHECK-SD-NEXT:    ret
862 ; CHECK-GI-LABEL: test_v2i16_sge:
863 ; CHECK-GI:       // %bb.0:
864 ; CHECK-GI-NEXT:    shl v0.2s, v0.2s, #16
865 ; CHECK-GI-NEXT:    shl v1.2s, v1.2s, #16
866 ; CHECK-GI-NEXT:    sshr v0.2s, v0.2s, #16
867 ; CHECK-GI-NEXT:    sshr v1.2s, v1.2s, #16
868 ; CHECK-GI-NEXT:    cmge v0.2s, v0.2s, v1.2s
869 ; CHECK-GI-NEXT:    ret
870   %cmp = icmp sge <2 x i16> %v1, %v2
871   ret <2 x i1> %cmp
874 define <8 x i1> @test_v8i16_sge(<8 x i16> %v1, <8 x i16> %v2) {
875 ; CHECK-LABEL: test_v8i16_sge:
876 ; CHECK:       // %bb.0:
877 ; CHECK-NEXT:    cmge v0.8h, v0.8h, v1.8h
878 ; CHECK-NEXT:    xtn v0.8b, v0.8h
879 ; CHECK-NEXT:    ret
880   %cmp = icmp sge <8 x i16> %v1, %v2
881   ret <8 x i1> %cmp
884 define <4 x i1> @test_v4i16_sge(<4 x i16> %v1, <4 x i16> %v2) {
885 ; CHECK-LABEL: test_v4i16_sge:
886 ; CHECK:       // %bb.0:
887 ; CHECK-NEXT:    cmge v0.4h, v0.4h, v1.4h
888 ; CHECK-NEXT:    ret
889   %cmp = icmp sge <4 x i16> %v1, %v2
890   ret <4 x i1> %cmp
893 define <16 x i1> @test_v16i8_sge(<16 x i8> %v1, <16 x i8> %v2) {
894 ; CHECK-LABEL: test_v16i8_sge:
895 ; CHECK:       // %bb.0:
896 ; CHECK-NEXT:    cmge v0.16b, v0.16b, v1.16b
897 ; CHECK-NEXT:    ret
898   %cmp = icmp sge <16 x i8> %v1, %v2
899   ret <16 x i1> %cmp
902 define <8 x i1> @test_v8i8_sge(<8 x i8> %v1, <8 x i8> %v2) {
903 ; CHECK-LABEL: test_v8i8_sge:
904 ; CHECK:       // %bb.0:
905 ; CHECK-NEXT:    cmge v0.8b, v0.8b, v1.8b
906 ; CHECK-NEXT:    ret
907   %cmp = icmp sge <8 x i8> %v1, %v2
908   ret <8 x i1> %cmp
911 define <2 x i1> @test_v2i64_slt(<2 x i64> %v1, <2 x i64> %v2) {
912 ; CHECK-LABEL: test_v2i64_slt:
913 ; CHECK:       // %bb.0:
914 ; CHECK-NEXT:    cmgt v0.2d, v1.2d, v0.2d
915 ; CHECK-NEXT:    xtn v0.2s, v0.2d
916 ; CHECK-NEXT:    ret
917   %cmp = icmp slt <2 x i64> %v1, %v2
918   ret <2 x i1> %cmp
921 define <4 x i1> @test_v4i64_slt(<4 x i64> %v1, <4 x i64> %v2) {
922 ; CHECK-SD-LABEL: test_v4i64_slt:
923 ; CHECK-SD:       // %bb.0: // %entry
924 ; CHECK-SD-NEXT:    cmgt v1.2d, v3.2d, v1.2d
925 ; CHECK-SD-NEXT:    cmgt v0.2d, v2.2d, v0.2d
926 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
927 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
928 ; CHECK-SD-NEXT:    ret
930 ; CHECK-GI-LABEL: test_v4i64_slt:
931 ; CHECK-GI:       // %bb.0: // %entry
932 ; CHECK-GI-NEXT:    cmgt v0.2d, v2.2d, v0.2d
933 ; CHECK-GI-NEXT:    cmgt v1.2d, v3.2d, v1.2d
934 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
935 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
936 ; CHECK-GI-NEXT:    ret
937 entry:
938   %cmp = icmp slt <4 x i64> %v1, %v2
939   ret <4 x i1> %cmp
942 define <4 x i1> @test_v4i32_slt(<4 x i32> %v1, <4 x i32> %v2) {
943 ; CHECK-LABEL: test_v4i32_slt:
944 ; CHECK:       // %bb.0:
945 ; CHECK-NEXT:    cmgt v0.4s, v1.4s, v0.4s
946 ; CHECK-NEXT:    xtn v0.4h, v0.4s
947 ; CHECK-NEXT:    ret
948   %cmp = icmp slt <4 x i32> %v1, %v2
949   ret <4 x i1> %cmp
952 define <2 x i1> @test_v2i32_slt(<2 x i32> %v1, <2 x i32> %v2) {
953 ; CHECK-LABEL: test_v2i32_slt:
954 ; CHECK:       // %bb.0:
955 ; CHECK-NEXT:    cmgt v0.2s, v1.2s, v0.2s
956 ; CHECK-NEXT:    ret
957   %cmp = icmp slt <2 x i32> %v1, %v2
958   ret <2 x i1> %cmp
961 define <2 x i1> @test_v2i16_slt(<2 x i16> %v1, <2 x i16> %v2) {
962 ; CHECK-LABEL: test_v2i16_slt:
963 ; CHECK:       // %bb.0:
964 ; CHECK-NEXT:    shl v0.2s, v0.2s, #16
965 ; CHECK-NEXT:    shl v1.2s, v1.2s, #16
966 ; CHECK-NEXT:    sshr v0.2s, v0.2s, #16
967 ; CHECK-NEXT:    sshr v1.2s, v1.2s, #16
968 ; CHECK-NEXT:    cmgt v0.2s, v1.2s, v0.2s
969 ; CHECK-NEXT:    ret
970   %cmp = icmp slt <2 x i16> %v1, %v2
971   ret <2 x i1> %cmp
974 define <8 x i1> @test_v8i16_slt(<8 x i16> %v1, <8 x i16> %v2) {
975 ; CHECK-LABEL: test_v8i16_slt:
976 ; CHECK:       // %bb.0:
977 ; CHECK-NEXT:    cmgt v0.8h, v1.8h, v0.8h
978 ; CHECK-NEXT:    xtn v0.8b, v0.8h
979 ; CHECK-NEXT:    ret
980   %cmp = icmp slt <8 x i16> %v1, %v2
981   ret <8 x i1> %cmp
984 define <4 x i1> @test_v4i16_slt(<4 x i16> %v1, <4 x i16> %v2) {
985 ; CHECK-LABEL: test_v4i16_slt:
986 ; CHECK:       // %bb.0:
987 ; CHECK-NEXT:    cmgt v0.4h, v1.4h, v0.4h
988 ; CHECK-NEXT:    ret
989   %cmp = icmp slt <4 x i16> %v1, %v2
990   ret <4 x i1> %cmp
993 define <16 x i1> @test_v16i8_slt(<16 x i8> %v1, <16 x i8> %v2) {
994 ; CHECK-LABEL: test_v16i8_slt:
995 ; CHECK:       // %bb.0:
996 ; CHECK-NEXT:    cmgt v0.16b, v1.16b, v0.16b
997 ; CHECK-NEXT:    ret
998   %cmp = icmp slt <16 x i8> %v1, %v2
999   ret <16 x i1> %cmp
1002 define <8 x i1> @test_v8i8_slt(<8 x i8> %v1, <8 x i8> %v2) {
1003 ; CHECK-LABEL: test_v8i8_slt:
1004 ; CHECK:       // %bb.0:
1005 ; CHECK-NEXT:    cmgt v0.8b, v1.8b, v0.8b
1006 ; CHECK-NEXT:    ret
1007   %cmp = icmp slt <8 x i8> %v1, %v2
1008   ret <8 x i1> %cmp
1011 define <2 x i1> @test_v2i64_sle(<2 x i64> %v1, <2 x i64> %v2) {
1012 ; CHECK-LABEL: test_v2i64_sle:
1013 ; CHECK:       // %bb.0:
1014 ; CHECK-NEXT:    cmge v0.2d, v1.2d, v0.2d
1015 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1016 ; CHECK-NEXT:    ret
1017   %cmp = icmp sle <2 x i64> %v1, %v2
1018   ret <2 x i1> %cmp
1021 define <4 x i1> @test_v4i64_sle(<4 x i64> %v1, <4 x i64> %v2) {
1022 ; CHECK-SD-LABEL: test_v4i64_sle:
1023 ; CHECK-SD:       // %bb.0: // %entry
1024 ; CHECK-SD-NEXT:    cmge v1.2d, v3.2d, v1.2d
1025 ; CHECK-SD-NEXT:    cmge v0.2d, v2.2d, v0.2d
1026 ; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
1027 ; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
1028 ; CHECK-SD-NEXT:    ret
1030 ; CHECK-GI-LABEL: test_v4i64_sle:
1031 ; CHECK-GI:       // %bb.0: // %entry
1032 ; CHECK-GI-NEXT:    cmge v0.2d, v2.2d, v0.2d
1033 ; CHECK-GI-NEXT:    cmge v1.2d, v3.2d, v1.2d
1034 ; CHECK-GI-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
1035 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
1036 ; CHECK-GI-NEXT:    ret
1037 entry:
1038   %cmp = icmp sle <4 x i64> %v1, %v2
1039   ret <4 x i1> %cmp
1042 define <4 x i1> @test_v4i32_sle(<4 x i32> %v1, <4 x i32> %v2) {
1043 ; CHECK-LABEL: test_v4i32_sle:
1044 ; CHECK:       // %bb.0:
1045 ; CHECK-NEXT:    cmge v0.4s, v1.4s, v0.4s
1046 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1047 ; CHECK-NEXT:    ret
1048   %cmp = icmp sle <4 x i32> %v1, %v2
1049   ret <4 x i1> %cmp
1052 define <2 x i1> @test_v2i32_sle(<2 x i32> %v1, <2 x i32> %v2) {
1053 ; CHECK-LABEL: test_v2i32_sle:
1054 ; CHECK:       // %bb.0:
1055 ; CHECK-NEXT:    cmge v0.2s, v1.2s, v0.2s
1056 ; CHECK-NEXT:    ret
1057   %cmp = icmp sle <2 x i32> %v1, %v2
1058   ret <2 x i1> %cmp
1061 define <2 x i1> @test_v2i16_sle(<2 x i16> %v1, <2 x i16> %v2) {
1062 ; CHECK-LABEL: test_v2i16_sle:
1063 ; CHECK:       // %bb.0:
1064 ; CHECK-NEXT:    shl v0.2s, v0.2s, #16
1065 ; CHECK-NEXT:    shl v1.2s, v1.2s, #16
1066 ; CHECK-NEXT:    sshr v0.2s, v0.2s, #16
1067 ; CHECK-NEXT:    sshr v1.2s, v1.2s, #16
1068 ; CHECK-NEXT:    cmge v0.2s, v1.2s, v0.2s
1069 ; CHECK-NEXT:    ret
1070   %cmp = icmp sle <2 x i16> %v1, %v2
1071   ret <2 x i1> %cmp
1074 define <8 x i1> @test_v8i16_sle(<8 x i16> %v1, <8 x i16> %v2) {
1075 ; CHECK-LABEL: test_v8i16_sle:
1076 ; CHECK:       // %bb.0:
1077 ; CHECK-NEXT:    cmge v0.8h, v1.8h, v0.8h
1078 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1079 ; CHECK-NEXT:    ret
1080   %cmp = icmp sle <8 x i16> %v1, %v2
1081   ret <8 x i1> %cmp
1084 define <4 x i1> @test_v4i16_sle(<4 x i16> %v1, <4 x i16> %v2) {
1085 ; CHECK-LABEL: test_v4i16_sle:
1086 ; CHECK:       // %bb.0:
1087 ; CHECK-NEXT:    cmge v0.4h, v1.4h, v0.4h
1088 ; CHECK-NEXT:    ret
1089   %cmp = icmp sle <4 x i16> %v1, %v2
1090   ret <4 x i1> %cmp
1093 define <16 x i1> @test_v16i8_sle(<16 x i8> %v1, <16 x i8> %v2) {
1094 ; CHECK-LABEL: test_v16i8_sle:
1095 ; CHECK:       // %bb.0:
1096 ; CHECK-NEXT:    cmge v0.16b, v1.16b, v0.16b
1097 ; CHECK-NEXT:    ret
1098   %cmp = icmp sle <16 x i8> %v1, %v2
1099   ret <16 x i1> %cmp
1102 define <8 x i1> @test_v8i8_sle(<8 x i8> %v1, <8 x i8> %v2) {
1103 ; CHECK-LABEL: test_v8i8_sle:
1104 ; CHECK:       // %bb.0:
1105 ; CHECK-NEXT:    cmge v0.8b, v1.8b, v0.8b
1106 ; CHECK-NEXT:    ret
1107   %cmp = icmp sle <8 x i8> %v1, %v2
1108   ret <8 x i1> %cmp
1111 define <2 x i64> @v2i64_i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %d, <2 x i64> %e) {
1112 ; CHECK-LABEL: v2i64_i64:
1113 ; CHECK:       // %bb.0: // %entry
1114 ; CHECK-NEXT:    cmgt v0.2d, v1.2d, v0.2d
1115 ; CHECK-NEXT:    bsl v0.16b, v2.16b, v3.16b
1116 ; CHECK-NEXT:    ret
1117 entry:
1118   %c = icmp slt <2 x i64> %a, %b
1119   %s = select <2 x i1> %c, <2 x i64> %d, <2 x i64> %e
1120   ret <2 x i64> %s
1123 define <3 x i64> @v3i64_i64(<3 x i64> %a, <3 x i64> %b, <3 x i64> %d, <3 x i64> %e) {
1124 ; CHECK-SD-LABEL: v3i64_i64:
1125 ; CHECK-SD:       // %bb.0: // %entry
1126 ; CHECK-SD-NEXT:    // kill: def $d4 killed $d4 def $q4
1127 ; CHECK-SD-NEXT:    // kill: def $d3 killed $d3 def $q3
1128 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q1
1129 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0
1130 ; CHECK-SD-NEXT:    // kill: def $d6 killed $d6 def $q6
1131 ; CHECK-SD-NEXT:    // kill: def $d7 killed $d7 def $q7
1132 ; CHECK-SD-NEXT:    // kill: def $d5 killed $d5 def $q5
1133 ; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 def $q2
1134 ; CHECK-SD-NEXT:    ldr d16, [sp, #24]
1135 ; CHECK-SD-NEXT:    ldr d17, [sp]
1136 ; CHECK-SD-NEXT:    mov v3.d[1], v4.d[0]
1137 ; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]
1138 ; CHECK-SD-NEXT:    mov v6.d[1], v7.d[0]
1139 ; CHECK-SD-NEXT:    ldp d1, d4, [sp, #8]
1140 ; CHECK-SD-NEXT:    mov v1.d[1], v4.d[0]
1141 ; CHECK-SD-NEXT:    cmgt v0.2d, v3.2d, v0.2d
1142 ; CHECK-SD-NEXT:    bsl v0.16b, v6.16b, v1.16b
1143 ; CHECK-SD-NEXT:    cmgt v1.2d, v5.2d, v2.2d
1144 ; CHECK-SD-NEXT:    mov v2.16b, v1.16b
1145 ; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
1146 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
1147 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
1148 ; CHECK-SD-NEXT:    bsl v2.16b, v17.16b, v16.16b
1149 ; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2
1150 ; CHECK-SD-NEXT:    ret
1152 ; CHECK-GI-LABEL: v3i64_i64:
1153 ; CHECK-GI:       // %bb.0: // %entry
1154 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0
1155 ; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1
1156 ; CHECK-GI-NEXT:    // kill: def $d3 killed $d3 def $q3
1157 ; CHECK-GI-NEXT:    // kill: def $d4 killed $d4 def $q4
1158 ; CHECK-GI-NEXT:    // kill: def $d2 killed $d2 def $q2
1159 ; CHECK-GI-NEXT:    // kill: def $d6 killed $d6 def $q6
1160 ; CHECK-GI-NEXT:    // kill: def $d5 killed $d5 def $q5
1161 ; CHECK-GI-NEXT:    // kill: def $d7 killed $d7 def $q7
1162 ; CHECK-GI-NEXT:    ldr x8, [sp]
1163 ; CHECK-GI-NEXT:    ldr x10, [sp, #24]
1164 ; CHECK-GI-NEXT:    mov v0.d[1], v1.d[0]
1165 ; CHECK-GI-NEXT:    mov v3.d[1], v4.d[0]
1166 ; CHECK-GI-NEXT:    cmgt v2.2d, v5.2d, v2.2d
1167 ; CHECK-GI-NEXT:    ldp d1, d4, [sp, #8]
1168 ; CHECK-GI-NEXT:    mov v6.d[1], v7.d[0]
1169 ; CHECK-GI-NEXT:    fmov x9, d2
1170 ; CHECK-GI-NEXT:    mov v1.d[1], v4.d[0]
1171 ; CHECK-GI-NEXT:    cmgt v0.2d, v3.2d, v0.2d
1172 ; CHECK-GI-NEXT:    sbfx x9, x9, #0, #1
1173 ; CHECK-GI-NEXT:    bsl v0.16b, v6.16b, v1.16b
1174 ; CHECK-GI-NEXT:    and x8, x8, x9
1175 ; CHECK-GI-NEXT:    bic x9, x10, x9
1176 ; CHECK-GI-NEXT:    orr x8, x8, x9
1177 ; CHECK-GI-NEXT:    fmov d2, x8
1178 ; CHECK-GI-NEXT:    mov d1, v0.d[1]
1179 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0
1180 ; CHECK-GI-NEXT:    ret
1181 entry:
1182   %c = icmp slt <3 x i64> %a, %b
1183   %s = select <3 x i1> %c, <3 x i64> %d, <3 x i64> %e
1184   ret <3 x i64> %s
1187 define <4 x i64> @v4i64_i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %d, <4 x i64> %e) {
1188 ; CHECK-SD-LABEL: v4i64_i64:
1189 ; CHECK-SD:       // %bb.0: // %entry
1190 ; CHECK-SD-NEXT:    cmgt v1.2d, v3.2d, v1.2d
1191 ; CHECK-SD-NEXT:    cmgt v0.2d, v2.2d, v0.2d
1192 ; CHECK-SD-NEXT:    bsl v1.16b, v5.16b, v7.16b
1193 ; CHECK-SD-NEXT:    bsl v0.16b, v4.16b, v6.16b
1194 ; CHECK-SD-NEXT:    ret
1196 ; CHECK-GI-LABEL: v4i64_i64:
1197 ; CHECK-GI:       // %bb.0: // %entry
1198 ; CHECK-GI-NEXT:    cmgt v0.2d, v2.2d, v0.2d
1199 ; CHECK-GI-NEXT:    cmgt v1.2d, v3.2d, v1.2d
1200 ; CHECK-GI-NEXT:    bsl v0.16b, v4.16b, v6.16b
1201 ; CHECK-GI-NEXT:    bsl v1.16b, v5.16b, v7.16b
1202 ; CHECK-GI-NEXT:    ret
1203 entry:
1204   %c = icmp slt <4 x i64> %a, %b
1205   %s = select <4 x i1> %c, <4 x i64> %d, <4 x i64> %e
1206   ret <4 x i64> %s
1209 define <2 x i32> @v2i32_i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %d, <2 x i32> %e) {
1210 ; CHECK-LABEL: v2i32_i32:
1211 ; CHECK:       // %bb.0: // %entry
1212 ; CHECK-NEXT:    cmgt v0.2s, v1.2s, v0.2s
1213 ; CHECK-NEXT:    bsl v0.8b, v2.8b, v3.8b
1214 ; CHECK-NEXT:    ret
1215 entry:
1216   %c = icmp slt <2 x i32> %a, %b
1217   %s = select <2 x i1> %c, <2 x i32> %d, <2 x i32> %e
1218   ret <2 x i32> %s
1221 define <3 x i32> @v3i32_i32(<3 x i32> %a, <3 x i32> %b, <3 x i32> %d, <3 x i32> %e) {
1222 ; CHECK-SD-LABEL: v3i32_i32:
1223 ; CHECK-SD:       // %bb.0: // %entry
1224 ; CHECK-SD-NEXT:    cmgt v0.4s, v1.4s, v0.4s
1225 ; CHECK-SD-NEXT:    bsl v0.16b, v2.16b, v3.16b
1226 ; CHECK-SD-NEXT:    ret
1228 ; CHECK-GI-LABEL: v3i32_i32:
1229 ; CHECK-GI:       // %bb.0: // %entry
1230 ; CHECK-GI-NEXT:    mov w8, #31 // =0x1f
1231 ; CHECK-GI-NEXT:    cmgt v0.4s, v1.4s, v0.4s
1232 ; CHECK-GI-NEXT:    fmov s4, w8
1233 ; CHECK-GI-NEXT:    mov v4.s[1], w8
1234 ; CHECK-GI-NEXT:    mov v4.s[2], w8
1235 ; CHECK-GI-NEXT:    mov w8, #-1 // =0xffffffff
1236 ; CHECK-GI-NEXT:    fmov s1, w8
1237 ; CHECK-GI-NEXT:    mov v1.s[1], w8
1238 ; CHECK-GI-NEXT:    ushl v0.4s, v0.4s, v4.4s
1239 ; CHECK-GI-NEXT:    neg v4.4s, v4.4s
1240 ; CHECK-GI-NEXT:    sshl v0.4s, v0.4s, v4.4s
1241 ; CHECK-GI-NEXT:    mov v1.s[2], w8
1242 ; CHECK-GI-NEXT:    eor v1.16b, v0.16b, v1.16b
1243 ; CHECK-GI-NEXT:    and v0.16b, v2.16b, v0.16b
1244 ; CHECK-GI-NEXT:    and v1.16b, v3.16b, v1.16b
1245 ; CHECK-GI-NEXT:    orr v0.16b, v0.16b, v1.16b
1246 ; CHECK-GI-NEXT:    ret
1247 entry:
1248   %c = icmp slt <3 x i32> %a, %b
1249   %s = select <3 x i1> %c, <3 x i32> %d, <3 x i32> %e
1250   ret <3 x i32> %s
1253 define <4 x i32> @v4i32_i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %d, <4 x i32> %e) {
1254 ; CHECK-LABEL: v4i32_i32:
1255 ; CHECK:       // %bb.0: // %entry
1256 ; CHECK-NEXT:    cmgt v0.4s, v1.4s, v0.4s
1257 ; CHECK-NEXT:    bsl v0.16b, v2.16b, v3.16b
1258 ; CHECK-NEXT:    ret
1259 entry:
1260   %c = icmp slt <4 x i32> %a, %b
1261   %s = select <4 x i1> %c, <4 x i32> %d, <4 x i32> %e
1262   ret <4 x i32> %s
1265 define <8 x i32> @v8i32_i32(<8 x i32> %a, <8 x i32> %b, <8 x i32> %d, <8 x i32> %e) {
1266 ; CHECK-SD-LABEL: v8i32_i32:
1267 ; CHECK-SD:       // %bb.0: // %entry
1268 ; CHECK-SD-NEXT:    cmgt v1.4s, v3.4s, v1.4s
1269 ; CHECK-SD-NEXT:    cmgt v0.4s, v2.4s, v0.4s
1270 ; CHECK-SD-NEXT:    bsl v1.16b, v5.16b, v7.16b
1271 ; CHECK-SD-NEXT:    bsl v0.16b, v4.16b, v6.16b
1272 ; CHECK-SD-NEXT:    ret
1274 ; CHECK-GI-LABEL: v8i32_i32:
1275 ; CHECK-GI:       // %bb.0: // %entry
1276 ; CHECK-GI-NEXT:    cmgt v0.4s, v2.4s, v0.4s
1277 ; CHECK-GI-NEXT:    cmgt v1.4s, v3.4s, v1.4s
1278 ; CHECK-GI-NEXT:    bsl v0.16b, v4.16b, v6.16b
1279 ; CHECK-GI-NEXT:    bsl v1.16b, v5.16b, v7.16b
1280 ; CHECK-GI-NEXT:    ret
1281 entry:
1282   %c = icmp slt <8 x i32> %a, %b
1283   %s = select <8 x i1> %c, <8 x i32> %d, <8 x i32> %e
1284   ret <8 x i32> %s
1287 define <4 x i16> @v4i16_i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %d, <4 x i16> %e) {
1288 ; CHECK-LABEL: v4i16_i16:
1289 ; CHECK:       // %bb.0: // %entry
1290 ; CHECK-NEXT:    cmgt v0.4h, v1.4h, v0.4h
1291 ; CHECK-NEXT:    bsl v0.8b, v2.8b, v3.8b
1292 ; CHECK-NEXT:    ret
1293 entry:
1294   %c = icmp slt <4 x i16> %a, %b
1295   %s = select <4 x i1> %c, <4 x i16> %d, <4 x i16> %e
1296   ret <4 x i16> %s
1299 define <8 x i16> @v8i16_i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %d, <8 x i16> %e) {
1300 ; CHECK-LABEL: v8i16_i16:
1301 ; CHECK:       // %bb.0: // %entry
1302 ; CHECK-NEXT:    cmgt v0.8h, v1.8h, v0.8h
1303 ; CHECK-NEXT:    bsl v0.16b, v2.16b, v3.16b
1304 ; CHECK-NEXT:    ret
1305 entry:
1306   %c = icmp slt <8 x i16> %a, %b
1307   %s = select <8 x i1> %c, <8 x i16> %d, <8 x i16> %e
1308   ret <8 x i16> %s
1311 define <16 x i16> @v16i16_i16(<16 x i16> %a, <16 x i16> %b, <16 x i16> %d, <16 x i16> %e) {
1312 ; CHECK-SD-LABEL: v16i16_i16:
1313 ; CHECK-SD:       // %bb.0: // %entry
1314 ; CHECK-SD-NEXT:    cmgt v1.8h, v3.8h, v1.8h
1315 ; CHECK-SD-NEXT:    cmgt v0.8h, v2.8h, v0.8h
1316 ; CHECK-SD-NEXT:    bsl v1.16b, v5.16b, v7.16b
1317 ; CHECK-SD-NEXT:    bsl v0.16b, v4.16b, v6.16b
1318 ; CHECK-SD-NEXT:    ret
1320 ; CHECK-GI-LABEL: v16i16_i16:
1321 ; CHECK-GI:       // %bb.0: // %entry
1322 ; CHECK-GI-NEXT:    cmgt v0.8h, v2.8h, v0.8h
1323 ; CHECK-GI-NEXT:    cmgt v1.8h, v3.8h, v1.8h
1324 ; CHECK-GI-NEXT:    bsl v0.16b, v4.16b, v6.16b
1325 ; CHECK-GI-NEXT:    bsl v1.16b, v5.16b, v7.16b
1326 ; CHECK-GI-NEXT:    ret
1327 entry:
1328   %c = icmp slt <16 x i16> %a, %b
1329   %s = select <16 x i1> %c, <16 x i16> %d, <16 x i16> %e
1330   ret <16 x i16> %s
1333 define <8 x i8> @v8i8_i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %d, <8 x i8> %e) {
1334 ; CHECK-LABEL: v8i8_i8:
1335 ; CHECK:       // %bb.0: // %entry
1336 ; CHECK-NEXT:    cmgt v0.8b, v1.8b, v0.8b
1337 ; CHECK-NEXT:    bsl v0.8b, v2.8b, v3.8b
1338 ; CHECK-NEXT:    ret
1339 entry:
1340   %c = icmp slt <8 x i8> %a, %b
1341   %s = select <8 x i1> %c, <8 x i8> %d, <8 x i8> %e
1342   ret <8 x i8> %s
1345 define <16 x i8> @v16i8_i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %d, <16 x i8> %e) {
1346 ; CHECK-LABEL: v16i8_i8:
1347 ; CHECK:       // %bb.0: // %entry
1348 ; CHECK-NEXT:    cmgt v0.16b, v1.16b, v0.16b
1349 ; CHECK-NEXT:    bsl v0.16b, v2.16b, v3.16b
1350 ; CHECK-NEXT:    ret
1351 entry:
1352   %c = icmp slt <16 x i8> %a, %b
1353   %s = select <16 x i1> %c, <16 x i8> %d, <16 x i8> %e
1354   ret <16 x i8> %s
1357 define <32 x i8> @v32i8_i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %d, <32 x i8> %e) {
1358 ; CHECK-SD-LABEL: v32i8_i8:
1359 ; CHECK-SD:       // %bb.0: // %entry
1360 ; CHECK-SD-NEXT:    cmgt v1.16b, v3.16b, v1.16b
1361 ; CHECK-SD-NEXT:    cmgt v0.16b, v2.16b, v0.16b
1362 ; CHECK-SD-NEXT:    bsl v1.16b, v5.16b, v7.16b
1363 ; CHECK-SD-NEXT:    bsl v0.16b, v4.16b, v6.16b
1364 ; CHECK-SD-NEXT:    ret
1366 ; CHECK-GI-LABEL: v32i8_i8:
1367 ; CHECK-GI:       // %bb.0: // %entry
1368 ; CHECK-GI-NEXT:    cmgt v0.16b, v2.16b, v0.16b
1369 ; CHECK-GI-NEXT:    cmgt v1.16b, v3.16b, v1.16b
1370 ; CHECK-GI-NEXT:    bsl v0.16b, v4.16b, v6.16b
1371 ; CHECK-GI-NEXT:    bsl v1.16b, v5.16b, v7.16b
1372 ; CHECK-GI-NEXT:    ret
1373 entry:
1374   %c = icmp slt <32 x i8> %a, %b
1375   %s = select <32 x i1> %c, <32 x i8> %d, <32 x i8> %e
1376   ret <32 x i8> %s
1379 ; ===== ICMP Zero RHS =====
1381 define <8 x i1> @icmp_eq_v8i8_Zero_RHS(<8 x i8> %a) {
1382 ; CHECK-LABEL: icmp_eq_v8i8_Zero_RHS:
1383 ; CHECK:       // %bb.0:
1384 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, #0
1385 ; CHECK-NEXT:    ret
1386     %c = icmp eq <8 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1387     ret <8 x i1> %c
1390 define <16 x i1> @icmp_eq_v16i8_Zero_RHS(<16 x i8> %a) {
1391 ; CHECK-LABEL: icmp_eq_v16i8_Zero_RHS:
1392 ; CHECK:       // %bb.0:
1393 ; CHECK-NEXT:    cmeq v0.16b, v0.16b, #0
1394 ; CHECK-NEXT:    ret
1395     %c = icmp eq <16 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1396     ret <16 x i1> %c
1399 define <4 x i1> @icmp_eq_v4i16_Zero_RHS(<4 x i16> %a) {
1400 ; CHECK-LABEL: icmp_eq_v4i16_Zero_RHS:
1401 ; CHECK:       // %bb.0:
1402 ; CHECK-NEXT:    cmeq v0.4h, v0.4h, #0
1403 ; CHECK-NEXT:    ret
1404     %c = icmp eq <4 x i16> %a, <i16 0, i16 0, i16 0, i16 0>
1405     ret <4 x i1> %c
1408 define <8 x i1> @icmp_eq_v8i16_Zero_RHS(<8 x i16> %a) {
1409 ; CHECK-LABEL: icmp_eq_v8i16_Zero_RHS:
1410 ; CHECK:       // %bb.0:
1411 ; CHECK-NEXT:    cmeq v0.8h, v0.8h, #0
1412 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1413 ; CHECK-NEXT:    ret
1414     %c = icmp eq <8 x i16> %a, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
1415     ret <8 x i1> %c
1418 define <2 x i1> @icmp_eq_v2i32_Zero_RHS(<2 x i32> %a) {
1419 ; CHECK-LABEL: icmp_eq_v2i32_Zero_RHS:
1420 ; CHECK:       // %bb.0:
1421 ; CHECK-NEXT:    cmeq v0.2s, v0.2s, #0
1422 ; CHECK-NEXT:    ret
1423     %c = icmp eq <2 x i32> %a, <i32 0, i32 0>
1424     ret <2 x i1> %c
1427 define <4 x i1> @icmp_eq_v4i32_Zero_RHS(<4 x i32> %a) {
1428 ; CHECK-LABEL: icmp_eq_v4i32_Zero_RHS:
1429 ; CHECK:       // %bb.0:
1430 ; CHECK-NEXT:    cmeq v0.4s, v0.4s, #0
1431 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1432 ; CHECK-NEXT:    ret
1433     %c = icmp eq <4 x i32> %a, <i32 0, i32 0, i32 0, i32 0>
1434     ret <4 x i1> %c
1437 define <2 x i1> @icmp_eq_v2i64_Zero_RHS(<2 x i64> %a) {
1438 ; CHECK-LABEL: icmp_eq_v2i64_Zero_RHS:
1439 ; CHECK:       // %bb.0:
1440 ; CHECK-NEXT:    cmeq v0.2d, v0.2d, #0
1441 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1442 ; CHECK-NEXT:    ret
1443     %c = icmp eq <2 x i64> %a, <i64 0, i64 0>
1444     ret <2 x i1> %c
1447 define <8 x i1> @icmp_sge_v8i8_Zero_RHS(<8 x i8> %a) {
1448 ; CHECK-LABEL: icmp_sge_v8i8_Zero_RHS:
1449 ; CHECK:       // %bb.0:
1450 ; CHECK-NEXT:    cmge v0.8b, v0.8b, #0
1451 ; CHECK-NEXT:    ret
1452     %c = icmp sge <8 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1453     ret <8 x i1> %c
1456 define <16 x i1> @icmp_sge_v16i8_Zero_RHS(<16 x i8> %a) {
1457 ; CHECK-LABEL: icmp_sge_v16i8_Zero_RHS:
1458 ; CHECK:       // %bb.0:
1459 ; CHECK-NEXT:    cmge v0.16b, v0.16b, #0
1460 ; CHECK-NEXT:    ret
1461     %c = icmp sge <16 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1462     ret <16 x i1> %c
1465 define <4 x i1> @icmp_sge_v4i16_Zero_RHS(<4 x i16> %a) {
1466 ; CHECK-LABEL: icmp_sge_v4i16_Zero_RHS:
1467 ; CHECK:       // %bb.0:
1468 ; CHECK-NEXT:    cmge v0.4h, v0.4h, #0
1469 ; CHECK-NEXT:    ret
1470     %c = icmp sge <4 x i16> %a, <i16 0, i16 0, i16 0, i16 0>
1471     ret <4 x i1> %c
1474 define <8 x i1> @icmp_sge_v8i16_Zero_RHS(<8 x i16> %a) {
1475 ; CHECK-LABEL: icmp_sge_v8i16_Zero_RHS:
1476 ; CHECK:       // %bb.0:
1477 ; CHECK-NEXT:    cmge v0.8h, v0.8h, #0
1478 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1479 ; CHECK-NEXT:    ret
1480     %c = icmp sge <8 x i16> %a, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
1481     ret <8 x i1> %c
1484 define <2 x i1> @icmp_sge_v2i32_Zero_RHS(<2 x i32> %a) {
1485 ; CHECK-LABEL: icmp_sge_v2i32_Zero_RHS:
1486 ; CHECK:       // %bb.0:
1487 ; CHECK-NEXT:    cmge v0.2s, v0.2s, #0
1488 ; CHECK-NEXT:    ret
1489     %c = icmp sge <2 x i32> %a, <i32 0, i32 0>
1490     ret <2 x i1> %c
1493 define <4 x i1> @icmp_sge_v4i32_Zero_RHS(<4 x i32> %a) {
1494 ; CHECK-LABEL: icmp_sge_v4i32_Zero_RHS:
1495 ; CHECK:       // %bb.0:
1496 ; CHECK-NEXT:    cmge v0.4s, v0.4s, #0
1497 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1498 ; CHECK-NEXT:    ret
1499     %c = icmp sge <4 x i32> %a, <i32 0, i32 0, i32 0, i32 0>
1500     ret <4 x i1> %c
1503 define <2 x i1> @icmp_sge_v2i64_Zero_RHS(<2 x i64> %a) {
1504 ; CHECK-LABEL: icmp_sge_v2i64_Zero_RHS:
1505 ; CHECK:       // %bb.0:
1506 ; CHECK-NEXT:    cmge v0.2d, v0.2d, #0
1507 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1508 ; CHECK-NEXT:    ret
1509     %c = icmp sge <2 x i64> %a, <i64 0, i64 0>
1510     ret <2 x i1> %c
1513 define <8 x i1> @icmp_sgt_v8i8_Zero_RHS(<8 x i8> %a) {
1514 ; CHECK-LABEL: icmp_sgt_v8i8_Zero_RHS:
1515 ; CHECK:       // %bb.0:
1516 ; CHECK-NEXT:    cmgt v0.8b, v0.8b, #0
1517 ; CHECK-NEXT:    ret
1518     %c = icmp sgt <8 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1519     ret <8 x i1> %c
1522 define <16 x i1> @icmp_sgt_v16i8_Zero_RHS(<16 x i8> %a) {
1523 ; CHECK-LABEL: icmp_sgt_v16i8_Zero_RHS:
1524 ; CHECK:       // %bb.0:
1525 ; CHECK-NEXT:    cmgt v0.16b, v0.16b, #0
1526 ; CHECK-NEXT:    ret
1527     %c = icmp sgt <16 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1528     ret <16 x i1> %c
1531 define <4 x i1> @icmp_sgt_v4i16_Zero_RHS(<4 x i16> %a) {
1532 ; CHECK-LABEL: icmp_sgt_v4i16_Zero_RHS:
1533 ; CHECK:       // %bb.0:
1534 ; CHECK-NEXT:    cmgt v0.4h, v0.4h, #0
1535 ; CHECK-NEXT:    ret
1536     %c = icmp sgt <4 x i16> %a, <i16 0, i16 0, i16 0, i16 0>
1537     ret <4 x i1> %c
1540 define <8 x i1> @icmp_sgt_v8i16_Zero_RHS(<8 x i16> %a) {
1541 ; CHECK-LABEL: icmp_sgt_v8i16_Zero_RHS:
1542 ; CHECK:       // %bb.0:
1543 ; CHECK-NEXT:    cmgt v0.8h, v0.8h, #0
1544 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1545 ; CHECK-NEXT:    ret
1546     %c = icmp sgt <8 x i16> %a, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
1547     ret <8 x i1> %c
1550 define <2 x i1> @icmp_sgt_v2i32_Zero_RHS(<2 x i32> %a) {
1551 ; CHECK-LABEL: icmp_sgt_v2i32_Zero_RHS:
1552 ; CHECK:       // %bb.0:
1553 ; CHECK-NEXT:    cmgt v0.2s, v0.2s, #0
1554 ; CHECK-NEXT:    ret
1555     %c = icmp sgt <2 x i32> %a, <i32 0, i32 0>
1556     ret <2 x i1> %c
1559 define <4 x i1> @icmp_sgt_v4i32_Zero_RHS(<4 x i32> %a) {
1560 ; CHECK-LABEL: icmp_sgt_v4i32_Zero_RHS:
1561 ; CHECK:       // %bb.0:
1562 ; CHECK-NEXT:    cmgt v0.4s, v0.4s, #0
1563 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1564 ; CHECK-NEXT:    ret
1565     %c = icmp sgt <4 x i32> %a, <i32 0, i32 0, i32 0, i32 0>
1566     ret <4 x i1> %c
1569 define <2 x i1> @icmp_sgt_v2i64_Zero_RHS(<2 x i64> %a) {
1570 ; CHECK-LABEL: icmp_sgt_v2i64_Zero_RHS:
1571 ; CHECK:       // %bb.0:
1572 ; CHECK-NEXT:    cmgt v0.2d, v0.2d, #0
1573 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1574 ; CHECK-NEXT:    ret
1575     %c = icmp sgt <2 x i64> %a, <i64 0, i64 0>
1576     ret <2 x i1> %c
1579 define <8 x i1> @icmp_sle_v8i8_Zero_RHS(<8 x i8> %a) {
1580 ; CHECK-LABEL: icmp_sle_v8i8_Zero_RHS:
1581 ; CHECK:       // %bb.0:
1582 ; CHECK-NEXT:    cmle v0.8b, v0.8b, #0
1583 ; CHECK-NEXT:    ret
1584     %c = icmp sle <8 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1585     ret <8 x i1> %c
1588 define <16 x i1> @icmp_sle_v16i8_Zero_RHS(<16 x i8> %a) {
1589 ; CHECK-LABEL: icmp_sle_v16i8_Zero_RHS:
1590 ; CHECK:       // %bb.0:
1591 ; CHECK-NEXT:    cmle v0.16b, v0.16b, #0
1592 ; CHECK-NEXT:    ret
1593     %c = icmp sle <16 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1594     ret <16 x i1> %c
1597 define <4 x i1> @icmp_sle_v4i16_Zero_RHS(<4 x i16> %a) {
1598 ; CHECK-LABEL: icmp_sle_v4i16_Zero_RHS:
1599 ; CHECK:       // %bb.0:
1600 ; CHECK-NEXT:    cmle v0.4h, v0.4h, #0
1601 ; CHECK-NEXT:    ret
1602     %c = icmp sle <4 x i16> %a, <i16 0, i16 0, i16 0, i16 0>
1603     ret <4 x i1> %c
1606 define <8 x i1> @icmp_sle_v8i16_Zero_RHS(<8 x i16> %a) {
1607 ; CHECK-LABEL: icmp_sle_v8i16_Zero_RHS:
1608 ; CHECK:       // %bb.0:
1609 ; CHECK-NEXT:    cmle v0.8h, v0.8h, #0
1610 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1611 ; CHECK-NEXT:    ret
1612     %c = icmp sle <8 x i16> %a, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
1613     ret <8 x i1> %c
1616 define <2 x i1> @icmp_sle_v2i32_Zero_RHS(<2 x i32> %a) {
1617 ; CHECK-LABEL: icmp_sle_v2i32_Zero_RHS:
1618 ; CHECK:       // %bb.0:
1619 ; CHECK-NEXT:    cmle v0.2s, v0.2s, #0
1620 ; CHECK-NEXT:    ret
1621     %c = icmp sle <2 x i32> %a, <i32 0, i32 0>
1622     ret <2 x i1> %c
1625 define <4 x i1> @icmp_sle_v4i32_Zero_RHS(<4 x i32> %a) {
1626 ; CHECK-LABEL: icmp_sle_v4i32_Zero_RHS:
1627 ; CHECK:       // %bb.0:
1628 ; CHECK-NEXT:    cmle v0.4s, v0.4s, #0
1629 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1630 ; CHECK-NEXT:    ret
1631     %c = icmp sle <4 x i32> %a, <i32 0, i32 0, i32 0, i32 0>
1632     ret <4 x i1> %c
1635 define <2 x i1> @icmp_sle_v2i64_Zero_RHS(<2 x i64> %a) {
1636 ; CHECK-LABEL: icmp_sle_v2i64_Zero_RHS:
1637 ; CHECK:       // %bb.0:
1638 ; CHECK-NEXT:    cmle v0.2d, v0.2d, #0
1639 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1640 ; CHECK-NEXT:    ret
1641     %c = icmp sle <2 x i64> %a, <i64 0, i64 0>
1642     ret <2 x i1> %c
1645 define <8 x i1> @icmp_slt_v8i8_Zero_RHS(<8 x i8> %a) {
1646 ; CHECK-LABEL: icmp_slt_v8i8_Zero_RHS:
1647 ; CHECK:       // %bb.0:
1648 ; CHECK-NEXT:    cmlt v0.8b, v0.8b, #0
1649 ; CHECK-NEXT:    ret
1650     %c = icmp slt <8 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1651     ret <8 x i1> %c
1654 define <16 x i1> @icmp_slt_v16i8_Zero_RHS(<16 x i8> %a) {
1655 ; CHECK-LABEL: icmp_slt_v16i8_Zero_RHS:
1656 ; CHECK:       // %bb.0:
1657 ; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0
1658 ; CHECK-NEXT:    ret
1659     %c = icmp slt <16 x i8> %a, <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
1660     ret <16 x i1> %c
1663 define <4 x i1> @icmp_slt_v4i16_Zero_RHS(<4 x i16> %a) {
1664 ; CHECK-LABEL: icmp_slt_v4i16_Zero_RHS:
1665 ; CHECK:       // %bb.0:
1666 ; CHECK-NEXT:    cmlt v0.4h, v0.4h, #0
1667 ; CHECK-NEXT:    ret
1668     %c = icmp slt <4 x i16> %a, <i16 0, i16 0, i16 0, i16 0>
1669     ret <4 x i1> %c
1672 define <8 x i1> @icmp_slt_v8i16_Zero_RHS(<8 x i16> %a) {
1673 ; CHECK-LABEL: icmp_slt_v8i16_Zero_RHS:
1674 ; CHECK:       // %bb.0:
1675 ; CHECK-NEXT:    cmlt v0.8h, v0.8h, #0
1676 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1677 ; CHECK-NEXT:    ret
1678     %c = icmp slt <8 x i16> %a, <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
1679     ret <8 x i1> %c
1682 define <2 x i1> @icmp_slt_v2i32_Zero_RHS(<2 x i32> %a) {
1683 ; CHECK-LABEL: icmp_slt_v2i32_Zero_RHS:
1684 ; CHECK:       // %bb.0:
1685 ; CHECK-NEXT:    cmlt v0.2s, v0.2s, #0
1686 ; CHECK-NEXT:    ret
1687     %c = icmp slt <2 x i32> %a, <i32 0, i32 0>
1688     ret <2 x i1> %c
1691 define <4 x i1> @icmp_slt_v4i32_Zero_RHS(<4 x i32> %a) {
1692 ; CHECK-LABEL: icmp_slt_v4i32_Zero_RHS:
1693 ; CHECK:       // %bb.0:
1694 ; CHECK-NEXT:    cmlt v0.4s, v0.4s, #0
1695 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1696 ; CHECK-NEXT:    ret
1697     %c = icmp slt <4 x i32> %a, <i32 0, i32 0, i32 0, i32 0>
1698     ret <4 x i1> %c
1701 define <2 x i1> @icmp_slt_v2i64_Zero_RHS(<2 x i64> %a) {
1702 ; CHECK-LABEL: icmp_slt_v2i64_Zero_RHS:
1703 ; CHECK:       // %bb.0:
1704 ; CHECK-NEXT:    cmlt v0.2d, v0.2d, #0
1705 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1706 ; CHECK-NEXT:    ret
1707     %c = icmp slt <2 x i64> %a, <i64 0, i64 0>
1708     ret <2 x i1> %c
1711 ; ===== ICMP Zero LHS =====
1713 define <8 x i1> @icmp_eq_v8i8_Zero_LHS(<8 x i8> %a) {
1714 ; CHECK-LABEL: icmp_eq_v8i8_Zero_LHS:
1715 ; CHECK:       // %bb.0:
1716 ; CHECK-NEXT:    cmeq v0.8b, v0.8b, #0
1717 ; CHECK-NEXT:    ret
1718     %c = icmp eq <8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1719     ret <8 x i1> %c
1722 define <16 x i1> @icmp_eq_v16i8_Zero_LHS(<16 x i8> %a) {
1723 ; CHECK-LABEL: icmp_eq_v16i8_Zero_LHS:
1724 ; CHECK:       // %bb.0:
1725 ; CHECK-NEXT:    cmeq v0.16b, v0.16b, #0
1726 ; CHECK-NEXT:    ret
1727     %c = icmp eq <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1728     ret <16 x i1> %c
1731 define <4 x i1> @icmp_eq_v4i16_Zero_LHS(<4 x i16> %a) {
1732 ; CHECK-LABEL: icmp_eq_v4i16_Zero_LHS:
1733 ; CHECK:       // %bb.0:
1734 ; CHECK-NEXT:    cmeq v0.4h, v0.4h, #0
1735 ; CHECK-NEXT:    ret
1736     %c = icmp eq <4 x i16> <i16 0, i16 0, i16 0, i16 0>, %a
1737     ret <4 x i1> %c
1740 define <8 x i1> @icmp_eq_v8i16_Zero_LHS(<8 x i16> %a) {
1741 ; CHECK-LABEL: icmp_eq_v8i16_Zero_LHS:
1742 ; CHECK:       // %bb.0:
1743 ; CHECK-NEXT:    cmeq v0.8h, v0.8h, #0
1744 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1745 ; CHECK-NEXT:    ret
1746     %c = icmp eq <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, %a
1747     ret <8 x i1> %c
1750 define <2 x i1> @icmp_eq_v2i32_Zero_LHS(<2 x i32> %a) {
1751 ; CHECK-LABEL: icmp_eq_v2i32_Zero_LHS:
1752 ; CHECK:       // %bb.0:
1753 ; CHECK-NEXT:    cmeq v0.2s, v0.2s, #0
1754 ; CHECK-NEXT:    ret
1755     %c = icmp eq <2 x i32> <i32 0, i32 0>, %a
1756     ret <2 x i1> %c
1759 define <4 x i1> @icmp_eq_v4i32_Zero_LHS(<4 x i32> %a) {
1760 ; CHECK-LABEL: icmp_eq_v4i32_Zero_LHS:
1761 ; CHECK:       // %bb.0:
1762 ; CHECK-NEXT:    cmeq v0.4s, v0.4s, #0
1763 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1764 ; CHECK-NEXT:    ret
1765     %c = icmp eq <4 x i32> <i32 0, i32 0, i32 0, i32 0>, %a
1766     ret <4 x i1> %c
1769 define <2 x i1> @icmp_eq_v2i64_Zero_LHS(<2 x i64> %a) {
1770 ; CHECK-LABEL: icmp_eq_v2i64_Zero_LHS:
1771 ; CHECK:       // %bb.0:
1772 ; CHECK-NEXT:    cmeq v0.2d, v0.2d, #0
1773 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1774 ; CHECK-NEXT:    ret
1775     %c = icmp eq <2 x i64> <i64 0, i64 0>, %a
1776     ret <2 x i1> %c
1779 define <8 x i1> @icmp_sge_v8i8_Zero_LHS(<8 x i8> %a) {
1780 ; CHECK-LABEL: icmp_sge_v8i8_Zero_LHS:
1781 ; CHECK:       // %bb.0:
1782 ; CHECK-NEXT:    cmle v0.8b, v0.8b, #0
1783 ; CHECK-NEXT:    ret
1784     %c = icmp sge <8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1785     ret <8 x i1> %c
1788 define <16 x i1> @icmp_sge_v16i8_Zero_LHS(<16 x i8> %a) {
1789 ; CHECK-LABEL: icmp_sge_v16i8_Zero_LHS:
1790 ; CHECK:       // %bb.0:
1791 ; CHECK-NEXT:    cmle v0.16b, v0.16b, #0
1792 ; CHECK-NEXT:    ret
1793     %c = icmp sge <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1794     ret <16 x i1> %c
1797 define <4 x i1> @icmp_sge_v4i16_Zero_LHS(<4 x i16> %a) {
1798 ; CHECK-LABEL: icmp_sge_v4i16_Zero_LHS:
1799 ; CHECK:       // %bb.0:
1800 ; CHECK-NEXT:    cmle v0.4h, v0.4h, #0
1801 ; CHECK-NEXT:    ret
1802     %c = icmp sge <4 x i16> <i16 0, i16 0, i16 0, i16 0>, %a
1803     ret <4 x i1> %c
1806 define <8 x i1> @icmp_sge_v8i16_Zero_LHS(<8 x i16> %a) {
1807 ; CHECK-LABEL: icmp_sge_v8i16_Zero_LHS:
1808 ; CHECK:       // %bb.0:
1809 ; CHECK-NEXT:    cmle v0.8h, v0.8h, #0
1810 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1811 ; CHECK-NEXT:    ret
1812     %c = icmp sge <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, %a
1813     ret <8 x i1> %c
1816 define <2 x i1> @icmp_sge_v2i32_Zero_LHS(<2 x i32> %a) {
1817 ; CHECK-LABEL: icmp_sge_v2i32_Zero_LHS:
1818 ; CHECK:       // %bb.0:
1819 ; CHECK-NEXT:    cmle v0.2s, v0.2s, #0
1820 ; CHECK-NEXT:    ret
1821     %c = icmp sge <2 x i32> <i32 0, i32 0>, %a
1822     ret <2 x i1> %c
1825 define <4 x i1> @icmp_sge_v4i32_Zero_LHS(<4 x i32> %a) {
1826 ; CHECK-LABEL: icmp_sge_v4i32_Zero_LHS:
1827 ; CHECK:       // %bb.0:
1828 ; CHECK-NEXT:    cmle v0.4s, v0.4s, #0
1829 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1830 ; CHECK-NEXT:    ret
1831     %c = icmp sge <4 x i32> <i32 0, i32 0, i32 0, i32 0>, %a
1832     ret <4 x i1> %c
1835 define <2 x i1> @icmp_sge_v2i64_Zero_LHS(<2 x i64> %a) {
1836 ; CHECK-LABEL: icmp_sge_v2i64_Zero_LHS:
1837 ; CHECK:       // %bb.0:
1838 ; CHECK-NEXT:    cmle v0.2d, v0.2d, #0
1839 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1840 ; CHECK-NEXT:    ret
1841     %c = icmp sge <2 x i64> <i64 0, i64 0>, %a
1842     ret <2 x i1> %c
1845 define <8 x i1> @icmp_sgt_v8i8_Zero_LHS(<8 x i8> %a) {
1846 ; CHECK-LABEL: icmp_sgt_v8i8_Zero_LHS:
1847 ; CHECK:       // %bb.0:
1848 ; CHECK-NEXT:    cmlt v0.8b, v0.8b, #0
1849 ; CHECK-NEXT:    ret
1850     %c = icmp sgt <8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1851     ret <8 x i1> %c
1854 define <16 x i1> @icmp_sgt_v16i8_Zero_LHS(<16 x i8> %a) {
1855 ; CHECK-LABEL: icmp_sgt_v16i8_Zero_LHS:
1856 ; CHECK:       // %bb.0:
1857 ; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0
1858 ; CHECK-NEXT:    ret
1859     %c = icmp sgt <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1860     ret <16 x i1> %c
1863 define <4 x i1> @icmp_sgt_v4i16_Zero_LHS(<4 x i16> %a) {
1864 ; CHECK-LABEL: icmp_sgt_v4i16_Zero_LHS:
1865 ; CHECK:       // %bb.0:
1866 ; CHECK-NEXT:    cmlt v0.4h, v0.4h, #0
1867 ; CHECK-NEXT:    ret
1868     %c = icmp sgt <4 x i16> <i16 0, i16 0, i16 0, i16 0>, %a
1869     ret <4 x i1> %c
1872 define <8 x i1> @icmp_sgt_v8i16_Zero_LHS(<8 x i16> %a) {
1873 ; CHECK-LABEL: icmp_sgt_v8i16_Zero_LHS:
1874 ; CHECK:       // %bb.0:
1875 ; CHECK-NEXT:    cmlt v0.8h, v0.8h, #0
1876 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1877 ; CHECK-NEXT:    ret
1878     %c = icmp sgt <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, %a
1879     ret <8 x i1> %c
1882 define <2 x i1> @icmp_sgt_v2i32_Zero_LHS(<2 x i32> %a) {
1883 ; CHECK-LABEL: icmp_sgt_v2i32_Zero_LHS:
1884 ; CHECK:       // %bb.0:
1885 ; CHECK-NEXT:    cmlt v0.2s, v0.2s, #0
1886 ; CHECK-NEXT:    ret
1887     %c = icmp sgt <2 x i32> <i32 0, i32 0>, %a
1888     ret <2 x i1> %c
1891 define <4 x i1> @icmp_sgt_v4i32_Zero_LHS(<4 x i32> %a) {
1892 ; CHECK-LABEL: icmp_sgt_v4i32_Zero_LHS:
1893 ; CHECK:       // %bb.0:
1894 ; CHECK-NEXT:    cmlt v0.4s, v0.4s, #0
1895 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1896 ; CHECK-NEXT:    ret
1897     %c = icmp sgt <4 x i32> <i32 0, i32 0, i32 0, i32 0>, %a
1898     ret <4 x i1> %c
1901 define <2 x i1> @icmp_sgt_v2i64_Zero_LHS(<2 x i64> %a) {
1902 ; CHECK-LABEL: icmp_sgt_v2i64_Zero_LHS:
1903 ; CHECK:       // %bb.0:
1904 ; CHECK-NEXT:    cmlt v0.2d, v0.2d, #0
1905 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1906 ; CHECK-NEXT:    ret
1907     %c = icmp sgt <2 x i64> <i64 0, i64 0>, %a
1908     ret <2 x i1> %c
1911 define <8 x i1> @icmp_sle_v8i8_Zero_LHS(<8 x i8> %a) {
1912 ; CHECK-LABEL: icmp_sle_v8i8_Zero_LHS:
1913 ; CHECK:       // %bb.0:
1914 ; CHECK-NEXT:    cmge v0.8b, v0.8b, #0
1915 ; CHECK-NEXT:    ret
1916     %c = icmp sle <8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1917     ret <8 x i1> %c
1920 define <16 x i1> @icmp_sle_v16i8_Zero_LHS(<16 x i8> %a) {
1921 ; CHECK-LABEL: icmp_sle_v16i8_Zero_LHS:
1922 ; CHECK:       // %bb.0:
1923 ; CHECK-NEXT:    cmge v0.16b, v0.16b, #0
1924 ; CHECK-NEXT:    ret
1925     %c = icmp sle <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1926     ret <16 x i1> %c
1929 define <4 x i1> @icmp_sle_v4i16_Zero_LHS(<4 x i16> %a) {
1930 ; CHECK-LABEL: icmp_sle_v4i16_Zero_LHS:
1931 ; CHECK:       // %bb.0:
1932 ; CHECK-NEXT:    cmge v0.4h, v0.4h, #0
1933 ; CHECK-NEXT:    ret
1934     %c = icmp sle <4 x i16> <i16 0, i16 0, i16 0, i16 0>, %a
1935     ret <4 x i1> %c
1938 define <8 x i1> @icmp_sle_v8i16_Zero_LHS(<8 x i16> %a) {
1939 ; CHECK-LABEL: icmp_sle_v8i16_Zero_LHS:
1940 ; CHECK:       // %bb.0:
1941 ; CHECK-NEXT:    cmge v0.8h, v0.8h, #0
1942 ; CHECK-NEXT:    xtn v0.8b, v0.8h
1943 ; CHECK-NEXT:    ret
1944     %c = icmp sle <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, %a
1945     ret <8 x i1> %c
1948 define <2 x i1> @icmp_sle_v2i32_Zero_LHS(<2 x i32> %a) {
1949 ; CHECK-LABEL: icmp_sle_v2i32_Zero_LHS:
1950 ; CHECK:       // %bb.0:
1951 ; CHECK-NEXT:    cmge v0.2s, v0.2s, #0
1952 ; CHECK-NEXT:    ret
1953     %c = icmp sle <2 x i32> <i32 0, i32 0>, %a
1954     ret <2 x i1> %c
1957 define <4 x i1> @icmp_sle_v4i32_Zero_LHS(<4 x i32> %a) {
1958 ; CHECK-LABEL: icmp_sle_v4i32_Zero_LHS:
1959 ; CHECK:       // %bb.0:
1960 ; CHECK-NEXT:    cmge v0.4s, v0.4s, #0
1961 ; CHECK-NEXT:    xtn v0.4h, v0.4s
1962 ; CHECK-NEXT:    ret
1963     %c = icmp sle <4 x i32> <i32 0, i32 0, i32 0, i32 0>, %a
1964     ret <4 x i1> %c
1967 define <2 x i1> @icmp_sle_v2i64_Zero_LHS(<2 x i64> %a) {
1968 ; CHECK-LABEL: icmp_sle_v2i64_Zero_LHS:
1969 ; CHECK:       // %bb.0:
1970 ; CHECK-NEXT:    cmge v0.2d, v0.2d, #0
1971 ; CHECK-NEXT:    xtn v0.2s, v0.2d
1972 ; CHECK-NEXT:    ret
1973     %c = icmp sle <2 x i64> <i64 0, i64 0>, %a
1974     ret <2 x i1> %c
1977 define <8 x i1> @icmp_slt_v8i8_Zero_LHS(<8 x i8> %a) {
1978 ; CHECK-LABEL: icmp_slt_v8i8_Zero_LHS:
1979 ; CHECK:       // %bb.0:
1980 ; CHECK-NEXT:    cmgt v0.8b, v0.8b, #0
1981 ; CHECK-NEXT:    ret
1982     %c = icmp slt <8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1983     ret <8 x i1> %c
1986 define <16 x i1> @icmp_slt_v16i8_Zero_LHS(<16 x i8> %a) {
1987 ; CHECK-LABEL: icmp_slt_v16i8_Zero_LHS:
1988 ; CHECK:       // %bb.0:
1989 ; CHECK-NEXT:    cmgt v0.16b, v0.16b, #0
1990 ; CHECK-NEXT:    ret
1991     %c = icmp slt <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, %a
1992     ret <16 x i1> %c
1995 define <4 x i1> @icmp_slt_v4i16_Zero_LHS(<4 x i16> %a) {
1996 ; CHECK-LABEL: icmp_slt_v4i16_Zero_LHS:
1997 ; CHECK:       // %bb.0:
1998 ; CHECK-NEXT:    cmgt v0.4h, v0.4h, #0
1999 ; CHECK-NEXT:    ret
2000     %c = icmp slt <4 x i16> <i16 0, i16 0, i16 0, i16 0>, %a
2001     ret <4 x i1> %c
2004 define <8 x i1> @icmp_slt_v8i16_Zero_LHS(<8 x i16> %a) {
2005 ; CHECK-LABEL: icmp_slt_v8i16_Zero_LHS:
2006 ; CHECK:       // %bb.0:
2007 ; CHECK-NEXT:    cmgt v0.8h, v0.8h, #0
2008 ; CHECK-NEXT:    xtn v0.8b, v0.8h
2009 ; CHECK-NEXT:    ret
2010     %c = icmp slt <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, %a
2011     ret <8 x i1> %c
2014 define <2 x i1> @icmp_slt_v2i32_Zero_LHS(<2 x i32> %a) {
2015 ; CHECK-LABEL: icmp_slt_v2i32_Zero_LHS:
2016 ; CHECK:       // %bb.0:
2017 ; CHECK-NEXT:    cmgt v0.2s, v0.2s, #0
2018 ; CHECK-NEXT:    ret
2019     %c = icmp slt <2 x i32> <i32 0, i32 0>, %a
2020     ret <2 x i1> %c
2023 define <4 x i1> @icmp_slt_v4i32_Zero_LHS(<4 x i32> %a) {
2024 ; CHECK-LABEL: icmp_slt_v4i32_Zero_LHS:
2025 ; CHECK:       // %bb.0:
2026 ; CHECK-NEXT:    cmgt v0.4s, v0.4s, #0
2027 ; CHECK-NEXT:    xtn v0.4h, v0.4s
2028 ; CHECK-NEXT:    ret
2029     %c = icmp slt <4 x i32> <i32 0, i32 0, i32 0, i32 0>, %a
2030     ret <4 x i1> %c
2033 define <2 x i1> @icmp_slt_v2i64_Zero_LHS(<2 x i64> %a) {
2034 ; CHECK-LABEL: icmp_slt_v2i64_Zero_LHS:
2035 ; CHECK:       // %bb.0:
2036 ; CHECK-NEXT:    cmgt v0.2d, v0.2d, #0
2037 ; CHECK-NEXT:    xtn v0.2s, v0.2d
2038 ; CHECK-NEXT:    ret
2039     %c = icmp slt <2 x i64> <i64 0, i64 0>, %a
2040     ret <2 x i1> %c