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