
Added flag '--match-profile-with-function-hash' to match functions based on exact hash. After identical and LTO name matching, more functions can be recovered for inference with exact hash, in the case of function renaming with no functional changes. Collisions are possible in the unlikely case where multiple functions share the same exact hash. The flag is off by default as it requires the processing of all binary functions and subsequently is expensive. Test Plan: added hashing-based-function-matching.test.
64 lines
1.4 KiB
Plaintext
64 lines
1.4 KiB
Plaintext
## Tests function matching in YAMLProfileReader by function hash.
|
|
|
|
# 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.out --data %t/yaml -v=2 \
|
|
# RUN: --print-cfg --match-profile-with-function-hash --profile-ignore-hash=0 2>&1 | FileCheck %s
|
|
|
|
# CHECK: BOLT-INFO: matched 1 functions with hash
|
|
|
|
#--- main.s
|
|
.globl main
|
|
.type main, @function
|
|
main:
|
|
.cfi_startproc
|
|
.LBB00:
|
|
pushq %rbp
|
|
movq %rsp, %rbp
|
|
subq $16, %rsp
|
|
testq %rax, %rax
|
|
js .LBB03
|
|
.LBB01:
|
|
jne .LBB04
|
|
.LBB02:
|
|
nop
|
|
.LBB03:
|
|
xorl %eax, %eax
|
|
addq $16, %rsp
|
|
popq %rbp
|
|
retq
|
|
.LBB04:
|
|
xorl %eax, %eax
|
|
addq $16, %rsp
|
|
popq %rbp
|
|
retq
|
|
## For relocations against .text
|
|
.reloc 0, R_X86_64_NONE
|
|
.cfi_endproc
|
|
.size main, .-main
|
|
|
|
#--- yaml
|
|
---
|
|
header:
|
|
profile-version: 1
|
|
binary-name: 'hashing-based-function-matching.s.tmp.exe'
|
|
binary-build-id: '<unknown>'
|
|
profile-flags: [ lbr ]
|
|
profile-origin: branch profile reader
|
|
profile-events: ''
|
|
dfs-order: false
|
|
hash-func: xxh3
|
|
functions:
|
|
- name: main2
|
|
fid: 0
|
|
hash: 0x6E7F15254DE2478
|
|
exec: 1
|
|
nblocks: 6
|
|
blocks:
|
|
- bid: 1
|
|
insns: 1
|
|
succ: [ { bid: 3, cnt: 1} ]
|
|
...
|