@@ -7,23 +7,11 @@ 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: 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]] ]
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
2715; OPTNOLUT-NEXT: ret i32 [[IDX]]
2816;
2917; TTINOLUT-LABEL: define i32 @linear_transform_with_default(
@@ -146,26 +134,8 @@ end:
146134define i32 @linear_transform_no_default (i32 %x ) {
147135; OPTNOLUT-LABEL: define i32 @linear_transform_no_default(
148136; OPTNOLUT-SAME: i32 [[X:%.*]]) {
149- ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
150- ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
151- ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
152- ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
153- ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
154- ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
155- ; OPTNOLUT-NEXT: i32 4, label %[[CASE4:.*]]
156- ; OPTNOLUT-NEXT: ]
157- ; OPTNOLUT: [[CASE1]]:
158- ; OPTNOLUT-NEXT: br label %[[END]]
159- ; OPTNOLUT: [[CASE2]]:
160- ; OPTNOLUT-NEXT: br label %[[END]]
161- ; OPTNOLUT: [[CASE3]]:
162- ; OPTNOLUT-NEXT: br label %[[END]]
163- ; OPTNOLUT: [[CASE4]]:
164- ; OPTNOLUT-NEXT: br label %[[END]]
165- ; OPTNOLUT: [[DEFAULT]]:
166- ; OPTNOLUT-NEXT: unreachable
167- ; OPTNOLUT: [[END]]:
168- ; OPTNOLUT-NEXT: [[SWITCH_IDX_MULT:%.*]] = phi i32 [ 3, %[[CASE1]] ], [ 6, %[[CASE2]] ], [ 9, %[[CASE3]] ], [ 12, %[[CASE4]] ], [ 0, %[[ENTRY]] ]
137+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
138+ ; OPTNOLUT-NEXT: [[SWITCH_IDX_MULT:%.*]] = mul nsw i32 [[X]], 3
169139; OPTNOLUT-NEXT: ret i32 [[SWITCH_IDX_MULT]]
170140;
171141; TTINOLUT-LABEL: define i32 @linear_transform_no_default(
@@ -222,23 +192,11 @@ end:
222192define i4 @bitmap_no_default (i32 %x ) {
223193; OPTNOLUT-LABEL: define i4 @bitmap_no_default(
224194; OPTNOLUT-SAME: i32 [[X:%.*]]) {
225- ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
226- ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
227- ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
228- ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
229- ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
230- ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
231- ; OPTNOLUT-NEXT: ]
232- ; OPTNOLUT: [[CASE1]]:
233- ; OPTNOLUT-NEXT: br label %[[END]]
234- ; OPTNOLUT: [[CASE2]]:
235- ; OPTNOLUT-NEXT: br label %[[END]]
236- ; OPTNOLUT: [[CASE3]]:
237- ; OPTNOLUT-NEXT: br label %[[END]]
238- ; OPTNOLUT: [[DEFAULT]]:
239- ; OPTNOLUT-NEXT: unreachable
240- ; OPTNOLUT: [[END]]:
241- ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = phi i4 [ 2, %[[CASE1]] ], [ 4, %[[CASE2]] ], [ -8, %[[CASE3]] ], [ 0, %[[ENTRY]] ]
195+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
196+ ; OPTNOLUT-NEXT: [[SWITCH_CAST:%.*]] = trunc i32 [[X]] to i16
197+ ; OPTNOLUT-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul nuw nsw i16 [[SWITCH_CAST]], 4
198+ ; OPTNOLUT-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i16 -31712, [[SWITCH_SHIFTAMT]]
199+ ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = trunc i16 [[SWITCH_DOWNSHIFT]] to i4
242200; OPTNOLUT-NEXT: ret i4 [[SWITCH_MASKED]]
243201;
244202; TTINOLUT-LABEL: define i4 @bitmap_no_default(
@@ -289,23 +247,13 @@ end:
289247define i4 @bitmap_with_default (i32 %x ) {
290248; OPTNOLUT-LABEL: define i4 @bitmap_with_default(
291249; OPTNOLUT-SAME: i32 [[X:%.*]]) {
292- ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
293- ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
294- ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
295- ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
296- ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
297- ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
298- ; OPTNOLUT-NEXT: ]
299- ; OPTNOLUT: [[CASE1]]:
300- ; OPTNOLUT-NEXT: br label %[[END]]
301- ; OPTNOLUT: [[CASE2]]:
302- ; OPTNOLUT-NEXT: br label %[[END]]
303- ; OPTNOLUT: [[CASE3]]:
304- ; OPTNOLUT-NEXT: br label %[[END]]
305- ; OPTNOLUT: [[DEFAULT]]:
306- ; OPTNOLUT-NEXT: br label %[[END]]
307- ; OPTNOLUT: [[END]]:
308- ; OPTNOLUT-NEXT: [[IDX:%.*]] = phi i4 [ 2, %[[CASE1]] ], [ 4, %[[CASE2]] ], [ -8, %[[CASE3]] ], [ -1, %[[DEFAULT]] ], [ 0, %[[ENTRY]] ]
250+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
251+ ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 4
252+ ; OPTNOLUT-NEXT: [[SWITCH_CAST:%.*]] = trunc i32 [[X]] to i16
253+ ; OPTNOLUT-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul nuw nsw i16 [[SWITCH_CAST]], 4
254+ ; OPTNOLUT-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i16 -31712, [[SWITCH_SHIFTAMT]]
255+ ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = trunc i16 [[SWITCH_DOWNSHIFT]] to i4
256+ ; OPTNOLUT-NEXT: [[IDX:%.*]] = select i1 [[TMP0]], i4 [[SWITCH_MASKED]], i4 -1
309257; OPTNOLUT-NEXT: ret i4 [[IDX]]
310258;
311259; TTINOLUT-LABEL: define i4 @bitmap_with_default(
@@ -394,18 +342,9 @@ end:
394342define i32 @single_value_withdefault (i32 %x ) {
395343; OPTNOLUT-LABEL: define i32 @single_value_withdefault(
396344; OPTNOLUT-SAME: i32 [[X:%.*]]) {
397- ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
398- ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
399- ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
400- ; OPTNOLUT-NEXT: i32 1, label %[[END]]
401- ; OPTNOLUT-NEXT: i32 2, label %[[END]]
402- ; OPTNOLUT-NEXT: i32 3, label %[[END]]
403- ; OPTNOLUT-NEXT: i32 4, label %[[END]]
404- ; OPTNOLUT-NEXT: ]
405- ; OPTNOLUT: [[DEFAULT]]:
406- ; OPTNOLUT-NEXT: br label %[[END]]
407- ; OPTNOLUT: [[END]]:
408- ; OPTNOLUT-NEXT: [[DOT:%.*]] = phi i32 [ 3, %[[DEFAULT]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ], [ 2, %[[ENTRY]] ]
345+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
346+ ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 5
347+ ; OPTNOLUT-NEXT: [[DOT:%.*]] = select i1 [[TMP0]], i32 2, i32 3
409348; OPTNOLUT-NEXT: ret i32 [[DOT]]
410349;
411350; TTINOLUT-LABEL: define i32 @single_value_withdefault(
0 commit comments