Fix an issue where phiMap was not being updated properly when doing load PRE.
authorOwen Anderson <resistor@mac.com>
Fri, 29 May 2009 05:37:54 +0000 (05:37 +0000)
committerOwen Anderson <resistor@mac.com>
Fri, 29 May 2009 05:37:54 +0000 (05:37 +0000)
Diagnosis and patch thanks to Jakub Staszak.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72562 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/GVN.cpp

index 260bbedddc92e8b340e8880bd2522cbd0fb8bd17..222320f52579997cc1cd2c8d1608f21e085b84dc 100644 (file)
@@ -1125,6 +1125,11 @@ bool GVN::processNonLocalLoad(LoadInst *LI,
                                 LI->getAlignment(),
                                 UnavailablePred->getTerminator());
   
+  SmallPtrSet<Instruction*, 4> &p = phiMap[LI->getPointerOperand()];
+  for (SmallPtrSet<Instruction*, 4>::iterator I = p.begin(), E = p.end();
+       I != E; ++I)
+    ValuesPerBlock.push_back(std::make_pair((*I)->getParent(), *I));
+  
   DenseMap<BasicBlock*, Value*> BlockReplValues;
   BlockReplValues.insert(ValuesPerBlock.begin(), ValuesPerBlock.end());
   BlockReplValues[UnavailablePred] = NewLoad;