mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
a4f9bca98e
Turns out simplifyLoopIVs sometimes returns a non-dead instruction in it's DeadInsts out param. I had done a bit of NFC cleanup which was only NFC if simplifyLoopIVs obeyed it's documentation. I'm simplfy dropping that part of the change. Commit message from try 3: Recommitting after fixing a bug found post commit. Amusingly, try 1 had been correct, and by reverting to incorporate last minute review feedback, I introduce the bug. Oops. :) Original commit message: The problem was that recursively deleting an instruction can delete instructions beyond the current iterator (via a dead phi), thus invalidating iteration. Test case added in LoopUnroll/dce.ll to cover this case. LoopUnroll does a limited DCE pass after unrolling, but if you have a chain of dead instructions, it only deletes the last one. Improve the code to recursively delete all trivially dead instructions. Differential Revision: https://reviews.llvm.org/D102511 |
||
---|---|---|
.. | ||
AArch64 | ||
AMDGPU | ||
ARM | ||
Hexagon | ||
PowerPC | ||
WebAssembly | ||
X86 | ||
2004-05-13-DontUnrollTooMuch.ll | ||
2005-03-06-BadLoopInfoUpdate.ll | ||
2006-08-24-MultiBlockLoop.ll | ||
2007-04-16-PhiUpdate.ll | ||
2007-05-05-UnrollMiscomp.ll | ||
2007-05-09-UnknownTripCount.ll | ||
2007-11-05-Crash.ll | ||
2011-08-08-PhiUpdate.ll | ||
2011-08-09-IVSimplify.ll | ||
2011-08-09-PhiUpdate.ll | ||
2011-10-01-NoopTrunc.ll | ||
2012-04-09-unroll-indirectbr.ll | ||
assume-timeout.ll | ||
basic.ll | ||
callbr.ll | ||
complete_unroll_profitability_with_assume.ll | ||
convergent.ll | ||
dce.ll | ||
debug-info.ll | ||
disable_nonforced_count.ll | ||
disable_nonforced_enable.ll | ||
disable_nonforced_full.ll | ||
disable_nonforced.ll | ||
disable-full-unroll-by-opt.ll | ||
disable-loop-unrolling_forced.ll | ||
ephemeral.ll | ||
epilog_const_phi.ll | ||
followup.ll | ||
full-unroll-bad-cost.ll | ||
full-unroll-crashers.ll | ||
full-unroll-heuristics-2.ll | ||
full-unroll-heuristics-cmp.ll | ||
full-unroll-heuristics-dce.ll | ||
full-unroll-heuristics-geps.ll | ||
full-unroll-heuristics-phi-prop.ll | ||
full-unroll-heuristics.ll | ||
full-unroll-invariant.ll | ||
full-unroll-keep-first-exit.ll | ||
FullUnroll.ll | ||
high-cost-trip-count-computation.ll | ||
ignore-annotation-intrinsic-cost.ll | ||
invalidate_right_loop.ll | ||
loop-remarks-with-hotness.ll | ||
loop-remarks.ll | ||
noalias.ll | ||
nonlatchcondbr.ll | ||
not-rotated.ll | ||
opt-levels.ll | ||
optsize-loop-size.ll | ||
partial-unroll-const-bounds.ll | ||
partial-unroll-dead-instructions.ll | ||
partially-unroll-unconditional-latch.ll | ||
peel-loop2.ll | ||
peel-loop-conditions-pgo-1.ll | ||
peel-loop-conditions-pgo-2.ll | ||
peel-loop-conditions.ll | ||
peel-loop-inner.ll | ||
peel-loop-irreducible.ll | ||
peel-loop-negative.ll | ||
peel-loop-nests.ll | ||
peel-loop-noalias-scope-decl.ll | ||
peel-loop-not-forced.ll | ||
peel-loop-pgo-deopt-idom-2.ll | ||
peel-loop-pgo-deopt-idom.ll | ||
peel-loop-pgo-deopt.ll | ||
peel-loop-pgo.ll | ||
peel-loop-scev-invalidate.ll | ||
peel-loop.ll | ||
pr10813.ll | ||
pr11361.ll | ||
pr14167.ll | ||
pr18861.ll | ||
pr27157.ll | ||
pr28132.ll | ||
pr31718.ll | ||
pr33437.ll | ||
pr45939-peel-count-and-complete-unroll.ll | ||
rebuild_lcssa.ll | ||
revisit.ll | ||
runtime-epilog-debuginfo.ll | ||
runtime-li.ll | ||
runtime-loop1.ll | ||
runtime-loop2.ll | ||
runtime-loop3.ll | ||
runtime-loop4.ll | ||
runtime-loop5.ll | ||
runtime-loop-at-most-two-exits.ll | ||
runtime-loop-branchweight.ll | ||
runtime-loop-multiexit-dom-verify.ll | ||
runtime-loop-multiple-exits.ll | ||
runtime-loop-non-exiting-latch.ll | ||
runtime-loop.ll | ||
runtime-multiexit-heuristic.ll | ||
runtime-small-upperbound.ll | ||
runtime-unroll-assume-no-remainder.ll | ||
runtime-unroll-remainder.ll | ||
scevunroll.ll | ||
shifted-tripcount.ll | ||
tripcount-overflow.ll | ||
unloop.ll | ||
unroll-after-peel.ll | ||
unroll-cleanup.ll | ||
unroll-cleanuppad.ll | ||
unroll-count.ll | ||
unroll-header-exiting-with-phis-multiple-exiting-blocks.ll | ||
unroll-header-exiting-with-phis.ll | ||
unroll-heuristics-pgo.ll | ||
unroll-loop-invalidation.ll | ||
unroll-maxcount.ll | ||
unroll-opt-attribute.ll | ||
unroll-pragmas-disabled.ll | ||
unroll-pragmas.ll | ||
unroll-preserve-scev-lcssa.ll | ||
unroll-unconditional-latch.ll | ||
update-loop-info-in-subloops.ll | ||
wrong_assert_in_peeling.ll |