llvm/llvm/test/CodeGen/AArch64/GlobalISel/prelegalizer-combiner-icmp-to-true-false-known-bits.mir

# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
# 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
# REQUIRES: asserts

--- |
  define i1 @eq_true(ptr %ptr) { unreachable }
  define i1 @ne_true(ptr %ptr) { unreachable }
  define i1 @sge_true(ptr %ptr) { unreachable }
  define i1 @sgt_true(ptr %ptr) { unreachable }
  define i1 @sle_true(ptr %ptr) { unreachable }
  define i1 @slt_true(ptr %ptr) { unreachable }
  define i1 @uge_true(ptr %ptr) { unreachable }
  define i1 @ugt_true(ptr %ptr) { unreachable }
  define i1 @ule_true(ptr %ptr) { unreachable }
  define i1 @ult_true(ptr %ptr) { unreachable }

  define i1 @eq_false(ptr %ptr) { unreachable }
  define i1 @ne_false(ptr %ptr) { unreachable }
  define i1 @sge_false(ptr %ptr) { unreachable }
  define i1 @sgt_false(ptr %ptr) { unreachable }
  define i1 @sle_false(ptr %ptr) { unreachable }
  define i1 @slt_false(ptr %ptr) { unreachable }
  define i1 @uge_false(ptr %ptr) { unreachable }
  define i1 @ugt_false(ptr %ptr) { unreachable }
  define i1 @ule_false(ptr %ptr) { unreachable }
  define i1 @ult_false(ptr %ptr) { unreachable }

  define i1 @eq_unknown(ptr %ptr) { unreachable }
  define i1 @ne_unknown(ptr %ptr) { unreachable }

  define i1 @vector_true(ptr %ptr) { unreachable }
  define i1 @vector_false(ptr %ptr) { unreachable }

  !0 = !{i32 1, i32 2}
  !1 = !{i32 1, i32 3}

...
---
name:            eq_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: eq_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %cmp:_(s1) = G_ICMP intpred(eq), %cst(s32), %cst
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ne_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ne_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst_1:_(s32) = G_CONSTANT i32 1
    %cst_2:_(s32) = G_CONSTANT i32 2
    %cmp:_(s1) = G_ICMP intpred(ne), %cst_1(s32), %cst_2
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            sge_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: sge_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 2
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(sge), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            sgt_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: sgt_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 3
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(sgt), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            sle_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: sle_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(sle), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0


...
---
name:            slt_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: slt_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 -1
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(slt), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            uge_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: uge_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 2
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(uge), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ugt_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ugt_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 -1
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(ugt), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ule_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ule_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(ule), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ult_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ult_true
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 true
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 0
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(ule), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            eq_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: eq_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 0
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(eq), %load_eq_1(s32), %cst
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ne_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ne_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst_1:_(s32) = G_CONSTANT i32 1
    %cst_2:_(s32) = G_CONSTANT i32 1
    %cmp:_(s1) = G_ICMP intpred(ne), %cst_1(s32), %cst_2
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            sge_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: sge_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 -1
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(sge), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            sgt_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: sgt_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(sgt), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            sle_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: sle_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 3
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(sle), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0


