[flang][debug] Avoid redundant module info. (#161542)
Fixes https://github.com/llvm/llvm-project/issues/160907. When a module is just being used and not defined, we generate it with decl=true. But if the file/line fields are valid, the module is not merged with the original and is considered different. This patch avoids setting file/line/scope in such cases.
This commit is contained in:
parent
cc9c64d525
commit
6c40c76c21
@ -285,11 +285,16 @@ mlir::LLVM::DIModuleAttr AddDebugInfoPass::getOrCreateModuleAttr(
|
||||
if (auto iter{moduleMap.find(name)}; iter != moduleMap.end()) {
|
||||
modAttr = iter->getValue();
|
||||
} else {
|
||||
// When decl is true, it means that module is only being used in this
|
||||
// compilation unit and it is defined elsewhere. But if the file/line/scope
|
||||
// fields are valid, the module is not merged with its definition and is
|
||||
// considered different. So we only set those fields when decl is false.
|
||||
modAttr = mlir::LLVM::DIModuleAttr::get(
|
||||
context, fileAttr, scope, mlir::StringAttr::get(context, name),
|
||||
context, decl ? nullptr : fileAttr, decl ? nullptr : scope,
|
||||
mlir::StringAttr::get(context, name),
|
||||
/* configMacros */ mlir::StringAttr(),
|
||||
/* includePath */ mlir::StringAttr(),
|
||||
/* apinotes */ mlir::StringAttr(), line, decl);
|
||||
/* apinotes */ mlir::StringAttr(), decl ? 0 : line, decl);
|
||||
moduleMap[name] = modAttr;
|
||||
}
|
||||
return modAttr;
|
||||
|
||||
13
flang/test/Transforms/debug-module-3.fir
Normal file
13
flang/test/Transforms/debug-module-3.fir
Normal file
@ -0,0 +1,13 @@
|
||||
// RUN: fir-opt --add-debug-info --mlir-print-debuginfo %s | FileCheck %s
|
||||
|
||||
module {
|
||||
func.func @_QQmain() {
|
||||
%2 = fir.address_of(@_QMmodEvar1) : !fir.ref<i32> loc(#loc1)
|
||||
%3 = fircg.ext_declare %2 {uniq_name = "_QMmodEvar1"} : (!fir.ref<i32>) -> !fir.ref<i32> loc(#loc1)
|
||||
return
|
||||
} loc(#loc1)
|
||||
fir.global @_QMmodEvar1 : i32 loc(#loc1)
|
||||
}
|
||||
#loc1 = loc("test1.f90":1:0)
|
||||
|
||||
// CHECK: #llvm.di_module<name = "mod", isDecl = true>
|
||||
Loading…
x
Reference in New Issue
Block a user