22; RUN: opt < %s -disable-output -passes="print<scalar-evolution>" \
33; RUN: -scalar-evolution-classify-expressions=0 2>&1 | FileCheck %s
44
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
911; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + %n.div.2)<nsw>
1012; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
1113; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + %n.div.2)<nsw>
@@ -27,35 +29,10 @@ exit:
2729 ret void
2830}
2931
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
5936; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
6037; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
6138; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
@@ -77,10 +54,10 @@ exit:
7754 ret void
7855}
7956
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
8461; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + %n.div.2)<nsw>
8562; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
8663; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + %n.div.2)<nsw>
@@ -102,35 +79,10 @@ exit:
10279 ret void
10380}
10481
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
13486; CHECK-NEXT: Loop %header: backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
13587; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741822
13688; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (-1 + (1 smax %n.div.2))<nsw>
@@ -152,10 +104,10 @@ exit:
152104 ret void
153105}
154106
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
159111; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>
160112; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824
161113; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>
@@ -177,35 +129,10 @@ exit:
177129 ret void
178130}
179131
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 {
206133; 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
209136; CHECK-NEXT: Loop %header: backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)
210137; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824
211138; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)
@@ -227,10 +154,10 @@ exit:
227154 ret void
228155}
229156
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
234161; CHECK-NEXT: Loop %header: backedge-taken count is (1 + %n.div.2)<nsw>
235162; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824
236163; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (1 + %n.div.2)<nsw>
@@ -252,35 +179,10 @@ exit:
252179 ret void
253180}
254181
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
284186; CHECK-NEXT: Loop %header: backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)
285187; CHECK-NEXT: Loop %header: constant max backedge-taken count is i32 1073741824
286188; CHECK-NEXT: Loop %header: symbolic max backedge-taken count is (0 smax (1 + %n.div.2)<nsw>)
0 commit comments