xref: /aosp_15_r20/external/llvm/test/Transforms/LoopDeletion/multiple-exits.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -loop-deletion -S | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; Checks whether dead loops with multiple exits can be eliminated
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine void @foo(i64 %n, i64 %m) nounwind {
6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo(
7*9880d681SAndroid Build Coastguard Worker; CHECK:      entry:
8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   br label %return
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker; CHECK:      return:
11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:   ret void
12*9880d681SAndroid Build Coastguard Workerentry:
13*9880d681SAndroid Build Coastguard Worker  br label %bb
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerbb:
16*9880d681SAndroid Build Coastguard Worker  %x.0 = phi i64 [ 0, %entry ], [ %t0, %bb2 ]
17*9880d681SAndroid Build Coastguard Worker  %t0 = add i64 %x.0, 1
18*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt i64 %x.0, %n
19*9880d681SAndroid Build Coastguard Worker  br i1 %t1, label %bb2, label %return
20*9880d681SAndroid Build Coastguard Workerbb2:
21*9880d681SAndroid Build Coastguard Worker  %t2 = icmp slt i64 %x.0, %m
22*9880d681SAndroid Build Coastguard Worker  br i1 %t1, label %bb, label %return
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerreturn:
25*9880d681SAndroid Build Coastguard Worker  ret void
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdefine i64 @bar(i64 %n, i64 %m) nounwind {
29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  @bar(
30*9880d681SAndroid Build Coastguard Worker; CHECK: entry:
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  br label %return
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker; CHECK: return:
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ret i64 10
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerentry:
37*9880d681SAndroid Build Coastguard Worker  br label %bb
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerbb:
40*9880d681SAndroid Build Coastguard Worker  %x.0 = phi i64 [ 0, %entry ], [ %t0, %bb3 ]
41*9880d681SAndroid Build Coastguard Worker  %t0 = add i64 %x.0, 1
42*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt i64 %x.0, %n
43*9880d681SAndroid Build Coastguard Worker  br i1 %t1, label %bb2, label %return
44*9880d681SAndroid Build Coastguard Workerbb2:
45*9880d681SAndroid Build Coastguard Worker  %t2 = icmp slt i64 %x.0, %m
46*9880d681SAndroid Build Coastguard Worker  br i1 %t2, label %bb3, label %return
47*9880d681SAndroid Build Coastguard Workerbb3:
48*9880d681SAndroid Build Coastguard Worker  %t3 = icmp slt i64 %x.0, %m
49*9880d681SAndroid Build Coastguard Worker  br i1 %t3, label %bb, label %return
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerreturn:
52*9880d681SAndroid Build Coastguard Worker  %x.lcssa = phi i64 [ 10, %bb ], [ 10, %bb2 ], [ 10, %bb3 ]
53*9880d681SAndroid Build Coastguard Worker  ret i64 %x.lcssa
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerdefine i64 @baz(i64 %n, i64 %m) nounwind {
57*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL:  @baz(
58*9880d681SAndroid Build Coastguard Worker; CHECK: return:
59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  %x.lcssa = phi i64 [ 12, %bb ], [ 10, %bb2 ]
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:  ret i64 %x.lcssa
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerentry:
63*9880d681SAndroid Build Coastguard Worker  br label %bb
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workerbb:
66*9880d681SAndroid Build Coastguard Worker  %x.0 = phi i64 [ 0, %entry ], [ %t0, %bb3 ]
67*9880d681SAndroid Build Coastguard Worker  %t0 = add i64 %x.0, 1
68*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt i64 %x.0, %n
69*9880d681SAndroid Build Coastguard Worker  br i1 %t1, label %bb2, label %return
70*9880d681SAndroid Build Coastguard Workerbb2:
71*9880d681SAndroid Build Coastguard Worker  %t2 = icmp slt i64 %x.0, %m
72*9880d681SAndroid Build Coastguard Worker  br i1 %t2, label %bb3, label %return
73*9880d681SAndroid Build Coastguard Workerbb3:
74*9880d681SAndroid Build Coastguard Worker  %t3 = icmp slt i64 %x.0, %m
75*9880d681SAndroid Build Coastguard Worker  br i1 %t3, label %bb, label %return
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerreturn:
78*9880d681SAndroid Build Coastguard Worker  %x.lcssa = phi i64 [ 12, %bb ], [ 10, %bb2 ], [ 10, %bb3 ]
79*9880d681SAndroid Build Coastguard Worker  ret i64 %x.lcssa
80*9880d681SAndroid Build Coastguard Worker}
81