[BOLT][TEST] Import small tests

Summary:
Imported small internal tests:
- fallthrough-to-noop.test

(cherry picked from FBD32158100)
This commit is contained in:
Amir Ayupov 2021-11-03 17:09:49 -07:00 committed by Maksim Panchenko
parent d1df113e30
commit 2e0ad6ffe4
5 changed files with 90 additions and 0 deletions

View File

@ -0,0 +1,60 @@
.file "ft_to_noop.s"
.text
.globl foo
.type foo, @function
foo:
LFB0:
# FDATA: 0 [unknown] 0 1 foo 0 0 20
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl %edi, -20(%rbp)
movl $0, -4(%rbp)
cmpl $10, -20(%rbp)
LBB00_br:
jle L2
nop
# FDATA: 1 foo #LBB00_br# 1 foo #L2# 0 18
# FDATA: 1 foo #LBB00_br# 1 foo #LFT0# 0 3
LFT0:
movl -20(%rbp), %eax
addl $1, %eax
movl %eax, -4(%rbp)
L2:
addl $1, -4(%rbp)
movl -4(%rbp), %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
LFE0:
.size foo, .-foo
.globl main
.type main, @function
main:
LFB1:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl %edi, -4(%rbp)
movq %rsi, -16(%rbp)
movl -4(%rbp), %eax
movl %eax, %edi
call foo
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
LFE1:
.size main, .-main

View File

@ -0,0 +1,30 @@
# Check that profile data for the fall-through jump is not ingored when there is
# a conditional jump followed by a no-op.
RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown \
RUN: %S/Inputs/ft_to_noop.s -o %t.o
RUN: link_fdata %S/Inputs/ft_to_noop.s %t.o %t.fdata
RUN: llvm-strip --strip-unneeded %t.o
RUN: %clang %t.o -o %t.exe -Wl,-q
RUN: llvm-bolt %t.exe -o %t -data %t.fdata \
RUN: -print-cfg -sequential-disassembly 2>&1 | FileCheck %s
CHECK: Binary Function "foo" after building cfg
CHECK: Exec Count : 20
CHECK: Profile Acc : 100.0%
# This block is terminated with a conditional jump to .Ltmp0 followed by a
# no-op. The profile data contains a count for the fall-through (3) which
# is different from what would be inferred (2). However the destination
# offset of this fall-through jump in the profile data points to the no-op
# following the jump and not the start of the fall-through block .LFT0.
CHECK: Entry Point
CHECK-NEXT: Exec Count : 20
CHECK: Successors: .Ltmp[[#BB1:]] (mispreds: 0, count: 18), .LFT[[#BB2:]] (mispreds: 0, count: 3)
CHECK: .LFT[[#BB2]]
CHECK-NEXT: Exec Count : 3
CHECK: Successors: .Ltmp[[#]] (mispreds: 0, count: 0)
CHECK: .Ltmp[[#BB1]]
CHECK-NEXT: Exec Count : 18