| ## This reproduces issue 20 from our github repo |
| ## "BOLT crashes when removing unreachable BBs that are a target |
| ## in a JT" |
| |
| # REQUIRES: system-linux |
| |
| # RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown \ |
| # RUN: %s -o %t.o |
| # RUN: %clang %cflags -no-pie %t.o -o %t.exe |
| # RUN: llvm-bolt %t.exe --relocs=0 --jump-tables=move --print-finalized \ |
| # RUN: -o %t.out | FileCheck %s |
| |
| # CHECK-NOT: BOLT-INFO: UCE removed {{.*}} blocks and {{.*}} bytes of code |
| # CHECK: Binary Function "main" |
| # CHECK: .LFT{{.*}} (2 instructions, align : 1) |
| # CHECK-NEXT: 00000004: andq |
| # CHECK-NEXT: 00000008: jmpq |
| # CHECK-NEXT: Successors: .Ltmp{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}}, .Ltmp{{.*}} |
| |
| |
| .text |
| .globl main |
| .type main, %function |
| .size main, .Lend1-main |
| main: |
| xorq %rax, %rax |
| retq |
| andq $3, %rdi |
| jmpq *jumptbl(,%rdi,8) |
| |
| .Lbb1: |
| movl $0x1, %eax |
| jmp .Lexit |
| .Lbb2: |
| movl $0x2, %eax |
| jmp .Lexit |
| .Lbb3: |
| movl $0x3, %eax |
| jmp .Lexit |
| .Lbb4: |
| movl $0x4, %eax |
| .Lexit: |
| retq |
| .Lend1: |
| |
| .section .rodata |
| .globl jumptbl |
| jumptbl: |
| .quad .Lbb1 |
| .quad .Lbb2 |
| .quad .Lbb3 |
| .quad .Lbb4 |