Skip to content

Commit e4d5a76

Browse files
committed
Update tests
1 parent bda368d commit e4d5a76

File tree

1 file changed

+178
-109
lines changed

1 file changed

+178
-109
lines changed

llvm/test/Analysis/ScalarEvolution/backedge-taken-count-guard-info-with-multiple-predecessors.ll

Lines changed: 178 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1,138 +1,126 @@
11
; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" -scalar-evolution-max-iterations=0 -scalar-evolution-classify-expressions=0 2>&1 | FileCheck %s
22

3-
define void @epilogue(i64 %count) {
4-
; CHECK-LABEL: 'epilogue'
5-
; CHECK-NEXT: Determining loop execution counts for: @epilogue
6-
; CHECK-NEXT: Loop %epilogue: backedge-taken count is (-1 + %count.epilogue)
7-
; CHECK-NEXT: Loop %epilogue: constant max backedge-taken count is i64 6
8-
; CHECK-NEXT: Loop %epilogue: symbolic max backedge-taken count is (-1 + %count.epilogue)
9-
; CHECK-NEXT: Loop %epilogue: Trip multiple is 1
10-
; CHECK-NEXT: Loop %while.body: backedge-taken count is ((-8 + %count) /u 8)
11-
; CHECK-NEXT: Loop %while.body: constant max backedge-taken count is i64 2305843009213693951
12-
; CHECK-NEXT: Loop %while.body: symbolic max backedge-taken count is ((-8 + %count) /u 8)
13-
; CHECK-NEXT: Loop %while.body: Trip multiple is 1
3+
define void @slt(i16 %a, i16 %b, i1 %c) {
4+
; CHECK-LABEL: 'slt'
5+
; CHECK-NEXT: Determining loop execution counts for: @slt
6+
; CHECK-NEXT: Loop %loop: backedge-taken count is (19 + (-1 * %count)<nsw>)<nsw>
7+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 18
8+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (19 + (-1 * %count)<nsw>)<nsw>
9+
; CHECK-NEXT: Loop %loop: Trip multiple is 1
1410
entry:
15-
%cmp = icmp ugt i64 %count, 7
16-
br i1 %cmp, label %while.body, label %epilogue.preheader
11+
br i1 %c, label %b1, label %b2
1712

18-
while.body:
19-
%iv = phi i64 [ %sub, %while.body ], [ %count, %entry ]
20-
%sub = add i64 %iv, -8
21-
%exitcond.not = icmp ugt i64 %sub, 7
22-
br i1 %exitcond.not, label %while.body, label %while.loopexit
13+
b1:
14+
%cmp1 = icmp slt i16 %a, 1
15+
br i1 %cmp1, label %exit, label %preheader
2316

24-
while.loopexit:
25-
%sub.exit = phi i64 [ %sub, %while.body ]
26-
br label %epilogue.preheader
17+
b2:
18+
%cmp2 = icmp slt i16 %b, 4
19+
br i1 %cmp2, label %exit, label %preheader
2720

28-
epilogue.preheader:
29-
%count.epilogue = phi i64 [ %count, %entry ], [ %sub.exit, %while.loopexit ]
30-
%epilogue.cmp = icmp eq i64 %count.epilogue, 0
31-
br i1 %epilogue.cmp, label %exit, label %epilogue
21+
preheader:
22+
%count = phi i16 [ %a, %b1 ], [ %b, %b2 ]
23+
%cmp3 = icmp sle i16 %count, 19
24+
br i1 %cmp3, label %loop, label %exit
3225

33-
epilogue:
34-
%iv.epilogue = phi i64 [ %dec, %epilogue ], [ %count.epilogue, %epilogue.preheader ]
35-
%dec = add i64 %iv.epilogue, -1
36-
%exitcond.epilogue = icmp eq i64 %dec, 0
37-
br i1 %exitcond.epilogue, label %exit, label %epilogue
26+
loop:
27+
%iv = phi i16 [ %iv.next, %loop ], [ %count, %preheader ]
28+
%iv.next = add i16 %iv, 1
29+
%exitcond = icmp eq i16 %iv.next, 20
30+
br i1 %exitcond, label %exit, label %loop
3831

3932
exit:
4033
ret void
4134
}
4235

43-
define void @epilogue2(i64 %count) {
44-
; CHECK-LABEL: 'epilogue2'
45-
; CHECK-NEXT: Determining loop execution counts for: @epilogue2
46-
; CHECK-NEXT: Loop %epilogue: backedge-taken count is (-1 + %count.epilogue)
47-
; CHECK-NEXT: Loop %epilogue: constant max backedge-taken count is i64 8
48-
; CHECK-NEXT: Loop %epilogue: symbolic max backedge-taken count is (-1 + %count.epilogue)
49-
; CHECK-NEXT: Loop %epilogue: Trip multiple is 1
50-
; CHECK-NEXT: Loop %while.body: backedge-taken count is ((-8 + %count) /u 8)
51-
; CHECK-NEXT: Loop %while.body: constant max backedge-taken count is i64 2305843009213693951
52-
; CHECK-NEXT: Loop %while.body: symbolic max backedge-taken count is ((-8 + %count) /u 8)
53-
; CHECK-NEXT: Loop %while.body: Trip multiple is 1
36+
define void @ult(i16 %a, i16 %b, i1 %c) {
37+
; CHECK-LABEL: 'ult'
38+
; CHECK-NEXT: Determining loop execution counts for: @ult
39+
; CHECK-NEXT: Loop %loop: backedge-taken count is (21 + (-1 * %count))
40+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 19
41+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (21 + (-1 * %count))
42+
; CHECK-NEXT: Loop %loop: Trip multiple is 1
5443
entry:
55-
%cmp = icmp ugt i64 %count, 9
56-
br i1 %cmp, label %while.body, label %epilogue.preheader
44+
br i1 %c, label %b1, label %b2
5745

58-
while.body:
59-
%iv = phi i64 [ %sub, %while.body ], [ %count, %entry ]
60-
%sub = add i64 %iv, -8
61-
%exitcond.not = icmp ugt i64 %sub, 7
62-
br i1 %exitcond.not, label %while.body, label %while.loopexit
46+
b1:
47+
%cmp1 = icmp ult i16 %a, 2
48+
br i1 %cmp1, label %exit, label %preheader
6349

64-
while.loopexit:
65-
%sub.exit = phi i64 [ %sub, %while.body ]
66-
br label %epilogue.preheader
50+
b2:
51+
%cmp2 = icmp ult i16 %b, 5
52+
br i1 %cmp2, label %exit, label %preheader
6753

68-
epilogue.preheader:
69-
%count.epilogue = phi i64 [ %count, %entry ], [ %sub.exit, %while.loopexit ]
70-
%epilogue.cmp = icmp eq i64 %count.epilogue, 0
71-
br i1 %epilogue.cmp, label %exit, label %epilogue
54+
preheader:
55+
%count = phi i16 [ %a, %b1 ], [ %b, %b2 ]
56+
%cmp3 = icmp ule i16 %count, 20
57+
br i1 %cmp3, label %loop, label %exit
7258

73-
epilogue:
74-
%iv.epilogue = phi i64 [ %dec, %epilogue ], [ %count.epilogue, %epilogue.preheader ]
75-
%dec = add i64 %iv.epilogue, -1
76-
%exitcond.epilogue = icmp eq i64 %dec, 0
77-
br i1 %exitcond.epilogue, label %exit, label %epilogue
59+
loop:
60+
%iv = phi i16 [ %iv.next, %loop ], [ %count, %preheader ]
61+
%iv.next = add i16 %iv, 1
62+
%exitcond = icmp eq i16 %iv.next, 22
63+
br i1 %exitcond, label %exit, label %loop
7864

7965
exit:
8066
ret void
8167
}
8268

83-
define void @slt(i16 %a, i16 %b, i1 %c) {
84-
; CHECK-LABEL: 'slt'
85-
; CHECK-NEXT: Determining loop execution counts for: @slt
86-
; CHECK-NEXT: Loop %loop: backedge-taken count is (63 + (-1 * %count))
87-
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 -32704
88-
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (63 + (-1 * %count))
69+
define void @sgt(i16 %a, i16 %b, i1 %c) {
70+
; CHECK-LABEL: 'sgt'
71+
; CHECK-NEXT: Determining loop execution counts for: @sgt
72+
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %count)
73+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 9
74+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + %count)
8975
; CHECK-NEXT: Loop %loop: Trip multiple is 1
9076
entry:
9177
br i1 %c, label %b1, label %b2
9278

9379
b1:
94-
%cmp1 = icmp slt i16 %a, 8
95-
br i1 %cmp1, label %preheader, label %exit
80+
%cmp1 = icmp sgt i16 %a, 10
81+
br i1 %cmp1, label %exit, label %preheader
9682

9783
b2:
98-
%cmp2 = icmp slt i16 %b, 8
99-
br i1 %cmp2, label %preheader, label %exit
84+
%cmp2 = icmp sgt i16 %b, 8
85+
br i1 %cmp2, label %exit, label %preheader
10086

10187
preheader:
10288
%count = phi i16 [ %a, %b1 ], [ %b, %b2 ]
103-
br label %loop
89+
%cmp3 = icmp sge i16 %count, 1
90+
br i1 %cmp3, label %loop, label %exit
10491

10592
loop:
10693
%iv = phi i16 [ %iv.next, %loop ], [ %count, %preheader ]
107-
%iv.next = add i16 %iv, 1
108-
%exitcond = icmp slt i16 %iv.next, 64
109-
br i1 %exitcond, label %loop, label %exit
94+
%iv.next = add i16 %iv, -1
95+
%exitcond = icmp eq i16 %iv.next, 0
96+
br i1 %exitcond, label %exit, label %loop
11097

11198
exit:
11299
ret void
113100
}
114101

115-
define void @ult(i16 %a, i16 %b, i1 %c) {
116-
; CHECK-LABEL: 'ult'
117-
; CHECK-NEXT: Determining loop execution counts for: @ult
118-
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %count)
119-
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 -2
120-
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + %count)
102+
define void @ugt(i16 %a, i16 %b, i1 %c) {
103+
; CHECK-LABEL: 'ugt'
104+
; CHECK-NEXT: Determining loop execution counts for: @ugt
105+
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %count)<nsw>
106+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 10
107+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + %count)<nsw>
121108
; CHECK-NEXT: Loop %loop: Trip multiple is 1
122109
entry:
123110
br i1 %c, label %b1, label %b2
124111

