1; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=1 -S -enable-new-pm=0 | FileCheck %s
2; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=0 -S -enable-new-pm=0 | FileCheck %s --check-prefix=CHECK_NO_PRUNE
3; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=1 -S | FileCheck %s
4; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=0 -S | FileCheck %s --check-prefix=CHECK_NO_PRUNE
5
6define i32 @foo(i32) #0 {
7  %2 = icmp sgt i32 %0, 0
8  br i1 %2, label %left, label %right
9; CHECK: call void @__sanitizer_cov_trace_pc()
10
11; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
12
13left:
14  %3 = icmp sgt i32 %0, 10
15  br i1 %3, label %left_left, label %left_right
16; CHECK-LABEL: left:
17; CHECK-NOT: call void @__sanitizer_cov_trace_pc()
18
19; CHECK_NO_PRUNE-LABEL: left:
20; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
21
22left_left:
23  br label %left_join
24; CHECK-LABEL: left_left:
25; CHECK: call void @__sanitizer_cov_trace_pc()
26
27; CHECK_NO_PRUNE-LABEL: left_left:
28; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
29
30left_right:
31  br label %left_join
32; CHECK-LABEL: left_right:
33; CHECK: call void @__sanitizer_cov_trace_pc()
34
35; CHECK_NO_PRUNE-LABEL: left_right:
36; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
37
38left_join:
39  br label %finish
40; CHECK-LABEL: left_join:
41; CHECK-NOT: call void @__sanitizer_cov_trace_pc()
42
43; CHECK_NO_PRUNE-LABEL: left_join:
44; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
45
46right:
47  %4 = icmp sgt i32 %0, 10
48  br i1 %4, label %right_left, label %right_right
49; CHECK-LABEL: right:
50; CHECK-NOT: call void @__sanitizer_cov_trace_pc()
51
52; CHECK_NO_PRUNE-LABEL: right:
53; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
54
55right_left:
56  br label %right_join
57; CHECK-LABEL: right_left:
58; CHECK: call void @__sanitizer_cov_trace_pc()
59
60; CHECK_NO_PRUNE-LABEL: right_left:
61; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
62
63right_right:
64  br label %right_join
65; CHECK-LABEL: right_right:
66; CHECK: call void @__sanitizer_cov_trace_pc()
67
68; CHECK_NO_PRUNE-LABEL: right_right:
69; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
70
71right_join:
72  br label %finish
73; CHECK-LABEL: right_join:
74; CHECK-NOT: call void @__sanitizer_cov_trace_pc()
75
76; CHECK_NO_PRUNE-LABEL: right_join:
77; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
78
79finish:
80  ret i32 %0
81; CHECK-LABEL: finish:
82; CHECK-NOT: call void @__sanitizer_cov_trace_pc()
83
84; CHECK_NO_PRUNE-LABEL: finish:
85; CHECK_NO_PRUNE: call void @__sanitizer_cov_trace_pc()
86
87}
88