mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-05 18:27:59 +00:00
MachineModuleInfo: Initialize DbgInfoAvailable depending on debug_cus existing
Before this patch DbgInfoAvailable was set to true in DwarfDebug::beginModule() or CodeViewDebug::CodeViewDebug(). This made MIR testing weird since passes would suddenly stop dealing with debug info just because we stopped the pipeline before the debug printers. This patch changes the logic to initialize DbgInfoAvailable based on the fact that debug_compile_units exist in the llvm Module. The debug printers may then override it with false in case of debug printing being disabled. Differential Revision: https://reviews.llvm.org/D53885 llvm-svn: 345740
This commit is contained in:
parent
936915cfd1
commit
8bd2548ab8
@ -117,6 +117,7 @@ CodeViewDebug::CodeViewDebug(AsmPrinter *AP)
|
||||
if (!MMI->getModule()->getNamedMetadata("llvm.dbg.cu") ||
|
||||
!AP->getObjFileLowering().getCOFFDebugSymbolsSection()) {
|
||||
Asm = nullptr;
|
||||
MMI->setDebugInfoAvailability(false);
|
||||
return;
|
||||
}
|
||||
// Tell MMI that we have debug info.
|
||||
|
@ -701,15 +701,18 @@ sortGlobalExprs(SmallVectorImpl<DwarfCompileUnit::GlobalExpr> &GVEs) {
|
||||
void DwarfDebug::beginModule() {
|
||||
NamedRegionTimer T(DbgTimerName, DbgTimerDescription, DWARFGroupName,
|
||||
DWARFGroupDescription, TimePassesIsEnabled);
|
||||
if (DisableDebugInfoPrinting)
|
||||
if (DisableDebugInfoPrinting) {
|
||||
MMI->setDebugInfoAvailability(false);
|
||||
return;
|
||||
}
|
||||
|
||||
const Module *M = MMI->getModule();
|
||||
|
||||
unsigned NumDebugCUs = std::distance(M->debug_compile_units_begin(),
|
||||
M->debug_compile_units_end());
|
||||
// Tell MMI whether we have debug info.
|
||||
MMI->setDebugInfoAvailability(NumDebugCUs > 0);
|
||||
assert(MMI->hasDebugInfo() == (NumDebugCUs > 0) &&
|
||||
"DebugInfoAvailabilty initialized unexpectedly");
|
||||
SingleCU = NumDebugCUs == 1;
|
||||
DenseMap<DIGlobalVariable *, SmallVector<DwarfCompileUnit::GlobalExpr, 1>>
|
||||
GVMap;
|
||||
|
@ -206,10 +206,11 @@ MachineModuleInfo::~MachineModuleInfo() = default;
|
||||
bool MachineModuleInfo::doInitialization(Module &M) {
|
||||
ObjFileMMI = nullptr;
|
||||
CurCallSite = 0;
|
||||
DbgInfoAvailable = UsesVAFloatArgument = UsesMorestackAddr = false;
|
||||
UsesVAFloatArgument = UsesMorestackAddr = false;
|
||||
HasSplitStack = HasNosplitStack = false;
|
||||
AddrLabelSymbols = nullptr;
|
||||
TheModule = &M;
|
||||
DbgInfoAvailable = !empty(M.debug_compile_units());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
26
test/CodeGen/AArch64/fast-isel-dbg.ll
Normal file
26
test/CodeGen/AArch64/fast-isel-dbg.ll
Normal file
@ -0,0 +1,26 @@
|
||||
; RUN: llc -o - %s -fast-isel -stop-before=expand-isel-pseudos | FileCheck %s
|
||||
; Make sure fast-isel produces DBG_VALUE instructions even if no debug printer
|
||||
; is scheduled because of -stop-before.
|
||||
target triple="aarch64--"
|
||||
|
||||
; CHECK-LABEL: name: func
|
||||
; CHECK: DBG_VALUE
|
||||
define void @func(i32 %a) !dbg !4 {
|
||||
call void @llvm.dbg.declare(metadata i32 %a, metadata !5, metadata !DIExpression()), !dbg !7
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
|
||||
attributes #0 = { nounwind readnone speculatable }
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
!llvm.module.flags = !{!2, !3}
|
||||
|
||||
!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: LineTablesOnly)
|
||||
!1 = !DIFile(filename: "fast-isel-dbg.ll", directory: "/")
|
||||
!2 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
!3 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
!4 = distinct !DISubprogram(name: "func", scope: null, isLocal: false, isDefinition: true, isOptimized: false, unit: !0)
|
||||
!5 = !DILocalVariable(name: "a", arg: 1, scope: !4, file: !1, line: 17, type: !6)
|
||||
!6 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
|
||||
!7 = !DILocation(line: 17, scope: !4)
|
Loading…
Reference in New Issue
Block a user