125112
b1:
126-
%cmp1 = icmp ult i16 %a, 8
113+
%cmp1 = icmp ugt i16 %a, 11
127114
br i1 %cmp1, label %exit, label %preheader
128115

129116
b2:
130-
%cmp2 = icmp ult i16 %b, 8
117+
%cmp2 = icmp ugt i16 %b, 7
131118
br i1 %cmp2, label %exit, label %preheader
132119

133120
preheader:
134121
%count = phi i16 [ %a, %b1 ], [ %b, %b2 ]
135-
br label %loop
122+
%cmp3 = icmp ne i16 %count, 0
123+
br i1 %cmp3, label %loop, label %exit
136124

137125
loop:
138126
%iv = phi i16 [ %iv.next, %loop ], [ %count, %preheader ]
@@ -144,66 +132,147 @@ exit:
144132
ret void
145133
}
146134

147-
define void @sgt(i16 %a, i16 %b, i1 %c) {
148-
; CHECK-LABEL: 'sgt'
149-
; CHECK-NEXT: Determining loop execution counts for: @sgt
150-
; CHECK-NEXT: Loop %loop: backedge-taken count is %count
151-
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 32767
152-
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is %count
135+
define void @three_incoming(i16 %a, i16 %b, i1 %c, i1 %d) {
136+
; CHECK-LABEL: 'three_incoming'
137+
; CHECK-NEXT: Determining loop execution counts for: @three_incoming
138+
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %count)<nsw>
139+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 11
140+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + %count)<nsw>
153141
; CHECK-NEXT: Loop %loop: Trip multiple is 1
154142
entry:
155-
br i1 %c, label %b1, label %b2
143+
br i1 %c, label %b1, label %entry2
144+
145+
entry2:
146+
br i1 %d, label %b2, label %b3
156147

