diff options
author | Bjorn Steinbrink <bsteinbr@gmail.com> | 2017-12-19 08:46:46 +0000 |
---|---|---|
committer | Bjorn Steinbrink <bsteinbr@gmail.com> | 2017-12-19 08:46:46 +0000 |
commit | 9cf2067cb7377366a10539b543f07daca7d1c362 (patch) | |
tree | 9b16e705c39ce99e875345bd5c7d875f958f4e96 /test/Analysis | |
parent | fe2aed677b2236af04357ef7991e04f3bc2c76b6 (diff) |
Treat sret arguments as being dereferenceable in getPointerDereferenceableBytes()
Reviewers: rnk, hfinkel, efriedma
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D41355
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321061 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis')
-rw-r--r-- | test/Analysis/ValueTracking/memory-dereferenceable.ll | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/test/Analysis/ValueTracking/memory-dereferenceable.ll b/test/Analysis/ValueTracking/memory-dereferenceable.ll index ca16a266123..8e474e5a95c 100644 --- a/test/Analysis/ValueTracking/memory-dereferenceable.ll +++ b/test/Analysis/ValueTracking/memory-dereferenceable.ll @@ -20,7 +20,8 @@ declare i32* @foo() @globalptr.align16 = external global i8, align 16 ; CHECK-LABEL: 'test' -define void @test(i32 addrspace(1)* dereferenceable(8) %dparam, +define void @test(%struct.A* sret %result, + i32 addrspace(1)* dereferenceable(8) %dparam, i8 addrspace(1)* dereferenceable(32) align 1 %dparam.align1, i8 addrspace(1)* dereferenceable(32) align 16 %dparam.align16, i8* byval %i8_byval, @@ -53,6 +54,15 @@ entry: %baa_cast = bitcast i8* %big_array_alloca to i32* %baa_load = load i32, i32* %baa_cast + ; Loads from sret arguments +; CHECK: %sret_gep{{.*}}(aligned) + %sret_gep = getelementptr inbounds %struct.A, %struct.A* %result, i64 0, i32 1, i64 2 + load i8, i8* %sret_gep + +; CHECK-NOT: %sret_gep_outside + %sret_gep_outside = getelementptr %struct.A, %struct.A* %result, i64 0, i32 1, i64 7 + load i8, i8* %sret_gep_outside + ; CHECK: %dparam{{.*}}(aligned) %load3 = load i32, i32 addrspace(1)* %dparam |