[Mlir-commits] [mlir] [mlir][spirv] Support deserializing RelaxedPrecision function arg decorator (PR #123403)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Jan 17 13:33:18 PST 2025
https://github.com/mishaobu created https://github.com/llvm/llvm-project/pull/123403
None
>From b2e48c329c61b5441351b8aa82acf98c692775e4 Mon Sep 17 00:00:00 2001
From: "Misha (M3 MBP)" <obukhov.michael+m3mbp at gmail.com>
Date: Fri, 17 Jan 2025 22:30:00 +0100
Subject: [PATCH 1/2] tests
---
.../Dialect/SPIRV/IR/function-decorations.mlir | 14 ++++++++++++++
mlir/test/Target/SPIRV/function-decorations.mlir | 13 +++++++++++++
2 files changed, 27 insertions(+)
diff --git a/mlir/test/Dialect/SPIRV/IR/function-decorations.mlir b/mlir/test/Dialect/SPIRV/IR/function-decorations.mlir
index 07e187e6a7d68c..03b11ebb58ae11 100644
--- a/mlir/test/Dialect/SPIRV/IR/function-decorations.mlir
+++ b/mlir/test/Dialect/SPIRV/IR/function-decorations.mlir
@@ -73,3 +73,17 @@ spirv.func @no_decoration_name_attr(%arg0 : !spirv.ptr<i32, PhysicalStorageBuffe
spirv.func @no_decoration_name_attr(%arg0 : !spirv.ptr<i32, PhysicalStorageBuffer> { spirv.decoration = #spirv.decoration<Restrict>, random_attr = #spirv.decoration<Aliased> }) "None" {
spirv.Return
}
+
+// -----
+
+// CHECK: spirv.func @basic_relaxed_precision(%{{.+}}: f32 {spirv.decoration = #spirv.decoration<RelaxedPrecision>}) "None"
+spirv.func @basic_relaxed_precision(%arg0: f32 {spirv.decoration = #spirv.decoration<RelaxedPrecision>}) "None" {
+ spirv.Return
+}
+
+// -----
+
+// CHECK: spirv.func @vector_relaxed_precision(%{{.+}}: vector<4xf32> {spirv.decoration = #spirv.decoration<RelaxedPrecision>}) "None"
+spirv.func @vector_relaxed_precision(%arg0: vector<4xf32> {spirv.decoration = #spirv.decoration<RelaxedPrecision>}) "None" {
+ spirv.Return
+}
diff --git a/mlir/test/Target/SPIRV/function-decorations.mlir b/mlir/test/Target/SPIRV/function-decorations.mlir
index ef627145aac3e4..e0fb6b13661997 100644
--- a/mlir/test/Target/SPIRV/function-decorations.mlir
+++ b/mlir/test/Target/SPIRV/function-decorations.mlir
@@ -86,3 +86,16 @@ spirv.module PhysicalStorageBuffer64 GLSL450 requires #spirv.vce<v1.0,
spirv.Return
}
}
+
+// -----
+
+// CHECK: spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> {
+spirv.module Logical GLSL450 requires #spirv.vce<v1.0, [Shader], []> {
+ // CHECK: spirv.func @compute_with_relaxed_precision(%[[ARG:.*]]: f32 {spirv.decoration = #spirv.decoration<RelaxedPrecision>})
+ // CHECK-NEXT: %[[RESULT:.*]] = spirv.FAdd %[[ARG]], %[[ARG]]
+ // CHECK-NEXT: spirv.Return
+ spirv.func @compute_with_relaxed_precision(%arg0: f32 {spirv.decoration = #spirv.decoration<RelaxedPrecision>}) "None" {
+ %0 = spirv.FAdd %arg0, %arg0 : f32
+ spirv.Return
+ }
+}
>From fb952bf8746e5e0cc098c4784ed342899d70ad44 Mon Sep 17 00:00:00 2001
From: "Misha (M3 MBP)" <obukhov.michael+m3mbp at gmail.com>
Date: Fri, 17 Jan 2025 22:30:46 +0100
Subject: [PATCH 2/2] Add support for deserializing relaxed precision decorator
---
mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp
index 04469f1933819b..56572f3a320589 100644
--- a/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp
+++ b/mlir/lib/Target/SPIRV/Deserialization/Deserializer.cpp
@@ -432,8 +432,8 @@ LogicalResult spirv::Deserializer::setFunctionArgAttrs(
for (NamedAttribute decAttr : decorations[argID]) {
for (auto decoration :
{spirv::Decoration::Aliased, spirv::Decoration::Restrict,
- spirv::Decoration::AliasedPointer,
- spirv::Decoration::RestrictPointer}) {
+ spirv::Decoration::AliasedPointer, spirv::Decoration::RestrictPointer,
+ spirv::Decoration::RelaxedPrecision}) {
if (decAttr.getName() !=
getSymbolDecoration(stringifyDecoration(decoration)))
@@ -441,8 +441,8 @@ LogicalResult spirv::Deserializer::setFunctionArgAttrs(
if (foundDecorationAttr)
return emitError(unknownLoc,
- "more than one Aliased/Restrict decorations for "
- "function argument with result <id> ")
+ "more than one decoration for function argument "
+ "with result <id> ")
<< argID;
foundDecorationAttr = spirv::DecorationAttr::get(context, decoration);
More information about the Mlir-commits
mailing list