Author: resistor Date: Fri Aug 3 14:59:35 2007 New Revision: 40791 URL: http://llvm.org/viewvc/llvm-project?rev=40791&view=rev Log: Fix a subtle miscompilation. This allows 197.parser to be compiled correctly.
Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=40791&r1=40790&r2=40791&view=diff ============================================================================== --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original) +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Fri Aug 3 14:59:35 2007 @@ -726,21 +726,23 @@ 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<BasicBlock*, Value*>::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; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits