[llvm] d56ee7a - [AMDGPU][GlobalISel] Lower spir_kernel formal arguments as kernel args (#225634)

via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 23 03:15:14 PDT 2026


Author: Arseniy Obolenskiy
Date: 2026-09-23T12:15:08+02:00
New Revision: d56ee7ad2a41a46376eb4917e3c3945e9ec7ae2d

URL: https://github.com/llvm/llvm-project/commit/d56ee7ad2a41a46376eb4917e3c3945e9ec7ae2d
DIFF: https://github.com/llvm/llvm-project/commit/d56ee7ad2a41a46376eb4917e3c3945e9ec7ae2d.diff

LOG: [AMDGPU][GlobalISel] Lower spir_kernel formal arguments as kernel args (#225634)

Argument lowering matched only AMDGPU_KERNEL, so spir_kernel fell into
the normal calling convention path and failed, unlike SelectionDAG

Added: 
    

Modified: 
    llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
    llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-amdgpu_kernel.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
index 2a78237cf7e20..369719b474173 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUCallLowering.cpp
@@ -655,7 +655,7 @@ bool AMDGPUCallLowering::lowerFormalArguments(
   // The infrastructure for normal calling convention lowering is essentially
   // useless for kernels. We want to avoid any kind of legalization or argument
   // splitting.
-  if (CC == CallingConv::AMDGPU_KERNEL)
+  if (AMDGPU::isKernel(CC))
     return lowerFormalArgumentsKernel(B, F, VRegs);
 
   const bool IsGraphics = AMDGPU::isGraphics(CC);

diff  --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-amdgpu_kernel.ll b/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-amdgpu_kernel.ll
index 2e3504bc8b269..75cb59e7d75f4 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-amdgpu_kernel.ll
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-amdgpu_kernel.ll
@@ -2102,3 +2102,35 @@ define amdgpu_kernel void @v2p1i8_in_struct_arg({ <2 x ptr addrspace(1)>, <2 x p
   store { <2 x ptr addrspace(1)>, <2 x ptr addrspace(3)> } %arg, ptr addrspace(1) poison
   ret void
 }
+
+define spir_kernel void @spir_kernel_i32_arg(ptr addrspace(1) nocapture %out, i32 %in) nounwind {
+  ; HSA-VI-LABEL: name: spir_kernel_i32_arg
+  ; HSA-VI: bb.1 (%ir-block.0):
+  ; HSA-VI-NEXT:   liveins: $sgpr8_sgpr9
+  ; HSA-VI-NEXT: {{  $}}
+  ; HSA-VI-NEXT:   [[COPY:%[0-9]+]]:_(p4) = COPY $sgpr8_sgpr9
+  ; HSA-VI-NEXT:   [[C:%[0-9]+]]:_(i64) = G_CONSTANT i64 0
+  ; HSA-VI-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY]], [[C]](i64)
+  ; HSA-VI-NEXT:   [[LOAD:%[0-9]+]]:_(p1) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (p1) from constant-pool, align 16, addrspace 4)
+  ; HSA-VI-NEXT:   [[C1:%[0-9]+]]:_(i64) = G_CONSTANT i64 8
+  ; HSA-VI-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY]], [[C1]](i64)
+  ; HSA-VI-NEXT:   [[LOAD1:%[0-9]+]]:_(i32) = G_LOAD [[PTR_ADD1]](p4) :: (dereferenceable invariant load (i32) from constant-pool, align 8, addrspace 4)
+  ; HSA-VI-NEXT:   G_STORE [[LOAD1]](i32), [[LOAD]](p1) :: (store (i32) into %ir.out, addrspace 1)
+  ; HSA-VI-NEXT:   S_ENDPGM 0
+  ;
+  ; LEGACY-MESA-VI-LABEL: name: spir_kernel_i32_arg
+  ; LEGACY-MESA-VI: bb.1 (%ir-block.0):
+  ; LEGACY-MESA-VI-NEXT:   liveins: $sgpr4_sgpr5
+  ; LEGACY-MESA-VI-NEXT: {{  $}}
+  ; LEGACY-MESA-VI-NEXT:   [[COPY:%[0-9]+]]:_(p4) = COPY $sgpr4_sgpr5
+  ; LEGACY-MESA-VI-NEXT:   [[C:%[0-9]+]]:_(i64) = G_CONSTANT i64 36
+  ; LEGACY-MESA-VI-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY]], [[C]](i64)
+  ; LEGACY-MESA-VI-NEXT:   [[LOAD:%[0-9]+]]:_(p1) = G_LOAD [[PTR_ADD]](p4) :: (dereferenceable invariant load (p1) from constant-pool, align 4, addrspace 4)
+  ; LEGACY-MESA-VI-NEXT:   [[C1:%[0-9]+]]:_(i64) = G_CONSTANT i64 44
+  ; LEGACY-MESA-VI-NEXT:   [[PTR_ADD1:%[0-9]+]]:_(p4) = G_PTR_ADD [[COPY]], [[C1]](i64)
+  ; LEGACY-MESA-VI-NEXT:   [[LOAD1:%[0-9]+]]:_(i32) = G_LOAD [[PTR_ADD1]](p4) :: (dereferenceable invariant load (i32) from constant-pool, addrspace 4)
+  ; LEGACY-MESA-VI-NEXT:   G_STORE [[LOAD1]](i32), [[LOAD]](p1) :: (store (i32) into %ir.out, addrspace 1)
+  ; LEGACY-MESA-VI-NEXT:   S_ENDPGM 0
+  store i32 %in, ptr addrspace(1) %out, align 4
+  ret void
+}


        


More information about the llvm-commits mailing list