1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 20:23:11 +01:00
llvm-mirror/test/Transforms/LoopDeletion
Nikita Popov bab200ac44 [IR] Consider non-willreturn as side effect (PR50511)
This adjusts mayHaveSideEffect() to return true for !willReturn()
instructions. Just like other side-effects, non-willreturn calls
(aka "divergence") cannot be removed and cannot be reordered relative
to other side effects. This fixes a number of bugs where
non-willreturn calls are either incorrectly dropped or moved. In
particular, it also fixes the last open problem in
https://bugs.llvm.org/show_bug.cgi?id=50511.

I performed a cursory review of all current mayHaveSideEffect()
uses, which convinced me that these are indeed the desired default
semantics. Places that do not want to consider non-willreturn as a
sideeffect generally do not want mayHaveSideEffect() semantics at
all. I identified two such cases, which are addressed by D106591
and D106742. Finally, there is a use in SCEV for which we don't
really have an appropriate API right now -- what it wants is
basically "would this be considered forward progress". I've just
spelled out the previous semantics there.

Differential Revision: https://reviews.llvm.org/D106749
2021-07-26 16:35:14 +02:00
..
2007-07-23-InfiniteLoop.ll
2008-05-06-Phi.ll
2011-06-21-phioperands.ll
2017-07-11-incremental-dt.ll
assume.ll [AsmParser] Unify parsing of attributes 2021-07-15 17:51:11 +02:00
basic-remark.ll
crashbc.ll
dcetest.ll
diundef.ll
eval_first_iteration.ll [LoopDeletion] Handle switch in proving that loop exits on first iteration 2021-07-09 18:03:34 +07:00
invalidation.ll
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
multiple-exits.ll
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 [IR] Consider non-willreturn as side effect (PR50511) 2021-07-26 16:35:14 +02:00
pr49967.ll [LoopDeletion] Add test for PR49967 (NFC) 2021-04-18 22:08:51 +02:00
simplify-then-delete.ll [SimplifyCFG] SimplifyCondBranchToTwoReturns(): really only deal with different ret blocks 2021-07-23 00:36:59 +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
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