Fix a subtle bug when removing instructions from memdep. In very specific
authorOwen Anderson <resistor@mac.com>
Mon, 28 Jul 2008 16:00:58 +0000 (16:00 +0000)
committerOwen Anderson <resistor@mac.com>
Mon, 28 Jul 2008 16:00:58 +0000 (16:00 +0000)
circumstances we could end up remapping a dependee to the same instruction
that we're trying to remove.  Handle this properly by just falling back to
a conservative solution.

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

lib/Analysis/MemoryDependenceAnalysis.cpp

index 2012ab473c98a697650a37a94129bc67a0c1f347..c93a680382e1ded40699342c242f32bdd2f198f1 100644 (file)
@@ -528,6 +528,10 @@ void MemoryDependenceAnalysis::removeInstruction(Instruction* rem) {
       // If we have dep info for rem, set them to it
       BasicBlock::iterator RI = depGraphEntry->second.first;
       RI++;
+      
+      // If RI is rem, then we use rem's immediate successor.
+      if (RI == (BasicBlock::iterator)rem) RI++;
+      
       newDep = RI;
     } else if ( (depGraphEntry->second.first == NonLocal ||
                  depGraphEntry->second.first == None ) &&