|
12 | 12 |
|
13 | 13 | #include "flang/Optimizer/CodeGen/CodeGen.h" |
14 | 14 |
|
15 | | -#include "CGOps.h" |
| 15 | +#include "flang/Optimizer/CodeGen/CGOps.h" |
16 | 16 | #include "flang/Optimizer/CodeGen/CodeGenOpenMP.h" |
17 | 17 | #include "flang/Optimizer/CodeGen/FIROpPatterns.h" |
18 | 18 | #include "flang/Optimizer/CodeGen/TypeConverter.h" |
@@ -170,6 +170,28 @@ genAllocationScaleSize(OP op, mlir::Type ity, |
170 | 170 | return nullptr; |
171 | 171 | } |
172 | 172 |
|
| 173 | +namespace { |
| 174 | +struct DeclareOpConversion : public fir::FIROpConversion<fir::cg::XDeclareOp> { |
| 175 | +public: |
| 176 | + using FIROpConversion::FIROpConversion; |
| 177 | + mlir::LogicalResult |
| 178 | + matchAndRewrite(fir::cg::XDeclareOp declareOp, OpAdaptor adaptor, |
| 179 | + mlir::ConversionPatternRewriter &rewriter) const override { |
| 180 | + auto memRef = adaptor.getOperands()[0]; |
| 181 | + if (auto fusedLoc = mlir::dyn_cast<mlir::FusedLoc>(declareOp.getLoc())) { |
| 182 | + if (auto varAttr = |
| 183 | + mlir::dyn_cast_or_null<mlir::LLVM::DILocalVariableAttr>( |
| 184 | + fusedLoc.getMetadata())) { |
| 185 | + rewriter.create<mlir::LLVM::DbgDeclareOp>(memRef.getLoc(), memRef, |
| 186 | + varAttr, nullptr); |
| 187 | + } |
| 188 | + } |
| 189 | + rewriter.replaceOp(declareOp, memRef); |
| 190 | + return mlir::success(); |
| 191 | + } |
| 192 | +}; |
| 193 | +} // namespace |
| 194 | + |
173 | 195 | namespace { |
174 | 196 | /// convert to LLVM IR dialect `alloca` |
175 | 197 | struct AllocaOpConversion : public fir::FIROpConversion<fir::AllocaOp> { |
@@ -3714,19 +3736,19 @@ void fir::populateFIRToLLVMConversionPatterns( |
3714 | 3736 | BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion, |
3715 | 3737 | BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion, |
3716 | 3738 | CmpcOpConversion, ConstcOpConversion, ConvertOpConversion, |
3717 | | - CoordinateOpConversion, DTEntryOpConversion, DivcOpConversion, |
3718 | | - EmboxOpConversion, EmboxCharOpConversion, EmboxProcOpConversion, |
3719 | | - ExtractValueOpConversion, FieldIndexOpConversion, FirEndOpConversion, |
3720 | | - FreeMemOpConversion, GlobalLenOpConversion, GlobalOpConversion, |
3721 | | - HasValueOpConversion, InsertOnRangeOpConversion, InsertValueOpConversion, |
3722 | | - IsPresentOpConversion, LenParamIndexOpConversion, LoadOpConversion, |
3723 | | - MulcOpConversion, NegcOpConversion, NoReassocOpConversion, |
3724 | | - SelectCaseOpConversion, SelectOpConversion, SelectRankOpConversion, |
3725 | | - SelectTypeOpConversion, ShapeOpConversion, ShapeShiftOpConversion, |
3726 | | - ShiftOpConversion, SliceOpConversion, StoreOpConversion, |
3727 | | - StringLitOpConversion, SubcOpConversion, TypeDescOpConversion, |
3728 | | - TypeInfoOpConversion, UnboxCharOpConversion, UnboxProcOpConversion, |
3729 | | - UndefOpConversion, UnreachableOpConversion, |
| 3739 | + CoordinateOpConversion, DTEntryOpConversion, DeclareOpConversion, |
| 3740 | + DivcOpConversion, EmboxOpConversion, EmboxCharOpConversion, |
| 3741 | + EmboxProcOpConversion, ExtractValueOpConversion, FieldIndexOpConversion, |
| 3742 | + FirEndOpConversion, FreeMemOpConversion, GlobalLenOpConversion, |
| 3743 | + GlobalOpConversion, HasValueOpConversion, InsertOnRangeOpConversion, |
| 3744 | + InsertValueOpConversion, IsPresentOpConversion, LenParamIndexOpConversion, |
| 3745 | + LoadOpConversion, MulcOpConversion, NegcOpConversion, |
| 3746 | + NoReassocOpConversion, SelectCaseOpConversion, SelectOpConversion, |
| 3747 | + SelectRankOpConversion, SelectTypeOpConversion, ShapeOpConversion, |
| 3748 | + ShapeShiftOpConversion, ShiftOpConversion, SliceOpConversion, |
| 3749 | + StoreOpConversion, StringLitOpConversion, SubcOpConversion, |
| 3750 | + TypeDescOpConversion, TypeInfoOpConversion, UnboxCharOpConversion, |
| 3751 | + UnboxProcOpConversion, UndefOpConversion, UnreachableOpConversion, |
3730 | 3752 | UnrealizedConversionCastOpConversion, XArrayCoorOpConversion, |
3731 | 3753 | XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(converter, |
3732 | 3754 | options); |
|
0 commit comments