File: branch-logical-mixed.cpp

package info (click to toggle)
llvm-toolchain-13 1%3A13.0.1-11
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,418,840 kB
  • sloc: cpp: 5,290,826; ansic: 996,570; asm: 544,593; python: 188,212; objc: 72,027; lisp: 30,291; f90: 25,395; sh: 24,898; javascript: 9,780; pascal: 9,398; perl: 7,484; ml: 5,432; awk: 3,523; makefile: 2,913; xml: 953; cs: 573; fortran: 539
file content (66 lines) | stat: -rw-r--r-- 2,829 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Test to ensure instrumentation of logical operator RHS True/False counters
// are being instrumented for branch coverage

// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -main-file-name branch-logical-mixed.cpp %s -o - -emit-llvm -fprofile-instrument=clang | FileCheck -allow-deprecated-dag-overlap %s


// CHECK: @[[FUNC:__profc__Z4funcv]] = {{.*}} global [61 x i64] zeroinitializer


// CHECK-LABEL: @_Z4funcv()
bool func() {
  bool bt0 = true;
  bool bt1 = true;
  bool bt2 = true;
  bool bt3 = true;
  bool bt4 = true;
  bool bt5 = true;
  bool bf0 = false;
  bool bf1 = false;
  bool bf2 = false;
  bool bf3 = false;
  bool bf4 = false;
  bool bf5 = false;

  bool a = bt0 &&
           bf0 &&                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 10
           bt1 &&                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 8
           bf1 &&                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 6
           bt2 &&                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 4
           bf2;                     // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 2

  bool b = bt0 ||
           bf0 ||                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 20
           bt1 ||                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 18
           bf1 ||                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 16
           bt2 ||                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 14
           bf2;                     // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 12

  bool c = (bt0  &&
            bf0) ||                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 27
           (bt1  &&
            bf1) ||                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 29
           (bt2  &&
            bf2) ||                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 31
           (bt3  &&
            bf3) ||                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 33
           (bt4  &&
            bf4) ||                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 35
           (bf5  &&
            bf5);                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 37

  bool d = (bt0  ||
            bf0) &&                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 44
           (bt1  ||
            bf1) &&                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 46
           (bt2  ||
            bf2) &&                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 48
           (bt3  ||
            bf3) &&                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 50
           (bt4  ||
            bf4) &&                 // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 52
           (bt5  ||
            bf5);                   // CHECK: store {{.*}} @[[FUNC]], i64 0, i64 54

  return a && b && c && d;
}