[flang-commits] [flang] [flang][NFC] Use the tablegen definition for FIR dialect (PR #84822)
via flang-commits
flang-commits at lists.llvm.org
Mon Mar 11 13:16:23 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-fir-hlfir
Author: Valentin Clement (バレンタイン クレメン) (clementval)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/84822.diff
7 Files Affected:
- (modified) flang/include/flang/Optimizer/Dialect/CMakeLists.txt (+4)
- (modified) flang/include/flang/Optimizer/Dialect/FIRAttr.td (+3-3)
- (modified) flang/include/flang/Optimizer/Dialect/FIRDialect.h (+2-31)
- (modified) flang/include/flang/Optimizer/Dialect/FIRDialect.td (+26-3)
- (modified) flang/include/flang/Optimizer/Dialect/FIROps.td (+1-1)
- (modified) flang/include/flang/Optimizer/Dialect/FIRTypes.td (+1-1)
- (modified) flang/lib/Optimizer/Dialect/FIRDialect.cpp (+3-8)
``````````diff
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);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/84822
More information about the flang-commits
mailing list