diff options
author | Dan Gohman <gohman@apple.com> | 2010-11-08 20:20:11 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2010-11-08 20:20:11 +0000 |
commit | 2a9221793ac686ac249211b4ff4b48eddfd2458f (patch) | |
tree | 6ad767f0950c2d32c54b4755d732bcb378dc5971 /llvm/test/Analysis | |
parent | 27f391be6177486cc55ad92ccf3e33401a5da0a0 (diff) | |
download | bcm5719-llvm-2a9221793ac686ac249211b4ff4b48eddfd2458f.tar.gz bcm5719-llvm-2a9221793ac686ac249211b4ff4b48eddfd2458f.zip |
Add a testcase for a call which BasicAA says only accesses memory through
its arguments and which TBAA says doesn't write to memory.
llvm-svn: 118439
Diffstat (limited to 'llvm/test/Analysis')
-rw-r--r-- | llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll b/llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll index 62fe8aa1644..5ef355fd93b 100644 --- a/llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll +++ b/llvm/test/Analysis/TypeBasedAliasAnalysis/functionattrs.ll @@ -2,6 +2,13 @@ ; FunctionAttrs should make use of TBAA. +; Add the readnone attribute, since the only access is a store which TBAA +; says is to constant memory. +; +; It's unusual to see a store to constant memory, but it isn't necessarily +; invalid, as it's possible that this only happens after optimization on a +; code path which isn't ever executed. + ; CHECK: define void @test0_yes(i32* nocapture %p) nounwind readnone { define void @test0_yes(i32* %p) nounwind { store i32 0, i32* %p, !tbaa !1 @@ -14,6 +21,9 @@ define void @test0_no(i32* %p) nounwind { ret void } +; Add the readonly attribute, since there's just a call to a function which +; TBAA says doesn't modify any memory. + ; CHECK: define void @test1_yes(i32* %p) nounwind readonly { define void @test1_yes(i32* %p) nounwind { call void @callee(i32* %p), !tbaa !1 @@ -26,7 +36,27 @@ define void @test1_no(i32* %p) nounwind { ret void } +; Add the readonly attribute, as above, but this time BasicAA will say +; that the function accesses memory through its arguments, which TBAA +; still says that the function doesn't write to memory. +; +; This is unusual, since the function is memcpy, but as above, this +; isn't necessarily invalid. + +; CHECK: define void @test2_yes(i8* nocapture %p, i8* nocapture %q, i64 %n) nounwind readnone { +define void @test2_yes(i8* %p, i8* %q, i64 %n) nounwind { + call void @llvm.memcpy.p0i8.p0i8.i64(i8* %p, i8* %q, i64 %n, i32 1, i1 false), !tbaa !1 + ret void +} + +; CHECK: define void @test2_no(i8* nocapture %p, i8* nocapture %q, i64 %n) nounwind { +define void @test2_no(i8* %p, i8* %q, i64 %n) nounwind { + call void @llvm.memcpy.p0i8.p0i8.i64(i8* %p, i8* %q, i64 %n, i32 1, i1 false), !tbaa !2 + ret void +} + declare void @callee(i32* %p) nounwind +declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i32, i1) nounwind ; Root note. !0 = metadata !{ } |