| ; RUN: opt -S -mtriple=amdgpu-amd-amdhsa -amdgpu-enable-object-linking -passes=amdgpu-lower-exec-sync,amdgpu-lower-module-lds < %s | FileCheck %s |
| |
| ; Verify that with object linking enabled: |
| ; 1. AMDGPULowerExecSync externalizes named barriers and emits |
| ; amdgpu.named_barrier.uses metadata with (barrier, func...) format |
| ; 2. AMDGPULowerModuleLDS does not handle named barriers at all |
| ; 3. amdgpu.lds.uses does NOT contain barrier entries |
| |
| @bar = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison |
| @lds = internal addrspace(3) global [4 x i32] poison, align 4 |
| |
| ; Internal named barrier becomes external with a module-unique hash suffix. |
| ; CHECK: @[[BAR:__amdgpu_named_barrier\.bar\.[a-f0-9]+]] = external dso_local addrspace(3) global target("amdgcn.named.barrier", 0) |
| ; CHECK-NOT: !absolute_symbol |
| ; Regular LDS is packed into the per-function struct (external, for linker). |
| ; CHECK: @__amdgpu_lds.kernel = external dso_local addrspace(3) global %__amdgpu_lds.kernel.t, align 16 |
| |
| define amdgpu_kernel void @kernel(i32 %idx) { |
| ; CHECK-LABEL: define amdgpu_kernel void @kernel( |
| ; CHECK: call void @llvm.amdgcn.s.barrier.join(ptr addrspace(3) @[[BAR]]) |
| ; CHECK: call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @[[BAR]], i32 3) |
| call void @llvm.amdgcn.s.barrier.join(ptr addrspace(3) @bar) |
| call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar, i32 3) |
| call void @llvm.amdgcn.s.barrier.wait(i16 1) |
| %gep = getelementptr [4 x i32], ptr addrspace(3) @lds, i32 0, i32 %idx |
| store i32 42, ptr addrspace(3) %gep, align 4 |
| ret void |
| } |
| |
| ; Named barrier metadata: (barrier_sym, func1, ...) -- emitted by ExecSync. |
| ; CHECK-DAG: !amdgpu.named_barrier.uses = !{[[BAR_MD:![0-9]+]]} |
| ; CHECK-DAG: [[BAR_MD]] = !{ptr addrspace(3) @[[BAR]], ptr @kernel} |
| ; LDS metadata must have exactly one entry (the LDS struct), no barrier entries. |
| ; CHECK-DAG: !amdgpu.lds.uses = !{[[LDS_MD:![0-9]+]]} |
| ; CHECK-DAG: [[LDS_MD]] = !{ptr @kernel, ptr addrspace(3) @__amdgpu_lds.kernel} |