## Tests blocks matching by called function names in inferStaleProfile. # REQUIRES: system-linux, asserts # 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 --profile-ignore-hash -v=1 \ # RUN: --dyno-stats --print-cfg --infer-stale-profile=1 --debug-only=bolt-prof \ # RUN: 2>&1 | FileCheck %s # CHECK: BOLT-INFO: applying profile inference for "qux" # CHECK: Matched yaml block (bid = 1) with hash 4 to BB (index = 0) with hash 314e1bc10000 # CHECK: call match # CHECK: BOLT-INFO: applying profile inference for "fred" # CHECK: Matched yaml block (bid = 1) with hash 5 to BB (index = 0) with hash 7541bc10000 # CHECK: call match #--- main.s .globl foo # -- Begin function foo .p2align 4, 0x90 .type foo,@function foo: # @foo # %bb.0: pushq %rbp movq %rsp, %rbp popq %rbp retq .Lfunc_end0: .size foo, .Lfunc_end0-foo # -- End function .globl bar # -- Begin function bar .p2align 4, 0x90 .type bar,@function bar: # @bar # %bb.0: pushq %rbp movq %rsp, %rbp popq %rbp retq .Lfunc_end1: .size bar, .Lfunc_end1-bar # -- End function .globl qux # -- Begin function qux .p2align 4, 0x90 .type qux,@function qux: # @qux # %bb.0: pushq %rbp movq %rsp, %rbp callq foo callq bar popq %rbp retq .Lfunc_end2: .size qux, .Lfunc_end2-qux # -- End function .globl fred # -- Begin function fred .p2align 4, 0x90 .type fred,@function fred: # @fred # %bb.0: pushq %rbp movq %rsp, %rbp callq foo callq qux callq bar callq bar callq foo popq %rbp retq .Lfunc_end3: .size fred, .Lfunc_end3-fred # -- End function .globl main # -- Begin function main .p2align 4, 0x90 .type main,@function main: # @main # %bb.0: pushq %rbp movq %rsp, %rbp xorl %eax, %eax popq %rbp retq .Lfunc_end4: .size main, .Lfunc_end4-main # -- End function .addrsig .addrsig_sym foo .addrsig_sym bar .addrsig_sym qux #--- yaml --- header: profile-version: 1 binary-name: 'match-functions-with-calls-as-anchors.s.tmp.exe' binary-build-id: '' profile-flags: [ lbr ] profile-origin: branch profile reader profile-events: '' dfs-order: false hash-func: xxh3 functions: - name: main fid: 0 hash: 0x0000000000000001 exec: 1 nblocks: 6 blocks: - bid: 1 hash: 0x0000000000000001 insns: 1 succ: [ { bid: 3, cnt: 1} ] - name: foo fid: 1 hash: 0x0000000000000002 exec: 1 nblocks: 6 blocks: - bid: 1 hash: 0x0000000000000002 insns: 1 succ: [ { bid: 3, cnt: 1} ] - name: bar fid: 2 hash: 0x0000000000000003 exec: 1 nblocks: 6 blocks: - bid: 1 hash: 0x0000000000000003 insns: 1 succ: [ { bid: 3, cnt: 1} ] - name: qux fid: 3 hash: 0x0000000000000004 exec: 4 nblocks: 6 blocks: - bid: 1 hash: 0x0000000000000004 insns: 1 succ: [ { bid: 3, cnt: 1} ] calls: [ { off : 0, fid : 1, cnt : 0}, { off : 0, fid : 2, cnt : 0} ] - name: fred fid: 4 hash: 0x0000000000000005 exec: 1 nblocks: 6 blocks: - bid: 1 hash: 0x0000000000000005 insns: 1 succ: [ { bid: 3, cnt: 1} ] calls: [ { off : 0, fid : 3, cnt : 0}, { off : 0, fid : 1, cnt : 0}, { off : 0, fid : 2, cnt : 0}, { off : 0, fid : 1, cnt : 0}, { off : 0, fid : 2, cnt : 0} ] ...