1; RUN: opt < %s -scalar-evolution -analyze | FileCheck %s
2
3; One side exit dominating the latch, exact backedge taken count is known.
4define void @test_01() {
5
6; CHECK-LABEL: Determining loop execution counts for: @test_01
7; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is 50
8
9entry:
10  br label %loop
11
12loop:
13  %iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
14  %side.cond = icmp slt i32 %iv, 50
15  br i1 %side.cond, label %backedge, label %side.exit
16
17backedge:
18  %iv.next = add i32 %iv, 1
19  %loop.cond = icmp slt i32 %iv, 100
20  br i1 %loop.cond, label %loop, label %exit
21
22exit:
23  ret void
24
25side.exit:
26  ret void
27}
28
29define void @test_02(i1 %c) {
30
31; CHECK-LABEL: Determining loop execution counts for: @test_02
32; CHECK-NEXT:  Loop %loop: <multiple exits> backedge-taken count is 50
33
34entry:
35  br label %loop
36
37loop:
38  %iv = phi i32 [ 0, %entry ], [ %iv.next, %backedge ]
39  br i1 %c, label %if.true, label %if.false
40
41if.true:
42  br label %merge
43
44if.false:
45  br label %merge
46
47merge:
48  %side.cond = icmp slt i32 %iv, 50
49  br i1 %side.cond, label %backedge, label %side.exit
50
51backedge:
52  %iv.next = add i32 %iv, 1
53  %loop.cond = icmp slt i32 %iv, 100
54  br i1 %loop.cond, label %loop, label %exit
55
56exit:
57  ret void
58
59side.exit:
60  ret void
61}
62