|
1 | 1 | # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
|
2 |
| -# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=early-tailduplication %s -o - | FileCheck %s -check-prefix=LIMIT |
3 |
| -# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=early-tailduplication %s -o - | FileCheck %s -check-prefix=NOLIMIT |
| 2 | +# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=early-tailduplication -tail-dup-indirect-succ-size=3 %s -o - | FileCheck %s -check-prefix=LIMIT |
| 3 | +# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=early-tailduplication -tail-dup-indirect-succ-size=4 %s -o - | FileCheck %s -check-prefix=NOLIMIT |
4 | 4 |
|
5 | 5 | --- |
|
6 | 6 | source_filename = "tail-dup-pred-size-limit.ll"
|
@@ -172,81 +172,73 @@ body: |
|
172 | 172 | ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG]], %jump-table.0, $noreg :: (load (s64) from jump-table)
|
173 | 173 | ; LIMIT-NEXT: {{ $}}
|
174 | 174 | ; LIMIT-NEXT: bb.2 (%ir-block.5):
|
175 |
| - ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000) |
| 175 | + ; LIMIT-NEXT: successors: %bb.7(0x80000000) |
176 | 176 | ; LIMIT-NEXT: {{ $}}
|
177 | 177 | ; LIMIT-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.0)
|
178 |
| - ; LIMIT-NEXT: [[SHR32ri1:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags |
179 |
| - ; LIMIT-NEXT: [[AND32ri1:%[0-9]+]]:gr32 = AND32ri [[SHR32ri1]], 7, implicit-def dead $eflags |
180 |
| - ; LIMIT-NEXT: [[SUBREG_TO_REG1:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri1]], %subreg.sub_32bit |
181 |
| - ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG1]], %jump-table.1, $noreg :: (load (s64) from jump-table) |
| 178 | + ; LIMIT-NEXT: JMP_1 %bb.7 |
182 | 179 | ; LIMIT-NEXT: {{ $}}
|
183 | 180 | ; LIMIT-NEXT: bb.3 (%ir-block.7):
|
184 |
| - ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000) |
| 181 | + ; LIMIT-NEXT: successors: %bb.7(0x80000000) |
185 | 182 | ; LIMIT-NEXT: {{ $}}
|
186 | 183 | ; LIMIT-NEXT: [[MOV32rm1:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.0)
|
187 |
| - ; LIMIT-NEXT: [[SHR32ri2:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm1]], 1, implicit-def dead $eflags |
188 |
| - ; LIMIT-NEXT: [[SHR32ri3:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags |
189 |
| - ; LIMIT-NEXT: [[AND32ri2:%[0-9]+]]:gr32 = AND32ri [[SHR32ri3]], 7, implicit-def dead $eflags |
190 |
| - ; LIMIT-NEXT: [[SUBREG_TO_REG2:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri2]], %subreg.sub_32bit |
191 |
| - ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG2]], %jump-table.1, $noreg :: (load (s64) from jump-table) |
| 184 | + ; LIMIT-NEXT: [[SHR32ri1:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm1]], 1, implicit-def dead $eflags |
| 185 | + ; LIMIT-NEXT: JMP_1 %bb.7 |
192 | 186 | ; LIMIT-NEXT: {{ $}}
|
193 | 187 | ; LIMIT-NEXT: bb.4 (%ir-block.10):
|
194 |
| - ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000) |
| 188 | + ; LIMIT-NEXT: successors: %bb.7(0x80000000) |
195 | 189 | ; LIMIT-NEXT: {{ $}}
|
196 | 190 | ; LIMIT-NEXT: [[MOV32rm2:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.0)
|
197 |
| - ; LIMIT-NEXT: [[SHR32ri4:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm2]], 2, implicit-def dead $eflags |
198 |
| - ; LIMIT-NEXT: [[SHR32ri5:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags |
199 |
| - ; LIMIT-NEXT: [[AND32ri3:%[0-9]+]]:gr32 = AND32ri [[SHR32ri5]], 7, implicit-def dead $eflags |
200 |
| - ; LIMIT-NEXT: [[SUBREG_TO_REG3:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri3]], %subreg.sub_32bit |
201 |
| - ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG3]], %jump-table.1, $noreg :: (load (s64) from jump-table) |
| 191 | + ; LIMIT-NEXT: [[SHR32ri2:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm2]], 2, implicit-def dead $eflags |
| 192 | + ; LIMIT-NEXT: JMP_1 %bb.7 |
202 | 193 | ; LIMIT-NEXT: {{ $}}
|
203 | 194 | ; LIMIT-NEXT: bb.5 (%ir-block.13):
|
204 |
| - ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000) |
| 195 | + ; LIMIT-NEXT: successors: %bb.7(0x80000000) |
205 | 196 | ; LIMIT-NEXT: {{ $}}
|
206 | 197 | ; LIMIT-NEXT: [[MOV32rm3:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.0)
|
207 |
| - ; LIMIT-NEXT: [[SHR32ri6:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm3]], 3, implicit-def dead $eflags |
208 |
| - ; LIMIT-NEXT: [[SHR32ri7:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags |
209 |
| - ; LIMIT-NEXT: [[AND32ri4:%[0-9]+]]:gr32 = AND32ri [[SHR32ri7]], 7, implicit-def dead $eflags |
210 |
| - ; LIMIT-NEXT: [[SUBREG_TO_REG4:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, [[AND32ri4]], %subreg.sub_32bit |
211 |
| - ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG4]], %jump-table.1, $noreg :: (load (s64) from jump-table) |
| 198 | + ; LIMIT-NEXT: [[SHR32ri3:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm3]], 3, implicit-def dead $eflags |
| 199 | + ; LIMIT-NEXT: JMP_1 %bb.7 |
212 | 200 | ; LIMIT-NEXT: {{ $}}
|
213 | 201 | ; LIMIT-NEXT: bb.6.default.unreachable2:
|
214 | 202 | ; LIMIT-NEXT: successors:
|
215 | 203 | ; LIMIT-NEXT: {{ $}}
|
| 204 | + ; LIMIT-NEXT: bb.7 (%ir-block.16): |
| 205 | + ; LIMIT-NEXT: successors: %bb.9(0x20000000), %bb.10(0x20000000), %bb.11(0x20000000), %bb.12(0x20000000) |
| 206 | + ; LIMIT-NEXT: {{ $}} |
| 207 | + ; LIMIT-NEXT: [[PHI:%[0-9]+]]:gr32 = PHI [[SHR32ri3]], %bb.5, [[SHR32ri2]], %bb.4, [[SHR32ri1]], %bb.3, [[MOV32rm]], %bb.2 |
| 208 | + ; LIMIT-NEXT: [[SHR32ri4:%[0-9]+]]:gr32 = SHR32ri [[COPY]], 2, implicit-def dead $eflags |
| 209 | + ; LIMIT-NEXT: [[AND32ri1:%[0-9]+]]:gr32 = AND32ri [[SHR32ri4]], 7, implicit-def dead $eflags |
| 210 | + ; LIMIT-NEXT: [[SUBREG_TO_REG1:%[0-9]+]]:gr64_nosp = SUBREG_TO_REG 0, killed [[AND32ri1]], %subreg.sub_32bit |
| 211 | + ; LIMIT-NEXT: JMP64m $noreg, 8, [[SUBREG_TO_REG1]], %jump-table.1, $noreg :: (load (s64) from jump-table) |
| 212 | + ; LIMIT-NEXT: {{ $}} |
216 | 213 | ; LIMIT-NEXT: bb.9 (%ir-block.20):
|
217 | 214 | ; LIMIT-NEXT: successors: %bb.13(0x80000000)
|
218 | 215 | ; LIMIT-NEXT: {{ $}}
|
219 |
| - ; LIMIT-NEXT: [[PHI:%[0-9]+]]:gr32 = PHI [[MOV32rm]], %bb.2, [[SHR32ri2]], %bb.3, [[SHR32ri4]], %bb.4, [[SHR32ri6]], %bb.5 |
220 | 216 | ; LIMIT-NEXT: [[MOV32rm4:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.0)
|
221 | 217 | ; LIMIT-NEXT: JMP_1 %bb.13
|
222 | 218 | ; LIMIT-NEXT: {{ $}}
|
223 | 219 | ; LIMIT-NEXT: bb.10 (%ir-block.22):
|
224 | 220 | ; LIMIT-NEXT: successors: %bb.13(0x80000000)
|
225 | 221 | ; LIMIT-NEXT: {{ $}}
|
226 |
| - ; LIMIT-NEXT: [[PHI1:%[0-9]+]]:gr32 = PHI [[MOV32rm]], %bb.2, [[SHR32ri2]], %bb.3, [[SHR32ri4]], %bb.4, [[SHR32ri6]], %bb.5 |
227 | 222 | ; LIMIT-NEXT: [[MOV32rm5:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.0)
|
228 |
| - ; LIMIT-NEXT: [[SHR32ri8:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm5]], 1, implicit-def dead $eflags |
| 223 | + ; LIMIT-NEXT: [[SHR32ri5:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm5]], 1, implicit-def dead $eflags |
229 | 224 | ; LIMIT-NEXT: JMP_1 %bb.13
|
230 | 225 | ; LIMIT-NEXT: {{ $}}
|
231 | 226 | ; LIMIT-NEXT: bb.11 (%ir-block.25):
|
232 | 227 | ; LIMIT-NEXT: successors: %bb.13(0x80000000)
|
233 | 228 | ; LIMIT-NEXT: {{ $}}
|
234 |
| - ; LIMIT-NEXT: [[PHI2:%[0-9]+]]:gr32 = PHI [[MOV32rm]], %bb.2, [[SHR32ri2]], %bb.3, [[SHR32ri4]], %bb.4, [[SHR32ri6]], %bb.5 |
235 | 229 | ; LIMIT-NEXT: [[MOV32rm6:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.0)
|
236 |
| - ; LIMIT-NEXT: [[SHR32ri9:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm6]], 2, implicit-def dead $eflags |
| 230 | + ; LIMIT-NEXT: [[SHR32ri6:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm6]], 2, implicit-def dead $eflags |
237 | 231 | ; LIMIT-NEXT: JMP_1 %bb.13
|
238 | 232 | ; LIMIT-NEXT: {{ $}}
|
239 | 233 | ; LIMIT-NEXT: bb.12 (%ir-block.28):
|
240 | 234 | ; LIMIT-NEXT: successors: %bb.13(0x80000000)
|
241 | 235 | ; LIMIT-NEXT: {{ $}}
|
242 |
| - ; LIMIT-NEXT: [[PHI3:%[0-9]+]]:gr32 = PHI [[MOV32rm]], %bb.2, [[SHR32ri2]], %bb.3, [[SHR32ri4]], %bb.4, [[SHR32ri6]], %bb.5 |
243 | 236 | ; LIMIT-NEXT: [[MOV32rm7:%[0-9]+]]:gr32 = MOV32rm [[COPY1]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.0)
|
244 |
| - ; LIMIT-NEXT: [[SHR32ri10:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm7]], 6, implicit-def dead $eflags |
| 237 | + ; LIMIT-NEXT: [[SHR32ri7:%[0-9]+]]:gr32 = SHR32ri [[MOV32rm7]], 6, implicit-def dead $eflags |
245 | 238 | ; LIMIT-NEXT: {{ $}}
|
246 | 239 | ; LIMIT-NEXT: bb.13 (%ir-block.31):
|
247 |
| - ; LIMIT-NEXT: [[PHI4:%[0-9]+]]:gr32 = PHI [[PHI]], %bb.9, [[PHI1]], %bb.10, [[PHI2]], %bb.11, [[PHI3]], %bb.12 |
248 |
| - ; LIMIT-NEXT: [[PHI5:%[0-9]+]]:gr32 = PHI [[SHR32ri10]], %bb.12, [[SHR32ri9]], %bb.11, [[SHR32ri8]], %bb.10, [[MOV32rm4]], %bb.9 |
249 |
| - ; LIMIT-NEXT: [[OR32rr:%[0-9]+]]:gr32 = OR32rr [[PHI5]], [[PHI4]], implicit-def dead $eflags |
| 240 | + ; LIMIT-NEXT: [[PHI1:%[0-9]+]]:gr32 = PHI [[SHR32ri7]], %bb.12, [[SHR32ri6]], %bb.11, [[SHR32ri5]], %bb.10, [[MOV32rm4]], %bb.9 |
| 241 | + ; LIMIT-NEXT: [[OR32rr:%[0-9]+]]:gr32 = OR32rr [[PHI1]], [[PHI]], implicit-def dead $eflags |
250 | 242 | ; LIMIT-NEXT: $eax = COPY [[OR32rr]]
|
251 | 243 | ; LIMIT-NEXT: RET 0, $eax
|
252 | 244 | ;
|
|
0 commit comments