[Mlir-commits] [mlir] [mlir][SPIR-V] Serialize BufferBlock struct decoration (PR #202870)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Jun 10 00:03:06 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir
Author: Arseniy Obolenskiy (aobolensk)
<details>
<summary>Changes</summary>
Add BufferBlock to the no-operand decoration switch
---
Full diff: https://github.com/llvm/llvm-project/pull/202870.diff
2 Files Affected:
- (modified) mlir/lib/Target/SPIRV/Serialization/Serializer.cpp (+3-1)
- (modified) mlir/test/Target/SPIRV/struct.mlir (+3)
``````````diff
diff --git a/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp b/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
index 136a7f27a6e1d..455e4af1a5e80 100644
--- a/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
+++ b/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
@@ -418,6 +418,7 @@ LogicalResult Serializer::processDecorationAttr(Location loc, uint32_t resultID,
case spirv::Decoration::NoContraction:
case spirv::Decoration::Constant:
case spirv::Decoration::Block:
+ case spirv::Decoration::BufferBlock:
case spirv::Decoration::Invariant:
case spirv::Decoration::Patch:
case spirv::Decoration::Coherent:
@@ -771,7 +772,8 @@ LogicalResult Serializer::prepareBasicType(
// Ideally, Block decorations should be inserted when converting to SPIR-V.
if (isInterfaceStructPtrType(ptrType)) {
auto structType = cast<spirv::StructType>(ptrType.getPointeeType());
- if (!structType.hasDecoration(spirv::Decoration::Block))
+ if (!structType.hasDecoration(spirv::Decoration::Block) &&
+ !structType.hasDecoration(spirv::Decoration::BufferBlock))
if (failed(emitDecoration(getTypeID(pointeeStruct),
spirv::Decoration::Block)))
return emitError(loc, "cannot decorate ")
diff --git a/mlir/test/Target/SPIRV/struct.mlir b/mlir/test/Target/SPIRV/struct.mlir
index 36a73cd38461f..bd039ff565588 100644
--- a/mlir/test/Target/SPIRV/struct.mlir
+++ b/mlir/test/Target/SPIRV/struct.mlir
@@ -18,6 +18,9 @@ spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, Addresses, Float
// CHECK: !spirv.ptr<!spirv.struct<(!spirv.array<128 x !spirv.struct<(!spirv.array<128 x f32, stride=4> [0])>, stride=512> [0]), Block>, StorageBuffer>
spirv.GlobalVariable @var3 : !spirv.ptr<!spirv.struct<(!spirv.array<128 x !spirv.struct<(!spirv.array<128 x f32, stride=4> [0])>, stride=512> [0]), Block>, StorageBuffer>
+ // CHECK: !spirv.ptr<!spirv.struct<(!spirv.array<128 x f32, stride=4> [0]), BufferBlock>, Uniform>
+ spirv.GlobalVariable @var_buffer_block : !spirv.ptr<!spirv.struct<(!spirv.array<128 x f32, stride=4> [0]), BufferBlock>, Uniform>
+
// CHECK: !spirv.ptr<!spirv.struct<(f32 [0, NonWritable], i32 [4]), Block>, StorageBuffer>
spirv.GlobalVariable @var4 : !spirv.ptr<!spirv.struct<(f32 [0, NonWritable], i32 [4]), Block>, StorageBuffer>
``````````
</details>
https://github.com/llvm/llvm-project/pull/202870
More information about the Mlir-commits
mailing list