1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -passes=loop-unroll -unroll-peel-count=1 < %s | FileCheck %s 3 4declare zeroext i8 @patatino() 5 6define fastcc void @tinky() { 7; CHECK-LABEL: @tinky( 8; CHECK-NEXT: entry: 9; CHECK-NEXT: br label [[NEXT:%.*]] 10; CHECK: loopexit.loopexit: 11; CHECK-NEXT: br label [[LOOPEXIT:%.*]] 12; CHECK: loopexit: 13; CHECK-NEXT: ret void 14; CHECK: next: 15; CHECK-NEXT: br label [[LOOP_PEEL_BEGIN:%.*]] 16; CHECK: loop.peel.begin: 17; CHECK-NEXT: br label [[LOOP_PEEL:%.*]] 18; CHECK: loop.peel: 19; CHECK-NEXT: [[CALL593_PEEL:%.*]] = tail call zeroext i8 @patatino() 20; CHECK-NEXT: br i1 false, label [[LOOP_PEEL_NEXT:%.*]], label [[LOOPEXIT]] 21; CHECK: loop.peel.next: 22; CHECK-NEXT: br label [[LOOP_PEEL_NEXT1:%.*]] 23; CHECK: loop.peel.next1: 24; CHECK-NEXT: br label [[NEXT_PEEL_NEWPH:%.*]] 25; CHECK: next.peel.newph: 26; CHECK-NEXT: br label [[LOOP:%.*]] 27; CHECK: loop: 28; CHECK-NEXT: [[CALL593:%.*]] = tail call zeroext i8 @patatino() 29; CHECK-NEXT: br i1 false, label [[LOOP]], label [[LOOPEXIT_LOOPEXIT:%.*]], !llvm.loop [[LOOP0:![0-9]+]] 30; 31entry: 32 br label %next 33 34loopexit: 35 ret void 36 37next: 38 br label %loop 39 40loop: 41 %a = phi i8 [ undef, %next ], [ %call593, %loop ] 42 %b = phi i32 [ 0, %next ], [ 1, %loop ] 43 %call593 = tail call zeroext i8 @patatino() 44 br i1 false, label %loop, label %loopexit 45} 46 47define void @tinky2() { 48; CHECK-LABEL: @tinky2( 49; CHECK-NEXT: entry: 50; CHECK-NEXT: br label [[NEXT:%.*]] 51; CHECK: loopexit.loopexit: 52; CHECK-NEXT: br label [[LOOPEXIT:%.*]] 53; CHECK: loopexit: 54; CHECK-NEXT: ret void 55; CHECK: next: 56; CHECK-NEXT: br label [[LOOP_PEEL_BEGIN:%.*]] 57; CHECK: loop.peel.begin: 58; CHECK-NEXT: br label [[LOOP_PEEL:%.*]] 59; CHECK: loop.peel: 60; CHECK-NEXT: [[CALL593_PEEL:%.*]] = tail call zeroext i8 @patatino() 61; CHECK-NEXT: [[B_NEXT_PEEL:%.*]] = add i32 0, 1 62; CHECK-NEXT: [[COND_PEEL:%.*]] = icmp ne i32 0, 30 63; CHECK-NEXT: br i1 [[COND_PEEL]], label [[LOOP_PEEL_NEXT:%.*]], label [[LOOPEXIT]] 64; CHECK: loop.peel.next: 65; CHECK-NEXT: br label [[LOOP_PEEL_NEXT1:%.*]] 66; CHECK: loop.peel.next1: 67; CHECK-NEXT: br label [[NEXT_PEEL_NEWPH:%.*]] 68; CHECK: next.peel.newph: 69; CHECK-NEXT: br label [[LOOP:%.*]] 70; CHECK: loop: 71; CHECK-NEXT: [[B:%.*]] = phi i32 [ [[B_NEXT_PEEL]], [[NEXT_PEEL_NEWPH]] ], [ [[B_NEXT:%.*]], [[LOOP]] ] 72; CHECK-NEXT: [[CALL593:%.*]] = tail call zeroext i8 @patatino() 73; CHECK-NEXT: [[B_NEXT]] = add nuw nsw i32 [[B]], 1 74; CHECK-NEXT: [[COND:%.*]] = icmp ne i32 [[B]], 30 75; CHECK-NEXT: br i1 [[COND]], label [[LOOP]], label [[LOOPEXIT_LOOPEXIT:%.*]], !llvm.loop [[LOOP3:![0-9]+]] 76; 77entry: 78 br label %next 79 80loopexit: 81 ret void 82 83next: 84 br label %loop 85 86loop: 87 %a = phi i8 [ undef, %next ], [ %call593, %loop ] 88 %b = phi i32 [ 0, %next ], [ %b.next, %loop ] 89 %call593 = tail call zeroext i8 @patatino() 90 %b.next = add i32 %b, 1 91 %cond = icmp ne i32 %b, 30 92 br i1 %cond, label %loop, label %loopexit 93} 94