Skip to content

Commit 148a8fe

Browse files
authored
GVN/test: regen a test with UTC (NFC) (llvm#111365)
1 parent db98be3 commit 148a8fe

File tree

1 file changed

+179
-55
lines changed

1 file changed

+179
-55
lines changed

llvm/test/Transforms/GVN/edge.ll

Lines changed: 179 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
12
; RUN: opt -passes=gvn -S < %s | FileCheck %s
23

34
define i32 @f1(i32 %x) {
4-
; CHECK-LABEL: define i32 @f1(
5+
; CHECK-LABEL: define i32 @f1(
6+
; CHECK-SAME: i32 [[X:%.*]]) {
7+
; CHECK-NEXT: [[BB0:.*:]]
8+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X]], 0
9+
; CHECK-NEXT: br i1 [[CMP]], label %[[BB2:.*]], label %[[BB1:.*]]
10+
; CHECK: [[BB1]]:
11+
; CHECK-NEXT: br label %[[BB2]]
12+
; CHECK: [[BB2]]:
13+
; CHECK-NEXT: ret i32 [[X]]
14+
;
515
bb0:
616
%cmp = icmp eq i32 %x, 0
717
br i1 %cmp, label %bb2, label %bb1
@@ -11,12 +21,19 @@ bb2:
1121
%cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ]
1222
%foo = add i32 %cond, %x
1323
ret i32 %foo
14-
; CHECK: bb2:
15-
; CHECK: ret i32 %x
1624
}
1725

1826
define i32 @f2(i32 %x) {
19-
; CHECK-LABEL: define i32 @f2(
27+
; CHECK-LABEL: define i32 @f2(
28+
; CHECK-SAME: i32 [[X:%.*]]) {
29+
; CHECK-NEXT: [[BB0:.*:]]
30+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[X]], 0
31+
; CHECK-NEXT: br i1 [[CMP]], label %[[BB1:.*]], label %[[BB2:.*]]
32+
; CHECK: [[BB1]]:
33+
; CHECK-NEXT: br label %[[BB2]]
34+
; CHECK: [[BB2]]:
35+
; CHECK-NEXT: ret i32 [[X]]
36+
;
2037
bb0:
2138
%cmp = icmp ne i32 %x, 0
2239
br i1 %cmp, label %bb1, label %bb2
@@ -26,12 +43,20 @@ bb2:
2643
%cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ]
2744
%foo = add i32 %cond, %x
2845
ret i32 %foo
29-
; CHECK: bb2:
30-
; CHECK: ret i32 %x
3146
}
3247

