Clean up dead operands left around after SROA replaces a mem intrinsic.
authorBob Wilson <bob.wilson@apple.com>
Tue, 8 Dec 2009 18:22:03 +0000 (18:22 +0000)
committerBob Wilson <bob.wilson@apple.com>
Tue, 8 Dec 2009 18:22:03 +0000 (18:22 +0000)
I'm not aware that this does anything significant on its own, but it's
needed for another patch that I'm working on.

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

lib/Transforms/Scalar/ScalarReplAggregates.cpp

index b0008a446bb60d16990e23f4277a42afe9e14dcd..abd4a77d3438e3147c5086266f1ff530dcdb9a62 100644 (file)
@@ -769,6 +769,10 @@ void SROA::RewriteMemIntrinUserOfAlloca(MemIntrinsic *MI, Instruction *BCInst,
       OtherPtr = MTI->getRawDest();
     }
   }
+
+  // Keep track of the other intrinsic argument, so it can be removed if it
+  // is dead when the intrinsic is replaced.
+  Value *PossiblyDead = OtherPtr;
   
   // If there is an other pointer, we want to convert it to the same pointer
   // type as AI has, so we can GEP through it safely.
@@ -922,6 +926,8 @@ void SROA::RewriteMemIntrinUserOfAlloca(MemIntrinsic *MI, Instruction *BCInst,
     }
   }
   MI->eraseFromParent();
+  if (PossiblyDead)
+    RecursivelyDeleteTriviallyDeadInstructions(PossiblyDead);
 }
 
 /// RewriteStoreUserOfWholeAlloca - We found a store of an integer that