[Mlir-commits] [mlir] dbbdee2 - [mlir] Make the ml_program dialect allow all of its operations to be inlined. (#85479)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Mar 15 22:22:13 PDT 2024
Author: Stella Laurenzo
Date: 2024-03-15T22:22:09-07:00
New Revision: dbbdee2ea2156170062813fb3d7f2c023d65e02d
URL: https://github.com/llvm/llvm-project/commit/dbbdee2ea2156170062813fb3d7f2c023d65e02d
DIFF: https://github.com/llvm/llvm-project/commit/dbbdee2ea2156170062813fb3d7f2c023d65e02d.diff
LOG: [mlir] Make the ml_program dialect allow all of its operations to be inlined. (#85479)
Added:
mlir/test/Dialect/MLProgram/inlining.mlir
Modified:
mlir/lib/Dialect/MLProgram/IR/CMakeLists.txt
mlir/lib/Dialect/MLProgram/IR/MLProgramDialect.cpp
Removed:
################################################################################
diff --git a/mlir/lib/Dialect/MLProgram/IR/CMakeLists.txt b/mlir/lib/Dialect/MLProgram/IR/CMakeLists.txt
index 90c9c9aa787503..725bb5fd9da9ed 100644
--- a/mlir/lib/Dialect/MLProgram/IR/CMakeLists.txt
+++ b/mlir/lib/Dialect/MLProgram/IR/CMakeLists.txt
@@ -15,5 +15,6 @@ add_mlir_dialect_library(MLIRMLProgramDialect
MLIRControlFlowInterfaces
MLIRFunctionInterfaces
MLIRInferTypeOpInterface
+ MLIRTransforms
MLIRIR
)
diff --git a/mlir/lib/Dialect/MLProgram/IR/MLProgramDialect.cpp b/mlir/lib/Dialect/MLProgram/IR/MLProgramDialect.cpp
index 1a8fe208d4099e..bda1032ed98847 100644
--- a/mlir/lib/Dialect/MLProgram/IR/MLProgramDialect.cpp
+++ b/mlir/lib/Dialect/MLProgram/IR/MLProgramDialect.cpp
@@ -8,6 +8,7 @@
#include "mlir/Dialect/MLProgram/IR/MLProgram.h"
#include "mlir/IR/DialectImplementation.h"
+#include "mlir/Transforms/InliningUtils.h"
#include "llvm/ADT/TypeSwitch.h"
using namespace mlir;
@@ -24,6 +25,18 @@ using namespace mlir::ml_program;
#include "mlir/Dialect/MLProgram/IR/MLProgramTypes.cpp.inc"
namespace {
+
+struct MLProgramInlinerInterface : public DialectInlinerInterface {
+ using DialectInlinerInterface::DialectInlinerInterface;
+
+ bool isLegalToInline(Operation *, Region *, bool,
+ IRMapping &) const override {
+ // We have no specific opinion on whether ops defined in this dialect should
+ // be inlined.
+ return true;
+ }
+};
+
struct MLProgramOpAsmDialectInterface : public OpAsmDialectInterface {
using OpAsmDialectInterface::OpAsmDialectInterface;
@@ -53,5 +66,5 @@ void ml_program::MLProgramDialect::initialize() {
#include "mlir/Dialect/MLProgram/IR/MLProgramOps.cpp.inc"
>();
- addInterfaces<MLProgramOpAsmDialectInterface>();
+ addInterfaces<MLProgramInlinerInterface, MLProgramOpAsmDialectInterface>();
}
diff --git a/mlir/test/Dialect/MLProgram/inlining.mlir b/mlir/test/Dialect/MLProgram/inlining.mlir
new file mode 100644
index 00000000000000..ac3677e1b92882
--- /dev/null
+++ b/mlir/test/Dialect/MLProgram/inlining.mlir
@@ -0,0 +1,19 @@
+// RUN: mlir-opt %s -inline | FileCheck %s
+
+// Verifies that regions with operations from the ml_program dialect can
+// be inlined.
+
+ml_program.global private @global(dense<4> : tensor<4xi32>) : tensor<4xi32>
+
+// CHECK: @inline_into
+func.func @inline_into() -> tensor<4xi32> {
+ // CHECK-NOT: @inline_from
+ // CHECK: ml_program.global_load_const
+ %0 = call @inline_from() : () -> tensor<4xi32>
+ return %0 : tensor<4xi32>
+}
+
+func.func @inline_from() -> tensor<4xi32> {
+ %0 = ml_program.global_load_const @global : tensor<4xi32>
+ return %0 : tensor<4xi32>
+}
More information about the Mlir-commits
mailing list