-
Notifications
You must be signed in to change notification settings - Fork 10.8k
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
[flang][NFC] Expose FIR to LLVM patterns #83492
Conversation
@llvm/pr-subscribers-flang-codegen Author: Valentin Clement (バレンタイン クレメン) (clementval) ChangesThe FIR dialect has been initiated before many interfaces have been introduced to MLIR. This patch expose the FIR to LLVM pattern in a populateFIRToLLVMConversionPatterns function. The idea is to be able to add the Follow up patches will move the FIR dialect definition to table gen and then implement the interface. Full diff: https://github.com/llvm/llvm-project/pull/83492.diff 2 Files Affected:
diff --git a/flang/include/flang/Optimizer/CodeGen/CodeGen.h b/flang/include/flang/Optimizer/CodeGen/CodeGen.h
index 5ea96c900bc630..cbf02ec3912363 100644
--- a/flang/include/flang/Optimizer/CodeGen/CodeGen.h
+++ b/flang/include/flang/Optimizer/CodeGen/CodeGen.h
@@ -18,6 +18,8 @@
namespace fir {
+class LLVMTypeConverter;
+
struct NameUniquer;
#define GEN_PASS_DECL_FIRTOLLVMLOWERING
@@ -80,6 +82,11 @@ std::unique_ptr<mlir::Pass> createLLVMDialectToLLVMPass(
std::unique_ptr<mlir::Pass> createBoxedProcedurePass();
std::unique_ptr<mlir::Pass> createBoxedProcedurePass(bool useThunks);
+/// Populate the given list with patterns that convert from FIR to LLVM.
+void populateFIRToLLVMConversionPatterns(fir::LLVMTypeConverter &converter,
+ mlir::RewritePatternSet &patterns,
+ fir::FIRToLLVMPassOptions &options);
+
// declarative passes
#define GEN_PASS_REGISTRATION
#include "flang/Optimizer/CodeGen/CGPasses.h.inc"
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index 7fdf39a1af731c..6823c7e7fd3eb0 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -3937,30 +3937,31 @@ class FIRToLLVMLowering
options.applyTBAA || applyTBAA,
options.forceUnifiedTBAATree, *dl};
mlir::RewritePatternSet pattern(context);
- pattern.insert<
- AbsentOpConversion, AddcOpConversion, AddrOfOpConversion,
- AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
- BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
- BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
- BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
- BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
- CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
- CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion,
- EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
- ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
- FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
- HasValueOpConversion, InsertOnRangeOpConversion,
- InsertValueOpConversion, IsPresentOpConversion,
- LenParamIndexOpConversion, LoadOpConversion, MulcOpConversion,
- NegcOpConversion, NoReassocOpConversion, SelectCaseOpConversion,
- SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion,
- ShapeOpConversion, ShapeShiftOpConversion, ShiftOpConversion,
- SliceOpConversion, StoreOpConversion, StringLitOpConversion,
- SubcOpConversion, TypeDescOpConversion, TypeInfoOpConversion,
- UnboxCharOpConversion, UnboxProcOpConversion, UndefOpConversion,
- UnreachableOpConversion, UnrealizedConversionCastOpConversion,
- XArrayCoorOpConversion, XEmboxOpConversion, XReboxOpConversion,
- ZeroOpConversion>(typeConverter, options);
+ fir::populateFIRToLLVMConversionPatterns(typeConverter, pattern, options);
+ // pattern.insert<
+ // AbsentOpConversion, AddcOpConversion, AddrOfOpConversion,
+ // AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
+ // BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
+ // BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
+ // BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
+ // BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
+ // CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
+ // CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion,
+ // EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
+ // ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
+ // FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
+ // HasValueOpConversion, InsertOnRangeOpConversion,
+ // InsertValueOpConversion, IsPresentOpConversion,
+ // LenParamIndexOpConversion, LoadOpConversion, MulcOpConversion,
+ // NegcOpConversion, NoReassocOpConversion, SelectCaseOpConversion,
+ // SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion,
+ // ShapeOpConversion, ShapeShiftOpConversion, ShiftOpConversion,
+ // SliceOpConversion, StoreOpConversion, StringLitOpConversion,
+ // SubcOpConversion, TypeDescOpConversion, TypeInfoOpConversion,
+ // UnboxCharOpConversion, UnboxProcOpConversion, UndefOpConversion,
+ // UnreachableOpConversion, UnrealizedConversionCastOpConversion,
+ // XArrayCoorOpConversion, XEmboxOpConversion, XReboxOpConversion,
+ // ZeroOpConversion>(typeConverter, options);
mlir::populateFuncToLLVMConversionPatterns(typeConverter, pattern);
mlir::populateOpenMPToLLVMConversionPatterns(typeConverter, pattern);
mlir::arith::populateArithToLLVMConversionPatterns(typeConverter, pattern);
@@ -4072,3 +4073,32 @@ fir::createLLVMDialectToLLVMPass(llvm::raw_ostream &output,
fir::LLVMIRLoweringPrinter printer) {
return std::make_unique<LLVMIRLoweringPass>(output, printer);
}
+
+void fir::populateFIRToLLVMConversionPatterns(
+ fir::LLVMTypeConverter &converter, mlir::RewritePatternSet &patterns,
+ fir::FIRToLLVMPassOptions &options) {
+ patterns.insert<
+ AbsentOpConversion, AddcOpConversion, AddrOfOpConversion,
+ AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
+ BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
+ BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
+ BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
+ BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
+ CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
+ CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion,
+ EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
+ ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
+ FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
+ HasValueOpConversion, InsertOnRangeOpConversion, InsertValueOpConversion,
+ IsPresentOpConversion, LenParamIndexOpConversion, LoadOpConversion,
+ MulcOpConversion, NegcOpConversion, NoReassocOpConversion,
+ SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion,
+ SelectTypeOpConversion, ShapeOpConversion, ShapeShiftOpConversion,
+ ShiftOpConversion, SliceOpConversion, StoreOpConversion,
+ StringLitOpConversion, SubcOpConversion, TypeDescOpConversion,
+ TypeInfoOpConversion, UnboxCharOpConversion, UnboxProcOpConversion,
+ UndefOpConversion, UnreachableOpConversion,
+ UnrealizedConversionCastOpConversion, XArrayCoorOpConversion,
+ XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(converter,
+ options);
+}
|
@llvm/pr-subscribers-flang-fir-hlfir Author: Valentin Clement (バレンタイン クレメン) (clementval) ChangesThe FIR dialect has been initiated before many interfaces have been introduced to MLIR. This patch expose the FIR to LLVM pattern in a populateFIRToLLVMConversionPatterns function. The idea is to be able to add the Follow up patches will move the FIR dialect definition to table gen and then implement the interface. Full diff: https://github.com/llvm/llvm-project/pull/83492.diff 2 Files Affected:
diff --git a/flang/include/flang/Optimizer/CodeGen/CodeGen.h b/flang/include/flang/Optimizer/CodeGen/CodeGen.h
index 5ea96c900bc630..cbf02ec3912363 100644
--- a/flang/include/flang/Optimizer/CodeGen/CodeGen.h
+++ b/flang/include/flang/Optimizer/CodeGen/CodeGen.h
@@ -18,6 +18,8 @@
namespace fir {
+class LLVMTypeConverter;
+
struct NameUniquer;
#define GEN_PASS_DECL_FIRTOLLVMLOWERING
@@ -80,6 +82,11 @@ std::unique_ptr<mlir::Pass> createLLVMDialectToLLVMPass(
std::unique_ptr<mlir::Pass> createBoxedProcedurePass();
std::unique_ptr<mlir::Pass> createBoxedProcedurePass(bool useThunks);
+/// Populate the given list with patterns that convert from FIR to LLVM.
+void populateFIRToLLVMConversionPatterns(fir::LLVMTypeConverter &converter,
+ mlir::RewritePatternSet &patterns,
+ fir::FIRToLLVMPassOptions &options);
+
// declarative passes
#define GEN_PASS_REGISTRATION
#include "flang/Optimizer/CodeGen/CGPasses.h.inc"
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index 7fdf39a1af731c..6823c7e7fd3eb0 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -3937,30 +3937,31 @@ class FIRToLLVMLowering
options.applyTBAA || applyTBAA,
options.forceUnifiedTBAATree, *dl};
mlir::RewritePatternSet pattern(context);
- pattern.insert<
- AbsentOpConversion, AddcOpConversion, AddrOfOpConversion,
- AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
- BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
- BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
- BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
- BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
- CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
- CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion,
- EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
- ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
- FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
- HasValueOpConversion, InsertOnRangeOpConversion,
- InsertValueOpConversion, IsPresentOpConversion,
- LenParamIndexOpConversion, LoadOpConversion, MulcOpConversion,
- NegcOpConversion, NoReassocOpConversion, SelectCaseOpConversion,
- SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion,
- ShapeOpConversion, ShapeShiftOpConversion, ShiftOpConversion,
- SliceOpConversion, StoreOpConversion, StringLitOpConversion,
- SubcOpConversion, TypeDescOpConversion, TypeInfoOpConversion,
- UnboxCharOpConversion, UnboxProcOpConversion, UndefOpConversion,
- UnreachableOpConversion, UnrealizedConversionCastOpConversion,
- XArrayCoorOpConversion, XEmboxOpConversion, XReboxOpConversion,
- ZeroOpConversion>(typeConverter, options);
+ fir::populateFIRToLLVMConversionPatterns(typeConverter, pattern, options);
+ // pattern.insert<
+ // AbsentOpConversion, AddcOpConversion, AddrOfOpConversion,
+ // AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
+ // BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
+ // BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
+ // BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
+ // BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
+ // CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
+ // CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion,
+ // EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
+ // ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
+ // FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
+ // HasValueOpConversion, InsertOnRangeOpConversion,
+ // InsertValueOpConversion, IsPresentOpConversion,
+ // LenParamIndexOpConversion, LoadOpConversion, MulcOpConversion,
+ // NegcOpConversion, NoReassocOpConversion, SelectCaseOpConversion,
+ // SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion,
+ // ShapeOpConversion, ShapeShiftOpConversion, ShiftOpConversion,
+ // SliceOpConversion, StoreOpConversion, StringLitOpConversion,
+ // SubcOpConversion, TypeDescOpConversion, TypeInfoOpConversion,
+ // UnboxCharOpConversion, UnboxProcOpConversion, UndefOpConversion,
+ // UnreachableOpConversion, UnrealizedConversionCastOpConversion,
+ // XArrayCoorOpConversion, XEmboxOpConversion, XReboxOpConversion,
+ // ZeroOpConversion>(typeConverter, options);
mlir::populateFuncToLLVMConversionPatterns(typeConverter, pattern);
mlir::populateOpenMPToLLVMConversionPatterns(typeConverter, pattern);
mlir::arith::populateArithToLLVMConversionPatterns(typeConverter, pattern);
@@ -4072,3 +4073,32 @@ fir::createLLVMDialectToLLVMPass(llvm::raw_ostream &output,
fir::LLVMIRLoweringPrinter printer) {
return std::make_unique<LLVMIRLoweringPass>(output, printer);
}
+
+void fir::populateFIRToLLVMConversionPatterns(
+ fir::LLVMTypeConverter &converter, mlir::RewritePatternSet &patterns,
+ fir::FIRToLLVMPassOptions &options) {
+ patterns.insert<
+ AbsentOpConversion, AddcOpConversion, AddrOfOpConversion,
+ AllocaOpConversion, AllocMemOpConversion, BoxAddrOpConversion,
+ BoxCharLenOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
+ BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
+ BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
+ BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
+ CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
+ CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion,
+ EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion,
+ ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion,
+ FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion,
+ HasValueOpConversion, InsertOnRangeOpConversion, InsertValueOpConversion,
+ IsPresentOpConversion, LenParamIndexOpConversion, LoadOpConversion,
+ MulcOpConversion, NegcOpConversion, NoReassocOpConversion,
+ SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion,
+ SelectTypeOpConversion, ShapeOpConversion, ShapeShiftOpConversion,
+ ShiftOpConversion, SliceOpConversion, StoreOpConversion,
+ StringLitOpConversion, SubcOpConversion, TypeDescOpConversion,
+ TypeInfoOpConversion, UnboxCharOpConversion, UnboxProcOpConversion,
+ UndefOpConversion, UnreachableOpConversion,
+ UnrealizedConversionCastOpConversion, XArrayCoorOpConversion,
+ XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(converter,
+ options);
+}
|
5f79991
to
be0ab50
Compare
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.
Thanks for bringing FIR up to date here
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 theConvertToLLVMPatternInterface
. 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.