1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -debugify-and-strip-all-safe -mtriple aarch64 -run-pass=aarch64-prelegalizer-combiner --aarch64prelegalizercombiner-only-enable-rule="icmp_to_true_false_known_bits" -global-isel -verify-machineinstrs %s -o - | FileCheck %s
6 define i1 @eq_true(ptr %ptr) { unreachable }
7 define i1 @ne_true(ptr %ptr) { unreachable }
8 define i1 @sge_true(ptr %ptr) { unreachable }
9 define i1 @sgt_true(ptr %ptr) { unreachable }
10 define i1 @sle_true(ptr %ptr) { unreachable }
11 define i1 @slt_true(ptr %ptr) { unreachable }
12 define i1 @uge_true(ptr %ptr) { unreachable }
13 define i1 @ugt_true(ptr %ptr) { unreachable }
14 define i1 @ule_true(ptr %ptr) { unreachable }
15 define i1 @ult_true(ptr %ptr) { unreachable }
17 define i1 @eq_false(ptr %ptr) { unreachable }
18 define i1 @ne_false(ptr %ptr) { unreachable }
19 define i1 @sge_false(ptr %ptr) { unreachable }
20 define i1 @sgt_false(ptr %ptr) { unreachable }
21 define i1 @sle_false(ptr %ptr) { unreachable }
22 define i1 @slt_false(ptr %ptr) { unreachable }
23 define i1 @uge_false(ptr %ptr) { unreachable }
24 define i1 @ugt_false(ptr %ptr) { unreachable }
25 define i1 @ule_false(ptr %ptr) { unreachable }
26 define i1 @ult_false(ptr %ptr) { unreachable }
28 define i1 @eq_unknown(ptr %ptr) { unreachable }
29 define i1 @ne_unknown(ptr %ptr) { unreachable }
31 define i1 @vector_true(ptr %ptr) { unreachable }
32 define i1 @vector_false(ptr %ptr) { unreachable }
40 tracksRegLiveness: true
45 ; CHECK-LABEL: name: eq_true
47 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
48 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
49 ; CHECK: $w0 = COPY %cmp_ext(s32)
50 ; CHECK: RET_ReallyLR implicit $w0
52 %cst:_(s32) = G_CONSTANT i32 1
53 %cmp:_(s1) = G_ICMP intpred(eq), %cst(s32), %cst
54 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
55 $w0 = COPY %cmp_ext(s32)
56 RET_ReallyLR implicit $w0
61 tracksRegLiveness: true
66 ; CHECK-LABEL: name: ne_true
68 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
69 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
70 ; CHECK: $w0 = COPY %cmp_ext(s32)
71 ; CHECK: RET_ReallyLR implicit $w0
73 %cst_1:_(s32) = G_CONSTANT i32 1
74 %cst_2:_(s32) = G_CONSTANT i32 2
75 %cmp:_(s1) = G_ICMP intpred(ne), %cst_1(s32), %cst_2
76 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
77 $w0 = COPY %cmp_ext(s32)
78 RET_ReallyLR implicit $w0
83 tracksRegLiveness: true
88 ; CHECK-LABEL: name: sge_true
90 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
91 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
92 ; CHECK: $w0 = COPY %cmp_ext(s32)
93 ; CHECK: RET_ReallyLR implicit $w0
95 %cst:_(s32) = G_CONSTANT i32 2
96 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
97 %cmp:_(s1) = G_ICMP intpred(sge), %cst, %load_eq_1(s32)
98 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
99 $w0 = COPY %cmp_ext(s32)
100 RET_ReallyLR implicit $w0
105 tracksRegLiveness: true
110 ; CHECK-LABEL: name: sgt_true
111 ; CHECK: liveins: $x0
112 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
113 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
114 ; CHECK: $w0 = COPY %cmp_ext(s32)
115 ; CHECK: RET_ReallyLR implicit $w0
116 %ptr:_(p0) = COPY $x0
117 %cst:_(s32) = G_CONSTANT i32 3
118 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
119 %cmp:_(s1) = G_ICMP intpred(sgt), %cst, %load_eq_1(s32)
120 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
121 $w0 = COPY %cmp_ext(s32)
122 RET_ReallyLR implicit $w0
127 tracksRegLiveness: true
132 ; CHECK-LABEL: name: sle_true
133 ; CHECK: liveins: $x0
134 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
135 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
136 ; CHECK: $w0 = COPY %cmp_ext(s32)
137 ; CHECK: RET_ReallyLR implicit $w0
138 %ptr:_(p0) = COPY $x0
139 %cst:_(s32) = G_CONSTANT i32 1
140 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
141 %cmp:_(s1) = G_ICMP intpred(sle), %cst, %load_eq_1(s32)
142 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
143 $w0 = COPY %cmp_ext(s32)
144 RET_ReallyLR implicit $w0
150 tracksRegLiveness: true
155 ; CHECK-LABEL: name: slt_true
156 ; CHECK: liveins: $x0
157 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
158 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
159 ; CHECK: $w0 = COPY %cmp_ext(s32)
160 ; CHECK: RET_ReallyLR implicit $w0
161 %ptr:_(p0) = COPY $x0
162 %cst:_(s32) = G_CONSTANT i32 -1
163 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
164 %cmp:_(s1) = G_ICMP intpred(slt), %cst, %load_eq_1(s32)
165 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
166 $w0 = COPY %cmp_ext(s32)
167 RET_ReallyLR implicit $w0
172 tracksRegLiveness: true
177 ; CHECK-LABEL: name: uge_true
178 ; CHECK: liveins: $x0
179 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
180 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
181 ; CHECK: $w0 = COPY %cmp_ext(s32)
182 ; CHECK: RET_ReallyLR implicit $w0
183 %ptr:_(p0) = COPY $x0
184 %cst:_(s32) = G_CONSTANT i32 2
185 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
186 %cmp:_(s1) = G_ICMP intpred(uge), %cst, %load_eq_1(s32)
187 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
188 $w0 = COPY %cmp_ext(s32)
189 RET_ReallyLR implicit $w0
194 tracksRegLiveness: true
199 ; CHECK-LABEL: name: ugt_true
200 ; CHECK: liveins: $x0
201 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
202 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
203 ; CHECK: $w0 = COPY %cmp_ext(s32)
204 ; CHECK: RET_ReallyLR implicit $w0
205 %ptr:_(p0) = COPY $x0
206 %cst:_(s32) = G_CONSTANT i32 -1
207 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
208 %cmp:_(s1) = G_ICMP intpred(ugt), %cst, %load_eq_1(s32)
209 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
210 $w0 = COPY %cmp_ext(s32)
211 RET_ReallyLR implicit $w0
216 tracksRegLiveness: true
221 ; CHECK-LABEL: name: ule_true
222 ; CHECK: liveins: $x0
223 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
224 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
225 ; CHECK: $w0 = COPY %cmp_ext(s32)
226 ; CHECK: RET_ReallyLR implicit $w0
227 %ptr:_(p0) = COPY $x0
228 %cst:_(s32) = G_CONSTANT i32 1
229 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
230 %cmp:_(s1) = G_ICMP intpred(ule), %cst, %load_eq_1(s32)
231 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
232 $w0 = COPY %cmp_ext(s32)
233 RET_ReallyLR implicit $w0
238 tracksRegLiveness: true
243 ; CHECK-LABEL: name: ult_true
244 ; CHECK: liveins: $x0
245 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
246 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
247 ; CHECK: $w0 = COPY %cmp_ext(s32)
248 ; CHECK: RET_ReallyLR implicit $w0
249 %ptr:_(p0) = COPY $x0
250 %cst:_(s32) = G_CONSTANT i32 0
251 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
252 %cmp:_(s1) = G_ICMP intpred(ule), %cst, %load_eq_1(s32)
253 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
254 $w0 = COPY %cmp_ext(s32)
255 RET_ReallyLR implicit $w0
260 tracksRegLiveness: true
265 ; CHECK-LABEL: name: eq_false
266 ; CHECK: liveins: $x0
267 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
268 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
269 ; CHECK: $w0 = COPY %cmp_ext(s32)
270 ; CHECK: RET_ReallyLR implicit $w0
271 %ptr:_(p0) = COPY $x0
272 %cst:_(s32) = G_CONSTANT i32 0
273 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
274 %cmp:_(s1) = G_ICMP intpred(eq), %load_eq_1(s32), %cst
275 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
276 $w0 = COPY %cmp_ext(s32)
277 RET_ReallyLR implicit $w0
282 tracksRegLiveness: true
287 ; CHECK-LABEL: name: ne_false
288 ; CHECK: liveins: $x0
289 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
290 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
291 ; CHECK: $w0 = COPY %cmp_ext(s32)
292 ; CHECK: RET_ReallyLR implicit $w0
293 %ptr:_(p0) = COPY $x0
294 %cst_1:_(s32) = G_CONSTANT i32 1
295 %cst_2:_(s32) = G_CONSTANT i32 1
296 %cmp:_(s1) = G_ICMP intpred(ne), %cst_1(s32), %cst_2
297 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
298 $w0 = COPY %cmp_ext(s32)
299 RET_ReallyLR implicit $w0
304 tracksRegLiveness: true
309 ; CHECK-LABEL: name: sge_false
310 ; CHECK: liveins: $x0
311 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
312 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
313 ; CHECK: $w0 = COPY %cmp_ext(s32)
314 ; CHECK: RET_ReallyLR implicit $w0
315 %ptr:_(p0) = COPY $x0
316 %cst:_(s32) = G_CONSTANT i32 -1
317 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
318 %cmp:_(s1) = G_ICMP intpred(sge), %cst, %load_eq_1(s32)
319 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
320 $w0 = COPY %cmp_ext(s32)
321 RET_ReallyLR implicit $w0
326 tracksRegLiveness: true
331 ; CHECK-LABEL: name: sgt_false
332 ; CHECK: liveins: $x0
333 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
334 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
335 ; CHECK: $w0 = COPY %cmp_ext(s32)
336 ; CHECK: RET_ReallyLR implicit $w0
337 %ptr:_(p0) = COPY $x0
338 %cst:_(s32) = G_CONSTANT i32 1
339 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
340 %cmp:_(s1) = G_ICMP intpred(sgt), %cst, %load_eq_1(s32)
341 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
342 $w0 = COPY %cmp_ext(s32)
343 RET_ReallyLR implicit $w0
348 tracksRegLiveness: true
353 ; CHECK-LABEL: name: sle_false
354 ; CHECK: liveins: $x0
355 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
356 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
357 ; CHECK: $w0 = COPY %cmp_ext(s32)
358 ; CHECK: RET_ReallyLR implicit $w0
359 %ptr:_(p0) = COPY $x0
360 %cst:_(s32) = G_CONSTANT i32 3
361 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
362 %cmp:_(s1) = G_ICMP intpred(sle), %cst, %load_eq_1(s32)
363 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
364 $w0 = COPY %cmp_ext(s32)
365 RET_ReallyLR implicit $w0
371 tracksRegLiveness: true
376 ; CHECK-LABEL: name: slt_false
377 ; CHECK: liveins: $x0
378 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
379 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
380 ; CHECK: $w0 = COPY %cmp_ext(s32)
381 ; CHECK: RET_ReallyLR implicit $w0
382 %ptr:_(p0) = COPY $x0
383 %cst:_(s32) = G_CONSTANT i32 2
384 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
385 %cmp:_(s1) = G_ICMP intpred(slt), %cst, %load_eq_1(s32)
386 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
387 $w0 = COPY %cmp_ext(s32)
388 RET_ReallyLR implicit $w0
393 tracksRegLiveness: true
398 ; CHECK-LABEL: name: uge_false
399 ; CHECK: liveins: $x0
400 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
401 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
402 ; CHECK: $w0 = COPY %cmp_ext(s32)
403 ; CHECK: RET_ReallyLR implicit $w0
404 %ptr:_(p0) = COPY $x0
405 %cst:_(s32) = G_CONSTANT i32 0
406 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
407 %cmp:_(s1) = G_ICMP intpred(uge), %cst, %load_eq_1(s32)
408 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
409 $w0 = COPY %cmp_ext(s32)
410 RET_ReallyLR implicit $w0
415 tracksRegLiveness: true
420 ; CHECK-LABEL: name: ugt_false
421 ; CHECK: liveins: $x0
422 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
423 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
424 ; CHECK: $w0 = COPY %cmp_ext(s32)
425 ; CHECK: RET_ReallyLR implicit $w0
426 %ptr:_(p0) = COPY $x0
427 %cst:_(s32) = G_CONSTANT i32 1
428 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
429 %cmp:_(s1) = G_ICMP intpred(ugt), %cst, %load_eq_1(s32)
430 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
431 $w0 = COPY %cmp_ext(s32)
432 RET_ReallyLR implicit $w0
437 tracksRegLiveness: true
442 ; CHECK-LABEL: name: ule_false
443 ; CHECK: liveins: $x0
444 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
445 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
446 ; CHECK: $w0 = COPY %cmp_ext(s32)
447 ; CHECK: RET_ReallyLR implicit $w0
448 %ptr:_(p0) = COPY $x0
449 %cst:_(s32) = G_CONSTANT i32 -1
450 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
451 %cmp:_(s1) = G_ICMP intpred(ule), %cst, %load_eq_1(s32)
452 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
453 $w0 = COPY %cmp_ext(s32)
454 RET_ReallyLR implicit $w0
459 tracksRegLiveness: true
464 ; CHECK-LABEL: name: ult_false
465 ; CHECK: liveins: $x0
466 ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
467 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
468 ; CHECK: $w0 = COPY %cmp_ext(s32)
469 ; CHECK: RET_ReallyLR implicit $w0
470 %ptr:_(p0) = COPY $x0
471 %cst:_(s32) = G_CONSTANT i32 2
472 %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
473 %cmp:_(s1) = G_ICMP intpred(ule), %cst, %load_eq_1(s32)
474 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
475 $w0 = COPY %cmp_ext(s32)
476 RET_ReallyLR implicit $w0
481 tracksRegLiveness: true
486 ; CHECK-LABEL: name: eq_unknown
487 ; CHECK: liveins: $x0
488 ; CHECK: %ptr:_(p0) = COPY $x0
489 ; CHECK: %cst:_(s32) = G_CONSTANT i32 1
490 ; CHECK: %load_between_1_2:_(s32) = G_LOAD %ptr(p0) :: (load (s32),
491 ; CHECK: %cmp:_(s1) = G_ICMP intpred(eq), %load_between_1_2(s32), %cst
492 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
493 ; CHECK: $w0 = COPY %cmp_ext(s32)
494 ; CHECK: RET_ReallyLR implicit $w0
495 %ptr:_(p0) = COPY $x0
496 %cst:_(s32) = G_CONSTANT i32 1
497 %load_between_1_2:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !1)
498 %cmp:_(s1) = G_ICMP intpred(eq), %load_between_1_2(s32), %cst
499 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
500 $w0 = COPY %cmp_ext(s32)
501 RET_ReallyLR implicit $w0
506 tracksRegLiveness: true
511 ; CHECK-LABEL: name: ne_unknown
512 ; CHECK: liveins: $x0
513 ; CHECK: %ptr:_(p0) = COPY $x0
514 ; CHECK: %cst:_(s32) = G_CONSTANT i32 1
515 ; CHECK: %load_between_1_2:_(s32) = G_LOAD %ptr(p0) :: (load (s32),
516 ; CHECK: %cmp:_(s1) = G_ICMP intpred(ne), %load_between_1_2(s32), %cst
517 ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
518 ; CHECK: $w0 = COPY %cmp_ext(s32)
519 ; CHECK: RET_ReallyLR implicit $w0
520 %ptr:_(p0) = COPY $x0
521 %cst:_(s32) = G_CONSTANT i32 1
522 %load_between_1_2:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !1)
523 %cmp:_(s1) = G_ICMP intpred(ne), %load_between_1_2(s32), %cst
524 %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
525 $w0 = COPY %cmp_ext(s32)
526 RET_ReallyLR implicit $w0
531 tracksRegLiveness: true
535 ; CHECK-LABEL: name: vector_true
536 ; CHECK: liveins: $x0
538 ; CHECK-NEXT: %cst64:_(s64) = G_CONSTANT i64 1
539 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
540 ; CHECK-NEXT: %cmp:_(<2 x s1>) = G_BUILD_VECTOR [[C]](s1), [[C]](s1)
541 ; CHECK-NEXT: %extract:_(s1) = G_EXTRACT_VECTOR_ELT %cmp(<2 x s1>), %cst64(s64)
542 ; CHECK-NEXT: %extract_ext:_(s32) = G_ZEXT %extract(s1)
543 ; CHECK-NEXT: $w0 = COPY %extract_ext(s32)
544 ; CHECK-NEXT: RET_ReallyLR implicit $w0
545 %ptr:_(p0) = COPY $x0
546 %cst:_(s32) = G_CONSTANT i32 1
547 %cst64:_(s64) = G_CONSTANT i64 1
548 %bv:_(<2 x s32>) = G_BUILD_VECTOR %cst, %cst
549 %cmp:_(<2 x s1>) = G_ICMP intpred(eq), %bv(<2 x s32>), %bv
550 %extract:_(s1) = G_EXTRACT_VECTOR_ELT %cmp(<2 x s1>), %cst64(s64)
551 %extract_ext:_(s32) = G_ZEXT %extract(s1)
552 $w0 = COPY %extract_ext(s32)
553 RET_ReallyLR implicit $w0
558 tracksRegLiveness: true
562 ; CHECK-LABEL: name: vector_false
563 ; CHECK: liveins: $x0
565 ; CHECK-NEXT: %cst64:_(s64) = G_CONSTANT i64 1
566 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false
567 ; CHECK-NEXT: %cmp:_(<2 x s1>) = G_BUILD_VECTOR [[C]](s1), [[C]](s1)
568 ; CHECK-NEXT: %extract:_(s1) = G_EXTRACT_VECTOR_ELT %cmp(<2 x s1>), %cst64(s64)
569 ; CHECK-NEXT: %extract_ext:_(s32) = G_ZEXT %extract(s1)
570 ; CHECK-NEXT: $w0 = COPY %extract_ext(s32)
571 ; CHECK-NEXT: RET_ReallyLR implicit $w0
572 %ptr:_(p0) = COPY $x0
573 %cst:_(s32) = G_CONSTANT i32 1
574 %cst64:_(s64) = G_CONSTANT i64 1
575 %bv:_(<2 x s32>) = G_BUILD_VECTOR %cst, %cst
576 %cmp:_(<2 x s1>) = G_ICMP intpred(ne), %bv(<2 x s32>), %bv
577 %extract:_(s1) = G_EXTRACT_VECTOR_ELT %cmp(<2 x s1>), %cst64(s64)
578 %extract_ext:_(s32) = G_ZEXT %extract(s1)
579 $w0 = COPY %extract_ext(s32)
580 RET_ReallyLR implicit $w0