@@ -7,11 +7,23 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
77define i32 @linear_transform_with_default (i32 %x ) {
88; OPTNOLUT-LABEL: define i32 @linear_transform_with_default(
99; OPTNOLUT-SAME: i32 [[X:%.*]]) {
10- ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
11- ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 4
12- ; OPTNOLUT-NEXT: [[SWITCH_IDX_MULT:%.*]] = mul nsw i32 [[X]], 3
13- ; OPTNOLUT-NEXT: [[SWITCH_OFFSET:%.*]] = add nsw i32 [[SWITCH_IDX_MULT]], 1
14- ; OPTNOLUT-NEXT: [[IDX:%.*]] = select i1 [[TMP0]], i32 [[SWITCH_OFFSET]], i32 13
10+ ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
11+ ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[END:.*]] [
12+ ; OPTNOLUT-NEXT: i32 0, label %[[CASE0:.*]]
13+ ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
14+ ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
15+ ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
16+ ; OPTNOLUT-NEXT: ]
17+ ; OPTNOLUT: [[CASE0]]:
18+ ; OPTNOLUT-NEXT: br label %[[END]]
19+ ; OPTNOLUT: [[CASE1]]:
20+ ; OPTNOLUT-NEXT: br label %[[END]]
21+ ; OPTNOLUT: [[CASE2]]:
22+ ; OPTNOLUT-NEXT: br label %[[END]]
23+ ; OPTNOLUT: [[CASE3]]:
24+ ; OPTNOLUT-NEXT: br label %[[END]]
25+ ; OPTNOLUT: [[END]]:
26+ ; OPTNOLUT-NEXT: [[IDX:%.*]] = phi i32 [ 1, %[[CASE0]] ], [ 4, %[[CASE1]] ], [ 7, %[[CASE2]] ], [ 10, %[[CASE3]] ], [ 13, %[[ENTRY]] ]
1527; OPTNOLUT-NEXT: ret i32 [[IDX]]
1628;
1729; TTINOLUT-LABEL: define i32 @linear_transform_with_default(
@@ -126,8 +138,26 @@ end:
126138define i32 @linear_transform_no_default (i32 %x ) {
127139; OPTNOLUT-LABEL: define i32 @linear_transform_no_default(
128140; OPTNOLUT-SAME: i32 [[X:%.*]]) {
129- ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
130- ; OPTNOLUT-NEXT: [[SWITCH_IDX_MULT:%.*]] = mul nsw i32 [[X]], 3
141+ ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
142+ ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
143+ ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
144+ ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
145+ ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
146+ ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
147+ ; OPTNOLUT-NEXT: i32 4, label %[[CASE4:.*]]
148+ ; OPTNOLUT-NEXT: ]
149+ ; OPTNOLUT: [[CASE1]]:
150+ ; OPTNOLUT-NEXT: br label %[[END]]
151+ ; OPTNOLUT: [[CASE2]]:
152+ ; OPTNOLUT-NEXT: br label %[[END]]
153+ ; OPTNOLUT: [[CASE3]]:
154+ ; OPTNOLUT-NEXT: br label %[[END]]
155+ ; OPTNOLUT: [[CASE4]]:
156+ ; OPTNOLUT-NEXT: br label %[[END]]
157+ ; OPTNOLUT: [[DEFAULT]]:
158+ ; OPTNOLUT-NEXT: unreachable
159+ ; OPTNOLUT: [[END]]:
160+ ; OPTNOLUT-NEXT: [[SWITCH_IDX_MULT:%.*]] = phi i32 [ 3, %[[CASE1]] ], [ 6, %[[CASE2]] ], [ 9, %[[CASE3]] ], [ 12, %[[CASE4]] ], [ 0, %[[ENTRY]] ]
131161; OPTNOLUT-NEXT: ret i32 [[SWITCH_IDX_MULT]]
132162;
133163; TTINOLUT-LABEL: define i32 @linear_transform_no_default(
@@ -166,11 +196,23 @@ end:
166196define i4 @bitmap_no_default (i32 %x ) {
167197; OPTNOLUT-LABEL: define i4 @bitmap_no_default(
168198; OPTNOLUT-SAME: i32 [[X:%.*]]) {
169- ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
170- ; OPTNOLUT-NEXT: [[SWITCH_CAST:%.*]] = trunc i32 [[X]] to i16
171- ; OPTNOLUT-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul nuw nsw i16 [[SWITCH_CAST]], 4
172- ; OPTNOLUT-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i16 -31712, [[SWITCH_SHIFTAMT]]
173- ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = trunc i16 [[SWITCH_DOWNSHIFT]] to i4
199+ ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
200+ ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
201+ ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
202+ ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
203+ ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
204+ ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
205+ ; OPTNOLUT-NEXT: ]
206+ ; OPTNOLUT: [[CASE1]]:
207+ ; OPTNOLUT-NEXT: br label %[[END]]
208+ ; OPTNOLUT: [[CASE2]]:
209+ ; OPTNOLUT-NEXT: br label %[[END]]
210+ ; OPTNOLUT: [[CASE3]]:
211+ ; OPTNOLUT-NEXT: br label %[[END]]
212+ ; OPTNOLUT: [[DEFAULT]]:
213+ ; OPTNOLUT-NEXT: unreachable
214+ ; OPTNOLUT: [[END]]:
215+ ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = phi i4 [ 2, %[[CASE1]] ], [ 4, %[[CASE2]] ], [ -8, %[[CASE3]] ], [ 0, %[[ENTRY]] ]
174216; OPTNOLUT-NEXT: ret i4 [[SWITCH_MASKED]]
175217;
176218; TTINOLUT-LABEL: define i4 @bitmap_no_default(
@@ -209,13 +251,23 @@ end:
209251define i4 @bitmap_with_default (i32 %x ) {
210252; OPTNOLUT-LABEL: define i4 @bitmap_with_default(
211253; OPTNOLUT-SAME: i32 [[X:%.*]]) {
212- ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
213- ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 4
214- ; OPTNOLUT-NEXT: [[SWITCH_CAST:%.*]] = trunc i32 [[X]] to i16
215- ; OPTNOLUT-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul nuw nsw i16 [[SWITCH_CAST]], 4
216- ; OPTNOLUT-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i16 -31712, [[SWITCH_SHIFTAMT]]
217- ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = trunc i16 [[SWITCH_DOWNSHIFT]] to i4
218- ; OPTNOLUT-NEXT: [[IDX:%.*]] = select i1 [[TMP0]], i4 [[SWITCH_MASKED]], i4 -1
254+ ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
255+ ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
256+ ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
257+ ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
258+ ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
259+ ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
260+ ; OPTNOLUT-NEXT: ]
261+ ; OPTNOLUT: [[CASE1]]:
262+ ; OPTNOLUT-NEXT: br label %[[END]]
263+ ; OPTNOLUT: [[CASE2]]:
264+ ; OPTNOLUT-NEXT: br label %[[END]]
265+ ; OPTNOLUT: [[CASE3]]:
266+ ; OPTNOLUT-NEXT: br label %[[END]]
267+ ; OPTNOLUT: [[DEFAULT]]:
268+ ; OPTNOLUT-NEXT: br label %[[END]]
269+ ; OPTNOLUT: [[END]]:
270+ ; OPTNOLUT-NEXT: [[IDX:%.*]] = phi i4 [ 2, %[[CASE1]] ], [ 4, %[[CASE2]] ], [ -8, %[[CASE3]] ], [ -1, %[[DEFAULT]] ], [ 0, %[[ENTRY]] ]
219271; OPTNOLUT-NEXT: ret i4 [[IDX]]
220272;
221273; TTINOLUT-LABEL: define i4 @bitmap_with_default(
@@ -298,9 +350,18 @@ end:
298350define i32 @single_value_withdefault (i32 %x ) {
299351; OPTNOLUT-LABEL: define i32 @single_value_withdefault(
300352; OPTNOLUT-SAME: i32 [[X:%.*]]) {
301- ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
302- ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 5
303- ; OPTNOLUT-NEXT: [[DOT:%.*]] = select i1 [[TMP0]], i32 2, i32 3
353+ ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
354+ ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
355+ ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
356+ ; OPTNOLUT-NEXT: i32 1, label %[[END]]
357+ ; OPTNOLUT-NEXT: i32 2, label %[[END]]
358+ ; OPTNOLUT-NEXT: i32 3, label %[[END]]
359+ ; OPTNOLUT-NEXT: i32 4, label %[[END]]
360+ ; OPTNOLUT-NEXT: ]
361+ ; OPTNOLUT: [[DEFAULT]]:
362+ ; OPTNOLUT-NEXT: br label %[[END]]
363+ ; OPTNOLUT: [[END]]:
364+ ; OPTNOLUT-NEXT: [[DOT:%.*]] = phi i32 [ 3, %[[DEFAULT]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ]
304365; OPTNOLUT-NEXT: ret i32 [[DOT]]
305366;
306367; TTINOLUT-LABEL: define i32 @single_value_withdefault(
@@ -340,9 +401,18 @@ end:
340401define i32 @single_value_no_jump_tables (i32 %x ) "no-jump-tables" ="true" {
341402; OPTNOLUT-LABEL: define i32 @single_value_no_jump_tables(
342403; OPTNOLUT-SAME: i32 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
343- ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
344- ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 5
345- ; OPTNOLUT-NEXT: [[IDX:%.*]] = select i1 [[TMP0]], i32 2, i32 3
404+ ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
405+ ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
406+ ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
407+ ; OPTNOLUT-NEXT: i32 1, label %[[END]]
408+ ; OPTNOLUT-NEXT: i32 2, label %[[END]]
409+ ; OPTNOLUT-NEXT: i32 3, label %[[END]]
410+ ; OPTNOLUT-NEXT: i32 4, label %[[END]]
411+ ; OPTNOLUT-NEXT: ]
412+ ; OPTNOLUT: [[DEFAULT]]:
413+ ; OPTNOLUT-NEXT: br label %[[END]]
414+ ; OPTNOLUT: [[END]]:
415+ ; OPTNOLUT-NEXT: [[IDX:%.*]] = phi i32 [ 3, %[[DEFAULT]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ]
346416; OPTNOLUT-NEXT: ret i32 [[IDX]]
347417;
348418; TTINOLUT-LABEL: define i32 @single_value_no_jump_tables(
0 commit comments