[Mlir-commits] [mlir] [mlir][tosa] Add scaffolding for bytecode version. (PR #67374)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Mon Sep 25 14:32:42 PDT 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir

<details>
<summary>Changes</summary>

This does not decide on any specific bytecode version or structure, but adds the scaffolding to make it easy to add.

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


5 Files Affected:

- (modified) mlir/include/mlir/Dialect/Tosa/IR/CMakeLists.txt (+5) 
- (added) mlir/include/mlir/Dialect/Tosa/IR/TosaDialectBytecode.td (+28) 
- (modified) mlir/lib/Dialect/Tosa/CMakeLists.txt (+1) 
- (modified) mlir/lib/Dialect/Tosa/IR/TosaOps.cpp (+49) 
- (modified) utils/bazel/llvm-project-overlay/mlir/BUILD.bazel (+20) 


``````````diff
diff --git a/mlir/include/mlir/Dialect/Tosa/IR/CMakeLists.txt b/mlir/include/mlir/Dialect/Tosa/IR/CMakeLists.txt
index f3d4598bc326142..12b4fc402c390f9 100644
--- a/mlir/include/mlir/Dialect/Tosa/IR/CMakeLists.txt
+++ b/mlir/include/mlir/Dialect/Tosa/IR/CMakeLists.txt
@@ -6,3 +6,8 @@ set(LLVM_TARGET_DEFINITIONS TosaOps.td)
 mlir_tablegen(TosaAttributes.h.inc -gen-attrdef-decls)
 mlir_tablegen(TosaAttributes.cpp.inc -gen-attrdef-defs)
 add_public_tablegen_target(MLIRTosaAttributesIncGen)
+
+set(LLVM_TARGET_DEFINITIONS TosaDialectBytecode.td)
+mlir_tablegen(TosaDialectBytecode.cpp.inc -gen-bytecode -bytecode-dialect="Tosa")
+add_public_tablegen_target(MLIRTosaDialectBytecodeIncGen)
+
diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaDialectBytecode.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaDialectBytecode.td
new file mode 100644
index 000000000000000..258841a312c62ca
--- /dev/null
+++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaDialectBytecode.td
@@ -0,0 +1,28 @@
+//===-- TosaBytecode.td - Tosa bytecode defs -------------*- tablegen -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This is the TOSA bytecode reader/writer definition file.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef TOSA_DIALECT_BYTECODE
+#define TOSA_DIALECT_BYTECODE
+
+include "mlir/IR/BytecodeBase.td"
+
+/// This enum contains marker codes used to indicate which attribute is
+/// currently being decoded, and how it should be decoded. The order of these
+/// codes should generally be unchanged, as any changes will inevitably break
+/// compatibility with older bytecode.
+
+def TosaDialectTypes : DialectTypes<"Tosa"> {
+  let elems = [];
+}
+
+#endif // TOSA_DIALECT_BYTECODE
+
diff --git a/mlir/lib/Dialect/Tosa/CMakeLists.txt b/mlir/lib/Dialect/Tosa/CMakeLists.txt
index b36e4a1cabb479e..8e32579e0e4c2e3 100644
--- a/mlir/lib/Dialect/Tosa/CMakeLists.txt
+++ b/mlir/lib/Dialect/Tosa/CMakeLists.txt
@@ -9,6 +9,7 @@ add_mlir_dialect_library(MLIRTosaDialect
 
   DEPENDS
   MLIRTosaAttributesIncGen
+  MLIRTosaDialectBytecodeIncGen
   MLIRTosaOpsIncGen
   MLIRTosaInterfacesIncGen
 
diff --git a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
index 616aad8c4aaf08f..c2f8b4a0194bbf5 100644
--- a/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
+++ b/mlir/lib/Dialect/Tosa/IR/TosaOps.cpp
@@ -39,6 +39,8 @@ using namespace mlir::tosa;
 #include "mlir/Dialect/Tosa/IR/TosaInterfaces.cpp.inc"
 
 namespace {
+#include "mlir/Dialect/Tosa/IR/TosaDialectBytecode.cpp.inc"
+
 //===----------------------------------------------------------------------===//
 // Dialect Function Inliner Interface.
 //===----------------------------------------------------------------------===//
@@ -62,6 +64,53 @@ struct TosaInlinerInterface : public DialectInlinerInterface {
             isa<tosa::WhileOp>(dest->getParentOp()));
   }
 };
+
+/// This class implements the bytecode interface for the Tosa dialect.
+struct TosaDialectBytecodeInterface : public BytecodeDialectInterface {
+  TosaDialectBytecodeInterface(Dialect *dialect)
+      : BytecodeDialectInterface(dialect) {}
+
+  //===--------------------------------------------------------------------===//
+  // Attributes
+
+  Attribute readAttribute(DialectBytecodeReader &reader) const override {
+    return ::readAttribute(getContext(), reader);
+  }
+
+  LogicalResult writeAttribute(Attribute attr,
+                               DialectBytecodeWriter &writer) const override {
+    return ::writeAttribute(attr, writer);
+  }
+
+  //===--------------------------------------------------------------------===//
+  // Types
+
+  Type readType(DialectBytecodeReader &reader) const override {
+    return ::readType(getContext(), reader);
+  }
+
+  LogicalResult writeType(Type type,
+                          DialectBytecodeWriter &writer) const override {
+    return ::writeType(type, writer);
+  }
+
+  void writeVersion(DialectBytecodeWriter &writer) const final {
+    // TODO: Populate.
+  }
+
+  std::unique_ptr<DialectVersion>
+  readVersion(DialectBytecodeReader &reader) const final {
+    // TODO: Populate
+    reader.emitError("Dialect does not support versioning");
+    return nullptr;
+  }
+
+  LogicalResult upgradeFromVersion(Operation *topLevelOp,
+                                   const DialectVersion &version_) const final {
+    return success();
+  }
+};
+
 } // namespace
 
 //===----------------------------------------------------------------------===//
diff --git a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
index 40c477879ed0035..cd50a24782d5d9e 100644
--- a/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/mlir/BUILD.bazel
@@ -10611,6 +10611,25 @@ gentbl_cc_library(
     deps = [":TosaDialectTdFiles"],
 )
 
+gentbl_cc_library(
+    name = "TosaDialectBytecodeGen",
+    strip_include_prefix = "include",
+    tbl_outs = [
+        (
+            [
+                "-gen-bytecode",
+                "-bytecode-dialect=Tosa",
+            ],
+            "include/mlir/Dialect/Tosa/IR/TosaDialectBytecode.cpp.inc",
+        ),
+    ],
+    tblgen = ":mlir-tblgen",
+    td_file = "include/mlir/Dialect/Tosa/IR/TosaDialectBytecode.td",
+    deps = [
+        ":BytecodeTdFiles",
+    ],
+)
+
 gentbl_cc_library(
     name = "TosaInterfacesIncGen",
     tbl_outs = [
@@ -10688,6 +10707,7 @@ cc_library(
         ":QuantOps",
         ":Support",
         ":TensorDialect",
+        ":TosaDialectBytecodeGen",
         ":TosaDialectIncGen",
         ":TosaInterfacesIncGen",
         ":TosaPassIncGen",

``````````

</details>


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


More information about the Mlir-commits mailing list