summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/ScalarRepl
diff options
context:
space:
mode:
authorPete Cooper <peter_cooper@apple.com>2012-08-10 03:26:36 +0000
committerPete Cooper <peter_cooper@apple.com>2012-08-10 03:26:36 +0000
commit0deca6be79254ef883890e70fe2b5bf0482f36ba (patch)
treeef76739b804459641bcd913a5b18743ba446a677 /llvm/test/Transforms/ScalarRepl
parent8c28ac9ec9c0110028369f2d8b1f25ff92d0bd02 (diff)
downloadbcm5719-llvm-0deca6be79254ef883890e70fe2b5bf0482f36ba.tar.gz
bcm5719-llvm-0deca6be79254ef883890e70fe2b5bf0482f36ba.zip
Fix crash when when do lto on Bullet. Dynamic GEPs in SROA were incorrectly being applied to all accesses to an alloca, not just the ones which read from the GEP. Thanks to Evan for reducing the test. rdar://11861001
llvm-svn: 161654
Diffstat (limited to 'llvm/test/Transforms/ScalarRepl')
-rw-r--r--llvm/test/Transforms/ScalarRepl/crash.ll22
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/test/Transforms/ScalarRepl/crash.ll b/llvm/test/Transforms/ScalarRepl/crash.ll
index cd4dc328e69..58c5a3a0527 100644
--- a/llvm/test/Transforms/ScalarRepl/crash.ll
+++ b/llvm/test/Transforms/ScalarRepl/crash.ll
@@ -260,5 +260,27 @@ entry:
ret void
}
+; rdar://11861001 - The dynamic GEP here was incorrectly making all accesses
+; to the alloca think they were also dynamic. Inserts and extracts created to
+; access the vector were all being based from the dynamic access, even in BBs
+; not dominated by the GEP.
+define fastcc void @test() optsize inlinehint ssp align 2 {
+entry:
+ %alloc.0.0 = alloca <4 x float>, align 16
+ %bitcast = bitcast <4 x float>* %alloc.0.0 to [4 x float]*
+ %idx3 = getelementptr inbounds [4 x float]* %bitcast, i32 0, i32 3
+ store float 0.000000e+00, float* %idx3, align 4
+ br label %for.body10
+
+for.body10: ; preds = %for.body10, %entry
+ %loopidx = phi i32 [ 0, %entry ], [ undef, %for.body10 ]
+ %unusedidx = getelementptr inbounds <4 x float>* %alloc.0.0, i32 0, i32 %loopidx
+ br i1 undef, label %for.end, label %for.body10
+
+for.end: ; preds = %for.body10
+ store <4 x float> <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float 0.000000e+00>, <4 x float>* %alloc.0.0, align 16
+ ret void
+}
+
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind
OpenPOWER on IntegriCloud