mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
[PM] Now that LoopInfo isn't in the Pass type hierarchy, it is much
cleaner to derive from the generic base. Thise removes a ton of boiler plate code and somewhat strange and pointless indirections. It also remove a bunch of the previously needed friend declarations. To fully remove these, I also lifted the verify logic into the generic LoopInfoBase, which seems good anyways -- it is generic and useful logic even for the machine side. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226385 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -293,7 +293,7 @@ BasicBlock *llvm::SplitBlock(BasicBlock *Old, Instruction *SplitPt, Pass *P) {
|
||||
if (auto *LIWP = P->getAnalysisIfAvailable<LoopInfoWrapperPass>()) {
|
||||
LoopInfo &LI = LIWP->getLoopInfo();
|
||||
if (Loop *L = LI.getLoopFor(Old))
|
||||
L->addBasicBlockToLoop(New, LI.getBase());
|
||||
L->addBasicBlockToLoop(New, LI);
|
||||
}
|
||||
|
||||
if (DominatorTreeWrapperPass *DTWP =
|
||||
@@ -385,9 +385,9 @@ static void UpdateAnalysisInformation(BasicBlock *OldBB, BasicBlock *NewBB,
|
||||
}
|
||||
|
||||
if (InnermostPredLoop)
|
||||
InnermostPredLoop->addBasicBlockToLoop(NewBB, LI->getBase());
|
||||
InnermostPredLoop->addBasicBlockToLoop(NewBB, *LI);
|
||||
} else {
|
||||
L->addBasicBlockToLoop(NewBB, LI->getBase());
|
||||
L->addBasicBlockToLoop(NewBB, *LI);
|
||||
if (SplitMakesNewLoopHeader)
|
||||
L->moveToHeader(NewBB);
|
||||
}
|
||||
|
||||
@@ -269,13 +269,13 @@ BasicBlock *llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum,
|
||||
if (Loop *DestLoop = LI->getLoopFor(DestBB)) {
|
||||
if (TIL == DestLoop) {
|
||||
// Both in the same loop, the NewBB joins loop.
|
||||
DestLoop->addBasicBlockToLoop(NewBB, LI->getBase());
|
||||
DestLoop->addBasicBlockToLoop(NewBB, *LI);
|
||||
} else if (TIL->contains(DestLoop)) {
|
||||
// Edge from an outer loop to an inner loop. Add to the outer loop.
|
||||
TIL->addBasicBlockToLoop(NewBB, LI->getBase());
|
||||
TIL->addBasicBlockToLoop(NewBB, *LI);
|
||||
} else if (DestLoop->contains(TIL)) {
|
||||
// Edge from an inner loop to an outer loop. Add to the outer loop.
|
||||
DestLoop->addBasicBlockToLoop(NewBB, LI->getBase());
|
||||
DestLoop->addBasicBlockToLoop(NewBB, *LI);
|
||||
} else {
|
||||
// Edge from two loops with no containment relation. Because these
|
||||
// are natural loops, we know that the destination block must be the
|
||||
@@ -284,7 +284,7 @@ BasicBlock *llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum,
|
||||
assert(DestLoop->getHeader() == DestBB &&
|
||||
"Should not create irreducible loops!");
|
||||
if (Loop *P = DestLoop->getParentLoop())
|
||||
P->addBasicBlockToLoop(NewBB, LI->getBase());
|
||||
P->addBasicBlockToLoop(NewBB, *LI);
|
||||
}
|
||||
}
|
||||
// If TIBB is in a loop and DestBB is outside of that loop, we may need
|
||||
|
||||
@@ -460,7 +460,7 @@ static BasicBlock *insertUniqueBackedgeBlock(Loop *L, BasicBlock *Preheader,
|
||||
|
||||
// Update Loop Information - we know that this block is now in the current
|
||||
// loop and all parent loops.
|
||||
L->addBasicBlockToLoop(BEBlock, LI->getBase());
|
||||
L->addBasicBlockToLoop(BEBlock, *LI);
|
||||
|
||||
// Update dominator information
|
||||
DT->splitBlock(BEBlock);
|
||||
|
||||
@@ -311,7 +311,7 @@ bool llvm::UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
|
||||
// Tell LI about New.
|
||||
if (*BB == Header) {
|
||||
assert(LI->getLoopFor(*BB) == L && "Header should not be in a sub-loop");
|
||||
L->addBasicBlockToLoop(New, LI->getBase());
|
||||
L->addBasicBlockToLoop(New, *LI);
|
||||
} else {
|
||||
// Figure out which loop New is in.
|
||||
const Loop *OldLoop = LI->getLoopFor(*BB);
|
||||
@@ -333,7 +333,7 @@ bool llvm::UnrollLoop(Loop *L, unsigned Count, unsigned TripCount,
|
||||
if (SE)
|
||||
SE->forgetLoop(OldLoop);
|
||||
}
|
||||
NewLoop->addBasicBlockToLoop(New, LI->getBase());
|
||||
NewLoop->addBasicBlockToLoop(New, *LI);
|
||||
}
|
||||
|
||||
if (*BB == Header)
|
||||
|
||||
@@ -160,9 +160,9 @@ static void CloneLoopBlocks(Loop *L, Value *NewIter, const bool UnrollProlog,
|
||||
NewBlocks.push_back(NewBB);
|
||||
|
||||
if (NewLoop)
|
||||
NewLoop->addBasicBlockToLoop(NewBB, LI->getBase());
|
||||
NewLoop->addBasicBlockToLoop(NewBB, *LI);
|
||||
else if (ParentLoop)
|
||||
ParentLoop->addBasicBlockToLoop(NewBB, LI->getBase());
|
||||
ParentLoop->addBasicBlockToLoop(NewBB, *LI);
|
||||
|
||||
VMap[*BB] = NewBB;
|
||||
if (Header == *BB) {
|
||||
|
||||
Reference in New Issue
Block a user