mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-01 12:43:47 +00:00
[BOLT][YAML] Only read first profile per function
D159460 regressed the bugfix in D156644. Fix that and emit a warning. Add a test case. Reviewed By: #bolt, maksfb Differential Revision: https://reviews.llvm.org/D159529
This commit is contained in:
parent
4ea883cbbb
commit
6a1cf545cc
@ -294,9 +294,19 @@ Error YAMLProfileReader::preprocessProfile(BinaryContext &BC) {
|
||||
buildNameMaps(BC);
|
||||
|
||||
// Preliminary assign function execution count.
|
||||
for (auto [YamlBF, BF] : llvm::zip_equal(YamlBP.Functions, ProfileBFs))
|
||||
if (BF)
|
||||
for (auto [YamlBF, BF] : llvm::zip_equal(YamlBP.Functions, ProfileBFs)) {
|
||||
if (!BF)
|
||||
continue;
|
||||
if (!BF->hasProfile()) {
|
||||
BF->setExecutionCount(YamlBF.ExecCount);
|
||||
} else {
|
||||
if (opts::Verbosity >= 1) {
|
||||
errs() << "BOLT-WARNING: dropping duplicate profile for " << YamlBF.Name
|
||||
<< '\n';
|
||||
}
|
||||
BF = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
return Error::success();
|
||||
}
|
||||
|
53
bolt/test/X86/yaml-multiple-profiles.test
Normal file
53
bolt/test/X86/yaml-multiple-profiles.test
Normal file
@ -0,0 +1,53 @@
|
||||
# This test ensures that a YAML profile with multiple profiles matching the same
|
||||
# function is handled gracefully.
|
||||
|
||||
# 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 /dev/null --data %t/profile.yaml \
|
||||
# RUN: --profile-ignore-hash -v=1 2>&1 | FileCheck %s
|
||||
# CHECK: BOLT-WARNING: dropping duplicate profile for main_alias(*2)
|
||||
#--- main.s
|
||||
.globl main_alias
|
||||
.type main_alias, %function
|
||||
main_alias:
|
||||
.globl main
|
||||
.type main, %function
|
||||
main:
|
||||
.cfi_startproc
|
||||
cmpl $0x0, %eax
|
||||
retq
|
||||
.cfi_endproc
|
||||
.size main, .-main
|
||||
.size main_alias, .-main_alias
|
||||
#--- 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
|
||||
functions:
|
||||
- name: 'main(*2)'
|
||||
fid: 1
|
||||
hash: 0x50BBA3441D436491
|
||||
exec: 1
|
||||
nblocks: 1
|
||||
blocks:
|
||||
- bid: 0
|
||||
insns: 2
|
||||
hash: 0x4D4D8FAF7D4C0000
|
||||
- name: 'main_alias(*2)'
|
||||
fid: 1
|
||||
hash: 0x50BBA3441D436491
|
||||
exec: 1
|
||||
nblocks: 1
|
||||
blocks:
|
||||
- bid: 0
|
||||
insns: 2
|
||||
hash: 0x4D4D8FAF7D4C0000
|
||||
...
|
Loading…
x
Reference in New Issue
Block a user