mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[LegacyPM] Make the 'addLoop' method accept a loop to add rather than
having it internally allocate the loop. This is a much more flexible API and necessary in the new loop unswitch to reasonably support both new and old PMs in common code. It also just seems like a cleaner separation of concerns. NFC, this should just be a pure refactoring. Differential Revision: https://reviews.llvm.org/D33528 llvm-svn: 303834
This commit is contained in:
parent
99635b8b60
commit
23545833ac
@ -126,9 +126,8 @@ public:
|
||||
}
|
||||
|
||||
public:
|
||||
// Add a new loop into the loop queue as a child of the given parent, or at
|
||||
// the top level if \c ParentLoop is null.
|
||||
Loop &addLoop(Loop *ParentLoop);
|
||||
// Add a new loop into the loop queue.
|
||||
void addLoop(Loop &L);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
/// SimpleAnalysis - Provides simple interface to update analysis info
|
||||
|
@ -73,30 +73,23 @@ LPPassManager::LPPassManager()
|
||||
CurrentLoop = nullptr;
|
||||
}
|
||||
|
||||
// Inset loop into loop nest (LoopInfo) and loop queue (LQ).
|
||||
Loop &LPPassManager::addLoop(Loop *ParentLoop) {
|
||||
// Create a new loop. LI will take ownership.
|
||||
Loop *L = new Loop();
|
||||
|
||||
// Insert into the loop nest and the loop queue.
|
||||
if (!ParentLoop) {
|
||||
// Insert loop into loop nest (LoopInfo) and loop queue (LQ).
|
||||
void LPPassManager::addLoop(Loop &L) {
|
||||
if (!L.getParentLoop()) {
|
||||
// This is the top level loop.
|
||||
LI->addTopLevelLoop(L);
|
||||
LQ.push_front(L);
|
||||
return *L;
|
||||
LQ.push_front(&L);
|
||||
return;
|
||||
}
|
||||
|
||||
ParentLoop->addChildLoop(L);
|
||||
// Insert L into the loop queue after the parent loop.
|
||||
for (auto I = LQ.begin(), E = LQ.end(); I != E; ++I) {
|
||||
if (*I == L->getParentLoop()) {
|
||||
if (*I == L.getParentLoop()) {
|
||||
// deque does not support insert after.
|
||||
++I;
|
||||
LQ.insert(I, 1, L);
|
||||
break;
|
||||
LQ.insert(I, 1, &L);
|
||||
return;
|
||||
}
|
||||
}
|
||||
return *L;
|
||||
}
|
||||
|
||||
/// cloneBasicBlockSimpleAnalysis - Invoke cloneBasicBlockAnalysis hook for
|
||||
|
@ -1228,7 +1228,12 @@ void LoopConstrainer::addToParentLoopIfNeeded(ArrayRef<BasicBlock *> BBs) {
|
||||
|
||||
Loop *LoopConstrainer::createClonedLoopStructure(Loop *Original, Loop *Parent,
|
||||
ValueToValueMapTy &VM) {
|
||||
Loop &New = LPM.addLoop(Parent);
|
||||
Loop &New = *new Loop();
|
||||
if (Parent)
|
||||
Parent->addChildLoop(&New);
|
||||
else
|
||||
LI.addTopLevelLoop(&New);
|
||||
LPM.addLoop(New);
|
||||
|
||||
// Add all of the blocks in Original to the new loop.
|
||||
for (auto *BB : Original->blocks())
|
||||
|
@ -831,7 +831,12 @@ bool LoopUnswitch::UnswitchIfProfitable(Value *LoopCond, Constant *Val,
|
||||
/// mapping the blocks with the specified map.
|
||||
static Loop *CloneLoop(Loop *L, Loop *PL, ValueToValueMapTy &VM,
|
||||
LoopInfo *LI, LPPassManager *LPM) {
|
||||
Loop &New = LPM->addLoop(PL);
|
||||
Loop &New = *new Loop();
|
||||
if (PL)
|
||||
PL->addChildLoop(&New);
|
||||
else
|
||||
LI->addTopLevelLoop(&New);
|
||||
LPM->addLoop(New);
|
||||
|
||||
// Add all of the blocks in L to the new loop.
|
||||
for (Loop::block_iterator I = L->block_begin(), E = L->block_end();
|
||||
|
Loading…
x
Reference in New Issue
Block a user