diff options
author | Bob Wilson <bob.wilson@apple.com> | 2010-01-19 04:32:48 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2010-01-19 04:32:48 +0000 |
commit | a756b1d914eaf4ad610d29398e5831b394bd1547 (patch) | |
tree | a67b71bd18f269b5e2773edbc7d294283994946f /test/Transforms/ScalarRepl | |
parent | c1ef06ac5264cb43f148590091606f0ed90a72e9 (diff) | |
download | external_llvm-a756b1d914eaf4ad610d29398e5831b394bd1547.zip external_llvm-a756b1d914eaf4ad610d29398e5831b394bd1547.tar.gz external_llvm-a756b1d914eaf4ad610d29398e5831b394bd1547.tar.bz2 |
Fix a crash in scalarrepl for memcpy/memmove where the source and destination
are the same. I had already fixed a similar problem where the source and
destination were different bitcasts derived from the same alloca, but the
previous fix still did not handle the case where both operands are exactly
the same value. Radar 7552893.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93848 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/ScalarRepl')
-rw-r--r-- | test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll b/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll new file mode 100644 index 0000000..74cf251 --- /dev/null +++ b/test/Transforms/ScalarRepl/2010-01-18-SelfCopy.ll @@ -0,0 +1,18 @@ +; RUN: opt < %s -scalarrepl -S | FileCheck %s +; Radar 7552893 + +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32" + +%struct.test = type { [3 x double ] } + +define arm_apcscc void @test_memcpy_self() nounwind { +; CHECK: @test_memcpy_self +; CHECK-NOT: alloca +; CHECK: ret void + %1 = alloca %struct.test + %2 = bitcast %struct.test* %1 to i8* + call void @llvm.memcpy.i32(i8* %2, i8* %2, i32 24, i32 4) + ret void +} + +declare void @llvm.memcpy.i32(i8* nocapture, i8* nocapture, i32, i32) nounwind |