summaryrefslogtreecommitdiff
path: root/test/Transforms/ScalarRepl
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2011-11-12 02:07:50 +0000
committerEli Friedman <eli.friedman@gmail.com>2011-11-12 02:07:50 +0000
commit75f69e3a3dff78cb89ded1d6c96ccb65603a82d9 (patch)
treec31f25e82a24efc4ece44807d80a866aa53c27ae /test/Transforms/ScalarRepl
parentd1ac3a47f2c2993e8bbda0a9f1c843e9efd0f00f (diff)
downloadllvm-75f69e3a3dff78cb89ded1d6c96ccb65603a82d9.tar.gz
llvm-75f69e3a3dff78cb89ded1d6c96ccb65603a82d9.tar.bz2
llvm-75f69e3a3dff78cb89ded1d6c96ccb65603a82d9.tar.xz
Make sure scalarrepl picks the correct alloca when it rewrites a bitcast. Fixes PR11353.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144442 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/ScalarRepl')
-rw-r--r--test/Transforms/ScalarRepl/2011-11-11-EmptyStruct.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/Transforms/ScalarRepl/2011-11-11-EmptyStruct.ll b/test/Transforms/ScalarRepl/2011-11-11-EmptyStruct.ll
new file mode 100644
index 0000000000..da707b706d
--- /dev/null
+++ b/test/Transforms/ScalarRepl/2011-11-11-EmptyStruct.ll
@@ -0,0 +1,26 @@
+; RUN: opt < %s -S -scalarrepl | FileCheck %s
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+
+%struct.S = type { [2 x %struct.anon], double }
+%struct.anon = type {}
+
+; CHECK: @test()
+; CHECK-NOT: alloca
+; CHECK: ret double 1.0
+
+define double @test() nounwind uwtable ssp {
+entry:
+ %retval = alloca %struct.S, align 8
+ %ret = alloca %struct.S, align 8
+ %b = getelementptr inbounds %struct.S* %ret, i32 0, i32 1
+ store double 1.000000e+00, double* %b, align 8
+ %0 = bitcast %struct.S* %retval to i8*
+ %1 = bitcast %struct.S* %ret to i8*
+ call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* %1, i64 8, i32 8, i1 false)
+ %2 = bitcast %struct.S* %retval to double*
+ %3 = load double* %2, align 1
+ ret double %3
+}
+
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind