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

David Hill dhill at mindcry.org
Tue Aug 7 21:01:05 PDT 2012


Excellent!  Thank you!

On Wed, Aug 08, 2012 at 02:17:32AM -0000, Eli Friedman wrote:
>Author: efriedma
>Date: Tue Aug  7 21:17:32 2012
>New Revision: 161468
>
>URL: http://llvm.org/viewvc/llvm-project?rev=161468&view=rev
>Log:
>isAllocLikeFn is allowed to return true for functions which read memory; make
>sure we account for that correctly in DeadStoreElimination.  Fixes a regression
>from r158919.  PR13547.
>
>
>Modified:
>    llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp
>    llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll
>
>Modified: llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp
>URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp?rev=161468&r1=161467&r2=161468&view=diff
>==============================================================================
>--- llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp (original)
>+++ llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp Tue Aug  7 21:17:32 2012
>@@ -740,12 +740,19 @@
>       continue;
>     }
> 
>-    if (isa<AllocaInst>(BBI) || isAllocLikeFn(BBI)) {
>+    if (isa<AllocaInst>(BBI)) {
>+      // Remove allocas from the list of dead stack objects; there can't be
>+      // any references before the definition.
>       DeadStackObjects.remove(BBI);
>       continue;
>     }
> 
>     if (CallSite CS = cast<Value>(BBI)) {
>+      // Remove allocation function calls from the list of dead stack objects; 
>+      // there can't be any references before the definition.
>+      if (isAllocLikeFn(BBI))
>+        DeadStackObjects.remove(BBI);
>+
>       // If this call does not access memory, it can't be loading any of our
>       // pointers.
>       if (AA->doesNotAccessMemory(CS))
>@@ -771,7 +778,7 @@
>       // If all of the allocas were clobbered by the call then we're not going
>       // to find anything else to process.
>       if (DeadStackObjects.empty())
>-        return MadeChange;
>+        break;
> 
>       continue;
>     }
>
>Modified: llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll
>URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll?rev=161468&r1=161467&r2=161468&view=diff
>==============================================================================
>--- llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll (original)
>+++ llvm/trunk/test/Transforms/DeadStoreElimination/simple.ll Tue Aug  7 21:17:32 2012
>@@ -276,3 +276,18 @@
> ; CHECK-NEXT: ret void
>   ret void
> }
>+
>+; PR13547
>+; CHECK: @test23
>+; CHECK: store i8 97
>+; CHECK: store i8 0
>+declare noalias i8* @strdup(i8* nocapture) nounwind
>+define noalias i8* @test23() nounwind uwtable ssp {
>+  %x = alloca [2 x i8], align 1
>+  %arrayidx = getelementptr inbounds [2 x i8]* %x, i64 0, i64 0
>+  store i8 97, i8* %arrayidx, align 1
>+  %arrayidx1 = getelementptr inbounds [2 x i8]* %x, i64 0, i64 1
>+  store i8 0, i8* %arrayidx1, align 1
>+  %call = call i8* @strdup(i8* %arrayidx) nounwind
>+  ret i8* %call
>+}
>
>
>_______________________________________________
>llvm-commits mailing list
>llvm-commits at cs.uiuc.edu
>http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list