mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
bab200ac44
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 |
||
---|---|---|
.. | ||
2007-07-23-InfiniteLoop.ll | ||
2008-05-06-Phi.ll | ||
2011-06-21-phioperands.ll | ||
2017-07-11-incremental-dt.ll | ||
assume.ll | ||
basic-remark.ll | ||
crashbc.ll | ||
dcetest.ll | ||
diundef.ll | ||
eval_first_iteration.ll | ||
invalidation.ll | ||
irreducible-cfg.ll | ||
loops-with-irreducible-subloops.ll | ||
multiple-exit-conditions.ll | ||
multiple-exits.ll | ||
mustprogress.ll | ||
no-exit-blocks.ll | ||
noop-loops-with-subloops.ll | ||
pr49967.ll | ||
simplify-then-delete.ll | ||
two-predecessors.ll | ||
unreachable-loops.ll | ||
update-scev.ll | ||
use-in-unreachable.ll | ||
zero-btc.ll |