forked from OSchip/llvm-project
0aeb37324d
https://bugs.llvm.org/show_bug.cgi?id=27506
https://bugs.llvm.org/show_bug.cgi?id=31652
https://bugs.llvm.org/show_bug.cgi?id=51043
Problems with SimpleLoopUnswitch cause the bug reports above.
```
while (...) {
if (C) { A }
else { B }
}
Into:
C' = freeze(C)
if (C') {
while (...) { A }
} else {
while (...) { B }
}
```
This problem can be solved by adding a freeze on hoisted branches(above transform) and has been solved by D29015.
However, D29015 is now reverted by performance regression(
|
||
---|---|---|
.. | ||
ARM | ||
2006-06-13-SingleEntryPHI.ll | ||
2006-06-27-DeadSwitchCase.ll | ||
2007-05-09-Unreachable.ll | ||
2007-05-09-tl.ll | ||
2007-07-12-ExitDomInfo.ll | ||
2007-07-13-DomInfo.ll | ||
2007-07-18-DomInfo.ll | ||
2007-08-01-Dom.ll | ||
2007-08-01-LCSSA.ll | ||
2007-10-04-DomFrontier.ll | ||
2008-06-02-DomInfo.ll | ||
2008-06-17-DomFrontier.ll | ||
2010-11-18-LCSSA.ll | ||
2011-06-02-CritSwitch.ll | ||
2011-09-26-EHCrash.ll | ||
2012-04-02-IndirectBr.ll | ||
2012-04-30-LoopUnswitch-LPad-Crash.ll | ||
2012-05-20-Phi.ll | ||
2015-09-18-Addrspace.ll | ||
LIV-loop-condtion.ll | ||
basictest-profmd.ll | ||
basictest.ll | ||
catchswitch.ll | ||
cleanuppad.ll | ||
copy-metadata.ll | ||
crash.ll | ||
dead-blocks-uses-in-unreachablel-blocks.ll | ||
delete-dead-blocks.ll | ||
endless-unswitch.ll | ||
exponential-behavior.ll | ||
exponential-nontrivial-unswitch-nested.ll | ||
exponential-nontrivial-unswitch-nested2.ll | ||
exponential-nontrivial-unswitch.ll | ||
exponential-nontrivial-unswitch2.ll | ||
exponential-switch-unswitch.ll | ||
formDedicatedAfterTrivial1.ll | ||
formDedicatedAfterTrivial2.ll | ||
formDedicatedAfterTrivial3.ll | ||
guards.ll | ||
implicit-null-checks.ll | ||
infinite-loop.ll | ||
msan.ll | ||
nontrivial-unswitch-cost.ll | ||
nontrivial-unswitch-freeze.ll | ||
nontrivial-unswitch-invariant-select-bug.ll | ||
nontrivial-unswitch-markloopasdeleted.ll | ||
nontrivial-unswitch-redundant-switch.ll | ||
nontrivial-unswitch.ll | ||
not-safe-to-clone.ll | ||
options.ll | ||
partial-unswitch-mssa-threshold.ll | ||
partial-unswitch-update-memoryssa.ll | ||
partial-unswitch.ll | ||
pipeline.ll | ||
pr37888.ll | ||
preserve-analyses.ll | ||
preserve-scev-exiting-multiple-loops.ll | ||
trivial-unswitch-iteration.ll | ||
trivial-unswitch-profmd.ll | ||
trivial-unswitch.ll | ||
update-scev.ll |