157148
b1:
158-
%cmp1 = icmp sgt i16 %a, 8
159-
br i1 %cmp1, label %preheader, label %exit
149+
%cmp1 = icmp ugt i16 %a, 10
150+
br i1 %cmp1, label %exit, label %preheader
160151

161152
b2:
162-
%cmp2 = icmp sgt i16 %b, 8
163-
br i1 %cmp2, label %preheader, label %exit
153+
%cmp2 = icmp ugt i16 %b, 8
154+
br i1 %cmp2, label %exit, label %preheader
155+
156+
b3:
157+
%cmp3 = icmp ugt i16 %b, 12
158+
br i1 %cmp3, label %exit, label %preheader
164159

165160
preheader:
166-
%count = phi i16 [ %a, %b1 ], [ %b, %b2 ]
167-
br label %loop
161+
%count = phi i16 [ %a, %b1 ], [ %b, %b2 ], [ %b, %b3 ]
162+
%cmp4 = icmp ne i16 %count, 0
163+
br i1 %cmp4, label %loop, label %exit
168164

169165
loop:
170166
%iv = phi i16 [ %iv.next, %loop ], [ %count, %preheader ]
171167
%iv.next = add i16 %iv, -1
172-
%exitcond = icmp slt i16 %iv.next, 0
168+
%exitcond = icmp eq i16 %iv.next, 0
173169
br i1 %exitcond, label %exit, label %loop
174170

