[llvm-branch-commits] [mlir] d9da4c3 - Revert "[mlir] Add a shape function library op"

Mehdi Amini via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sat Nov 28 21:34:10 PST 2020


Author: Mehdi Amini
Date: 2020-11-29T05:28:42Z
New Revision: d9da4c3e73720badfcac5c0dc63c0285bb690770

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

LOG: Revert "[mlir] Add a shape function library op"

This reverts commit 6dd9596b19d7679c562f8e866be6d0c3d7c21994.

Build is broken.

Added: 
    

Modified: 
    mlir/include/mlir/Dialect/Shape/IR/Shape.h
    mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
    mlir/lib/Dialect/Shape/IR/Shape.cpp
    mlir/test/lib/Dialect/CMakeLists.txt
    mlir/test/lib/Dialect/Test/TestOps.td
    mlir/tools/mlir-opt/CMakeLists.txt
    mlir/tools/mlir-opt/mlir-opt.cpp

Removed: 
    mlir/test/Analysis/test-shape-fn-report.mlir
    mlir/test/lib/Dialect/Shape/CMakeLists.txt
    mlir/test/lib/Dialect/Shape/TestShapeFunctions.cpp


################################################################################
diff  --git a/mlir/include/mlir/Dialect/Shape/IR/Shape.h b/mlir/include/mlir/Dialect/Shape/IR/Shape.h
index cb5ed56e16a2..f40d6154544a 100644
--- a/mlir/include/mlir/Dialect/Shape/IR/Shape.h
+++ b/mlir/include/mlir/Dialect/Shape/IR/Shape.h
@@ -14,7 +14,6 @@
 #ifndef MLIR_SHAPE_IR_SHAPE_H
 #define MLIR_SHAPE_IR_SHAPE_H
 
-#include "mlir/IR/BuiltinDialect.h"
 #include "mlir/IR/Dialect.h"
 #include "mlir/IR/OpDefinition.h"
 #include "mlir/IR/OpImplementation.h"

diff  --git a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
index 52768e49001d..a852d900cf69 100644
--- a/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
+++ b/mlir/include/mlir/Dialect/Shape/IR/ShapeOps.td
@@ -18,7 +18,6 @@ include "mlir/Interfaces/ControlFlowInterfaces.td"
 include "mlir/Interfaces/InferTypeOpInterface.td"
 include "mlir/Interfaces/SideEffectInterfaces.td"
 include "mlir/IR/OpAsmInterface.td"
-include "mlir/IR/SymbolInterfaces.td"
 
 //===----------------------------------------------------------------------===//
 // Shape op definitions
@@ -493,7 +492,7 @@ def Shape_WithOp : Shape_Op<"with_shape", [NoSideEffect]> {
 }
 
 def Shape_YieldOp : Shape_Op<"yield",
