1; Firstly test uncompression(--compress-recursion=0)
2; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/recursion-compression-pseudoprobe.perfscript --binary=%S/Inputs/recursion-compression-pseudoprobe.perfbin --output=%t --compress-recursion=0 --profile-summary-hot-count=0 --csspgo-preinliner=0 --gen-cs-nested-profile=0
3; RUN: FileCheck %s --input-file %t -check-prefix=CHECK-UNCOMPRESS
4; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/recursion-compression-pseudoprobe.perfscript --binary=%S/Inputs/recursion-compression-pseudoprobe.perfbin --output=%t --skip-symbolization --profile-summary-hot-count=0
5; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-UNWINDER
6; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/recursion-compression-pseudoprobe.perfscript --binary=%S/Inputs/recursion-compression-pseudoprobe.perfbin --output=%t --profile-summary-hot-count=0 --csspgo-preinliner=0 --gen-cs-nested-profile=0
7; RUN: FileCheck %s --input-file %t
8; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/recursion-compression-pseudoprobe-nommap.perfscript --binary=%S/Inputs/recursion-compression-pseudoprobe.perfbin --output=%t --skip-symbolization --profile-summary-hot-count=0
9; RUN: FileCheck %s --input-file %t --check-prefix=CHECK-UNWINDER
10; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/recursion-compression-pseudoprobe-nommap.perfscript --binary=%S/Inputs/recursion-compression-pseudoprobe.perfbin --output=%t --profile-summary-hot-count=0 --csspgo-preinliner=0 --gen-cs-nested-profile=0
11; RUN: FileCheck %s --input-file %t
12; RUN: llvm-profgen --format=text --perfscript=%S/Inputs/recursion-compression-pseudoprobe.perfscript --binary=%S/Inputs/recursion-compression-pseudoprobe.perfbin --output=%t --compress-recursion=0 --profile-summary-hot-count=0 --csprof-max-context-depth=0 --csspgo-preinliner=0 --gen-cs-nested-profile=0
13; RUN: FileCheck %s --input-file %t -check-prefix=CHECK-MAX-CTX-DEPTH
14
15
16; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:6 @ fa]:4:1
17; CHECK-UNCOMPRESS:  1: 1
18; CHECK-UNCOMPRESS:  3: 1
19; CHECK-UNCOMPRESS:  5: 1
20; CHECK-UNCOMPRESS:  8: 1 fa:1
21; CHECK-UNCOMPRESS:  !CFGChecksum: 563070469352221
22; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:6 @ fa:8 @ fa]:4:1
23; CHECK-UNCOMPRESS:  1: 1
24; CHECK-UNCOMPRESS:  3: 1
25; CHECK-UNCOMPRESS:  4: 1
26; CHECK-UNCOMPRESS:  7: 1 fb:1
27; CHECK-UNCOMPRESS:  !CFGChecksum: 563070469352221
28; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa]:4:1
29; CHECK-UNCOMPRESS:  1: 1
30; CHECK-UNCOMPRESS:  3: 1
31; CHECK-UNCOMPRESS:  4: 1
32; CHECK-UNCOMPRESS:  7: 1 fb:1
33; CHECK-UNCOMPRESS:  !CFGChecksum: 563070469352221
34; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb]:3:1
35; CHECK-UNCOMPRESS:  1: 1
36; CHECK-UNCOMPRESS:  2: 1
37; CHECK-UNCOMPRESS:  5: 1 fb:1
38; CHECK-UNCOMPRESS:  !CFGChecksum: 563022570642068
39; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb]:3:1
40; CHECK-UNCOMPRESS:  1: 1
41; CHECK-UNCOMPRESS:  2: 1
42; CHECK-UNCOMPRESS:  5: 1 fb:1
43; CHECK-UNCOMPRESS:  !CFGChecksum: 563022570642068
44; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb]:3:1
45; CHECK-UNCOMPRESS:  1: 1
46; CHECK-UNCOMPRESS:  2: 1
47; CHECK-UNCOMPRESS:  5: 1 fb:1
48; CHECK-UNCOMPRESS:  !CFGChecksum: 563022570642068
49; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb]:3:1
50; CHECK-UNCOMPRESS:  1: 1
51; CHECK-UNCOMPRESS:  3: 1
52; CHECK-UNCOMPRESS:  6: 1 fa:1
53; CHECK-UNCOMPRESS:  !CFGChecksum: 563022570642068
54; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb]:3:1
55; CHECK-UNCOMPRESS:  1: 1
56; CHECK-UNCOMPRESS:  3: 1
57; CHECK-UNCOMPRESS:  6: 1 fa:1
58; CHECK-UNCOMPRESS:  !CFGChecksum: 563022570642068
59; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa:7 @ fb]:3:1
60; CHECK-UNCOMPRESS:  1: 1
61; CHECK-UNCOMPRESS:  3: 1
62; CHECK-UNCOMPRESS:  6: 1 fa:1
63; CHECK-UNCOMPRESS:  !CFGChecksum: 563022570642068
64; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa:7 @ fb:6 @ fa]:2:1
65; CHECK-UNCOMPRESS:  1: 1
66; CHECK-UNCOMPRESS:  3: 1
67; CHECK-UNCOMPRESS:  !CFGChecksum: 563070469352221
68; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb]:1:0
69; CHECK-UNCOMPRESS:  5: 1 fb:1
70; CHECK-UNCOMPRESS:  !CFGChecksum: 563022570642068
71; CHECK-MAX-CTX-DEPTH: [fb]:19:6
72; CHECK-MAX-CTX-DEPTH:  1: 6
73; CHECK-MAX-CTX-DEPTH:  2: 3
74; CHECK-MAX-CTX-DEPTH:  3: 3
75; CHECK-MAX-CTX-DEPTH:  4: 0
76; CHECK-MAX-CTX-DEPTH:  5: 4 fb:4
77; CHECK-MAX-CTX-DEPTH:  6: 3 fa:3
78; CHECK-MAX-CTX-DEPTH:  !CFGChecksum: 563022570642068
79; CHECK-MAX-CTX-DEPTH: [fa]:14:4
80; CHECK-MAX-CTX-DEPTH:  1: 4
81; CHECK-MAX-CTX-DEPTH:  3: 4
82; CHECK-MAX-CTX-DEPTH:  4: 2
83; CHECK-MAX-CTX-DEPTH:  5: 1
84; CHECK-MAX-CTX-DEPTH:  6: 0
85; CHECK-MAX-CTX-DEPTH:  7: 2 fb:2
86; CHECK-MAX-CTX-DEPTH:  8: 1 fa:1
87; CHECK-MAX-CTX-DEPTH:  !CFGChecksum: 563070469352221
88
89
90; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb]:13:4
91; CHECK:  1: 4
92; CHECK:  2: 3
93; CHECK:  3: 1
94; CEHCK:  5: 4 fb:4
95; CHECK:  6: 1 fa:1
96; CHECK !CFGChecksum: 563022570642068
97; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa]:6:2
98; CHECK:  1: 2
99; CHECK:  3: 2
100; CHECK:  4: 1
101; CHECK:  7: 1 fb:1
102; CHECK:  !CFGChecksum: 563070469352221
103 CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa]:4:1
104; CHECK:  1: 1
105; CHECK:  3: 1
106; CHECK:  5: 1
107; CHECK:  8: 1 fa:1
108; CHECK:  !CFGChecksum: 563070469352221
109; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa]:4:1
110; CHECK:  1: 1
111; CHECK:  3: 1
112; CHECK:  4: 1
113; CHECK:  7: 1 fb:1
114; CHECK:  !CFGChecksum: 563070469352221
115; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb]:3:1
116; CHECK:  1: 1
117; CHECK:  3: 1
118; CHECK:  6: 1 fa:1
119; CHECK:  !CFGChecksum: 563022570642068
120; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa:7 @ fb]:3:1
121; CHECK:  1: 1
122; CHECK:  3: 1
123; CHECK:  6: 1 fa:1
124; CHECK:  !CFGChecksum: 563022570642068
125
126; CHECK-UNWINDER:      [0x842 @ 0x7d4 @ 0x7e0 @ 0x7ab]
127; CHECK-UNWINDER-NEXT:   3
128; CHECK-UNWINDER-NEXT:   7a0-7a7:1
129; CHECK-UNWINDER-NEXT:   7a0-7ab:3
130; CHECK-UNWINDER-NEXT:   7b2-7b5:1
131; CHECK-UNWINDER-NEXT:   3
132; CHECK-UNWINDER-NEXT:   7a7->7b2:1
133; CHECK-UNWINDER-NEXT:   7ab->7a0:4
134; CHECK-UNWINDER-NEXT:   7b5->7c0:1
135; CHECK-UNWINDER-NEXT: [0x842 @ 0x7d4 @ 0x7e0 @ 0x7ab @ 0x7b5]
136; CHECK-UNWINDER-NEXT:   1
137; CHECK-UNWINDER-NEXT:   7c0-7d4:1
138; CHECK-UNWINDER-NEXT:   1
139; CHECK-UNWINDER-NEXT:   7d4->7c0:1
140; CHECK-UNWINDER-NEXT: [0x842 @ 0x7d4 @ 0x7e0 @ 0x7ab @ 0x7b5 @ 0x7d4]
141; CHECK-UNWINDER-NEXT:   2
142; CHECK-UNWINDER-NEXT:   7c0-7cd:1
143; CHECK-UNWINDER-NEXT:   7db-7e0:1
144; CHECK-UNWINDER-NEXT:   2
145; CHECK-UNWINDER-NEXT:   7cd->7db:1
146; CHECK-UNWINDER-NEXT:   7e0->7a0:1
147; CHECK-UNWINDER-NEXT: [0x842 @ 0x7d4 @ 0x7e0 @ 0x7ab @ 0x7b5 @ 0x7d4 @ 0x7e0]
148; CHECK-UNWINDER-NEXT:   2
149; CHECK-UNWINDER-NEXT:   7a0-7a7:1
150; CHECK-UNWINDER-NEXT:   7b2-7b5:1
151; CHECK-UNWINDER-NEXT:   2
152; CHECK-UNWINDER-NEXT:   7a7->7b2:1
153; CHECK-UNWINDER-NEXT:   7b5->7c0:1
154; CHECK-UNWINDER-NEXT: [0x842 @ 0x7d4 @ 0x7e0 @ 0x7ab @ 0x7b5 @ 0x7d4 @ 0x7e0 @ 0x7b5]
155; CHECK-UNWINDER-NEXT:   2
156; CHECK-UNWINDER-NEXT:   7c0-7cd:2
157; CHECK-UNWINDER-NEXT:   7db-7e0:1
158; CHECK-UNWINDER-NEXT:   2
159; CHECK-UNWINDER-NEXT:   7cd->7db:2
160; CHECK-UNWINDER-NEXT:   7e0->7a0:1
161; CHECK-UNWINDER-NEXT: [0x842 @ 0x7d4 @ 0x7e0 @ 0x7ab @ 0x7b5 @ 0x7d4 @ 0x7e0 @ 0x7b5 @ 0x7e0]
162; CHECK-UNWINDER-NEXT:   2
163; CHECK-UNWINDER-NEXT:   7a0-7a7:1
164; CHECK-UNWINDER-NEXT:   7b2-7b5:1
165; CHECK-UNWINDER-NEXT:   2
166; CHECK-UNWINDER-NEXT:   7a7->7b2:1
167; CHECK-UNWINDER-NEXT:   7b5->7c0:1
168
169
170; clang -O3 -fuse-ld=lld -fpseudo-probe-for-profiling
171; -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Xclang -mdisable-tail-calls
172; -g test.c  -o a.out
173
174#include <stdio.h>
175
176int fb(int n) {
177  if(n > 10) return fb(n / 2);
178  return fa(n - 1);
179}
180
181int fa(int n) {
182  if(n < 2) return n;
183  if(n % 2) return fb(n - 1);
184  return fa(n - 1);
185}
186
187void foo() {
188  int s, i = 0;
189  while (i++ < 10000)
190    s += fa(i);
191  printf("sum is %d\n", s);
192}
193
194int main() {
195  foo();
196  return 0;
197}
198