llvm-project/llvm/test/Transforms/LoopSimplifyCFG
Florian Hahn 4a699ae9c6
[LoopSimplifyCFG] Check predecessors of exits before marking them dead.
LoopSimplifyCFG may process loops that are not in
loop-simplify/canonical form. For loops not in canonical form, exit
blocks may be reachable from non-loop blocks and we cannot consider them
as dead if they only are not reachable from the loop itself.

Unfortunately the smallest test I could come up with requires running
multiple passes:
    -passes='loop-mssa(loop-instsimplify,loop-simplifycfg,simple-loop-unswitch)'

The reason is that loops are canonicalized at the beginning of loop
pipelines, so a later transform has to break canonical form in a way
that breaks LoopSimplifyCFG's dead-exit analysis.

Alternatively we could try to require all loop passes to maintain
canonical form. That in turn would also require additional verification.

Fixes #54023, #49931.

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D121925
2022-03-18 08:54:44 +00:00
..
constant-fold-branch.ll
handle_dead_exits.ll
irreducible_cfg.ll
lcssa.ll
live_block_marking.ll
loop-not-in-simplify-form.ll [LoopSimplifyCFG] Check predecessors of exits before marking them dead. 2022-03-18 08:54:44 +00:00
merge-header.ll
mssa_update.ll
phi_with_duplicating_inputs.ll
pr39783.ll
scev.ll
update_parents.ll