...
---
name:            slt_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: slt_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 2
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(slt), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            uge_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: uge_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 0
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(uge), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ugt_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ugt_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(ugt), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ule_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ule_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 -1
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(ule), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ult_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ult_false
    ; CHECK: liveins: $x0
    ; CHECK: %cmp:_(s1) = G_CONSTANT i1 false
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 2
    %load_eq_1:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !0)
    %cmp:_(s1) = G_ICMP intpred(ule), %cst, %load_eq_1(s32)
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            eq_unknown
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: eq_unknown
    ; CHECK: liveins: $x0
    ; CHECK: %ptr:_(p0) = COPY $x0
    ; CHECK: %cst:_(s32) = G_CONSTANT i32 1
    ; CHECK: %load_between_1_2:_(s32) = G_LOAD %ptr(p0) :: (load (s32),
    ; CHECK: %cmp:_(s1) = G_ICMP intpred(eq), %load_between_1_2(s32), %cst
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %load_between_1_2:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !1)
    %cmp:_(s1) = G_ICMP intpred(eq), %load_between_1_2(s32), %cst
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            ne_unknown
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0

    ; CHECK-LABEL: name: ne_unknown
    ; CHECK: liveins: $x0
    ; CHECK: %ptr:_(p0) = COPY $x0
    ; CHECK: %cst:_(s32) = G_CONSTANT i32 1
    ; CHECK: %load_between_1_2:_(s32) = G_LOAD %ptr(p0) :: (load (s32),
    ; CHECK: %cmp:_(s1) = G_ICMP intpred(ne), %load_between_1_2(s32), %cst
    ; CHECK: %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    ; CHECK: $w0 = COPY %cmp_ext(s32)
    ; CHECK: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %load_between_1_2:_(s32) = G_LOAD %ptr(p0) :: (load (s32), !range !1)
    %cmp:_(s1) = G_ICMP intpred(ne), %load_between_1_2(s32), %cst
    %cmp_ext:_(s32) = G_ZEXT %cmp(s1)
    $w0 = COPY %cmp_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            vector_true
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0
    ; CHECK-LABEL: name: vector_true
    ; CHECK: liveins: $x0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %cst64:_(s64) = G_CONSTANT i64 1
    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
    ; CHECK-NEXT: %cmp:_(<2 x s1>) = G_BUILD_VECTOR [[C]](s1), [[C]](s1)
    ; CHECK-NEXT: %extract:_(s1) = G_EXTRACT_VECTOR_ELT %cmp(<2 x s1>), %cst64(s64)
    ; CHECK-NEXT: %extract_ext:_(s32) = G_ZEXT %extract(s1)
    ; CHECK-NEXT: $w0 = COPY %extract_ext(s32)
    ; CHECK-NEXT: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %cst64:_(s64) = G_CONSTANT i64 1
    %bv:_(<2 x s32>) = G_BUILD_VECTOR %cst, %cst
    %cmp:_(<2 x s1>) = G_ICMP intpred(eq), %bv(<2 x s32>), %bv
    %extract:_(s1) = G_EXTRACT_VECTOR_ELT %cmp(<2 x s1>), %cst64(s64)
    %extract_ext:_(s32) = G_ZEXT %extract(s1)
    $w0 = COPY %extract_ext(s32)
    RET_ReallyLR implicit $w0

...
---
name:            vector_false
tracksRegLiveness: true
body:             |
  bb.0:
    liveins: $x0
    ; CHECK-LABEL: name: vector_false
    ; CHECK: liveins: $x0
    ; CHECK-NEXT: {{  $}}
    ; CHECK-NEXT: %cst64:_(s64) = G_CONSTANT i64 1
    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s1) = G_CONSTANT i1 false
    ; CHECK-NEXT: %cmp:_(<2 x s1>) = G_BUILD_VECTOR [[C]](s1), [[C]](s1)
    ; CHECK-NEXT: %extract:_(s1) = G_EXTRACT_VECTOR_ELT %cmp(<2 x s1>), %cst64(s64)
    ; CHECK-NEXT: %extract_ext:_(s32) = G_ZEXT %extract(s1)
    ; CHECK-NEXT: $w0 = COPY %extract_ext(s32)
    ; CHECK-NEXT: RET_ReallyLR implicit $w0
    %ptr:_(p0) = COPY $x0
    %cst:_(s32) = G_CONSTANT i32 1
    %cst64:_(s64) = G_CONSTANT i64 1
    %bv:_(<2 x s32>) = G_BUILD_VECTOR %cst, %cst
    %cmp:_(<2 x s1>) = G_ICMP intpred(ne), %bv(<2 x s32>), %bv
    %extract:_(s1) = G_EXTRACT_VECTOR_ELT %cmp(<2 x s1>), %cst64(s64)
    %extract_ext:_(s32) = G_ZEXT %extract(s1)
    $w0 = COPY %extract_ext(s32)
    RET_ReallyLR implicit $w0