diff options
author | Owen Anderson <resistor@mac.com> | 2007-07-25 21:13:41 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2007-07-25 21:13:41 +0000 |
commit | 2e3d6b4a273f12a9121a040da1f9dcdccf88cba1 (patch) | |
tree | 1ab65f8684b3245d5743430a6ef030c24928a340 /lib/Transforms | |
parent | 26e5a309eb24bec7d7177131b5f2730671d84d55 (diff) |
Fix a bug that was causing GVN to crash on 252.eon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40494 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Scalar/GVN.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp index 3b8adef4aa..a08ee68ca6 100644 --- a/lib/Transforms/Scalar/GVN.cpp +++ b/lib/Transforms/Scalar/GVN.cpp @@ -714,8 +714,15 @@ Value *GVN::performPHIConstruction(BasicBlock *BB, LoadInst* orig, unsigned numPreds = std::distance(pred_begin(BB), pred_end(BB)); if (numPreds == 1) { - Phis[BB] = Phis[*pred_begin(BB)]; - return Phis[BB]; + DenseMap<BasicBlock*, Value*>::iterator DI = Phis.find(BB); + if (DI != Phis.end()) { + Phis.insert(std::make_pair(BB, DI->second)); + return DI->second; + } else { + Value* domV = performPHIConstruction(*pred_begin(BB), orig, Phis); + Phis.insert(std::make_pair(BB, domV)); + return domV; + } } else { PHINode *PN = new PHINode(orig->getType(), orig->getName()+".rle", BB->begin()); PN->reserveOperandSpace(numPreds); |