Skip to content

Commit 408d4e1

Browse files
authored
[flang][NFC] Expose FIR to LLVM patterns (#83492)
The FIR dialect has been initiated before many interfaces have been introduced to MLIR. This patch expose the FIR to LLVM patterns in a `populateFIRToLLVMConversionPatterns` function. The idea is to be able to add the `ConvertToLLVMPatternInterface`. This is not directly possible since the FIR dialect does not currently use the table infrastructure for its definition. Follow up patches will move the FIR dialect definition to table gen and then implement the interface.
1 parent a015f59 commit 408d4e1

File tree

2 files changed

+37
-24
lines changed

2 files changed

+37
-24
lines changed

flang/include/flang/Optimizer/CodeGen/CodeGen.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
namespace fir {
2020

21+
class LLVMTypeConverter;
22+
2123
struct NameUniquer;
2224

2325
#define GEN_PASS_DECL_FIRTOLLVMLOWERING
@@ -80,6 +82,11 @@ std::unique_ptr<mlir::Pass> createLLVMDialectToLLVMPass(
8082
std::unique_ptr<mlir::Pass> createBoxedProcedurePass();
8183
std::unique_ptr<mlir::Pass> createBoxedProcedurePass(bool useThunks);
8284

85+
/// Populate the given list with patterns that convert from FIR to LLVM.
86+
void populateFIRToLLVMConversionPatterns(fir::LLVMTypeConverter &converter,
87+
mlir::RewritePatternSet &patterns,
88+
fir::FIRToLLVMPassOptions &options);
89+
8390
// declarative passes
8491
#define GEN_PASS_REGISTRATION
8592
#include "flang/Optimizer/CodeGen/CGPasses.h.inc"

flang/lib/Optimizer/CodeGen/CodeGen.cpp

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3937,30 +3937,7 @@ class FIRToLLVMLowering
39373937
options.applyTBAA || applyTBAA,
39383938
options.forceUnifiedTBAATree, *dl};
39393939
mlir::RewritePatternSet pattern(context);
3940-
pattern.insert<
3941-
AbsentOpConversion, AddcOpConversion, AddrOfOpConversion,
3942-
AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
3943-
BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
3944-
BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
3945-
BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
3946-
BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
3947-
CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
3948-
CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion,
3949-
EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
3950-
ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
3951-
FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
3952-
HasValueOpConversion, InsertOnRangeOpConversion,
3953-
InsertValueOpConversion, IsPresentOpConversion,
3954-
LenParamIndexOpConversion, LoadOpConversion, MulcOpConversion,
3955-
NegcOpConversion, NoReassocOpConversion, SelectCaseOpConversion,
3956-
SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion,
3957-
ShapeOpConversion, ShapeShiftOpConversion, ShiftOpConversion,
3958-
SliceOpConversion, StoreOpConversion, StringLitOpConversion,
3959-
SubcOpConversion, TypeDescOpConversion, TypeInfoOpConversion,
3960-
UnboxCharOpConversion, UnboxProcOpConversion, UndefOpConversion,
3961-
UnreachableOpConversion, UnrealizedConversionCastOpConversion,
3962-
XArrayCoorOpConversion, XEmboxOpConversion, XReboxOpConversion,
3963-
ZeroOpConversion>(typeConverter, options);
3940+
fir::populateFIRToLLVMConversionPatterns(typeConverter, pattern, options);
39643941
mlir::populateFuncToLLVMConversionPatterns(typeConverter, pattern);
39653942
mlir::populateOpenMPToLLVMConversionPatterns(typeConverter, pattern);
39663943
mlir::arith::populateArithToLLVMConversionPatterns(typeConverter, pattern);
@@ -4072,3 +4049,32 @@ fir::createLLVMDialectToLLVMPass(llvm::raw_ostream &output,
40724049
fir::LLVMIRLoweringPrinter printer) {
40734050
return std::make_unique<LLVMIRLoweringPass>(output, printer);
40744051
}
4052+
4053+
void fir::populateFIRToLLVMConversionPatterns(
4054+
fir::LLVMTypeConverter &converter, mlir::RewritePatternSet &patterns,
4055+
fir::FIRToLLVMPassOptions &options) {
4056+
patterns.insert<
4057+
AbsentOpConversion, AddcOpConversion, AddrOfOpConversion,
4058+
AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
4059+
BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
4060+
BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
4061+
BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
4062+
BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
4063+
CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
4064+
CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion,
4065+
EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
4066+
ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
4067+
FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
4068+
HasValueOpConversion, InsertOnRangeOpConversion, InsertValueOpConversion,
4069+
IsPresentOpConversion, LenParamIndexOpConversion, LoadOpConversion,
4070+
MulcOpConversion, NegcOpConversion, NoReassocOpConversion,
4071+
SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion,
4072+
SelectTypeOpConversion, ShapeOpConversion, ShapeShiftOpConversion,
4073+
ShiftOpConversion, SliceOpConversion, StoreOpConversion,
4074+
StringLitOpConversion, SubcOpConversion, TypeDescOpConversion,
4075+
TypeInfoOpConversion, UnboxCharOpConversion, UnboxProcOpConversion,
4076+
UndefOpConversion, UnreachableOpConversion,
4077+
UnrealizedConversionCastOpConversion, XArrayCoorOpConversion,
4078+
XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(converter,
4079+
options);
4080+
}

0 commit comments

Comments
 (0)