1# REQUIRES: system-linux 2# RUN: llvm-bolt %S/../../../llvm/test/tools/llvm-profgen/Inputs/inline-cs-pseudoprobe.perfbin --print-pseudo-probes=all -o %t.bolt --lite=0 --enable-bat 2>&1 | FileCheck %s 3 4# PREAGG: B X:0 #foo# 1 0 5# PREAGG: B X:0 #bar# 1 0 6# PREAGG: B X:0 #main# 1 0 7## Check pseudo-probes in regular YAML profile (non-BOLTed binary) 8# RUN: link_fdata %s %S/../../../llvm/test/tools/llvm-profgen/Inputs/inline-cs-pseudoprobe.perfbin %t.preagg PREAGG 9# RUN: perf2bolt %S/../../../llvm/test/tools/llvm-profgen/Inputs/inline-cs-pseudoprobe.perfbin -p %t.preagg --pa -w %t.yaml -o %t.fdata --profile-write-pseudo-probes 10# RUN: FileCheck --input-file %t.yaml %s --check-prefix CHECK-YAML 11## Check pseudo-probes in BAT YAML profile (BOLTed binary) 12# RUN: link_fdata %s %t.bolt %t.preagg2 PREAGG 13# RUN: perf2bolt %t.bolt -p %t.preagg2 --pa -w %t.yaml2 -o %t.fdata2 --profile-write-pseudo-probes 14# RUN: FileCheck --input-file %t.yaml2 %s --check-prefix CHECK-YAML 15# CHECK-YAML: name: bar 16# CHECK-YAML: - bid: 0 17# CHECK-YAML: probes: [ { blx: 9 } ] 18# CHECK-YAML: inline_tree: [ { } ] 19# 20# CHECK-YAML: name: foo 21# CHECK-YAML: - bid: 0 22# CHECK-YAML: probes: [ { blx: 3 } ] 23# CHECK-YAML: inline_tree: [ { g: 1 }, { g: 0, cs: 8 } ] 24# 25# CHECK-YAML: name: main 26# CHECK-YAML: - bid: 0 27# CHECK-YAML: probes: [ { blx: 3, id: 1 }, { blx: 1 } ] 28# CHECK-YAML: inline_tree: [ { g: 2 }, { g: 1, cs: 2 }, { g: 0, p: 1, cs: 8 } ] 29# 30# CHECK-YAML: pseudo_probe_desc: 31# CHECK-YAML-NEXT: gs: [ 0xE413754A191DB537, 0x5CF8C24CDB18BDAC, 0xDB956436E78DD5FA ] 32# CHECK-YAML-NEXT: gh: [ 2, 0, 1 ] 33# CHECK-YAML-NEXT: hs: [ 0x200205A19C5B4, 0x10000FFFFFFFF, 0x10E852DA94 ] 34# 35## Check that without --profile-write-pseudo-probes option, no pseudo probes are 36## generated 37# RUN: perf2bolt %S/../../../llvm/test/tools/llvm-profgen/Inputs/inline-cs-pseudoprobe.perfbin -p %t.preagg --pa -w %t.yaml3 -o %t.fdata 38# RUN: FileCheck --input-file %t.yaml3 %s --check-prefix CHECK-NO-OPT 39# CHECK-NO-OPT-NOT: probes: 40# CHECK-NO-OPT-NOT: inline_tree: 41# CHECK-NO-OPT-NOT: pseudo_probe_desc: 42 43CHECK: Report of decoding input pseudo probe binaries 44 45CHECK-NEXT: Pseudo Probe Desc: 46CHECK-NEXT: GUID: 6699318081062747564 Name: foo 47CHECK-NEXT: Hash: 563088904013236 48CHECK-NEXT: GUID: 15822663052811949562 Name: main 49CHECK-NEXT: Hash: 281479271677951 50CHECK-NEXT: GUID: 16434608426314478903 Name: bar 51CHECK-NEXT: Hash: 72617220756 52 53CHECK: [Probe]: FUNC: bar Index: 1 Type: Block 54CHECK: [Probe]: FUNC: bar Index: 4 Type: Block 55CHECK: [Probe]: FUNC: foo Index: 1 Type: Block 56CHECK: [Probe]: FUNC: foo Index: 2 Type: Block 57CHECK: [Probe]: FUNC: foo Index: 5 Type: Block 58CHECK: [Probe]: FUNC: foo Index: 6 Type: Block 59CHECK: [Probe]: FUNC: foo Index: 2 Type: Block 60CHECK: [Probe]: FUNC: foo Index: 3 Type: Block 61CHECK: [Probe]: FUNC: foo Index: 4 Type: Block 62CHECK: [Probe]: FUNC: bar Index: 1 Type: Block Inlined: @ foo:8 63CHECK: [Probe]: FUNC: bar Index: 4 Type: Block Inlined: @ foo:8 64CHECK: [Probe]: FUNC: foo Index: 6 Type: Block 65CHECK: [Probe]: FUNC: foo Index: 2 Type: Block 66CHECK: [Probe]: FUNC: foo Index: 7 Type: Block 67CHECK: [Probe]: FUNC: foo Index: 9 Type: DirectCall 68CHECK: [Probe]: FUNC: main Index: 1 Type: Block 69CHECK: [Probe]: FUNC: foo Index: 1 Type: Block Inlined: @ main:2 70CHECK: [Probe]: FUNC: foo Index: 2 Type: Block Inlined: @ main:2 71CHECK: [Probe]: FUNC: foo Index: 5 Type: Block Inlined: @ main:2 72CHECK: [Probe]: FUNC: foo Index: 6 Type: Block Inlined: @ main:2 73CHECK: [Probe]: FUNC: foo Index: 2 Type: Block Inlined: @ main:2 74CHECK: [Probe]: FUNC: foo Index: 3 Type: Block Inlined: @ main:2 75CHECK: [Probe]: FUNC: foo Index: 4 Type: Block Inlined: @ main:2 76CHECK: [Probe]: FUNC: bar Index: 1 Type: Block Inlined: @ main:2 @ foo:8 77CHECK: [Probe]: FUNC: bar Index: 4 Type: Block Inlined: @ main:2 @ foo:8 78CHECK: [Probe]: FUNC: foo Index: 6 Type: Block Inlined: @ main:2 79CHECK: [Probe]: FUNC: foo Index: 2 Type: Block Inlined: @ main:2 80CHECK: [Probe]: FUNC: foo Index: 7 Type: Block Inlined: @ main:2 81CHECK: [Probe]: FUNC: foo Index: 9 Type: DirectCall Inlined: @ main:2 82 83CHECK: Pseudo Probe Address Conversion results: 84 85CHECK: Address: 0x201750 FUNC: bar Index: 1 Type: Block 86CHECK: Address: 0x201750 FUNC: bar Index: 4 Type: Block 87CHECK: Address: 0x201770 FUNC: foo Index: 1 Type: Block 88CHECK: Address: 0x201770 FUNC: foo Index: 2 Type: Block 89CHECK: Address: 0x20177d FUNC: foo Index: 5 Type: Block 90CHECK: Address: 0x20177d FUNC: foo Index: 6 Type: Block 91CHECK: Address: 0x20177d FUNC: foo Index: 2 Type: Block 92CHECK: Address: 0x20178b FUNC: foo Index: 3 Type: Block 93CHECK: Address: 0x2017aa FUNC: foo Index: 4 Type: Block 94CHECK: Address: 0x2017aa FUNC: bar Index: 1 Type: Block Inlined: @ foo:8 95CHECK: Address: 0x2017aa FUNC: bar Index: 4 Type: Block Inlined: @ foo:8 96CHECK: Address: 0x2017aa FUNC: foo Index: 6 Type: Block 97CHECK: Address: 0x2017aa FUNC: foo Index: 2 Type: Block 98CHECK: Address: 0x2017d7 FUNC: foo Index: 7 Type: Block 99CHECK: Address: 0x2017e2 FUNC: foo Index: 9 Type: DirectCall 100CHECK: Address: 0x2017f0 FUNC: main Index: 1 Type: Block 101CHECK: Address: 0x2017f0 FUNC: foo Index: 1 Type: Block Inlined: @ main:2 102CHECK: Address: 0x2017f0 FUNC: foo Index: 2 Type: Block Inlined: @ main:2 103CHECK: Address: 0x2017fd FUNC: foo Index: 5 Type: Block Inlined: @ main:2 104CHECK: Address: 0x2017fd FUNC: foo Index: 6 Type: Block Inlined: @ main:2 105CHECK: Address: 0x2017fd FUNC: foo Index: 2 Type: Block Inlined: @ main:2 106CHECK: Address: 0x20180b FUNC: foo Index: 3 Type: Block Inlined: @ main:2 107CHECK: Address: 0x20182a FUNC: foo Index: 4 Type: Block Inlined: @ main:2 108CHECK: Address: 0x20182a FUNC: bar Index: 1 Type: Block Inlined: @ main:2 @ foo:8 109CHECK: Address: 0x20182a FUNC: bar Index: 4 Type: Block Inlined: @ main:2 @ foo:8 110CHECK: Address: 0x20182a FUNC: foo Index: 6 Type: Block Inlined: @ main:2 111CHECK: Address: 0x20182a FUNC: foo Index: 2 Type: Block Inlined: @ main:2 112CHECK: Address: 0x201857 FUNC: foo Index: 7 Type: Block Inlined: @ main:2 113CHECK: Address: 0x201862 FUNC: foo Index: 9 Type: DirectCall Inlined: @ main:2 114 115CHECK: Address: 2103120 116CHECK-NEXT: [Probe]: FUNC: bar Index: 1 Type: Block 117CHECK-NEXT: [Probe]: FUNC: bar Index: 4 Type: Block 118CHECK-NEXT: Address: 2103152 119CHECK-NEXT: [Probe]: FUNC: foo Index: 1 Type: Block 120CHECK-NEXT: [Probe]: FUNC: foo Index: 2 Type: Block 121CHECK-NEXT: Address: 2103165 122CHECK-NEXT: [Probe]: FUNC: foo Index: 5 Type: Block 123CHECK-NEXT: [Probe]: FUNC: foo Index: 6 Type: Block 124CHECK-NEXT: [Probe]: FUNC: foo Index: 2 Type: Block 125CHECK-NEXT: Address: 2103179 126CHECK-NEXT: [Probe]: FUNC: foo Index: 3 Type: Block 127CHECK-NEXT: Address: 2103210 128CHECK-NEXT: [Probe]: FUNC: foo Index: 4 Type: Block 129CHECK-NEXT: [Probe]: FUNC: foo Index: 6 Type: Block 130CHECK-NEXT: [Probe]: FUNC: foo Index: 2 Type: Block 131CHECK-NEXT: [Probe]: FUNC: bar Index: 1 Type: Block Inlined: @ foo:8 132CHECK-NEXT: [Probe]: FUNC: bar Index: 4 Type: Block Inlined: @ foo:8 133CHECK-NEXT: Address: 2103255 134CHECK-NEXT: [Probe]: FUNC: foo Index: 7 Type: Block 135CHECK-NEXT: Address: 2103266 136CHECK-NEXT: [Probe]: FUNC: foo Index: 9 Type: DirectCall 137CHECK-NEXT: Address: 2103280 138CHECK-NEXT: [Probe]: FUNC: main Index: 1 Type: Block 139CHECK-NEXT: [Probe]: FUNC: foo Index: 1 Type: Block Inlined: @ main:2 140CHECK-NEXT: [Probe]: FUNC: foo Index: 2 Type: Block Inlined: @ main:2 141CHECK-NEXT: Address: 2103293 142CHECK-NEXT: [Probe]: FUNC: foo Index: 5 Type: Block Inlined: @ main:2 143CHECK-NEXT: [Probe]: FUNC: foo Index: 6 Type: Block Inlined: @ main:2 144CHECK-NEXT: [Probe]: FUNC: foo Index: 2 Type: Block Inlined: @ main:2 145CHECK-NEXT: Address: 2103307 146CHECK-NEXT: [Probe]: FUNC: foo Index: 3 Type: Block Inlined: @ main:2 147CHECK-NEXT: Address: 2103338 148CHECK-NEXT: [Probe]: FUNC: foo Index: 4 Type: Block Inlined: @ main:2 149CHECK-NEXT: [Probe]: FUNC: foo Index: 6 Type: Block Inlined: @ main:2 150CHECK-NEXT: [Probe]: FUNC: foo Index: 2 Type: Block Inlined: @ main:2 151CHECK-NEXT: [Probe]: FUNC: bar Index: 1 Type: Block Inlined: @ main:2 @ foo:8 152CHECK-NEXT: [Probe]: FUNC: bar Index: 4 Type: Block Inlined: @ main:2 @ foo:8 153CHECK-NEXT: Address: 2103383 154CHECK-NEXT: [Probe]: FUNC: foo Index: 7 Type: Block Inlined: @ main:2 155CHECK-NEXT: Address: 2103394 156CHECK-NEXT: [Probe]: FUNC: foo Index: 9 Type: DirectCall Inlined: @ main:2 157