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