forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SHT_LLVM_BB_ADDR_MAP][obj2yaml] Implements PGOAnalysisMap for elf2ya…
…ml and tests. (llvm#80924) Adds support to obj2yaml for PGO Analysis Map. Adds a test to both obj2yaml and yaml2obj.
- Loading branch information
1 parent
09e9895
commit a3f61c8
Showing
3 changed files
with
352 additions
and
0 deletions.
There are no files selected for viewing
232 changes: 232 additions & 0 deletions
232
llvm/test/tools/obj2yaml/ELF/bb-addr-map-pgo-analysis-map.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,232 @@ | ||
## Check how obj2yaml produces YAML PGO Analysis Map in .llvm_bb_addr_map. | ||
|
||
## Check that obj2yaml uses the "Entries" tag to describe an .llvm_bb_addr_map section. | ||
|
||
# RUN: yaml2obj --docnum=1 %s -o %t1 | ||
# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=VALID | ||
|
||
# VALID: --- !ELF | ||
# VALID-NEXT: FileHeader: | ||
# VALID-NEXT: Class: ELFCLASS64 | ||
# VALID-NEXT: Data: ELFDATA2LSB | ||
# VALID-NEXT: Type: ET_EXEC | ||
# VALID-NEXT: Sections: | ||
# VALID-NEXT: - Name: .llvm_bb_addr_map | ||
# VALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP | ||
# VALID-NEXT: Entries: | ||
# VALID-NEXT: - Version: 2 | ||
# VALID-NEXT: Feature: 0x7 | ||
## The 'BaseAddress' field is omitted when it's zero. | ||
# VALID-NEXT: BBRanges: | ||
# VALID-NEXT: - BBEntries: | ||
# VALID-NEXT: - ID: 0 | ||
# VALID-NEXT: AddressOffset: 0x1 | ||
# VALID-NEXT: Size: 0x2 | ||
# VALID-NEXT: Metadata: 0x3 | ||
# VALID-NEXT: - ID: 2 | ||
# VALID-NEXT: AddressOffset: 0x4 | ||
# VALID-NEXT: Size: 0x5 | ||
# VALID-NEXT: Metadata: 0x6 | ||
# VALID-NEXT: - ID: 4 | ||
# VALID-NEXT: AddressOffset: 0xFFFFFFFFFFFFFFF7 | ||
# VALID-NEXT: Size: 0xFFFFFFFFFFFFFFF8 | ||
# VALID-NEXT: Metadata: 0xFFFFFFFFFFFFFFF9 | ||
# VALID-NEXT: - Version: 2 | ||
# VALID-NEXT: Feature: 0xA | ||
# VALID-NEXT: BBRanges: | ||
# VALID-NEXT: - BaseAddress: 0xFFFFFFFFFFFFFF20 | ||
# VALID-NEXT: BBEntries: | ||
# VALID-NEXT: - ID: 6 | ||
# VALID-NEXT: AddressOffset: 0xA | ||
# VALID-NEXT: Size: 0xB | ||
# VALID-NEXT: Metadata: 0xC | ||
# VALID-NEXT: PGOAnalyses: | ||
# VALID-NEXT: - FuncEntryCount: 100 | ||
# VALID-NEXT: PGOBBEntries: | ||
# VALID-NEXT: - BBFreq: 100 | ||
# VALID-NEXT: Successors: | ||
# VALID-NEXT: - ID: 2 | ||
# VALID-NEXT: BrProb: 0x80000000 | ||
# VALID-NEXT: - ID: 4 | ||
# VALID-NEXT: BrProb: 0x80000000 | ||
# VALID-NEXT: - BBFreq: 50 | ||
# VALID-NEXT: Successors: | ||
# VALID-NEXT: - ID: 4 | ||
# VALID-NEXT: BrProb: 0xFFFFFFFF | ||
# VALID-NEXT: - BBFreq: 100 | ||
# VALID-NEXT: Successors: [] | ||
# VALID-NEXT: PGOBBEntries: | ||
# VALID-NEXT: - BBFreq: 20 | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_EXEC | ||
Sections: | ||
- Name: .llvm_bb_addr_map | ||
Type: SHT_LLVM_BB_ADDR_MAP | ||
ShSize: [[SIZE=<none>]] | ||
Entries: | ||
- Version: 2 | ||
Feature: 0x7 | ||
BBRanges: | ||
- BaseAddress: 0x0 | ||
BBEntries: | ||
- ID: 0 | ||
AddressOffset: 0x1 | ||
Size: 0x2 | ||
Metadata: 0x3 | ||
- ID: 2 | ||
AddressOffset: 0x4 | ||
Size: 0x5 | ||
Metadata: 0x6 | ||
- ID: 4 | ||
AddressOffset: 0xFFFFFFFFFFFFFFF7 | ||
Size: 0xFFFFFFFFFFFFFFF8 | ||
Metadata: 0xFFFFFFFFFFFFFFF9 | ||
- Version: 2 | ||
Feature: 0xA | ||
BBRanges: | ||
- BaseAddress: 0xFFFFFFFFFFFFFF20 | ||
BBEntries: | ||
- ID: 6 | ||
AddressOffset: 0xA | ||
Size: 0xB | ||
Metadata: 0xC | ||
PGOAnalyses: | ||
- FuncEntryCount: 100 | ||
PGOBBEntries: | ||
- BBFreq: 100 | ||
Successors: | ||
- ID: 2 | ||
BrProb: 0x80000000 | ||
- ID: 4 | ||
BrProb: 0x80000000 | ||
- BBFreq: 50 | ||
Successors: | ||
- ID: 4 | ||
BrProb: 0xFFFFFFFF | ||
- BBFreq: 100 | ||
Successors: [] | ||
- PGOBBEntries: | ||
- BBFreq: 20 | ||
|
||
## Check obj2yaml can dump multiple .llvm_bb_addr_map sections. | ||
|
||
# RUN: yaml2obj --docnum=2 %s -o %t2 | ||
# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=MULTI | ||
|
||
# MULTI: --- !ELF | ||
# MULTI-NEXT: FileHeader: | ||
# MULTI-NEXT: Class: ELFCLASS64 | ||
# MULTI-NEXT: Data: ELFDATA2LSB | ||
# MULTI-NEXT: Type: ET_EXEC | ||
# MULTI-NEXT: Sections: | ||
# MULTI-NEXT: - Name: .llvm_bb_addr_map | ||
# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP | ||
# MULTI-NEXT: Entries: | ||
## Fieldx 'BaseAddress' is omitted when it is zero. | ||
# MULTI-NEXT: - Version: 0 | ||
# MULTI-NEXT: Feature: 0x3 | ||
# MULTI-NEXT: BBRanges: | ||
# MULTI-NEXT: - BBEntries: | ||
# MULTI-NEXT: - ID: 0 | ||
# MULTI-NEXT: AddressOffset: 0x1 | ||
# MULTI-NEXT: Size: 0x2 | ||
# MULTI-NEXT: Metadata: 0x3 | ||
# MULTI-NEXT: PGOAnalyses: | ||
# MULTI-NEXT: - FuncEntryCount: 0 | ||
# MULTI-NEXT: PGOBBEntries: | ||
# MULTI-NEXT: - BBFreq: 0 | ||
# MULTI-NEXT: - Name: '.llvm_bb_addr_map (1)' | ||
# MULTI-NEXT: Type: SHT_LLVM_BB_ADDR_MAP | ||
# MULTI-NEXT: Entries: | ||
# MULTI-NEXT: - Version: 0 | ||
# MULTI-NEXT: Feature: 0x1 | ||
# MULTI-NEXT: BBRanges: | ||
# MULTI-NEXT: - BaseAddress: 0x20 | ||
# MULTI-NEXT: BBEntries: [] | ||
# MULTI-NEXT: PGOAnalyses: | ||
# MULTI-NEXT: - FuncEntryCount: 0 | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_EXEC | ||
Sections: | ||
- Name: .llvm_bb_addr_map | ||
Type: SHT_LLVM_BB_ADDR_MAP | ||
Entries: | ||
## Check that obj2yaml does not emit the 'BaseAddress' and 'Feature' fields when | ||
## they are zero. | ||
- Version: 0 | ||
Feature: 0x3 | ||
BBRanges: | ||
- BaseAddress: 0x0 | ||
BBEntries: | ||
- AddressOffset: 0x1 | ||
Size: 0x2 | ||
Metadata: 0x3 | ||
PGOAnalyses: | ||
- FuncEntryCount: 0 | ||
PGOBBEntries: | ||
- BBFreq: 0 | ||
- Name: '.llvm_bb_addr_map (1)' | ||
Type: SHT_LLVM_BB_ADDR_MAP | ||
Entries: | ||
- Version: 0 | ||
Feature: 0x1 | ||
BBRanges: | ||
- BaseAddress: 0x20 | ||
PGOAnalyses: | ||
- FuncEntryCount: 0 | ||
|
||
## Check that obj2yaml uses the "Content" tag to describe an .llvm_bb_addr_map section | ||
## when it can't extract the entries, for example, when the section is truncated. | ||
|
||
# RUN: yaml2obj --docnum=1 -DSIZE=0x1D %s -o %t3 | ||
# RUN: obj2yaml %t3 | FileCheck %s --check-prefixes=TRUNCATED,INVALID | ||
|
||
# INVALID: --- !ELF | ||
# INVALID-NEXT: FileHeader: | ||
# INVALID-NEXT: Class: ELFCLASS64 | ||
# INVALID-NEXT: Data: ELFDATA2LSB | ||
# INVALID-NEXT: Type: ET_EXEC | ||
# INVALID-NEXT: Sections: | ||
# INVALID-NEXT: - Name: .llvm_bb_addr_map | ||
# INVALID-NEXT: Type: SHT_LLVM_BB_ADDR_MAP | ||
# TRUNCATED-NEXT: Content: {{([[:xdigit:]]{58})}}{{$}} | ||
# TRUNCATED-NEXT: Content: {{([[:xdigit:]]{58})}}{{$}} | ||
|
||
## Check that obj2yaml uses the "Content" tag when original YAML does not | ||
## provide a PGO field that was enabled in the feature byte | ||
|
||
# RUN: yaml2obj --docnum=3 %s -o %t4 | ||
# RUN: obj2yaml %t4 | FileCheck %s --check-prefix=MISSING-FEC | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_EXEC | ||
Sections: | ||
- Name: '.llvm_bb_addr_map' | ||
Type: SHT_LLVM_BB_ADDR_MAP | ||
Entries: | ||
- Version: 0 | ||
Feature: 0x1 | ||
BBRanges: | ||
- BaseAddress: 0x20 | ||
|
||
# MISSING-FEC: --- !ELF | ||
# MISSING-FEC-NEXT: FileHeader: | ||
# MISSING-FEC-NEXT: Class: ELFCLASS64 | ||
# MISSING-FEC-NEXT: Data: ELFDATA2LSB | ||
# MISSING-FEC-NEXT: Type: ET_EXEC | ||
# MISSING-FEC-NEXT: Sections: | ||
# MISSING-FEC-NEXT: - Name: .llvm_bb_addr_map | ||
# MISSING-FEC-NEXT: Type: SHT_LLVM_BB_ADDR_MAP | ||
# MISSING-FEC-NEXT: Content: '{{([[:xdigit:]]+)}}'{{$}} | ||
|
83 changes: 83 additions & 0 deletions
83
llvm/test/tools/yaml2obj/ELF/bb-addr-map-pgo-analysis-map.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
## Check how yaml2obj produces PGO Analysis Map in .llvm_bb_addr_map section. | ||
|
||
# RUN: yaml2obj --docnum=1 %s -o %t1 | ||
# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s | ||
|
||
# Case 4: Specify Entries. | ||
# CHECK: Name: .llvm_bb_addr_map (1) | ||
# CHECK: SectionData ( | ||
# CHECK-NEXT: 0000: 02072000 00000000 0000010B 010203E8 | ||
# CHECK-NEXT: 0010: 07E80702 0CEEDDBB F70E0D91 A2C48801 | ||
# CHECK-NEXT: ) | ||
|
||
# Case 7: Not including a field which is enabled in feature doesn't emit value | ||
# CHECK: Name: .llvm_bb_addr_map (1) | ||
# CHECK: SectionData ( | ||
# CHECK-NEXT: 0000: 02012000 00000000 0000020D 010203 | | ||
# CHECK-NEXT: ) | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_EXEC | ||
Sections: | ||
|
||
## Test the following cases: | ||
|
||
## 1) We can produce an .llvm_bb_addr_map section from a description with | ||
## Entries and PGO Analysis data. | ||
- Name: '.llvm_bb_addr_map (1)' | ||
Type: SHT_LLVM_BB_ADDR_MAP | ||
Entries: | ||
- Version: 2 | ||
Feature: 0x7 | ||
BBRanges: | ||
- BaseAddress: 0x0000000000000020 | ||
BBEntries: | ||
- ID: 11 | ||
AddressOffset: 0x00000001 | ||
Size: 0x00000002 | ||
Metadata: 0x00000003 | ||
PGOAnalyses: | ||
- FuncEntryCount: 1000 | ||
PGOBBEntries: | ||
- BBFreq: 1000 | ||
Successors: | ||
- ID: 12 | ||
BrProb: 0xeeeeeeee | ||
- ID: 13 | ||
BrProb: 0x11111111 | ||
|
||
## 2) According to feature we have FuncEntryCount but none is provided in yaml | ||
- Name: '.llvm_bb_addr_map (2)' | ||
Type: SHT_LLVM_BB_ADDR_MAP | ||
Entries: | ||
- Version: 2 | ||
Feature: 0x1 | ||
BBRanges: | ||
- BaseAddress: 0x0000000000000020 | ||
NumBlocks: 2 | ||
BBEntries: | ||
- ID: 13 | ||
AddressOffset: 0x00000001 | ||
Size: 0x00000002 | ||
Metadata: 0x00000003 | ||
|
||
## Check that yaml2obj generates a warning when we use unsupported feature. | ||
# RUN: yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=INVALID-FEATURE | ||
# INVALID-FEATURE: warning: invalid encoding for BBAddrMap::Features: 0xff | ||
|
||
--- !ELF | ||
FileHeader: | ||
Class: ELFCLASS64 | ||
Data: ELFDATA2LSB | ||
Type: ET_EXEC | ||
Sections: | ||
- Name: '.llvm_bb_addr_map' | ||
Type: SHT_LLVM_BB_ADDR_MAP | ||
Entries: | ||
- Version: 2 | ||
## Specify unsupported feature | ||
Feature: 0xFF | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters