[llvm] [SPIRV] Fix enqueue empty kernel (PR #187671)

Dmitry Sidorov via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 17 05:17:32 PDT 2026


================
@@ -1,389 +1,421 @@
-; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
-; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
-
-; TODO(#60133): Requires updates following opaque pointer migration.
-; XFAIL: *
-
-; CHECK-SPIRV-DAG: OpEntryPoint Kernel %[[#BlockKer1:]] "__device_side_enqueue_block_invoke_kernel"
-; CHECK-SPIRV-DAG: OpEntryPoint Kernel %[[#BlockKer2:]] "__device_side_enqueue_block_invoke_2_kernel"
-; CHECK-SPIRV-DAG: OpEntryPoint Kernel %[[#BlockKer3:]] "__device_side_enqueue_block_invoke_3_kernel"
-; CHECK-SPIRV-DAG: OpEntryPoint Kernel %[[#BlockKer4:]] "__device_side_enqueue_block_invoke_4_kernel"
-; CHECK-SPIRV-DAG: OpEntryPoint Kernel %[[#BlockKer5:]] "__device_side_enqueue_block_invoke_5_kernel"
-; CHECK-SPIRV-DAG: OpName %[[#BlockGlb1:]] "__block_literal_global"
-; CHECK-SPIRV-DAG: OpName %[[#BlockGlb2:]] "__block_literal_global.1"
-
-; CHECK-SPIRV-DAG: %[[#Int32Ty:]] = OpTypeInt 32
-; CHECK-SPIRV-DAG: %[[#Int8Ty:]] = OpTypeInt 8
-; CHECK-SPIRV-DAG: %[[#VoidTy:]] = OpTypeVoid
-; CHECK-SPIRV-DAG: %[[#Int8PtrGenTy:]] = OpTypePointer Generic %[[#Int8Ty]]
-; CHECK-SPIRV-DAG: %[[#EventTy:]] = OpTypeDeviceEvent
-; CHECK-SPIRV-DAG: %[[#EventPtrTy:]] = OpTypePointer Generic %[[#EventTy]]
-; CHECK-SPIRV-DAG: %[[#Int32LocPtrTy:]] = OpTypePointer Function %[[#Int32Ty]]
-; CHECK-SPIRV-DAG: %[[#BlockStructTy:]] = OpTypeStruct
-; CHECK-SPIRV-DAG: %[[#BlockStructLocPtrTy:]] = OpTypePointer Function %[[#BlockStructTy]]
-; CHECK-SPIRV-DAG: %[[#BlockTy1:]] = OpTypeFunction %[[#VoidTy]] %[[#Int8PtrGenTy]]
-; CHECK-SPIRV-DAG: %[[#BlockTy2:]] = OpTypeFunction %[[#VoidTy]] %[[#Int8PtrGenTy]]
-; CHECK-SPIRV-DAG: %[[#BlockTy3:]] = OpTypeFunction %[[#VoidTy]] %[[#Int8PtrGenTy]]
-
-; CHECK-SPIRV-DAG: %[[#ConstInt0:]] = OpConstantNull %[[#Int32Ty]]
-; CHECK-SPIRV-DAG: %[[#EventNull:]] = OpConstantNull %[[#EventPtrTy]]
-; CHECK-SPIRV-DAG: %[[#ConstInt21:]] = OpConstant %[[#Int32Ty]] 21{{$}}
-; CHECK-SPIRV-DAG: %[[#ConstInt8:]] = OpConstant %[[#Int32Ty]] 8{{$}}
-; CHECK-SPIRV-DAG: %[[#ConstInt24:]] = OpConstant %[[#Int32Ty]] 24{{$}}
-; CHECK-SPIRV-DAG: %[[#ConstInt12:]] = OpConstant %[[#Int32Ty]] 12{{$}}
-; CHECK-SPIRV-DAG: %[[#ConstInt2:]] = OpConstant %[[#Int32Ty]] 2{{$}}
-
-;; typedef struct {int a;} ndrange_t;
-;; #define NULL ((void*)0)
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK
+; RUN: %if spirv-tools %{ llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
+
+
+; CHECK: OpCapability Kernel
+; CHECK-DAG: %[[#typeInt64:]] = OpTypeInt 64 0
+; CHECK-DAG: %[[#typeInt32:]] = OpTypeInt 32 0
+; CHECK-DAG: %[[#typeInt8:]] = OpTypeInt 8 0
+
+; CHECK-DAG: %[[#Num0i32:]] = OpConstantNull %[[#typeInt32]]
+; CHECK-DAG: %[[#Num1i32:]] = OpConstant %[[#typeInt32]] 1 
+; CHECK-DAG: %[[#Num2i32:]] = OpConstant %[[#typeInt32]] 2
+; CHECK-DAG: %[[#Num3i32:]] = OpConstant %[[#typeInt32]] 3 
+; CHECK-DAG: %[[#Num8i32:]] = OpConstant %[[#typeInt32]] 8 
+; CHECK-DAG: %[[#Num29i32:]] = OpConstant %[[#typeInt32]] 29
+; CHECK-DAG: %[[#Num36i32:]] = OpConstant %[[#typeInt32]] 36
+
+; CHECK-DAG: %[[#Array3x64:]] = OpTypeArray %[[#typeInt64:]] %[[#Num3i32]]
+; CHECK-DAG: %[[#TypeNDRangeStruct:]] = OpTypeStruct %[[#typeInt32]] %[[#Array3x64]] %[[#Array3x64]] %[[#Array3x64]]
+
+; CHECK-DAG: %[[#pointerInt8:]] = OpTypePointer Generic %[[#typeInt8]]
+; CHECK-DAG: %[[#nullPtrInt8:]] = OpConstantNull %[[#pointerInt8]]
+; CHECK-DAG: %[[#nullArray3x64:]] = OpConstantNull %[[#Array3x64]]
+
+; CHECK-LABEL: ; -- Begin function test_spirv_enqueue_kernel
+; CHECK: %[[#]] = OpEnqueueKernel %[[#typeInt32]] %[[#]] %[[#Num0i32]] %[[#]] %[[#Num0i32]] %[[#nullPtrInt8]] %[[#nullPtrInt8]] %[[#]] %[[#]] %[[#Num8i32]] %[[#Num8i32]]
----------------
MrSidims wrote:

Also note, that WaitEvents and RetEvent must be typed as pointers to OpTypeDeviceEvent and not NULL as it's stated in the check.

https://github.com/llvm/llvm-project/pull/187671


More information about the llvm-commits mailing list