-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[flang][NFC] Use the tablegen definition for FIR dialect #84822
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-flang-fir-hlfir Author: Valentin Clement (バレンタイン クレメン) (clementval) ChangesFIROpsDialect has been declared manually with a class inheriting from the MLIR Dialect class. Another declaration is done using tablegen here This is part of a series of patch to bring FIR up to date with the current MLIR infra. Full diff: https://github.com/llvm/llvm-project/pull/84822.diff 7 Files Affected:
diff --git a/flang/include/flang/Optimizer/Dialect/CMakeLists.txt b/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
index fe9864a26295d2..f00993d4d37780 100644
--- a/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
+++ b/flang/include/flang/Optimizer/Dialect/CMakeLists.txt
@@ -1,6 +1,10 @@
# This replicates part of the add_mlir_dialect cmake function from MLIR that
# cannot be used her because it expects to be run inside MLIR directory which
# is not the case for FIR.
+set(LLVM_TARGET_DEFINITIONS FIRDialect.td)
+mlir_tablegen(FIRDialect.h.inc -gen-dialect-decls -dialect=fir)
+mlir_tablegen(FIRDialect.cpp.inc -gen-dialect-defs -dialect=fir)
+
set(LLVM_TARGET_DEFINITIONS FIRAttr.td)
mlir_tablegen(FIREnumAttr.h.inc -gen-enum-decls)
mlir_tablegen(FIREnumAttr.cpp.inc -gen-enum-defs)
diff --git a/flang/include/flang/Optimizer/Dialect/FIRAttr.td b/flang/include/flang/Optimizer/Dialect/FIRAttr.td
index 66d6cd471116b0..2ac4af9e66aa80 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRAttr.td
+++ b/flang/include/flang/Optimizer/Dialect/FIRAttr.td
@@ -16,7 +16,7 @@
include "flang/Optimizer/Dialect/FIRDialect.td"
include "mlir/IR/EnumAttr.td"
-class fir_Attr<string name> : AttrDef<fir_Dialect, name>;
+class fir_Attr<string name> : AttrDef<FIROpsDialect, name>;
def FIRnoAttributes : I32BitEnumAttrCaseNone<"None">;
def FIRallocatable : I32BitEnumAttrCaseBit<"allocatable", 0>;
@@ -91,7 +91,7 @@ def fir_CUDADataAttribute : I32EnumAttr<
}
def fir_CUDADataAttributeAttr :
- EnumAttr<fir_Dialect, fir_CUDADataAttribute, "cuda"> {
+ EnumAttr<FIROpsDialect, fir_CUDADataAttribute, "cuda"> {
let assemblyFormat = [{ ```<` $value `>` }];
}
@@ -109,7 +109,7 @@ def fir_CUDAProcAttribute : I32EnumAttr<
}
def fir_CUDAProcAttributeAttr :
- EnumAttr<fir_Dialect, fir_CUDAProcAttribute, "cuda_proc"> {
+ EnumAttr<FIROpsDialect, fir_CUDAProcAttribute, "cuda_proc"> {
let assemblyFormat = [{ ```<` $value `>` }];
}
diff --git a/flang/include/flang/Optimizer/Dialect/FIRDialect.h b/flang/include/flang/Optimizer/Dialect/FIRDialect.h
index 238385505dbff7..ed7c98ec82e2d1 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRDialect.h
+++ b/flang/include/flang/Optimizer/Dialect/FIRDialect.h
@@ -15,43 +15,14 @@
#include "mlir/IR/Dialect.h"
+#include "flang/Optimizer/Dialect/FIRDialect.h.inc"
+
namespace mlir {
class IRMapping;
} // namespace mlir
namespace fir {
-/// FIR dialect
-class FIROpsDialect final : public mlir::Dialect {
-public:
- explicit FIROpsDialect(mlir::MLIRContext *ctx);
- virtual ~FIROpsDialect();
-
- static llvm::StringRef getDialectNamespace() { return "fir"; }
-
- mlir::Type parseType(mlir::DialectAsmParser &parser) const override;
- void printType(mlir::Type ty, mlir::DialectAsmPrinter &p) const override;
-
- mlir::Attribute parseAttribute(mlir::DialectAsmParser &parser,
- mlir::Type type) const override;
- void printAttribute(mlir::Attribute attr,
- mlir::DialectAsmPrinter &p) const override;
-
- /// Return string name of fir.runtime attribute.
- static constexpr llvm::StringRef getFirRuntimeAttrName() {
- return "fir.runtime";
- }
-
-private:
- // Register the Attributes of this dialect.
- void registerAttributes();
- // Register the Types of this dialect.
- void registerTypes();
- // Register external interfaces on operations of
- // this dialect.
- void registerOpExternalInterfaces();
-};
-
/// The FIR codegen dialect is a dialect containing a small set of transient
/// operations used exclusively during code generation.
class FIRCodeGenDialect final : public mlir::Dialect {
diff --git a/flang/include/flang/Optimizer/Dialect/FIRDialect.td b/flang/include/flang/Optimizer/Dialect/FIRDialect.td
index b366b6d40e4e21..0dfb3eda585ceb 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRDialect.td
+++ b/flang/include/flang/Optimizer/Dialect/FIRDialect.td
@@ -21,7 +21,7 @@ include "mlir/Interfaces/InferTypeOpInterface.td"
include "mlir/Interfaces/LoopLikeInterface.td"
include "mlir/Interfaces/SideEffectInterfaces.td"
-def fir_Dialect : Dialect {
+def FIROpsDialect : Dialect {
let name = "fir";
let cppNamespace = "::fir";
let useDefaultTypePrinterParser = 0;
@@ -30,10 +30,33 @@ def fir_Dialect : Dialect {
let dependentDialects = [
// Arith dialect provides FastMathFlagsAttr
// supported by some FIR operations.
- "arith::ArithDialect",
+ "mlir::arith::ArithDialect",
// TBAA Tag types
- "LLVM::LLVMDialect"
+ "mlir::LLVM::LLVMDialect"
];
+ let extraClassDeclaration = [{
+ private:
+ // Register the builtin Attributes.
+ void registerAttributes();
+ // Register the builtin Types.
+ void registerTypes();
+ // Register external interfaces on operations of
+ // this dialect.
+ void registerOpExternalInterfaces();
+ public:
+ mlir::Type parseType(mlir::DialectAsmParser &parser) const override;
+ void printType(mlir::Type ty, mlir::DialectAsmPrinter &p) const override;
+
+ mlir::Attribute parseAttribute(mlir::DialectAsmParser &parser,
+ mlir::Type type) const override;
+ void printAttribute(mlir::Attribute attr,
+ mlir::DialectAsmPrinter &p) const override;
+
+ // Return string name of fir.runtime attribute.
+ static constexpr llvm::StringRef getFirRuntimeAttrName() {
+ return "fir.runtime";
+ }
+ }];
}
#endif // FORTRAN_DIALECT_FIR_DIALECT
diff --git a/flang/include/flang/Optimizer/Dialect/FIROps.td b/flang/include/flang/Optimizer/Dialect/FIROps.td
index db5e5f4bc682e6..65a86d25333b5d 100644
--- a/flang/include/flang/Optimizer/Dialect/FIROps.td
+++ b/flang/include/flang/Optimizer/Dialect/FIROps.td
@@ -27,7 +27,7 @@ include "mlir/IR/BuiltinAttributes.td"
// Base class for FIR operations.
// All operations automatically get a prefix of "fir.".
class fir_Op<string mnemonic, list<Trait> traits>
- : Op<fir_Dialect, mnemonic, traits>;
+ : Op<FIROpsDialect, mnemonic, traits>;
// Base class for FIR operations that take a single argument
class fir_SimpleOp<string mnemonic, list<Trait> traits>
diff --git a/flang/include/flang/Optimizer/Dialect/FIRTypes.td b/flang/include/flang/Optimizer/Dialect/FIRTypes.td
index 2a2f50720859e7..4c6a8064991ab0 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRTypes.td
+++ b/flang/include/flang/Optimizer/Dialect/FIRTypes.td
@@ -22,7 +22,7 @@ include "flang/Optimizer/Dialect/FIRDialect.td"
class FIR_Type<string name, string typeMnemonic, list<Trait> traits = [],
string baseCppClass = "::mlir::Type">
- : TypeDef<fir_Dialect, name, traits, baseCppClass> {
+ : TypeDef<FIROpsDialect, name, traits, baseCppClass> {
let mnemonic = typeMnemonic;
}
diff --git a/flang/lib/Optimizer/Dialect/FIRDialect.cpp b/flang/lib/Optimizer/Dialect/FIRDialect.cpp
index 850b6120b2a00e..4d1e8cd1405afe 100644
--- a/flang/lib/Optimizer/Dialect/FIRDialect.cpp
+++ b/flang/lib/Optimizer/Dialect/FIRDialect.cpp
@@ -18,6 +18,8 @@
#include "mlir/Target/LLVMIR/ModuleTranslation.h"
#include "mlir/Transforms/InliningUtils.h"
+#include "flang/Optimizer/Dialect/FIRDialect.cpp.inc"
+
using namespace fir;
namespace {
@@ -58,9 +60,7 @@ struct FIRInlinerInterface : public mlir::DialectInlinerInterface {
};
} // namespace
-fir::FIROpsDialect::FIROpsDialect(mlir::MLIRContext *ctx)
- : mlir::Dialect("fir", ctx, mlir::TypeID::get<FIROpsDialect>()) {
- getContext()->loadDialect<mlir::LLVM::LLVMDialect>();
+void fir::FIROpsDialect::initialize() {
registerTypes();
registerAttributes();
addOperations<
@@ -94,11 +94,6 @@ void fir::addFIRToLLVMIRExtension(mlir::DialectRegistry ®istry) {
});
}
-// anchor the class vtable to this compilation unit
-fir::FIROpsDialect::~FIROpsDialect() {
- // do nothing
-}
-
mlir::Type fir::FIROpsDialect::parseType(mlir::DialectAsmParser &parser) const {
return parseFirType(const_cast<FIROpsDialect *>(this), parser);
}
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good! Thank you, Valentin!
FIROpsDialect has been declared manually with a class inheriting from the MLIR Dialect class. Another declaration is done using tablegen here
flang/include/flang/Optimizer/Dialect/FIRDialect.td
. This patch merge the two declaration so we can use the tablegen generated class for all the FIROpsDialect needs.This is part of a series of patch to bring FIR up to date with the current MLIR infra.