1; Firstly test uncompression(--compress-recursion=0) 2; RUN: llvm-profgen --perfscript=%S/Inputs/recursion-compression-pseudoprobe.perfscript --binary=%S/Inputs/recursion-compression-pseudoprobe.perfbin --output=%t --compress-recursion=0 --csprof-cold-thres=0 3; RUN: FileCheck %s --input-file %t -check-prefix=CHECK-UNCOMPRESS 4; RUN: llvm-profgen --perfscript=%S/Inputs/recursion-compression-pseudoprobe.perfscript --binary=%S/Inputs/recursion-compression-pseudoprobe.perfbin --output=%t --show-unwinder-output --csprof-cold-thres=0 | FileCheck %s --check-prefix=CHECK-UNWINDER 5; RUN: FileCheck %s --input-file %t 6 7; 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 8; CHECK-UNCOMPRESS: 1: 1 9; CHECK-UNCOMPRESS: 3: 1 10; CHECK-UNCOMPRESS: 5: 1 11; CHECK-UNCOMPRESS: 8: 1 fa:1 12; CHECK-UNCOMPRESS: !CFGChecksum: 120515930909 13; 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 14; CHECK-UNCOMPRESS: 1: 1 15; CHECK-UNCOMPRESS: 3: 1 16; CHECK-UNCOMPRESS: 4: 1 17; CHECK-UNCOMPRESS: 7: 1 fb:1 18; CHECK-UNCOMPRESS: !CFGChecksum: 120515930909 19; 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 20; CHECK-UNCOMPRESS: 1: 1 21; CHECK-UNCOMPRESS: 3: 1 22; CHECK-UNCOMPRESS: 4: 1 23; CHECK-UNCOMPRESS: 7: 1 fb:1 24; CHECK-UNCOMPRESS: !CFGChecksum: 120515930909 25; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb]:3:1 26; CHECK-UNCOMPRESS: 1: 1 27; CHECK-UNCOMPRESS: 2: 1 28; CHECK-UNCOMPRESS: 5: 1 fb:1 29; CHECK-UNCOMPRESS: !CFGChecksum: 72617220756 30; 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 31; CHECK-UNCOMPRESS: 1: 1 32; CHECK-UNCOMPRESS: 2: 1 33; CHECK-UNCOMPRESS: 5: 1 fb:1 34; CHECK-UNCOMPRESS: !CFGChecksum: 72617220756 35; 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 36; CHECK-UNCOMPRESS: 1: 1 37; CHECK-UNCOMPRESS: 2: 1 38; CHECK-UNCOMPRESS: 5: 1 fb:1 39; CHECK-UNCOMPRESS: !CFGChecksum: 72617220756 40; 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 41; CHECK-UNCOMPRESS: 1: 1 42; CHECK-UNCOMPRESS: 3: 1 43; CHECK-UNCOMPRESS: 6: 1 fa:1 44; CHECK-UNCOMPRESS: !CFGChecksum: 72617220756 45; 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 46; CHECK-UNCOMPRESS: 1: 1 47; CHECK-UNCOMPRESS: 3: 1 48; CHECK-UNCOMPRESS: 6: 1 fa:1 49; CHECK-UNCOMPRESS: !CFGChecksum: 72617220756 50; 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 51; CHECK-UNCOMPRESS: 1: 1 52; CHECK-UNCOMPRESS: 3: 1 53; CHECK-UNCOMPRESS: 6: 1 fa:1 54; CHECK-UNCOMPRESS: !CFGChecksum: 72617220756 55; 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 56; CHECK-UNCOMPRESS: 1: 1 57; CHECK-UNCOMPRESS: 3: 1 58; CHECK-UNCOMPRESS: !CFGChecksum: 120515930909 59; CHECK-UNCOMPRESS: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:5 @ fb:5 @ fb:5 @ fb]:1:0 60; CHECK-UNCOMPRESS: 5: 1 fb:1 61; CHECK-UNCOMPRESS: !CFGChecksum: 72617220756 62 63 64; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb]:13:4 65; CHECK: 1: 4 66; CHECK: 2: 3 67; CHECK: 3: 1 68; CEHCK: 5: 4 fb:4 69; CHECK: 6: 1 fa:1 70; CHECK !CFGChecksum: 72617220756 71; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa]:6:2 72; CHECK: 1: 2 73; CHECK: 3: 2 74; CHECK: 4: 1 75; CHECK: 7: 1 fb:1 76; CHECK: !CFGChecksum: 120515930909 77; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa]:4:1 78; CHECK: 1: 1 79; CHECK: 3: 1 80; CHECK: 5: 1 81; CHECK: 8: 1 fa:1 82; CHECK: !CFGChecksum: 120515930909 83; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa]:4:1 84; CHECK: 1: 1 85; CHECK: 3: 1 86; CHECK: 4: 1 87; CHECK: 7: 1 fb:1 88; CHECK: !CFGChecksum: 120515930909 89; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb]:3:1 90; CHECK: 1: 1 91; CHECK: 3: 1 92; CHECK: 6: 1 fa:1 93; CHECK: !CFGChecksum: 72617220756 94; CHECK: [main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa:7 @ fb]:3:1 95; CHECK: 1: 1 96; CHECK: 3: 1 97; CHECK: 6: 1 fa:1 98; CHECK: !CFGChecksum: 72617220756 99 100 101 102; CHECK-UNWINDER: Binary(recursion-compression-pseudoprobe.perfbin)'s Range Counter: 103; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 104; CHECK-UNWINDER: (7a0, 7a7): 1 105; CHECK-UNWINDER: (7a0, 7ab): 3 106; CHECK-UNWINDER: (7b2, 7b5): 1 107; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 108; CHECK-UNWINDER: (7c0, 7d4): 1 109; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 110; CHECK-UNWINDER: (7c0, 7cd): 1 111; CHECK-UNWINDER: (7db, 7e0): 1 112; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 113; CHECK-UNWINDER: (7a0, 7a7): 1 114; CHECK-UNWINDER: (7b2, 7b5): 1 115; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 116; CHECK-UNWINDER: (7c0, 7cd): 2 117; CHECK-UNWINDER: (7db, 7e0): 1 118; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa:7 119; CHECK-UNWINDER: (7a0, 7a7): 1 120; CHECK-UNWINDER: (7b2, 7b5): 1 121 122; CHECK-UNWINDER: Binary(recursion-compression-pseudoprobe.perfbin)'s Branch Counter: 123; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 124; CHECK-UNWINDER: (7a7, 7b2): 1 125; CHECK-UNWINDER: (7ab, 7a0): 4 126; CHECK-UNWINDER: (7b5, 7c0): 1 127; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 128; CHECK-UNWINDER: (7d4, 7c0): 1 129; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 130; CHECK-UNWINDER: (7cd, 7db): 1 131; CHECK-UNWINDER: (7e0, 7a0): 1 132; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 133; CHECK-UNWINDER: (7a7, 7b2): 1 134; CHECK-UNWINDER: (7b5, 7c0): 1 135; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 136; CHECK-UNWINDER: (7cd, 7db): 2 137; CHECK-UNWINDER: (7e0, 7a0): 1 138; CHECK-UNWINDER: main:2 @ foo:5 @ fa:8 @ fa:7 @ fb:5 @ fb:6 @ fa:8 @ fa:7 @ fb:6 @ fa:7 139; CHECK-UNWINDER: (7a7, 7b2): 1 140; CHECK-UNWINDER: (7b5, 7c0): 1 141 142 143; clang -O3 -fexperimental-new-pass-manager -fuse-ld=lld -fpseudo-probe-for-profiling 144; -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Xclang -mdisable-tail-calls 145; -g test.c -o a.out 146 147#include <stdio.h> 148 149int fb(int n) { 150 if(n > 10) return fb(n / 2); 151 return fa(n - 1); 152} 153 154int fa(int n) { 155 if(n < 2) return n; 156 if(n % 2) return fb(n - 1); 157 return fa(n - 1); 158} 159 160void foo() { 161 int s, i = 0; 162 while (i++ < 10000) 163 s += fa(i); 164 printf("sum is %d\n", s); 165} 166 167int main() { 168 foo(); 169 return 0; 170} 171