[Mlir-commits] [mlir] 02f16a1 - [mlir][SPIR-V] Support CPacked decorations in binary round trips (#232192)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Oct 15 00:48:55 PDT 2026
Author: Alexander Shaposhnikov
Date: 2026-10-15T00:48:49-07:00
New Revision: 02f16a1e3ade5a3ea045bba7b18ccccd91986d66
URL: https://github.com/llvm/llvm-project/commit/02f16a1e3ade5a3ea045bba7b18ccccd91986d66
DIFF: https://github.com/llvm/llvm-project/commit/02f16a1e3ade5a3ea045bba7b18ccccd91986d66.diff
LOG: [mlir][SPIR-V] Support CPacked decorations in binary round trips (#232192)
The SPIR-V dialect already represents CPacked struct types, but binary
serialization and deserialization reject the decoration. Handle CPacked
as a unit decoration in both directions so packed structs survive binary
round trips.
Add round-trip coverage for literal and identified packed structs.
Added:
Modified:
mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp
mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
mlir/test/Target/SPIRV/decorations.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp
index 1cdc5686adfeb..5813a8961e5e6 100644
--- a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp
+++ b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp
@@ -370,6 +370,7 @@ LogicalResult spirv::Deserializer::processDecoration(ArrayRef<uint32_t> words) {
case spirv::Decoration::AliasedPointer:
case spirv::Decoration::Block:
case spirv::Decoration::BufferBlock:
+ case spirv::Decoration::CPacked:
case spirv::Decoration::Flat:
case spirv::Decoration::NonReadable:
case spirv::Decoration::NonWritable:
diff --git a/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp b/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
index 44a96e9037963..e92ef88ed6437 100644
--- a/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
+++ b/mlir/lib/Target/SPIRV/Serialization/Serializer.cpp
@@ -420,6 +420,7 @@ LogicalResult Serializer::processDecorationAttr(Location loc, uint32_t resultID,
case spirv::Decoration::Constant:
case spirv::Decoration::Block:
case spirv::Decoration::BufferBlock:
+ case spirv::Decoration::CPacked:
case spirv::Decoration::Invariant:
case spirv::Decoration::Patch:
case spirv::Decoration::Coherent:
diff --git a/mlir/test/Target/SPIRV/decorations.mlir b/mlir/test/Target/SPIRV/decorations.mlir
index 2d3f256715caa..4be10a2a07b2d 100644
--- a/mlir/test/Target/SPIRV/decorations.mlir
+++ b/mlir/test/Target/SPIRV/decorations.mlir
@@ -225,3 +225,17 @@ spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader, Linkage], []> {
spirv.Return
}
}
+
+// -----
+
+spirv.module Physical64 OpenCL requires #spirv.vce<v1.0, [Kernel, Addresses, Int8, Int64, Linkage], []> {
+ // CHECK: spirv.func @cpacked_struct(%{{.*}}: !spirv.ptr<!spirv.struct<(i8, i64, i32), CPacked>, CrossWorkgroup>)
+ spirv.func @cpacked_struct(%arg0: !spirv.ptr<!spirv.struct<(i8, i64, i32), CPacked>, CrossWorkgroup>) "None" {
+ spirv.Return
+ }
+
+ // CHECK: spirv.func @cpacked_identified_struct(%{{.*}}: !spirv.ptr<!spirv.struct<packed, (i8, i64, i32), CPacked>, CrossWorkgroup>)
+ spirv.func @cpacked_identified_struct(%arg0: !spirv.ptr<!spirv.struct<packed, (i8, i64, i32), CPacked>, CrossWorkgroup>) "None" {
+ spirv.Return
+ }
+}
More information about the Mlir-commits
mailing list