1 // Test to ensure right number of counters are allocated and used for nested 2 // logical operators on branch conditions for branch coverage. 3 4 // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name branch-logical-mixed.cpp %s | FileCheck %s 5 6 7 // CHECK-LABEL: _Z5func1ii: 8 bool func1(int a, int b) { 9 bool b0 = a <= b; 10 bool b1 = a == b; 11 bool b2 = a >= b; 12 13 // This should allocate a RHS branch counter on b2 (counter #3). 14 bool c = b0 && (b1 || b2); 15 // CHECK: Branch,File 0, [[@LINE-1]]:12 -> [[@LINE-1]]:14 = #1, (#0 - #1) 16 // CHECK: Branch,File 0, [[@LINE-2]]:19 -> [[@LINE-2]]:21 = (#1 - #2), #2 17 // CHECK: Branch,File 0, [[@LINE-3]]:25 -> [[@LINE-3]]:27 = (#2 - #3), #3 18 19 return c; 20 } 21 22 // CHECK-LABEL: _Z5func2ii: 23 bool func2(int a, int b) { 24 bool b0 = a <= b; 25 bool b1 = a == b; 26 bool b2 = a >= b; 27 28 // This should allocate a RHS branch counter on b1 and b2 (counters #2, #4) 29 // This could possibly be further optimized through counter reuse (future). 30 bool c = (b0 && b1) || b2; 31 // CHECK: Branch,File 0, [[@LINE-1]]:13 -> [[@LINE-1]]:15 = #3, (#0 - #3) 32 // CHECK: Branch,File 0, [[@LINE-2]]:19 -> [[@LINE-2]]:21 = #4, (#3 - #4) 33 // CHECK: Branch,File 0, [[@LINE-3]]:26 -> [[@LINE-3]]:28 = (#1 - #2), #2 34 35 return c; 36 } 37 38 // CHECK-LABEL: _Z5func3ii: 39 bool func3(int a, int b) { 40 bool b0 = a <= b; 41 bool b1 = a == b; 42 bool b2 = a >= b; 43 bool b3 = a < b; 44 45 // This should allocate a RHS branch counter on b1 and b3 (counters #3, #5) 46 // This could possibly be further optimized through counter reuse (future). 47 bool c = (b0 || b1) && (b2 || b3); 48 // CHECK: Branch,File 0, [[@LINE-1]]:13 -> [[@LINE-1]]:15 = (#0 - #2), #2 49 // CHECK: Branch,File 0, [[@LINE-2]]:19 -> [[@LINE-2]]:21 = (#2 - #3), #3 50 // CHECK: Branch,File 0, [[@LINE-3]]:27 -> [[@LINE-3]]:29 = (#1 - #4), #4 51 // CHECK: Branch,File 0, [[@LINE-4]]:33 -> [[@LINE-4]]:35 = (#4 - #5), #5 52 53 return c; 54 } 55