From: Owen Anderson Date: Mon, 28 Jul 2008 16:00:58 +0000 (+0000) Subject: Fix a subtle bug when removing instructions from memdep. In very specific X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d4310a5d41cc13f109890f5efbb19e084fecb27a;p=oota-llvm.git Fix a subtle bug when removing instructions from memdep. In very specific 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 --- diff --git a/lib/Analysis/MemoryDependenceAnalysis.cpp b/lib/Analysis/MemoryDependenceAnalysis.cpp index 2012ab473c9..c93a680382e 100644 --- a/lib/Analysis/MemoryDependenceAnalysis.cpp +++ b/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -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 ) &&