diff options
author | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2015-11-17 19:30:51 +0000 |
---|---|---|
committer | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2015-11-17 19:30:51 +0000 |
commit | 3ec9e15ad405c7fc1332c0a27438b5d24c07f364 (patch) | |
tree | d0c35e5b1ea6ae9bd59c29bc458f805c65da1e0a /llvm/test/Transforms | |
parent | ba920be4a220c53cc30ec29df3b721b85c1fb8b6 (diff) | |
download | bcm5719-llvm-3ec9e15ad405c7fc1332c0a27438b5d24c07f364.tar.gz bcm5719-llvm-3ec9e15ad405c7fc1332c0a27438b5d24c07f364.zip |
Vector of pointers in function attributes calculation
While setting function attributes we check all instructions that may access memory. For a call instruction we check all arguments. The special check is required for pointers.
I added vector-of-pointers to the call arguments types that should be checked.
Differential Revision: http://reviews.llvm.org/D14693
llvm-svn: 253363
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r-- | llvm/test/Transforms/FunctionAttrs/readattrs.ll | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/test/Transforms/FunctionAttrs/readattrs.ll b/llvm/test/Transforms/FunctionAttrs/readattrs.ll index 7f22e6f2a2c..aabdfe8d200 100644 --- a/llvm/test/Transforms/FunctionAttrs/readattrs.ll +++ b/llvm/test/Transforms/FunctionAttrs/readattrs.ll @@ -65,3 +65,41 @@ entry: store i32 10, i32* %call, align 4 ret void } + +; CHECK: declare void @llvm.masked.scatter +declare void @llvm.masked.scatter.v4i32(<4 x i32>%val, <4 x i32*>, i32, <4 x i1>) + +; CHECK-NOT: readnone +; CHECK-NOT: readonly +; CHECK: define void @test9 +define void @test9(<4 x i32*> %ptrs, <4 x i32>%val) { + call void @llvm.masked.scatter.v4i32(<4 x i32>%val, <4 x i32*> %ptrs, i32 4, <4 x i1><i1 true, i1 false, i1 true, i1 false>) + ret void +} + +; CHECK: declare <4 x i32> @llvm.masked.gather +declare <4 x i32> @llvm.masked.gather.v4i32(<4 x i32*>, i32, <4 x i1>, <4 x i32>) +; CHECK: readonly +; CHECK: define <4 x i32> @test10 +define <4 x i32> @test10(<4 x i32*> %ptrs) { + %res = call <4 x i32> @llvm.masked.gather.v4i32(<4 x i32*> %ptrs, i32 4, <4 x i1><i1 true, i1 false, i1 true, i1 false>, <4 x i32>undef) + ret <4 x i32> %res +} + +; CHECK: declare <4 x i32> @test11_1 +declare <4 x i32> @test11_1(<4 x i32*>) argmemonly nounwind readonly +; CHECK: readonly +; CHECK-NOT: readnone +; CHECK: define <4 x i32> @test11_2 +define <4 x i32> @test11_2(<4 x i32*> %ptrs) { + %res = call <4 x i32> @test11_1(<4 x i32*> %ptrs) + ret <4 x i32> %res +} + +declare <4 x i32> @test12_1(<4 x i32*>) argmemonly nounwind +; CHECK-NOT: readnone +; CHECK: define <4 x i32> @test12_2 +define <4 x i32> @test12_2(<4 x i32*> %ptrs) { + %res = call <4 x i32> @test12_1(<4 x i32*> %ptrs) + ret <4 x i32> %res +} |