blob: b029e664a1e12493b38abd933a66a4ba1e44d2e1 [file] [log] [blame]
Sriraman Tallam94317872020-04-07 13:48:181# REQUIRES: x86
Sriraman Tallamca6b6d42020-07-31 18:14:492## basic-block-sections tests.
Sriraman Tallam94317872020-04-07 13:48:183## 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