ELF: Have __rela_iplt_{start,end} surround .rela.iplt with --pack-dyn-relocs=android.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / ucmp.ll
blob125ac7f61a41e51ae5f0ff75b2b866b392e704d5
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 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define i8 @ucmp.8.8(i8 %x, i8 %y) nounwind {
6 ; CHECK-SD-LABEL: ucmp.8.8:
7 ; CHECK-SD:       // %bb.0:
8 ; CHECK-SD-NEXT:    and w8, w0, #0xff
9 ; CHECK-SD-NEXT:    cmp w8, w1, uxtb
10 ; CHECK-SD-NEXT:    cset w8, hi
11 ; CHECK-SD-NEXT:    csinv w0, w8, wzr, hs
12 ; CHECK-SD-NEXT:    ret
14 ; CHECK-GI-LABEL: ucmp.8.8:
15 ; CHECK-GI:       // %bb.0:
16 ; CHECK-GI-NEXT:    and w8, w0, #0xff
17 ; CHECK-GI-NEXT:    and w9, w1, #0xff
18 ; CHECK-GI-NEXT:    cmp w8, w9
19 ; CHECK-GI-NEXT:    cset w8, hi
20 ; CHECK-GI-NEXT:    csinv w0, w8, wzr, hs
21 ; CHECK-GI-NEXT:    ret
22   %1 = call i8 @llvm.ucmp(i8 %x, i8 %y)
23   ret i8 %1
26 define i8 @ucmp.8.16(i16 %x, i16 %y) nounwind {
27 ; CHECK-SD-LABEL: ucmp.8.16:
28 ; CHECK-SD:       // %bb.0:
29 ; CHECK-SD-NEXT:    and w8, w0, #0xffff
30 ; CHECK-SD-NEXT:    cmp w8, w1, uxth
31 ; CHECK-SD-NEXT:    cset w8, hi
32 ; CHECK-SD-NEXT:    csinv w0, w8, wzr, hs
33 ; CHECK-SD-NEXT:    ret
35 ; CHECK-GI-LABEL: ucmp.8.16:
36 ; CHECK-GI:       // %bb.0:
37 ; CHECK-GI-NEXT:    and w8, w0, #0xffff
38 ; CHECK-GI-NEXT:    and w9, w1, #0xffff
39 ; CHECK-GI-NEXT:    cmp w8, w9
40 ; CHECK-GI-NEXT:    cset w8, hi
41 ; CHECK-GI-NEXT:    csinv w0, w8, wzr, hs
42 ; CHECK-GI-NEXT:    ret
43   %1 = call i8 @llvm.ucmp(i16 %x, i16 %y)
44   ret i8 %1
47 define i8 @ucmp.8.32(i32 %x, i32 %y) nounwind {
48 ; CHECK-LABEL: ucmp.8.32:
49 ; CHECK:       // %bb.0:
50 ; CHECK-NEXT:    cmp w0, w1
51 ; CHECK-NEXT:    cset w8, hi
52 ; CHECK-NEXT:    csinv w0, w8, wzr, hs
53 ; CHECK-NEXT:    ret
54   %1 = call i8 @llvm.ucmp(i32 %x, i32 %y)
55   ret i8 %1
58 define i8 @ucmp.8.64(i64 %x, i64 %y) nounwind {
59 ; CHECK-LABEL: ucmp.8.64:
60 ; CHECK:       // %bb.0:
61 ; CHECK-NEXT:    cmp x0, x1
62 ; CHECK-NEXT:    cset w8, hi
63 ; CHECK-NEXT:    csinv w0, w8, wzr, hs
64 ; CHECK-NEXT:    ret
65   %1 = call i8 @llvm.ucmp(i64 %x, i64 %y)
66   ret i8 %1
69 define i8 @ucmp.8.128(i128 %x, i128 %y) nounwind {
70 ; CHECK-SD-LABEL: ucmp.8.128:
71 ; CHECK-SD:       // %bb.0:
72 ; CHECK-SD-NEXT:    cmp x2, x0
73 ; CHECK-SD-NEXT:    sbcs xzr, x3, x1
74 ; CHECK-SD-NEXT:    cset w8, lo
75 ; CHECK-SD-NEXT:    cmp x0, x2
76 ; CHECK-SD-NEXT:    sbcs xzr, x1, x3
77 ; CHECK-SD-NEXT:    csinv w0, w8, wzr, hs
78 ; CHECK-SD-NEXT:    ret
80 ; CHECK-GI-LABEL: ucmp.8.128:
81 ; CHECK-GI:       // %bb.0:
82 ; CHECK-GI-NEXT:    cmp x1, x3
83 ; CHECK-GI-NEXT:    cset w8, hi
84 ; CHECK-GI-NEXT:    cmp x0, x2
85 ; CHECK-GI-NEXT:    cset w9, hi
86 ; CHECK-GI-NEXT:    cmp x1, x3
87 ; CHECK-GI-NEXT:    csel w8, w9, w8, eq
88 ; CHECK-GI-NEXT:    tst w8, #0x1
89 ; CHECK-GI-NEXT:    cset w8, ne
90 ; CHECK-GI-NEXT:    cmp x1, x3
91 ; CHECK-GI-NEXT:    cset w9, lo
92 ; CHECK-GI-NEXT:    cmp x0, x2
93 ; CHECK-GI-NEXT:    cset w10, lo
94 ; CHECK-GI-NEXT:    cmp x1, x3
95 ; CHECK-GI-NEXT:    csel w9, w10, w9, eq
96 ; CHECK-GI-NEXT:    tst w9, #0x1
97 ; CHECK-GI-NEXT:    csinv w0, w8, wzr, eq
98 ; CHECK-GI-NEXT:    ret
99   %1 = call i8 @llvm.ucmp(i128 %x, i128 %y)
100   ret i8 %1
103 define i32 @ucmp.32.32(i32 %x, i32 %y) nounwind {
104 ; CHECK-LABEL: ucmp.32.32:
105 ; CHECK:       // %bb.0:
106 ; CHECK-NEXT:    cmp w0, w1
107 ; CHECK-NEXT:    cset w8, hi
108 ; CHECK-NEXT:    csinv w0, w8, wzr, hs
109 ; CHECK-NEXT:    ret
110   %1 = call i32 @llvm.ucmp(i32 %x, i32 %y)
111   ret i32 %1
114 define i32 @ucmp.32.64(i64 %x, i64 %y) nounwind {
115 ; CHECK-LABEL: ucmp.32.64:
116 ; CHECK:       // %bb.0:
117 ; CHECK-NEXT:    cmp x0, x1
118 ; CHECK-NEXT:    cset w8, hi
119 ; CHECK-NEXT:    csinv w0, w8, wzr, hs
120 ; CHECK-NEXT:    ret
121   %1 = call i32 @llvm.ucmp(i64 %x, i64 %y)
122   ret i32 %1
125 define i64 @ucmp.64.64(i64 %x, i64 %y) nounwind {
126 ; CHECK-LABEL: ucmp.64.64:
127 ; CHECK:       // %bb.0:
128 ; CHECK-NEXT:    cmp x0, x1
129 ; CHECK-NEXT:    cset x8, hi
130 ; CHECK-NEXT:    csinv x0, x8, xzr, hs
131 ; CHECK-NEXT:    ret
132   %1 = call i64 @llvm.ucmp(i64 %x, i64 %y)
133   ret i64 %1
136 define <1 x i64> @ucmp.1.64.65(<1 x i65> %x, <1 x i65> %y) {
137 ; CHECK-SD-LABEL: ucmp.1.64.65:
138 ; CHECK-SD:       // %bb.0:
139 ; CHECK-SD-NEXT:    and x8, x1, #0x1
140 ; CHECK-SD-NEXT:    and x9, x3, #0x1
141 ; CHECK-SD-NEXT:    cmp x2, x0
142 ; CHECK-SD-NEXT:    sbcs xzr, x9, x8
143 ; CHECK-SD-NEXT:    cset x10, lo
144 ; CHECK-SD-NEXT:    cmp x0, x2
145 ; CHECK-SD-NEXT:    sbcs xzr, x8, x9
146 ; CHECK-SD-NEXT:    csinv x8, x10, xzr, hs
147 ; CHECK-SD-NEXT:    fmov d0, x8
148 ; CHECK-SD-NEXT:    ret
150 ; CHECK-GI-LABEL: ucmp.1.64.65:
151 ; CHECK-GI:       // %bb.0:
152 ; CHECK-GI-NEXT:    and x8, x1, #0x1
153 ; CHECK-GI-NEXT:    and x9, x3, #0x1
154 ; CHECK-GI-NEXT:    cmp x8, x9
155 ; CHECK-GI-NEXT:    cset w10, hi
156 ; CHECK-GI-NEXT:    cmp x0, x2
157 ; CHECK-GI-NEXT:    cset w11, hi
158 ; CHECK-GI-NEXT:    cmp x8, x9
159 ; CHECK-GI-NEXT:    csel w10, w11, w10, eq
160 ; CHECK-GI-NEXT:    tst w10, #0x1
161 ; CHECK-GI-NEXT:    cset x10, ne
162 ; CHECK-GI-NEXT:    cmp x8, x9
163 ; CHECK-GI-NEXT:    cset w11, lo
164 ; CHECK-GI-NEXT:    cmp x0, x2
165 ; CHECK-GI-NEXT:    cset w12, lo
166 ; CHECK-GI-NEXT:    cmp x8, x9
167 ; CHECK-GI-NEXT:    csel w8, w12, w11, eq
168 ; CHECK-GI-NEXT:    tst w8, #0x1
169 ; CHECK-GI-NEXT:    csinv x8, x10, xzr, eq
170 ; CHECK-GI-NEXT:    fmov d0, x8
171 ; CHECK-GI-NEXT:    ret
172   %1 = call <1 x i64> @llvm.ucmp(<1 x i65> %x, <1 x i65> %y)
173   ret <1 x i64> %1
176 define <8 x i8> @u_v8i8(<8 x i8> %a, <8 x i8> %b) {
177 ; CHECK-SD-LABEL: u_v8i8:
178 ; CHECK-SD:       // %bb.0: // %entry
179 ; CHECK-SD-NEXT:    cmhi v2.8b, v0.8b, v1.8b
180 ; CHECK-SD-NEXT:    cmhi v0.8b, v1.8b, v0.8b
181 ; CHECK-SD-NEXT:    sub v0.8b, v0.8b, v2.8b
182 ; CHECK-SD-NEXT:    ret
184 ; CHECK-GI-LABEL: u_v8i8:
185 ; CHECK-GI:       // %bb.0: // %entry
186 ; CHECK-GI-NEXT:    movi v2.8b, #1
187 ; CHECK-GI-NEXT:    cmhi v3.8b, v0.8b, v1.8b
188 ; CHECK-GI-NEXT:    movi d4, #0xffffffffffffffff
189 ; CHECK-GI-NEXT:    cmhi v0.8b, v1.8b, v0.8b
190 ; CHECK-GI-NEXT:    and v2.8b, v2.8b, v3.8b
191 ; CHECK-GI-NEXT:    bsl v0.8b, v4.8b, v2.8b
192 ; CHECK-GI-NEXT:    ret
193 entry:
194   %c = call <8 x i8> @llvm.ucmp(<8 x i8> %a, <8 x i8> %b)
195   ret <8 x i8> %c
198 define <16 x i8> @u_v16i8(<16 x i8> %a, <16 x i8> %b) {
199 ; CHECK-SD-LABEL: u_v16i8:
200 ; CHECK-SD:       // %bb.0: // %entry
201 ; CHECK-SD-NEXT:    cmhi v2.16b, v0.16b, v1.16b
202 ; CHECK-SD-NEXT:    cmhi v0.16b, v1.16b, v0.16b
203 ; CHECK-SD-NEXT:    sub v0.16b, v0.16b, v2.16b
204 ; CHECK-SD-NEXT:    ret
206 ; CHECK-GI-LABEL: u_v16i8:
207 ; CHECK-GI:       // %bb.0: // %entry
208 ; CHECK-GI-NEXT:    movi v2.16b, #1
209 ; CHECK-GI-NEXT:    cmhi v3.16b, v0.16b, v1.16b
210 ; CHECK-GI-NEXT:    movi v4.2d, #0xffffffffffffffff
211 ; CHECK-GI-NEXT:    cmhi v0.16b, v1.16b, v0.16b
212 ; CHECK-GI-NEXT:    and v2.16b, v2.16b, v3.16b
213 ; CHECK-GI-NEXT:    bsl v0.16b, v4.16b, v2.16b
214 ; CHECK-GI-NEXT:    ret
215 entry:
216   %c = call <16 x i8> @llvm.ucmp(<16 x i8> %a, <16 x i8> %b)
217   ret <16 x i8> %c
220 define <4 x i16> @u_v4i16(<4 x i16> %a, <4 x i16> %b) {
221 ; CHECK-SD-LABEL: u_v4i16:
222 ; CHECK-SD:       // %bb.0: // %entry
223 ; CHECK-SD-NEXT:    cmhi v2.4h, v0.4h, v1.4h
224 ; CHECK-SD-NEXT:    cmhi v0.4h, v1.4h, v0.4h
225 ; CHECK-SD-NEXT:    sub v0.4h, v0.4h, v2.4h
226 ; CHECK-SD-NEXT:    ret
228 ; CHECK-GI-LABEL: u_v4i16:
229 ; CHECK-GI:       // %bb.0: // %entry
230 ; CHECK-GI-NEXT:    movi v2.4h, #1
231 ; CHECK-GI-NEXT:    cmhi v3.4h, v0.4h, v1.4h
232 ; CHECK-GI-NEXT:    movi d4, #0xffffffffffffffff
233 ; CHECK-GI-NEXT:    cmhi v0.4h, v1.4h, v0.4h
234 ; CHECK-GI-NEXT:    and v2.8b, v2.8b, v3.8b
235 ; CHECK-GI-NEXT:    bsl v0.8b, v4.8b, v2.8b
236 ; CHECK-GI-NEXT:    ret
237 entry:
238   %c = call <4 x i16> @llvm.ucmp(<4 x i16> %a, <4 x i16> %b)
239   ret <4 x i16> %c
242 define <8 x i16> @u_v8i16(<8 x i16> %a, <8 x i16> %b) {
243 ; CHECK-SD-LABEL: u_v8i16:
244 ; CHECK-SD:       // %bb.0: // %entry
245 ; CHECK-SD-NEXT:    cmhi v2.8h, v0.8h, v1.8h
246 ; CHECK-SD-NEXT:    cmhi v0.8h, v1.8h, v0.8h
247 ; CHECK-SD-NEXT:    sub v0.8h, v0.8h, v2.8h
248 ; CHECK-SD-NEXT:    ret
250 ; CHECK-GI-LABEL: u_v8i16:
251 ; CHECK-GI:       // %bb.0: // %entry
252 ; CHECK-GI-NEXT:    movi v2.8h, #1
253 ; CHECK-GI-NEXT:    cmhi v3.8h, v0.8h, v1.8h
254 ; CHECK-GI-NEXT:    movi v4.2d, #0xffffffffffffffff
255 ; CHECK-GI-NEXT:    cmhi v0.8h, v1.8h, v0.8h
256 ; CHECK-GI-NEXT:    and v2.16b, v2.16b, v3.16b
257 ; CHECK-GI-NEXT:    bsl v0.16b, v4.16b, v2.16b
258 ; CHECK-GI-NEXT:    ret
259 entry:
260   %c = call <8 x i16> @llvm.ucmp(<8 x i16> %a, <8 x i16> %b)
261   ret <8 x i16> %c
264 define <16 x i16> @u_v16i16(<16 x i16> %a, <16 x i16> %b) {
265 ; CHECK-SD-LABEL: u_v16i16:
266 ; CHECK-SD:       // %bb.0: // %entry
267 ; CHECK-SD-NEXT:    cmhi v4.8h, v1.8h, v3.8h
268 ; CHECK-SD-NEXT:    cmhi v5.8h, v0.8h, v2.8h
269 ; CHECK-SD-NEXT:    cmhi v0.8h, v2.8h, v0.8h
270 ; CHECK-SD-NEXT:    cmhi v1.8h, v3.8h, v1.8h
271 ; CHECK-SD-NEXT:    sub v0.8h, v0.8h, v5.8h
272 ; CHECK-SD-NEXT:    sub v1.8h, v1.8h, v4.8h
273 ; CHECK-SD-NEXT:    ret
275 ; CHECK-GI-LABEL: u_v16i16:
276 ; CHECK-GI:       // %bb.0: // %entry
277 ; CHECK-GI-NEXT:    movi v4.8h, #1
278 ; CHECK-GI-NEXT:    cmhi v5.8h, v0.8h, v2.8h
279 ; CHECK-GI-NEXT:    cmhi v6.8h, v1.8h, v3.8h
280 ; CHECK-GI-NEXT:    movi v7.2d, #0xffffffffffffffff
281 ; CHECK-GI-NEXT:    cmhi v0.8h, v2.8h, v0.8h
282 ; CHECK-GI-NEXT:    cmhi v1.8h, v3.8h, v1.8h
283 ; CHECK-GI-NEXT:    and v5.16b, v4.16b, v5.16b
284 ; CHECK-GI-NEXT:    and v4.16b, v4.16b, v6.16b
285 ; CHECK-GI-NEXT:    bsl v0.16b, v7.16b, v5.16b
286 ; CHECK-GI-NEXT:    bsl v1.16b, v7.16b, v4.16b
287 ; CHECK-GI-NEXT:    ret
288 entry:
289   %c = call <16 x i16> @llvm.ucmp(<16 x i16> %a, <16 x i16> %b)
290   ret <16 x i16> %c
293 define <2 x i32> @u_v2i32(<2 x i32> %a, <2 x i32> %b) {
294 ; CHECK-SD-LABEL: u_v2i32:
295 ; CHECK-SD:       // %bb.0: // %entry
296 ; CHECK-SD-NEXT:    cmhi v2.2s, v0.2s, v1.2s
297 ; CHECK-SD-NEXT:    cmhi v0.2s, v1.2s, v0.2s
298 ; CHECK-SD-NEXT:    sub v0.2s, v0.2s, v2.2s
299 ; CHECK-SD-NEXT:    ret
301 ; CHECK-GI-LABEL: u_v2i32:
302 ; CHECK-GI:       // %bb.0: // %entry
303 ; CHECK-GI-NEXT:    movi v2.2s, #1
304 ; CHECK-GI-NEXT:    cmhi v3.2s, v0.2s, v1.2s
305 ; CHECK-GI-NEXT:    movi d4, #0xffffffffffffffff
306 ; CHECK-GI-NEXT:    cmhi v0.2s, v1.2s, v0.2s
307 ; CHECK-GI-NEXT:    and v2.8b, v2.8b, v3.8b
308 ; CHECK-GI-NEXT:    bsl v0.8b, v4.8b, v2.8b
309 ; CHECK-GI-NEXT:    ret
310 entry:
311   %c = call <2 x i32> @llvm.ucmp(<2 x i32> %a, <2 x i32> %b)
312   ret <2 x i32> %c
315 define <4 x i32> @u_v4i32(<4 x i32> %a, <4 x i32> %b) {
316 ; CHECK-SD-LABEL: u_v4i32:
317 ; CHECK-SD:       // %bb.0: // %entry
318 ; CHECK-SD-NEXT:    cmhi v2.4s, v0.4s, v1.4s
319 ; CHECK-SD-NEXT:    cmhi v0.4s, v1.4s, v0.4s
320 ; CHECK-SD-NEXT:    sub v0.4s, v0.4s, v2.4s
321 ; CHECK-SD-NEXT:    ret
323 ; CHECK-GI-LABEL: u_v4i32:
324 ; CHECK-GI:       // %bb.0: // %entry
325 ; CHECK-GI-NEXT:    movi v2.4s, #1
326 ; CHECK-GI-NEXT:    cmhi v3.4s, v0.4s, v1.4s
327 ; CHECK-GI-NEXT:    movi v4.2d, #0xffffffffffffffff
328 ; CHECK-GI-NEXT:    cmhi v0.4s, v1.4s, v0.4s
329 ; CHECK-GI-NEXT:    and v2.16b, v2.16b, v3.16b
330 ; CHECK-GI-NEXT:    bsl v0.16b, v4.16b, v2.16b
331 ; CHECK-GI-NEXT:    ret
332 entry:
333   %c = call <4 x i32> @llvm.ucmp(<4 x i32> %a, <4 x i32> %b)
334   ret <4 x i32> %c
337 define <8 x i32> @u_v8i32(<8 x i32> %a, <8 x i32> %b) {
338 ; CHECK-SD-LABEL: u_v8i32:
339 ; CHECK-SD:       // %bb.0: // %entry
340 ; CHECK-SD-NEXT:    cmhi v4.4s, v1.4s, v3.4s
341 ; CHECK-SD-NEXT:    cmhi v5.4s, v0.4s, v2.4s
342 ; CHECK-SD-NEXT:    cmhi v0.4s, v2.4s, v0.4s
343 ; CHECK-SD-NEXT:    cmhi v1.4s, v3.4s, v1.4s
344 ; CHECK-SD-NEXT:    sub v0.4s, v0.4s, v5.4s
345 ; CHECK-SD-NEXT:    sub v1.4s, v1.4s, v4.4s
346 ; CHECK-SD-NEXT:    ret
348 ; CHECK-GI-LABEL: u_v8i32:
349 ; CHECK-GI:       // %bb.0: // %entry
350 ; CHECK-GI-NEXT:    movi v4.4s, #1
351 ; CHECK-GI-NEXT:    cmhi v5.4s, v0.4s, v2.4s
352 ; CHECK-GI-NEXT:    cmhi v6.4s, v1.4s, v3.4s
353 ; CHECK-GI-NEXT:    movi v7.2d, #0xffffffffffffffff
354 ; CHECK-GI-NEXT:    cmhi v0.4s, v2.4s, v0.4s
355 ; CHECK-GI-NEXT:    cmhi v1.4s, v3.4s, v1.4s
356 ; CHECK-GI-NEXT:    and v5.16b, v4.16b, v5.16b
357 ; CHECK-GI-NEXT:    and v4.16b, v4.16b, v6.16b
358 ; CHECK-GI-NEXT:    bsl v0.16b, v7.16b, v5.16b
359 ; CHECK-GI-NEXT:    bsl v1.16b, v7.16b, v4.16b
360 ; CHECK-GI-NEXT:    ret
361 entry:
362   %c = call <8 x i32> @llvm.ucmp(<8 x i32> %a, <8 x i32> %b)
363   ret <8 x i32> %c
366 define <2 x i64> @u_v2i64(<2 x i64> %a, <2 x i64> %b) {
367 ; CHECK-SD-LABEL: u_v2i64:
368 ; CHECK-SD:       // %bb.0: // %entry
369 ; CHECK-SD-NEXT:    cmhi v2.2d, v0.2d, v1.2d
370 ; CHECK-SD-NEXT:    cmhi v0.2d, v1.2d, v0.2d
371 ; CHECK-SD-NEXT:    sub v0.2d, v0.2d, v2.2d
372 ; CHECK-SD-NEXT:    ret
374 ; CHECK-GI-LABEL: u_v2i64:
375 ; CHECK-GI:       // %bb.0: // %entry
376 ; CHECK-GI-NEXT:    adrp x8, .LCPI17_0
377 ; CHECK-GI-NEXT:    cmhi v2.2d, v0.2d, v1.2d
378 ; CHECK-GI-NEXT:    movi v4.2d, #0xffffffffffffffff
379 ; CHECK-GI-NEXT:    ldr q3, [x8, :lo12:.LCPI17_0]
380 ; CHECK-GI-NEXT:    cmhi v0.2d, v1.2d, v0.2d
381 ; CHECK-GI-NEXT:    and v2.16b, v3.16b, v2.16b
382 ; CHECK-GI-NEXT:    bsl v0.16b, v4.16b, v2.16b
383 ; CHECK-GI-NEXT:    ret
384 entry:
385   %c = call <2 x i64> @llvm.ucmp(<2 x i64> %a, <2 x i64> %b)
386   ret <2 x i64> %c
389 define <4 x i64> @u_v4i64(<4 x i64> %a, <4 x i64> %b) {
390 ; CHECK-SD-LABEL: u_v4i64:
391 ; CHECK-SD:       // %bb.0: // %entry
392 ; CHECK-SD-NEXT:    cmhi v4.2d, v1.2d, v3.2d
393 ; CHECK-SD-NEXT:    cmhi v5.2d, v0.2d, v2.2d
394 ; CHECK-SD-NEXT:    cmhi v0.2d, v2.2d, v0.2d
395 ; CHECK-SD-NEXT:    cmhi v1.2d, v3.2d, v1.2d
396 ; CHECK-SD-NEXT:    sub v0.2d, v0.2d, v5.2d
397 ; CHECK-SD-NEXT:    sub v1.2d, v1.2d, v4.2d
398 ; CHECK-SD-NEXT:    ret
400 ; CHECK-GI-LABEL: u_v4i64:
401 ; CHECK-GI:       // %bb.0: // %entry
402 ; CHECK-GI-NEXT:    adrp x8, .LCPI18_0
403 ; CHECK-GI-NEXT:    cmhi v4.2d, v0.2d, v2.2d
404 ; CHECK-GI-NEXT:    cmhi v6.2d, v1.2d, v3.2d
405 ; CHECK-GI-NEXT:    ldr q5, [x8, :lo12:.LCPI18_0]
406 ; CHECK-GI-NEXT:    movi v7.2d, #0xffffffffffffffff
407 ; CHECK-GI-NEXT:    cmhi v0.2d, v2.2d, v0.2d
408 ; CHECK-GI-NEXT:    cmhi v1.2d, v3.2d, v1.2d
409 ; CHECK-GI-NEXT:    and v4.16b, v5.16b, v4.16b
410 ; CHECK-GI-NEXT:    and v5.16b, v5.16b, v6.16b
411 ; CHECK-GI-NEXT:    bsl v0.16b, v7.16b, v4.16b
412 ; CHECK-GI-NEXT:    bsl v1.16b, v7.16b, v5.16b
413 ; CHECK-GI-NEXT:    ret
414 entry:
415   %c = call <4 x i64> @llvm.ucmp(<4 x i64> %a, <4 x i64> %b)
416   ret <4 x i64> %c
419 define <16 x i8> @signOf_neon(<8 x i16> %s0_lo, <8 x i16> %s0_hi, <8 x i16> %s1_lo, <8 x i16> %s1_hi) {
420 ; CHECK-SD-LABEL: signOf_neon:
421 ; CHECK-SD:       // %bb.0: // %entry
422 ; CHECK-SD-NEXT:    cmhi v4.8h, v1.8h, v3.8h
423 ; CHECK-SD-NEXT:    cmhi v1.8h, v3.8h, v1.8h
424 ; CHECK-SD-NEXT:    cmhi v3.8h, v0.8h, v2.8h
425 ; CHECK-SD-NEXT:    cmhi v0.8h, v2.8h, v0.8h
426 ; CHECK-SD-NEXT:    sub v1.8h, v1.8h, v4.8h
427 ; CHECK-SD-NEXT:    sub v0.8h, v0.8h, v3.8h
428 ; CHECK-SD-NEXT:    uzp1 v0.16b, v0.16b, v1.16b
429 ; CHECK-SD-NEXT:    ret
431 ; CHECK-GI-LABEL: signOf_neon:
432 ; CHECK-GI:       // %bb.0: // %entry
433 ; CHECK-GI-NEXT:    cmhi v4.8h, v0.8h, v2.8h
434 ; CHECK-GI-NEXT:    cmhi v5.8h, v1.8h, v3.8h
435 ; CHECK-GI-NEXT:    cmhi v0.8h, v2.8h, v0.8h
436 ; CHECK-GI-NEXT:    cmhi v1.8h, v3.8h, v1.8h
437 ; CHECK-GI-NEXT:    movi v2.16b, #1
438 ; CHECK-GI-NEXT:    movi v3.2d, #0xffffffffffffffff
439 ; CHECK-GI-NEXT:    uzp1 v4.16b, v4.16b, v5.16b
440 ; CHECK-GI-NEXT:    uzp1 v0.16b, v0.16b, v1.16b
441 ; CHECK-GI-NEXT:    shl v1.16b, v4.16b, #7
442 ; CHECK-GI-NEXT:    shl v0.16b, v0.16b, #7
443 ; CHECK-GI-NEXT:    sshr v1.16b, v1.16b, #7
444 ; CHECK-GI-NEXT:    sshr v0.16b, v0.16b, #7
445 ; CHECK-GI-NEXT:    and v1.16b, v2.16b, v1.16b
446 ; CHECK-GI-NEXT:    bsl v0.16b, v3.16b, v1.16b
447 ; CHECK-GI-NEXT:    ret
448 entry:
449   %0 = shufflevector <8 x i16> %s0_lo, <8 x i16> %s0_hi, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
450   %1 = shufflevector <8 x i16> %s1_lo, <8 x i16> %s1_hi, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
451   %or.i = tail call <16 x i8> @llvm.ucmp.v16i8.v16i16(<16 x i16> %0, <16 x i16> %1)
452   ret <16 x i8> %or.i