blob: 443da146e771d1c45e1cf069d4a9245148c00ab8 [file] [log] [blame]
Max Kazantsev7094c8d2018-03-27 07:30:38 +00001; 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}
Max Kazantsev58fce7e2018-05-03 02:37:55 +000028
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}