129 lines · plain
1# REQUIRES: x862## basic-block-sections tests.3## This simple test checks if redundant direct jumps are converted to4## implicit fallthrus. The jcc's must be converted to their inverted5## opcode, for instance jne to je and jmp must be deleted.6 7# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o8# RUN: ld.lld --optimize-bb-jumps %t.o -o %t.out9# RUN: llvm-objdump -d %t.out| FileCheck %s10 11# CHECK: <foo>:12# CHECK-NEXT: nopl (%rax)13# CHECK-NEXT: jne 0x{{[[:xdigit:]]+}} <r.BB.foo>14# CHECK-NOT: jmp15 16 17.section .text,"ax",@progbits18.type foo,@function19foo:20 nopl (%rax)21 je a.BB.foo22 jmp r.BB.foo23 24# CHECK: <a.BB.foo>:25# CHECK-NEXT: nopl (%rax)26# CHECK-NEXT: je 0x{{[[:xdigit:]]+}} <r.BB.foo>27# CHECK-NOT: jmp28 29.section .text,"ax",@progbits,unique,330a.BB.foo:31 nopl (%rax)32 jne aa.BB.foo33 jmp r.BB.foo34 35# CHECK: <aa.BB.foo>:36# CHECK-NEXT: nopl (%rax)37# CHECK-NEXT: jle 0x{{[[:xdigit:]]+}} <r.BB.foo>38# CHECK-NOT: jmp39#40.section .text,"ax",@progbits,unique,441aa.BB.foo:42 nopl (%rax)43 jg aaa.BB.foo44 jmp r.BB.foo45 46# CHECK: <aaa.BB.foo>:47# CHECK-NEXT: nopl (%rax)48# CHECK-NEXT: jl 0x{{[[:xdigit:]]+}} <r.BB.foo>49# CHECK-NOT: jmp50#51.section .text,"ax",@progbits,unique,552aaa.BB.foo:53 nopl (%rax)54 jge aaaa.BB.foo55 jmp r.BB.foo56 57# CHECK: <aaaa.BB.foo>:58# CHECK-NEXT: nopl (%rax)59# CHECK-NEXT: jae 0x{{[[:xdigit:]]+}} <r.BB.foo>60# CHECK-NOT: jmp61#62.section .text,"ax",@progbits,unique,663aaaa.BB.foo:64 nopl (%rax)65 jb aaaaa.BB.foo66 jmp r.BB.foo67 68# CHECK: <aaaaa.BB.foo>:69# CHECK-NEXT: nopl (%rax)70# CHECK-NEXT: ja 0x{{[[:xdigit:]]+}} <r.BB.foo>71# CHECK-NOT: jmp72#73.section .text,"ax",@progbits,unique,774aaaaa.BB.foo:75 nopl (%rax)76 jbe aaaaaa.BB.foo77 jmp r.BB.foo78 79# CHECK: <aaaaaa.BB.foo>:80# CHECK-NEXT: nopl (%rax)81# CHECK-NEXT: jge 0x{{[[:xdigit:]]+}} <r.BB.foo>82# CHECK-NOT: jmp83#84.section .text,"ax",@progbits,unique,885aaaaaa.BB.foo:86 nopl (%rax)87 jl aaaaaaa.BB.foo88 jmp r.BB.foo89 90# CHECK: <aaaaaaa.BB.foo>:91# CHECK-NEXT: nopl (%rax)92# CHECK-NEXT: jg 0x{{[[:xdigit:]]+}} <r.BB.foo>93# CHECK-NOT: jmp94#95.section .text,"ax",@progbits,unique,996aaaaaaa.BB.foo:97 nopl (%rax)98 jle aaaaaaaa.BB.foo99 jmp r.BB.foo100 101# CHECK: <aaaaaaaa.BB.foo>:102# CHECK-NEXT: nopl (%rax)103# CHECK-NEXT: jbe 0x{{[[:xdigit:]]+}} <r.BB.foo>104# CHECK-NOT: jmp105#106.section .text,"ax",@progbits,unique,10107aaaaaaaa.BB.foo:108 nopl (%rax)109 ja aaaaaaaaa.BB.foo110 jmp r.BB.foo111 112# CHECK: <aaaaaaaaa.BB.foo>:113# CHECK-NEXT: nopl (%rax)114# CHECK-NEXT: jb 0x{{[[:xdigit:]]+}} <r.BB.foo>115# CHECK-NOT: jmp116#117.section .text,"ax",@progbits,unique,11118aaaaaaaaa.BB.foo:119 nopl (%rax)120 jae aaaaaaaaaa.BB.foo121 jmp r.BB.foo122 123.section .text,"ax",@progbits,unique,20124aaaaaaaaaa.BB.foo:125 nopl (%rax)126 127r.BB.foo:128 ret129