3348
define i32 @f3(i32 %x) {
34-
; CHECK-LABEL: define i32 @f3(
49+
; CHECK-LABEL: define i32 @f3(
50+
; CHECK-SAME: i32 [[X:%.*]]) {
51+
; CHECK-NEXT: [[BB0:.*:]]
52+
; CHECK-NEXT: switch i32 [[X]], label %[[BB1:.*]] [
53+
; CHECK-NEXT: i32 0, label %[[BB2:.*]]
54+
; CHECK-NEXT: ]
55+
; CHECK: [[BB1]]:
56+
; CHECK-NEXT: br label %[[BB2]]
57+
; CHECK: [[BB2]]:
58+
; CHECK-NEXT: ret i32 [[X]]
59+
;
3560
bb0:
3661
switch i32 %x, label %bb1 [ i32 0, label %bb2]
3762
bb1:
@@ -40,13 +65,21 @@ bb2:
4065
%cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ]
4166
%foo = add i32 %cond, %x
4267
ret i32 %foo
43-
; CHECK: bb2:
44-
; CHECK: ret i32 %x
4568
}
4669

4770
declare void @g(i1)
4871
define void @f4(ptr %x) {
4972
; CHECK-LABEL: define void @f4(
73+
; CHECK-SAME: ptr [[X:%.*]]) {
74+
; CHECK-NEXT: [[BB0:.*:]]
75+
; CHECK-NEXT: [[Y:%.*]] = icmp eq ptr null, [[X]]
76+
; CHECK-NEXT: br i1 [[Y]], label %[[BB2:.*]], label %[[BB1:.*]]
77+
; CHECK: [[BB1]]:
78+
; CHECK-NEXT: br label %[[BB2]]
79+
; CHECK: [[BB2]]:
80+
; CHECK-NEXT: call void @g(i1 [[Y]])
81+
; CHECK-NEXT: ret void
82+
;
5083
bb0:
5184
%y = icmp eq ptr null, %x
5285
br i1 %y, label %bb2, label %bb1
@@ -55,11 +88,22 @@ bb1:
5588
bb2:
5689
%zed = icmp eq ptr null, %x
5790
call void @g(i1 %zed)
58-
; CHECK: call void @g(i1 %y)
5991
ret void
6092
}
6193

6294
define double @fcmp_oeq_not_zero(double %x, double %y) {
95+
; CHECK-LABEL: define double @fcmp_oeq_not_zero(
96+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
97+
; CHECK-NEXT: [[ENTRY:.*]]:
98+
; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 2.000000e+00
99+
; CHECK-NEXT: br i1 [[CMP]], label %[[IF:.*]], label %[[RETURN:.*]]
100+
; CHECK: [[IF]]:
101+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], 2.000000e+00
102+
; CHECK-NEXT: br label %[[RETURN]]
103+
; CHECK: [[RETURN]]:
104+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[IF]] ], [ [[X]], %[[ENTRY]] ]
105+
; CHECK-NEXT: ret double [[RETVAL]]
106+
;
63107
entry:
64108
%cmp = fcmp oeq double %y, 2.0
65109
br i1 %cmp, label %if, label %return
@@ -71,12 +115,21 @@ if:
71115
return:
72116
%retval = phi double [ %div, %if ], [ %x, %entry ]
73117
ret double %retval
74-
75-
; CHECK-LABEL: define double @fcmp_oeq_not_zero(
76-
; CHECK: %div = fdiv double %x, 2.0
77118
}
78119

79120
define double @fcmp_une_not_zero(double %x, double %y) {
121+
; CHECK-LABEL: define double @fcmp_une_not_zero(
122+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
123+
; CHECK-NEXT: [[ENTRY:.*]]:
124+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[Y]], 2.000000e+00
125+
; CHECK-NEXT: br i1 [[CMP]], label %[[RETURN:.*]], label %[[ELSE:.*]]
126+
; CHECK: [[ELSE]]:
127+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], 2.000000e+00
128+
; CHECK-NEXT: br label %[[RETURN]]
129+
; CHECK: [[RETURN]]:
130+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[ELSE]] ], [ [[X]], %[[ENTRY]] ]
131+
; CHECK-NEXT: ret double [[RETVAL]]
132+
;
80133
entry:
81134
%cmp = fcmp une double %y, 2.0
82135
br i1 %cmp, label %return, label %else
@@ -88,12 +141,21 @@ else:
88141
return:
89142
%retval = phi double [ %div, %else ], [ %x, %entry ]
90143
ret double %retval
91-
92-
; CHECK-LABEL: define double @fcmp_une_not_zero(
93-
; CHECK: %div = fdiv double %x, 2.0
94144
}
95145

96146
define double @fcmp_one_possibly_nan(double %x, double %y) {
147+
; CHECK-LABEL: define double @fcmp_one_possibly_nan(
148+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
149+
; CHECK-NEXT: [[ENTRY:.*]]:
150+
; CHECK-NEXT: [[CMP:%.*]] = fcmp one double [[Y]], 2.000000e+00
151+
; CHECK-NEXT: br i1 [[CMP]], label %[[RETURN:.*]], label %[[ELSE:.*]]
152+
; CHECK: [[ELSE]]:
153+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], [[Y]]
154+
; CHECK-NEXT: br label %[[RETURN]]
155+
; CHECK: [[RETURN]]:
156+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[ELSE]] ], [ [[X]], %[[ENTRY]] ]
157+
; CHECK-NEXT: ret double [[RETVAL]]
158+
;
97159
entry:
98160
%cmp = fcmp one double %y, 2.0
99161
br i1 %cmp, label %return, label %else
@@ -105,12 +167,21 @@ else:
105167
return:
106168
%retval = phi double [ %div, %else ], [ %x, %entry ]
107169
ret double %retval
108-
109-
; CHECK-LABEL: define double @fcmp_one_possibly_nan(
110-
; CHECK: %div = fdiv double %x, %y
111170
}
112171

113172
define double @fcmp_one_not_zero_or_nan(double %x, double %y) {
173+
; CHECK-LABEL: define double @fcmp_one_not_zero_or_nan(
174+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
175+
; CHECK-NEXT: [[ENTRY:.*]]:
176+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan one double [[Y]], 2.000000e+00
177+
; CHECK-NEXT: br i1 [[CMP]], label %[[RETURN:.*]], label %[[ELSE:.*]]
178+
; CHECK: [[ELSE]]:
179+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], 2.000000e+00
180+
; CHECK-NEXT: br label %[[RETURN]]
181+
; CHECK: [[RETURN]]:
182+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[ELSE]] ], [ [[X]], %[[ENTRY]] ]
183+
; CHECK-NEXT: ret double [[RETVAL]]
184+
;
114185
entry:
115186
%cmp = fcmp nnan one double %y, 2.0
116187
br i1 %cmp, label %return, label %else
@@ -122,15 +193,24 @@ else:
122193
return:
123194
%retval = phi double [ %div, %else ], [ %x, %entry ]
124195
ret double %retval
125-
126-
; CHECK-LABEL: define double @fcmp_one_not_zero_or_nan(
127-
; CHECK: %div = fdiv double %x, 2.0
128196
}
129197

