Skip to content

Commit 4683571

Browse files
authored
Revert "[flang] Initial debug info support for local variables. (#909… (#92302)
…05)" This reverts commit 61da636. Update #90905 was causing many tests to fail. See comments in #90905.
1 parent df5804a commit 4683571

File tree

14 files changed

+47
-354
lines changed

14 files changed

+47
-354
lines changed

flang/include/flang/Optimizer/CodeGen/CGOps.td

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
include "mlir/IR/SymbolInterfaces.td"
1818
include "flang/Optimizer/Dialect/FIRTypes.td"
19-
include "flang/Optimizer/Dialect/FIRAttr.td"
20-
include "mlir/IR/BuiltinAttributes.td"
2119

2220
def fircg_Dialect : Dialect {
2321
let name = "fircg";
@@ -204,36 +202,4 @@ def fircg_XArrayCoorOp : fircg_Op<"ext_array_coor", [AttrSizedOperandSegments]>
204202
}];
205203
}
206204

207-
// Extended Declare operation.
208-
def fircg_XDeclareOp : fircg_Op<"ext_declare", [AttrSizedOperandSegments]> {
209-
let summary = "for internal conversion only";
210-
211-
let description = [{
212-
Prior to lowering to LLVM IR dialect, a DeclareOp will
213-
be converted to an extended DeclareOp.
214-
}];
215-
216-
let arguments = (ins
217-
AnyRefOrBox:$memref,
218-
Variadic<AnyIntegerType>:$shape,
219-
Variadic<AnyIntegerType>:$shift,
220-
Variadic<AnyIntegerType>:$typeparams,
221-
Optional<fir_DummyScopeType>:$dummy_scope,
222-
Builtin_StringAttr:$uniq_name
223-
);
224-
let results = (outs AnyRefOrBox);
225-
226-
let assemblyFormat = [{
227-
$memref (`(` $shape^ `)`)? (`origin` $shift^)? (`typeparams` $typeparams^)?
228-
(`dummy_scope` $dummy_scope^)?
229-
attr-dict `:` functional-type(operands, results)
230-
}];
231-
232-
let extraClassDeclaration = [{
233-
// Shape is optional, but if it exists, it will be at offset 1.
234-
unsigned shapeOffset() { return 1; }
235-
unsigned shiftOffset() { return shapeOffset() + getShape().size(); }
236-
}];
237-
}
238-
239205
#endif

