[llvm] [SPIRV] Only emit MaxByteOffset decoration for SPIR-V 1.1 or later (PR #228973)

via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 4 21:54:36 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-spir-v

Author: Alexander Shaposhnikov (alexander-shaposhnikov)

<details>
<summary>Changes</summary>

The MaxByteOffset decoration (45) was introduced in SPIR-V 1.1. 
Guard the MaxByteOffset decoration emission in lowerFormalArguments on ST->isAtLeastSPIRVVer(VersionTuple(1, 1)), matching SPIRV-LLVM-Translator.

---
Full diff: https://github.com/llvm/llvm-project/pull/228973.diff


2 Files Affected:

- (modified) llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp (+1-1) 
- (modified) llvm/test/CodeGen/SPIRV/transcoding/DecorationMaxByteOffset.ll (+10-1) 


``````````diff
diff --git a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
index 330704d0f885779..f46c7c663999def 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
@@ -268,7 +268,7 @@ bool SPIRVCallLowering::lowerFormalArguments(MachineIRBuilder &MIRBuilder,
         buildOpName(VRegs[i][0], Arg.getName(), MIRBuilder);
       if (isPointerTyOrWrapper(Arg.getType())) {
         auto DerefBytes = static_cast<unsigned>(Arg.getDereferenceableBytes());
-        if (DerefBytes != 0)
+        if (DerefBytes != 0 && ST->isAtLeastSPIRVVer(VersionTuple(1, 1)))
           buildOpDecorate(VRegs[i][0], MIRBuilder,
                           SPIRV::Decoration::MaxByteOffset, {DerefBytes});
       }
diff --git a/llvm/test/CodeGen/SPIRV/transcoding/DecorationMaxByteOffset.ll b/llvm/test/CodeGen/SPIRV/transcoding/DecorationMaxByteOffset.ll
index fec55c5c89a713f..cfc4127a7458db7 100644
--- a/llvm/test/CodeGen/SPIRV/transcoding/DecorationMaxByteOffset.ll
+++ b/llvm/test/CodeGen/SPIRV/transcoding/DecorationMaxByteOffset.ll
@@ -1,5 +1,11 @@
-; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: llc -verify-machineinstrs -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 %}
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64v1.1-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64v1.1-unknown-unknown %s -o - -filetype=obj | spirv-val --target-env spv1.1 %}
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32v1.0-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV_1_0
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32v1.0-unknown-unknown %s -o - -filetype=obj | spirv-val --target-env spv1.0 %}
+; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64v1.0-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV_1_0
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64v1.0-unknown-unknown %s -o - -filetype=obj | spirv-val --target-env spv1.0 %}
 
 ; CHECK-SPIRV:     OpName %[[#PTR_ID:]] "ptr"
 ; CHECK-SPIRV:     OpName %[[#PTR2_ID:]] "ptr2"
@@ -10,6 +16,9 @@
 ; CHECK-SPIRV:     %[[#PTR_ID]] = OpFunctionParameter %[[#CHAR_PTR_T]]
 ; CHECK-SPIRV:     %[[#PTR2_ID]] = OpFunctionParameter %[[#CHAR_PTR_T]]
 
+; CHECK-SPIRV_1_0-NOT: MaxByteOffset
+; CHECK-SPIRV_1_0:     OpFunctionParameter
+
 define spir_kernel void @worker(ptr addrspace(3) dereferenceable(12) %ptr) {
 entry:
   %ptr.addr = alloca ptr addrspace(3), align 4

``````````

</details>


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


More information about the llvm-commits mailing list