Skip to content

Commit 14e010b

Browse files
gbaraldiclaude
andcommitted
Add tests for kernarg addrspace(4) rewriting on GCN
Verify that byref struct kernel parameters are rewritten to ptr addrspace(4) in IR and that the backend emits s_load (not flat_load) for struct field access. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 6e80b8b commit 14e010b

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

test/gcn.jl

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,32 @@ end
3737
end
3838
end
3939

40+
@testset "kernarg address space for byref parameters" begin
41+
mod = @eval module $(gensym())
42+
struct MyStruct
43+
x::Float64
44+
y::Float64
45+
end
46+
47+
function kernel(s::MyStruct)
48+
s.x + s.y
49+
return
50+
end
51+
end
52+
53+
# byref struct params should be ptr addrspace(4) in kernel IR
54+
@test @filecheck begin
55+
check"CHECK: define amdgpu_kernel void @_Z6kernel8MyStruct(ptr addrspace(4)"
56+
GCN.code_llvm(mod.kernel, Tuple{mod.MyStruct}; dump_module=true, kernel=true)
57+
end
58+
59+
# non-kernel should NOT have addrspace(4)
60+
@test @filecheck begin
61+
check"CHECK-NOT: addrspace(4)"
62+
GCN.code_llvm(mod.kernel, Tuple{mod.MyStruct}; dump_module=true, kernel=false)
63+
end
64+
end
65+
4066
@testset "https://github.com/JuliaGPU/AMDGPU.jl/issues/846" begin
4167
ir, rt = GCN.code_typed((Tuple{Tuple{Val{4}}, Tuple{Float32}},); always_inline=true) do t
4268
t[1]
@@ -49,6 +75,26 @@ end
4975
############################################################################################
5076
@testset "assembly" begin
5177

78+
@testset "s_load for kernarg struct access" begin
79+
mod = @eval module $(gensym())
80+
struct MyStruct
81+
x::Float64
82+
y::Float64
83+
end
84+
85+
function kernel(s::MyStruct, out::Ptr{Float64})
86+
unsafe_store!(out, s.x + s.y)
87+
return
88+
end
89+
end
90+
91+
@test @filecheck begin
92+
check"CHECK: s_load_dwordx"
93+
check"CHECK-NOT: flat_load"
94+
GCN.code_native(mod.kernel, Tuple{mod.MyStruct, Ptr{Float64}}; kernel=true)
95+
end
96+
end
97+
5298
@testset "skip scalar trap" begin
5399
mod = @eval module $(gensym())
54100
workitem_idx_x() = ccall("llvm.amdgcn.workitem.id.x", llvmcall, Int32, ())

0 commit comments

Comments
 (0)