175171
exit:
176172
ret void
177173
}
178174

179-
180175
define void @mixed(i16 %a, i16 %b, i1 %c) {
181176
; CHECK-LABEL: 'mixed'
182177
; CHECK-NEXT: Determining loop execution counts for: @mixed
183-
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + (-1 * %count) + (64 smax (1 + %count)))
184-
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 -32704
185-
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + (-1 * %count) + (64 smax (1 + %count)))
178+
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %count)
179+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 -2
180+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + %count)
186181
; CHECK-NEXT: Loop %loop: Trip multiple is 1
187182
entry:
188183
br i1 %c, label %b1, label %b2
189184

190185
b1:
191-
%cmp1 = icmp slt i16 %a, 8
192-
br i1 %cmp1, label %preheader, label %exit
186+
%cmp1 = icmp ugt i16 %a, 10
187+
br i1 %cmp1, label %exit, label %preheader
193188

194189
b2:
195-
%cmp2 = icmp ult i16 %b, 8
196-
br i1 %cmp2, label %preheader, label %exit
190+
%cmp2 = icmp sgt i16 %b, 8
191+
br i1 %cmp2, label %exit, label %preheader
197192

198193
preheader:
199194
%count = phi i16 [ %a, %b1 ], [ %b, %b2 ]
200-
br label %loop
195+
%cmp3 = icmp ne i16 %count, 0
196+
br i1 %cmp3, label %loop, label %exit
201197