130-
; PR22376 - We can't propagate zero constants because -0.0
198+
; PR22376 - We can't propagate zero constants because -0.0
131199
; compares equal to 0.0. If %y is -0.0 in this test case,
132200
; we would produce the wrong sign on the infinity return value.
133201
define double @fcmp_oeq_zero(double %x, double %y) {
202+
; CHECK-LABEL: define double @fcmp_oeq_zero(
203+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
204+
; CHECK-NEXT: [[ENTRY:.*]]:
205+
; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], 0.000000e+00
206+
; CHECK-NEXT: br i1 [[CMP]], label %[[IF:.*]], label %[[RETURN:.*]]
207+
; CHECK: [[IF]]:
208+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], [[Y]]
209+
; CHECK-NEXT: br label %[[RETURN]]
210+
; CHECK: [[RETURN]]:
211+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[IF]] ], [ [[X]], %[[ENTRY]] ]
212+
; CHECK-NEXT: ret double [[RETVAL]]
213+
;
134214
entry:
135215
%cmp = fcmp oeq double %y, 0.0
136216
br i1 %cmp, label %if, label %return
@@ -142,12 +222,21 @@ if:
142222
return:
143223
%retval = phi double [ %div, %if ], [ %x, %entry ]
144224
ret double %retval
145-
146-
; CHECK-LABEL: define double @fcmp_oeq_zero(
147-
; CHECK: %div = fdiv double %x, %y
148225
}
149226

150227
define double @fcmp_une_zero(double %x, double %y) {
228+
; CHECK-LABEL: define double @fcmp_une_zero(
229+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
230+
; CHECK-NEXT: [[ENTRY:.*]]:
231+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[Y]], -0.000000e+00
232+
; CHECK-NEXT: br i1 [[CMP]], label %[[RETURN:.*]], label %[[ELSE:.*]]
233+
; CHECK: [[ELSE]]:
234+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], [[Y]]
235+
; CHECK-NEXT: br label %[[RETURN]]
236+
; CHECK: [[RETURN]]:
237+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[ELSE]] ], [ [[X]], %[[ENTRY]] ]
238+
; CHECK-NEXT: ret double [[RETVAL]]
239+
;
151240
entry:
152241
%cmp = fcmp une double %y, -0.0
153242
br i1 %cmp, label %return, label %else
@@ -159,52 +248,81 @@ else:
159248
return:
160249
%retval = phi double [ %div, %else ], [ %x, %entry ]
161250
ret double %retval
162-
163-
; CHECK-LABEL: define double @fcmp_une_zero(
164-
; CHECK: %div = fdiv double %x, %y
165251
}
166252

167253
; We also cannot propagate a value if it's not a constant.
168254
; This is because the value could be 0.0 or -0.0.
169255

170256
define double @fcmp_oeq_maybe_zero(double %x, double %y, double %z1, double %z2) {
257+
; CHECK-LABEL: define double @fcmp_oeq_maybe_zero(
258+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]], double [[Z1:%.*]], double [[Z2:%.*]]) {
259+
; CHECK-NEXT: [[ENTRY:.*]]:
260+
; CHECK-NEXT: [[Z:%.*]] = fadd double [[Z1]], [[Z2]]
261+
; CHECK-NEXT: [[CMP:%.*]] = fcmp oeq double [[Y]], [[Z]]
262+
; CHECK-NEXT: br i1 [[CMP]], label %[[IF:.*]], label %[[RETURN:.*]]
263+
; CHECK: [[IF]]:
264+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], [[Z]]
265+
; CHECK-NEXT: br label %[[RETURN]]
266+
; CHECK: [[RETURN]]:
267+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[IF]] ], [ [[X]], %[[ENTRY]] ]
268+
; CHECK-NEXT: ret double [[RETVAL]]
269+
;
171270
entry:
172-
%z = fadd double %z1, %z2
173-
%cmp = fcmp oeq double %y, %z
174-
br i1 %cmp, label %if, label %return
271+
%z = fadd double %z1, %z2
272+
%cmp = fcmp oeq double %y, %z
273+
br i1 %cmp, label %if, label %return
175274

176275
if:
177-
%div = fdiv double %x, %z
178-
br label %return
276+
%div = fdiv double %x, %z
277+
br label %return
179278

180279
return:
181-
%retval = phi double [ %div, %if ], [ %x, %entry ]
182-
ret double %retval
183-
184-
; CHECK-LABEL: define double @fcmp_oeq_maybe_zero(
185-
; CHECK: %div = fdiv double %x, %z
280+
%retval = phi double [ %div, %if ], [ %x, %entry ]
281+
ret double %retval
186282
}
187283

