| // RUN: llvm-profdata merge %S/Inputs/branch-logical-mixed.proftext -o %t.profdata |
| // RUN: llvm-cov show --show-branches=count %S/Inputs/branch-logical-mixed.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S %s | FileCheck %s |
| // RUN: llvm-cov report --show-branch-summary %S/Inputs/branch-logical-mixed.o32l -instr-profile %t.profdata -show-functions -path-equivalence=/tmp,%S %s | FileCheck %s -check-prefix=REPORT |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| void func(int a, int b) { |
| bool b0 = a <= b; |
| bool b1 = a == b; |
| bool b2 = a >= b; |
| bool b3 = a < b; |
| bool b4 = a > b; |
| bool b5 = a != b; |
| |
| bool c = b0 && // CHECK: Branch ([[@LINE]]:12): [True: 3, False: 1] |
| b1 && // CHECK: Branch ([[@LINE]]:12): [True: 2, False: 1] |
| b2 && // CHECK: Branch ([[@LINE]]:12): [True: 2, False: 0] |
| b3 && // CHECK: Branch ([[@LINE]]:12): [True: 0, False: 2] |
| b4 && // CHECK: Branch ([[@LINE]]:12): [True: 0, False: 0] |
| b5; // CHECK: Branch ([[@LINE]]:12): [True: 0, False: 0] |
| |
| bool d = b0 || // CHECK: Branch ([[@LINE]]:12): [True: 3, False: 1] |
| b1 || // CHECK: Branch ([[@LINE]]:12): [True: 0, False: 1] |
| b2 || // CHECK: Branch ([[@LINE]]:12): [True: 1, False: 0] |
| b3 || // CHECK: Branch ([[@LINE]]:12): [True: 0, False: 0] |
| b4 || // CHECK: Branch ([[@LINE]]:12): [True: 0, False: 0] |
| b5; // CHECK: Branch ([[@LINE]]:12): [True: 0, False: 0] |
| |
| bool e = (b0 && // CHECK: Branch ([[@LINE]]:13): [True: 3, False: 1] |
| b5) || // CHECK: Branch ([[@LINE]]:13): [True: 1, False: 2] |
| (b1 && // CHECK: Branch ([[@LINE]]:13): [True: 2, False: 1] |
| b4) || // CHECK: Branch ([[@LINE]]:13): [True: 0, False: 2] |
| (b2 && // CHECK: Branch ([[@LINE]]:13): [True: 3, False: 0] |
| b3) || // CHECK: Branch ([[@LINE]]:13): [True: 0, False: 3] |
| (b3 && // CHECK: Branch ([[@LINE]]:13): [True: 0, False: 3] |
| b2) || // CHECK: Branch ([[@LINE]]:13): [True: 0, False: 0] |
| (b4 && // CHECK: Branch ([[@LINE]]:13): [True: 1, False: 2] |
| b1) || // CHECK: Branch ([[@LINE]]:13): [True: 0, False: 1] |
| (b5 && // CHECK: Branch ([[@LINE]]:13): [True: 1, False: 2] |
| b0); // CHECK: Branch ([[@LINE]]:13): [True: 0, False: 1] |
| |
| bool f = (b0 || // CHECK: Branch ([[@LINE]]:13): [True: 3, False: 1] |
| b5) && // CHECK: Branch ([[@LINE]]:13): [True: 1, False: 0] |
| (b1 || // CHECK: Branch ([[@LINE]]:13): [True: 2, False: 2] |
| b4) && // CHECK: Branch ([[@LINE]]:13): [True: 1, False: 1] |
| (b2 || // CHECK: Branch ([[@LINE]]:13): [True: 3, False: 0] |
| b3) && // CHECK: Branch ([[@LINE]]:13): [True: 0, False: 0] |
| (b3 || // CHECK: Branch ([[@LINE]]:13): [True: 0, False: 3] |
| b2) && // CHECK: Branch ([[@LINE]]:13): [True: 3, False: 0] |
| (b4 || // CHECK: Branch ([[@LINE]]:13): [True: 1, False: 2] |
| b1) && // CHECK: Branch ([[@LINE]]:13): [True: 2, False: 0] |
| (b5 || // CHECK: Branch ([[@LINE]]:13): [True: 1, False: 2] |
| b0); // CHECK: Branch ([[@LINE]]:13): [True: 2, False: 0] |
| |
| if (c) // CHECK: Branch ([[@LINE]]:7): [True: 0, False: 4] |
| printf("case0\n"); |
| else |
| printf("case1\n"); |
| |
| if (d) // CHECK: Branch ([[@LINE]]:7): [True: 4, False: 0] |
| printf("case2\n"); |
| else |
| printf("case3\n"); |
| |
| if (e) // CHECK: Branch ([[@LINE]]:7): [True: 1, False: 3] |
| printf("case4\n"); |
| else |
| printf("case5\n"); |
| |
| if (f) // CHECK: Branch ([[@LINE]]:7): [True: 3, False: 1] |
| printf("case6\n"); |
| else |
| printf("case7\n"); |
| } |
| |
| extern "C" { extern void __llvm_profile_write_file(void); } |
| int main(int argc, char *argv[]) |
| { |
| func(atoi(argv[1]), atoi(argv[2])); |
| __llvm_profile_write_file(); |
| return 0; |
| } |
| |
| // REPORT: Name Regions Miss Cover Lines Miss Cover Branches Miss Cover |
| // REPORT-NEXT: --- |
| // REPORT-NEXT: _Z4funcii 77 9 88.31% 68 3 95.59% 80 32 60.00% |
| // REPORT-NEXT: main 1 0 100.00% 5 0 100.00% 0 0 0.00% |
| // REPORT-NEXT: --- |
| // REPORT-NEXT: TOTAL 78 9 88.46% 73 3 95.89% 80 32 60.00% |