1; These tests have an infinite trip count.  We obviously shouldn't remove the
2; loops!  :)
3;
4; RUN: opt < %s -indvars -adce -simplifycfg -S | FileCheck %s
5
6;; test for (i = 1; i != 100; i += 2)
7define i32 @infinite_linear() {
8; CHECK-LABEL: @infinite_linear(
9entry:
10        br label %loop
11
12loop:           ; preds = %loop, %entry
13; CHECK-LABEL: loop:
14        %i = phi i32 [ 1, %entry ], [ %i.next, %loop ]          ; <i32> [#uses=3]
15        %i.next = add i32 %i, 2         ; <i32> [#uses=1]
16        %c = icmp ne i32 %i, 100                ; <i1> [#uses=1]
17; CHECK: icmp
18; CHECK: br
19        br i1 %c, label %loop, label %loopexit
20
21loopexit:               ; preds = %loop
22; CHECK-LABEL: loopexit:
23        ret i32 %i
24}
25
26;; test for (i = 1; i*i != 63; ++i)
27define i32 @infinite_quadratic() {
28; CHECK-LABEL: @infinite_quadratic(
29entry:
30        br label %loop
31
32loop:           ; preds = %loop, %entry
33; CHECK-LABEL: loop:
34        %i = phi i32 [ 1, %entry ], [ %i.next, %loop ]          ; <i32> [#uses=4]
35        %isquare = mul i32 %i, %i               ; <i32> [#uses=1]
36        %i.next = add i32 %i, 1         ; <i32> [#uses=1]
37        %c = icmp ne i32 %isquare, 63           ; <i1> [#uses=1]
38; CHECK: icmp
39; CHECK: br
40        br i1 %c, label %loop, label %loopexit
41
42loopexit:               ; preds = %loop
43; CHECK-LABEL: loopexit:
44        ret i32 %i
45}
46