[Mlir-commits] [mlir] 91072b7 - [mlir] Add InlinerInterface to bufferization dialect

llvmlistbot at llvm.org llvmlistbot at llvm.org
Sat Dec 4 13:19:50 PST 2021


Author: Butygin
Date: 2021-12-04T23:45:56+03:00
New Revision: 91072b74f859e1dbd10673d47dcfb911e3041b77

URL: https://github.com/llvm/llvm-project/commit/91072b74f859e1dbd10673d47dcfb911e3041b77
DIFF: https://github.com/llvm/llvm-project/commit/91072b74f859e1dbd10673d47dcfb911e3041b77.diff

LOG: [mlir] Add InlinerInterface to bufferization dialect

Differential Revision: https://reviews.llvm.org/D115080

Added: 
    mlir/test/Dialect/Bufferization/inlining.mlir

Modified: 
    mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp b/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
index fd9b0d635d275..84980bf548863 100644
--- a/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
+++ b/mlir/lib/Dialect/Bufferization/IR/BufferizationDialect.cpp
@@ -7,12 +7,29 @@
 //===----------------------------------------------------------------------===//
 
 #include "mlir/Dialect/Bufferization/IR/Bufferization.h"
+#include "mlir/Transforms/InliningUtils.h"
 
 using namespace mlir;
 using namespace mlir::bufferization;
 
 #include "mlir/Dialect/Bufferization/IR/BufferizationOpsDialect.cpp.inc"
 
+//===----------------------------------------------------------------------===//
+// Bufferization Dialect Interfaces
+//===----------------------------------------------------------------------===//
+
+namespace {
+struct BufferizationInlinerInterface : public DialectInlinerInterface {
+  using DialectInlinerInterface::DialectInlinerInterface;
+
+  /// Operations in Bufferization dialect are always legal to inline.
+  bool isLegalToInline(Operation *, Region *, bool,
+                       BlockAndValueMapping &) const final {
+    return true;
+  }
+};
+} // end anonymous namespace
+
 //===----------------------------------------------------------------------===//
 // Bufferization Dialect
 //===----------------------------------------------------------------------===//
@@ -22,4 +39,5 @@ void mlir::bufferization::BufferizationDialect::initialize() {
 #define GET_OP_LIST
 #include "mlir/Dialect/Bufferization/IR/BufferizationOps.cpp.inc"
       >();
+  addInterfaces<BufferizationInlinerInterface>();
 }

diff  --git a/mlir/test/Dialect/Bufferization/inlining.mlir b/mlir/test/Dialect/Bufferization/inlining.mlir
new file mode 100644
index 0000000000000..6974f01420321
--- /dev/null
+++ b/mlir/test/Dialect/Bufferization/inlining.mlir
@@ -0,0 +1,16 @@
+// RUN: mlir-opt %s -inline | FileCheck %s
+
+// CHECK-LABEL: func @test_inline
+// CHECK-SAME: (%[[ARG:.*]]: memref<*xf32>)
+// CHECK-NOT: call
+// CHECK: %[[RES:.*]] = bufferization.clone %[[ARG]]
+// CHECK: return %[[RES]]
+func @test_inline(%buf : memref<*xf32>) -> memref<*xf32> {
+  %0 = call @inner_func(%buf) : (memref<*xf32>) -> memref<*xf32>
+  return %0 : memref<*xf32>
+}
+
+func @inner_func(%buf : memref<*xf32>) -> memref<*xf32> {
+  %clone = bufferization.clone %buf : memref<*xf32> to memref<*xf32>
+  return %clone : memref<*xf32>
+}


        


More information about the Mlir-commits mailing list