[Mlir-commits] [mlir] 5115ede - Revert "[mlir][irdl] Add IRDL registration"
Arjun P
llvmlistbot at llvm.org
Thu Apr 20 07:56:23 PDT 2023
Author: Arjun P
Date: 2023-04-20T15:55:57+01:00
New Revision: 5115ede632d458e625c5ad8639f72f42495ec866
URL: https://github.com/llvm/llvm-project/commit/5115ede632d458e625c5ad8639f72f42495ec866
DIFF: https://github.com/llvm/llvm-project/commit/5115ede632d458e625c5ad8639f72f42495ec866.diff
LOG: Revert "[mlir][irdl] Add IRDL registration"
This reverts commit e0d884de360b5c3fe79c6a53f8f88b57f0e42275.
Reverting due to buildbot failure.
Added:
Modified:
mlir/include/mlir/IR/OpDefinition.h
mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h
mlir/lib/Dialect/IRDL/CMakeLists.txt
mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
Removed:
mlir/include/mlir/Dialect/IRDL/IRDLLoading.h
mlir/lib/Dialect/IRDL/IRDLLoading.cpp
mlir/test/Dialect/IRDL/test-cmath.mlir
mlir/test/Dialect/IRDL/testd.mlir
################################################################################
diff --git a/mlir/include/mlir/Dialect/IRDL/IRDLLoading.h b/mlir/include/mlir/Dialect/IRDL/IRDLLoading.h
deleted file mode 100644
index 62b6827ac3874..0000000000000
--- a/mlir/include/mlir/Dialect/IRDL/IRDLLoading.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//===- IRDLRegistration.h - IRDL registration -------------------*- C++ -*-===//
-//
-// This file is licensed 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
-//
-//===----------------------------------------------------------------------===//
-//
-// Manages the registration of MLIR objects from IRDL operations.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef MLIR_DIALECT_IRDL_IRDLREGISTRATION_H
-#define MLIR_DIALECT_IRDL_IRDLREGISTRATION_H
-
-#include "mlir/IR/BuiltinOps.h"
-#include "mlir/Support/LogicalResult.h"
-
-namespace mlir {
-namespace irdl {
-
-/// Load all the dialects defined in the module.
-LogicalResult loadDialects(ModuleOp op);
-
-} // namespace irdl
-} // namespace mlir
-
-#endif // MLIR_DIALECT_IRDL_IRDLREGISTRATION_H
diff --git a/mlir/include/mlir/IR/OpDefinition.h b/mlir/include/mlir/IR/OpDefinition.h
index 5a73d776996f9..a86acafcc1e89 100644
--- a/mlir/include/mlir/IR/OpDefinition.h
+++ b/mlir/include/mlir/IR/OpDefinition.h
@@ -23,8 +23,8 @@
#include "mlir/IR/Operation.h"
#include "llvm/Support/PointerLikeTypeTraits.h"
-#include <optional>
#include <type_traits>
+#include <optional>
namespace mlir {
class Builder;
@@ -633,7 +633,7 @@ class OneTypedResult {
class Impl
: public TraitBase<ConcreteType, OneTypedResult<ResultType>::Impl> {
public:
- mlir::TypedValue<ResultType> getResult() {
+ mlir::TypedValue<ResultType> getResult() {
return cast<mlir::TypedValue<ResultType>>(
this->getOperation()->getResult(0));
}
@@ -1255,14 +1255,6 @@ struct HasParent {
<< (sizeof...(ParentOpTypes) != 1 ? "to be one of '" : "'")
<< llvm::ArrayRef({ParentOpTypes::getOperationName()...}) << "'";
}
-
- template <typename ParentOpType =
- std::tuple_element_t<0, std::tuple<ParentOpTypes...>>>
- std::enable_if_t<sizeof...(ParentOpTypes) == 1, ParentOpType>
- getParentOp() {
- Operation *parent = this->getOperation()->getParentOp();
- return llvm::cast<ParentOpType>(parent);
- }
};
};
diff --git a/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h b/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h
index b4be148b64080..f54c29c8f6e31 100644
--- a/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h
+++ b/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h
@@ -74,13 +74,6 @@ class MlirOptMainConfig {
}
bool shouldEmitBytecode() const { return emitBytecodeFlag; }
- /// Set the IRDL file to load before processing the input.
- MlirOptMainConfig &setIrdlFile(llvm::StringRef file) {
- irdlFileFlag = file;
- return *this;
- }
- llvm::StringRef getIrdlFile() const { return irdlFileFlag; }
-
/// Set the filename to use for logging actions, use "-" for stdout.
MlirOptMainConfig &logActionsTo(StringRef filename) {
logActionsToFlag = filename;
@@ -164,9 +157,6 @@ class MlirOptMainConfig {
/// Emit bytecode instead of textual assembly when generating output.
bool emitBytecodeFlag = false;
- /// IRDL file to register before processing the input.
- std::string irdlFileFlag = "";
-
/// Log action execution to the given file (or "-" for stdout)
std::string logActionsToFlag;
diff --git a/mlir/lib/Dialect/IRDL/CMakeLists.txt b/mlir/lib/Dialect/IRDL/CMakeLists.txt
index 31efd5e37a665..534c48ed5d1be 100644
--- a/mlir/lib/Dialect/IRDL/CMakeLists.txt
+++ b/mlir/lib/Dialect/IRDL/CMakeLists.txt
@@ -1,6 +1,5 @@
add_mlir_dialect_library(MLIRIRDL
IR/IRDL.cpp
- IRDLLoading.cpp
DEPENDS
MLIRIRDLIncGen
diff --git a/mlir/lib/Dialect/IRDL/IRDLLoading.cpp b/mlir/lib/Dialect/IRDL/IRDLLoading.cpp
deleted file mode 100644
index 15cd124a42298..0000000000000
--- a/mlir/lib/Dialect/IRDL/IRDLLoading.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-//===- IRDLLoading.cpp - IRDL dialect loading --------------------- C++ -*-===//
-//
-// This file is licensed 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
-//
-//===----------------------------------------------------------------------===//
-//
-// Manages the loading of MLIR objects from IRDL operations.
-//
-//===----------------------------------------------------------------------===//
-
-#include "mlir/Dialect/IRDL/IRDLLoading.h"
-#include "mlir/Dialect/IRDL/IR/IRDL.h"
-#include "mlir/IR/BuiltinOps.h"
-#include "mlir/IR/ExtensibleDialect.h"
-#include "mlir/Support/LogicalResult.h"
-#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/Support/SMLoc.h"
-
-using namespace mlir;
-using namespace mlir::irdl;
-
-/// Define and load an operation represented by a `irdl.operation`
-/// operation.
-static WalkResult loadOperation(OperationOp op, ExtensibleDialect *dialect) {
- // IRDL does not support defining custom parsers or printers.
- auto parser = [](OpAsmParser &parser, OperationState &result) {
- return failure();
- };
- auto printer = [](Operation *op, OpAsmPrinter &printer, StringRef) {
- printer.printGenericOp(op);
- };
-
- auto verifier = [](Operation *op) { return success(); };
-
- // IRDL does not support defining regions.
- auto regionVerifier = [](Operation *op) { return success(); };
-
- auto opDef = DynamicOpDefinition::get(
- op.getName(), dialect, std::move(verifier), std::move(regionVerifier),
- std::move(parser), std::move(printer));
- dialect->registerDynamicOp(std::move(opDef));
-
- return WalkResult::advance();
-}
-
-/// Load all dialects in the given module, without loading any
-/// operation, type or attribute definitions.
-static DenseMap<DialectOp, ExtensibleDialect *> loadEmptyDialects(ModuleOp op) {
- DenseMap<DialectOp, ExtensibleDialect *> dialects;
- op.walk([&](DialectOp dialectOp) {
- MLIRContext *ctx = dialectOp.getContext();
- StringRef dialectName = dialectOp.getName();
-
- DynamicDialect *dialect = ctx->getOrLoadDynamicDialect(
- dialectName, [](DynamicDialect *dialect) {});
-
- dialects.insert({dialectOp, dialect});
- });
- return dialects;
-}
-
-/// Preallocate type definitions objects with empty verifiers.
-/// This in particular allocates a TypeID for each type definition.
-static DenseMap<TypeOp, std::unique_ptr<DynamicTypeDefinition>>
-preallocateTypeDefs(ModuleOp op,
- DenseMap<DialectOp, ExtensibleDialect *> dialects) {
- DenseMap<TypeOp, std::unique_ptr<DynamicTypeDefinition>> typeDefs;
- op.walk([&](TypeOp typeOp) {
- ExtensibleDialect *dialect = dialects[typeOp.getParentOp()];
- auto typeDef = DynamicTypeDefinition::get(
- typeOp.getName(), dialect,
- [](function_ref<InFlightDiagnostic()>, ArrayRef<Attribute>) {
- return success();
- });
- typeDefs.try_emplace(typeOp, std::move(typeDef));
- });
- return typeDefs;
-}
-
-/// Preallocate attribute definitions objects with empty verifiers.
-/// This in particular allocates a TypeID for each attribute definition.
-static DenseMap<AttributeOp, std::unique_ptr<DynamicAttrDefinition>>
-preallocateAttrDefs(ModuleOp op,
- DenseMap<DialectOp, ExtensibleDialect *> dialects) {
- DenseMap<AttributeOp, std::unique_ptr<DynamicAttrDefinition>> attrDefs;
- op.walk([&](AttributeOp attrOp) {
- ExtensibleDialect *dialect = dialects[attrOp.getParentOp()];
- auto attrDef = DynamicAttrDefinition::get(
- attrOp.getName(), dialect,
- [](function_ref<InFlightDiagnostic()>, ArrayRef<Attribute>) {
- return success();
- });
- attrDefs.try_emplace(attrOp, std::move(attrDef));
- });
- return attrDefs;
-}
-
-LogicalResult mlir::irdl::loadDialects(ModuleOp op) {
- // Preallocate all dialects, and type and attribute definitions.
- // In particular, this allocates TypeIDs so type and attributes can have
- // verifiers that refer to each other.
- DenseMap<DialectOp, ExtensibleDialect *> dialects = loadEmptyDialects(op);
- DenseMap<TypeOp, std::unique_ptr<DynamicTypeDefinition>> types =
- preallocateTypeDefs(op, dialects);
- DenseMap<AttributeOp, std::unique_ptr<DynamicAttrDefinition>> attrs =
- preallocateAttrDefs(op, dialects);
-
- // Define and load all operations.
- WalkResult res = op.walk([&](OperationOp opOp) {
- return loadOperation(opOp, dialects[opOp.getParentOp()]);
- });
- if (res.wasInterrupted())
- return failure();
-
- // Load all types in their dialects.
- for (auto &pair : types) {
- ExtensibleDialect *dialect = dialects[pair.first.getParentOp()];
- dialect->registerDynamicType(std::move(pair.second));
- }
-
- // Load all attributes in their dialects.
- for (auto &pair : attrs) {
- ExtensibleDialect *dialect = dialects[pair.first.getParentOp()];
- dialect->registerDynamicAttr(std::move(pair.second));
- }
-
- return success();
-}
diff --git a/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp b/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
index 87c259dcd96c1..8f608ef145aa8 100644
--- a/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
+++ b/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp
@@ -16,8 +16,6 @@
#include "mlir/Debug/Counter.h"
#include "mlir/Debug/ExecutionContext.h"
#include "mlir/Debug/Observers/ActionLogging.h"
-#include "mlir/Dialect/IRDL/IR/IRDL.h"
-#include "mlir/Dialect/IRDL/IRDLLoading.h"
#include "mlir/IR/AsmState.h"
#include "mlir/IR/Attributes.h"
#include "mlir/IR/BuiltinOps.h"
@@ -71,11 +69,6 @@ struct MlirOptMainConfigCLOptions : public MlirOptMainConfig {
"emit-bytecode", cl::desc("Emit bytecode when generating output"),
cl::location(emitBytecodeFlag), cl::init(false));
- static cl::opt<std::string, /*ExternalStorage=*/true> irdlFile(
- "irdl-file",
- cl::desc("IRDL file to register before processing the input"),
- cl::location(irdlFileFlag), cl::init(""), cl::value_desc("filename"));
-
static cl::opt<bool, /*ExternalStorage=*/true> explicitModule(
"no-implicit-module",
cl::desc("Disable implicit addition of a top-level module op during "
@@ -282,35 +275,6 @@ performActions(raw_ostream &os,
return success();
}
-LogicalResult loadIRDLDialects(StringRef irdlFile, MLIRContext &ctx) {
- DialectRegistry registry;
- registry.insert<irdl::IRDLDialect>();
- ctx.appendDialectRegistry(registry);
-
- // Set up the input file.
- std::string errorMessage;
- std::unique_ptr<MemoryBuffer> file = openInputFile(irdlFile, &errorMessage);
- if (!file) {
- emitError(UnknownLoc::get(&ctx)) << errorMessage;
- return failure();
- }
-
- // Give the buffer to the source manager.
- // This will be picked up by the parser.
- SourceMgr sourceMgr;
- sourceMgr.AddNewSourceBuffer(std::move(file), SMLoc());
-
- SourceMgrDiagnosticHandler sourceMgrHandler(sourceMgr, &ctx);
-
- // Parse the input file.
- OwningOpRef<ModuleOp> module(parseSourceFile<ModuleOp>(sourceMgr, &ctx));
-
- // Load IRDL dialects.
- if (irdl::loadDialects(module.get()).failed())
- return failure();
- return success();
-}
-
/// Parses the memory buffer. If successfully, run a series of passes against
/// it and print the result.
static LogicalResult processBuffer(raw_ostream &os,
@@ -328,12 +292,6 @@ static LogicalResult processBuffer(raw_ostream &os,
if (threadPool)
context.setThreadPool(*threadPool);
- StringRef irdlFile = config.getIrdlFile();
- if (!irdlFile.empty()) {
- if (failed(loadIRDLDialects(irdlFile, context)))
- return failure();
- }
-
// Parse the input file.
if (config.shouldPreloadDialectsInContext())
context.loadAllAvailableDialects();
diff --git a/mlir/test/Dialect/IRDL/test-cmath.mlir b/mlir/test/Dialect/IRDL/test-cmath.mlir
deleted file mode 100644
index b7370c4fae730..0000000000000
--- a/mlir/test/Dialect/IRDL/test-cmath.mlir
+++ /dev/null
@@ -1,27 +0,0 @@
-// RUN: mlir-opt %s --irdl-file=%S/cmath.irdl.mlir | mlir-opt --irdl-file=%S/cmath.irdl.mlir | FileCheck %s
-
-module {
- // CHECK: func.func @conorm(%[[p:[^:]*]]: !cmath.complex<f32>, %[[q:[^:]*]]: !cmath.complex<f32>) -> f32 {
- // CHECK: %[[norm_p:[^ ]*]] = "cmath.norm"(%[[p]]) : (!cmath.complex<f32>) -> f32
- // CHECK: %[[norm_q:[^ ]*]] = "cmath.norm"(%[[q]]) : (!cmath.complex<f32>) -> f32
- // CHECK: %[[pq:[^ ]*]] = arith.mulf %[[norm_p]], %[[norm_q]] : f32
- // CHECK: return %[[pq]] : f32
- // CHECK: }
- func.func @conorm(%p: !cmath.complex<f32>, %q: !cmath.complex<f32>) -> f32 {
- %norm_p = "cmath.norm"(%p) : (!cmath.complex<f32>) -> f32
- %norm_q = "cmath.norm"(%q) : (!cmath.complex<f32>) -> f32
- %pq = arith.mulf %norm_p, %norm_q : f32
- return %pq : f32
- }
-
- // CHECK: func.func @conorm2(%[[p:[^:]*]]: !cmath.complex<f32>, %[[q:[^:]*]]: !cmath.complex<f32>) -> f32 {
- // CHECK: %[[pq:[^ ]*]] = "cmath.mul"(%[[p]], %[[q]]) : (!cmath.complex<f32>, !cmath.complex<f32>) -> !cmath.complex<f32>
- // CHECK: %[[conorm:[^ ]*]] = "cmath.norm"(%[[pq]]) : (!cmath.complex<f32>) -> f32
- // CHECK: return %[[conorm]] : f32
- // CHECK: }
- func.func @conorm2(%p: !cmath.complex<f32>, %q: !cmath.complex<f32>) -> f32 {
- %pq = "cmath.mul"(%p, %q) : (!cmath.complex<f32>, !cmath.complex<f32>) -> !cmath.complex<f32>
- %conorm = "cmath.norm"(%pq) : (!cmath.complex<f32>) -> f32
- return %conorm : f32
- }
-}
diff --git a/mlir/test/Dialect/IRDL/testd.mlir b/mlir/test/Dialect/IRDL/testd.mlir
deleted file mode 100644
index f6d1bcb0e396f..0000000000000
--- a/mlir/test/Dialect/IRDL/testd.mlir
+++ /dev/null
@@ -1,108 +0,0 @@
-// RUN: mlir-opt %s --irdl-file=%S/testd.irdl.mlir -split-input-file -verify-diagnostics | FileCheck %s
-
-//===----------------------------------------------------------------------===//
-// Type or attribute constraint
-//===----------------------------------------------------------------------===//
-
-func.func @typeFitsType() {
- // CHECK: "testd.any"() : () -> !testd.parametric<i32>
- "testd.any"() : () -> !testd.parametric<i32>
- return
-}
-
-// -----
-
-func.func @attrDoesntFitType() {
- "testd.any"() : () -> !testd.parametric<"foo">
- return
-}
-
-// -----
-
-func.func @attrFitsAttr() {
- // CHECK: "testd.any"() : () -> !testd.attr_in_type_out<"foo">
- "testd.any"() : () -> !testd.attr_in_type_out<"foo">
- return
-}
-
-// -----
-
-func.func @typeFitsAttr() {
- // CHECK: "testd.any"() : () -> !testd.attr_in_type_out<i32>
- "testd.any"() : () -> !testd.attr_in_type_out<i32>
- return
-}
-
-// -----
-
-//===----------------------------------------------------------------------===//
-// Equality constraint
-//===----------------------------------------------------------------------===//
-
-func.func @succeededEqConstraint() {
- // CHECK: "testd.eq"() : () -> i32
- "testd.eq"() : () -> i32
- return
-}
-
-
-// -----
-
-//===----------------------------------------------------------------------===//
-// Any constraint
-//===----------------------------------------------------------------------===//
-
-func.func @succeededAnyConstraint() {
- // CHECK: "testd.any"() : () -> i32
- "testd.any"() : () -> i32
- // CHECK: "testd.any"() : () -> i64
- "testd.any"() : () -> i64
- return
-}
-
-// -----
-
-//===----------------------------------------------------------------------===//
-// Dynamic base constraint
-//===----------------------------------------------------------------------===//
-
-func.func @succeededDynBaseConstraint() {
- // CHECK: "testd.dynbase"() : () -> !testd.parametric<i32>
- "testd.dynbase"() : () -> !testd.parametric<i32>
- // CHECK: "testd.dynbase"() : () -> !testd.parametric<!testd.parametric<i32>>
- "testd.dynbase"() : () -> !testd.parametric<!testd.parametric<i32>>
- return
-}
-
-
-// -----
-
-//===----------------------------------------------------------------------===//
-// Dynamic parameters constraint
-//===----------------------------------------------------------------------===//
-
-func.func @succeededDynParamsConstraint() {
- // CHECK: "testd.dynparams"() : () -> !testd.parametric<i32>
- "testd.dynparams"() : () -> !testd.parametric<i32>
- return
-}
-
-// -----
-
-//===----------------------------------------------------------------------===//
-// Constraint variables
-//===----------------------------------------------------------------------===//
-
-func.func @succeededConstraintVars() {
- // CHECK: "testd.constraint_vars"() : () -> (i32, i32)
- "testd.constraint_vars"() : () -> (i32, i32)
- return
-}
-
-// -----
-
-func.func @succeededConstraintVars2() {
- // CHECK: "testd.constraint_vars"() : () -> (i64, i64)
- "testd.constraint_vars"() : () -> (i64, i64)
- return
-}
More information about the Mlir-commits
mailing list