Skip to content

Commit

Permalink
[BOLT][YAML] Allow unknown keys in the input (llvm#100824)
Browse files Browse the repository at this point in the history
This ensures forward compatibility, where old BOLT versions can consume
the profile created by newer versions with extra keys.

Test Plan: added yaml-unknown-keys.test
  • Loading branch information
aaupov authored Sep 3, 2024
1 parent 126940b commit 15fa3ba
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
1 change: 1 addition & 0 deletions bolt/lib/Profile/YAMLProfileReader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ Error YAMLProfileReader::preprocessProfile(BinaryContext &BC) {
return errorCodeToError(EC);
}
yaml::Input YamlInput(MB.get()->getBuffer());
YamlInput.setAllowUnknownKeys(true);

// Consume YAML file.
YamlInput >> YamlBP;
Expand Down
50 changes: 50 additions & 0 deletions bolt/test/X86/yaml-unknown-keys.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
## Test that BOLT gracefully handles a YAML profile with unknown keys.

# REQUIRES: system-linux
# RUN: split-file %s %t
# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %t/main.s -o %t.o
# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -nostdlib
# RUN: llvm-bolt %t.exe -o %t.null --data %t/profile.yaml \
# RUN: --profile-ignore-hash -v=1 2>&1 | FileCheck %s
# CHECK: warning: unknown key 'unknown-header-key'
# CHECK: warning: unknown key 'unknown_succ_key'
# CHECK: warning: unknown key 'unknown_block_key'
# CHECK: warning: unknown key 'unknown_function_key'
# CHECK: warning: unknown key 'unknown_toplev_key'
#--- main.s
.globl main
.type main, %function
main:
.cfi_startproc
cmpl $0x0, %eax
jne .LBB0
.LBB0:
retq
.cfi_endproc
.size main, .-main
#--- profile.yaml
---
header:
profile-version: 1
binary-name: 'yaml-multiple-profiles.test.tmp.exe'
binary-build-id: '<unknown>'
profile-flags: [ lbr ]
profile-origin: branch profile reader
profile-events: ''
dfs-order: false
unknown-header-key: true
functions:
- name: 'main'
fid: 1
hash: 0x50BBA3441D436491
exec: 1
nblocks: 1
blocks:
- bid: 0
insns: 2
hash: 0x4D4D8FAF7D4C0000
succ: [ { bid: 1, cnt: 0, unknown_succ_key: 0x10 } ]
unknown_block_key: [ ]
unknown_function_key: 1
unknown_toplev_key: ''
...
1 change: 1 addition & 0 deletions bolt/tools/merge-fdata/merge-fdata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,7 @@ int main(int argc, char **argv) {
if (std::error_code EC = MB.getError())
report_error(InputDataFilename, EC);
yaml::Input YamlInput(MB.get()->getBuffer());
YamlInput.setAllowUnknownKeys(true);

errs() << "Merging data from " << InputDataFilename << "...\n";

Expand Down

0 comments on commit 15fa3ba

Please sign in to comment.