Skip to content

Commit 369b822

Browse files
authored
[flang] Introducing a method to dynamically and conditionally register dialect interfaces. (llvm#80881)
This change introduces the `addFIRExtensions` method to dynamically and conditionally register dialect interfaces. As a use case of `addFIRExtensions`, this change moves the static registration of `FIRInlinerInterface` out of the constructor of `FIROpsDialect` to be dynamically registered while loading the necessary MLIR dialects required by Flang. This registration of `FIRInlinerInterface` is also guarded by a boolean `addFIRInlinerInterface` which defaults to true. --------- Co-authored-by: Vijay Kandiah <[email protected]>
1 parent 7a9b0e4 commit 369b822

File tree

7 files changed

+25
-1
lines changed

7 files changed

+25
-1
lines changed

flang/include/flang/Optimizer/Dialect/FIRDialect.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ bool canLegallyInline(mlir::Operation *op, mlir::Region *reg, bool,
6767
mlir::IRMapping &map);
6868
bool canLegallyInline(mlir::Operation *, mlir::Operation *, bool);
6969

70+
// Register the FIRInlinerInterface to FIROpsDialect
71+
void addFIRInlinerExtension(mlir::DialectRegistry &registry);
72+
7073
} // namespace fir
7174

7275
#endif // FORTRAN_OPTIMIZER_DIALECT_FIRDIALECT_H

flang/include/flang/Optimizer/Support/InitFIR.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ inline void registerDialects(mlir::DialectRegistry &registry) {
5353
registry.insert<FLANG_CODEGEN_DIALECT_LIST>();
5454
}
5555

56+
// Register FIR Extensions
57+
inline void addFIRExtensions(mlir::DialectRegistry &registry,
58+
bool addFIRInlinerInterface = true) {
59+
if (addFIRInlinerInterface)
60+
addFIRInlinerExtension(registry);
61+
}
62+
5663
inline void loadNonCodegenDialects(mlir::MLIRContext &context) {
5764
mlir::DialectRegistry registry;
5865
registerNonCodegenDialects(registry);

flang/lib/Frontend/FrontendActions.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,10 @@ void CodeGenAction::generateLLVMIR() {
786786
llvm::OptimizationLevel level = mapToLevel(opts);
787787

788788
fir::support::loadDialects(*mlirCtx);
789+
mlir::DialectRegistry registry;
790+
fir::support::registerNonCodegenDialects(registry);
791+
fir::support::addFIRExtensions(registry);
792+
mlirCtx->appendDialectRegistry(registry);
789793
fir::support::registerLLVMTranslation(*mlirCtx);
790794

791795
// Set-up the MLIR pass manager

flang/lib/Optimizer/Dialect/FIRDialect.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,14 @@ fir::FIROpsDialect::FIROpsDialect(mlir::MLIRContext *ctx)
6767
#include "flang/Optimizer/Dialect/FIROps.cpp.inc"
6868
>();
6969
registerOpExternalInterfaces();
70-
addInterfaces<FIRInlinerInterface>();
70+
}
71+
72+
// Register the FIRInlinerInterface to FIROpsDialect
73+
void fir::addFIRInlinerExtension(mlir::DialectRegistry &registry) {
74+
registry.addExtension(
75+
+[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) {
76+
dialect->addInterface<FIRInlinerInterface>();
77+
});
7178
}
7279

7380
// anchor the class vtable to this compilation unit

flang/tools/bbc/bbc.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ static mlir::LogicalResult convertFortranSourceToMLIR(
326326
// translate to FIR dialect of MLIR
327327
mlir::DialectRegistry registry;
328328
fir::support::registerNonCodegenDialects(registry);
329+
fir::support::addFIRExtensions(registry);
329330
mlir::MLIRContext ctx(registry);
330331
fir::support::loadNonCodegenDialects(ctx);
331332
auto &defKinds = semanticsContext.defaultKinds();

flang/tools/fir-opt/fir-opt.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ int main(int argc, char **argv) {
4040
#endif
4141
DialectRegistry registry;
4242
fir::support::registerDialects(registry);
43+
fir::support::addFIRExtensions(registry);
4344
return failed(MlirOptMain(argc, argv, "FIR modular optimizer driver\n",
4445
registry));
4546
}

flang/tools/tco/tco.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ compileFIR(const mlir::PassPipelineCLParser &passPipeline) {
9090
sourceMgr.AddNewSourceBuffer(std::move(*fileOrErr), SMLoc());
9191
mlir::DialectRegistry registry;
9292
fir::support::registerDialects(registry);
93+
fir::support::addFIRExtensions(registry);
9394
mlir::MLIRContext context(registry);
9495
fir::support::loadDialects(context);
9596
fir::support::registerLLVMTranslation(context);

0 commit comments

Comments
 (0)