mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 12:33:33 +02:00
aeeb963599
llvm.invariant.group.barrier may accept pointers to arbitrary address space. This patch let it accept pointers to i8 in any address space and returns pointer to i8 in the same address space. Differential Revision: https://reviews.llvm.org/D39973 llvm-svn: 318413
27 lines
1.2 KiB
LLVM
27 lines
1.2 KiB
LLVM
; RUN: llc -amdgpu-scalarize-global-loads=false -march=amdgcn -mtriple=amdgcn---amdgiz -mattr=+promote-alloca -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
|
|
target datalayout = "A5"
|
|
|
|
declare {}* @llvm.invariant.start.p5i8(i64, i8 addrspace(5)* nocapture) #0
|
|
declare void @llvm.invariant.end.p5i8({}*, i64, i8 addrspace(5)* nocapture) #0
|
|
declare i8 addrspace(5)* @llvm.invariant.group.barrier.p5i8(i8 addrspace(5)*) #1
|
|
|
|
; GCN-LABEL: {{^}}use_invariant_promotable_lds:
|
|
; GCN: buffer_load_dword
|
|
; GCN: ds_write_b32
|
|
define amdgpu_kernel void @use_invariant_promotable_lds(i32 addrspace(1)* %arg) #2 {
|
|
bb:
|
|
%tmp = alloca i32, align 4, addrspace(5)
|
|
%tmp1 = bitcast i32 addrspace(5)* %tmp to i8 addrspace(5)*
|
|
%tmp2 = getelementptr inbounds i32, i32 addrspace(1)* %arg, i64 1
|
|
%tmp3 = load i32, i32 addrspace(1)* %tmp2
|
|
store i32 %tmp3, i32 addrspace(5)* %tmp
|
|
%tmp4 = call {}* @llvm.invariant.start.p5i8(i64 4, i8 addrspace(5)* %tmp1) #0
|
|
call void @llvm.invariant.end.p5i8({}* %tmp4, i64 4, i8 addrspace(5)* %tmp1) #0
|
|
%tmp5 = call i8 addrspace(5)* @llvm.invariant.group.barrier.p5i8(i8 addrspace(5)* %tmp1) #1
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { argmemonly nounwind }
|
|
attributes #1 = { nounwind readnone }
|
|
attributes #2 = { nounwind }
|