From ab8702787d6bcdeaea31fc6a3d4a7fec3a5e18c4 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Fri, 3 Aug 2007 19:59:35 +0000 Subject: [PATCH] Fix a subtle miscompilation. This allows 197.parser to be compiled correctly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40791 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/GVN.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/Transforms/Scalar/GVN.cpp b/lib/Transforms/Scalar/GVN.cpp index 1f3ecfa2b19..b0a7cabf8b5 100644 --- a/lib/Transforms/Scalar/GVN.cpp +++ b/lib/Transforms/Scalar/GVN.cpp @@ -726,21 +726,23 @@ Value *GVN::GetValueForBlock(BasicBlock *BB, LoadInst* orig, bool top_level) { // If we have already computed this value, return the previously computed val. - Value *V = Phis[BB]; - if (V && ! top_level) return V; + DenseMap::iterator V = Phis.find(BB); + if (V != Phis.end() && !top_level) return V->second; BasicBlock* singlePred = BB->getSinglePredecessor(); if (singlePred) { - V = GetValueForBlock(singlePred, orig, Phis); - Phis[BB] = V; - return V; + Value *ret = GetValueForBlock(singlePred, orig, Phis); + Phis[BB] = ret; + return ret; } // Otherwise, the idom is the loop, so we need to insert a PHI node. Do so // now, then get values to fill in the incoming values for the PHI. PHINode *PN = new PHINode(orig->getType(), orig->getName()+".rle", BB->begin()); PN->reserveOperandSpace(std::distance(pred_begin(BB), pred_end(BB))); - Phis[BB] = PN; + + if (Phis.count(BB) == 0) + Phis.insert(std::make_pair(BB, PN)); bool all_same = true; Value* first = 0; -- 2.34.1