xref: /llvm-project/llvm/test/Transforms/FunctionAttrs/make-buffer-rsrc.ll (revision 29441e4f5fa5f5c7709f7cf180815ba97f611297)
193f8e52dSKrzysztof Drewniak; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes
293f8e52dSKrzysztof Drewniak; RUN: opt -passes=function-attrs -S < %s | FileCheck --check-prefixes=COMMON,FNATTRS %s
393f8e52dSKrzysztof Drewniak; RUN: opt -passes=attributor-light -S < %s | FileCheck --check-prefixes=COMMON,ATTRIBUTOR %s
493f8e52dSKrzysztof Drewniak
593f8e52dSKrzysztof Drewniak;; target triple = "amdgcn-amd-amdhsa"
693f8e52dSKrzysztof Drewniaktarget datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-p7:160:256:256:32-p8:128:128-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-ni:7:8"
793f8e52dSKrzysztof Drewniak
893f8e52dSKrzysztof Drewniakdefine amdgpu_kernel void @test_make_buffer_rsrc(ptr %p, ptr %q) {
94358e6e0SYingwei Zheng; FNATTRS: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
1093f8e52dSKrzysztof Drewniak; FNATTRS-LABEL: define {{[^@]+}}@test_make_buffer_rsrc
11*29441e4fSNikita Popov; FNATTRS-SAME: (ptr readonly captures(none) [[P:%.*]], ptr writeonly captures(none) [[Q:%.*]]) #[[ATTR0:[0-9]+]] {
1293f8e52dSKrzysztof Drewniak; FNATTRS-NEXT:    [[P_RSRC:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[P]], i16 0, i32 4, i32 822243328)
1393f8e52dSKrzysztof Drewniak; FNATTRS-NEXT:    [[Q_RSRC:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[Q]], i16 0, i32 4, i32 822243328)
1493f8e52dSKrzysztof Drewniak; FNATTRS-NEXT:    [[V:%.*]] = call i8 @llvm.amdgcn.raw.ptr.buffer.load.i8(ptr addrspace(8) [[P_RSRC]], i32 0, i32 0, i32 0)
1593f8e52dSKrzysztof Drewniak; FNATTRS-NEXT:    call void @llvm.amdgcn.raw.ptr.buffer.store.i8(i8 [[V]], ptr addrspace(8) [[Q_RSRC]], i32 0, i32 0, i32 0)
1693f8e52dSKrzysztof Drewniak; FNATTRS-NEXT:    ret void
1793f8e52dSKrzysztof Drewniak;
1893f8e52dSKrzysztof Drewniak; ATTRIBUTOR: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: readwrite)
1993f8e52dSKrzysztof Drewniak; ATTRIBUTOR-LABEL: define {{[^@]+}}@test_make_buffer_rsrc
20*29441e4fSNikita Popov; ATTRIBUTOR-SAME: (ptr nofree readonly captures(none) [[P:%.*]], ptr nofree writeonly captures(none) [[Q:%.*]]) #[[ATTR0:[0-9]+]] {
2193f8e52dSKrzysztof Drewniak; ATTRIBUTOR-NEXT:    [[P_RSRC:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[P]], i16 0, i32 4, i32 822243328) #[[ATTR4:[0-9]+]]
2293f8e52dSKrzysztof Drewniak; ATTRIBUTOR-NEXT:    [[Q_RSRC:%.*]] = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr [[Q]], i16 0, i32 4, i32 822243328) #[[ATTR4]]
23*29441e4fSNikita Popov; ATTRIBUTOR-NEXT:    [[V:%.*]] = call i8 @llvm.amdgcn.raw.ptr.buffer.load.i8(ptr addrspace(8) readonly captures(none) [[P_RSRC]], i32 0, i32 0, i32 0) #[[ATTR5:[0-9]+]]
24*29441e4fSNikita Popov; ATTRIBUTOR-NEXT:    call void @llvm.amdgcn.raw.ptr.buffer.store.i8(i8 [[V]], ptr addrspace(8) writeonly captures(none) [[Q_RSRC]], i32 0, i32 0, i32 0) #[[ATTR6:[0-9]+]]
2593f8e52dSKrzysztof Drewniak; ATTRIBUTOR-NEXT:    ret void
2693f8e52dSKrzysztof Drewniak;
2793f8e52dSKrzysztof Drewniak  %p.rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr %p, i16 0, i32 4, i32 822243328)
2893f8e52dSKrzysztof Drewniak  %q.rsrc = call ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr %q, i16 0, i32 4, i32 822243328)
2993f8e52dSKrzysztof Drewniak  %v = call i8 @llvm.amdgcn.raw.ptr.buffer.load.i8(ptr addrspace(8) %p.rsrc, i32 0, i32 0, i32 0)
3093f8e52dSKrzysztof Drewniak  call void @llvm.amdgcn.raw.ptr.buffer.store.i8(i8 %v, ptr addrspace(8) %q.rsrc, i32 0, i32 0, i32 0)
3193f8e52dSKrzysztof Drewniak  ret void
3293f8e52dSKrzysztof Drewniak}
3393f8e52dSKrzysztof Drewniak
3493f8e52dSKrzysztof Drewniak; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
3593f8e52dSKrzysztof Drewniakdeclare ptr addrspace(8) @llvm.amdgcn.make.buffer.rsrc.p0(ptr readnone, i16, i32, i32) #0
3693f8e52dSKrzysztof Drewniak
3793f8e52dSKrzysztof Drewniak; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: read)
3893f8e52dSKrzysztof Drewniakdeclare i8 @llvm.amdgcn.raw.ptr.buffer.load.i8(ptr addrspace(8) nocapture readonly, i32, i32, i32 immarg) #1
3993f8e52dSKrzysztof Drewniak
4093f8e52dSKrzysztof Drewniak; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: write)
4193f8e52dSKrzysztof Drewniakdeclare void @llvm.amdgcn.raw.ptr.buffer.store.i8(i8, ptr addrspace(8) nocapture writeonly, i32, i32, i32 immarg) #2
4293f8e52dSKrzysztof Drewniak
4393f8e52dSKrzysztof Drewniakattributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
4493f8e52dSKrzysztof Drewniakattributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: read) }
4593f8e52dSKrzysztof Drewniakattributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: write) }
4693f8e52dSKrzysztof Drewniak;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
4793f8e52dSKrzysztof Drewniak; COMMON: {{.*}}
48