1# REQUIRES: x86 2## basic-block-sections tests. 3## This simple test checks if redundant direct jumps are converted to 4## implicit fallthrus. The jcc's must be converted to their inverted 5## opcode, for instance jne to je and jmp must be deleted. 6 7# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o 8# RUN: ld.lld --optimize-bb-jumps %t.o -o %t.out 9# RUN: llvm-objdump -d %t.out| FileCheck %s 10 11# CHECK: <foo>: 12# CHECK-NEXT: nopl (%rax) 13# CHECK-NEXT: jne 0x{{[[:xdigit:]]+}} <r.BB.foo> 14# CHECK-NOT: jmp 15 16 17.section .text,"ax",@progbits 18.type foo,@function 19foo: 20 nopl (%rax) 21 je a.BB.foo 22 jmp r.BB.foo 23 24# CHECK: <a.BB.foo>: 25# CHECK-NEXT: nopl (%rax) 26# CHECK-NEXT: je 0x{{[[:xdigit:]]+}} <r.BB.foo> 27# CHECK-NOT: jmp 28 29.section .text,"ax",@progbits,unique,3 30a.BB.foo: 31 nopl (%rax) 32 jne aa.BB.foo 33 jmp r.BB.foo 34 35# CHECK: <aa.BB.foo>: 36# CHECK-NEXT: nopl (%rax) 37# CHECK-NEXT: jle 0x{{[[:xdigit:]]+}} <r.BB.foo> 38# CHECK-NOT: jmp 39# 40.section .text,"ax",@progbits,unique,4 41aa.BB.foo: 42 nopl (%rax) 43 jg aaa.BB.foo 44 jmp r.BB.foo 45 46# CHECK: <aaa.BB.foo>: 47# CHECK-NEXT: nopl (%rax) 48# CHECK-NEXT: jl 0x{{[[:xdigit:]]+}} <r.BB.foo> 49# CHECK-NOT: jmp 50# 51.section .text,"ax",@progbits,unique,5 52aaa.BB.foo: 53 nopl (%rax) 54 jge aaaa.BB.foo 55 jmp r.BB.foo 56 57# CHECK: <aaaa.BB.foo>: 58# CHECK-NEXT: nopl (%rax) 59# CHECK-NEXT: jae 0x{{[[:xdigit:]]+}} <r.BB.foo> 60# CHECK-NOT: jmp 61# 62.section .text,"ax",@progbits,unique,6 63aaaa.BB.foo: 64 nopl (%rax) 65 jb aaaaa.BB.foo 66 jmp r.BB.foo 67 68# CHECK: <aaaaa.BB.foo>: 69# CHECK-NEXT: nopl (%rax) 70# CHECK-NEXT: ja 0x{{[[:xdigit:]]+}} <r.BB.foo> 71# CHECK-NOT: jmp 72# 73.section .text,"ax",@progbits,unique,7 74aaaaa.BB.foo: 75 nopl (%rax) 76 jbe aaaaaa.BB.foo 77 jmp r.BB.foo 78 79# CHECK: <aaaaaa.BB.foo>: 80# CHECK-NEXT: nopl (%rax) 81# CHECK-NEXT: jge 0x{{[[:xdigit:]]+}} <r.BB.foo> 82# CHECK-NOT: jmp 83# 84.section .text,"ax",@progbits,unique,8 85aaaaaa.BB.foo: 86 nopl (%rax) 87 jl aaaaaaa.BB.foo 88 jmp r.BB.foo 89 90# CHECK: <aaaaaaa.BB.foo>: 91# CHECK-NEXT: nopl (%rax) 92# CHECK-NEXT: jg 0x{{[[:xdigit:]]+}} <r.BB.foo> 93# CHECK-NOT: jmp 94# 95.section .text,"ax",@progbits,unique,9 96aaaaaaa.BB.foo: 97 nopl (%rax) 98 jle aaaaaaaa.BB.foo 99 jmp r.BB.foo 100 101# CHECK: <aaaaaaaa.BB.foo>: 102# CHECK-NEXT: nopl (%rax) 103# CHECK-NEXT: jbe 0x{{[[:xdigit:]]+}} <r.BB.foo> 104# CHECK-NOT: jmp 105# 106.section .text,"ax",@progbits,unique,10 107aaaaaaaa.BB.foo: 108 nopl (%rax) 109 ja aaaaaaaaa.BB.foo 110 jmp r.BB.foo 111 112# CHECK: <aaaaaaaaa.BB.foo>: 113# CHECK-NEXT: nopl (%rax) 114# CHECK-NEXT: jb 0x{{[[:xdigit:]]+}} <r.BB.foo> 115# CHECK-NOT: jmp 116# 117.section .text,"ax",@progbits,unique,11 118aaaaaaaaa.BB.foo: 119 nopl (%rax) 120 jae aaaaaaaaaa.BB.foo 121 jmp r.BB.foo 122 123.section .text,"ax",@progbits,unique,20 124aaaaaaaaaa.BB.foo: 125 nopl (%rax) 126 127r.BB.foo: 128 ret 129