From cc8e531a17f815659b752594aebab58e08173411 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Fri, 8 Apr 2016 22:43:06 +0000 Subject: [PATCH] Use NoDebug compile units to mark debug metadata used only for sample-based profiling and optimization remarks and indicate that no debug info shall be emitted for these compile units. http://reviews.llvm.org/D18808 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265862 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGDebugInfo.cpp | 21 ++++++++++++++----- test/Frontend/optimization-remark.c | 5 +++-- .../profile-sample-use-loc-tracking.c | 5 +++-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 7fc41d5937..ee013a0b9b 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -396,16 +396,27 @@ void CGDebugInfo::CreateCompileUnit() { if (LO.ObjC1) RuntimeVers = LO.ObjCRuntime.isNonFragile() ? 2 : 1; + llvm::DICompileUnit::DebugEmissionKind EmissionKind; + switch (DebugKind) { + case codegenoptions::NoDebugInfo: + case codegenoptions::LocTrackingOnly: + EmissionKind = llvm::DICompileUnit::NoDebug; + break; + case codegenoptions::DebugLineTablesOnly: + EmissionKind = llvm::DICompileUnit::LineTablesOnly; + break; + case codegenoptions::LimitedDebugInfo: + case codegenoptions::FullDebugInfo: + EmissionKind = llvm::DICompileUnit::FullDebug; + break; + } + // Create new compile unit. // FIXME - Eliminate TheCU. TheCU = DBuilder.createCompileUnit( LangTag, remapDIPath(MainFileName), remapDIPath(getCurrentDirname()), Producer, LO.Optimize, CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers, - CGM.getCodeGenOpts().SplitDwarfFile, - DebugKind <= codegenoptions::DebugLineTablesOnly - ? llvm::DICompileUnit::LineTablesOnly - : llvm::DICompileUnit::FullDebug, - 0 /* DWOid */, DebugKind != codegenoptions::LocTrackingOnly); + CGM.getCodeGenOpts().SplitDwarfFile, EmissionKind, 0 /* DWOid */); } llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) { diff --git a/test/Frontend/optimization-remark.c b/test/Frontend/optimization-remark.c index e5bd75cbdb..72cad8ff60 100644 --- a/test/Frontend/optimization-remark.c +++ b/test/Frontend/optimization-remark.c @@ -27,9 +27,10 @@ // CHECK: , !dbg ! // CHECK-NOT: DW_TAG_base_type -// But llvm.dbg.cu should be missing (to prevent writing debug info to +// The CU should be marked NoDebug (to prevent writing debug info to // the final output). -// CHECK-NOT: !llvm.dbg.cu = !{ +// CHECK: !llvm.dbg.cu = !{![[CU:.*]]} +// CHECK: ![[CU]] = distinct !DICompileUnit({{.*}}emissionKind: NoDebug int foo(int x, int y) __attribute__((always_inline)); int foo(int x, int y) { return x + y; } diff --git a/test/Frontend/profile-sample-use-loc-tracking.c b/test/Frontend/profile-sample-use-loc-tracking.c index 31faad68d3..6d722c2985 100644 --- a/test/Frontend/profile-sample-use-loc-tracking.c +++ b/test/Frontend/profile-sample-use-loc-tracking.c @@ -10,9 +10,10 @@ // CHECK: , !dbg ! // CHECK-NOT: DW_TAG_base_type -// But llvm.dbg.cu should be missing (to prevent writing debug info to +// The CU should be marked NoDebug (to prevent writing debug info to // the final output). -// CHECK-NOT: !llvm.dbg.cu = !{ +// CHECK: !llvm.dbg.cu = !{![[CU:.*]]} +// CHECK: ![[CU]] = distinct !DICompileUnit({{.*}}emissionKind: NoDebug int bar(int j) { return (j + j - 2) * (j - 2) * j; -- 2.40.0