@@ -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(
@@ -138,26 +126,8 @@ end:
138126define i32 @linear_transform_no_default (i32 %x ) {
139127; OPTNOLUT-LABEL: define i32 @linear_transform_no_default(
140128; OPTNOLUT-SAME: i32 [[X:%.*]]) {
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]] ]
129+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
130+ ; OPTNOLUT-NEXT: [[SWITCH_IDX_MULT:%.*]] = mul nsw i32 [[X]], 3
161131; OPTNOLUT-NEXT: ret i32 [[SWITCH_IDX_MULT]]
162132;
163133; TTINOLUT-LABEL: define i32 @linear_transform_no_default(
@@ -350,18 +320,9 @@ end:
350320define i32 @single_value_withdefault (i32 %x ) {
351321; OPTNOLUT-LABEL: define i32 @single_value_withdefault(
352322; OPTNOLUT-SAME: i32 [[X:%.*]]) {
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]] ]
323+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
324+ ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 5
325+ ; OPTNOLUT-NEXT: [[DOT:%.*]] = select i1 [[TMP0]], i32 2, i32 3
365326; OPTNOLUT-NEXT: ret i32 [[DOT]]
366327;
367328; TTINOLUT-LABEL: define i32 @single_value_withdefault(
@@ -401,18 +362,9 @@ end:
401362define i32 @single_value_no_jump_tables (i32 %x ) "no-jump-tables" ="true" {
402363; OPTNOLUT-LABEL: define i32 @single_value_no_jump_tables(
403364; OPTNOLUT-SAME: i32 [[X:%.*]]) #[[ATTR0:[0-9]+]] {
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]] ]
365+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
366+ ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 5
367+ ; OPTNOLUT-NEXT: [[IDX:%.*]] = select i1 [[TMP0]], i32 2, i32 3
416368; OPTNOLUT-NEXT: ret i32 [[IDX]]
417369;
418370; TTINOLUT-LABEL: define i32 @single_value_no_jump_tables(
0 commit comments