xref: /llvm-project/bolt/test/X86/pseudoprobe-decoding-inline.test (revision c00c62c113d1ac121891d644a9f18f247c24d9b1)
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