diff options
| author | Owen Anderson <resistor@mac.com> | 2007-07-25 22:19:40 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2007-07-25 22:19:40 +0000 |
| commit | 87074125939e93cc8b996e64905d10c601466a29 (patch) | |
| tree | 1ace92c553202c6a1c9bb4a0a09998062bb4409c /llvm/lib | |
| parent | 3c67004d47b315513bc9a19294d258efb35dc377 (diff) | |
| download | bcm5719-llvm-87074125939e93cc8b996e64905d10c601466a29.tar.gz bcm5719-llvm-87074125939e93cc8b996e64905d10c601466a29.zip | |
My last commit was not correct for nested loops. Fix it, and add a testcase for it.
llvm-svn: 40498
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/GVN.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/GVN.cpp b/llvm/lib/Transforms/Scalar/GVN.cpp index eb12abe243c..f3aa7960f66 100644 --- a/llvm/lib/Transforms/Scalar/GVN.cpp +++ b/llvm/lib/Transforms/Scalar/GVN.cpp @@ -731,6 +731,7 @@ Value *GVN::performPHIConstruction(BasicBlock *BB, LoadInst* orig, } else { PHINode *PN = new PHINode(orig->getType(), orig->getName()+".rle", BB->begin()); PN->reserveOperandSpace(numPreds); + Phis[BB] = PN; visited.insert(BB); // Fill in the incoming values for the block. @@ -738,7 +739,7 @@ Value *GVN::performPHIConstruction(BasicBlock *BB, LoadInst* orig, if (!visited.count(*PI)) PN->addIncoming(performPHIConstruction(*PI, orig, Phis, visited), *PI); else - PN->addIncoming(PN, *PI); + PN->addIncoming(Phis[*PI], *PI); visited.erase(BB); bool all_same = PN->getNumIncomingValues() != 1; @@ -748,6 +749,7 @@ Value *GVN::performPHIConstruction(BasicBlock *BB, LoadInst* orig, if (all_same) { PN->eraseFromParent(); + Phis[BB] = first; return first; } else { return PN; |

