[llvm-branch-commits] [mlir] 12a631b - Revert "[mlir][MLProgram] Add MLProgram to MemRef bufferization pass"

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jan 30 07:54:17 PST 2024


Author: Mehdi Amini
Date: 2024-01-30T07:54:13-08:00
New Revision: 12a631b2df7ffcb172f259ad521d92cd6948513c

URL: https://github.com/llvm/llvm-project/commit/12a631b2df7ffcb172f259ad521d92cd6948513c
DIFF: https://github.com/llvm/llvm-project/commit/12a631b2df7ffcb172f259ad521d92cd6948513c.diff

LOG: Revert "[mlir][MLProgram] Add MLProgram to MemRef bufferization pass"

Added: 
    

Modified: 
    mlir/include/mlir/InitAllDialects.h
    mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp
    mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
    mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt

Removed: 
    mlir/include/mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h
    mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp
    mlir/test/Dialect/MLProgram/one-shot-bufferize.mlir


################################################################################
diff  --git a/mlir/include/mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h b/mlir/include/mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h
deleted file mode 100644
index ca541238cf63b..0000000000000
--- a/mlir/include/mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//===- BufferizableOpInterfaceImpl.h - Impl. of BufferizableOpInterface ---===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_DIALECT_MLPROGRAM_BUFFERIZABLEOPINTERFACEIMPL_H
-#define MLIR_DIALECT_MLPROGRAM_BUFFERIZABLEOPINTERFACEIMPL_H
-
-namespace mlir {
-class DialectRegistry;
-
-namespace ml_program {
-void registerBufferizableOpInterfaceExternalModels(DialectRegistry &registry);
-} // namespace ml_program
-} // namespace mlir
-
-#endif // MLIR_DIALECT_MLPROGRAM_BUFFERIZABLEOPINTERFACEIMPL_H

diff  --git a/mlir/include/mlir/InitAllDialects.h b/mlir/include/mlir/InitAllDialects.h
index 0d21ecb4ebb44..19a62cadaa2e0 100644
--- a/mlir/include/mlir/InitAllDialects.h
+++ b/mlir/include/mlir/InitAllDialects.h
@@ -48,7 +48,6 @@
 #include "mlir/Dialect/Linalg/Transforms/SubsetInsertionOpInterfaceImpl.h"
 #include "mlir/Dialect/Linalg/Transforms/TilingInterfaceImpl.h"
 #include "mlir/Dialect/MLProgram/IR/MLProgram.h"
-#include "mlir/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.h"
 #include "mlir/Dialect/Math/IR/Math.h"
 #include "mlir/Dialect/MemRef/IR/MemRef.h"
 #include "mlir/Dialect/MemRef/IR/MemRefMemorySlot.h"
@@ -161,7 +160,6 @@ inline void registerAllDialects(DialectRegistry &registry) {
   memref::registerRuntimeVerifiableOpInterfaceExternalModels(registry);
   memref::registerValueBoundsOpInterfaceExternalModels(registry);
   memref::registerMemorySlotExternalModels(registry);
-  ml_program::registerBufferizableOpInterfaceExternalModels(registry);
   scf::registerBufferDeallocationOpInterfaceExternalModels(registry);
   scf::registerBufferizableOpInterfaceExternalModels(registry);
   scf::registerValueBoundsOpInterfaceExternalModels(registry);

diff  --git a/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp b/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp
index dc94b72edcdf0..2758d554712b9 100644
--- a/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp
+++ b/mlir/lib/Dialect/Bufferization/Transforms/Bufferize.cpp
@@ -498,10 +498,6 @@ LogicalResult bufferization::bufferizeOp(Operation *op,
                << "\n//===-------------------------------------------===//\n");
   }
 
