[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