diff options
| author | Diana Picus <diana.picus@linaro.org> | 2019-02-07 11:05:33 +0000 |
|---|---|---|
| committer | Diana Picus <diana.picus@linaro.org> | 2019-02-07 11:05:33 +0000 |
| commit | 75a04e2a77e14de2f42e2b7ddd002cc0a4ac57e5 (patch) | |
| tree | fb39b62b482cbbd9d17a962147d0bbfb0962c09e /llvm/test/CodeGen/ARM/GlobalISel | |
| parent | baf2f35ec4c5adeaab2a51b2e6c5eb6156f82575 (diff) | |
| download | bcm5719-llvm-75a04e2a77e14de2f42e2b7ddd002cc0a4ac57e5.tar.gz bcm5719-llvm-75a04e2a77e14de2f42e2b7ddd002cc0a4ac57e5.zip | |
[ARM GlobalISel] Support G_ICMP for Thumb2
Mark as legal and use the t2* equivalents of the arm mode instructions,
e.g. t2CMPrr instead of plain CMPrr.
llvm-svn: 353392
Diffstat (limited to 'llvm/test/CodeGen/ARM/GlobalISel')
3 files changed, 436 insertions, 92 deletions
diff --git a/llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-cmp.mir b/llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-cmp.mir new file mode 100644 index 00000000000..dd06933603c --- /dev/null +++ b/llvm/test/CodeGen/ARM/GlobalISel/arm-legalize-cmp.mir @@ -0,0 +1,123 @@ +# RUN: llc -mtriple arm-- -run-pass=legalizer %s -o - | FileCheck %s +# RUN: llc -mtriple thumb-- -mattr=+v6t2 -run-pass=legalizer %s -o - | FileCheck %s +--- | + define void @test_icmp_s8() { ret void } + define void @test_icmp_s16() { ret void } + define void @test_icmp_s32() { ret void } + + define void @test_icmp_p0() { ret void } +... +--- +name: test_icmp_s8 +# CHECK-LABEL: name: test_icmp_s8 +legalized: false +# CHECK: legalized: true +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } + - { id: 2, class: _ } + - { id: 3, class: _ } + - { id: 4, class: _ } + - { id: 5, class: _ } +body: | + bb.0: + liveins: $r0, $r1 + + %0(p0) = COPY $r0 + %1(s8) = G_LOAD %0 :: (load 1) + %2(p0) = COPY $r1 + %3(s8) = G_LOAD %2 :: (load 1) + %4(s1) = G_ICMP intpred(ne), %1(s8), %3 + ; G_ICMP with s8 should widen + ; CHECK: {{%[0-9]+}}:_(s1) = G_ICMP intpred(ne), {{%[0-9]+}}(s32), {{%[0-9]+}} + ; CHECK-NOT: {{%[0-9]+}}:_(s1) = G_ICMP intpred(ne), {{%[0-9]+}}(s8), {{%[0-9]+}} + %5(s32) = G_ZEXT %4(s1) + $r0 = COPY %5(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_s16 +# CHECK-LABEL: name: test_icmp_s16 +legalized: false +# CHECK: legalized: true +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } + - { id: 2, class: _ } + - { id: 3, class: _ } + - { id: 4, class: _ } + - { id: 5, class: _ } +body: | + bb.0: + liveins: $r0, $r1 + + %0(p0) = COPY $r0 + %1(s16) = G_LOAD %0 :: (load 2) + %2(p0) = COPY $r1 + %3(s16) = G_LOAD %2 :: (load 2) + %4(s1) = G_ICMP intpred(slt), %1(s16), %3 + ; G_ICMP with s16 should widen + ; CHECK: {{%[0-9]+}}:_(s1) = G_ICMP intpred(slt), {{%[0-9]+}}(s32), {{%[0-9]+}} + ; CHECK-NOT: {{%[0-9]+}}:_(s1) = G_ICMP intpred(slt), {{%[0-9]+}}(s16), {{%[0-9]+}} + %5(s32) = G_ZEXT %4(s1) + $r0 = COPY %5(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_s32 +# CHECK-LABEL: name: test_icmp_s32 +legalized: false +# CHECK: legalized: true +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } + - { id: 2, class: _ } + - { id: 3, class: _ } +body: | + bb.0: + liveins: $r0, $r1 + + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(eq), %0(s32), %1 + ; G_ICMP with s32 is legal, so we should find it unchanged in the output + ; CHECK: {{%[0-9]+}}:_(s1) = G_ICMP intpred(eq), {{%[0-9]+}}(s32), {{%[0-9]+}} + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_p0 +# CHECK-LABEL: name: test_icmp_p0 +legalized: false +# CHECK: legalized: true +regBankSelected: false +selected: false +tracksRegLiveness: true +registers: + - { id: 0, class: _ } + - { id: 1, class: _ } + - { id: 2, class: _ } + - { id: 3, class: _ } +body: | + bb.0: + liveins: $r0, $r1 + + %0(p0) = COPY $r0 + %1(p0) = COPY $r1 + %2(s1) = G_ICMP intpred(eq), %0(p0), %1 + ; G_ICMP with p0 is legal, so we should find it unchanged in the output + ; CHECK: {{%[0-9]+}}:_(s1) = G_ICMP intpred(eq), {{%[0-9]+}}(p0), {{%[0-9]+}} + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... diff --git a/llvm/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir b/llvm/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir index 4d49f25d94f..fef8dad71c6 100644 --- a/llvm/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir +++ b/llvm/test/CodeGen/ARM/GlobalISel/arm-legalizer.mir @@ -5,10 +5,6 @@ define void @test_constants_s64() { ret void } - define void @test_icmp_s8() { ret void } - define void @test_icmp_s16() { ret void } - define void @test_icmp_s32() { ret void } - define void @test_select_s32() { ret void } define void @test_select_ptr() { ret void } @@ -112,94 +108,6 @@ body: | BX_RET 14, $noreg ... --- -name: test_icmp_s8 -# CHECK-LABEL: name: test_icmp_s8 -legalized: false -# CHECK: legalized: true -regBankSelected: false -selected: false -tracksRegLiveness: true -registers: - - { id: 0, class: _ } - - { id: 1, class: _ } - - { id: 2, class: _ } - - { id: 3, class: _ } - - { id: 4, class: _ } - - { id: 5, class: _ } -body: | - bb.0: - liveins: $r0, $r1 - - %0(p0) = COPY $r0 - %1(s8) = G_LOAD %0 :: (load 1) - %2(p0) = COPY $r1 - %3(s8) = G_LOAD %2 :: (load 1) - %4(s1) = G_ICMP intpred(ne), %1(s8), %3 - ; G_ICMP with s8 should widen - ; CHECK: {{%[0-9]+}}:_(s1) = G_ICMP intpred(ne), {{%[0-9]+}}(s32), {{%[0-9]+}} - ; CHECK-NOT: {{%[0-9]+}}:_(s1) = G_ICMP intpred(ne), {{%[0-9]+}}(s8), {{%[0-9]+}} - %5(s32) = G_ZEXT %4(s1) - $r0 = COPY %5(s32) - BX_RET 14, $noreg, implicit $r0 -... ---- -name: test_icmp_s16 -# CHECK-LABEL: name: test_icmp_s16 -legalized: false -# CHECK: legalized: true -regBankSelected: false -selected: false -tracksRegLiveness: true -registers: - - { id: 0, class: _ } - - { id: 1, class: _ } - - { id: 2, class: _ } - - { id: 3, class: _ } - - { id: 4, class: _ } - - { id: 5, class: _ } -body: | - bb.0: - liveins: $r0, $r1 - - %0(p0) = COPY $r0 - %1(s16) = G_LOAD %0 :: (load 2) - %2(p0) = COPY $r1 - %3(s16) = G_LOAD %2 :: (load 2) - %4(s1) = G_ICMP intpred(slt), %1(s16), %3 - ; G_ICMP with s16 should widen - ; CHECK: {{%[0-9]+}}:_(s1) = G_ICMP intpred(slt), {{%[0-9]+}}(s32), {{%[0-9]+}} - ; CHECK-NOT: {{%[0-9]+}}:_(s1) = G_ICMP intpred(slt), {{%[0-9]+}}(s16), {{%[0-9]+}} - %5(s32) = G_ZEXT %4(s1) - $r0 = COPY %5(s32) - BX_RET 14, $noreg, implicit $r0 -... ---- -name: test_icmp_s32 -# CHECK-LABEL: name: test_icmp_s32 -legalized: false -# CHECK: legalized: true -regBankSelected: false -selected: false -tracksRegLiveness: true -registers: - - { id: 0, class: _ } - - { id: 1, class: _ } - - { id: 2, class: _ } - - { id: 3, class: _ } -body: | - bb.0: - liveins: $r0, $r1 - - %0(s32) = COPY $r0 - %1(s32) = COPY $r1 - %2(s1) = G_ICMP intpred(eq), %0(s32), %1 - ; G_ICMP with s32 is legal, so we should find it unchanged in the output - ; CHECK: {{%[0-9]+}}:_(s1) = G_ICMP intpred(eq), {{%[0-9]+}}(s32), {{%[0-9]+}} - %3(s32) = G_ZEXT %2(s1) - $r0 = COPY %3(s32) - BX_RET 14, $noreg, implicit $r0 -... ---- name: test_select_s32 # CHECK-LABEL: name: test_select_s32 legalized: false diff --git a/llvm/test/CodeGen/ARM/GlobalISel/thumb-instruction-select-cmp.mir b/llvm/test/CodeGen/ARM/GlobalISel/thumb-instruction-select-cmp.mir new file mode 100644 index 00000000000..7da7dc55bc7 --- /dev/null +++ b/llvm/test/CodeGen/ARM/GlobalISel/thumb-instruction-select-cmp.mir @@ -0,0 +1,313 @@ +# RUN: llc -O0 -mtriple thumb-- -mattr=+v6t2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s +--- | + define void @test_icmp_eq_s32() { ret void } + define void @test_icmp_ne_s32() { ret void } + define void @test_icmp_ugt_s32() { ret void } + define void @test_icmp_uge_s32() { ret void } + define void @test_icmp_ult_s32() { ret void } + define void @test_icmp_ule_s32() { ret void } + define void @test_icmp_sgt_s32() { ret void } + define void @test_icmp_sge_s32() { ret void } + define void @test_icmp_slt_s32() { ret void } + define void @test_icmp_sle_s32() { ret void } +... +--- +name: test_icmp_eq_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_eq_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 0, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(eq), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_ne_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_ne_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 1, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(ne), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_ugt_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_ugt_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 8, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(ugt), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_uge_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_uge_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 2, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(uge), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_ult_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_ult_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 3, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(ult), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_ule_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_ule_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 9, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(ule), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_sgt_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_sgt_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 12, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(sgt), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_sge_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_sge_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 10, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(sge), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_slt_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_slt_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 11, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(slt), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... +--- +name: test_icmp_sle_s32 +legalized: true +regBankSelected: true +selected: false +registers: + - { id: 0, class: gprb } + - { id: 1, class: gprb } + - { id: 2, class: gprb } + - { id: 3, class: gprb } +body: | + bb.0: + liveins: $r0, $r1 + + ; CHECK-LABEL: name: test_icmp_sle_s32 + ; CHECK: [[COPY:%[0-9]+]]:gprnopc = COPY $r0 + ; CHECK: [[COPY1:%[0-9]+]]:rgpr = COPY $r1 + ; CHECK: [[MOVi:%[0-9]+]]:rgpr = t2MOVi 0, 14, $noreg, $noreg + ; CHECK: t2CMPrr [[COPY]], [[COPY1]], 14, $noreg, implicit-def $cpsr + ; CHECK: [[MOVCCi:%[0-9]+]]:rgpr = t2MOVCCi [[MOVi]], 1, 13, $cpsr + ; CHECK: [[ANDri:%[0-9]+]]:rgpr = t2ANDri [[MOVCCi]], 1, 14, $noreg, $noreg + ; CHECK: $r0 = COPY [[ANDri]] + ; CHECK: BX_RET 14, $noreg, implicit $r0 + %0(s32) = COPY $r0 + %1(s32) = COPY $r1 + %2(s1) = G_ICMP intpred(sle), %0(s32), %1 + %3(s32) = G_ZEXT %2(s1) + $r0 = COPY %3(s32) + BX_RET 14, $noreg, implicit $r0 +... |

