Commit b939bc3
committed
[AIE] ReservedRegsLICM: fix livein detection for multi-block loops
The flat sequential backward walk in collectLoopReservedLiveins was
incorrect for loops with conditional paths. When L.getBlocks() returns
blocks in RPO order (header first, latch last), a def in one branch
could remove a register from the live set after a sibling branch's use
had already added it back. This caused the register to be incorrectly
classified as not a loop livein, allowing processForExitSink to sink
its definition to the exit block even though the register carried a
pre-loop value on some paths.
For example, in a loop where bb.2 uses $srssign0 and bb.3 defines it
(both successors of the header), the old code would process bb.2's use
first (adding $srssign0 to the live set) and then bb.3's def (removing
it), concluding $srssign0 is not a livein. But $srssign0 IS a livein
because bb.2 can execute on the first iteration without going through
bb.3.
Fix this by replacing the flat walk with a backward dataflow worklist
algorithm that correctly propagates liveness through the CFG until a
fixed point is reached. The algorithm initialises live-in sets to empty
and grows them monotonically, re-queuing predecessors whenever a
block's live-in set changes.
Add a test case (livein_bug_no_sink) to the aie2ps reserved-reg-licm
test that reproduces the bug and verifies the MOVX is not sunk.1 parent a6e4dbd commit b939bc3
2 files changed
Lines changed: 141 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
234 | 235 | | |
235 | 236 | | |
236 | 237 | | |
237 | | - | |
238 | | - | |
239 | | - | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
240 | 250 | | |
241 | 251 | | |
242 | | - | |
| 252 | + | |
243 | 253 | | |
244 | 254 | | |
245 | 255 | | |
246 | | - | |
247 | | - | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
248 | 259 | | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
249 | 285 | | |
250 | 286 | | |
251 | 287 | | |
252 | | - | |
253 | | - | |
254 | | - | |
255 | | - | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
256 | 303 | | |
257 | 304 | | |
258 | | - | |
| 305 | + | |
| 306 | + | |
259 | 307 | | |
260 | 308 | | |
261 | 309 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
436 | 436 | | |
437 | 437 | | |
438 | 438 | | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
439 | 521 | | |
440 | 522 | | |
441 | 523 | | |
| |||
0 commit comments