llvm-project/llvm/test/Transforms/LoopDeletion
Max Kazantsev 7c73c2ede8 [LoopDeletion] Benefit from branches by undef conditions when symbolically executing 1st iteration
We can exploit branches by `undef` condition. Frankly, the LangRef says that
such branches are UB, so we can assume that all outgoing edges of such blocks
are dead.

However, from practical perspective, we know that this is not supported correctly
in some other places. So we are being conservative about it.

Branch by undef is treated in the following way:
- If it is a loop-exiting branch, we always assume it exits the loop;
- If not, we arbitrarily assume it takes `true` value.

Differential Revision: https://reviews.llvm.org/D104689
Reviewed By: nikic
2021-06-28 11:39:46 +07:00
..
2007-07-23-InfiniteLoop.ll
2008-05-06-Phi.ll [SimplifyCFG] Teach simplifyUnreachable() to preserve DomTree 2020-12-18 00:37:22 +03:00
2011-06-21-phioperands.ll
2017-07-11-incremental-dt.ll Revert "[LoopDeletion] Allows deletion of possibly infinite side-effect free loops" 2020-11-07 00:32:12 -05:00
assume.ll [LoopDelete][Assume] Allow deleting loops with assumes 2020-09-26 12:32:44 +02:00
basic-remark.ll Revert "[LoopDeletion] Allows deletion of possibly infinite side-effect free loops" 2020-11-07 00:32:12 -05:00
crashbc.ll
dcetest.ll [SimplifyCFG] TryToSimplifyUncondBranchFromEmptyBlock() already knows how to preserve DomTree 2020-12-17 01:03:49 +03:00
diundef.ll Revert "[LoopDeletion] Allows deletion of possibly infinite side-effect free loops" 2020-11-07 00:32:12 -05:00
eval_first_iteration.ll [LoopDeletion] Benefit from branches by undef conditions when symbolically executing 1st iteration 2021-06-28 11:39:46 +07:00
invalidation.ll Revert "[LoopDeletion] Allows deletion of possibly infinite side-effect free loops" 2020-11-07 00:32:12 -05:00
irreducible-cfg.ll [Test] Add one more loop deletion irreducible CFG test 2021-06-01 11:11:15 +07:00
loops-with-irreducible-subloops.ll [LoopDeletion] Check for irreducible cycles when deleting loops. 2021-06-15 12:56:12 +01:00
multiple-exit-conditions.ll Revert "[LoopDeletion] Allows deletion of possibly infinite side-effect free loops" 2020-11-07 00:32:12 -05:00
multiple-exits.ll Revert "[LoopDeletion] Allows deletion of possibly infinite side-effect free loops" 2020-11-07 00:32:12 -05:00
mustprogress.ll [LoopDeletion] Allows deletion of possibly infinite side-effect free loops 2021-01-05 09:56:16 -05:00
no-exit-blocks.ll [LoopDeletion] Allows deletion of possibly infinite side-effect free loops 2021-01-05 09:56:16 -05:00
noop-loops-with-subloops.ll [LoopDeletion] Consider infinite loops alive, unless mustprogress. 2021-06-01 13:07:36 +01:00
pr49967.ll [LoopDeletion] Add test for PR49967 (NFC) 2021-04-18 22:08:51 +02:00
simplify-then-delete.ll [SimplifyCFG] Teach SimplifyCondBranchToTwoReturns() to preserve DomTree, part 1 2020-12-20 00:18:35 +03:00
two-predecessors.ll [LoopDeletion] Require loop to have a predecessor when executing 1st iteration symbolically 2021-06-22 12:20:55 +07:00
unreachable-loops.ll [LoopDeletion] Break backedge if we can prove that the loop is exited on 1st iteration (try 3) 2021-06-18 17:31:57 +07:00
update-scev.ll [LoopDeletion] Break backedge of outermost loops when known not taken 2021-01-10 16:02:33 -08:00
use-in-unreachable.ll Revert "[LoopDeletion] Allows deletion of possibly infinite side-effect free loops" 2020-11-07 00:32:12 -05:00
zero-btc.ll [LoopDeletion] Break backedge if we can prove that the loop is exited on 1st iteration (try 3) 2021-06-18 17:31:57 +07:00