143 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple aarch64-unknown-unknown -run-pass=instruction-select -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s3#4# Check that we can continue matching when we are in a situation where we will5# emit a TB(N)Z.6...7---8name: fold_zext9alignment: 410legalized: true11regBankSelected: true12tracksRegLiveness: true13body: |14 ; CHECK-LABEL: name: fold_zext15 ; CHECK: bb.0:16 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)17 ; CHECK-NEXT: liveins: $x018 ; CHECK-NEXT: {{ $}}19 ; CHECK-NEXT: %copy:gpr32 = COPY $w020 ; CHECK-NEXT: TBNZW %copy, 3, %bb.121 ; CHECK-NEXT: B %bb.022 ; CHECK-NEXT: {{ $}}23 ; CHECK-NEXT: bb.1:24 ; CHECK-NEXT: RET_ReallyLR25 bb.0:26 successors: %bb.0, %bb.127 liveins: $x028 %copy:gpr(s32) = COPY $w029 %bit:gpr(s64) = G_CONSTANT i64 830 %zero:gpr(s64) = G_CONSTANT i64 031 %fold_me:gpr(s64) = G_ZEXT %copy(s32)32 %and:gpr(s64) = G_AND %fold_me, %bit33 %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero34 G_BRCOND %cmp, %bb.135 G_BR %bb.036 bb.1:37 RET_ReallyLR38...39---40name: fold_anyext41alignment: 442legalized: true43regBankSelected: true44tracksRegLiveness: true45body: |46 ; CHECK-LABEL: name: fold_anyext47 ; CHECK: bb.0:48 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)49 ; CHECK-NEXT: liveins: $x050 ; CHECK-NEXT: {{ $}}51 ; CHECK-NEXT: %copy:gpr32 = COPY $w052 ; CHECK-NEXT: TBNZW %copy, 3, %bb.153 ; CHECK-NEXT: B %bb.054 ; CHECK-NEXT: {{ $}}55 ; CHECK-NEXT: bb.1:56 ; CHECK-NEXT: RET_ReallyLR57 bb.0:58 successors: %bb.0, %bb.159 liveins: $x060 %copy:gpr(s32) = COPY $w061 %bit:gpr(s64) = G_CONSTANT i64 862 %zero:gpr(s64) = G_CONSTANT i64 063 %fold_me:gpr(s64) = G_ANYEXT %copy(s32)64 %and:gpr(s64) = G_AND %fold_me, %bit65 %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero66 G_BRCOND %cmp, %bb.167 G_BR %bb.068 bb.1:69 RET_ReallyLR70...71---72name: fold_multiple73alignment: 474legalized: true75regBankSelected: true76tracksRegLiveness: true77body: |78 ; CHECK-LABEL: name: fold_multiple79 ; CHECK: bb.0:80 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)81 ; CHECK-NEXT: liveins: $h082 ; CHECK-NEXT: {{ $}}83 ; CHECK-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:fpr32 = SUBREG_TO_REG 0, $h0, %subreg.hsub84 ; CHECK-NEXT: %copy:gpr32all = COPY [[SUBREG_TO_REG]]85 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32 = COPY %copy86 ; CHECK-NEXT: TBNZW [[COPY]], 3, %bb.187 ; CHECK-NEXT: B %bb.088 ; CHECK-NEXT: {{ $}}89 ; CHECK-NEXT: bb.1:90 ; CHECK-NEXT: RET_ReallyLR91 bb.0:92 successors: %bb.0, %bb.193 liveins: $h094 %copy:gpr(s16) = COPY $h095 %bit:gpr(s64) = G_CONSTANT i64 896 %zero:gpr(s64) = G_CONSTANT i64 097 %ext1:gpr(s32) = G_ZEXT %copy(s16)98 %ext2:gpr(s64) = G_ANYEXT %ext1(s32)99 %and:gpr(s64) = G_AND %ext2, %bit100 %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero101 G_BRCOND %cmp, %bb.1102 G_BR %bb.0103 bb.1:104 RET_ReallyLR105...106---107name: dont_fold_more_than_one_use108alignment: 4109legalized: true110regBankSelected: true111tracksRegLiveness: true112body: |113 ; CHECK-LABEL: name: dont_fold_more_than_one_use114 ; CHECK: bb.0:115 ; CHECK-NEXT: successors: %bb.0(0x40000000), %bb.1(0x40000000)116 ; CHECK-NEXT: liveins: $x0117 ; CHECK-NEXT: {{ $}}118 ; CHECK-NEXT: %copy:gpr32 = COPY $w0119 ; CHECK-NEXT: [[ORRWrs:%[0-9]+]]:gpr32 = ORRWrs $wzr, %copy, 0120 ; CHECK-NEXT: %zext:gpr64 = SUBREG_TO_REG 0, [[ORRWrs]], %subreg.sub_32121 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr32all = COPY %zext.sub_32122 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr32 = COPY [[COPY]]123 ; CHECK-NEXT: TBNZW [[COPY1]], 3, %bb.1124 ; CHECK-NEXT: B %bb.0125 ; CHECK-NEXT: {{ $}}126 ; CHECK-NEXT: bb.1:127 ; CHECK-NEXT: $x0 = COPY %zext128 ; CHECK-NEXT: RET_ReallyLR implicit $x0129 bb.0:130 successors: %bb.0, %bb.1131 liveins: $x0132 %copy:gpr(s32) = COPY $w0133 %bit:gpr(s64) = G_CONSTANT i64 8134 %zero:gpr(s64) = G_CONSTANT i64 0135 %zext:gpr(s64) = G_ZEXT %copy(s32)136 %and:gpr(s64) = G_AND %zext, %bit137 %cmp:gpr(s32) = G_ICMP intpred(ne), %and(s64), %zero138 G_BRCOND %cmp, %bb.1139 G_BR %bb.0140 bb.1:141 $x0 = COPY %zext:gpr(s64)142 RET_ReallyLR implicit $x0143