Remove the use of LPPassManager. We can remove LPM because we dont need to run any additional loop passes on the new vector loop.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169016 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nadav Rotem 2012-11-30 17:27:53 +00:00
parent 1e5cbcb10a
commit f735a7f88d

View File

@ -114,9 +114,8 @@ public:
/// Ctor. /// Ctor.
SingleBlockLoopVectorizer(Loop *Orig, ScalarEvolution *Se, LoopInfo *Li, SingleBlockLoopVectorizer(Loop *Orig, ScalarEvolution *Se, LoopInfo *Li,
DominatorTree *Dt, DataLayout *Dl, DominatorTree *Dt, DataLayout *Dl,
LPPassManager *Lpm,
unsigned VecWidth): unsigned VecWidth):
OrigLoop(Orig), SE(Se), LI(Li), DT(Dt), DL(Dl), LPM(Lpm), VF(VecWidth), OrigLoop(Orig), SE(Se), LI(Li), DT(Dt), DL(Dl), VF(VecWidth),
Builder(Se->getContext()), Induction(0), OldInduction(0) { } Builder(Se->getContext()), Induction(0), OldInduction(0) { }
// Perform the actual loop widening (vectorization). // Perform the actual loop widening (vectorization).
@ -181,8 +180,6 @@ private:
DominatorTree *DT; DominatorTree *DT;
// Data Layout. // Data Layout.
DataLayout *DL; DataLayout *DL;
// Loop Pass Manager;
LPPassManager *LPM;
// The vectorization factor to use. // The vectorization factor to use.
unsigned VF; unsigned VF;
@ -491,7 +488,7 @@ struct LoopVectorize : public LoopPass {
"\n"); "\n");
// If we decided that it is *legal* to vectorizer the loop then do it. // If we decided that it is *legal* to vectorizer the loop then do it.
SingleBlockLoopVectorizer LB(L, SE, LI, DT, DL, &LPM, VF); SingleBlockLoopVectorizer LB(L, SE, LI, DT, DL, VF);
LB.vectorize(&LVL); LB.vectorize(&LVL);
DEBUG(verifyFunction(*L->getHeader()->getParent())); DEBUG(verifyFunction(*L->getHeader()->getParent()));
@ -969,19 +966,22 @@ SingleBlockLoopVectorizer::createEmptyLoop(LoopVectorizationLegality *Legal) {
// Get ready to start creating new instructions into the vectorized body. // Get ready to start creating new instructions into the vectorized body.
Builder.SetInsertPoint(VecBody->getFirstInsertionPt()); Builder.SetInsertPoint(VecBody->getFirstInsertionPt());
// Register the new loop. // Create and register the new vector loop.
Loop* Lp = new Loop(); Loop* Lp = new Loop();
LPM->insertLoop(Lp, OrigLoop->getParentLoop());
Lp->addBasicBlockToLoop(VecBody, LI->getBase());
Loop *ParentLoop = OrigLoop->getParentLoop(); Loop *ParentLoop = OrigLoop->getParentLoop();
// Insert the new loop into the loop nest and register the new basic blocks.
if (ParentLoop) { if (ParentLoop) {
ParentLoop->addChildLoop(Lp);
ParentLoop->addBasicBlockToLoop(ScalarPH, LI->getBase()); ParentLoop->addBasicBlockToLoop(ScalarPH, LI->getBase());
ParentLoop->addBasicBlockToLoop(VectorPH, LI->getBase()); ParentLoop->addBasicBlockToLoop(VectorPH, LI->getBase());
ParentLoop->addBasicBlockToLoop(MiddleBlock, LI->getBase()); ParentLoop->addBasicBlockToLoop(MiddleBlock, LI->getBase());
} else {
LI->addTopLevelLoop(Lp);
} }
Lp->addBasicBlockToLoop(VecBody, LI->getBase());
// Save the state. // Save the state.
LoopVectorPreHeader = VectorPH; LoopVectorPreHeader = VectorPH;
LoopScalarPreHeader = ScalarPH; LoopScalarPreHeader = ScalarPH;