From 036f1e7478ed7b104fe4a5b895377796a20b9222 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 5 Oct 2003 03:26:25 +0000 Subject: [PATCH] The PhiNodes 2D vector is only used during PHI node placement. It doesn't need to be an instance variable! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8860 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Utils/PromoteMemoryToRegister.cpp | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index 7dd2dcd2ae3..dae22da6d36 100644 --- a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp +++ b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp @@ -62,10 +62,6 @@ namespace { // VersionNumbers - Current version counters for each alloca std::vector VersionNumbers; - // PhiNodes - Each alloca contains a list of basic blocks which contain PHI - // nodes for the alloca. - std::vector > PhiNodes; - // NewPhiNodes - The PhiNodes we're adding. std::map > NewPhiNodes; @@ -90,7 +86,6 @@ void PromoteMem2Reg::run() { Function &F = *DF.getRoot()->getParent(); VersionNumbers.resize(Allocas.size()); - PhiNodes.resize(Allocas.size()); for (unsigned i = 0; i != Allocas.size(); ++i) { AllocaInst *AI = Allocas[i]; @@ -110,6 +105,10 @@ void PromoteMem2Reg::run() { AllocaLookup[Allocas[i]] = i; + // PhiNodeBlocks - A list of blocks that phi nodes have been inserted for + // this alloca. + std::vector PhiNodeBlocks; + // Compute the locations where PhiNodes need to be inserted. Look at the // dominance frontier of EACH basic-block we have a write in. // @@ -120,19 +119,20 @@ void PromoteMem2Reg::run() { const DominanceFrontier::DomSetType &S = it->second; for (DominanceFrontier::DomSetType::iterator P = S.begin(),PE = S.end(); P != PE; ++P) - QueuePhiNode(*P, i); + if (QueuePhiNode(*P, i)) + PhiNodeBlocks.push_back(*P); } } // Perform iterative step - std::vector &AllocaPhiNodes = PhiNodes[i]; - for (unsigned k = 0; k != AllocaPhiNodes.size(); k++) { - DominanceFrontier::const_iterator it = DF.find(AllocaPhiNodes[k]); + for (unsigned k = 0; k != PhiNodeBlocks.size(); k++) { + DominanceFrontier::const_iterator it = DF.find(PhiNodeBlocks[k]); if (it != DF.end()) { const DominanceFrontier::DomSetType &S = it->second; for (DominanceFrontier::DomSetType::iterator P = S.begin(), PE = S.end(); P != PE; ++P) - QueuePhiNode(*P, i); + if (QueuePhiNode(*P, i)) + PhiNodeBlocks.push_back(*P); } } } @@ -198,7 +198,6 @@ bool PromoteMem2Reg::QueuePhiNode(BasicBlock *BB, unsigned AllocaNo) { PN->addIncoming(NullVal, Preds[i]); BBPNs[AllocaNo] = PN; - PhiNodes[AllocaNo].push_back(BB); return true; }