r345009 - [DebugInfo] Generate debug information for labels. (After fix PR39094)
Hans Wennborg via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 23 06:19:46 PDT 2018
This broke Chromium again. I've reverted in rr345026
See https://bugs.chromium.org/p/chromium/issues/detail?id=898152#c1
for the reproducer.
On Tue, Oct 23, 2018 at 1:06 AM, Hsiangkai Wang via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: hsiangkai
> Date: Tue Oct 23 01:06:21 2018
> New Revision: 345009
>
> URL: http://llvm.org/viewvc/llvm-project?rev=345009&view=rev
> Log:
> [DebugInfo] Generate debug information for labels. (After fix PR39094)
>
> Generate DILabel metadata and call llvm.dbg.label after label
> statement to associate the metadata with the label.
>
> After fixing PR37395.
> After fixing problems in LiveDebugVariables.
> After fixing NULL symbol problems in AddressPool when enabling
> split-dwarf-file.
> After fixing PR39094.
>
> Differential Revision: https://reviews.llvm.org/D45045
>
> Added:
> cfe/trunk/test/CodeGen/debug-label-inline.c
> cfe/trunk/test/CodeGen/debug-label.c
> Modified:
> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> cfe/trunk/lib/CodeGen/CGDebugInfo.h
> cfe/trunk/lib/CodeGen/CGStmt.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=345009&r1=345008&r2=345009&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Tue Oct 23 01:06:21 2018
> @@ -3804,6 +3804,32 @@ CGDebugInfo::EmitDeclareOfAutoVariable(c
> return EmitDeclare(VD, Storage, llvm::None, Builder);
> }
>
> +void CGDebugInfo::EmitLabel(const LabelDecl *D, CGBuilderTy &Builder) {
> + assert(DebugKind >= codegenoptions::LimitedDebugInfo);
> + assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
> +
> + if (D->hasAttr<NoDebugAttr>())
> + return;
> +
> + auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
> + llvm::DIFile *Unit = getOrCreateFile(D->getLocation());
> +
> + // Get location information.
> + unsigned Line = getLineNumber(D->getLocation());
> + unsigned Column = getColumnNumber(D->getLocation());
> +
> + StringRef Name = D->getName();
> +
> + // Create the descriptor for the label.
> + auto *L =
> + DBuilder.createLabel(Scope, Name, Unit, Line, CGM.getLangOpts().Optimize);
> +
> + // Insert an llvm.dbg.label into the current block.
> + DBuilder.insertLabel(L,
> + llvm::DebugLoc::get(Line, Column, Scope, CurInlinedAt),
> + Builder.GetInsertBlock());
> +}
> +
> llvm::DIType *CGDebugInfo::CreateSelfType(const QualType &QualTy,
> llvm::DIType *Ty) {
> llvm::DIType *CachedTy = getTypeOrNull(QualTy);
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=345009&r1=345008&r2=345009&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Tue Oct 23 01:06:21 2018
> @@ -420,6 +420,9 @@ public:
> llvm::Value *AI,
> CGBuilderTy &Builder);
>
> + /// Emit call to \c llvm.dbg.label for an label.
> + void EmitLabel(const LabelDecl *D, CGBuilderTy &Builder);
> +
> /// Emit call to \c llvm.dbg.declare for an imported variable
> /// declaration in a block.
> void EmitDeclareOfBlockDeclRefVariable(
>
> Modified: cfe/trunk/lib/CodeGen/CGStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmt.cpp?rev=345009&r1=345008&r2=345009&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGStmt.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGStmt.cpp Tue Oct 23 01:06:21 2018
> @@ -531,6 +531,16 @@ void CodeGenFunction::EmitLabel(const La
> }
>
> EmitBlock(Dest.getBlock());
> +
> + // Emit debug info for labels.
> + if (CGDebugInfo *DI = getDebugInfo()) {
> + if (CGM.getCodeGenOpts().getDebugInfo() >=
> + codegenoptions::LimitedDebugInfo) {
> + DI->setLocation(D->getLocation());
> + DI->EmitLabel(D, Builder);
> + }
> + }
> +
> incrementProfileCounter(D->getStmt());
> }
>
>
> Added: cfe/trunk/test/CodeGen/debug-label-inline.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-label-inline.c?rev=345009&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/debug-label-inline.c (added)
> +++ cfe/trunk/test/CodeGen/debug-label-inline.c Tue Oct 23 01:06:21 2018
> @@ -0,0 +1,28 @@
> +// This test will test the correctness of generating DILabel and
> +// llvm.dbg.label when the label is in inlined functions.
> +//
> +// RUN: %clang_cc1 -O2 %s -o - -emit-llvm -debug-info-kind=limited | FileCheck %s
> +inline int f1(int a, int b) {
> + int sum;
> +
> +top:
> + sum = a + b;
> + return sum;
> +}
> +
> +extern int ga, gb;
> +
> +int f2(void) {
> + int result;
> +
> + result = f1(ga, gb);
> + // CHECK: call void @llvm.dbg.label(metadata [[LABEL_METADATA:!.*]]), !dbg [[LABEL_LOCATION:!.*]]
> +
> + return result;
> +}
> +
> +// CHECK: distinct !DISubprogram(name: "f1", {{.*}}, retainedNodes: [[ELEMENTS:!.*]])
> +// CHECK: [[ELEMENTS]] = !{{{.*}}, [[LABEL_METADATA]]}
> +// CHECK: [[LABEL_METADATA]] = !DILabel({{.*}}, name: "top", {{.*}}, line: 8)
> +// CHECK: [[INLINEDAT:!.*]] = distinct !DILocation(line: 18,
> +// CHECK: [[LABEL_LOCATION]] = !DILocation(line: 8, {{.*}}, inlinedAt: [[INLINEDAT]])
>
> Added: cfe/trunk/test/CodeGen/debug-label.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-label.c?rev=345009&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/debug-label.c (added)
> +++ cfe/trunk/test/CodeGen/debug-label.c Tue Oct 23 01:06:21 2018
> @@ -0,0 +1,16 @@
> +// This test will test the correstness of generating DILabel and
> +// llvm.dbg.label for labels.
> +//
> +// RUN: %clang_cc1 -emit-llvm %s -o - -emit-llvm -debug-info-kind=limited | FileCheck %s
> +
> +int f1(int a, int b) {
> + int sum;
> +
> +top:
> + // CHECK: call void @llvm.dbg.label(metadata [[LABEL_METADATA:!.*]]), !dbg [[LABEL_LOCATION:!.*]]
> + sum = a + b;
> + return sum;
> +}
> +
> +// CHECK: [[LABEL_METADATA]] = !DILabel({{.*}}, name: "top", {{.*}}, line: 9)
> +// CHECK: [[LABEL_LOCATION]] = !DILocation(line: 9,
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list