[llvm] [SPIR-V] Fix crash in SPIRVEmitIntrinsics for llvm.assume with operand bundles (PR #185840)

Juan Manuel Martinez CaamaƱo via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 11 06:28:40 PDT 2026


================
@@ -3,18 +3,32 @@
 ; RUN: llc -mtriple=spirv32-unknown-unknown < %s | FileCheck --check-prefixes=NOEXT,CHECK %s
 ; RUN: llc -mtriple=spirv64-unknown-unknown < %s | FileCheck --check-prefixes=NOEXT,CHECK %s
 
-; EXT:        OpCapability ExpectAssumeKHR
-; EXT-NEXT:   OpExtension "SPV_KHR_expect_assume"
+; EXT-DAG:    OpCapability ExpectAssumeKHR
+; EXT-DAG:    OpExtension "SPV_KHR_expect_assume"
 ; NOEXT-NOT:  OpCapability ExpectAssumeKHR
 ; NOEXT-NOT:  OpExtension "SPV_KHR_expect_assume"
 
 declare void @llvm.assume(i1)
 
-; CHECK-DAG:  %8 = OpIEqual %3 %5 %6
-; EXT:        OpAssumeTrueKHR %8
-; NOEXT-NOT:  OpAssumeTrueKHR %8
+; CHECK:      %[[#X:]] = OpFunctionParameter
+; CHECK:      %[[#Y:]] = OpFunctionParameter
+; CHECK:      %[[#CMP:]] = OpIEqual %[[#]] %[[#X]] %[[#Y]]
+; EXT:        OpAssumeTrueKHR %[[#CMP]]
+; NOEXT-NOT:  OpAssumeTrueKHR
 define i1 @assumeeq(i32 %x, i32 %y) {
     %cmp = icmp eq i32 %x, %y
     call void @llvm.assume(i1 %cmp)
     ret i1 %cmp
 }
+
+; CHECK:      %[[#]] = OpFunction
+; CHECK:      %[[#]] = OpFunctionParameter
+; CHECK:      %[[#]] = OpLabel
+; EXT:        OpAssumeTrueKHR %[[#]]
+; NOEXT-NOT:  OpAssumeTrueKHR
+; CHECK:      OpReturn
+; CHECK:      OpFunctionEnd
+define void @assume_with_operand_bundles(ptr %p) {
+    call void @llvm.assume(i1 true) [ "align"(ptr %p, i64 64), "nonnull"(ptr %p) ]
----------------
jmmartinez wrote:

Is the operand bundle info lowered somehow or does it get lost? A comment to clarify what's happening (and maybe filing an issue) would be enough for me.

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


More information about the llvm-commits mailing list