[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