762 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 42# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=early-tailduplication -tail-dup-pred-size=3 -tail-dup-succ-size=3 %s -o - | FileCheck %s -check-prefix=LIMIT3# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=early-tailduplication -tail-dup-pred-size=4 -tail-dup-succ-size=4 %s -o - | FileCheck %s -check-prefix=NOLIMIT4 5---6name: foo7tracksRegLiveness: true8jumpTable:9 kind: block-address10 entries:11 - id: 012 blocks: [ '%bb.2', '%bb.3', '%bb.4', '%bb.5' ]13 - id: 114 blocks: [ '%bb.9', '%bb.10', '%bb.11', '%bb.12' ]15body: |16 ; LIMIT-LABEL: name: foo17 ; LIMIT: bb.0:18 ; LIMIT-NEXT: successors: %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)19 ; LIMIT-NEXT: liveins: $rdi, $esi20 ; LIMIT-NEXT: {{ $}}21 ; LIMIT-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $esi22 ; LIMIT-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi23 ; LIMIT-NEXT: [[SHR32ri:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 1, implicit-def dead $eflags24 ; LIMIT-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[SHR32ri]], 7, implicit-def dead $eflags25 ; LIMIT-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, killed [[AND32ri]], %subreg.sub_32bit26 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG]], %jump-table.0, $noreg27 ; LIMIT-NEXT: {{ $}}28 ; LIMIT-NEXT: bb.2:29 ; LIMIT-NEXT: successors: %bb.7(0x80000000)30 ; LIMIT-NEXT: {{ $}}31 ; LIMIT-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg32 ; LIMIT-NEXT: JMP_1 %bb.733 ; LIMIT-NEXT: {{ $}}34 ; LIMIT-NEXT: bb.3:35 ; LIMIT-NEXT: successors: %bb.7(0x80000000)36 ; LIMIT-NEXT: {{ $}}37 ; LIMIT-NEXT: [[MOV32rm1:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg38 ; LIMIT-NEXT: [[SHR32ri1:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm1]], 1, implicit-def dead $eflags39 ; LIMIT-NEXT: JMP_1 %bb.740 ; LIMIT-NEXT: {{ $}}41 ; LIMIT-NEXT: bb.4:42 ; LIMIT-NEXT: successors: %bb.7(0x80000000)43 ; LIMIT-NEXT: {{ $}}44 ; LIMIT-NEXT: [[MOV32rm2:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg45 ; LIMIT-NEXT: [[SHR32ri2:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm2]], 2, implicit-def dead $eflags46 ; LIMIT-NEXT: JMP_1 %bb.747 ; LIMIT-NEXT: {{ $}}48 ; LIMIT-NEXT: bb.5:49 ; LIMIT-NEXT: successors: %bb.7(0x80000000)50 ; LIMIT-NEXT: {{ $}}51 ; LIMIT-NEXT: [[MOV32rm3:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg52 ; LIMIT-NEXT: [[SHR32ri3:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm3]], 3, implicit-def dead $eflags53 ; LIMIT-NEXT: JMP_1 %bb.754 ; LIMIT-NEXT: {{ $}}55 ; LIMIT-NEXT: bb.6:56 ; LIMIT-NEXT: successors:57 ; LIMIT-NEXT: {{ $}}58 ; LIMIT-NEXT: bb.7:59 ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)60 ; LIMIT-NEXT: {{ $}}61 ; LIMIT-NEXT: [[PHI:%[0-9]+]]:gr32 = PHI [[SHR32ri3]], %bb.5, [[SHR32ri2]], %bb.4, [[SHR32ri1]], %bb.3, [[MOV32rm]], %bb.262 ; LIMIT-NEXT: [[SHR32ri4:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags63 ; LIMIT-NEXT: [[AND32ri1:%[0-9]+]]:gr32 = AND32ri [[SHR32ri4]], 7, implicit-def dead $eflags64 ; LIMIT-NEXT: [[SUBREG_TO_REG1:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, killed [[AND32ri1]], %subreg.sub_32bit65 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG1]], %jump-table.1, $noreg66 ; LIMIT-NEXT: {{ $}}67 ; LIMIT-NEXT: bb.9:68 ; LIMIT-NEXT: successors: %bb.13(0x80000000)69 ; LIMIT-NEXT: {{ $}}70 ; LIMIT-NEXT: [[MOV32rm4:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg71 ; LIMIT-NEXT: JMP_1 %bb.1372 ; LIMIT-NEXT: {{ $}}73 ; LIMIT-NEXT: bb.10:74 ; LIMIT-NEXT: successors: %bb.13(0x80000000)75 ; LIMIT-NEXT: {{ $}}76 ; LIMIT-NEXT: [[MOV32rm5:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg77 ; LIMIT-NEXT: [[SHR32ri5:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm5]], 1, implicit-def dead $eflags78 ; LIMIT-NEXT: JMP_1 %bb.1379 ; LIMIT-NEXT: {{ $}}80 ; LIMIT-NEXT: bb.11:81 ; LIMIT-NEXT: successors: %bb.13(0x80000000)82 ; LIMIT-NEXT: {{ $}}83 ; LIMIT-NEXT: [[MOV32rm6:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg84 ; LIMIT-NEXT: [[SHR32ri6:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm6]], 2, implicit-def dead $eflags85 ; LIMIT-NEXT: JMP_1 %bb.1386 ; LIMIT-NEXT: {{ $}}87 ; LIMIT-NEXT: bb.12:88 ; LIMIT-NEXT: successors: %bb.13(0x80000000)89 ; LIMIT-NEXT: {{ $}}90 ; LIMIT-NEXT: [[MOV32rm7:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg91 ; LIMIT-NEXT: [[SHR32ri7:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm7]], 6, implicit-def dead $eflags92 ; LIMIT-NEXT: {{ $}}93 ; LIMIT-NEXT: bb.13:94 ; LIMIT-NEXT: [[PHI1:%[0-9]+]]:gr32 = PHI [[SHR32ri7]], %bb.12, [[SHR32ri6]], %bb.11, [[SHR32ri5]], %bb.10, [[MOV32rm4]], %bb.995 ; LIMIT-NEXT: [[OR32rr:%[0-9]+]]:gr32 = OR32rr [[PHI1]], [[PHI]], implicit-def dead $eflags96 ; LIMIT-NEXT: $eax = COPY [[OR32rr]]97 ; LIMIT-NEXT: RET 0, $eax98 ;99 ; NOLIMIT-LABEL: name: foo100 ; NOLIMIT: bb.0:101 ; NOLIMIT-NEXT: successors: %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)102 ; NOLIMIT-NEXT: liveins: $rdi, $esi103 ; NOLIMIT-NEXT: {{ $}}104 ; NOLIMIT-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $esi105 ; NOLIMIT-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi106 ; NOLIMIT-NEXT: [[SHR32ri:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 1, implicit-def dead $eflags107 ; NOLIMIT-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[SHR32ri]], 7, implicit-def dead $eflags108 ; NOLIMIT-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, killed [[AND32ri]], %subreg.sub_32bit109 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG]], %jump-table.0, $noreg110 ; NOLIMIT-NEXT: {{ $}}111 ; NOLIMIT-NEXT: bb.2:112 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)113 ; NOLIMIT-NEXT: {{ $}}114 ; NOLIMIT-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg115 ; NOLIMIT-NEXT: [[SHR32ri1:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags116 ; NOLIMIT-NEXT: [[AND32ri1:%[0-9]+]]:gr32 = AND32ri [[SHR32ri1]], 7, implicit-def dead $eflags117 ; NOLIMIT-NEXT: [[SUBREG_TO_REG1:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri1]], %subreg.sub_32bit118 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG1]], %jump-table.1, $noreg119 ; NOLIMIT-NEXT: {{ $}}120 ; NOLIMIT-NEXT: bb.3:121 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)122 ; NOLIMIT-NEXT: {{ $}}123 ; NOLIMIT-NEXT: [[MOV32rm1:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg124 ; NOLIMIT-NEXT: [[SHR32ri2:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm1]], 1, implicit-def dead $eflags125 ; NOLIMIT-NEXT: [[SHR32ri3:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags126 ; NOLIMIT-NEXT: [[AND32ri2:%[0-9]+]]:gr32 = AND32ri [[SHR32ri3]], 7, implicit-def dead $eflags127 ; NOLIMIT-NEXT: [[SUBREG_TO_REG2:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri2]], %subreg.sub_32bit128 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG2]], %jump-table.1, $noreg129 ; NOLIMIT-NEXT: {{ $}}130 ; NOLIMIT-NEXT: bb.4:131 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)132 ; NOLIMIT-NEXT: {{ $}}133 ; NOLIMIT-NEXT: [[MOV32rm2:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg134 ; NOLIMIT-NEXT: [[SHR32ri4:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm2]], 2, implicit-def dead $eflags135 ; NOLIMIT-NEXT: [[SHR32ri5:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags136 ; NOLIMIT-NEXT: [[AND32ri3:%[0-9]+]]:gr32 = AND32ri [[SHR32ri5]], 7, implicit-def dead $eflags137 ; NOLIMIT-NEXT: [[SUBREG_TO_REG3:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri3]], %subreg.sub_32bit138 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG3]], %jump-table.1, $noreg139 ; NOLIMIT-NEXT: {{ $}}140 ; NOLIMIT-NEXT: bb.5:141 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)142 ; NOLIMIT-NEXT: {{ $}}143 ; NOLIMIT-NEXT: [[MOV32rm3:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg144 ; NOLIMIT-NEXT: [[SHR32ri6:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm3]], 3, implicit-def dead $eflags145 ; NOLIMIT-NEXT: [[SHR32ri7:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags146 ; NOLIMIT-NEXT: [[AND32ri4:%[0-9]+]]:gr32 = AND32ri [[SHR32ri7]], 7, implicit-def dead $eflags147 ; NOLIMIT-NEXT: [[SUBREG_TO_REG4:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri4]], %subreg.sub_32bit148 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG4]], %jump-table.1, $noreg149 ; NOLIMIT-NEXT: {{ $}}150 ; NOLIMIT-NEXT: bb.6:151 ; NOLIMIT-NEXT: successors:152 ; NOLIMIT-NEXT: {{ $}}153 ; NOLIMIT-NEXT: bb.9:154 ; NOLIMIT-NEXT: successors: %bb.13(0x80000000)155 ; NOLIMIT-NEXT: {{ $}}156 ; NOLIMIT-NEXT: [[PHI:%[0-9]+]]:gr32 = PHI [[MOV32rm]], %bb.2, [[SHR32ri2]], %bb.3, [[SHR32ri4]], %bb.4, [[SHR32ri6]], %bb.5157 ; NOLIMIT-NEXT: [[MOV32rm4:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg158 ; NOLIMIT-NEXT: JMP_1 %bb.13159 ; NOLIMIT-NEXT: {{ $}}160 ; NOLIMIT-NEXT: bb.10:161 ; NOLIMIT-NEXT: successors: %bb.13(0x80000000)162 ; NOLIMIT-NEXT: {{ $}}163 ; NOLIMIT-NEXT: [[PHI1:%[0-9]+]]:gr32 = PHI [[MOV32rm]], %bb.2, [[SHR32ri2]], %bb.3, [[SHR32ri4]], %bb.4, [[SHR32ri6]], %bb.5164 ; NOLIMIT-NEXT: [[MOV32rm5:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg165 ; NOLIMIT-NEXT: [[SHR32ri8:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm5]], 1, implicit-def dead $eflags166 ; NOLIMIT-NEXT: JMP_1 %bb.13167 ; NOLIMIT-NEXT: {{ $}}168 ; NOLIMIT-NEXT: bb.11:169 ; NOLIMIT-NEXT: successors: %bb.13(0x80000000)170 ; NOLIMIT-NEXT: {{ $}}171 ; NOLIMIT-NEXT: [[PHI2:%[0-9]+]]:gr32 = PHI [[MOV32rm]], %bb.2, [[SHR32ri2]], %bb.3, [[SHR32ri4]], %bb.4, [[SHR32ri6]], %bb.5172 ; NOLIMIT-NEXT: [[MOV32rm6:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg173 ; NOLIMIT-NEXT: [[SHR32ri9:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm6]], 2, implicit-def dead $eflags174 ; NOLIMIT-NEXT: JMP_1 %bb.13175 ; NOLIMIT-NEXT: {{ $}}176 ; NOLIMIT-NEXT: bb.12:177 ; NOLIMIT-NEXT: successors: %bb.13(0x80000000)178 ; NOLIMIT-NEXT: {{ $}}179 ; NOLIMIT-NEXT: [[PHI3:%[0-9]+]]:gr32 = PHI [[MOV32rm]], %bb.2, [[SHR32ri2]], %bb.3, [[SHR32ri4]], %bb.4, [[SHR32ri6]], %bb.5180 ; NOLIMIT-NEXT: [[MOV32rm7:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg181 ; NOLIMIT-NEXT: [[SHR32ri10:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm7]], 6, implicit-def dead $eflags182 ; NOLIMIT-NEXT: {{ $}}183 ; NOLIMIT-NEXT: bb.13:184 ; NOLIMIT-NEXT: [[PHI4:%[0-9]+]]:gr32 = PHI [[PHI]], %bb.9, [[PHI1]], %bb.10, [[PHI2]], %bb.11, [[PHI3]], %bb.12185 ; NOLIMIT-NEXT: [[PHI5:%[0-9]+]]:gr32 = PHI [[SHR32ri10]], %bb.12, [[SHR32ri9]], %bb.11, [[SHR32ri8]], %bb.10, [[MOV32rm4]], %bb.9186 ; NOLIMIT-NEXT: [[OR32rr:%[0-9]+]]:gr32 = OR32rr [[PHI5]], [[PHI4]], implicit-def dead $eflags187 ; NOLIMIT-NEXT: $eax = COPY [[OR32rr]]188 ; NOLIMIT-NEXT: RET 0, $eax189 bb.0:190 liveins: $rdi, $esi191 192 %11:gr32 = COPY $esi193 %10:gr64 = COPY $rdi194 %13:gr32 = SHR32ri %11, 1, implicit-def dead $eflags195 %14:gr32 = AND32ri %13, 7, implicit-def dead $eflags196 %12:gr64_nosp = SUBREG_TO_REG 0, killed %14, %subreg.sub_32bit197 198 bb.1:199 successors: %bb.2, %bb.3, %bb.4, %bb.5200 201 JMP64m $noreg, 8, %12, %jump-table.0, $noreg202 203 bb.2:204 %0:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg205 JMP_1 %bb.7206 207 bb.3:208 %17:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg209 %1:gr32 = SHR32ri %17, 1, implicit-def dead $eflags210 JMP_1 %bb.7211 212 bb.4:213 %16:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg214 %2:gr32 = SHR32ri %16, 2, implicit-def dead $eflags215 JMP_1 %bb.7216 217 bb.5:218 %15:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg219 %3:gr32 = SHR32ri %15, 3, implicit-def dead $eflags220 JMP_1 %bb.7221 222 bb.6:223 successors:224 225 bb.7:226 %4:gr32 = PHI %3, %bb.5, %2, %bb.4, %1, %bb.3, %0, %bb.2227 %19:gr32 = SHR32ri %11, 2, implicit-def dead $eflags228 %20:gr32 = AND32ri %19, 7, implicit-def dead $eflags229 %18:gr64_nosp = SUBREG_TO_REG 0, killed %20, %subreg.sub_32bit230 231 bb.8:232 successors: %bb.9, %bb.10, %bb.11, %bb.12233 234 JMP64m $noreg, 8, %18, %jump-table.1, $noreg235 236 bb.9:237 %5:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg238 JMP_1 %bb.13239 240 bb.10:241 %23:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg242 %6:gr32 = SHR32ri %23, 1, implicit-def dead $eflags243 JMP_1 %bb.13244 245 bb.11:246 %22:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg247 %7:gr32 = SHR32ri %22, 2, implicit-def dead $eflags248 JMP_1 %bb.13249 250 bb.12:251 %21:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg252 %8:gr32 = SHR32ri %21, 6, implicit-def dead $eflags253 254 bb.13:255 %9:gr32 = PHI %8, %bb.12, %7, %bb.11, %6, %bb.10, %5, %bb.9256 %24:gr32 = OR32rr %9, %4, implicit-def dead $eflags257 $eax = COPY %24258 RET 0, $eax259 260...261# Based on foo, but with a phi node in a successor of %bb.7 instead of %bb.7.262---263name: foo_phi_in_tailbb_successor264tracksRegLiveness: true265jumpTable:266 kind: block-address267 entries:268 - id: 0269 blocks: [ '%bb.2', '%bb.3', '%bb.4', '%bb.5', '%bb.9' ]270 - id: 1271 blocks: [ '%bb.9', '%bb.10', '%bb.11', '%bb.12' ]272body: |273 ; LIMIT-LABEL: name: foo_phi_in_tailbb_successor274 ; LIMIT: bb.0:275 ; LIMIT-NEXT: successors: %bb.2(0x1999999a), %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.9(0x1999999a)276 ; LIMIT-NEXT: liveins: $rdi, $esi277 ; LIMIT-NEXT: {{ $}}278 ; LIMIT-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $esi279 ; LIMIT-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi280 ; LIMIT-NEXT: [[SHR32ri:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 1, implicit-def dead $eflags281 ; LIMIT-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[SHR32ri]], 7, implicit-def dead $eflags282 ; LIMIT-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri]], %subreg.sub_32bit283 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG]], %jump-table.0, $noreg284 ; LIMIT-NEXT: {{ $}}285 ; LIMIT-NEXT: bb.2:286 ; LIMIT-NEXT: successors: %bb.7(0x80000000)287 ; LIMIT-NEXT: {{ $}}288 ; LIMIT-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg289 ; LIMIT-NEXT: JMP_1 %bb.7290 ; LIMIT-NEXT: {{ $}}291 ; LIMIT-NEXT: bb.3:292 ; LIMIT-NEXT: successors: %bb.7(0x80000000)293 ; LIMIT-NEXT: {{ $}}294 ; LIMIT-NEXT: [[MOV32rm1:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg295 ; LIMIT-NEXT: [[SHR32ri1:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm1]], 1, implicit-def dead $eflags296 ; LIMIT-NEXT: JMP_1 %bb.7297 ; LIMIT-NEXT: {{ $}}298 ; LIMIT-NEXT: bb.4:299 ; LIMIT-NEXT: successors: %bb.7(0x80000000)300 ; LIMIT-NEXT: {{ $}}301 ; LIMIT-NEXT: [[MOV32rm2:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg302 ; LIMIT-NEXT: [[SHR32ri2:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm2]], 2, implicit-def dead $eflags303 ; LIMIT-NEXT: JMP_1 %bb.7304 ; LIMIT-NEXT: {{ $}}305 ; LIMIT-NEXT: bb.5:306 ; LIMIT-NEXT: successors: %bb.7(0x80000000)307 ; LIMIT-NEXT: {{ $}}308 ; LIMIT-NEXT: [[MOV32rm3:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg309 ; LIMIT-NEXT: [[SHR32ri3:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm3]], 3, implicit-def dead $eflags310 ; LIMIT-NEXT: JMP_1 %bb.7311 ; LIMIT-NEXT: {{ $}}312 ; LIMIT-NEXT: bb.6:313 ; LIMIT-NEXT: successors:314 ; LIMIT-NEXT: {{ $}}315 ; LIMIT-NEXT: bb.7:316 ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)317 ; LIMIT-NEXT: {{ $}}318 ; LIMIT-NEXT: [[SHR32ri4:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags319 ; LIMIT-NEXT: [[AND32ri1:%[0-9]+]]:gr32 = AND32ri [[SHR32ri4]], 7, implicit-def dead $eflags320 ; LIMIT-NEXT: [[SUBREG_TO_REG1:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri1]], %subreg.sub_32bit321 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG1]], %jump-table.1, $noreg322 ; LIMIT-NEXT: {{ $}}323 ; LIMIT-NEXT: bb.9:324 ; LIMIT-NEXT: successors: %bb.13(0x80000000)325 ; LIMIT-NEXT: {{ $}}326 ; LIMIT-NEXT: [[PHI:%[0-9]+]]:gr32 = PHI [[AND32ri]], %bb.0, [[AND32ri1]], %bb.7327 ; LIMIT-NEXT: [[MOV32rm4:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg328 ; LIMIT-NEXT: JMP_1 %bb.13329 ; LIMIT-NEXT: {{ $}}330 ; LIMIT-NEXT: bb.10:331 ; LIMIT-NEXT: successors: %bb.13(0x80000000)332 ; LIMIT-NEXT: {{ $}}333 ; LIMIT-NEXT: [[MOV32rm5:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg334 ; LIMIT-NEXT: [[SHR32ri5:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm5]], 1, implicit-def dead $eflags335 ; LIMIT-NEXT: JMP_1 %bb.13336 ; LIMIT-NEXT: {{ $}}337 ; LIMIT-NEXT: bb.11:338 ; LIMIT-NEXT: successors: %bb.13(0x80000000)339 ; LIMIT-NEXT: {{ $}}340 ; LIMIT-NEXT: [[MOV32rm6:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg341 ; LIMIT-NEXT: [[SHR32ri6:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm6]], 2, implicit-def dead $eflags342 ; LIMIT-NEXT: JMP_1 %bb.13343 ; LIMIT-NEXT: {{ $}}344 ; LIMIT-NEXT: bb.12:345 ; LIMIT-NEXT: successors: %bb.13(0x80000000)346 ; LIMIT-NEXT: {{ $}}347 ; LIMIT-NEXT: [[MOV32rm7:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg348 ; LIMIT-NEXT: [[SHR32ri7:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm7]], 6, implicit-def dead $eflags349 ; LIMIT-NEXT: {{ $}}350 ; LIMIT-NEXT: bb.13:351 ; LIMIT-NEXT: [[PHI:%[0-9]+]]:gr32 = PHI [[SHR32ri7]], %bb.12, [[SHR32ri6]], %bb.11, [[SHR32ri5]], %bb.10, [[MOV32rm4]], %bb.9352 ; LIMIT-NEXT: [[OR32ri:%[0-9]+]]:gr32 = OR32ri [[PHI]], 1, implicit-def dead $eflags353 ; LIMIT-NEXT: $eax = COPY [[OR32ri]]354 ; LIMIT-NEXT: RET 0, $eax355 ;356 ; NOLIMIT-LABEL: name: foo_phi_in_tailbb_successor357 ; NOLIMIT: bb.0:358 ; NOLIMIT-NEXT: successors: %bb.2(0x1999999a), %bb.3(0x1999999a), %bb.4(0x1999999a), %bb.5(0x1999999a), %bb.9(0x1999999a)359 ; NOLIMIT-NEXT: liveins: $rdi, $esi360 ; NOLIMIT-NEXT: {{ $}}361 ; NOLIMIT-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $esi362 ; NOLIMIT-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi363 ; NOLIMIT-NEXT: [[SHR32ri:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 1, implicit-def dead $eflags364 ; NOLIMIT-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[SHR32ri]], 7, implicit-def dead $eflags365 ; NOLIMIT-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri]], %subreg.sub_32bit366 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG]], %jump-table.0, $noreg367 ; NOLIMIT-NEXT: {{ $}}368 ; NOLIMIT-NEXT: bb.2:369 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)370 ; NOLIMIT-NEXT: {{ $}}371 ; NOLIMIT-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg372 ; NOLIMIT-NEXT: [[SHR32ri1:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags373 ; NOLIMIT-NEXT: [[AND32ri1:%[0-9]+]]:gr32 = AND32ri [[SHR32ri1]], 7, implicit-def dead $eflags374 ; NOLIMIT-NEXT: [[SUBREG_TO_REG1:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri1]], %subreg.sub_32bit375 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG1]], %jump-table.1, $noreg376 ; NOLIMIT-NEXT: {{ $}}377 ; NOLIMIT-NEXT: bb.3:378 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)379 ; NOLIMIT-NEXT: {{ $}}380 ; NOLIMIT-NEXT: [[MOV32rm1:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg381 ; NOLIMIT-NEXT: [[SHR32ri2:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm1]], 1, implicit-def dead $eflags382 ; NOLIMIT-NEXT: [[SHR32ri3:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags383 ; NOLIMIT-NEXT: [[AND32ri2:%[0-9]+]]:gr32 = AND32ri [[SHR32ri3]], 7, implicit-def dead $eflags384 ; NOLIMIT-NEXT: [[SUBREG_TO_REG2:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri2]], %subreg.sub_32bit385 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG2]], %jump-table.1, $noreg386 ; NOLIMIT-NEXT: {{ $}}387 ; NOLIMIT-NEXT: bb.4:388 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)389 ; NOLIMIT-NEXT: {{ $}}390 ; NOLIMIT-NEXT: [[MOV32rm2:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg391 ; NOLIMIT-NEXT: [[SHR32ri4:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm2]], 2, implicit-def dead $eflags392 ; NOLIMIT-NEXT: [[SHR32ri5:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags393 ; NOLIMIT-NEXT: [[AND32ri3:%[0-9]+]]:gr32 = AND32ri [[SHR32ri5]], 7, implicit-def dead $eflags394 ; NOLIMIT-NEXT: [[SUBREG_TO_REG3:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri3]], %subreg.sub_32bit395 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG3]], %jump-table.1, $noreg396 ; NOLIMIT-NEXT: {{ $}}397 ; NOLIMIT-NEXT: bb.5:398 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)399 ; NOLIMIT-NEXT: {{ $}}400 ; NOLIMIT-NEXT: [[MOV32rm3:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg401 ; NOLIMIT-NEXT: [[SHR32ri6:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm3]], 3, implicit-def dead $eflags402 ; NOLIMIT-NEXT: [[SHR32ri7:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags403 ; NOLIMIT-NEXT: [[AND32ri4:%[0-9]+]]:gr32 = AND32ri [[SHR32ri7]], 7, implicit-def dead $eflags404 ; NOLIMIT-NEXT: [[SUBREG_TO_REG4:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri4]], %subreg.sub_32bit405 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG4]], %jump-table.1, $noreg406 ; NOLIMIT-NEXT: {{ $}}407 ; NOLIMIT-NEXT: bb.6:408 ; NOLIMIT-NEXT: successors:409 ; NOLIMIT-NEXT: {{ $}}410 ; NOLIMIT-NEXT: bb.9:411 ; NOLIMIT-NEXT: successors: %bb.13(0x80000000)412 ; NOLIMIT-NEXT: {{ $}}413 ; NOLIMIT-NEXT: [[PHI:%[0-9]+]]:gr32 = PHI [[AND32ri]], %bb.0, [[AND32ri1]], %bb.2, [[AND32ri2]], %bb.3, [[AND32ri3]], %bb.4, [[AND32ri4]], %bb.5414 ; NOLIMIT-NEXT: [[MOV32rm4:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg415 ; NOLIMIT-NEXT: JMP_1 %bb.13416 ; NOLIMIT-NEXT: {{ $}}417 ; NOLIMIT-NEXT: bb.10:418 ; NOLIMIT-NEXT: successors: %bb.13(0x80000000)419 ; NOLIMIT-NEXT: {{ $}}420 ; NOLIMIT-NEXT: [[MOV32rm5:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg421 ; NOLIMIT-NEXT: [[SHR32ri8:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm5]], 1, implicit-def dead $eflags422 ; NOLIMIT-NEXT: JMP_1 %bb.13423 ; NOLIMIT-NEXT: {{ $}}424 ; NOLIMIT-NEXT: bb.11:425 ; NOLIMIT-NEXT: successors: %bb.13(0x80000000)426 ; NOLIMIT-NEXT: {{ $}}427 ; NOLIMIT-NEXT: [[MOV32rm6:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg428 ; NOLIMIT-NEXT: [[SHR32ri9:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm6]], 2, implicit-def dead $eflags429 ; NOLIMIT-NEXT: JMP_1 %bb.13430 ; NOLIMIT-NEXT: {{ $}}431 ; NOLIMIT-NEXT: bb.12:432 ; NOLIMIT-NEXT: successors: %bb.13(0x80000000)433 ; NOLIMIT-NEXT: {{ $}}434 ; NOLIMIT-NEXT: [[MOV32rm7:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg435 ; NOLIMIT-NEXT: [[SHR32ri10:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm7]], 6, implicit-def dead $eflags436 ; NOLIMIT-NEXT: {{ $}}437 ; NOLIMIT-NEXT: bb.13:438 ; NOLIMIT-NEXT: [[PHI:%[0-9]+]]:gr32 = PHI [[SHR32ri10]], %bb.12, [[SHR32ri9]], %bb.11, [[SHR32ri8]], %bb.10, [[MOV32rm4]], %bb.9439 ; NOLIMIT-NEXT: [[OR32ri:%[0-9]+]]:gr32 = OR32ri [[PHI]], 1, implicit-def dead $eflags440 ; NOLIMIT-NEXT: $eax = COPY [[OR32ri]]441 ; NOLIMIT-NEXT: RET 0, $eax442 bb.0:443 liveins: $rdi, $esi444 445 %11:gr32 = COPY $esi446 %10:gr64 = COPY $rdi447 %13:gr32 = SHR32ri %11, 1, implicit-def dead $eflags448 %14:gr32 = AND32ri %13, 7, implicit-def dead $eflags449 %12:gr64_nosp = SUBREG_TO_REG 0, %14, %subreg.sub_32bit450 451 bb.1:452 successors: %bb.2, %bb.3, %bb.4, %bb.5, %bb.9453 454 JMP64m $noreg, 8, %12, %jump-table.0, $noreg455 456 bb.2:457 %0:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg458 JMP_1 %bb.7459 460 bb.3:461 %17:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg462 %1:gr32 = SHR32ri %17, 1, implicit-def dead $eflags463 JMP_1 %bb.7464 465 bb.4:466 %16:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg467 %2:gr32 = SHR32ri %16, 2, implicit-def dead $eflags468 JMP_1 %bb.7469 470 bb.5:471 %15:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg472 %3:gr32 = SHR32ri %15, 3, implicit-def dead $eflags473 JMP_1 %bb.7474 475 bb.6:476 successors:477 478 bb.7:479 %19:gr32 = SHR32ri %11, 2, implicit-def dead $eflags480 %20:gr32 = AND32ri %19, 7, implicit-def dead $eflags481 %18:gr64_nosp = SUBREG_TO_REG 0, %20, %subreg.sub_32bit482 483 bb.8:484 successors: %bb.9, %bb.10, %bb.11, %bb.12485 486 JMP64m $noreg, 8, %18, %jump-table.1, $noreg487 488 bb.9:489 %9:gr32 = PHI %14, %bb.1, %20, %bb.8490 %5:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg491 JMP_1 %bb.13492 493 bb.10:494 %23:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg495 %6:gr32 = SHR32ri %23, 1, implicit-def dead $eflags496 JMP_1 %bb.13497 498 bb.11:499 %22:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg500 %7:gr32 = SHR32ri %22, 2, implicit-def dead $eflags501 JMP_1 %bb.13502 503 bb.12:504 %21:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg505 %8:gr32 = SHR32ri %21, 6, implicit-def dead $eflags506 507 bb.13:508 %9:gr32 = PHI %8, %bb.12, %7, %bb.11, %6, %bb.10, %5, %bb.9509 %24:gr32 = OR32ri %9, 1, implicit-def dead $eflags510 $eax = COPY %24511 RET 0, $eax512 513...514 515 516# Based on foo, but without any phi nodes.517---518name: foo_no_phis519tracksRegLiveness: true520jumpTable:521 kind: block-address522 entries:523 - id: 0524 blocks: [ '%bb.2', '%bb.3', '%bb.4', '%bb.5' ]525 - id: 1526 blocks: [ '%bb.9', '%bb.10', '%bb.11', '%bb.12' ]527body: |528 ; LIMIT-LABEL: name: foo_no_phis529 ; LIMIT: bb.0:530 ; LIMIT-NEXT: successors: %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)531 ; LIMIT-NEXT: liveins: $rdi, $esi532 ; LIMIT-NEXT: {{ $}}533 ; LIMIT-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $esi534 ; LIMIT-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi535 ; LIMIT-NEXT: [[SHR32ri:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 1, implicit-def dead $eflags536 ; LIMIT-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[SHR32ri]], 7, implicit-def dead $eflags537 ; LIMIT-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, killed [[AND32ri]], %subreg.sub_32bit538 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG]], %jump-table.0, $noreg539 ; LIMIT-NEXT: {{ $}}540 ; LIMIT-NEXT: bb.2:541 ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)542 ; LIMIT-NEXT: {{ $}}543 ; LIMIT-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg544 ; LIMIT-NEXT: [[SHR32ri1:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags545 ; LIMIT-NEXT: [[AND32ri1:%[0-9]+]]:gr32 = AND32ri [[SHR32ri1]], 7, implicit-def dead $eflags546 ; LIMIT-NEXT: [[SUBREG_TO_REG1:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri1]], %subreg.sub_32bit547 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG1]], %jump-table.1, $noreg548 ; LIMIT-NEXT: {{ $}}549 ; LIMIT-NEXT: bb.3:550 ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)551 ; LIMIT-NEXT: {{ $}}552 ; LIMIT-NEXT: [[MOV32rm1:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg553 ; LIMIT-NEXT: [[SHR32ri2:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm1]], 1, implicit-def dead $eflags554 ; LIMIT-NEXT: [[SHR32ri3:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags555 ; LIMIT-NEXT: [[AND32ri2:%[0-9]+]]:gr32 = AND32ri [[SHR32ri3]], 7, implicit-def dead $eflags556 ; LIMIT-NEXT: [[SUBREG_TO_REG2:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri2]], %subreg.sub_32bit557 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG2]], %jump-table.1, $noreg558 ; LIMIT-NEXT: {{ $}}559 ; LIMIT-NEXT: bb.4:560 ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)561 ; LIMIT-NEXT: {{ $}}562 ; LIMIT-NEXT: [[MOV32rm2:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg563 ; LIMIT-NEXT: [[SHR32ri4:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm2]], 2, implicit-def dead $eflags564 ; LIMIT-NEXT: [[SHR32ri5:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags565 ; LIMIT-NEXT: [[AND32ri3:%[0-9]+]]:gr32 = AND32ri [[SHR32ri5]], 7, implicit-def dead $eflags566 ; LIMIT-NEXT: [[SUBREG_TO_REG3:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri3]], %subreg.sub_32bit567 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG3]], %jump-table.1, $noreg568 ; LIMIT-NEXT: {{ $}}569 ; LIMIT-NEXT: bb.5:570 ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)571 ; LIMIT-NEXT: {{ $}}572 ; LIMIT-NEXT: [[MOV32rm3:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg573 ; LIMIT-NEXT: [[SHR32ri6:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm3]], 3, implicit-def dead $eflags574 ; LIMIT-NEXT: [[SHR32ri7:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags575 ; LIMIT-NEXT: [[AND32ri4:%[0-9]+]]:gr32 = AND32ri [[SHR32ri7]], 7, implicit-def dead $eflags576 ; LIMIT-NEXT: [[SUBREG_TO_REG4:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri4]], %subreg.sub_32bit577 ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG4]], %jump-table.1, $noreg578 ; LIMIT-NEXT: {{ $}}579 ; LIMIT-NEXT: bb.6:580 ; LIMIT-NEXT: successors:581 ; LIMIT-NEXT: {{ $}}582 ; LIMIT-NEXT: bb.9:583 ; LIMIT-NEXT: [[MOV32rm4:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg584 ; LIMIT-NEXT: MOV32mr [[COPY1]], 1, $noreg, 0, $noreg, [[MOV32rm4]] :: (store (s32))585 ; LIMIT-NEXT: $eax = COPY [[MOV32rm4]]586 ; LIMIT-NEXT: RET 0, $eax587 ; LIMIT-NEXT: {{ $}}588 ; LIMIT-NEXT: bb.10:589 ; LIMIT-NEXT: [[MOV32rm5:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg590 ; LIMIT-NEXT: [[SHR32ri8:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm5]], 1, implicit-def dead $eflags591 ; LIMIT-NEXT: MOV32mr [[COPY1]], 1, $noreg, 0, $noreg, [[SHR32ri8]] :: (store (s32))592 ; LIMIT-NEXT: $eax = COPY [[SHR32ri8]]593 ; LIMIT-NEXT: RET 0, $eax594 ; LIMIT-NEXT: {{ $}}595 ; LIMIT-NEXT: bb.11:596 ; LIMIT-NEXT: [[MOV32rm6:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg597 ; LIMIT-NEXT: [[SHR32ri9:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm6]], 2, implicit-def dead $eflags598 ; LIMIT-NEXT: MOV32mr [[COPY1]], 1, $noreg, 0, $noreg, [[SHR32ri9]] :: (store (s32))599 ; LIMIT-NEXT: $eax = COPY [[SHR32ri9]]600 ; LIMIT-NEXT: RET 0, $eax601 ; LIMIT-NEXT: {{ $}}602 ; LIMIT-NEXT: bb.12:603 ; LIMIT-NEXT: [[MOV32rm7:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg604 ; LIMIT-NEXT: [[SHR32ri10:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm7]], 6, implicit-def dead $eflags605 ; LIMIT-NEXT: MOV32mr [[COPY1]], 1, $noreg, 0, $noreg, [[SHR32ri10]] :: (store (s32))606 ; LIMIT-NEXT: $eax = COPY [[SHR32ri10]]607 ; LIMIT-NEXT: RET 0, $eax608 ;609 ; NOLIMIT-LABEL: name: foo_no_phis610 ; NOLIMIT: bb.0:611 ; NOLIMIT-NEXT: successors: %bb.2(0x20000000), %bb.3(0x20000000), %bb.4(0x20000000), %bb.5(0x20000000)612 ; NOLIMIT-NEXT: liveins: $rdi, $esi613 ; NOLIMIT-NEXT: {{ $}}614 ; NOLIMIT-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY $esi615 ; NOLIMIT-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi616 ; NOLIMIT-NEXT: [[SHR32ri:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 1, implicit-def dead $eflags617 ; NOLIMIT-NEXT: [[AND32ri:%[0-9]+]]:gr32 = AND32ri [[SHR32ri]], 7, implicit-def dead $eflags618 ; NOLIMIT-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, killed [[AND32ri]], %subreg.sub_32bit619 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG]], %jump-table.0, $noreg620 ; NOLIMIT-NEXT: {{ $}}621 ; NOLIMIT-NEXT: bb.2:622 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)623 ; NOLIMIT-NEXT: {{ $}}624 ; NOLIMIT-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg625 ; NOLIMIT-NEXT: [[SHR32ri1:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags626 ; NOLIMIT-NEXT: [[AND32ri1:%[0-9]+]]:gr32 = AND32ri [[SHR32ri1]], 7, implicit-def dead $eflags627 ; NOLIMIT-NEXT: [[SUBREG_TO_REG1:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri1]], %subreg.sub_32bit628 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG1]], %jump-table.1, $noreg629 ; NOLIMIT-NEXT: {{ $}}630 ; NOLIMIT-NEXT: bb.3:631 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)632 ; NOLIMIT-NEXT: {{ $}}633 ; NOLIMIT-NEXT: [[MOV32rm1:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg634 ; NOLIMIT-NEXT: [[SHR32ri2:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm1]], 1, implicit-def dead $eflags635 ; NOLIMIT-NEXT: [[SHR32ri3:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags636 ; NOLIMIT-NEXT: [[AND32ri2:%[0-9]+]]:gr32 = AND32ri [[SHR32ri3]], 7, implicit-def dead $eflags637 ; NOLIMIT-NEXT: [[SUBREG_TO_REG2:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri2]], %subreg.sub_32bit638 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG2]], %jump-table.1, $noreg639 ; NOLIMIT-NEXT: {{ $}}640 ; NOLIMIT-NEXT: bb.4:641 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)642 ; NOLIMIT-NEXT: {{ $}}643 ; NOLIMIT-NEXT: [[MOV32rm2:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg644 ; NOLIMIT-NEXT: [[SHR32ri4:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm2]], 2, implicit-def dead $eflags645 ; NOLIMIT-NEXT: [[SHR32ri5:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags646 ; NOLIMIT-NEXT: [[AND32ri3:%[0-9]+]]:gr32 = AND32ri [[SHR32ri5]], 7, implicit-def dead $eflags647 ; NOLIMIT-NEXT: [[SUBREG_TO_REG3:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri3]], %subreg.sub_32bit648 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG3]], %jump-table.1, $noreg649 ; NOLIMIT-NEXT: {{ $}}650 ; NOLIMIT-NEXT: bb.5:651 ; NOLIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000)652 ; NOLIMIT-NEXT: {{ $}}653 ; NOLIMIT-NEXT: [[MOV32rm3:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg654 ; NOLIMIT-NEXT: [[SHR32ri6:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm3]], 3, implicit-def dead $eflags655 ; NOLIMIT-NEXT: [[SHR32ri7:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags656 ; NOLIMIT-NEXT: [[AND32ri4:%[0-9]+]]:gr32 = AND32ri [[SHR32ri7]], 7, implicit-def dead $eflags657 ; NOLIMIT-NEXT: [[SUBREG_TO_REG4:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri4]], %subreg.sub_32bit658 ; NOLIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG4]], %jump-table.1, $noreg659 ; NOLIMIT-NEXT: {{ $}}660 ; NOLIMIT-NEXT: bb.6:661 ; NOLIMIT-NEXT: successors:662 ; NOLIMIT-NEXT: {{ $}}663 ; NOLIMIT-NEXT: bb.9:664 ; NOLIMIT-NEXT: [[MOV32rm4:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg665 ; NOLIMIT-NEXT: MOV32mr [[COPY1]], 1, $noreg, 0, $noreg, [[MOV32rm4]] :: (store (s32))666 ; NOLIMIT-NEXT: $eax = COPY [[MOV32rm4]]667 ; NOLIMIT-NEXT: RET 0, $eax668 ; NOLIMIT-NEXT: {{ $}}669 ; NOLIMIT-NEXT: bb.10:670 ; NOLIMIT-NEXT: [[MOV32rm5:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg671 ; NOLIMIT-NEXT: [[SHR32ri8:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm5]], 1, implicit-def dead $eflags672 ; NOLIMIT-NEXT: MOV32mr [[COPY1]], 1, $noreg, 0, $noreg, [[SHR32ri8]] :: (store (s32))673 ; NOLIMIT-NEXT: $eax = COPY [[SHR32ri8]]674 ; NOLIMIT-NEXT: RET 0, $eax675 ; NOLIMIT-NEXT: {{ $}}676 ; NOLIMIT-NEXT: bb.11:677 ; NOLIMIT-NEXT: [[MOV32rm6:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg678 ; NOLIMIT-NEXT: [[SHR32ri9:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm6]], 2, implicit-def dead $eflags679 ; NOLIMIT-NEXT: MOV32mr [[COPY1]], 1, $noreg, 0, $noreg, [[SHR32ri9]] :: (store (s32))680 ; NOLIMIT-NEXT: $eax = COPY [[SHR32ri9]]681 ; NOLIMIT-NEXT: RET 0, $eax682 ; NOLIMIT-NEXT: {{ $}}683 ; NOLIMIT-NEXT: bb.12:684 ; NOLIMIT-NEXT: [[MOV32rm7:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg685 ; NOLIMIT-NEXT: [[SHR32ri10:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm7]], 6, implicit-def dead $eflags686 ; NOLIMIT-NEXT: MOV32mr [[COPY1]], 1, $noreg, 0, $noreg, [[SHR32ri10]] :: (store (s32))687 ; NOLIMIT-NEXT: $eax = COPY [[SHR32ri10]]688 ; NOLIMIT-NEXT: RET 0, $eax689 bb.0:690 liveins: $rdi, $esi691 692 %11:gr32 = COPY $esi693 %10:gr64 = COPY $rdi694 %13:gr32 = SHR32ri %11, 1, implicit-def dead $eflags695 %14:gr32 = AND32ri %13, 7, implicit-def dead $eflags696 %12:gr64_nosp = SUBREG_TO_REG 0, killed %14, %subreg.sub_32bit697 698 bb.1:699 successors: %bb.2, %bb.3, %bb.4, %bb.5700 701 JMP64m $noreg, 8, %12, %jump-table.0, $noreg702 703 bb.2:704 %0:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg705 JMP_1 %bb.7706 707 bb.3:708 %17:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg709 %1:gr32 = SHR32ri %17, 1, implicit-def dead $eflags710 JMP_1 %bb.7711 712 bb.4:713 %16:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg714 %2:gr32 = SHR32ri %16, 2, implicit-def dead $eflags715 JMP_1 %bb.7716 717 bb.5:718 %15:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg719 %3:gr32 = SHR32ri %15, 3, implicit-def dead $eflags720 JMP_1 %bb.7721 722 bb.6:723 successors:724 725 bb.7:726 %19:gr32 = SHR32ri %11, 2, implicit-def dead $eflags727 %20:gr32 = AND32ri %19, 7, implicit-def dead $eflags728 %18:gr64_nosp = SUBREG_TO_REG 0, killed %20, %subreg.sub_32bit729 730 bb.8:731 successors: %bb.9, %bb.10, %bb.11, %bb.12732 733 JMP64m $noreg, 8, %18, %jump-table.1, $noreg734 735 bb.9:736 %5:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg737 MOV32mr %10, 1, $noreg, 0, $noreg, %5 :: (store (s32))738 $eax = COPY %5739 RET 0, $eax740 741 bb.10:742 %23:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg743 %6:gr32 = SHR32ri %23, 1, implicit-def dead $eflags744 MOV32mr %10, 1, $noreg, 0, $noreg, %6 :: (store (s32))745 $eax = COPY %6746 RET 0, $eax747 748 bb.11:749 %22:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg750 %7:gr32 = SHR32ri %22, 2, implicit-def dead $eflags751 MOV32mr %10, 1, $noreg, 0, $noreg, %7 :: (store (s32))752 $eax = COPY %7753 RET 0, $eax754 755 bb.12:756 %21:gr32 = MOV32rm %10, 1, $noreg, 0, $noreg757 %8:gr32 = SHR32ri %21, 6, implicit-def dead $eflags758 MOV32mr %10, 1, $noreg, 0, $noreg, %8 :: (store (s32))759 $eax = COPY %8760 RET 0, $eax761...762