# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -o - -mtriple=aarch64-unknown-unknown -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s | FileCheck %s --check-prefixes=CHECK --- name: test_icmp_canon body: | bb.1: ; CHECK-LABEL: name: test_icmp_canon ; CHECK: %lhs:_(s64) = G_CONSTANT i64 11 ; CHECK-NEXT: %rhs:_(s64) = COPY $x0 ; CHECK-NEXT: %res:_(s32) = G_ICMP intpred(sgt), %rhs(s64), %lhs ; CHECK-NEXT: $w0 = COPY %res(s32) %lhs:_(s64) = G_CONSTANT i64 11 %rhs:_(s64) = COPY $x0 %res:_(s32) = G_ICMP intpred(slt), %lhs(s64), %rhs $w0 = COPY %res(s32) ... --- name: test_icmp_no_canon body: | bb.1: ; CHECK-LABEL: name: test_icmp_no_canon ; CHECK: %lhs:_(s64) = COPY $x0 ; CHECK-NEXT: %rhs:_(s64) = G_CONSTANT i64 11 ; CHECK-NEXT: %res:_(s32) = G_ICMP intpred(slt), %lhs(s64), %rhs ; CHECK-NEXT: $w0 = COPY %res(s32) %lhs:_(s64) = COPY $x0 %rhs:_(s64) = G_CONSTANT i64 11 %res:_(s32) = G_ICMP intpred(slt), %lhs(s64), %rhs $w0 = COPY %res(s32) ... --- name: test_icmp_canon_bv body: | bb.1: ; CHECK-LABEL: name: test_icmp_canon_bv ; CHECK: %opaque1:_(s64) = COPY $x0 ; CHECK-NEXT: %opaque2:_(s64) = COPY $x0 ; CHECK-NEXT: %const1:_(s64) = G_CONSTANT i64 11 ; CHECK-NEXT: %const2:_(s64) = G_CONSTANT i64 12 ; CHECK-NEXT: %lhs:_(<2 x s64>) = G_BUILD_VECTOR %const1(s64), %const2(s64) ; CHECK-NEXT: %rhs:_(<2 x s64>) = G_BUILD_VECTOR %opaque1(s64), %opaque2(s64) ; CHECK-NEXT: %res:_(<2 x s32>) = G_ICMP intpred(sgt), %rhs(<2 x s64>), %lhs ; CHECK-NEXT: $x0 = COPY %res(<2 x s32>) %opaque1:_(s64) = COPY $x0 %opaque2:_(s64) = COPY $x0 %const1:_(s64) = G_CONSTANT i64 11 %const2:_(s64) = G_CONSTANT i64 12 %lhs:_(<2 x s64>) = G_BUILD_VECTOR %const1(s64), %const2(s64) %rhs:_(<2 x s64>) = G_BUILD_VECTOR %opaque1(s64), %opaque2(s64) %res:_(<2 x s32>) = G_ICMP intpred(slt), %lhs(<2 x s64>), %rhs $x0 = COPY %res(<2 x s32>) ... --- name: test_icmp_no_canon_bv_neither_const body: | bb.1: ; CHECK-LABEL: name: test_icmp_no_canon_bv_neither_const ; CHECK: %opaque1:_(s64) = COPY $x0 ; CHECK-NEXT: %opaque2:_(s64) = COPY $x0 ; CHECK-NEXT: %const1:_(s64) = G_CONSTANT i64 11 ; CHECK-NEXT: %const2:_(s64) = G_CONSTANT i64 12 ; CHECK-NEXT: %lhs:_(<2 x s64>) = G_BUILD_VECTOR %const1(s64), %opaque2(s64) ; CHECK-NEXT: %rhs:_(<2 x s64>) = G_BUILD_VECTOR %opaque1(s64), %const2(s64) ; CHECK-NEXT: %res:_(<2 x s32>) = G_ICMP intpred(slt), %lhs(<2 x s64>), %rhs ; CHECK-NEXT: $x0 = COPY %res(<2 x s32>) %opaque1:_(s64) = COPY $x0 %opaque2:_(s64) = COPY $x0 %const1:_(s64) = G_CONSTANT i64 11 %const2:_(s64) = G_CONSTANT i64 12 %lhs:_(<2 x s64>) = G_BUILD_VECTOR %const1(s64), %opaque2(s64) %rhs:_(<2 x s64>) = G_BUILD_VECTOR %opaque1(s64), %const2(s64) %res:_(<2 x s32>) = G_ICMP intpred(slt), %lhs(<2 x s64>), %rhs $x0 = COPY %res(<2 x s32>) ... --- name: test_icmp_canon_splat body: | bb.1: ; CHECK-LABEL: name: test_icmp_canon_splat ; CHECK: %const:_(s64) = G_CONSTANT i64 11 ; CHECK-NEXT: %lhs:_() = G_SPLAT_VECTOR %const(s64) ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x1 ; CHECK-NEXT: %rhs:_() = G_SPLAT_VECTOR [[COPY]](s64) ; CHECK-NEXT: %res:_() = G_ICMP intpred(sgt), %rhs(), %lhs ; CHECK-NEXT: %z:_() = G_ZEXT %res() ; CHECK-NEXT: $z0 = COPY %z() %const:_(s64) = G_CONSTANT i64 11 %lhs:_() = G_SPLAT_VECTOR %const:_(s64) %1:_(s64) = COPY $x1 %rhs:_() = G_SPLAT_VECTOR %1:_(s64) %res:_() = G_ICMP intpred(slt), %lhs(), %rhs %z:_() = G_ZEXT %res $z0 = COPY %z() ...