202198
loop:
203199
%iv = phi i16 [ %iv.next, %loop ], [ %count, %preheader ]
204-
%iv.next = add i16 %iv, 1
205-
%exitcond = icmp slt i16 %iv.next, 64
206-
br i1 %exitcond, label %loop, label %exit
200+
%iv.next = add i16 %iv, -1
201+
%exitcond = icmp eq i16 %iv.next, 0
202+
br i1 %exitcond, label %exit, label %loop
203+
204+
exit:
205+
ret void
206+
}
207+
208+
define void @one_constant(i16 %a, i16 %b, i1 %c, i16 %d) {
209+
; CHECK-LABEL: 'one_constant'
210+
; CHECK-NEXT: Determining loop execution counts for: @one_constant
211+
; CHECK-NEXT: Loop %loop: backedge-taken count is (-1 + %count)
212+
; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i16 -2
213+
; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is (-1 + %count)
214+
; CHECK-NEXT: Loop %loop: Trip multiple is 1
215+
entry:
216+
br i1 %c, label %b1, label %b2
217+
218+
b1:
219+
%cmp1 = icmp ugt i16 %a, 10
220+
br i1 %cmp1, label %exit, label %preheader
221+
222+
b2:
223+
%cmp2 = icmp ugt i16 %b, %d
224+
br i1 %cmp2, label %exit, label %preheader
225+
226+
preheader:
227+
%count = phi i16 [ %a, %b1 ], [ %b, %b2 ]
228+
%cmp3 = icmp ne i16 %count, 0
229+
br i1 %cmp3, label %loop, label %exit
230+
231+
loop:
232+
%iv = phi i16 [ %iv.next, %loop ], [ %count, %preheader ]
233+
%iv.next = add i16 %iv, -1
234+
%exitcond = icmp eq i16 %iv.next, 0
235+
br i1 %exitcond, label %exit, label %loop
236+
237+
exit:
238+
ret void
239+
}
240+
241+
define void @epilogue(i64 %count) {
242+
; CHECK-LABEL: 'epilogue'
243+
; CHECK-NEXT: Determining loop execution counts for: @epilogue
244+
; CHECK-NEXT: Loop %epilogue: backedge-taken count is (-1 + %count.epilogue)
245+
; CHECK-NEXT: Loop %epilogue: constant max backedge-taken count is i64 6
246+
; CHECK-NEXT: Loop %epilogue: symbolic max backedge-taken count is (-1 + %count.epilogue)
247+
; CHECK-NEXT: Loop %epilogue: Trip multiple is 1
248+
; CHECK-NEXT: Loop %while.body: backedge-taken count is ((-8 + %count) /u 8)
249+
; CHECK-NEXT: Loop %while.body: constant max backedge-taken count is i64 2305843009213693951
250+
; CHECK-NEXT: Loop %while.body: symbolic max backedge-taken count is ((-8 + %count) /u 8)
251+
; CHECK-NEXT: Loop %while.body: Trip multiple is 1
252+
entry:
253+
%cmp = icmp ugt i64 %count, 7
254+
br i1 %cmp, label %while.body, label %epilogue.preheader
255+
256+
while.body:
257+
%iv = phi i64 [ %sub, %while.body ], [ %count, %entry ]
258+
%sub = add i64 %iv, -8
259+
%exitcond.not = icmp ugt i64 %sub, 7
260+
br i1 %exitcond.not, label %while.body, label %while.loopexit
261+
262+
while.loopexit:
263+
%sub.exit = phi i64 [ %sub, %while.body ]
264+
br label %epilogue.preheader
265+
266+
epilogue.preheader:
267+
%count.epilogue = phi i64 [ %count, %entry ], [ %sub.exit, %while.loopexit ]
268+
%epilogue.cmp = icmp eq i64 %count.epilogue, 0
269+
br i1 %epilogue.cmp, label %exit, label %epilogue
270+
271+
epilogue:
272+
%iv.epilogue = phi i64 [ %dec, %epilogue ], [ %count.epilogue, %epilogue.preheader ]
273+
%dec = add i64 %iv.epilogue, -1
274+
%exitcond.epilogue = icmp eq i64 %dec, 0
275+
br i1 %exitcond.epilogue, label %exit, label %epilogue
207276

208277
exit:
209278
ret void

0 commit comments

Comments
 (0)