[llvm] [SPIR-V] Fix crash in SPIRVEmitIntrinsics for llvm.assume with operand bundles (PR #185840)
Arseniy Obolenskiy via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 11 05:18:57 PDT 2026
https://github.com/aobolensk updated https://github.com/llvm/llvm-project/pull/185840
>From bdbb72bf75186d015670ffbea5db7235b480e6ee Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Wed, 11 Mar 2026 10:13:04 +0100
Subject: [PATCH 1/2] [SPIR-V] Fix crash in SPIRVEmitIntrinsics for llvm.assume
with operand bundles
---
llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp | 5 ++--
llvm/test/CodeGen/SPIRV/assume.ll | 24 +++++++++++++++----
2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
index c84f41dada005..4931b16d0f40c 100644
--- a/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVEmitIntrinsics.cpp
@@ -2707,8 +2707,9 @@ void SPIRVEmitIntrinsics::processInstrAfterVisit(Instruction *I,
!(isa<ConstantData>(Op) || isa<ConstantExpr>(Op)))
continue;
unsigned OpNo = Op.getOperandNo();
- if (II && ((II->getIntrinsicID() == Intrinsic::spv_gep && OpNo == 0) ||
- (II->paramHasAttr(OpNo, Attribute::ImmArg))))
+ if (II &&
+ ((II->getIntrinsicID() == Intrinsic::spv_gep && OpNo == 0) ||
+ (OpNo < II->arg_size() && II->paramHasAttr(OpNo, Attribute::ImmArg))))
continue;
if (!BPrepared) {
diff --git a/llvm/test/CodeGen/SPIRV/assume.ll b/llvm/test/CodeGen/SPIRV/assume.ll
index fbf12ef184a89..958c774169656 100644
--- a/llvm/test/CodeGen/SPIRV/assume.ll
+++ b/llvm/test/CodeGen/SPIRV/assume.ll
@@ -2,19 +2,35 @@
; RUN: llc -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_expect_assume < %s | FileCheck --check-prefixes=EXT,CHECK %s
; 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
+; RUN: llc -mtriple=spirv64-amd-amdhsa < %s | FileCheck --check-prefixes=EXT,CHECK %s
+; RUN: llc -mtriple=spirv64-amd-amdhsa --spirv-ext=-SPV_KHR_expect_assume < %s | FileCheck --check-prefixes=NOEXT,CHECK %s
; EXT: OpCapability ExpectAssumeKHR
-; EXT-NEXT: OpExtension "SPV_KHR_expect_assume"
+; EXT: 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: %[[#FUNC:]] = OpFunction
+; CHECK: %[[#P:]] = OpFunctionParameter
+; CHECK: %[[#LABEL:]] = OpLabel
+; EXT: OpAssumeTrueKHR %[[#TRUE:]]
+; 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) ]
+ ret void
+}
>From 12d2ba4940acae95df28896c53085754711dca82 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <arseniy.obolenskiy at amd.com>
Date: Wed, 11 Mar 2026 13:18:45 +0100
Subject: [PATCH 2/2] Address review comments
---
llvm/test/CodeGen/SPIRV/assume.ll | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/llvm/test/CodeGen/SPIRV/assume.ll b/llvm/test/CodeGen/SPIRV/assume.ll
index 958c774169656..b65724e252643 100644
--- a/llvm/test/CodeGen/SPIRV/assume.ll
+++ b/llvm/test/CodeGen/SPIRV/assume.ll
@@ -2,11 +2,9 @@
; RUN: llc -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_expect_assume < %s | FileCheck --check-prefixes=EXT,CHECK %s
; 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
-; RUN: llc -mtriple=spirv64-amd-amdhsa < %s | FileCheck --check-prefixes=EXT,CHECK %s
-; RUN: llc -mtriple=spirv64-amd-amdhsa --spirv-ext=-SPV_KHR_expect_assume < %s | FileCheck --check-prefixes=NOEXT,CHECK %s
-; EXT: OpCapability ExpectAssumeKHR
-; EXT: 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"
More information about the llvm-commits
mailing list