mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-24 11:36:10 +00:00
Revert "Revert r253253 and r253126: "Don't recompute LCSSA after loop-unrolling when possible.""
The bug in IndVarSimplify was fixed in r254976, r254977, so I'm reapplying the original patch for avoiding redundant LCSSA recomputation. This reverts commit ffe3b434e505e403146aff00be0c177bb6d13466. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255133 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
65711ad4e3
commit
4c0fb60923
@ -221,6 +221,12 @@ bool llvm::UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
|
||||
|
||||
// Are we eliminating the loop control altogether?
|
||||
bool CompletelyUnroll = Count == TripCount;
|
||||
SmallVector<BasicBlock *, 4> ExitBlocks;
|
||||
L->getExitBlocks(ExitBlocks);
|
||||
Loop *ParentL = L->getParentLoop();
|
||||
bool AllExitsAreInsideParentLoop = !ParentL ||
|
||||
std::all_of(ExitBlocks.begin(), ExitBlocks.end(),
|
||||
[&](BasicBlock *BB) { return ParentL->contains(BB); });
|
||||
|
||||
// We assume a run-time trip count if the compiler cannot
|
||||
// figure out the loop trip count and the unroll-runtime
|
||||
@ -544,7 +550,7 @@ bool llvm::UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
|
||||
if (!OuterL && !CompletelyUnroll)
|
||||
OuterL = L;
|
||||
if (OuterL) {
|
||||
simplifyLoop(OuterL, DT, LI, PP, SE, AC);
|
||||
bool Simplified = simplifyLoop(OuterL, DT, LI, PP, SE, AC);
|
||||
|
||||
// LCSSA must be performed on the outermost affected loop. The unrolled
|
||||
// loop's last loop latch is guaranteed to be in the outermost loop after
|
||||
@ -554,7 +560,11 @@ bool llvm::UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
|
||||
while (OuterL->getParentLoop() != LatchLoop)
|
||||
OuterL = OuterL->getParentLoop();
|
||||
|
||||
formLCSSARecursively(*OuterL, *DT, LI, SE);
|
||||
if (CompletelyUnroll && (!AllExitsAreInsideParentLoop || Simplified))
|
||||
formLCSSARecursively(*OuterL, *DT, LI, SE);
|
||||
else
|
||||
assert(OuterL->isLCSSAForm(*DT) &&
|
||||
"Loops should be in LCSSA form after loop-unroll.");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user