xref: /llvm-project/llvm/test/CodeGen/AArch64/min-jump-table.ll (revision bdc0afc87181d4f7ab8aad2da6fa70a1204f0a84)
1; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=0 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK0  < %t
2; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=2 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK2  < %t
3; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=4 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK4  < %t
4; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=8 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK8  < %t
5; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=12 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK12  < %t
6; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK-DEFAULT  < %t
7
8declare void @ext(i32, i32)
9
10define i32 @jt2(i32 %a, i32 %b) {
11entry:
12  switch i32 %a, label %return [
13    i32 1, label %bb1
14    i32 3, label %bb2
15  ]
16; CHECK-LABEL: function jt2:
17; CHECK0-NEXT: Jump Tables:
18; CHECK2-NEXT: Jump Tables:
19; CHECK4-NOT: {{^}}Jump Tables:
20; CHECK8-NOT: {{^}}Jump Tables:
21; CHECK12-NOT: {{^}}Jump Tables:
22; CHECK-DEFAULT-NOT: {{^}}Jump Tables:
23
24bb1: tail call void @ext(i32 1, i32 0) br label %return
25bb2: tail call void @ext(i32 2, i32 2) br label %return
26
27return: ret i32 %b
28}
29
30define i32 @jt4(i32 %a, i32 %b) {
31entry:
32  switch i32 %a, label %return [
33    i32 1, label %bb1
34    i32 2, label %bb2
35    i32 3, label %bb3
36    i32 5, label %bb4
37  ]
38; CHECK-LABEL: function jt4:
39; CHECK0-NEXT: Jump Tables:
40; CHECK2-NEXT: Jump Tables:
41; CHECK4-NEXT: Jump Tables:
42; CHECK8-NOT: {{^}}Jump Tables:
43; CHECK12-NOT: {{^}}Jump Tables:
44; CHECK-DEFAULT-NOT: {{^}}Jump Tables:
45
46bb1: tail call void @ext(i32 1, i32 0) br label %return
47bb2: tail call void @ext(i32 3, i32 2) br label %return
48bb3: tail call void @ext(i32 4, i32 4) br label %return
49bb4: tail call void @ext(i32 5, i32 6) br label %return
50
51return: ret i32 %b
52}
53
54define i32 @jt8(i32 %a, i32 %b) {
55entry:
56  switch i32 %a, label %return [
57    i32 1, label %bb1
58    i32 2, label %bb2
59    i32 3, label %bb3
60    i32 4, label %bb4
61    i32 5, label %bb5
62    i32 6, label %bb6
63    i32 7, label %bb7
64    i32 9, label %bb8
65  ]
66; CHECK-LABEL: function jt8:
67; CHECK0-NEXT: Jump Tables:
68; CHECK2-NEXT: Jump Tables:
69; CHECK4-NEXT: Jump Tables:
70; CHECK8-NEXT: Jump Tables:
71; CHECK12-NOT: Jump Tables:
72; CHECK-DEFAULT-NOT: {{^}}Jump Tables:
73
74bb1: tail call void @ext(i32 1, i32 0) br label %return
75bb2: tail call void @ext(i32 2, i32 2) br label %return
76bb3: tail call void @ext(i32 3, i32 4) br label %return
77bb4: tail call void @ext(i32 4, i32 6) br label %return
78bb5: tail call void @ext(i32 5, i32 8) br label %return
79bb6: tail call void @ext(i32 6, i32 10) br label %return
80bb7: tail call void @ext(i32 7, i32 12) br label %return
81bb8: tail call void @ext(i32 8, i32 14) br label %return
82
83return: ret i32 %b
84}
85
86define i32 @jt12(i32 %a, i32 %b) {
87entry:
88  switch i32 %a, label %return [
89    i32 1, label %bb1
90    i32 2, label %bb2
91    i32 3, label %bb3
92    i32 4, label %bb4
93    i32 5, label %bb5
94    i32 6, label %bb6
95    i32 7, label %bb7
96    i32 8, label %bb8
97    i32 9, label %bb9
98    i32 10, label %bb10
99    i32 11, label %bb11
100    i32 12, label %bb12
101  ]
102; CHECK-LABEL: function jt12:
103; CHECK0-NEXT: Jump Tables:
104; CHECK2-NEXT: Jump Tables:
105; CHECK4-NEXT: Jump Tables:
106; CHECK8-NEXT: Jump Tables:
107; CHECK12-NEXT: Jump Tables:
108; CHECK-DEFAULT-NOT: {{^}}Jump Tables:
109
110bb1: tail call void @ext(i32 1, i32 0) br label %return
111bb2: tail call void @ext(i32 2, i32 2) br label %return
112bb3: tail call void @ext(i32 3, i32 4) br label %return
113bb4: tail call void @ext(i32 4, i32 6) br label %return
114bb5: tail call void @ext(i32 5, i32 8) br label %return
115bb6: tail call void @ext(i32 6, i32 10) br label %return
116bb7: tail call void @ext(i32 7, i32 12) br label %return
117bb8: tail call void @ext(i32 8, i32 14) br label %return
118bb9: tail call void @ext(i32 9, i32 16) br label %return
119bb10: tail call void @ext(i32 10, i32 18) br label %return
120bb11: tail call void @ext(i32 11, i32 20) br label %return
121bb12: tail call void @ext(i32 12, i32 22) br label %return
122
123return: ret i32 %b
124}
125
126define i32 @jt12_min_size(i32 %a, i32 %b) minsize {
127entry:
128  switch i32 %a, label %return [
129    i32 1, label %bb1
130    i32 2, label %bb2
131    i32 3, label %bb3
132    i32 4, label %bb4
133    i32 5, label %bb5
134    i32 6, label %bb6
135    i32 7, label %bb7
136    i32 8, label %bb8
137    i32 9, label %bb9
138    i32 10, label %bb10
139    i32 11, label %bb11
140    i32 12, label %bb12
141  ]
142; CHECK-LABEL: function jt12_min_size:
143; CHECK0-NEXT: Jump Tables:
144; CHECK2-NEXT: Jump Tables:
145; CHECK4-NEXT: Jump Tables:
146; CHECK8-NEXT: Jump Tables:
147; CHECK12-NEXT: Jump Tables:
148; CHECK-DEFAULT: Jump Tables:
149
150bb1: tail call void @ext(i32 1, i32 0) br label %return
151bb2: tail call void @ext(i32 2, i32 2) br label %return
152bb3: tail call void @ext(i32 3, i32 4) br label %return
153bb4: tail call void @ext(i32 4, i32 6) br label %return
154bb5: tail call void @ext(i32 5, i32 8) br label %return
155bb6: tail call void @ext(i32 6, i32 10) br label %return
156bb7: tail call void @ext(i32 7, i32 12) br label %return
157bb8: tail call void @ext(i32 8, i32 14) br label %return
158bb9: tail call void @ext(i32 9, i32 16) br label %return
159bb10: tail call void @ext(i32 10, i32 18) br label %return
160bb11: tail call void @ext(i32 11, i32 20) br label %return
161bb12: tail call void @ext(i32 12, i32 22) br label %return
162
163return: ret i32 %b
164}
165
166define i32 @jt13(i32 %a, i32 %b) {
167entry:
168  switch i32 %a, label %return [
169    i32 1, label %bb1
170    i32 2, label %bb2
171    i32 3, label %bb3
172    i32 4, label %bb4
173    i32 5, label %bb5
174    i32 6, label %bb6
175    i32 7, label %bb7
176    i32 8, label %bb8
177    i32 9, label %bb9
178    i32 10, label %bb10
179    i32 11, label %bb11
180    i32 12, label %bb12
181    i32 13, label %bb13
182  ]
183; CHECK-LABEL: function jt13:
184; CHECK-NEXT: Jump Tables:
185
186bb1: tail call void @ext(i32 1, i32 0) br label %return
187bb2: tail call void @ext(i32 2, i32 2) br label %return
188bb3: tail call void @ext(i32 3, i32 4) br label %return
189bb4: tail call void @ext(i32 4, i32 6) br label %return
190bb5: tail call void @ext(i32 5, i32 8) br label %return
191bb6: tail call void @ext(i32 6, i32 10) br label %return
192bb7: tail call void @ext(i32 7, i32 12) br label %return
193bb8: tail call void @ext(i32 8, i32 14) br label %return
194bb9: tail call void @ext(i32 9, i32 16) br label %return
195bb10: tail call void @ext(i32 10, i32 18) br label %return
196bb11: tail call void @ext(i32 11, i32 20) br label %return
197bb12: tail call void @ext(i32 12, i32 22) br label %return
198bb13: tail call void @ext(i32 13, i32 24) br label %return
199
200return: ret i32 %b
201}
202