diff options
| author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2017-03-17 00:55:53 +0000 |
|---|---|---|
| committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2017-03-17 00:55:53 +0000 |
| commit | c4e4dcdf641ebe27b6c65e350d96c0f519dcbf7d (patch) | |
| tree | 60a625b84010dd57545f01b434cbc53dbcdcc8be /llvm/test/Transforms/RewriteStatepointsForGC | |
| parent | c6c4ec8099cfece8eb362c381796ba0905260720 (diff) | |
| download | bcm5719-llvm-c4e4dcdf641ebe27b6c65e350d96c0f519dcbf7d.tar.gz bcm5719-llvm-c4e4dcdf641ebe27b6c65e350d96c0f519dcbf7d.zip | |
[RSForGC] Handle vector GEPs
We were not handling getelemenptr instructions of vector type before.
Since getelemenptr instructions for vector types follow the same rule as
getelementptr instructions for non-vector types, we can just handle them
in the same way.
llvm-svn: 298028
Diffstat (limited to 'llvm/test/Transforms/RewriteStatepointsForGC')
| -rw-r--r-- | llvm/test/Transforms/RewriteStatepointsForGC/base-vector.ll | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/test/Transforms/RewriteStatepointsForGC/base-vector.ll b/llvm/test/Transforms/RewriteStatepointsForGC/base-vector.ll index 9026275cf68..c34462f4516 100644 --- a/llvm/test/Transforms/RewriteStatepointsForGC/base-vector.ll +++ b/llvm/test/Transforms/RewriteStatepointsForGC/base-vector.ll @@ -88,6 +88,7 @@ entry: } declare void @use(i64 addrspace(1)*) "gc-leaf-function" +declare void @use_vec(<4 x i64 addrspace(1)*>) "gc-leaf-function" define void @test5(i1 %cnd, i64 addrspace(1)* %obj) gc "statepoint-example" { ; CHECK-LABEL: @test5 @@ -245,3 +246,17 @@ next: ret i64 addrspace(1)* %bdv } declare void @do_safepoint() + +define void @test11(<4 x i64 addrspace(1)*> %vec1) gc "statepoint-example" { +; CHECK-LABEL: @test11( +; CHECK: @llvm.experimental.gc.statepoint.p0f_isVoidf{{.*}}<4 x i64 addrspace(1)*> %vec1) +; CHECK: %vec1.relocated = call coldcc <4 x i8 addrspace(1)*> @llvm.experimental.gc.relocate.v4p1i8 +; CHECK: %vec1.relocated.casted = bitcast <4 x i8 addrspace(1)*> %vec1.relocated to <4 x i64 addrspace(1)*> +; CHECK: %vec2.remat = getelementptr i64, <4 x i64 addrspace(1)*> %vec1.relocated.casted, i32 1024 +; CHECK: call void @use_vec(<4 x i64 addrspace(1)*> %vec2.remat) +entry: + %vec2 = getelementptr i64, <4 x i64 addrspace(1)*> %vec1, i32 1024 + call void @do_safepoint() [ "deopt"(i32 0, i32 -1, i32 0, i32 0, i32 0) ] + call void @use_vec(<4 x i64 addrspace(1) *> %vec2) + ret void +} |