188284
define double @fcmp_une_maybe_zero(double %x, double %y, double %z1, double %z2) {
285+
; CHECK-LABEL: define double @fcmp_une_maybe_zero(
286+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]], double [[Z1:%.*]], double [[Z2:%.*]]) {
287+
; CHECK-NEXT: [[ENTRY:.*]]:
288+
; CHECK-NEXT: [[Z:%.*]] = fadd double [[Z1]], [[Z2]]
289+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[Y]], [[Z]]
290+
; CHECK-NEXT: br i1 [[CMP]], label %[[RETURN:.*]], label %[[ELSE:.*]]
291+
; CHECK: [[ELSE]]:
292+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], [[Z]]
293+
; CHECK-NEXT: br label %[[RETURN]]
294+
; CHECK: [[RETURN]]:
295+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[ELSE]] ], [ [[X]], %[[ENTRY]] ]
296+
; CHECK-NEXT: ret double [[RETVAL]]
297+
;
189298
entry:
190-
%z = fadd double %z1, %z2
191-
%cmp = fcmp une double %y, %z
192-
br i1 %cmp, label %return, label %else
299+
%z = fadd double %z1, %z2
300+
%cmp = fcmp une double %y, %z
301+
br i1 %cmp, label %return, label %else
193302

194303
else:
195-
%div = fdiv double %x, %z
196-
br label %return
304+
%div = fdiv double %x, %z
305+
br label %return
197306

198307
return:
199-
%retval = phi double [ %div, %else ], [ %x, %entry ]
200-
ret double %retval
201-
202-
; CHECK-LABEL: define double @fcmp_une_maybe_zero(
203-
; CHECK: %div = fdiv double %x, %z
308+
%retval = phi double [ %div, %else ], [ %x, %entry ]
309+
ret double %retval
204310
}
205311

206312

207313
define double @fcmp_ueq_possibly_nan(double %x, double %y) {
314+
; CHECK-LABEL: define double @fcmp_ueq_possibly_nan(
315+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
316+
; CHECK-NEXT: [[ENTRY:.*]]:
317+
; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double [[Y]], 2.000000e+00
318+
; CHECK-NEXT: br i1 [[CMP]], label %[[DO_DIV:.*]], label %[[RETURN:.*]]
319+
; CHECK: [[DO_DIV]]:
320+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], [[Y]]
321+
; CHECK-NEXT: br label %[[RETURN]]
322+
; CHECK: [[RETURN]]:
323+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[DO_DIV]] ], [ [[X]], %[[ENTRY]] ]
324+
; CHECK-NEXT: ret double [[RETVAL]]
325+
;
208326
entry:
209327
%cmp = fcmp ueq double %y, 2.0
210328
br i1 %cmp, label %do_div, label %return
@@ -216,12 +334,21 @@ do_div:
216334
return:
217335
%retval = phi double [ %div, %do_div ], [ %x, %entry ]
218336
ret double %retval
219-
220-
; CHECK-LABEL: define double @fcmp_ueq_possibly_nan(
221-
; CHECK: %div = fdiv double %x, %y
222337
}
223338

224339
define double @fcmp_ueq_not_zero_or_nan(double %x, double %y) {
340+
; CHECK-LABEL: define double @fcmp_ueq_not_zero_or_nan(
341+
; CHECK-SAME: double [[X:%.*]], double [[Y:%.*]]) {
342+
; CHECK-NEXT: [[ENTRY:.*]]:
343+
; CHECK-NEXT: [[CMP:%.*]] = fcmp nnan ueq double [[Y]], 2.000000e+00
344+
; CHECK-NEXT: br i1 [[CMP]], label %[[DO_DIV:.*]], label %[[RETURN:.*]]
345+
; CHECK: [[DO_DIV]]:
346+
; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[X]], 2.000000e+00
347+
; CHECK-NEXT: br label %[[RETURN]]
348+
; CHECK: [[RETURN]]:
349+
; CHECK-NEXT: [[RETVAL:%.*]] = phi double [ [[DIV]], %[[DO_DIV]] ], [ [[X]], %[[ENTRY]] ]
350+
; CHECK-NEXT: ret double [[RETVAL]]
351+
;
225352
entry:
226353
%cmp = fcmp nnan ueq double %y, 2.0
227354
br i1 %cmp, label %do_div, label %return
@@ -233,7 +360,4 @@ do_div:
233360
return:
234361
%retval = phi double [ %div, %do_div ], [ %x, %entry ]
235362
ret double %retval
236-
237-
; CHECK-LABEL: define double @fcmp_ueq_not_zero_or_nan(
238-
; CHECK: %div = fdiv double %x, 2.0
239363
}

0 commit comments

Comments
 (0)