diff options
author | Stephen Hines <srhines@google.com> | 2015-03-23 12:10:34 -0700 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2015-03-23 12:10:34 -0700 |
commit | ebe69fe11e48d322045d5949c83283927a0d790b (patch) | |
tree | c92f1907a6b8006628a4b01615f38264d29834ea /test/Transforms/MemCpyOpt | |
parent | b7d2e72b02a4cb8034f32f8247a2558d2434e121 (diff) | |
download | external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.zip external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.tar.gz external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.tar.bz2 |
Update aosp/master LLVM for rebase to r230699.
Change-Id: I2b5be30509658cb8266be782de0ab24f9099f9b9
Diffstat (limited to 'test/Transforms/MemCpyOpt')
-rw-r--r-- | test/Transforms/MemCpyOpt/callslot_aa.ll | 22 | ||||
-rw-r--r-- | test/Transforms/MemCpyOpt/form-memset.ll | 15 |
2 files changed, 37 insertions, 0 deletions
diff --git a/test/Transforms/MemCpyOpt/callslot_aa.ll b/test/Transforms/MemCpyOpt/callslot_aa.ll new file mode 100644 index 0000000..b6ea129 --- /dev/null +++ b/test/Transforms/MemCpyOpt/callslot_aa.ll @@ -0,0 +1,22 @@ +; RUN: opt < %s -S -basicaa -memcpyopt | FileCheck %s +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" + +%T = type { i64, i64 } + +define void @test(i8* %src) { + %tmp = alloca i8 + %dst = alloca i8 +; CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %src, i64 1, i32 8, i1 false) + call void @llvm.memcpy.p0i8.p0i8.i64(i8* %tmp, i8* %src, i64 1, i32 8, i1 false), !noalias !2 + call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %tmp, i64 1, i32 8, i1 false) + + ret void +} + +declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i32, i1) + +; Check that the noalias for "dst" was removed by checking that the metadata is gone +; CHECK-NOT: "dst" +!0 = !{!0} +!1 = distinct !{!1, !0, !"dst"} +!2 = distinct !{!1} diff --git a/test/Transforms/MemCpyOpt/form-memset.ll b/test/Transforms/MemCpyOpt/form-memset.ll index d980b7f..0a40943 100644 --- a/test/Transforms/MemCpyOpt/form-memset.ll +++ b/test/Transforms/MemCpyOpt/form-memset.ll @@ -284,3 +284,18 @@ define void @test10(i8* nocapture %P) nounwind { ; CHECK-NOT: memset ; CHECK: ret void } + +; Memset followed by odd store. +define void @test11(i32* nocapture %P) nounwind ssp { +entry: + %add.ptr = getelementptr inbounds i32* %P, i64 3 + %0 = bitcast i32* %add.ptr to i8* + tail call void @llvm.memset.p0i8.i64(i8* %0, i8 1, i64 11, i32 1, i1 false) + %arrayidx = getelementptr inbounds i32* %P, i64 0 + %arrayidx.cast = bitcast i32* %arrayidx to i96* + store i96 310698676526526814092329217, i96* %arrayidx.cast, align 4 + ret void +; CHECK-LABEL: @test11( +; CHECK-NOT: store +; CHECK: call void @llvm.memset.p0i8.i64(i8* %1, i8 1, i64 23, i32 4, i1 false) +} |