xref: /llvm-project/llvm/test/tools/obj2yaml/ELF/bb-addr-map-pgo-analysis-map.yaml (revision a3f61c8bfd277e0e6d65695f739f4432fb1fd721)
1## Check how obj2yaml produces YAML PGO Analysis Map in .llvm_bb_addr_map.
2
3## Check that obj2yaml uses the "Entries" tag to describe an .llvm_bb_addr_map section.
4
5# RUN: yaml2obj --docnum=1 %s -o %t1
6# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=VALID
7
8# VALID:      --- !ELF
9# VALID-NEXT: FileHeader:
10# VALID-NEXT:   Class: ELFCLASS64
11# VALID-NEXT:   Data:  ELFDATA2LSB
12# VALID-NEXT:   Type:  ET_EXEC
13# VALID-NEXT: Sections:
14# VALID-NEXT:   - Name: .llvm_bb_addr_map
15# VALID-NEXT:     Type: SHT_LLVM_BB_ADDR_MAP
16# VALID-NEXT:     Entries:
17# VALID-NEXT:       - Version: 2
18# VALID-NEXT:         Feature: 0x7
19## The 'BaseAddress' field is omitted when it's zero.
20# VALID-NEXT:         BBRanges:
21# VALID-NEXT:           - BBEntries:
22# VALID-NEXT:             - ID:            0
23# VALID-NEXT:               AddressOffset: 0x1
24# VALID-NEXT:               Size:          0x2
25# VALID-NEXT:               Metadata:      0x3
26# VALID-NEXT:             - ID:            2
27# VALID-NEXT:               AddressOffset: 0x4
28# VALID-NEXT:               Size:          0x5
29# VALID-NEXT:               Metadata:      0x6
30# VALID-NEXT:             - ID:            4
31# VALID-NEXT:               AddressOffset: 0xFFFFFFFFFFFFFFF7
32# VALID-NEXT:               Size:          0xFFFFFFFFFFFFFFF8
33# VALID-NEXT:               Metadata:      0xFFFFFFFFFFFFFFF9
34# VALID-NEXT:       - Version: 2
35# VALID-NEXT:         Feature: 0xA
36# VALID-NEXT:         BBRanges:
37# VALID-NEXT:           - BaseAddress: 0xFFFFFFFFFFFFFF20
38# VALID-NEXT:             BBEntries:
39# VALID-NEXT:               - ID:            6
40# VALID-NEXT:                 AddressOffset: 0xA
41# VALID-NEXT:                 Size:          0xB
42# VALID-NEXT:                 Metadata:      0xC
43# VALID-NEXT:     PGOAnalyses:
44# VALID-NEXT:       - FuncEntryCount: 100
45# VALID-NEXT:         PGOBBEntries:
46# VALID-NEXT:           - BBFreq:        100
47# VALID-NEXT:             Successors:
48# VALID-NEXT:               - ID:        2
49# VALID-NEXT:                 BrProb:    0x80000000
50# VALID-NEXT:               - ID:        4
51# VALID-NEXT:                 BrProb:    0x80000000
52# VALID-NEXT:           - BBFreq:        50
53# VALID-NEXT:             Successors:
54# VALID-NEXT:               - ID:        4
55# VALID-NEXT:                 BrProb:    0xFFFFFFFF
56# VALID-NEXT:           - BBFreq:        100
57# VALID-NEXT:             Successors:    []
58# VALID-NEXT:         PGOBBEntries:
59# VALID-NEXT:           - BBFreq:        20
60
61--- !ELF
62FileHeader:
63  Class: ELFCLASS64
64  Data:  ELFDATA2LSB
65  Type:  ET_EXEC
66Sections:
67  - Name:   .llvm_bb_addr_map
68    Type:   SHT_LLVM_BB_ADDR_MAP
69    ShSize: [[SIZE=<none>]]
70    Entries:
71      - Version: 2
72        Feature: 0x7
73        BBRanges:
74          - BaseAddress: 0x0
75            BBEntries:
76              - ID:            0
77                AddressOffset: 0x1
78                Size:          0x2
79                Metadata:      0x3
80              - ID:            2
81                AddressOffset: 0x4
82                Size:          0x5
83                Metadata:      0x6
84              - ID:            4
85                AddressOffset: 0xFFFFFFFFFFFFFFF7
86                Size:          0xFFFFFFFFFFFFFFF8
87                Metadata:      0xFFFFFFFFFFFFFFF9
88      - Version:   2
89        Feature:   0xA
90        BBRanges:
91          - BaseAddress:   0xFFFFFFFFFFFFFF20
92            BBEntries:
93             - ID:            6
94               AddressOffset: 0xA
95               Size:          0xB
96               Metadata:      0xC
97    PGOAnalyses:
98      - FuncEntryCount: 100
99        PGOBBEntries:
100          - BBFreq:        100
101            Successors:
102              - ID:        2
103                BrProb:    0x80000000
104              - ID:        4
105                BrProb:    0x80000000
106          - BBFreq:        50
107            Successors:
108              - ID:        4
109                BrProb:    0xFFFFFFFF
110          - BBFreq:        100
111            Successors: []
112      - PGOBBEntries:
113          - BBFreq:        20
114
115## Check obj2yaml can dump multiple .llvm_bb_addr_map sections.
116
117# RUN: yaml2obj --docnum=2 %s -o %t2
118# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=MULTI
119
120# MULTI:      --- !ELF
121# MULTI-NEXT: FileHeader:
122# MULTI-NEXT:   Class: ELFCLASS64
123# MULTI-NEXT:   Data:  ELFDATA2LSB
124# MULTI-NEXT:   Type:  ET_EXEC
125# MULTI-NEXT: Sections:
126# MULTI-NEXT:   - Name: .llvm_bb_addr_map
127# MULTI-NEXT:     Type: SHT_LLVM_BB_ADDR_MAP
128# MULTI-NEXT:     Entries:
129## Fieldx 'BaseAddress' is omitted when it is zero.
130# MULTI-NEXT:       - Version: 0
131# MULTI-NEXT:         Feature: 0x3
132# MULTI-NEXT:         BBRanges:
133# MULTI-NEXT:           - BBEntries:
134# MULTI-NEXT:              - ID:            0
135# MULTI-NEXT:                AddressOffset: 0x1
136# MULTI-NEXT:                Size:          0x2
137# MULTI-NEXT:                Metadata:      0x3
138# MULTI-NEXT:     PGOAnalyses:
139# MULTI-NEXT:       - FuncEntryCount: 0
140# MULTI-NEXT:         PGOBBEntries:
141# MULTI-NEXT:           - BBFreq: 0
142# MULTI-NEXT:   - Name: '.llvm_bb_addr_map (1)'
143# MULTI-NEXT:     Type: SHT_LLVM_BB_ADDR_MAP
144# MULTI-NEXT:     Entries:
145# MULTI-NEXT:       - Version:   0
146# MULTI-NEXT:         Feature:   0x1
147# MULTI-NEXT:         BBRanges:
148# MULTI-NEXT:           - BaseAddress:   0x20
149# MULTI-NEXT:             BBEntries: []
150# MULTI-NEXT:     PGOAnalyses:
151# MULTI-NEXT:       - FuncEntryCount: 0
152
153--- !ELF
154FileHeader:
155  Class: ELFCLASS64
156  Data:  ELFDATA2LSB
157  Type:  ET_EXEC
158Sections:
159  - Name: .llvm_bb_addr_map
160    Type: SHT_LLVM_BB_ADDR_MAP
161    Entries:
162## Check that obj2yaml does not emit the 'BaseAddress' and 'Feature' fields when
163## they are zero.
164      - Version: 0
165        Feature: 0x3
166        BBRanges:
167          - BaseAddress: 0x0
168            BBEntries:
169              - AddressOffset: 0x1
170                Size:          0x2
171                Metadata:      0x3
172    PGOAnalyses:
173      - FuncEntryCount: 0
174        PGOBBEntries:
175          - BBFreq:        0
176  - Name: '.llvm_bb_addr_map (1)'
177    Type:  SHT_LLVM_BB_ADDR_MAP
178    Entries:
179      - Version: 0
180        Feature: 0x1
181        BBRanges:
182          - BaseAddress: 0x20
183    PGOAnalyses:
184      - FuncEntryCount: 0
185
186## Check that obj2yaml uses the "Content" tag to describe an .llvm_bb_addr_map section
187## when it can't extract the entries, for example, when the section is truncated.
188
189# RUN: yaml2obj --docnum=1 -DSIZE=0x1D %s -o %t3
190# RUN: obj2yaml %t3 | FileCheck %s --check-prefixes=TRUNCATED,INVALID
191
192# INVALID:           --- !ELF
193# INVALID-NEXT:      FileHeader:
194# INVALID-NEXT:        Class: ELFCLASS64
195# INVALID-NEXT:        Data:  ELFDATA2LSB
196# INVALID-NEXT:        Type:  ET_EXEC
197# INVALID-NEXT:      Sections:
198# INVALID-NEXT:        - Name:    .llvm_bb_addr_map
199# INVALID-NEXT:          Type:    SHT_LLVM_BB_ADDR_MAP
200# TRUNCATED-NEXT:        Content: {{([[:xdigit:]]{58})}}{{$}}
201# TRUNCATED-NEXT:        Content: {{([[:xdigit:]]{58})}}{{$}}
202
203## Check that obj2yaml uses the "Content" tag when original YAML does not
204## provide a PGO field that was enabled in the feature byte
205
206# RUN: yaml2obj --docnum=3 %s -o %t4
207# RUN: obj2yaml %t4 | FileCheck %s --check-prefix=MISSING-FEC
208
209--- !ELF
210FileHeader:
211  Class: ELFCLASS64
212  Data:  ELFDATA2LSB
213  Type:  ET_EXEC
214Sections:
215  - Name: '.llvm_bb_addr_map'
216    Type:  SHT_LLVM_BB_ADDR_MAP
217    Entries:
218      - Version: 0
219        Feature: 0x1
220        BBRanges:
221          - BaseAddress: 0x20
222
223# MISSING-FEC:           --- !ELF
224# MISSING-FEC-NEXT:      FileHeader:
225# MISSING-FEC-NEXT:        Class: ELFCLASS64
226# MISSING-FEC-NEXT:        Data:  ELFDATA2LSB
227# MISSING-FEC-NEXT:        Type:  ET_EXEC
228# MISSING-FEC-NEXT:      Sections:
229# MISSING-FEC-NEXT:        - Name:    .llvm_bb_addr_map
230# MISSING-FEC-NEXT:          Type:    SHT_LLVM_BB_ADDR_MAP
231# MISSING-FEC-NEXT:          Content: '{{([[:xdigit:]]+)}}'{{$}}
232
233