[llvm-commits] [llvm] r120467 - /llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp

Chris Lattner sabre at nondot.org
Tue Nov 30 13:38:30 PST 2010


Author: lattner
Date: Tue Nov 30 15:38:30 2010
New Revision: 120467

URL: http://llvm.org/viewvc/llvm-project?rev=120467&view=rev
Log:
two improvements to RemoveAccessedObjects:
1. if the underlying pointer passed in can be resolved
   to any argument or alloca, then we don't need to scan.
   Previously we would only avoid the scan if the alloca
   or byval was actually considered dead.
2. The dead store processing code is itself completely
   dead and didn't handle volatile stores right anyway,
   so delete it.  This allows simplifying the interface
   to RemoveAccessedObjects.


Modified:
    llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp?rev=120467&r1=120466&r2=120467&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp Tue Nov 30 15:38:30 2010
@@ -64,8 +64,7 @@
     bool runOnBasicBlock(BasicBlock &BB);
     bool HandleFree(CallInst *F);
     bool handleEndBlock(BasicBlock &BB);
-    bool RemoveAccessedObjects(Value *Ptr, uint64_t killPointerSize,
-                               BasicBlock::iterator &BBI,
+    void RemoveAccessedObjects(Value *Ptr, uint64_t killPointerSize,
                                SmallPtrSet<Value*, 16> &deadPointers);
     void DeleteDeadInstruction(Instruction *I,
                                SmallPtrSet<Value*, 16> *deadPointers = 0);
@@ -514,8 +513,7 @@
 
     // Remove any allocas from the DeadPointer set that are loaded, as this
     // makes any stores above the access live.
-    MadeChange |= RemoveAccessedObjects(KillPointer, KillPointerSize, BBI,
-                                        DeadStackObjects);
+    RemoveAccessedObjects(KillPointer, KillPointerSize, DeadStackObjects);
 
     // If all of the allocas were clobbered by the access then we're not going
     // to find anything else to process.
@@ -529,53 +527,34 @@
 /// RemoveAccessedObjects - Check to see if the specified location may alias any
 /// of the stack objects in the DeadStackObjects set.  If so, they become live
 /// because the location is being loaded.
-bool DSE::RemoveAccessedObjects(Value *KillPointer, uint64_t KillPointerSize,
-                                BasicBlock::iterator &BBI,
+void DSE::RemoveAccessedObjects(Value *KillPointer, uint64_t KillPointerSize,
                                 SmallPtrSet<Value*, 16> &DeadStackObjects) {
   Value *UnderlyingPointer = KillPointer->getUnderlyingObject();
 
   // A constant can't be in the dead pointer set.
   if (isa<Constant>(UnderlyingPointer))
-    return false;
+    return;
   
   // If the kill pointer can be easily reduced to an alloca, don't bother doing
   // extraneous AA queries.
-  if (DeadStackObjects.count(UnderlyingPointer)) {
+  if (isa<AllocaInst>(UnderlyingPointer) || isa<Argument>(UnderlyingPointer)) {
     DeadStackObjects.erase(UnderlyingPointer);
-    return false;
+    return;
   }
   
-  bool MadeChange = false;
   SmallVector<Value*, 16> NowLive;
-  
   for (SmallPtrSet<Value*, 16>::iterator I = DeadStackObjects.begin(),
        E = DeadStackObjects.end(); I != E; ++I) {
     // See if this pointer could alias it
     AliasAnalysis::AliasResult A = AA->alias(*I, getPointerSize(*I, *AA),
                                              KillPointer, KillPointerSize);
-
-    // If it must-alias and a store, we can delete it
-    if (isa<StoreInst>(BBI) && A == AliasAnalysis::MustAlias) {
-      StoreInst *S = cast<StoreInst>(BBI);
-
-      // Remove it!
-      ++BBI;
-      DeleteDeadInstruction(S, &DeadStackObjects);
-      ++NumFastStores;
-      MadeChange = true;
-
-      continue;
-
-      // Otherwise, it is undead
-    } else if (A != AliasAnalysis::NoAlias)
+    if (A != AliasAnalysis::NoAlias)
       NowLive.push_back(*I);
   }
 
   for (SmallVector<Value*, 16>::iterator I = NowLive.begin(), E = NowLive.end();
        I != E; ++I)
     DeadStackObjects.erase(*I);
-  
-  return MadeChange;
 }
 
 /// DeleteDeadInstruction - Delete this instruction.  Before we do, go through





More information about the llvm-commits mailing list