forked from OSchip/llvm-project
[BOLT][TEST] Import small tests
Summary: Imported small internal tests. (cherry picked from FBD32405870)
This commit is contained in:
parent
7ea61dab03
commit
1d0a276c72
|
@ -0,0 +1,5 @@
|
|||
_start
|
||||
main
|
||||
_a
|
||||
_b
|
||||
_f
|
|
@ -0,0 +1,12 @@
|
|||
.text
|
||||
.globl foo
|
||||
.type foo, @function
|
||||
foo:
|
||||
movabs $0x1111,%rax
|
||||
movabs $0x1111,%rax
|
||||
movabs $0x11112222,%rax
|
||||
movabs $0x111112222,%rax
|
||||
movabs $0xffffffffffffffff,%rax
|
||||
movabs $0x7fffffffffffffff,%rax
|
||||
ret
|
||||
.size foo, .-foo
|
|
@ -0,0 +1,17 @@
|
|||
.globl main
|
||||
main:
|
||||
|
||||
.globl foo
|
||||
foo:
|
||||
.cfi_startproc
|
||||
jmpq *%rax
|
||||
.cfi_endproc
|
||||
|
||||
.globl bar
|
||||
bar:
|
||||
.cfi_startproc
|
||||
jmp moo
|
||||
.cfi_endproc
|
||||
|
||||
.globl moo
|
||||
moo:
|
|
@ -0,0 +1,85 @@
|
|||
.globl bar
|
||||
bar:
|
||||
movq $0, (%rbp)
|
||||
movl $4, %edi
|
||||
call __cxa_allocate_exception
|
||||
movl $0, (%rax)
|
||||
movl $0, %edx
|
||||
movl $_ZTIi, %esi
|
||||
movq %rax, %rdi
|
||||
call __cxa_throw
|
||||
movq $17, 8
|
||||
|
||||
.globl foo
|
||||
foo:
|
||||
.LFB1:
|
||||
.cfi_startproc
|
||||
.cfi_personality 0x3,__gxx_personality_v0
|
||||
.cfi_lsda 0x3,.LLSDA1
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
pushq %rbx
|
||||
subq $24, %rsp
|
||||
movq %rdi, -24(%rbp)
|
||||
incq -24(%rbp)
|
||||
jmp .L1
|
||||
decq (%rbp)
|
||||
.L1: incq -24(%rbp)
|
||||
cmpq $2,-24(%rbp)
|
||||
jne .L3
|
||||
jmp .L4
|
||||
decq (%rbp)
|
||||
.L3: incq -24(%rbp)
|
||||
.L4: incq -24(%rbp)
|
||||
movq -24(%rbp), %rax
|
||||
movq %rax, %rdi
|
||||
.LEHB0:
|
||||
call bar
|
||||
.LEHE0:
|
||||
movq %rax, %rbx
|
||||
.L5:
|
||||
movq %rbx, %rax
|
||||
jmp .L8
|
||||
.L7:
|
||||
movq %rax, %rdi
|
||||
call __cxa_begin_catch
|
||||
incq -24(%rbp)
|
||||
jmp .LP1
|
||||
decq (%rbp)
|
||||
.LP1: incq -24(%rbp)
|
||||
cmpq $2,-24(%rbp)
|
||||
jne .LP2
|
||||
jmp .LP3
|
||||
decq (%rbp)
|
||||
.LP2: incq -24(%rbp)
|
||||
.LP3: incq -24(%rbp)
|
||||
movq -24(%rbp), %rbx
|
||||
.LEHB1:
|
||||
call __cxa_end_catch
|
||||
.LEHE1:
|
||||
jmp .L5
|
||||
.L8:
|
||||
movq -8(%rbp), %rbx
|
||||
leave
|
||||
.cfi_endproc
|
||||
|
||||
.section .gcc_except_table,"a",@progbits
|
||||
.LLSDA1:
|
||||
.byte 0xff
|
||||
.byte 0x3
|
||||
.uleb128 .LLSDATT1-.LLSDATTD1
|
||||
.LLSDATTD1:
|
||||
.byte 0x1
|
||||
.uleb128 .LLSDACSE1-.LLSDACSB1
|
||||
.LLSDACSB1:
|
||||
.uleb128 .LEHB0-.LFB1
|
||||
.uleb128 .LEHE0-.LEHB0
|
||||
.uleb128 .L7-.LFB1
|
||||
.uleb128 0x1
|
||||
.LLSDACSE1:
|
||||
.LLSDATT1:
|
||||
.text
|
||||
.globl main, function
|
||||
main:
|
||||
.cfi_startproc
|
||||
.cfi_endproc
|
|
@ -0,0 +1,44 @@
|
|||
.type _a, @function
|
||||
_a:
|
||||
.cfi_startproc
|
||||
test %edx, %edx
|
||||
.cfi_endproc
|
||||
|
||||
.globl _b
|
||||
.type _b, @function
|
||||
_b:
|
||||
.cfi_startproc
|
||||
jnz a
|
||||
.cfi_endproc
|
||||
|
||||
.globl _f
|
||||
.type _f, @function
|
||||
_f:
|
||||
.cfi_startproc
|
||||
mov %rdx, %rcx
|
||||
a:
|
||||
mov 0, %r9
|
||||
|
||||
.globl _e
|
||||
.type _e, @function
|
||||
_e:
|
||||
|
||||
.globl _d
|
||||
.type _d, @function
|
||||
_d:
|
||||
|
||||
.globl _c
|
||||
.type _c, @function
|
||||
_c:
|
||||
movdqu 0, %xmm3
|
||||
.cfi_endproc
|
||||
|
||||
.globl main
|
||||
.type main, @function
|
||||
main:
|
||||
nop
|
||||
|
||||
.globl _start
|
||||
.type _start, @function
|
||||
_start:
|
||||
jmp main
|
|
@ -0,0 +1,14 @@
|
|||
# Test that 64 bit movq instructions with immediate operands
|
||||
# that fit in 32 bits are shortened.
|
||||
|
||||
RUN: %clang %p/Inputs/asm_main.c %p/Inputs/shorten_mov.s -o %t.exe
|
||||
RUN: llvm-bolt %t.exe -peepholes=shorten -o %t
|
||||
RUN: llvm-objdump -d %t --print-imm-hex | FileCheck %s
|
||||
|
||||
CHECK: <foo>:
|
||||
CHECK-NEXT: 48 c7 c0 11 11 00 00 movq $0x1111, %rax
|
||||
CHECK-NEXT: 48 c7 c0 11 11 00 00 movq $0x1111, %rax
|
||||
CHECK-NEXT: 48 c7 c0 22 22 11 11 movq $0x11112222, %rax
|
||||
CHECK-NEXT: 48 b8 22 22 11 11 01 00 00 00 movabsq $0x111112222, %rax
|
||||
CHECK-NEXT: 48 c7 c0 ff ff ff ff movq $-0x1, %rax
|
||||
CHECK-NEXT: 48 b8 ff ff ff ff ff ff ff 7f movabsq $0x7fffffffffffffff, %rax
|
|
@ -0,0 +1,17 @@
|
|||
# Check that secondary entry points are updated correctly in the ELF symtab
|
||||
|
||||
RUN: %clang %p/Inputs/user-order.S -Wl,-q -o %t.exe -nostdlib
|
||||
RUN: llvm-bolt %t.exe -o %t -reorder-functions=user \
|
||||
RUN: -function-order=%p/Inputs/order.txt
|
||||
|
||||
RUN: llvm-readelf -Ws %t | cut -d':' -f2- | sort -u | FileCheck %s
|
||||
|
||||
CHECK: [[#]] FUNC GLOBAL DEFAULT [[#NDX:]] _start
|
||||
CHECK: [[#]] FUNC GLOBAL DEFAULT [[#NDX]] main
|
||||
CHECK: [[#]] FUNC LOCAL DEFAULT [[#NDX]] _a
|
||||
CHECK: [[#]] FUNC GLOBAL DEFAULT [[#NDX]] _b
|
||||
CHECK: [[#]] FUNC GLOBAL DEFAULT [[#NDX]] _f
|
||||
# The following are all secondary entries of _f
|
||||
CHECK: 0 FUNC GLOBAL DEFAULT [[#NDX]] _c
|
||||
CHECK: 0 FUNC GLOBAL DEFAULT [[#NDX]] _d
|
||||
CHECK: 0 FUNC GLOBAL DEFAULT [[#NDX]] _e
|
|
@ -0,0 +1,14 @@
|
|||
# Tests the peephole that adds trap instructions following indirect tail calls.
|
||||
|
||||
RUN: %clang %p/Inputs/tailcall_traps.s -o %t.exe
|
||||
RUN: llvm-bolt %t.exe -o %t -peepholes=tailcall-traps \
|
||||
RUN: -print-peepholes -funcs=foo,bar 2>&1 | FileCheck %s
|
||||
|
||||
CHECK: Binary Function "foo"
|
||||
CHECK: jmpl *%rax # TAILCALL
|
||||
CHECK: ud2
|
||||
CHECK: End of Function "foo"
|
||||
|
||||
CHECK: Binary Function "bar"
|
||||
CHECK: jmp moo # TAILCALL
|
||||
CHECK: End of Function "bar"
|
|
@ -0,0 +1,46 @@
|
|||
# Check unreachable code elimination
|
||||
|
||||
RUN: %clangxx %p/Inputs/unreachable.s -o %t.exe
|
||||
RUN: llvm-bolt %t.exe -o %t \
|
||||
RUN: -reorder-blocks=none -split-functions=1 -eliminate-unreachable \
|
||||
RUN: -funcs=foo -use-gnu-stack -print-cfg -print-finalized \
|
||||
RUN: | FileCheck %s --check-prefix=BOLT
|
||||
RUN: llvm-objdump -d %t --print-imm-hex --disassemble-symbols=foo \
|
||||
RUN: --no-show-raw-insn | FileCheck %s
|
||||
|
||||
BOLT: BB Layout : .LBB{{.*}}, .LFT{{.*}}, .Ltmp{{.*}}, .LFT{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .LLP{{.*}}, .LFT{{.*}}, .Ltmp{{.*}}, .LFT{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}
|
||||
BOLT: BOLT-INFO: UCE removed 4 blocks and 16 bytes of code.
|
||||
BOLT: BB Layout : .LBB{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .LLP{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}
|
||||
|
||||
CHECK: <foo>:
|
||||
CHECK-NEXT: pushq %rbp
|
||||
CHECK-NEXT: movq %rsp, %rbp
|
||||
CHECK-NEXT: pushq %rbx
|
||||
CHECK-NEXT: subq $0x18, %rsp
|
||||
CHECK-NEXT: movq %rdi, -0x18(%rbp)
|
||||
CHECK-NEXT: incq -0x18(%rbp)
|
||||
CHECK-NEXT: incq -0x18(%rbp)
|
||||
CHECK-NEXT: cmpq $0x2, -0x18(%rbp)
|
||||
CHECK-NEXT: je 0x[[#%x,JMP1:]]
|
||||
CHECK-NEXT: incq -0x18(%rbp)
|
||||
CHECK-NEXT: [[#JMP1]]: incq -0x18(%rbp)
|
||||
CHECK-NEXT: movq -0x18(%rbp), %rax
|
||||
CHECK-NEXT: movq %rax, %rdi
|
||||
CHECK-NEXT: callq {{.*}} <bar>
|
||||
CHECK-NEXT: movq %rax, %rbx
|
||||
CHECK-NEXT: [[#%x,JMP3:]]: movq %rbx, %rax
|
||||
CHECK-NEXT: jmp {{.*}}
|
||||
CHECK-NEXT: movq %rax, %rdi
|
||||
CHECK-NEXT: callq {{.*}} <__cxa_begin_catch@plt>
|
||||
CHECK-NEXT: incq -0x18(%rbp)
|
||||
CHECK-NEXT: incq -0x18(%rbp)
|
||||
CHECK-NEXT: cmpq $0x2, -0x18(%rbp)
|
||||
CHECK-NEXT: je 0x[[#%x,JMP2:]]
|
||||
CHECK-NEXT: incq -0x18(%rbp)
|
||||
CHECK-NEXT: [[#JMP2]]: incq -0x18(%rbp)
|
||||
CHECK-NEXT: movq -0x18(%rbp), %rbx
|
||||
CHECK-NEXT: callq {{.*}} <__cxa_end_catch@plt>
|
||||
CHECK-NEXT: jmp 0x[[#JMP3]]
|
||||
CHECK-NEXT: movq -0x8(%rbp), %rbx
|
||||
CHECK-NEXT: leave
|
||||
CHECK-NEXT: retq
|
Loading…
Reference in New Issue