[llvm] r214989 - Revert "r214897 - Remove dead zero store to calloc initialized memory"

Rui Ueyama ruiu at google.com
Wed Aug 6 12:30:38 PDT 2014


Author: ruiu
Date: Wed Aug  6 14:30:38 2014
New Revision: 214989

URL: http://llvm.org/viewvc/llvm-project?rev=214989&view=rev
Log:
Revert "r214897 - Remove dead zero store to calloc initialized memory"

It broke msan.


Removed:
    llvm/trunk/test/Transforms/DeadStoreElimination/calloc-store.ll
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=214989&r1=214988&r2=214989&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp Wed Aug  6 14:30:38 2014
@@ -514,49 +514,29 @@ bool DSE::runOnBasicBlock(BasicBlock &BB
     if (!InstDep.isDef() && !InstDep.isClobber())
       continue;
 
-    // Check for cases where the store is redundant.
+    // If we're storing the same value back to a pointer that we just
+    // loaded from, then the store can be removed.
     if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
-      bool DeleteStore = false;
-      // If we're storing the same value back to a pointer that we just
-      // loaded from, then the store can be removed.
       if (LoadInst *DepLoad = dyn_cast<LoadInst>(InstDep.getInst())) {
         if (SI->getPointerOperand() == DepLoad->getPointerOperand() &&
             SI->getOperand(0) == DepLoad && isRemovable(SI)) {
           DEBUG(dbgs() << "DSE: Remove Store Of Load from same pointer:\n  "
                        << "LOAD: " << *DepLoad << "\n  STORE: " << *SI << '\n');
-          DeleteStore = true;
-        }
-      }
 
-      // If we find a store to memory which was defined by calloc
-      // we can remove the store if the value being stored is a
-      // constant zero (since calloc initialized the memory to
-      // that same value) or the store is undefined (if out of
-      // bounds).  
-      if (isCallocLikeFn(InstDep.getInst(), TLI) && isRemovable(SI)) {
-        Value *V = SI->getValueOperand();
-        if (isa<Constant>(V) && cast<Constant>(V)->isNullValue()) {
-          DEBUG(dbgs() << "DSE: Remove Store Of Zero to Calloc:\n  "
-                << "CALLOC: " << *InstDep.getInst() << "\n"
-                << "STORE: " << *SI << '\n');
-          DeleteStore = true;
-        }
-      }
+          // DeleteDeadInstruction can delete the current instruction.  Save BBI
+          // in case we need it.
+          WeakVH NextInst(BBI);
+
+          DeleteDeadInstruction(SI, *MD, TLI);
 
-      if (DeleteStore) {
-        // DeleteDeadInstruction can delete the current instruction.  Save BBI
-        // in case we need it.
-        WeakVH NextInst(BBI);
-        
-        DeleteDeadInstruction(SI, *MD, TLI);
-        
-        if (!NextInst)  // Next instruction deleted.
-          BBI = BB.begin();
-        else if (BBI != BB.begin())  // Revisit this instruction if possible.
-          --BBI;
-        ++NumFastStores;
-        MadeChange = true;
-        continue;
+          if (!NextInst)  // Next instruction deleted.
+            BBI = BB.begin();
+          else if (BBI != BB.begin())  // Revisit this instruction if possible.
+            --BBI;
+          ++NumFastStores;
+          MadeChange = true;
+          continue;
+        }
       }
     }
 

Removed: llvm/trunk/test/Transforms/DeadStoreElimination/calloc-store.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadStoreElimination/calloc-store.ll?rev=214988&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/DeadStoreElimination/calloc-store.ll (original)
+++ llvm/trunk/test/Transforms/DeadStoreElimination/calloc-store.ll (removed)
@@ -1,17 +0,0 @@
-; RUN: opt < %s -basicaa -dse -S | FileCheck %s
-
-target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
-
-; Function Attrs: nounwind
-declare noalias i8* @calloc(i64, i64)
-
-; Function Attrs: nounwind uwtable
-define noalias i32* @test_store() {
-; CHECK-LABEL: test_store
-  %1 = tail call noalias i8* @calloc(i64 1, i64 4)
-  %2 = bitcast i8* %1 to i32*
-  ; This store is dead and should be removed
-  store i32 0, i32* %2, align 4
-; CHECK-NOT: store i32 0, i32* %2, align 4
-  ret i32* %2
-}





More information about the llvm-commits mailing list