1; RUN: llvm-as < %s | llvm-dis > %t1.ll
2; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
3; RUN: diff %t1.ll %t2.ll
4
5;; This is an irreducible flow graph
6define void @irreducible(i1 %cond) {
7        br i1 %cond, label %X, label %Y
8
9X:              ; preds = %Y, %0
10        br label %Y
11
12Y:              ; preds = %X, %0
13        br label %X
14}
15
16;; This is a pair of loops that share the same header
17define void @sharedheader(i1 %cond) {
18        br label %A
19
20A:              ; preds = %Y, %X, %0
21        br i1 %cond, label %X, label %Y
22
23X:              ; preds = %A
24        br label %A
25
26Y:              ; preds = %A
27        br label %A
28}
29
30
31;; This is a simple nested loop
32define void @nested(i1 %cond1, i1 %cond2, i1 %cond3) {
33        br label %Loop1
34
35Loop1:          ; preds = %L2Exit, %0
36        br label %Loop2
37
38Loop2:          ; preds = %L3Exit, %Loop1
39        br label %Loop3
40
41Loop3:          ; preds = %Loop3, %Loop2
42        br i1 %cond3, label %Loop3, label %L3Exit
43
44L3Exit:         ; preds = %Loop3
45        br i1 %cond2, label %Loop2, label %L2Exit
46
47L2Exit:         ; preds = %L3Exit
48        br i1 %cond1, label %Loop1, label %L1Exit
49
50L1Exit:         ; preds = %L2Exit
51        ret void
52}
53
54