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