r342717 - [CodeGen] Add to emitted DebugLoc information about coverage when it's required
Calixte Denizet via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 21 02:17:07 PDT 2018
Author: calixte
Date: Fri Sep 21 02:17:06 2018
New Revision: 342717
URL: http://llvm.org/viewvc/llvm-project?rev=342717&view=rev
Log:
[CodeGen] Add to emitted DebugLoc information about coverage when it's required
Summary:
Some lines have a hit counter where they should not have one.
Cleanup stuff is located to the last line of the body which is most of the time a '}'.
And Exception stuff is added at the beginning of a function and at the end (represented by '{' and '}').
So in such cases, the DebugLoc used in GCOVProfiling.cpp must be marked as not covered.
This patch is a followup of https://reviews.llvm.org/D49915.
Tests in projects/compiler_rt are fixed by: https://reviews.llvm.org/D49917
Reviewers: marco-c, davidxl
Reviewed By: marco-c
Subscribers: dblaikie, cfe-commits, sylvestre.ledru
Differential Revision: https://reviews.llvm.org/D49916
Modified:
cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
cfe/trunk/lib/CodeGen/CGDebugInfo.h
cfe/trunk/lib/CodeGen/CGException.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
cfe/trunk/lib/CodeGen/CodeGenFunction.h
cfe/trunk/test/CodeGen/debug-info-scope-file.c
cfe/trunk/test/CodeGenCXX/debug-info-inheriting-constructor.cpp
cfe/trunk/test/CodeGenCXX/linetable-virtual-variadic.cpp
cfe/trunk/test/CodeGenObjC/arc-linetable.m
cfe/trunk/test/CodeGenObjC/debug-info-blocks.m
Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Fri Sep 21 02:17:06 2018
@@ -76,20 +76,22 @@ CGDebugInfo::~CGDebugInfo() {
}
ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF,
- SourceLocation TemporaryLocation)
+ SourceLocation TemporaryLocation,
+ bool ImplicitCode)
: CGF(&CGF) {
- init(TemporaryLocation);
+ init(TemporaryLocation, false /* DefaultToEmpty */, ImplicitCode);
}
ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF,
bool DefaultToEmpty,
- SourceLocation TemporaryLocation)
+ SourceLocation TemporaryLocation,
+ bool ImplicitCode)
: CGF(&CGF) {
- init(TemporaryLocation, DefaultToEmpty);
+ init(TemporaryLocation, DefaultToEmpty, ImplicitCode);
}
void ApplyDebugLocation::init(SourceLocation TemporaryLocation,
- bool DefaultToEmpty) {
+ bool DefaultToEmpty, bool ImplicitCode) {
auto *DI = CGF->getDebugInfo();
if (!DI) {
CGF = nullptr;
@@ -102,7 +104,7 @@ void ApplyDebugLocation::init(SourceLoca
return;
if (TemporaryLocation.isValid()) {
- DI->EmitLocation(CGF->Builder, TemporaryLocation);
+ DI->EmitLocation(CGF->Builder, TemporaryLocation, ImplicitCode);
return;
}
@@ -3484,7 +3486,8 @@ void CGDebugInfo::EmitInlineFunctionEnd(
setInlinedAt(llvm::DebugLoc(CurInlinedAt).getInlinedAt());
}
-void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc) {
+void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc,
+ bool ImplicitCode) {
// Update our current location
setLocation(Loc);
@@ -3492,8 +3495,9 @@ void CGDebugInfo::EmitLocation(CGBuilder
return;
llvm::MDNode *Scope = LexicalBlockStack.back();
- Builder.SetCurrentDebugLocation(llvm::DebugLoc::get(
- getLineNumber(CurLoc), getColumnNumber(CurLoc), Scope, CurInlinedAt));
+ Builder.SetCurrentDebugLocation(
+ llvm::DebugLoc::get(getLineNumber(CurLoc), getColumnNumber(CurLoc), Scope,
+ CurInlinedAt, ImplicitCode));
}
void CGDebugInfo::CreateLexicalBlock(SourceLocation Loc) {
@@ -3540,7 +3544,7 @@ void CGDebugInfo::EmitLexicalBlockEnd(CG
assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!");
// Provide an entry in the line table for the end of the block.
- EmitLocation(Builder, Loc);
+ EmitLocation(Builder, Loc, true /* ImplicitCode */);
if (DebugKind <= codegenoptions::DebugLineTablesOnly)
return;
@@ -3556,7 +3560,7 @@ void CGDebugInfo::EmitFunctionEnd(CGBuil
// Pop all regions for this function.
while (LexicalBlockStack.size() != RCount) {
// Provide an entry in the line table for the end of the block.
- EmitLocation(Builder, CurLoc);
+ EmitLocation(Builder, CurLoc, true /* ImplicitCode */);
LexicalBlockStack.pop_back();
}
FnBeginRegionCount.pop_back();
Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
+++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Fri Sep 21 02:17:06 2018
@@ -377,7 +377,9 @@ public:
/// Emit metadata to indicate a change in line/column information in
/// the source file. If the location is invalid, the previous
/// location will be reused.
- void EmitLocation(CGBuilderTy &Builder, SourceLocation Loc);
+ /// \param ImplicitCode True if the Loc must have coverage information
+ void EmitLocation(CGBuilderTy &Builder, SourceLocation Loc,
+ bool ImplicitCode = false);
/// Emit a call to llvm.dbg.function.start to indicate
/// start of a new function.
@@ -664,16 +666,19 @@ private:
/// location or preferred location of the specified Expr.
class ApplyDebugLocation {
private:
- void init(SourceLocation TemporaryLocation, bool DefaultToEmpty = false);
+ void init(SourceLocation TemporaryLocation, bool DefaultToEmpty = false,
+ bool ImplicitCode = false);
ApplyDebugLocation(CodeGenFunction &CGF, bool DefaultToEmpty,
- SourceLocation TemporaryLocation);
+ SourceLocation TemporaryLocation,
+ bool ImplicitCode = false);
llvm::DebugLoc OriginalLocation;
CodeGenFunction *CGF;
public:
/// Set the location to the (valid) TemporaryLocation.
- ApplyDebugLocation(CodeGenFunction &CGF, SourceLocation TemporaryLocation);
+ ApplyDebugLocation(CodeGenFunction &CGF, SourceLocation TemporaryLocation,
+ bool ImplicitCode = false);
ApplyDebugLocation(CodeGenFunction &CGF, const Expr *E);
ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc);
ApplyDebugLocation(ApplyDebugLocation &&Other) : CGF(Other.CGF) {
@@ -696,13 +701,15 @@ public:
static ApplyDebugLocation CreateArtificial(CodeGenFunction &CGF) {
return ApplyDebugLocation(CGF, false, SourceLocation());
}
+
/// Apply TemporaryLocation if it is valid. Otherwise switch
/// to an artificial debug location that has a valid scope, but no
/// line information.
static ApplyDebugLocation
CreateDefaultArtificial(CodeGenFunction &CGF,
- SourceLocation TemporaryLocation) {
- return ApplyDebugLocation(CGF, false, TemporaryLocation);
+ SourceLocation TemporaryLocation,
+ bool ImplicitCode = false) {
+ return ApplyDebugLocation(CGF, false, TemporaryLocation, ImplicitCode);
}
/// Set the IRBuilder to not attach debug locations. Note that
Modified: cfe/trunk/lib/CodeGen/CGException.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGException.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGException.cpp Fri Sep 21 02:17:06 2018
@@ -767,7 +767,8 @@ llvm::BasicBlock *CodeGenFunction::EmitL
// Save the current IR generation state.
CGBuilderTy::InsertPoint savedIP = Builder.saveAndClearIP();
- auto DL = ApplyDebugLocation::CreateDefaultArtificial(*this, CurEHLocation);
+ auto DL = ApplyDebugLocation::CreateDefaultArtificial(
+ *this, CurEHLocation, true /* ImplicitCode */);
// Create and configure the landing pad.
llvm::BasicBlock *lpad = createBasicBlock("lpad");
Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Fri Sep 21 02:17:06 2018
@@ -317,7 +317,7 @@ void CodeGenFunction::FinishFunction(Sou
if (OnlySimpleReturnStmts)
DI->EmitLocation(Builder, LastStopPoint);
else
- DI->EmitLocation(Builder, EndLoc);
+ DI->EmitLocation(Builder, EndLoc, true /* ImplicitCode */);
}
// Pop any cleanups that might have been associated with the
@@ -333,7 +333,7 @@ void CodeGenFunction::FinishFunction(Sou
// the ret after it's been at EndLoc.
if (CGDebugInfo *DI = getDebugInfo())
if (OnlySimpleReturnStmts)
- DI->EmitLocation(Builder, EndLoc);
+ DI->EmitLocation(Builder, EndLoc, true /* ImplicitCode */);
PopCleanupBlocks(PrologueCleanupDepth);
}
@@ -1179,7 +1179,7 @@ void CodeGenFunction::StartFunction(Glob
}
// Emit a location at the end of the prologue.
if (CGDebugInfo *DI = getDebugInfo())
- DI->EmitLocation(Builder, StartLoc);
+ DI->EmitLocation(Builder, StartLoc, true /* ImplicitCode */);
// TODO: Do we need to handle this in two places like we do with
// target-features/target-cpu?
Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Fri Sep 21 02:17:06 2018
@@ -786,7 +786,7 @@ public:
// If we should perform a cleanup, force them now. Note that
// this ends the cleanup scope before rescoping any labels.
if (PerformCleanup) {
- ApplyDebugLocation DL(CGF, Range.getEnd());
+ ApplyDebugLocation DL(CGF, Range.getEnd(), true /* ImplicitCode */);
ForceCleanup();
}
}
Modified: cfe/trunk/test/CodeGen/debug-info-scope-file.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-info-scope-file.c?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/debug-info-scope-file.c (original)
+++ cfe/trunk/test/CodeGen/debug-info-scope-file.c Fri Sep 21 02:17:06 2018
@@ -5,10 +5,11 @@
// CHECK: ret void, !dbg [[F1_LINE:![0-9]*]]
// CHECK: ret void, !dbg [[F2_LINE:![0-9]*]]
-// CHECK: [[F1:![0-9]*]] = distinct !DISubprogram(name: "f1",{{.*}} isDefinition: true
-// CHECK: [[F1_LINE]] = !DILocation({{.*}}, scope: [[F1]])
-// CHECK: [[F2:![0-9]*]] = distinct !DISubprogram(name: "f2",{{.*}} isDefinition: true
-// CHECK: [[F2_LINE]] = !DILocation({{.*}}, scope: [[F2]])
+// CHECK: [[F1:![0-9]*]] = distinct !DISubprogram(name: "f1",{{.*}}
+// isDefinition: true CHECK: [[F1_LINE]] = !DILocation({{.*}}, scope: [[F1]],
+// isImplicitCode: true) CHECK: [[F2:![0-9]*]] = distinct !DISubprogram(name:
+// "f2",{{.*}} isDefinition: true CHECK: [[F2_LINE]] = !DILocation({{.*}},
+// scope: [[F2]], isImplicitCode: true)
void f1() {
}
Modified: cfe/trunk/test/CodeGenCXX/debug-info-inheriting-constructor.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-inheriting-constructor.cpp?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/debug-info-inheriting-constructor.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/debug-info-inheriting-constructor.cpp Fri Sep 21 02:17:06 2018
@@ -21,5 +21,5 @@ void foo() {
// CHECK-DAG: ![[LOC]] = !DILocation(line: 0, scope: ![[A]], inlinedAt: ![[INL:[0-9]+]])
// CHECK-DAG: ![[INL]] = !DILocation(line: [[@LINE+1]], scope: ![[FOO]])
B b(0);
-// CHECK: ![[NOINL]] = !DILocation(line: [[@LINE+1]], scope: !{{[0-9]+}})
+ // CHECK: ![[NOINL]] = !DILocation(line: [[@LINE+1]], scope: !{{[0-9]+}}, isImplicitCode: true)
}
Modified: cfe/trunk/test/CodeGenCXX/linetable-virtual-variadic.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/linetable-virtual-variadic.cpp?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/linetable-virtual-variadic.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/linetable-virtual-variadic.cpp Fri Sep 21 02:17:06 2018
@@ -17,6 +17,6 @@ void Derived::VariadicFunction(...) { }
// CHECK: ret void, !dbg ![[LOC_I:[0-9]+]]
//
// CHECK: ![[SP]] = distinct !DISubprogram(name: "VariadicFunction"
-// CHECK: ![[LOC]] = !DILocation({{.*}}scope: ![[SP]])
+// CHECK: ![[LOC]] = !DILocation({{.*}}scope: ![[SP]], isImplicitCode: true)
// CHECK: ![[SP_I]] = distinct !DISubprogram(name: "VariadicFunction"
-// CHECK: ![[LOC_I]] = !DILocation({{.*}}scope: ![[SP_I]])
+// CHECK: ![[LOC_I]] = !DILocation({{.*}}scope: ![[SP_I]], isImplicitCode: true)
Modified: cfe/trunk/test/CodeGenObjC/arc-linetable.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/arc-linetable.m?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenObjC/arc-linetable.m (original)
+++ cfe/trunk/test/CodeGenObjC/arc-linetable.m Fri Sep 21 02:17:06 2018
@@ -60,7 +60,7 @@ typedef signed char BOOL;
- (int)testNoSideEffect:(NSString *)foo {
int x = 1;
return 1; // Return expression
- // CHECK: ![[RET1]] = !DILocation(line: [[@LINE+1]], scope: ![[TESTNOSIDEEFFECT]])
+ // CHECK: ![[RET1]] = !DILocation(line: [[@LINE+1]], scope: ![[TESTNOSIDEEFFECT]], isImplicitCode: true)
} // Cleanup + Ret
- (int)testNoCleanup {
Modified: cfe/trunk/test/CodeGenObjC/debug-info-blocks.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/debug-info-blocks.m?rev=342717&r1=342716&r2=342717&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenObjC/debug-info-blocks.m (original)
+++ cfe/trunk/test/CodeGenObjC/debug-info-blocks.m Fri Sep 21 02:17:06 2018
@@ -18,11 +18,9 @@
// CHECK: call {{.*}}, !dbg ![[DBG_LINE:[0-9]+]]
// CHECK-NOT: ret
// CHECK: load {{.*}}, !dbg ![[COPY_LINE:[0-9]+]]
-// CHECK: ret void, !dbg ![[COPY_LINE]]
// CHECK: define {{.*}} @__destroy_helper_block_{{.*}}(i8*)
// CHECK-NOT: ret
// CHECK: load {{.*}}, !dbg ![[DESTROY_LINE:[0-9]+]]
-// CHECK: ret void, !dbg ![[DESTROY_LINE]]
typedef unsigned int NSUInteger;
More information about the cfe-commits
mailing list