[llvm-commits] [llvm] r146197 - in /llvm/trunk: lib/Transforms/Scalar/DeadStoreElimination.cpp test/Transforms/DeadStoreElimination/free.ll

Nick Lewycky nicholas at mxc.ca
Thu Dec 8 14:36:35 PST 2011


Author: nicholas
Date: Thu Dec  8 16:36:35 2011
New Revision: 146197

URL: http://llvm.org/viewvc/llvm-project?rev=146197&view=rev
Log:
Fix infinite loop in DSE when deleting a free in a reachable loop that's also
trivially infinite.

Modified:
    llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp
    llvm/trunk/test/Transforms/DeadStoreElimination/free.ll

Modified: llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp?rev=146197&r1=146196&r2=146197&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp Thu Dec  8 16:36:35 2011
@@ -624,6 +624,7 @@
                                    BasicBlock *BB, DominatorTree *DT) {
   for (pred_iterator I = pred_begin(BB), E = pred_end(BB); I != E; ++I) {
     BasicBlock *Pred = *I;
+    if (Pred == BB) continue;
     TerminatorInst *PredTI = Pred->getTerminator();
     if (PredTI->getNumSuccessors() != 1)
       continue;
@@ -853,4 +854,3 @@
        I != E; ++I)
     DeadStackObjects.erase(*I);
 }
-

Modified: llvm/trunk/test/Transforms/DeadStoreElimination/free.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadStoreElimination/free.ll?rev=146197&r1=146196&r2=146197&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/DeadStoreElimination/free.ll (original)
+++ llvm/trunk/test/Transforms/DeadStoreElimination/free.ll Thu Dec  8 16:36:35 2011
@@ -58,3 +58,13 @@
   tail call void @free(i8* %alloc1) nounwind
   ret void
 }
+
+; CHECK: @test5
+define void @test5() {
+  br label %bb
+
+bb:
+  tail call void @free(i8* undef) nounwind
+  br label %bb
+}
+





More information about the llvm-commits mailing list