1*9880d681SAndroid Build Coastguard Worker; RUN: opt -loop-unroll -debug-only=loop-unroll -disable-output < %s 2*9880d681SAndroid Build Coastguard Worker; REQUIRES: asserts 3*9880d681SAndroid Build Coastguard Worker; Compile this test with debug flag on to verify domtree right after loop unrolling. 4*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; PR27157 7*9880d681SAndroid Build Coastguard Workerdefine void @foo() { 8*9880d681SAndroid Build Coastguard Workerentry: 9*9880d681SAndroid Build Coastguard Worker br label %loop_header 10*9880d681SAndroid Build Coastguard Workerloop_header: 11*9880d681SAndroid Build Coastguard Worker %iv = phi i64 [ 0, %entry ], [ %iv_next, %loop_latch ] 12*9880d681SAndroid Build Coastguard Worker br i1 undef, label %loop_latch, label %loop_exiting_bb1 13*9880d681SAndroid Build Coastguard Workerloop_exiting_bb1: 14*9880d681SAndroid Build Coastguard Worker br i1 false, label %loop_exiting_bb2, label %exit1.loopexit 15*9880d681SAndroid Build Coastguard Workerloop_exiting_bb2: 16*9880d681SAndroid Build Coastguard Worker br i1 false, label %loop_latch, label %bb 17*9880d681SAndroid Build Coastguard Workerbb: 18*9880d681SAndroid Build Coastguard Worker br label %exit1 19*9880d681SAndroid Build Coastguard Workerloop_latch: 20*9880d681SAndroid Build Coastguard Worker %iv_next = add nuw nsw i64 %iv, 1 21*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i64 %iv_next, 2 22*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %loop_header, label %exit2 23*9880d681SAndroid Build Coastguard Workerexit1.loopexit: 24*9880d681SAndroid Build Coastguard Worker br label %exit1 25*9880d681SAndroid Build Coastguard Workerexit1: 26*9880d681SAndroid Build Coastguard Worker ret void 27*9880d681SAndroid Build Coastguard Workerexit2: 28*9880d681SAndroid Build Coastguard Worker ret void 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine void @foo2() { 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker br label %loop.header 34*9880d681SAndroid Build Coastguard Workerloop.header: 35*9880d681SAndroid Build Coastguard Worker %iv = phi i32 [ 0, %entry ], [ %iv.inc, %latch ] 36*9880d681SAndroid Build Coastguard Worker %iv.inc = add i32 %iv, 1 37*9880d681SAndroid Build Coastguard Worker br i1 undef, label %diamond, label %latch 38*9880d681SAndroid Build Coastguard Workerdiamond: 39*9880d681SAndroid Build Coastguard Worker br i1 undef, label %left, label %right 40*9880d681SAndroid Build Coastguard Workerleft: 41*9880d681SAndroid Build Coastguard Worker br i1 undef, label %exit, label %merge 42*9880d681SAndroid Build Coastguard Workerright: 43*9880d681SAndroid Build Coastguard Worker br i1 undef, label %exit, label %merge 44*9880d681SAndroid Build Coastguard Workermerge: 45*9880d681SAndroid Build Coastguard Worker br label %latch 46*9880d681SAndroid Build Coastguard Workerlatch: 47*9880d681SAndroid Build Coastguard Worker %end.cond = icmp eq i32 %iv, 1 48*9880d681SAndroid Build Coastguard Worker br i1 %end.cond, label %exit1, label %loop.header 49*9880d681SAndroid Build Coastguard Workerexit: 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Workerexit1: 52*9880d681SAndroid Build Coastguard Worker ret void 53*9880d681SAndroid Build Coastguard Worker} 54