-    [HasParent<"ReduceOp, FunctionLibraryOp">,
+    [HasParent<"ReduceOp">,
      NoSideEffect,
      ReturnLike,
      Terminator]> {
@@ -781,62 +780,4 @@ def Shape_CstrRequireOp : Shape_Op<"cstr_require", []> {
   let hasFolder = 1;
 }
 
-//===----------------------------------------------------------------------===//
-// Shape collection ops.
-//===----------------------------------------------------------------------===//
-
-def Shape_FunctionLibraryOp : Shape_Op<"function_library",
-    [AffineScope, IsolatedFromAbove, NoRegionArguments, SymbolTable, Symbol,
-     SingleBlockImplicitTerminator<"ShapeFunctionLibraryTerminatorOp">]> {
-  let summary = "Represents shape functions and corresponding ops";
-  let description = [{
-    Represents a list of shape functions and the ops whose shape transfer
-    functions they represent.
-
-    Example:
-
-    ```mlir
-    shape.function_library {
-      func @same_result_shape(%arg: !shape.value_shape) -> !shape.shape {
-        %0 = shape.shape_of %arg : !shape.value_shape -> !shape.shape
-        return %0 : !shape.shape
-      }
-    } mapping {
-      std.atan = @same_result_shape
-    }
-    ```
-  }];
-
-  let arguments = (ins SymbolNameAttr:$sym_name,
-                       OptionalAttr<StrAttr>:$sym_visibility);
-  let arguments = (ins DictionaryAttr:$mapping);
-  let regions = (region AnyRegion:$body);
-
-  let extraClassDeclaration = [{
-    /// Returns an associated shape function for an operation if defined.
-    FuncOp getShapeFunction(Operation *op);
-  }];
-
-  let builders = [OpBuilderDAG<(ins "StringRef":$name)>];
-  let skipDefaultBuilders = 1;
-
-  let printer = [{ ::print(p, *this); }];
-  let parser = [{ return ::parse$cppClass(parser, result); }];
-}
-
-//===----------------------------------------------------------------------===//
-// ShapeFunctionLibraryTerminatorOp
-//===----------------------------------------------------------------------===//
-
-def ShapeFunctionLibraryTerminatorOp : Shape_Op<"fn_lib_terminator",
-    [Terminator, HasParent<"FunctionLibraryOp">]> {
-  let summary = "A pseudo op that marks the end of a shape function library";
-  let description = [{
-    `shape_fn_lib_terminator` is a special pseudo terminator operation for the
-    shape function library. It has no semantic meaning beyond keeping the body
-    well-formed.
-  }];
-  let assemblyFormat = "attr-dict";
-}
-
 #endif // SHAPE_OPS

diff  --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp
index d8c7f4c6736d..cfac2abae3e6 100644
--- a/mlir/lib/Dialect/Shape/IR/Shape.cpp
+++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp
@@ -12,7 +12,6 @@
 #include "mlir/Dialect/Traits.h"
 #include "mlir/IR/Builders.h"
 #include "mlir/IR/DialectImplementation.h"
-#include "mlir/IR/Function.h"
 #include "mlir/IR/PatternMatch.h"
 #include "mlir/IR/StandardTypes.h"
 #include "mlir/Transforms/InliningUtils.h"
@@ -559,65 +558,6 @@ OpFoldResult FromExtentsOp::fold(ArrayRef<Attribute> operands) {
   return builder.getIndexTensorAttr(extents);
 }
 
-//===----------------------------------------------------------------------===//
-// FunctionLibraryOp
-//===----------------------------------------------------------------------===//
-
-void FunctionLibraryOp::build(OpBuilder &builder, OperationState &result,
-                              StringRef name) {
-  ensureTerminator(*result.addRegion(), builder, result.location);
-  result.attributes.push_back(builder.getNamedAttr(
-      ::mlir::SymbolTable::getSymbolAttrName(), builder.getStringAttr(name)));
-}
-
-FuncOp FunctionLibraryOp::getShapeFunction(Operation *op) {
-  auto attr = mapping()
-                  .get(op->getName().getIdentifier())
-                  .dyn_cast_or_null<FlatSymbolRefAttr>();
-  if (!attr)
-    return nullptr;
-  return lookupSymbol<FuncOp>(attr);
-}
-
-ParseResult parseFunctionLibraryOp(OpAsmParser &parser,
-                                   OperationState &result) {
-  // Parse the op name.
-  StringAttr nameAttr;
-  if (parser.parseSymbolName(nameAttr, ::mlir::SymbolTable::getSymbolAttrName(),
-                             result.attributes))
-    return failure();
-
-  if (parser.parseOptionalAttrDictWithKeyword(result.attributes))
-    return failure();
-
-  auto *bodyRegion = result.addRegion();
-  if (parser.parseRegion(*bodyRegion))
-    return failure();
-
-  FunctionLibraryOp::ensureTerminator(*bodyRegion, parser.getBuilder(),
-                                      result.location);
-  if (parser.parseKeyword("mapping"))
-    return failure();
-
-  DictionaryAttr mappingAttr;
-  if (parser.parseAttribute(mappingAttr,
-                            parser.getBuilder().getType<NoneType>(), "mapping",
-                            result.attributes))
-    return failure();
-  return success();
-}
-
-void print(OpAsmPrinter &p, FunctionLibraryOp op) {
-  p << op.getOperationName() << ' ';
-  p.printSymbolName(op.getName());
-  p.printOptionalAttrDictWithKeyword(
-      op.getAttrs(), {SymbolTable::getSymbolAttrName(), "mapping"});
-  p.printRegion(op.getOperation()->getRegion(0), /*printEntryBlockArgs=*/false,
-                /*printBlockTerminators=*/false);
-  p << " mapping ";
-  p.printAttributeWithoutType(op.mappingAttr());
-}
-
 //===----------------------------------------------------------------------===//
 // GetExtentOp
 //===----------------------------------------------------------------------===//

diff  --git a/mlir/test/Analysis/test-shape-fn-report.mlir b/mlir/test/Analysis/test-shape-fn-report.mlir
deleted file mode 100644
index ad5c8e64a1b7..000000000000
--- a/mlir/test/Analysis/test-shape-fn-report.mlir
+++ /dev/null
@@ -1,22 +0,0 @@
-// RUN: mlir-opt %s --test-shape-function-report -verify-diagnostics
-
-// expected-remark at +1 {{associated shape function: same_result_shape}}
-func @tanh(%arg: tensor<10x20xf32>) -> tensor<10x20xf32>
-    attributes {shape.function = @shape_lib::@same_result_shape} {
-  // expected-remark at +1 {{no associated way}}
-  %0 = tanh %arg : tensor<10x20xf32>
-  // expected-remark at +1 {{associated shape function: same_result_shape}}
-  %1 = "test.same_operand_result_type"(%0) : (tensor<10x20xf32>) -> tensor<10x20xf32>
-  return %1 : tensor<10x20xf32>
-}
-
-// The shape function library with some local functions.
-shape.function_library @shape_lib {
-  // Test shape function that returns the shape of input arg as result shape.
-  func @same_result_shape(%arg: !shape.value_shape) -> !shape.shape {
-    %0 = shape.shape_of %arg : !shape.value_shape -> !shape.shape
-    return %0 : !shape.shape
-  }
-} mapping {
-  test.same_operand_result_type = @same_result_shape
-}

diff  --git a/mlir/test/lib/Dialect/CMakeLists.txt b/mlir/test/lib/Dialect/CMakeLists.txt
index adee9f8a1514..b220d0d81632 100644
--- a/mlir/test/lib/Dialect/CMakeLists.txt
+++ b/mlir/test/lib/Dialect/CMakeLists.txt
@@ -1,5 +1,4 @@
 add_subdirectory(Affine)
-add_subdirectory(Shape)
 add_subdirectory(SPIRV)
 add_subdirectory(Test)
 add_subdirectory(Tosa)

diff  --git a/mlir/test/lib/Dialect/Shape/CMakeLists.txt b/mlir/test/lib/Dialect/Shape/CMakeLists.txt
deleted file mode 100644
index 6c041ab9c371..000000000000
--- a/mlir/test/lib/Dialect/Shape/CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-# Exclude tests from libMLIR.so
-add_mlir_library(MLIRShapeTestPasses
-  TestShapeFunctions.cpp
-
-  EXCLUDE_FROM_LIBMLIR
-
-  ADDITIONAL_HEADER_DIRS
-  ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Shape
-  ${MLIR_MAIN_INCLUDE_DIR}/mlir/IR
-
-  LINK_LIBS PUBLIC
-  MLIRIR
-  MLIRPass
-  MLIRShape
-  MLIRSupport
-  )

diff  --git a/mlir/test/lib/Dialect/Shape/TestShapeFunctions.cpp b/mlir/test/lib/Dialect/Shape/TestShapeFunctions.cpp
deleted file mode 100644
index 688f24e5ec47..000000000000
--- a/mlir/test/lib/Dialect/Shape/TestShapeFunctions.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-//===- TestShapeFunctions.cpp - Passes to test shape function  ------------===//
-//
-// 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 <queue>
-
-#include "mlir/Dialect/Shape/IR/Shape.h"
-#include "mlir/IR/BuiltinDialect.h"
-#include "mlir/Interfaces/InferTypeOpInterface.h"
-#include "mlir/Pass/Pass.h"
-
-using namespace mlir;
-
-namespace {
-/// This is a pass that reports shape functions associated with ops.
-struct ReportShapeFnPass
-    : public PassWrapper<ReportShapeFnPass, OperationPass<ModuleOp>> {
-  void runOnOperation() override;
-};
-} // end anonymous namespace
-
-void ReportShapeFnPass::runOnOperation() {
-  auto module = getOperation();
-
-  // Lookup shape function library.
-  shape::FunctionLibraryOp shapeFnLib = nullptr;
-  for (auto lib : module.getOps<shape::FunctionLibraryOp>()) {
-    if (shapeFnLib) {
-      lib.emitError("duplicate shape library op")
-              .attachNote(shapeFnLib.getLoc())
-          << "previous mapping";
-      return signalPassFailure();
-    }
-    shapeFnLib = lib;
-  };
-
-  // Report the shape function available to refine the op.
-  auto shapeFnId = Identifier::get("shape.function", &getContext());
-  auto remarkShapeFn = [&](Operation *op) {
-    if (op->isKnownTerminator())
-      return;
-    if (auto typeInterface = dyn_cast<InferTypeOpInterface>(op)) {
-      op->emitRemark() << "implements InferType op interface";
-    } else if (auto fn = shapeFnLib.getShapeFunction(op)) {
-      op->emitRemark() << "associated shape function: " << fn.getName();
-    } else if (auto symbol = op->getAttrOfType<SymbolRefAttr>(shapeFnId)) {
-      auto fn = cast<FuncOp>(SymbolTable::lookupSymbolIn(module, symbol));
-      op->emitRemark() << "associated shape function: " << fn.getName();
-    } else {
-      op->emitRemark() << "no associated way to refine shape";
-    }
-  };
-
-  module.getBodyRegion().walk([&](FuncOp func) {
-    // Skip ops in the shape function library.
-    if (isa<shape::FunctionLibraryOp>(func.getParentOp()))
-      return;
-
-    func.walk([&](Operation *op) { remarkShapeFn(op); });
-  });
-}
-
-namespace mlir {
-void registerShapeFunctionTestPasses() {
-  PassRegistration<ReportShapeFnPass>(
-      "test-shape-function-report",
-      "Test pass to report associated shape functions");
-}
-} // namespace mlir

diff  --git a/mlir/test/lib/Dialect/Test/TestOps.td b/mlir/test/lib/Dialect/Test/TestOps.td
index 5a17eebfd32c..aef5b5166ae2 100644
--- a/mlir/test/lib/Dialect/Test/TestOps.td
+++ b/mlir/test/lib/Dialect/Test/TestOps.td
@@ -134,12 +134,6 @@ def VariadicWithSameOperandsResult :
   let results = (outs AnySignlessInteger:$result);
 }
 
-def SameOperandsResultType : TEST_Op<
-    "same_operand_result_type", [SameOperandsAndResultType]> {
-  let arguments = (ins AnyTensor:$operand);
-  let results = (outs AnyTensor:$result);
-}
-
 //===----------------------------------------------------------------------===//
 // Test Results
 //===----------------------------------------------------------------------===//

diff  --git a/mlir/tools/mlir-opt/CMakeLists.txt b/mlir/tools/mlir-opt/CMakeLists.txt
index e8b0842a9e33..483dcfec0c0f 100644
--- a/mlir/tools/mlir-opt/CMakeLists.txt
+++ b/mlir/tools/mlir-opt/CMakeLists.txt
@@ -13,7 +13,6 @@ set(LLVM_LINK_COMPONENTS
 if(MLIR_INCLUDE_TESTS)
   set(test_libs
     MLIRAffineTransformsTestPasses
-    MLIRShapeTestPasses
     MLIRSPIRVTestPasses
     MLIRTestDialect
     MLIRTestIR

diff  --git a/mlir/tools/mlir-opt/mlir-opt.cpp b/mlir/tools/mlir-opt/mlir-opt.cpp
index 4095cc21cbaf..a0e36cf82534 100644
--- a/mlir/tools/mlir-opt/mlir-opt.cpp
+++ b/mlir/tools/mlir-opt/mlir-opt.cpp
@@ -32,7 +32,6 @@ namespace mlir {
 void registerConvertToTargetEnvPass();
 void registerPassManagerTestPass();
 void registerPrintOpAvailabilityPass();
-void registerShapeFunctionTestPasses();
 void registerSideEffectTestPasses();
 void registerSliceAnalysisTestPass();
 void registerSymbolTestPasses();
@@ -99,7 +98,6 @@ void registerTestPasses() {
   registerConvertToTargetEnvPass();
   registerPassManagerTestPass();
   registerPrintOpAvailabilityPass();
-  registerShapeFunctionTestPasses();
   registerSideEffectTestPasses();
   registerSliceAnalysisTestPass();
   registerSymbolTestPasses();


        


More information about the llvm-branch-commits mailing list