2
2
; RUN: opt < %s -disable-output -passes="print<scalar-evolution>" \
3
3
; RUN: -scalar-evolution-classify-expressions=0 2>&1 | FileCheck %s
4
4
5
- define void @implied1 (i32 %n ) {
6
- ; Prove that (n s> 1) ===> (n / 2 s> 0).
7
- ; CHECK-LABEL: 'implied1'
8
- ; CHECK-NEXT: Determining loop execution counts for: @implied1
5
+ declare void @llvm.experimental.guard (i1 , ...)
6
+
7
+ define void @test_1 (i32 %n ) nounwind {
8
+ ; Prove that (n > 1) ===> (n / 2 > 0).
9
+ ; CHECK-LABEL: 'test_1'
10
+ ; CHECK-NEXT: Determining loop execution counts for: @test_1
9
11
; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + %n.div.2)<nsw>
10
12
; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
11
13
; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + %n.div.2)<nsw>
@@ -27,35 +29,10 @@ exit:
27
29
ret void
28
30
}
29
31
30
- define void @implied1_samesign (i32 %n ) {
31
- ; Prove that (n > 1) ===> (n / 2 s> 0).
32
- ; CHECK-LABEL: 'implied1_samesign'
33
- ; CHECK-NEXT: Determining loop execution counts for: @implied1_samesign
34
- ; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + %n.div.2)<nsw>
35
- ; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
36
- ; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + %n.div.2)<nsw>
37
- ; CHECK-NEXT: Loop %header: Trip multiple is 1
38
- ;
39
- entry:
40
- %cmp1 = icmp samesign ugt i32 %n , 1
41
- %n.div.2 = sdiv i32 %n , 2
42
- call void @llvm.assume (i1 %cmp1 )
43
- br label %header
44
-
45
- header:
46
- %indvar = phi i32 [ %indvar.next , %header ], [ 0 , %entry ]
47
- %indvar.next = add i32 %indvar , 1
48
- %exitcond = icmp sgt i32 %n.div.2 , %indvar.next
49
- br i1 %exitcond , label %header , label %exit
50
-
51
- exit:
52
- ret void
53
- }
54
-
55
- define void @implied1_neg (i32 %n ) {
56
- ; Prove that (n s> 0) =\=> (n / 2 s> 0).
57
- ; CHECK-LABEL: 'implied1_neg'
58
- ; CHECK-NEXT: Determining loop execution counts for: @implied1_neg
32
+ define void @test_1neg (i32 %n ) nounwind {
33
+ ; Prove that (n > 0) =\=> (n / 2 > 0).
34
+ ; CHECK-LABEL: 'test_1neg'
35
+ ; CHECK-NEXT: Determining loop execution counts for: @test_1neg
59
36
; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
60
37
; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
61
38
; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
@@ -77,10 +54,10 @@ exit:
77
54
ret void
78
55
}
79
56
80
- define void @implied2 (i32 %n ) {
81
- ; Prove that (n s >= 2) ===> (n / 2 s > 0).
82
- ; CHECK-LABEL: 'implied2 '
83
- ; CHECK-NEXT: Determining loop execution counts for: @implied2
57
+ define void @test_2 (i32 %n ) nounwind {
58
+ ; Prove that (n >= 2) ===> (n / 2 > 0).
59
+ ; CHECK-LABEL: 'test_2 '
60
+ ; CHECK-NEXT: Determining loop execution counts for: @test_2
84
61
; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + %n.div.2)<nsw>
85
62
; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
86
63
; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + %n.div.2)<nsw>
@@ -102,35 +79,10 @@ exit:
102
79
ret void
103
80
}
104
81
105
- define void @implied2_samesign (i32 %n ) {
106
- ; Prove that (n >= 2) ===> (n / 2 s> 0).
107
- ; CHECK-LABEL: 'implied2_samesign'
108
- ; CHECK-NEXT: Determining loop execution counts for: @implied2_samesign
109
- ; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
110
- ; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
111
- ; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
112
- ; CHECK-NEXT: Loop %header: Trip multiple is 1
113
- ;
114
- entry:
115
- %cmp1 = icmp samesign uge i32 %n , 2
116
- %n.div.2 = sdiv i32 %n , 2
117
- call void @llvm.assume (i1 %cmp1 )
118
- br label %header
119
-
120
- header:
121
- %indvar = phi i32 [ %indvar.next , %header ], [ 0 , %entry ]
122
- %indvar.next = add i32 %indvar , 1
123
- %exitcond = icmp sgt i32 %n.div.2 , %indvar.next
124
- br i1 %exitcond , label %header , label %exit
125
-
126
- exit:
127
- ret void
128
- }
129
-
130
- define void @implied2_neg (i32 %n ) {
131
- ; Prove that (n s>= 1) =\=> (n / 2 s> 0).
132
- ; CHECK-LABEL: 'implied2_neg'
133
- ; CHECK-NEXT: Determining loop execution counts for: @implied2_neg
82
+ define void @test_2neg (i32 %n ) nounwind {
83
+ ; Prove that (n >= 1) =\=> (n / 2 > 0).
84
+ ; CHECK-LABEL: 'test_2neg'
85
+ ; CHECK-NEXT: Determining loop execution counts for: @test_2neg
134
86
; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
135
87
; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
136
88
; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
@@ -152,10 +104,10 @@ exit:
152
104
ret void
153
105
}
154
106
155
- define void @implied3 (i32 %n ) {
156
- ; Prove that (n s > -2) ===> (n / 2 s >= 0).
157
- ; CHECK-LABEL: 'implied3 '
158
- ; CHECK-NEXT: Determining loop execution counts for: @implied3
107
+ define void @test_3 (i32 %n ) nounwind {
108
+ ; Prove that (n > -2) ===> (n / 2 >= 0).
109
+ ; CHECK-LABEL: 'test_3 '
110
+ ; CHECK-NEXT: Determining loop execution counts for: @test_3
159
111
; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>
160
112
; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824
161
113
; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>
@@ -177,35 +129,10 @@ exit:
177
129
ret void
178
130
}
179
131
180
- define void @implied3_samesign (i32 %n ) {
181
- ; Prove that (n > -2) ===> (n / 2 s>= 0).
182
- ; CHECK-LABEL: 'implied3_samesign'
183
- ; CHECK-NEXT: Determining loop execution counts for: @implied3_samesign
184
- ; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>
185
- ; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1
186
- ; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>
187
- ; CHECK-NEXT: Loop %header: Trip multiple is 1
188
- ;
189
- entry:
190
- %cmp1 = icmp samesign ugt i32 %n , -2
191
- %n.div.2 = sdiv i32 %n , 2
192
- call void @llvm.assume (i1 %cmp1 )
193
- br label %header
194
-
195
- header:
196
- %indvar = phi i32 [ %indvar.next , %header ], [ 0 , %entry ]
197
- %indvar.next = add i32 %indvar , 1
198
- %exitcond = icmp sge i32 %n.div.2 , %indvar
199
- br i1 %exitcond , label %header , label %exit
200
-
201
- exit:
202
- ret void
203
- }
204
-
205
- define void @implied3_neg (i32 %n ) {
132
+ define void @test_3neg (i32 %n ) nounwind {
206
133
; Prove that (n > -3) =\=> (n / 2 >= 0).
207
- ; CHECK-LABEL: 'implied3_neg '
208
- ; CHECK-NEXT: Determining loop execution counts for: @implied3_neg
134
+ ; CHECK-LABEL: 'test_3neg '
135
+ ; CHECK-NEXT: Determining loop execution counts for: @test_3neg
209
136
; CHECK-NEXT: Loop %header: backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)
210
137
; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824
211
138
; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)
@@ -227,10 +154,10 @@ exit:
227
154
ret void
228
155
}
229
156
230
- define void @implied4 (i32 %n ) {
231
- ; Prove that (n s >= -1) ===> (n / 2 s >= 0).
232
- ; CHECK-LABEL: 'implied4 '
233
- ; CHECK-NEXT: Determining loop execution counts for: @implied4
157
+ define void @test_4 (i32 %n ) nounwind {
158
+ ; Prove that (n >= -1) ===> (n / 2 >= 0).
159
+ ; CHECK-LABEL: 'test_4 '
160
+ ; CHECK-NEXT: Determining loop execution counts for: @test_4
234
161
; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>
235
162
; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824
236
163
; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>
@@ -252,35 +179,10 @@ exit:
252
179
ret void
253
180
}
254
181
255
- define void @implied4_samesign (i32 %n ) {
256
- ; Prove that (n >= -1) ===> (n / 2 s>= 0).
257
- ; CHECK-LABEL: 'implied4_samesign'
258
- ; CHECK-NEXT: Determining loop execution counts for: @implied4_samesign
259
- ; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>
260
- ; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1
261
- ; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>
262
- ; CHECK-NEXT: Loop %header: Trip multiple is 1
263
- ;
264
- entry:
265
- %cmp1 = icmp samesign uge i32 %n , -1
266
- %n.div.2 = sdiv i32 %n , 2
267
- call void @llvm.assume (i1 %cmp1 )
268
- br label %header
269
-
270
- header:
271
- %indvar = phi i32 [ %indvar.next , %header ], [ 0 , %entry ]
272
- %indvar.next = add i32 %indvar , 1
273
- %exitcond = icmp sge i32 %n.div.2 , %indvar
274
- br i1 %exitcond , label %header , label %exit
275
-
276
- exit:
277
- ret void
278
- }
279
-
280
- define void @implied4_neg (i32 %n ) {
281
- ; Prove that (n s>= -2) =\=> (n / 2 s>= 0).
282
- ; CHECK-LABEL: 'implied4_neg'
283
- ; CHECK-NEXT: Determining loop execution counts for: @implied4_neg
182
+ define void @test_4neg (i32 %n ) nounwind {
183
+ ; Prove that (n >= -2) =\=> (n / 2 >= 0).
184
+ ; CHECK-LABEL: 'test_4neg'
185
+ ; CHECK-NEXT: Determining loop execution counts for: @test_4neg
284
186
; CHECK-NEXT: Loop %header: backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)
285
187
; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824
286
188
; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)
0 commit comments