Skip to content

Commit 137bd78

Browse files
authored
[flang] Register LLVMTranslationDialectInterface for FIR. (#81668)
Register the LLVM IR translation interface for FIR to avoid warnings about "Unhandled parameter attribute" after #78228.
1 parent 5b38615 commit 137bd78

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ bool canLegallyInline(mlir::Operation *, mlir::Operation *, bool);
7070
// Register the FIRInlinerInterface to FIROpsDialect
7171
void addFIRInlinerExtension(mlir::DialectRegistry &registry);
7272

73+
// Register implementation of LLVMTranslationDialectInterface.
74+
void addFIRToLLVMIRExtension(mlir::DialectRegistry &registry);
75+
7376
} // namespace fir
7477

7578
#endif // FORTRAN_OPTIMIZER_DIALECT_FIRDIALECT_H

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ inline void addFIRExtensions(mlir::DialectRegistry &registry,
5858
bool addFIRInlinerInterface = true) {
5959
if (addFIRInlinerInterface)
6060
addFIRInlinerExtension(registry);
61+
addFIRToLLVMIRExtension(registry);
6162
}
6263

6364
inline void loadNonCodegenDialects(mlir::MLIRContext &context) {

flang/lib/Optimizer/Dialect/FIRDialect.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "flang/Optimizer/Dialect/FIROps.h"
1616
#include "flang/Optimizer/Dialect/FIRType.h"
1717
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
18+
#include "mlir/Target/LLVMIR/ModuleTranslation.h"
1819
#include "mlir/Transforms/InliningUtils.h"
1920

2021
using namespace fir;
@@ -77,6 +78,22 @@ void fir::addFIRInlinerExtension(mlir::DialectRegistry &registry) {
7778
});
7879
}
7980

81+
// We do not provide LLVMTranslationDialectInterface implementation
82+
// for FIR dialect, since at the point of translation to LLVM IR
83+
// there should not be any FIR operations (the CodeGen converts
84+
// them to LLVMIR dialect operations).
85+
// Here we register the default implementation of
86+
// LLVMTranslationDialectInterface that will drop all FIR dialect
87+
// attributes - this helps to avoid warnings about unhandled attributes.
88+
// We can provide our own implementation of the interface,
89+
// when more sophisticated translation is required.
90+
void fir::addFIRToLLVMIRExtension(mlir::DialectRegistry &registry) {
91+
registry.addExtension(
92+
+[](mlir::MLIRContext *ctx, fir::FIROpsDialect *dialect) {
93+
dialect->addInterface<mlir::LLVMTranslationDialectInterface>();
94+
});
95+
}
96+
8097
// anchor the class vtable to this compilation unit
8198
fir::FIROpsDialect::~FIROpsDialect() {
8299
// do nothing

0 commit comments

Comments
 (0)