Skip to content

Commit 5987f1e

Browse files
[InstCombine] Regenerate narrow-switch.ll test (NFC)
`narrow-switch.ll` test has been regenerated via latest UTC using `--prefix-filecheck-ir-name _`, so as to avoid conflicts with scripted variable names.
1 parent a8c6fb4 commit 5987f1e

File tree

1 file changed

+148
-46
lines changed

1 file changed

+148
-46
lines changed

llvm/test/Transforms/InstCombine/narrow-switch.ll

Lines changed: 148 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
1-
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --prefix-filecheck-ir-name _ --version 5
22
; Vary legal integer types in data layout.
33
; RUN: opt < %s -passes=instcombine -S -data-layout=n32 | FileCheck %s --check-prefix=ALL --check-prefix=CHECK32
44
; RUN: opt < %s -passes=instcombine -S -data-layout=n32:64 | FileCheck %s --check-prefix=ALL --check-prefix=CHECK64
55

66
define i32 @positive1(i64 %a) {
7-
; ALL-LABEL: @positive1(
8-
; ALL: switch i32
9-
; ALL-NEXT: i32 10, label %return
10-
; ALL-NEXT: i32 100, label %sw.bb1
11-
; ALL-NEXT: i32 1001, label %sw.bb2
7+
; ALL-LABEL: define i32 @positive1(
8+
; ALL-SAME: i64 [[A:%.*]]) {
9+
; ALL-NEXT: [[ENTRY:.*]]:
10+
; ALL-NEXT: [[TRUNC:%.*]] = trunc i64 [[A]] to i32
11+
; ALL-NEXT: switch i32 [[TRUNC]], label %[[SW_DEFAULT:.*]] [
12+
; ALL-NEXT: i32 10, label %[[RETURN:.*]]
13+
; ALL-NEXT: i32 100, label %[[SW_BB1:.*]]
14+
; ALL-NEXT: i32 1001, label %[[SW_BB2:.*]]
1215
; ALL-NEXT: ]
16+
; ALL: [[SW_BB1]]:
17+
; ALL-NEXT: br label %[[RETURN]]
18+
; ALL: [[SW_BB2]]:
19+
; ALL-NEXT: br label %[[RETURN]]
20+
; ALL: [[SW_DEFAULT]]:
21+
; ALL-NEXT: br label %[[RETURN]]
22+
; ALL: [[RETURN]]:
23+
; ALL-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 24, %[[SW_DEFAULT]] ], [ 123, %[[SW_BB2]] ], [ 213, %[[SW_BB1]] ], [ 231, %[[ENTRY]] ]
24+
; ALL-NEXT: ret i32 [[RETVAL_0]]
1325
;
1426
entry:
1527
%and = and i64 %a, 4294967295
@@ -34,12 +46,24 @@ return:
3446
}
3547

3648
define i32 @negative1(i64 %a) {
37-
; ALL-LABEL: @negative1(
38-
; ALL: switch i32
39-
; ALL-NEXT: i32 -10, label %return
40-
; ALL-NEXT: i32 -100, label %sw.bb1
41-
; ALL-NEXT: i32 -1001, label %sw.bb2
49+
; ALL-LABEL: define i32 @negative1(
50+
; ALL-SAME: i64 [[A:%.*]]) {
51+
; ALL-NEXT: [[ENTRY:.*]]:
52+
; ALL-NEXT: [[TRUNC:%.*]] = trunc i64 [[A]] to i32
53+
; ALL-NEXT: switch i32 [[TRUNC]], label %[[SW_DEFAULT:.*]] [
54+
; ALL-NEXT: i32 -10, label %[[RETURN:.*]]
55+
; ALL-NEXT: i32 -100, label %[[SW_BB1:.*]]
56+
; ALL-NEXT: i32 -1001, label %[[SW_BB2:.*]]
4257
; ALL-NEXT: ]
58+
; ALL: [[SW_BB1]]:
59+
; ALL-NEXT: br label %[[RETURN]]
60+
; ALL: [[SW_BB2]]:
61+
; ALL-NEXT: br label %[[RETURN]]
62+
; ALL: [[SW_DEFAULT]]:
63+
; ALL-NEXT: br label %[[RETURN]]
64+
; ALL: [[RETURN]]:
65+
; ALL-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 24, %[[SW_DEFAULT]] ], [ 123, %[[SW_BB2]] ], [ 213, %[[SW_BB1]] ], [ 231, %[[ENTRY]] ]
66+
; ALL-NEXT: ret i32 [[RETVAL_0]]
4367
;
4468
entry:
4569
%or = or i64 %a, -4294967296
@@ -67,12 +91,24 @@ return:
6791
; assertion.
6892

6993
define i32 @trunc72to68(i72 %a) {
70-
; ALL-LABEL: @trunc72to68(
71-
; ALL: switch i68
72-
; ALL-NEXT: i68 10, label %return
73-
; ALL-NEXT: i68 100, label %sw.bb1
74-
; ALL-NEXT: i68 1001, label %sw.bb2
94+
; ALL-LABEL: define i32 @trunc72to68(
95+
; ALL-SAME: i72 [[A:%.*]]) {
96+
; ALL-NEXT: [[ENTRY:.*]]:
97+
; ALL-NEXT: [[TRUNC:%.*]] = trunc i72 [[A]] to i68
98+
; ALL-NEXT: switch i68 [[TRUNC]], label %[[SW_DEFAULT:.*]] [
99+
; ALL-NEXT: i68 10, label %[[RETURN:.*]]
100+
; ALL-NEXT: i68 100, label %[[SW_BB1:.*]]
101+
; ALL-NEXT: i68 1001, label %[[SW_BB2:.*]]
75102
; ALL-NEXT: ]
103+
; ALL: [[SW_BB1]]:
104+
; ALL-NEXT: br label %[[RETURN]]
105+
; ALL: [[SW_BB2]]:
106+
; ALL-NEXT: br label %[[RETURN]]
107+
; ALL: [[SW_DEFAULT]]:
108+
; ALL-NEXT: br label %[[RETURN]]
109+
; ALL: [[RETURN]]:
110+
; ALL-NEXT: [[RETVAL_0:%.*]] = phi i32 [ 24, %[[SW_DEFAULT]] ], [ 123, %[[SW_BB2]] ], [ 213, %[[SW_BB1]] ], [ 231, %[[ENTRY]] ]
111+
; ALL-NEXT: ret i32 [[RETVAL_0]]
76112
;
77113
entry:
78114
%and = and i72 %a, 295147905179352825855
@@ -103,15 +139,38 @@ return:
103139
; because both are illegal.
104140

105141
define void @trunc64to58(i64 %a) {
106-
; ALL-LABEL: @trunc64to58(
107-
; CHECK32: switch i58
108-
; CHECK32-NEXT: i58 0, label %sw.bb1
109-
; CHECK32-NEXT: i58 18717182647723699, label %sw.bb2
142+
; CHECK32-LABEL: define void @trunc64to58(
143+
; CHECK32-SAME: i64 [[A:%.*]]) {
144+
; CHECK32-NEXT: [[ENTRY:.*:]]
145+
; CHECK32-NEXT: [[TMP0:%.*]] = trunc i64 [[A]] to i58
146+
; CHECK32-NEXT: [[TMP1:%.*]] = and i58 [[TMP0]], 15
147+
; CHECK32-NEXT: [[TRUNC:%.*]] = mul nuw i58 [[TMP1]], 18717182647723699
148+
; CHECK32-NEXT: switch i58 [[TRUNC]], label %[[SW_DEFAULT:.*]] [
149+
; CHECK32-NEXT: i58 0, label %[[SW_BB1:.*]]
150+
; CHECK32-NEXT: i58 18717182647723699, label %[[SW_BB2:.*]]
110151
; CHECK32-NEXT: ]
111-
; CHECK64: switch i64
112-
; CHECK64-NEXT: i64 0, label %sw.bb1
113-
; CHECK64-NEXT: i64 18717182647723699, label %sw.bb2
152+
; CHECK32: [[SW_BB1]]:
153+
; CHECK32-NEXT: br label %[[SW_DEFAULT]]
154+
; CHECK32: [[SW_BB2]]:
155+
; CHECK32-NEXT: br label %[[SW_DEFAULT]]
156+
; CHECK32: [[SW_DEFAULT]]:
157+
; CHECK32-NEXT: ret void
158+
;
159+
; CHECK64-LABEL: define void @trunc64to58(
160+
; CHECK64-SAME: i64 [[A:%.*]]) {
161+
; CHECK64-NEXT: [[ENTRY:.*:]]
162+
; CHECK64-NEXT: [[_TMP0:%.*]] = and i64 [[A]], 15
163+
; CHECK64-NEXT: [[TMP0:%.*]] = mul nuw nsw i64 [[_TMP0]], 18717182647723699
164+
; CHECK64-NEXT: switch i64 [[TMP0]], label %[[SW_DEFAULT:.*]] [
165+
; CHECK64-NEXT: i64 0, label %[[SW_BB1:.*]]
166+
; CHECK64-NEXT: i64 18717182647723699, label %[[SW_BB2:.*]]
114167
; CHECK64-NEXT: ]
168+
; CHECK64: [[SW_BB1]]:
169+
; CHECK64-NEXT: br label %[[SW_DEFAULT]]
170+
; CHECK64: [[SW_BB2]]:
171+
; CHECK64-NEXT: br label %[[SW_DEFAULT]]
172+
; CHECK64: [[SW_DEFAULT]]:
173+
; CHECK64-NEXT: ret void
115174
;
116175
entry:
117176
%tmp0 = and i64 %a, 15
@@ -136,18 +195,19 @@ sw.default:
136195
; https://llvm.org/bugs/show_bug.cgi?id=31260
137196

138197
define i8 @PR31260(i8 %x) {
139-
; ALL-LABEL: @PR31260(
140-
; ALL-NEXT: entry:
141-
; ALL-NEXT: [[T4:%.*]] = and i8 [[X:%.*]], 2
142-
; ALL-NEXT: switch i8 [[T4]], label [[EXIT:%.*]] [
143-
; ALL-NEXT: i8 0, label [[CASE126:%.*]]
144-
; ALL-NEXT: i8 2, label [[CASE124:%.*]]
198+
; ALL-LABEL: define i8 @PR31260(
199+
; ALL-SAME: i8 [[X:%.*]]) {
200+
; ALL-NEXT: [[ENTRY:.*:]]
201+
; ALL-NEXT: [[T4:%.*]] = and i8 [[X]], 2
202+
; ALL-NEXT: switch i8 [[T4]], label %[[EXIT:.*]] [
203+
; ALL-NEXT: i8 0, label %[[CASE126:.*]]
204+
; ALL-NEXT: i8 2, label %[[CASE124:.*]]
145205
; ALL-NEXT: ]
146-
; ALL: exit:
206+
; ALL: [[EXIT]]:
147207
; ALL-NEXT: ret i8 1
148-
; ALL: case126:
208+
; ALL: [[CASE126]]:
149209
; ALL-NEXT: ret i8 3
150-
; ALL: case124:
210+
; ALL: [[CASE124]]:
151211
; ALL-NEXT: ret i8 5
152212
;
153213
entry:
@@ -169,22 +229,43 @@ case124:
169229
; Make sure the arithmetic evaluation of the switch
170230
; condition is evaluated on the original type
171231
define i32 @trunc32to16(i32 %a0) #0 {
172-
; ALL-LABEL: @trunc32to16(
173-
; ALL: switch i16
174-
; ALL-NEXT: i16 63, label %sw.bb
175-
; ALL-NEXT: i16 1, label %sw.bb1
176-
; ALL-NEXT: i16 100, label %sw.bb2
232+
; ALL-LABEL: define i32 @trunc32to16(
233+
; ALL-SAME: i32 [[A0:%.*]]) {
234+
; ALL-NEXT: [[ENTRY:.*:]]
235+
; ALL-NEXT: [[RETVAL:%.*]] = alloca i32, align 4
236+
; ALL-NEXT: [[XOR:%.*]] = lshr i32 [[A0]], 16
237+
; ALL-NEXT: [[TMP0:%.*]] = trunc nuw i32 [[XOR]] to i16
238+
; ALL-NEXT: [[TRUNC:%.*]] = xor i16 [[TMP0]], 15784
239+
; ALL-NEXT: switch i16 [[TRUNC]], label %[[SW_EPILOG:.*]] [
240+
; ALL-NEXT: i16 63, label %[[SW_BB:.*]]
241+
; ALL-NEXT: i16 1, label %[[SW_BB1:.*]]
242+
; ALL-NEXT: i16 100, label %[[SW_BB2:.*]]
177243
; ALL-NEXT: ]
244+
; ALL: [[SW_BB]]:
245+
; ALL-NEXT: store i32 90, ptr [[RETVAL]], align 4
246+
; ALL-NEXT: br label %[[RETURN:.*]]
247+
; ALL: [[SW_BB1]]:
248+
; ALL-NEXT: store i32 91, ptr [[RETVAL]], align 4
249+
; ALL-NEXT: br label %[[RETURN]]
250+
; ALL: [[SW_BB2]]:
251+
; ALL-NEXT: store i32 92, ptr [[RETVAL]], align 4
252+
; ALL-NEXT: br label %[[RETURN]]
253+
; ALL: [[SW_EPILOG]]:
254+
; ALL-NEXT: store i32 113, ptr [[RETVAL]], align 4
255+
; ALL-NEXT: br label %[[RETURN]]
256+
; ALL: [[RETURN]]:
257+
; ALL-NEXT: [[RVAL:%.*]] = load i32, ptr [[RETVAL]], align 4
258+
; ALL-NEXT: ret i32 [[RVAL]]
178259
;
179260
entry:
180261
%retval = alloca i32, align 4
181262
%xor = xor i32 %a0, 1034460917
182263
%shr = lshr i32 %xor, 16
183264
%add = add i32 %shr, -917677090
184265
switch i32 %add, label %sw.epilog [
185-
i32 -917677027, label %sw.bb
186-
i32 -917677089, label %sw.bb1
187-
i32 -917676990, label %sw.bb2
266+
i32 -917677027, label %sw.bb
267+
i32 -917677089, label %sw.bb1
268+
i32 -917676990, label %sw.bb2
188269
]
189270

190271
sw.bb: ; preds = %entry
@@ -219,11 +300,32 @@ declare i32 @goo()
219300
; if original type is legal (i32 in this case)
220301

221302
define void @PR29009() {
222-
; ALL-LABEL: @PR29009(
223-
; ALL: switch i32
224-
; ALL-NEXT: i32 0, label
225-
; ALL-NEXT: i32 3, label
303+
; ALL-LABEL: define void @PR29009() {
304+
; ALL-NEXT: br label %[[BB1:.*]]
305+
; ALL: [[BB1]]:
306+
; ALL-NEXT: [[TMP2:%.*]] = load volatile i32, ptr @njob, align 4
307+
; ALL-NEXT: [[DOTNOT:%.*]] = icmp eq i32 [[TMP2]], 0
308+
; ALL-NEXT: br i1 [[DOTNOT]], label %[[BB10:.*]], label %[[BB3:.*]]
309+
; ALL: [[BB3]]:
310+
; ALL-NEXT: [[TMP4:%.*]] = call i32 @goo()
311+
; ALL-NEXT: [[TMP5:%.*]] = and i32 [[TMP4]], 7
312+
; ALL-NEXT: switch i32 [[TMP5]], label %[[BB6:.*]] [
313+
; ALL-NEXT: i32 0, label %[[BB7:.*]]
314+
; ALL-NEXT: i32 3, label %[[BB8:.*]]
226315
; ALL-NEXT: ]
316+
; ALL: [[BB6]]:
317+
; ALL-NEXT: store i32 6, ptr @a, align 4
318+
; ALL-NEXT: br label %[[BB9:.*]]
319+
; ALL: [[BB7]]:
320+
; ALL-NEXT: store i32 1, ptr @a, align 4
321+
; ALL-NEXT: br label %[[BB9]]
322+
; ALL: [[BB8]]:
323+
; ALL-NEXT: store i32 2, ptr @a, align 4
324+
; ALL-NEXT: br label %[[BB9]]
325+
; ALL: [[BB9]]:
326+
; ALL-NEXT: br label %[[BB1]]
327+
; ALL: [[BB10]]:
328+
; ALL-NEXT: ret void
227329
;
228330
br label %1
229331

@@ -236,8 +338,8 @@ define void @PR29009() {
236338
%5 = call i32 @goo()
237339
%6 = and i32 %5, 7
238340
switch i32 %6, label %7 [
239-
i32 0, label %8
240-
i32 3, label %9
341+
i32 0, label %8
342+
i32 3, label %9
241343
]
242344

243345
; <label>:7: ; preds = %4

0 commit comments

Comments
 (0)