xref: /llvm-project/llvm/test/Analysis/MustExecute/pr57780.ll (revision 6b4809547e5fc77e6eccbb60276ad0cbd81b02fc)
1; RUN: opt -disable-output -passes=print-mustexecute < %s 2>&1 | FileCheck %s
2
3@c = global i16 0, align 2
4
5; CHECK-LABEL: define void @latch_cycle_irreducible
6; CHECK: store i16 5, ptr @c, align 2{{$}}
7define void @latch_cycle_irreducible() {
8entry:
9  br label %loop
10
11loop:                                             ; preds = %loop.latch, %entry
12  %v = phi i32 [ 10, %entry ], [ 0, %loop.latch ]
13  %c = icmp eq i32 %v, 0
14  br i1 %c, label %loop.exit, label %loop.cont
15
16loop.cont:                                        ; preds = %loop
17  br i1 false, label %loop.irreducible, label %loop.latch
18
19loop.irreducible:                                 ; preds = %loop.latch, %loop.cont
20  store i16 5, ptr @c, align 2
21  br label %loop.latch
22
23loop.latch:                                       ; preds = %loop.irreducible, %loop.cont
24  br i1 false, label %loop.irreducible, label %loop
25
26loop.exit:                                        ; preds = %loop
27  ret void
28}
29
30; CHECK-LABEL: define void @latch_cycle_reducible
31; CHECK: store i16 5, ptr @c, align 2{{$}}
32define void @latch_cycle_reducible() {
33entry:
34  br label %loop
35
36loop:                                             ; preds = %loop.latch, %entry
37  %v = phi i32 [ 10, %entry ], [ 0, %loop.latch ]
38  %c = icmp eq i32 %v, 0
39  br i1 %c, label %loop.exit, label %loop2
40
41loop2:                                            ; preds = %loop.latch, %loop
42  br i1 false, label %loop2.cont, label %loop.latch
43
44loop2.cont:                                       ; preds = %loop2
45  store i16 5, ptr @c, align 2
46  br label %loop.latch
47
48loop.latch:                                       ; preds = %loop2.cont, %loop2
49  br i1 false, label %loop2, label %loop
50
51loop.exit:                                        ; preds = %loop
52  ret void
53}
54