xref: /llvm-project/bolt/test/X86/profile-passthrough-block.test (revision b06f97b039b3a4f2397281609069b2aaad86dd59)
1*b06f97b0SAmir Ayupov## Test YAMLProfileReader support for pass-through blocks in non-matching edges:
2*b06f97b0SAmir Ayupov## match the profile edge A -> C to the CFG with blocks A -> B -> C.
3*b06f97b0SAmir Ayupov
4*b06f97b0SAmir Ayupov# REQUIRES: system-linux
5*b06f97b0SAmir Ayupov# RUN: split-file %s %t
6*b06f97b0SAmir Ayupov# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %t/main.s -o %t.o
7*b06f97b0SAmir Ayupov# RUN: %clang %cflags %t.o -o %t.exe -Wl,-q -nostdlib
8*b06f97b0SAmir Ayupov# RUN: llvm-bolt %t.exe -o %t.out --data %t/yaml --profile-ignore-hash -v=1 \
9*b06f97b0SAmir Ayupov# RUN:   --print-cfg 2>&1 | FileCheck %s
10*b06f97b0SAmir Ayupov
11*b06f97b0SAmir Ayupov# CHECK: Binary Function "main" after building cfg
12*b06f97b0SAmir Ayupov# CHECK: Profile Acc : 100.0%
13*b06f97b0SAmir Ayupov# CHECK-NOT: BOLT-WARNING: no successor for block .LFT0 that matches index 3 or block .Ltmp0
14*b06f97b0SAmir Ayupov
15*b06f97b0SAmir Ayupov#--- main.s
16*b06f97b0SAmir Ayupov.globl main
17*b06f97b0SAmir Ayupov.type	main, @function
18*b06f97b0SAmir Ayupovmain:
19*b06f97b0SAmir Ayupov  .cfi_startproc
20*b06f97b0SAmir Ayupov.LBB00:
21*b06f97b0SAmir Ayupov  pushq   %rbp
22*b06f97b0SAmir Ayupov  movq    %rsp, %rbp
23*b06f97b0SAmir Ayupov  subq    $16, %rsp
24*b06f97b0SAmir Ayupov  testq   %rax, %rax
25*b06f97b0SAmir Ayupov  js      .LBB03
26*b06f97b0SAmir Ayupov.LBB01:
27*b06f97b0SAmir Ayupov  jne     .LBB04
28*b06f97b0SAmir Ayupov.LBB02:
29*b06f97b0SAmir Ayupov  nop
30*b06f97b0SAmir Ayupov.LBB03:
31*b06f97b0SAmir Ayupov  xorl    %eax, %eax
32*b06f97b0SAmir Ayupov  addq    $16, %rsp
33*b06f97b0SAmir Ayupov  popq    %rbp
34*b06f97b0SAmir Ayupov  retq
35*b06f97b0SAmir Ayupov.LBB04:
36*b06f97b0SAmir Ayupov  xorl    %eax, %eax
37*b06f97b0SAmir Ayupov  addq    $16, %rsp
38*b06f97b0SAmir Ayupov  popq    %rbp
39*b06f97b0SAmir Ayupov  retq
40*b06f97b0SAmir Ayupov## For relocations against .text
41*b06f97b0SAmir Ayupov.LBB05:
42*b06f97b0SAmir Ayupov  call exit
43*b06f97b0SAmir Ayupov  .cfi_endproc
44*b06f97b0SAmir Ayupov  .size	main, .-main
45*b06f97b0SAmir Ayupov
46*b06f97b0SAmir Ayupov#--- yaml
47*b06f97b0SAmir Ayupov---
48*b06f97b0SAmir Ayupovheader:
49*b06f97b0SAmir Ayupov  profile-version: 1
50*b06f97b0SAmir Ayupov  binary-name:     'profile-passthrough-block.s.tmp.exe'
51*b06f97b0SAmir Ayupov  binary-build-id: '<unknown>'
52*b06f97b0SAmir Ayupov  profile-flags:   [ lbr ]
53*b06f97b0SAmir Ayupov  profile-origin:  branch profile reader
54*b06f97b0SAmir Ayupov  profile-events:  ''
55*b06f97b0SAmir Ayupov  dfs-order:       false
56*b06f97b0SAmir Ayupov  hash-func:       xxh3
57*b06f97b0SAmir Ayupovfunctions:
58*b06f97b0SAmir Ayupov  - name:            main
59*b06f97b0SAmir Ayupov    fid:             0
60*b06f97b0SAmir Ayupov    hash:            0x0000000000000000
61*b06f97b0SAmir Ayupov    exec:            1
62*b06f97b0SAmir Ayupov    nblocks:         6
63*b06f97b0SAmir Ayupov    blocks:
64*b06f97b0SAmir Ayupov      - bid:             1
65*b06f97b0SAmir Ayupov        insns:           1
66*b06f97b0SAmir Ayupov        succ:            [ { bid: 3, cnt: 1} ]
67*b06f97b0SAmir Ayupov...
68