diff options
author | Bob Wilson <bob.wilson@apple.com> | 2010-04-02 01:22:49 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2010-04-02 01:22:49 +0000 |
commit | 5ea6352fcd221e208529f58f88b856bbc4e19e55 (patch) | |
tree | 1cfde09cee62ccdddeef6a2a65e64e86ad7cdec1 /lib/Transforms/Utils/SSAUpdater.cpp | |
parent | eb3a1ab7961ad4f7b53e9e9d5f23961a7f15444f (diff) |
Revert 100158 in case it is causing some of the buildbot problems.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100164 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/SSAUpdater.cpp')
-rw-r--r-- | lib/Transforms/Utils/SSAUpdater.cpp | 50 |
1 files changed, 21 insertions, 29 deletions
diff --git a/lib/Transforms/Utils/SSAUpdater.cpp b/lib/Transforms/Utils/SSAUpdater.cpp index 292332e4f8..769e798fae 100644 --- a/lib/Transforms/Utils/SSAUpdater.cpp +++ b/lib/Transforms/Utils/SSAUpdater.cpp @@ -471,27 +471,22 @@ void SSAUpdater::RecordMatchingPHI(PHINode *PHI) { SmallVector<PHINode*, 20> WorkList; WorkList.push_back(PHI); - // Record this PHI. - BasicBlock *BB = PHI->getParent(); - AvailableVals[BB] = PHI; - (*BBMap)[BB]->AvailableVal = PHI; - while (!WorkList.empty()) { PHI = WorkList.pop_back_val(); + BasicBlock *BB = PHI->getParent(); + BBInfo *Info = (*BBMap)[BB]; + if (!Info || Info->AvailableVal) + return; + + // Record the PHI. + AvailableVals[BB] = PHI; + Info->AvailableVal = PHI; // Iterate through the PHI's incoming values. for (unsigned i = 0, e = PHI->getNumIncomingValues(); i != e; ++i) { - PHINode *IncomingPHIVal = dyn_cast<PHINode>(PHI->getIncomingValue(i)); - if (!IncomingPHIVal) continue; - BB = IncomingPHIVal->getParent(); - BBInfo *Info = (*BBMap)[BB]; - if (!Info || Info->AvailableVal) - continue; - - // Record the PHI and add it to the worklist. - AvailableVals[BB] = IncomingPHIVal; - Info->AvailableVal = IncomingPHIVal; - WorkList.push_back(IncomingPHIVal); + PHINode *IncomingVal = dyn_cast<PHINode>(PHI->getIncomingValue(i)); + if (!IncomingVal) continue; + WorkList.push_back(IncomingVal); } } } @@ -504,24 +499,21 @@ void SSAUpdater::ClearPHITags(PHINode *PHI) { SmallVector<PHINode*, 20> WorkList; WorkList.push_back(PHI); - // Clear the tag for this PHI. - (*BBMap)[PHI->getParent()]->PHITag = 0; - while (!WorkList.empty()) { PHI = WorkList.pop_back_val(); + BasicBlock *BB = PHI->getParent(); + BBInfo *Info = (*BBMap)[BB]; + if (!Info || Info->AvailableVal || !Info->PHITag) + continue; + + // Clear the tag. + Info->PHITag = 0; // Iterate through the PHI's incoming values. for (unsigned i = 0, e = PHI->getNumIncomingValues(); i != e; ++i) { - PHINode *IncomingPHIVal = dyn_cast<PHINode>(PHI->getIncomingValue(i)); - if (!IncomingPHIVal) continue; - BasicBlock *BB = IncomingPHIVal->getParent(); - BBInfo *Info = (*BBMap)[BB]; - if (!Info || Info->AvailableVal || !Info->PHITag) - continue; - - // Clear the tag and add the PHI to the worklist. - Info->PHITag = 0; - WorkList.push_back(IncomingPHIVal); + PHINode *IncomingVal = dyn_cast<PHINode>(PHI->getIncomingValue(i)); + if (!IncomingVal) continue; + WorkList.push_back(IncomingVal); } } } |