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:
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
14 ; CHECK-GI-LABEL: ucmp.8.8:
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
22 %1 = call i8 @llvm.ucmp(i8 %x, i8 %y)
26 define i8 @ucmp.8.16(i16 %x, i16 %y) nounwind {
27 ; CHECK-SD-LABEL: ucmp.8.16:
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
35 ; CHECK-GI-LABEL: ucmp.8.16:
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
43 %1 = call i8 @llvm.ucmp(i16 %x, i16 %y)
47 define i8 @ucmp.8.32(i32 %x, i32 %y) nounwind {
48 ; CHECK-LABEL: ucmp.8.32:
50 ; CHECK-NEXT: cmp w0, w1
51 ; CHECK-NEXT: cset w8, hi
52 ; CHECK-NEXT: csinv w0, w8, wzr, hs
54 %1 = call i8 @llvm.ucmp(i32 %x, i32 %y)
58 define i8 @ucmp.8.64(i64 %x, i64 %y) nounwind {
59 ; CHECK-LABEL: ucmp.8.64:
61 ; CHECK-NEXT: cmp x0, x1
62 ; CHECK-NEXT: cset w8, hi
63 ; CHECK-NEXT: csinv w0, w8, wzr, hs
65 %1 = call i8 @llvm.ucmp(i64 %x, i64 %y)
69 define i8 @ucmp.8.128(i128 %x, i128 %y) nounwind {
70 ; CHECK-SD-LABEL: ucmp.8.128:
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
80 ; CHECK-GI-LABEL: ucmp.8.128:
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
99 %1 = call i8 @llvm.ucmp(i128 %x, i128 %y)
103 define i32 @ucmp.32.32(i32 %x, i32 %y) nounwind {
104 ; CHECK-LABEL: ucmp.32.32:
106 ; CHECK-NEXT: cmp w0, w1
107 ; CHECK-NEXT: cset w8, hi
108 ; CHECK-NEXT: csinv w0, w8, wzr, hs
110 %1 = call i32 @llvm.ucmp(i32 %x, i32 %y)
114 define i32 @ucmp.32.64(i64 %x, i64 %y) nounwind {
115 ; CHECK-LABEL: ucmp.32.64:
117 ; CHECK-NEXT: cmp x0, x1
118 ; CHECK-NEXT: cset w8, hi
119 ; CHECK-NEXT: csinv w0, w8, wzr, hs
121 %1 = call i32 @llvm.ucmp(i64 %x, i64 %y)
125 define i64 @ucmp.64.64(i64 %x, i64 %y) nounwind {
126 ; CHECK-LABEL: ucmp.64.64:
128 ; CHECK-NEXT: cmp x0, x1
129 ; CHECK-NEXT: cset x8, hi
130 ; CHECK-NEXT: csinv x0, x8, xzr, hs
132 %1 = call i64 @llvm.ucmp(i64 %x, i64 %y)
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
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
172 %1 = call <1 x i64> @llvm.ucmp(<1 x i65> %x, <1 x i65> %y)
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
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
194 %c = call <8 x i8> @llvm.ucmp(<8 x i8> %a, <8 x i8> %b)
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
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
216 %c = call <16 x i8> @llvm.ucmp(<16 x i8> %a, <16 x i8> %b)
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
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
238 %c = call <4 x i16> @llvm.ucmp(<4 x i16> %a, <4 x i16> %b)
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
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
260 %c = call <8 x i16> @llvm.ucmp(<8 x i16> %a, <8 x i16> %b)
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
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
289 %c = call <16 x i16> @llvm.ucmp(<16 x i16> %a, <16 x i16> %b)
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
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
311 %c = call <2 x i32> @llvm.ucmp(<2 x i32> %a, <2 x i32> %b)
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
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
333 %c = call <4 x i32> @llvm.ucmp(<4 x i32> %a, <4 x i32> %b)
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
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
362 %c = call <8 x i32> @llvm.ucmp(<8 x i32> %a, <8 x i32> %b)
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
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
385 %c = call <2 x i64> @llvm.ucmp(<2 x i64> %a, <2 x i64> %b)
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
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
415 %c = call <4 x i64> @llvm.ucmp(<4 x i64> %a, <4 x i64> %b)
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
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
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)