flang/include/flang/Optimizer/CodeGen/CGPasses.td

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,6 @@ def CodeGenRewrite : Pass<"cg-rewrite", "mlir::ModuleOp"> {
4747
let dependentDialects = [
4848
"fir::FIROpsDialect", "fir::FIRCodeGenDialect"
4949
];
50-
let options = [
51-
Option<"preserveDeclare", "preserve-declare", "bool", /*default=*/"false",
52-
"Preserve DeclareOp during pre codegen re-write.">
53-
];
5450
let statistics = [
5551
Statistic<"numDCE", "num-dce'd", "Number of operations eliminated">
5652
];

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ struct NameUniquer;
3030

3131
/// Prerequiste pass for code gen. Perform intermediate rewrites to perform
3232
/// the code gen (to LLVM-IR dialect) conversion.
33-
std::unique_ptr<mlir::Pass> createFirCodeGenRewritePass(
34-
CodeGenRewriteOptions Options = CodeGenRewriteOptions{});
33+
std::unique_ptr<mlir::Pass> createFirCodeGenRewritePass();
3534

3635
/// FirTargetRewritePass options.
3736
struct TargetRewriteOptions {
@@ -89,8 +88,7 @@ void populateFIRToLLVMConversionPatterns(fir::LLVMTypeConverter &converter,
8988
fir::FIRToLLVMPassOptions &options);
9089

9190
/// Populate the pattern set with the PreCGRewrite patterns.
92-
void populatePreCGRewritePatterns(mlir::RewritePatternSet &patterns,
93-
bool preserveDeclare);
91+
void populatePreCGRewritePatterns(mlir::RewritePatternSet &patterns);
9492

9593
// declarative passes
9694
#define GEN_PASS_REGISTRATION

flang/include/flang/Tools/CLOptions.inc

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,9 @@ inline void addMemoryAllocationOpt(mlir::PassManager &pm) {
169169
}
170170

171171
#if !defined(FLANG_EXCLUDE_CODEGEN)
172-
inline void addCodeGenRewritePass(mlir::PassManager &pm, bool preserveDeclare) {
173-
fir::CodeGenRewriteOptions options;
174-
options.preserveDeclare = preserveDeclare;
175-
addPassConditionally(pm, disableCodeGenRewrite,
176-
[&]() { return fir::createFirCodeGenRewritePass(options); });
172+
inline void addCodeGenRewritePass(mlir::PassManager &pm) {
173+
addPassConditionally(
174+
pm, disableCodeGenRewrite, fir::createFirCodeGenRewritePass);
177175
}
178176

179177
inline void addTargetRewritePass(mlir::PassManager &pm) {
@@ -355,8 +353,7 @@ inline void createDefaultFIRCodeGenPassPipeline(mlir::PassManager &pm,
355353
MLIRToLLVMPassPipelineConfig config, llvm::StringRef inputFilename = {}) {
356354
fir::addBoxedProcedurePass(pm);
357355
addNestedPassToAllTopLevelOperations(pm, fir::createAbstractResultOpt);
358-
fir::addCodeGenRewritePass(
359-
pm, (config.DebugInfo != llvm::codegenoptions::NoDebugInfo));
356+
fir::addCodeGenRewritePass(pm);
360357
fir::addTargetRewritePass(pm);
361358
fir::addExternalNameConversionPass(pm, config.Underscoring);
362359
fir::createDebugPasses(pm, config.DebugInfo, config.OptLevel, inputFilename);

flang/lib/Optimizer/CodeGen/CGOps.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
#include "flang/Optimizer/CodeGen/CGOps.h"
13+
#include "CGOps.h"
1414
#include "flang/Optimizer/Dialect/FIRDialect.h"
1515
#include "flang/Optimizer/Dialect/FIROps.h"
1616
#include "flang/Optimizer/Dialect/FIRType.h"

flang/include/flang/Optimizer/CodeGen/CGOps.h renamed to flang/lib/Optimizer/CodeGen/CGOps.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#ifndef OPTIMIZER_CODEGEN_CGOPS_H
1414
#define OPTIMIZER_CODEGEN_CGOPS_H
1515

16-
#include "flang/Optimizer/Dialect/FIRAttr.h"
1716
#include "flang/Optimizer/Dialect/FIRType.h"
1817
#include "mlir/Dialect/Func/IR/FuncOps.h"
1918

flang/lib/Optimizer/CodeGen/CodeGen.cpp

Lines changed: 14 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
#include "flang/Optimizer/CodeGen/CodeGen.h"
1414

15-
#include "flang/Optimizer/CodeGen/CGOps.h"
15+
#include "CGOps.h"
1616
#include "flang/Optimizer/CodeGen/CodeGenOpenMP.h"
1717
#include "flang/Optimizer/CodeGen/FIROpPatterns.h"
1818
#include "flang/Optimizer/CodeGen/TypeConverter.h"
@@ -170,28 +170,6 @@ genAllocationScaleSize(OP op, mlir::Type ity,
170170
return nullptr;
171171
}
172172

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-
195173
namespace {
196174
/// convert to LLVM IR dialect `alloca`
197175
struct AllocaOpConversion : public fir::FIROpConversion<fir::AllocaOp> {
@@ -3736,19 +3714,19 @@ void fir::populateFIRToLLVMConversionPatterns(
37363714
BoxOffsetOpConversion, BoxProcHostOpConversion, BoxRankOpConversion,
37373715
BoxTypeCodeOpConversion, BoxTypeDescOpConversion, CallOpConversion,
37383716
CmpcOpConversion, ConstcOpConversion, ConvertOpConversion,
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,
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,
37523730
UnrealizedConversionCastOpConversion, XArrayCoorOpConversion,
37533731
XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(converter,
37543732
options);

flang/lib/Optimizer/CodeGen/PreCGRewrite.cpp

Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212

1313
#include "flang/Optimizer/CodeGen/CodeGen.h"
1414

15+
#include "CGOps.h"
1516
#include "flang/Optimizer/Builder/Todo.h" // remove when TODO's are done
16-
#include "flang/Optimizer/CodeGen/CGOps.h"
1717
#include "flang/Optimizer/Dialect/FIRDialect.h"
1818
#include "flang/Optimizer/Dialect/FIROps.h"
1919
#include "flang/Optimizer/Dialect/FIRType.h"
@@ -270,43 +270,13 @@ class ArrayCoorConversion : public mlir::OpRewritePattern<fir::ArrayCoorOp> {
270270
};
271271

272272
class DeclareOpConversion : public mlir::OpRewritePattern<fir::DeclareOp> {
273-
bool preserveDeclare;
274-
275273
public:
276274
using OpRewritePattern::OpRewritePattern;
277-
DeclareOpConversion(mlir::MLIRContext *ctx, bool preserveDecl)
278-
: OpRewritePattern(ctx), preserveDeclare(preserveDecl) {}
279275

280276
mlir::LogicalResult
281277
matchAndRewrite(fir::DeclareOp declareOp,
282278
mlir::PatternRewriter &rewriter) const override {
283-
if (!preserveDeclare) {
284-
rewriter.replaceOp(declareOp, declareOp.getMemref());
285-
return mlir::success();
286-
}
287-
auto loc = declareOp.getLoc();
288-
llvm::SmallVector<mlir::Value> shapeOpers;
289-
llvm::SmallVector<mlir::Value> shiftOpers;
290-
if (auto shapeVal = declareOp.getShape()) {
291-
if (auto shapeOp = mlir::dyn_cast<fir::ShapeOp>(shapeVal.getDefiningOp()))
292-
populateShape(shapeOpers, shapeOp);
293-
else if (auto shiftOp =
294-
mlir::dyn_cast<fir::ShapeShiftOp>(shapeVal.getDefiningOp()))
295-
populateShapeAndShift(shapeOpers, shiftOpers, shiftOp);
296-
else if (auto shiftOp =
297-
mlir::dyn_cast<fir::ShiftOp>(shapeVal.getDefiningOp()))
298-
populateShift(shiftOpers, shiftOp);
299-
else
300-
return mlir::failure();
301-
}
302-
// FIXME: Add FortranAttrs and CudaAttrs
303-
auto xDeclOp = rewriter.create<fir::cg::XDeclareOp>(
304-
loc, declareOp.getType(), declareOp.getMemref(), shapeOpers, shiftOpers,
305-
declareOp.getTypeparams(), declareOp.getDummyScope(),
306-
declareOp.getUniqName());
307-
LLVM_DEBUG(llvm::dbgs()
308-
<< "rewriting " << declareOp << " to " << xDeclOp << '\n');
309-
rewriter.replaceOp(declareOp, xDeclOp.getOperation()->getResults());
279+
rewriter.replaceOp(declareOp, declareOp.getMemref());
310280
return mlir::success();
311281
}
312282
};
@@ -327,7 +297,6 @@ class DummyScopeOpConversion
327297

328298
class CodeGenRewrite : public fir::impl::CodeGenRewriteBase<CodeGenRewrite> {
329299
public:
330-
CodeGenRewrite(fir::CodeGenRewriteOptions opts) : Base(opts) {}
331300
void runOnOperation() override final {
332301
mlir::ModuleOp mod = getOperation();
333302

@@ -345,7 +314,7 @@ class CodeGenRewrite : public fir::impl::CodeGenRewriteBase<CodeGenRewrite> {
345314
mlir::cast<fir::BaseBoxType>(embox.getType()).getEleTy()));
346315
});
347316
mlir::RewritePatternSet patterns(&context);
348-
fir::populatePreCGRewritePatterns(patterns, preserveDeclare);
317+
fir::populatePreCGRewritePatterns(patterns);
349318
if (mlir::failed(
350319
mlir::applyPartialConversion(mod, target, std::move(patterns)))) {
351320
mlir::emitError(mlir::UnknownLoc::get(&context),
@@ -361,14 +330,12 @@ class CodeGenRewrite : public fir::impl::CodeGenRewriteBase<CodeGenRewrite> {
361330

362331
} // namespace
363332

364-
std::unique_ptr<mlir::Pass>
365-
fir::createFirCodeGenRewritePass(fir::CodeGenRewriteOptions Options) {
366-
return std::make_unique<CodeGenRewrite>(Options);
333+
std::unique_ptr<mlir::Pass> fir::createFirCodeGenRewritePass() {
334+
return std::make_unique<CodeGenRewrite>();
367335
}
368336

369-
void fir::populatePreCGRewritePatterns(mlir::RewritePatternSet &patterns,
370-
bool preserveDeclare) {
337+
void fir::populatePreCGRewritePatterns(mlir::RewritePatternSet &patterns) {
371338
patterns.insert<EmboxConversion, ArrayCoorConversion, ReboxConversion,
372-
DummyScopeOpConversion>(patterns.getContext());
373-
patterns.add<DeclareOpConversion>(patterns.getContext(), preserveDeclare);
339+
DeclareOpConversion, DummyScopeOpConversion>(
340+
patterns.getContext());
374341
}

flang/lib/Optimizer/Transforms/AddDebugInfo.cpp

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include "flang/Common/Version.h"
1616
#include "flang/Optimizer/Builder/FIRBuilder.h"
1717
#include "flang/Optimizer/Builder/Todo.h"
18-
#include "flang/Optimizer/CodeGen/CGOps.h"
1918
#include "flang/Optimizer/Dialect/FIRDialect.h"
2019
#include "flang/Optimizer/Dialect/FIROps.h"
2120
#include "flang/Optimizer/Dialect/FIRType.h"
@@ -46,59 +45,13 @@ namespace fir {
4645
namespace {
4746

4847
class AddDebugInfoPass : public fir::impl::AddDebugInfoBase<AddDebugInfoPass> {
49-
void handleDeclareOp(fir::cg::XDeclareOp declOp,
50-
mlir::LLVM::DIFileAttr fileAttr,
51-
mlir::LLVM::DIScopeAttr scopeAttr,
52-
fir::DebugTypeGenerator &typeGen);
53-
5448
public:
5549
AddDebugInfoPass(fir::AddDebugInfoOptions options) : Base(options) {}
5650
void runOnOperation() override;
5751
};
5852

59-
static uint32_t getLineFromLoc(mlir::Location loc) {
60-
uint32_t line = 1;
61-
if (auto fileLoc = mlir::dyn_cast<mlir::FileLineColLoc>(loc))
62-
line = fileLoc.getLine();
63-
return line;
64-
}
65-
6653
} // namespace
6754

68-
void AddDebugInfoPass::handleDeclareOp(fir::cg::XDeclareOp declOp,
69-
mlir::LLVM::DIFileAttr fileAttr,
70-
mlir::LLVM::DIScopeAttr scopeAttr,
71-
fir::DebugTypeGenerator &typeGen) {
72-
mlir::MLIRContext *context = &getContext();
73-
mlir::OpBuilder builder(context);
74-
auto result = fir::NameUniquer::deconstruct(declOp.getUniqName());
75-
76-
if (result.first != fir::NameUniquer::NameKind::VARIABLE)
77-
return;
78-
79-
// Only accept local variables.
80-
if (result.second.procs.empty())
81-
return;
82-
83-
// FIXME: There may be cases where an argument is processed a bit before
84-
// DeclareOp is generated. In that case, DeclareOp may point to an
85-
// intermediate op and not to BlockArgument. We need to find those cases and
86-
// walk the chain to get to the actual argument.
87-
88-
unsigned argNo = 0;
89-
if (auto Arg = llvm::dyn_cast<mlir::BlockArgument>(declOp.getMemref()))
90-
argNo = Arg.getArgNumber() + 1;
91-
92-
auto tyAttr = typeGen.convertType(fir::unwrapRefType(declOp.getType()),
93-
fileAttr, scopeAttr, declOp.getLoc());
94-
95-
auto localVarAttr = mlir::LLVM::DILocalVariableAttr::get(
96-
context, scopeAttr, mlir::StringAttr::get(context, result.second.name),
97-
fileAttr, getLineFromLoc(declOp.getLoc()), argNo, /* alignInBits*/ 0,
98-
tyAttr);
99-
declOp->setLoc(builder.getFusedLoc({declOp->getLoc()}, localVarAttr));
100-
}
101-
10255
void AddDebugInfoPass::runOnOperation() {
10356
mlir::ModuleOp module = getOperation();
10457
mlir::MLIRContext *context = &getContext();
@@ -191,15 +144,14 @@ void AddDebugInfoPass::runOnOperation() {
191144
subprogramFlags =
192145
subprogramFlags | mlir::LLVM::DISubprogramFlags::Definition;
193146
}
194-
unsigned line = getLineFromLoc(l);
147+
unsigned line = 1;
148+
if (auto funcLoc = mlir::dyn_cast<mlir::FileLineColLoc>(l))
149+
line = funcLoc.getLine();
150+
195151
auto spAttr = mlir::LLVM::DISubprogramAttr::get(
196152
context, id, compilationUnit, fileAttr, funcName, fullName,
197153
funcFileAttr, line, line, subprogramFlags, subTypeAttr);
198154
funcOp->setLoc(builder.getFusedLoc({funcOp->getLoc()}, spAttr));
199-
200-
funcOp.walk([&](fir::cg::XDeclareOp declOp) {
201-
handleDeclareOp(declOp, fileAttr, spAttr, typeGen);
202-
});
203155
});
204156
}
205157

flang/lib/Optimizer/Transforms/DebugTypeGenerator.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ DebugTypeGenerator::DebugTypeGenerator(mlir::ModuleOp m)
2424
LLVM_DEBUG(llvm::dbgs() << "DITypeAttr generator\n");
2525
}
2626

27+
static mlir::LLVM::DITypeAttr genPlaceholderType(mlir::MLIRContext *context) {
28+
return mlir::LLVM::DIBasicTypeAttr::get(
29+
context, llvm::dwarf::DW_TAG_base_type, "void", 32, 1);
30+
}
31+
2732
static mlir::LLVM::DITypeAttr genBasicType(mlir::MLIRContext *context,
2833
mlir::StringAttr name,
2934
unsigned bitSize,
@@ -32,11 +37,6 @@ static mlir::LLVM::DITypeAttr genBasicType(mlir::MLIRContext *context,
3237
context, llvm::dwarf::DW_TAG_base_type, name, bitSize, decoding);
3338
}
3439

35-
static mlir::LLVM::DITypeAttr genPlaceholderType(mlir::MLIRContext *context) {
36-
return genBasicType(context, mlir::StringAttr::get(context, "integer"), 32,
37-
llvm::dwarf::DW_ATE_signed);
38-
}
39-
4040
mlir::LLVM::DITypeAttr
4141
DebugTypeGenerator::convertType(mlir::Type Ty, mlir::LLVM::DIFileAttr fileAttr,
4242
mlir::LLVM::DIScopeAttr scope,

0 commit comments

Comments
 (0)