mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
[NVPTX] Remove NoCapture from address space conversion intrinsics. NoCapture is not valid in this case, and was causing incorrect optimizations.
llvm-svn: 174896
This commit is contained in:
parent
2e8c1799a0
commit
f41b45202c
@ -815,36 +815,36 @@ def int_nvvm_ldu_global_p : Intrinsic<[llvm_anyptr_ty],
|
||||
// of pointer to another type of pointer, while the address space remains
|
||||
// the same.
|
||||
def int_nvvm_ptr_local_to_gen: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
|
||||
[llvm_anyptr_ty], [IntrNoMem],
|
||||
"llvm.nvvm.ptr.local.to.gen">;
|
||||
def int_nvvm_ptr_shared_to_gen: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
|
||||
[llvm_anyptr_ty], [IntrNoMem],
|
||||
"llvm.nvvm.ptr.shared.to.gen">;
|
||||
def int_nvvm_ptr_global_to_gen: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
|
||||
[llvm_anyptr_ty], [IntrNoMem],
|
||||
"llvm.nvvm.ptr.global.to.gen">;
|
||||
def int_nvvm_ptr_constant_to_gen: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
|
||||
[llvm_anyptr_ty], [IntrNoMem],
|
||||
"llvm.nvvm.ptr.constant.to.gen">;
|
||||
|
||||
def int_nvvm_ptr_gen_to_global: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
|
||||
[llvm_anyptr_ty], [IntrNoMem],
|
||||
"llvm.nvvm.ptr.gen.to.global">;
|
||||
def int_nvvm_ptr_gen_to_shared: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
|
||||
[llvm_anyptr_ty], [IntrNoMem],
|
||||
"llvm.nvvm.ptr.gen.to.shared">;
|
||||
def int_nvvm_ptr_gen_to_local: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
|
||||
[llvm_anyptr_ty], [IntrNoMem],
|
||||
"llvm.nvvm.ptr.gen.to.local">;
|
||||
def int_nvvm_ptr_gen_to_constant: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty], [IntrNoMem, NoCapture<0>],
|
||||
[llvm_anyptr_ty], [IntrNoMem],
|
||||
"llvm.nvvm.ptr.gen.to.constant">;
|
||||
|
||||
// Used in nvvm internally to help address space opt and ptx code generation
|
||||
// This is for params that are passed to kernel functions by pointer by-val.
|
||||
def int_nvvm_ptr_gen_to_param: Intrinsic<[llvm_anyptr_ty],
|
||||
[llvm_anyptr_ty],
|
||||
[IntrNoMem, NoCapture<0>],
|
||||
[IntrNoMem],
|
||||
"llvm.nvvm.ptr.gen.to.param">;
|
||||
|
||||
// Move intrinsics, used in nvvm internally
|
||||
|
21
test/CodeGen/NVPTX/intrin-nocapture.ll
Normal file
21
test/CodeGen/NVPTX/intrin-nocapture.ll
Normal file
@ -0,0 +1,21 @@
|
||||
; RUN: opt < %s -O3 -S | FileCheck %s
|
||||
|
||||
; Address space intrinsics were erroneously marked NoCapture, leading to bad
|
||||
; optimizations (such as the store below being eliminated as dead code). This
|
||||
; test makes sure we don't regress.
|
||||
|
||||
declare void @foo(i32 addrspace(1)*)
|
||||
|
||||
declare i32 addrspace(1)* @llvm.nvvm.ptr.gen.to.global.p1i32.p0i32(i32*)
|
||||
|
||||
; CHECK: @bar
|
||||
define void @bar() {
|
||||
%t1 = alloca i32
|
||||
; CHECK: call i32 addrspace(1)* @llvm.nvvm.ptr.gen.to.global.p1i32.p0i32(i32* %t1)
|
||||
; CHECK-NEXT: store i32 10, i32* %t1
|
||||
%t2 = call i32 addrspace(1)* @llvm.nvvm.ptr.gen.to.global.p1i32.p0i32(i32* %t1)
|
||||
store i32 10, i32* %t1
|
||||
call void @foo(i32 addrspace(1)* %t2)
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user