[llvm-commits] [llvm] r164634 - in /llvm/trunk: lib/Transforms/Scalar/SROA.cpp test/Transforms/SROA/basictest.ll
Nick Lewycky
nicholas at mxc.ca
Tue Sep 25 14:15:50 PDT 2012
Author: nicholas
Date: Tue Sep 25 16:15:50 2012
New Revision: 164634
URL: http://llvm.org/viewvc/llvm-project?rev=164634&view=rev
Log:
Don't try to promote the same alloca twice. Fixes PR13916!
Chandler, it's not obvious that it's okay that this alloca gets into the list
twice to begin with. Please review and see whether this is the fix you really
want, but I wanted to get a fix checked in quickly.
Modified:
llvm/trunk/lib/Transforms/Scalar/SROA.cpp
llvm/trunk/test/Transforms/SROA/basictest.ll
Modified: llvm/trunk/lib/Transforms/Scalar/SROA.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=164634&r1=164633&r2=164634&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/SROA.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/SROA.cpp Tue Sep 25 16:15:50 2012
@@ -3108,6 +3108,12 @@
if (PromotableAllocas.empty())
return false;
+ // Ensure that the list is unique.
+ std::sort(PromotableAllocas.begin(), PromotableAllocas.end());
+ PromotableAllocas.erase(std::unique(PromotableAllocas.begin(),
+ PromotableAllocas.end()),
+ PromotableAllocas.end());
+
NumPromoted += PromotableAllocas.size();
if (DT && !ForceSSAUpdater) {
Modified: llvm/trunk/test/Transforms/SROA/basictest.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/basictest.ll?rev=164634&r1=164633&r2=164634&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SROA/basictest.ll (original)
+++ llvm/trunk/test/Transforms/SROA/basictest.ll Tue Sep 25 16:15:50 2012
@@ -855,3 +855,25 @@
%result = or i8 %load, %load2
ret i8 %result
}
+
+%test22.struct = type { i8 }
+
+define void @test22() {
+; CHECK: @test22
+; CHECK-NOT: alloca
+; CHECK: ret void
+; PR13916
+entry:
+ %A = alloca %test22.struct
+ br i1 undef, label %if.then, label %if.end
+
+if.then: ; preds = %entry
+ %tmp = bitcast %test22.struct* %A to i8*
+ %tmp1 = bitcast %test22.struct* %A to i8*
+ call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp, i8* %tmp1, i32 1, i32 1, i1 false)
+ unreachable
+
+if.end: ; preds = %entry
+ %tmp2 = load %test22.struct* %A
+ ret void
+}
More information about the llvm-commits
mailing list