[Profiler] Assign counter to IfStmt condition

Push a region to cover any expressions within an IfStmt condition.

rdar://67280997
This commit is contained in:
Vedant Kumar
2020-08-18 14:04:31 -07:00
parent a2194f5261
commit cfd38c42a1
5 changed files with 7 additions and 5 deletions

View File

@@ -928,6 +928,8 @@ public:
pushRegion(BS); pushRegion(BS);
} else if (auto *IS = dyn_cast<IfStmt>(S)) { } else if (auto *IS = dyn_cast<IfStmt>(S)) {
if (auto *Cond = getConditionNode(IS->getCond()))
assignCounter(Cond, CounterExpr::Ref(getCurrentCounter()));
assignCounter(IS, CounterExpr::Zero()); assignCounter(IS, CounterExpr::Zero());
CounterExpr &ThenCounter = assignCounter(IS->getThenStmt()); CounterExpr &ThenCounter = assignCounter(IS->getThenStmt());
if (IS->getElseStmt()) if (IS->getElseStmt())

View File

@@ -70,6 +70,7 @@ func goo(_ b: Bool) -> Int { // CHECK-NEXT: [[@LINE]]:28 {{.*}} : 0
do { // CHECK-NEXT: [[@LINE]]:6 -> [[@LINE+2]]:4 : 0 do { // CHECK-NEXT: [[@LINE]]:6 -> [[@LINE+2]]:4 : 0
throw SomeErr.Err1 throw SomeErr.Err1
} catch { // CHECK-NEXT: [[@LINE]]:11 {{.*}} : 1 } catch { // CHECK-NEXT: [[@LINE]]:11 {{.*}} : 1
// CHECK-NEXT: [[@LINE+1]]:8 {{.*}} : 1
if b { // CHECK-NEXT: [[@LINE]]:10 {{.*}} : 2 if b { // CHECK-NEXT: [[@LINE]]:10 {{.*}} : 2
return 1 return 1
} // CHECK-NEXT: [[@LINE]]:6 {{.*}} : (1 - 2) } // CHECK-NEXT: [[@LINE]]:6 {{.*}} : (1 - 2)

View File

@@ -3,6 +3,7 @@
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_if.foo // CHECK-LABEL: sil_coverage_map {{.*}}// coverage_if.foo
func foo(x : Bool) { // CHECK: [[@LINE]]:20 -> {{[0-9]+}}:2 : 0 func foo(x : Bool) { // CHECK: [[@LINE]]:20 -> {{[0-9]+}}:2 : 0
// CHECK: [[@LINE+1]]:6 -> [[@LINE+1]]:9 : 0
if (x) { // CHECK: [[@LINE]]:10 -> [[@LINE+1]]:4 : 1 if (x) { // CHECK: [[@LINE]]:10 -> [[@LINE+1]]:4 : 1
} }

View File

@@ -13,7 +13,6 @@
// RUN: %llvm-profdata show %t/default.profdata -function=main | %FileCheck %s --check-prefix=CHECK-MAIN // RUN: %llvm-profdata show %t/default.profdata -function=main | %FileCheck %s --check-prefix=CHECK-MAIN
// RUN: %llvm-cov show %t/main -instr-profile=%t/default.profdata | %FileCheck %s --check-prefix=CHECK-COV // RUN: %llvm-cov show %t/main -instr-profile=%t/default.profdata | %FileCheck %s --check-prefix=CHECK-COV
// RUN: %llvm-cov report %t/main -instr-profile=%t/default.profdata -show-functions %s | %FileCheck %s --check-prefix=CHECK-REPORT // RUN: %llvm-cov report %t/main -instr-profile=%t/default.profdata -show-functions %s | %FileCheck %s --check-prefix=CHECK-REPORT
// RUN: rm -rf %t
// REQUIRES: profile_runtime // REQUIRES: profile_runtime
// REQUIRES: executable_test // REQUIRES: executable_test
@@ -164,9 +163,7 @@ func catchError2(_ b: Bool) -> Int {
do { do {
throw CustomError.Err // CHECK-COV: {{ *}}[[@LINE]]|{{ *}}2 throw CustomError.Err // CHECK-COV: {{ *}}[[@LINE]]|{{ *}}2
} catch { } catch {
// reviews.llvm.org/D85036 regressed coverage reporting for the if b { // CHECK-COV: {{ *}}[[@LINE]]|{{ *}}2
// following line (rdar://67280997).
if b { // CHECK-COV: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK-COV: {{ *}}[[@LINE]]|{{ *}}1 return 1 // CHECK-COV: {{ *}}[[@LINE]]|{{ *}}1
} }
} }

View File

@@ -21,7 +21,8 @@ while (i < 10) {
// CHECK-NEXT: [[@LINE+1]]:21 -> [[@LINE+1]]:22 : (0 - 1) // CHECK-NEXT: [[@LINE+1]]:21 -> [[@LINE+1]]:22 : (0 - 1)
var i2 = true ? 1 : 0; var i2 = true ? 1 : 0;
// CHECK: sil_coverage_map{{.*}}__tlcd_line:[[@LINE+4]]:1 // CHECK: sil_coverage_map{{.*}}__tlcd_line:[[@LINE+5]]:1
// CHECK-NEXT: [[@LINE+4]]:4 -> [[@LINE+4]]:10 : 0
// CHECK-NEXT: [[@LINE+3]]:11 -> [[@LINE+5]]:2 : 1 // CHECK-NEXT: [[@LINE+3]]:11 -> [[@LINE+5]]:2 : 1
// CHECK-NEXT: [[@LINE+2]]:1 -> [[@LINE+4]]:2 : 0 // CHECK-NEXT: [[@LINE+2]]:1 -> [[@LINE+4]]:2 : 0
// CHECK-NEXT: [[@LINE+3]]:2 -> [[@LINE+3]]:2 : 0 // CHECK-NEXT: [[@LINE+3]]:2 -> [[@LINE+3]]:2 : 0