Let MemoryDependenceAnalysis take care of updating AliasAnalysis.
authorOwen Anderson <resistor@mac.com>
Thu, 12 Jul 2007 00:06:21 +0000 (00:06 +0000)
committerOwen Anderson <resistor@mac.com>
Thu, 12 Jul 2007 00:06:21 +0000 (00:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39769 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/MemoryDependenceAnalysis.cpp
lib/Transforms/Scalar/FastDSE.cpp

index 1225ebbe884fb505d8999896dcab1187eacadb07..fa4395492577c768fdc3ebf2f0455ff273d20fa3 100644 (file)
@@ -255,4 +255,6 @@ void MemoryDependenceAnalysis::removeInstruction(Instruction* rem) {
     reverseDep.erase(I);
     I = reverseDep.find(rem);
   }
+  
+  getAnalysis<AliasAnalysis>().deleteValue(rem);
 }
index e2d81794d811347216921416cf9bb1350cae789c..e353aef7f921178ffa0a875cfcd3b04c24da7293 100644 (file)
@@ -70,7 +70,6 @@ namespace {
 FunctionPass *llvm::createFastDeadStoreEliminationPass() { return new FDSE(); }
 
 bool FDSE::runOnBasicBlock(BasicBlock &BB) {
-  AliasAnalysis &AA = getAnalysis<AliasAnalysis>();
   MemoryDependenceAnalysis& MD = getAnalysis<MemoryDependenceAnalysis>();
   
   // Record the last-seen store to this pointer
@@ -101,7 +100,6 @@ bool FDSE::runOnBasicBlock(BasicBlock &BB) {
           
           // Remove it!
           MD.removeInstruction(last);
-          AA.deleteValue(last);
           
           // DCE instructions only used to calculate that store
           if (Instruction* D = dyn_cast<Instruction>(last->getOperand(0)))
@@ -157,7 +155,6 @@ bool FDSE::handleFreeWithNonTrivialDependency(FreeInst* F, StoreInst* dependency
   if (A == AliasAnalysis::MustAlias) {
     // Remove it!
     MD.removeInstruction(dependency);
-    AA.deleteValue(dependency);
 
     // DCE instructions only used to calculate that store
     if (Instruction* D = dyn_cast<Instruction>(dependency->getOperand(0)))
@@ -200,7 +197,6 @@ bool FDSE::handleEndBlock(BasicBlock& BB, SetVector<Instruction*>& possiblyDead)
       if (deadPointers.count(S->getPointerOperand())){
         // Remove it!
         MD.removeInstruction(S);
-        AA.deleteValue(S);
         
         // DCE instructions only used to calculate that store
         if (Instruction* D = dyn_cast<Instruction>(S->getOperand(0)))
@@ -230,7 +226,6 @@ void FDSE::DeleteDeadInstructionChains(Instruction *I,
 
   // Let the memory dependence know
   getAnalysis<MemoryDependenceAnalysis>().removeInstruction(I);
-  getAnalysis<AliasAnalysis>().deleteValue(I);
 
   // See if this made any operands dead.  We do it this way in case the
   // instruction uses the same operand twice.  We don't want to delete a