-  // Return early if the top-level op is entirely gone.
-  if (erasedOps.contains(op))
-    return success();
-
   // Fold all to_memref(to_tensor(x)) pairs.
   for (Operation *op : toMemrefOps) {
     rewriter.setInsertionPoint(op);

diff  --git a/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp b/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
index 33feea0b956ca..aeda995fd585a 100644
--- a/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
+++ b/mlir/lib/Dialect/Bufferization/Transforms/OneShotModuleBufferize.cpp
@@ -459,7 +459,7 @@ LogicalResult mlir::bufferization::bufferizeModuleOp(
   }
 
   // Bufferize all other ops.
-  for (Operation &op : llvm::make_early_inc_range(moduleOp.getOps())) {
+  for (Operation &op : moduleOp.getOps()) {
     // Functions were already bufferized.
     if (isa<func::FuncOp>(&op))
       continue;

diff  --git a/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp
deleted file mode 100644
index 3ab17871ed907..0000000000000
--- a/mlir/lib/Dialect/MLProgram/Transforms/BufferizableOpInterfaceImpl.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-//===- BufferizableOpInterfaceImpl.cpp - Impl. of BufferizableOpInterface -===//
-//
-// 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
-//
-//===----------------------------------------------------------------------===//
-
-#include "mlir/Dialect/Tensor/Transforms/BufferizableOpInterfaceImpl.h"
-
-#include "mlir/Dialect/Bufferization/IR/BufferizableOpInterface.h"
-#include "mlir/Dialect/MLProgram/IR/MLProgram.h"
-#include "mlir/Dialect/MemRef/IR/MemRef.h"
-
-using namespace mlir;
-using namespace mlir::bufferization;
-using namespace mlir::ml_program;
-
-namespace mlir {
-namespace ml_program {
-namespace {
-
-template <typename Interface, typename Op>
-struct ExternalModelBase
-    : public BufferizableOpInterface::ExternalModel<Interface, Op> {
-
-  AliasingValueList getAliasingValues(Operation *, OpOperand &,
-                                      const AnalysisState &) const {
-    return {};
-  }
-
-  BufferRelation bufferRelation(Operation *, OpResult,
-                                const AnalysisState &) const {
-    return BufferRelation::Unknown;
-  }
-};
-
-/// Bufferization of ml_program.global into a memref.global
-struct GlobalOpInterface
-    : public ExternalModelBase<GlobalOpInterface, GlobalOp> {
-
-  bool bufferizesToMemoryRead(Operation *, OpOperand &,
-                              const AnalysisState &) const {
-    return false;
-  }
-
-  bool bufferizesToMemoryWrite(Operation *, OpOperand &,
-                               const AnalysisState &) const {
-    return false;
-  }
-
-  bool hasTensorSemantics(Operation *) const { return true; }
-
-  LogicalResult bufferize(Operation *op, RewriterBase &rewriter,
-                          const BufferizationOptions &) const {
-    auto globalOp = cast<GlobalOp>(op);
-    if (!globalOp.getValue().has_value())
-      return globalOp.emitError("global op must have a value");
-
-    auto tensorType = cast<TensorType>(globalOp.getType());
-    auto memrefType = getMemRefTypeWithStaticIdentityLayout(tensorType);
-
-    replaceOpWithNewBufferizedOp<memref::GlobalOp>(
-        rewriter, globalOp, globalOp.getSymName(),
-        /*sym_visibility=*/globalOp.getSymVisibilityAttr(),
-        /*type=*/cast<MemRefType>(memrefType),
-        /*initial_value=*/globalOp.getValue().value(),
-        /*constant=*/!globalOp.getIsMutable(),
-        /*alignment=*/nullptr);
-
-    return success();
-  }
-};
-
-/// Bufferization of ml_program.global_load into a memref.get_global
-struct GlobalLoadOpInterface
-    : public ExternalModelBase<GlobalLoadOpInterface, GlobalLoadOp> {
-
-  bool bufferizesToMemoryRead(Operation *, OpOperand &,
-                              const AnalysisState &) const {
-    return false;
-  }
-
-  bool bufferizesToMemoryWrite(Operation *, OpOperand &,
-                               const AnalysisState &) const {
-    return false;
-  }
-
-  bool isWritable(Operation *, Value, const AnalysisState &) const {
-    return false;
-  }
-
-  LogicalResult bufferize(Operation *op, RewriterBase &rewriter,
-                          const BufferizationOptions &) const {
-    auto globalLoadOp = cast<GlobalLoadOp>(op);
-
-    auto tensorType = cast<TensorType>(globalLoadOp.getType());
-    auto memrefType = getMemRefTypeWithStaticIdentityLayout(tensorType);
-
-    replaceOpWithNewBufferizedOp<memref::GetGlobalOp>(
-        rewriter, globalLoadOp, memrefType,
-        globalLoadOp.getGlobalAttr().getLeafReference());
-
-    return success();
-  }
-};
-
-/// Bufferization of ml_program.global_store into a memref.get_global and
-/// memcpy
-struct GlobalStoreOpInterface
-    : public ExternalModelBase<GlobalStoreOpInterface, GlobalStoreOp> {
-
-  bool bufferizesToMemoryRead(Operation *, OpOperand &,
-                              const AnalysisState &) const {
-    return false;
-  }
-
-  bool bufferizesToMemoryWrite(Operation *, OpOperand &,
-                               const AnalysisState &) const {
-    return true;
-  }
-
-  LogicalResult bufferize(Operation *op, RewriterBase &rewriter,
-                          const BufferizationOptions &options) const {
-    auto globalStoreOp = cast<GlobalStoreOp>(op);
-
-    auto tensorType = cast<TensorType>(globalStoreOp.getValue().getType());
-    auto memrefType = getMemRefTypeWithStaticIdentityLayout(tensorType);
-
-    auto loc = globalStoreOp.getLoc();
-    auto targetMemref = rewriter.create<memref::GetGlobalOp>(
-        loc, memrefType, globalStoreOp.getGlobalAttr().getLeafReference());
-
-    auto sourceMemref = getBuffer(rewriter, globalStoreOp.getValue(), options);
-    if (failed(sourceMemref)) {
-      return failure();
-    }
-
-    auto memcpy =
-        options.createMemCpy(rewriter, loc, sourceMemref.value(), targetMemref);
-    if (failed(memcpy)) {
-      return failure();
-    }
-    rewriter.eraseOp(globalStoreOp);
-
-    return success();
-  }
-};
-} // namespace
-
-void registerBufferizableOpInterfaceExternalModels(DialectRegistry &registry) {
-  registry.addExtension(+[](MLIRContext *ctx, MLProgramDialect *) {
-    GlobalOp::attachInterface<GlobalOpInterface>(*ctx);
-    GlobalLoadOp::attachInterface<GlobalLoadOpInterface>(*ctx);
-    GlobalStoreOp::attachInterface<GlobalStoreOpInterface>(*ctx);
-  });
-}
-} // namespace ml_program
-} // namespace mlir

diff  --git a/mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt b/mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt
index 53ca492339f50..db567b62e0e74 100644
--- a/mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt
+++ b/mlir/lib/Dialect/MLProgram/Transforms/CMakeLists.txt
@@ -1,5 +1,4 @@
 add_mlir_dialect_library(MLIRMLProgramTransforms
-  BufferizableOpInterfaceImpl.cpp
   PipelineGlobalOps.cpp
 
   ADDITIONAL_HEADER_DIRS

diff  --git a/mlir/test/Dialect/MLProgram/one-shot-bufferize.mlir b/mlir/test/Dialect/MLProgram/one-shot-bufferize.mlir
deleted file mode 100644
index 942247aef2603..0000000000000
--- a/mlir/test/Dialect/MLProgram/one-shot-bufferize.mlir
+++ /dev/null
@@ -1,52 +0,0 @@
-// RUN: mlir-opt %s -one-shot-bufferize -split-input-file | FileCheck %s
-
-// CHECK-LABEL: memref.global "private" @global 
-ml_program.global private mutable @global(dense<0> : tensor<i64>) : tensor<i64>
-
-// CHECK-LABEL: func.func @global_load_store
-func.func @global_load_store() -> i64 {
-  // CHECK-DAG: %[[CST127:.*]] = arith.constant 127
-  // CHECK-DAG: %[[GLOBAL_1:.*]] = memref.get_global @global
-  // CHECK:     %[[VALUE:.*]] = memref.load %[[GLOBAL_1]][]
-  // CHECK:     %[[NEW_VALUE:.*]] = arith.muli %[[VALUE]], %[[CST127]]
-  // CHECK:     %[[ALLOC:.*]] = memref.alloc()
-  // CHECK:     memref.copy %[[GLOBAL_1]], %[[ALLOC]]
-  // CHECK:     memref.store %[[NEW_VALUE]], %[[ALLOC]][]
-  // CHECK:     %[[GLOBAL_2:.*]] = memref.get_global @global
-  // CHECK:     memref.copy %[[ALLOC]], %[[GLOBAL_2]]
-  // CHECK:     return %[[NEW_VALUE]]
-  %c127 = arith.constant 127 : i64
-  %0 = ml_program.global_load @global : tensor<i64>
-  %extracted = tensor.extract %0[] : tensor<i64>
-  %1 = arith.muli %extracted, %c127 : i64
-  %inserted = tensor.insert %1 into %0[] : tensor<i64>
-  ml_program.global_store @global = %inserted : tensor<i64>
-  return %1 : i64
-}
-
-// -----
-
-// CHECK-LABEL: memref.global "private" @global 
-ml_program.global private mutable @global(dense<0> : tensor<i64>) : tensor<i64>
-
-// CHECK-LABEL: func.func @raw_hazard
-func.func @raw_hazard() -> i64 {
-  // CHECK-DAG: %[[CST127:.*]] = arith.constant 127
-  // CHECK-DAG: %[[GLOBAL_1:.*]] = memref.get_global @global
-  // CHECK-DAG: %[[GLOBAL_2:.*]] = memref.get_global @global
-  // CHECK-DAG: %[[ALLOC:.*]] = memref.alloc()
-  // CHECK:     memref.copy %[[GLOBAL_1]], %[[ALLOC]]
-  // CHECK:     memref.store %[[CST127]], %[[ALLOC]][]
-  // CHECK:     %[[VAL:.*]] = memref.load %[[GLOBAL_2]][]
-  // CHECK:     %[[GLOBAL_3:.*]] = memref.get_global @global
-  // CHECK:     memref.copy %[[ALLOC]], %[[GLOBAL_3]]
-  // CHECK:     return %[[VAL]]
-  %c127 = arith.constant 127 : i64
-  %0 = ml_program.global_load @global : tensor<i64>
-  %1 = ml_program.global_load @global : tensor<i64>
-  %inserted = tensor.insert %c127 into %0[] : tensor<i64>
-  %extracted = tensor.extract %1[] : tensor<i64>
-  ml_program.global_store @global = %inserted : tensor<i64>
-  return %extracted : i64
-}
-


        


More information about the llvm-branch-commits mailing list