brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.5 KiB · c699450 Raw
357 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -S -passes=loop-unroll -unroll-peel-max-count=3 | FileCheck %s3 4declare void @foo(i32)5declare void @bar(i8)6 7define void @test_umin(i32 %N) {8; CHECK-LABEL: define void @test_umin(9; CHECK-SAME: i32 [[N:%.*]]) {10; CHECK-NEXT:  entry:11; CHECK-NEXT:    [[CMP5_NOT:%.*]] = icmp eq i32 [[N]], 012; CHECK-NEXT:    br i1 [[CMP5_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]13; CHECK:       for.body.preheader:14; CHECK-NEXT:    br label [[FOR_BODY_PEEL2:%.*]]15; CHECK:       for.body.peel.begin:16; CHECK-NEXT:    br label [[FOR_BODY_PEEL:%.*]]17; CHECK:       for.body.peel:18; CHECK-NEXT:    [[COND_PEEL:%.*]] = tail call i32 @llvm.umin.i32(i32 0, i32 2)19; CHECK-NEXT:    tail call void @foo(i32 [[COND_PEEL]])20; CHECK-NEXT:    [[INC_PEEL:%.*]] = add nuw i32 0, 121; CHECK-NEXT:    [[EXITCOND_NOT_PEEL:%.*]] = icmp eq i32 [[INC_PEEL]], [[N]]22; CHECK-NEXT:    br i1 [[EXITCOND_NOT_PEEL]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]], label [[FOR_BODY_PEEL_NEXT:%.*]]23; CHECK:       for.body.peel.next:24; CHECK-NEXT:    br label [[FOR_BODY_PEEL3:%.*]]25; CHECK:       for.body.peel2:26; CHECK-NEXT:    [[COND_PEEL3:%.*]] = tail call i32 @llvm.umin.i32(i32 [[INC_PEEL]], i32 2)27; CHECK-NEXT:    tail call void @foo(i32 [[COND_PEEL3]])28; CHECK-NEXT:    [[INC_PEEL4:%.*]] = add nuw i32 [[INC_PEEL]], 129; CHECK-NEXT:    [[EXITCOND_NOT_PEEL5:%.*]] = icmp eq i32 [[INC_PEEL4]], [[N]]30; CHECK-NEXT:    br i1 [[EXITCOND_NOT_PEEL5]], label [[FOR_COND_CLEANUP_LOOPEXIT]], label [[FOR_BODY_PEEL_NEXT1:%.*]]31; CHECK:       for.body.peel.next1:32; CHECK-NEXT:    br label [[FOR_BODY_PEEL_NEXT6:%.*]]33; CHECK:       for.body.peel.next6:34; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER_PEEL_NEWPH:%.*]]35; CHECK:       for.body.preheader.peel.newph:36; CHECK-NEXT:    br label [[FOR_BODY:%.*]]37; CHECK:       for.body:38; CHECK-NEXT:    [[I_06:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ [[INC_PEEL4]], [[FOR_BODY_PREHEADER_PEEL_NEWPH]] ]39; CHECK-NEXT:    tail call void @foo(i32 2)40; CHECK-NEXT:    [[INC]] = add nuw i32 [[I_06]], 141; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], [[N]]42; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP_LOOPEXIT_LOOPEXIT:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP0:![0-9]+]]43; CHECK:       for.cond.cleanup.loopexit.loopexit:44; CHECK-NEXT:    br label [[FOR_COND_CLEANUP_LOOPEXIT]]45; CHECK:       for.cond.cleanup.loopexit:46; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]47; CHECK:       for.cond.cleanup:48; CHECK-NEXT:    ret void49;50entry:51  %cmp5.not = icmp eq i32 %N, 052  br i1 %cmp5.not, label %for.cond.cleanup, label %for.body53 54for.body:55  %i.06 = phi i32 [ %inc, %for.body ], [ 0, %entry ]56  %cond = tail call i32 @llvm.umin.i32(i32 %i.06, i32 2)57  tail call void @foo(i32 %cond)58  %inc = add nuw i32 %i.06, 159  %exitcond.not = icmp eq i32 %inc, %N60  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body61 62for.cond.cleanup:63  ret void64}65 66define void @test_umax(i32 %N) {67; CHECK-LABEL: define void @test_umax(68; CHECK-SAME: i32 [[N:%.*]]) {69; CHECK-NEXT:  entry:70; CHECK-NEXT:    [[CMP5_NOT:%.*]] = icmp eq i32 [[N]], 071; CHECK-NEXT:    br i1 [[CMP5_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]72; CHECK:       for.body.preheader:73; CHECK-NEXT:    br label [[FOR_BODY_PEEL2:%.*]]74; CHECK:       for.body.peel.begin:75; CHECK-NEXT:    br label [[FOR_BODY_PEEL:%.*]]76; CHECK:       for.body.peel:77; CHECK-NEXT:    [[COND_PEEL:%.*]] = tail call i32 @llvm.umax.i32(i32 0, i32 2)78; CHECK-NEXT:    tail call void @foo(i32 [[COND_PEEL]])79; CHECK-NEXT:    [[INC_PEEL:%.*]] = add nuw i32 0, 180; CHECK-NEXT:    [[EXITCOND_NOT_PEEL:%.*]] = icmp eq i32 [[INC_PEEL]], [[N]]81; CHECK-NEXT:    br i1 [[EXITCOND_NOT_PEEL]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]], label [[FOR_BODY_PEEL_NEXT:%.*]]82; CHECK:       for.body.peel.next:83; CHECK-NEXT:    br label [[FOR_BODY_PEEL3:%.*]]84; CHECK:       for.body.peel2:85; CHECK-NEXT:    [[COND_PEEL3:%.*]] = tail call i32 @llvm.umax.i32(i32 [[INC_PEEL]], i32 2)86; CHECK-NEXT:    tail call void @foo(i32 [[COND_PEEL3]])87; CHECK-NEXT:    [[INC_PEEL4:%.*]] = add nuw i32 [[INC_PEEL]], 188; CHECK-NEXT:    [[EXITCOND_NOT_PEEL5:%.*]] = icmp eq i32 [[INC_PEEL4]], [[N]]89; CHECK-NEXT:    br i1 [[EXITCOND_NOT_PEEL5]], label [[FOR_COND_CLEANUP_LOOPEXIT]], label [[FOR_BODY_PEEL_NEXT1:%.*]]90; CHECK:       for.body.peel.next1:91; CHECK-NEXT:    br label [[FOR_BODY_PEEL_NEXT6:%.*]]92; CHECK:       for.body.peel.next6:93; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER_PEEL_NEWPH:%.*]]94; CHECK:       for.body.preheader.peel.newph:95; CHECK-NEXT:    br label [[FOR_BODY:%.*]]96; CHECK:       for.body:97; CHECK-NEXT:    [[I_06:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ [[INC_PEEL4]], [[FOR_BODY_PREHEADER_PEEL_NEWPH]] ]98; CHECK-NEXT:    tail call void @foo(i32 [[I_06]])99; CHECK-NEXT:    [[INC]] = add nuw i32 [[I_06]], 1100; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], [[N]]101; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP_LOOPEXIT_LOOPEXIT:%.*]], label [[FOR_BODY]], !llvm.loop [[LOOP2:![0-9]+]]102; CHECK:       for.cond.cleanup.loopexit.loopexit:103; CHECK-NEXT:    br label [[FOR_COND_CLEANUP_LOOPEXIT]]104; CHECK:       for.cond.cleanup.loopexit:105; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]106; CHECK:       for.cond.cleanup:107; CHECK-NEXT:    ret void108;109entry:110  %cmp5.not = icmp eq i32 %N, 0111  br i1 %cmp5.not, label %for.cond.cleanup, label %for.body112 113for.body:114  %i.06 = phi i32 [ %inc, %for.body ], [ 0, %entry ]115  %cond = tail call i32 @llvm.umax.i32(i32 %i.06, i32 2)116  tail call void @foo(i32 %cond)117  %inc = add nuw i32 %i.06, 1118  %exitcond.not = icmp eq i32 %inc, %N119  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body120 121for.cond.cleanup:122  ret void123}124 125define void @test_smax(i32 %N) {126; CHECK-LABEL: define void @test_smax(127; CHECK-SAME: i32 [[N:%.*]]) {128; CHECK-NEXT:  entry:129; CHECK-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[N]], 0130; CHECK-NEXT:    br i1 [[CMP5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]131; CHECK:       for.body.preheader:132; CHECK-NEXT:    br label [[FOR_BODY_PEEL2:%.*]]133; CHECK:       for.body.peel.begin:134; CHECK-NEXT:    br label [[FOR_BODY_PEEL:%.*]]135; CHECK:       for.body.peel:136; CHECK-NEXT:    [[COND_PEEL:%.*]] = tail call i32 @llvm.smax.i32(i32 0, i32 -2)137; CHECK-NEXT:    tail call void @foo(i32 [[COND_PEEL]])138; CHECK-NEXT:    [[DEC_PEEL:%.*]] = add nsw i32 0, -1139; CHECK-NEXT:    [[CMP_PEEL:%.*]] = icmp sgt i32 [[DEC_PEEL]], [[N]]140; CHECK-NEXT:    br i1 [[CMP_PEEL]], label [[FOR_BODY_PEEL_NEXT:%.*]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]]141; CHECK:       for.body.peel.next:142; CHECK-NEXT:    br label [[FOR_BODY_PEEL3:%.*]]143; CHECK:       for.body.peel2:144; CHECK-NEXT:    [[COND_PEEL3:%.*]] = tail call i32 @llvm.smax.i32(i32 [[DEC_PEEL]], i32 -2)145; CHECK-NEXT:    tail call void @foo(i32 [[COND_PEEL3]])146; CHECK-NEXT:    [[DEC_PEEL4:%.*]] = add nsw i32 [[DEC_PEEL]], -1147; CHECK-NEXT:    [[CMP_PEEL5:%.*]] = icmp sgt i32 [[DEC_PEEL4]], [[N]]148; CHECK-NEXT:    br i1 [[CMP_PEEL5]], label [[FOR_BODY_PEEL_NEXT1:%.*]], label [[FOR_COND_CLEANUP_LOOPEXIT]]149; CHECK:       for.body.peel.next1:150; CHECK-NEXT:    br label [[FOR_BODY_PEEL_NEXT6:%.*]]151; CHECK:       for.body.peel.next6:152; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER_PEEL_NEWPH:%.*]]153; CHECK:       for.body.preheader.peel.newph:154; CHECK-NEXT:    br label [[FOR_BODY:%.*]]155; CHECK:       for.body:156; CHECK-NEXT:    [[I_06:%.*]] = phi i32 [ [[DEC:%.*]], [[FOR_BODY]] ], [ [[DEC_PEEL4]], [[FOR_BODY_PREHEADER_PEEL_NEWPH]] ]157; CHECK-NEXT:    tail call void @foo(i32 -2)158; CHECK-NEXT:    [[DEC]] = add nsw i32 [[I_06]], -1159; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[DEC]], [[N]]160; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_COND_CLEANUP_LOOPEXIT_LOOPEXIT:%.*]], !llvm.loop [[LOOP3:![0-9]+]]161; CHECK:       for.cond.cleanup.loopexit.loopexit:162; CHECK-NEXT:    br label [[FOR_COND_CLEANUP_LOOPEXIT]]163; CHECK:       for.cond.cleanup.loopexit:164; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]165; CHECK:       for.cond.cleanup:166; CHECK-NEXT:    ret void167;168entry:169  %cmp5 = icmp slt i32 %N, 0170  br i1 %cmp5, label %for.body, label %for.cond.cleanup171 172for.body:173  %i.06 = phi i32 [ %dec, %for.body ], [ 0, %entry ]174  %cond = tail call i32 @llvm.smax.i32(i32 %i.06, i32 -2)175  tail call void @foo(i32 %cond)176  %dec = add nsw i32 %i.06, -1177  %cmp = icmp sgt i32 %dec, %N178  br i1 %cmp, label %for.body, label %for.cond.cleanup179 180for.cond.cleanup:181  ret void182}183 184define void @test_smin(i32 %N) {185; CHECK-LABEL: define void @test_smin(186; CHECK-SAME: i32 [[N:%.*]]) {187; CHECK-NEXT:  entry:188; CHECK-NEXT:    [[CMP5:%.*]] = icmp slt i32 [[N]], 0189; CHECK-NEXT:    br i1 [[CMP5]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]]190; CHECK:       for.body.preheader:191; CHECK-NEXT:    br label [[FOR_BODY_PEEL2:%.*]]192; CHECK:       for.body.peel.begin:193; CHECK-NEXT:    br label [[FOR_BODY_PEEL:%.*]]194; CHECK:       for.body.peel:195; CHECK-NEXT:    [[COND_PEEL:%.*]] = tail call i32 @llvm.smin.i32(i32 0, i32 -2)196; CHECK-NEXT:    tail call void @foo(i32 noundef signext [[COND_PEEL]])197; CHECK-NEXT:    [[DEC_PEEL:%.*]] = add nsw i32 0, -1198; CHECK-NEXT:    [[CMP_PEEL:%.*]] = icmp sgt i32 [[DEC_PEEL]], [[N]]199; CHECK-NEXT:    br i1 [[CMP_PEEL]], label [[FOR_BODY_PEEL_NEXT:%.*]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]]200; CHECK:       for.body.peel.next:201; CHECK-NEXT:    br label [[FOR_BODY_PEEL3:%.*]]202; CHECK:       for.body.peel2:203; CHECK-NEXT:    [[COND_PEEL3:%.*]] = tail call i32 @llvm.smin.i32(i32 [[DEC_PEEL]], i32 -2)204; CHECK-NEXT:    tail call void @foo(i32 noundef signext [[COND_PEEL3]])205; CHECK-NEXT:    [[DEC_PEEL4:%.*]] = add nsw i32 [[DEC_PEEL]], -1206; CHECK-NEXT:    [[CMP_PEEL5:%.*]] = icmp sgt i32 [[DEC_PEEL4]], [[N]]207; CHECK-NEXT:    br i1 [[CMP_PEEL5]], label [[FOR_BODY_PEEL_NEXT1:%.*]], label [[FOR_COND_CLEANUP_LOOPEXIT]]208; CHECK:       for.body.peel.next1:209; CHECK-NEXT:    br label [[FOR_BODY_PEEL_NEXT6:%.*]]210; CHECK:       for.body.peel.next6:211; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER_PEEL_NEWPH:%.*]]212; CHECK:       for.body.preheader.peel.newph:213; CHECK-NEXT:    br label [[FOR_BODY:%.*]]214; CHECK:       for.body:215; CHECK-NEXT:    [[I_06:%.*]] = phi i32 [ [[DEC:%.*]], [[FOR_BODY]] ], [ [[DEC_PEEL4]], [[FOR_BODY_PREHEADER_PEEL_NEWPH]] ]216; CHECK-NEXT:    tail call void @foo(i32 noundef signext [[I_06]])217; CHECK-NEXT:    [[DEC]] = add nsw i32 [[I_06]], -1218; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[DEC]], [[N]]219; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_COND_CLEANUP_LOOPEXIT_LOOPEXIT:%.*]], !llvm.loop [[LOOP4:![0-9]+]]220; CHECK:       for.cond.cleanup.loopexit.loopexit:221; CHECK-NEXT:    br label [[FOR_COND_CLEANUP_LOOPEXIT]]222; CHECK:       for.cond.cleanup.loopexit:223; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]224; CHECK:       for.cond.cleanup:225; CHECK-NEXT:    ret void226;227entry:228  %cmp5 = icmp slt i32 %N, 0229  br i1 %cmp5, label %for.body, label %for.cond.cleanup230 231for.body:232  %i.06 = phi i32 [ %dec, %for.body ], [ 0, %entry ]233  %cond = tail call i32 @llvm.smin.i32(i32 %i.06, i32 -2)234  tail call void @foo(i32 noundef signext %cond)235  %dec = add nsw i32 %i.06, -1236  %cmp = icmp sgt i32 %dec, %N237  br i1 %cmp, label %for.body, label %for.cond.cleanup238 239for.cond.cleanup:240  ret void241}242 243define void @test_negative(i32 %End, i32 %Step) {244; CHECK-LABEL: define void @test_negative(245; CHECK-SAME: i32 [[END:%.*]], i32 [[STEP:%.*]]) {246; CHECK-NEXT:  entry:247; CHECK-NEXT:    [[CMP_NOT5:%.*]] = icmp eq i32 [[END]], 0248; CHECK-NEXT:    br i1 [[CMP_NOT5]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]249; CHECK:       for.body.preheader:250; CHECK-NEXT:    br label [[FOR_BODY:%.*]]251; CHECK:       for.body:252; CHECK-NEXT:    [[I_06:%.*]] = phi i32 [ [[ADD:%.*]], [[FOR_BODY]] ], [ 0, [[FOR_BODY_PREHEADER]] ]253; CHECK-NEXT:    [[COND:%.*]] = tail call i32 @llvm.smin.i32(i32 [[I_06]], i32 2)254; CHECK-NEXT:    tail call void @foo(i32 [[COND]])255; CHECK-NEXT:    [[ADD]] = add nsw i32 [[I_06]], [[STEP]]256; CHECK-NEXT:    [[CMP_NOT:%.*]] = icmp eq i32 [[ADD]], [[END]]257; CHECK-NEXT:    br i1 [[CMP_NOT]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]], label [[FOR_BODY]]258; CHECK:       for.cond.cleanup.loopexit:259; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]260; CHECK:       for.cond.cleanup:261; CHECK-NEXT:    ret void262;263entry:264  %cmp.not5 = icmp eq i32 %End, 0265  br i1 %cmp.not5, label %for.cond.cleanup, label %for.body266 267for.body:268  %i.06 = phi i32 [ %add, %for.body ], [ 0, %entry ]269  %cond = tail call i32 @llvm.smin.i32(i32 %i.06, i32 2)270  tail call void @foo(i32 %cond)271  %add = add nsw i32 %i.06, %Step272  %cmp.not = icmp eq i32 %add, %End273  br i1 %cmp.not, label %for.cond.cleanup, label %for.body274 275for.cond.cleanup:276  ret void277}278 279define void @test_max_count_threshold(i32 %N) {280; CHECK-LABEL: define void @test_max_count_threshold(281; CHECK-SAME: i32 [[N:%.*]]) {282; CHECK-NEXT:  entry:283; CHECK-NEXT:    [[CMP5_NOT:%.*]] = icmp eq i32 [[N]], 0284; CHECK-NEXT:    br i1 [[CMP5_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]285; CHECK:       for.body.preheader:286; CHECK-NEXT:    br label [[FOR_BODY1:%.*]]287; CHECK:       for.body:288; CHECK-NEXT:    [[I_6:%.*]] = phi i32 [ [[INC1:%.*]], [[FOR_BODY1]] ], [ 0, [[FOR_BODY_PREHEADER]] ]289; CHECK-NEXT:    [[COND1:%.*]] = tail call i32 @llvm.umin.i32(i32 [[I_6]], i32 5)290; CHECK-NEXT:    tail call void @foo(i32 [[COND1]])291; CHECK-NEXT:    [[INC1]] = add nuw i32 [[I_6]], 1292; CHECK-NEXT:    [[EXITCOND_NOT1:%.*]] = icmp eq i32 [[INC1]], [[N]]293; CHECK-NEXT:    br i1 [[EXITCOND_NOT1]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]], label [[FOR_BODY1]]294; CHECK:       for.cond.cleanup.loopexit:295; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]296; CHECK:       for.cond.cleanup:297; CHECK-NEXT:    ret void298;299entry:300  %cmp5.not = icmp eq i32 %N, 0301  br i1 %cmp5.not, label %for.cond.cleanup, label %for.body302 303for.body:304  %i.06 = phi i32 [ %inc, %for.body ], [ 0, %entry ]305  %cond = tail call i32 @llvm.umin.i32(i32 %i.06, i32 5)306  tail call void @foo(i32 %cond)307  %inc = add nuw i32 %i.06, 1308  %exitcond.not = icmp eq i32 %inc, %N309  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body310 311for.cond.cleanup:312  ret void313}314 315define void @test_wrap(i8 %N) {316; CHECK-LABEL: define void @test_wrap(317; CHECK-SAME: i8 [[N:%.*]]) {318; CHECK-NEXT:  entry:319; CHECK-NEXT:    [[CMP5_NOT:%.*]] = icmp eq i8 [[N]], 0320; CHECK-NEXT:    br i1 [[CMP5_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]321; CHECK:       for.body.preheader:322; CHECK-NEXT:    br label [[FOR_BODY:%.*]]323; CHECK:       for.body:324; CHECK-NEXT:    [[I_06:%.*]] = phi i8 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[FOR_BODY_PREHEADER]] ]325; CHECK-NEXT:    [[COND:%.*]] = tail call i8 @llvm.umin.i8(i8 [[I_06]], i8 -2)326; CHECK-NEXT:    tail call void @bar(i8 [[COND]])327; CHECK-NEXT:    [[INC]] = add i8 [[I_06]], 127328; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i8 [[INC]], [[N]]329; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP_LOOPEXIT:%.*]], label [[FOR_BODY]]330; CHECK:       for.cond.cleanup.loopexit:331; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]332; CHECK:       for.cond.cleanup:333; CHECK-NEXT:    ret void334;335entry:336  %cmp5.not = icmp eq i8 %N, 0337  br i1 %cmp5.not, label %for.cond.cleanup, label %for.body338 339for.body:340  %i.06 = phi i8 [ %inc, %for.body ], [ 0, %entry ]341  %cond = tail call i8 @llvm.umin.i8(i8 %i.06, i8 254)342  tail call void @bar(i8 %cond)343  %inc = add i8 %i.06, 127344  %exitcond.not = icmp eq i8 %inc, %N345  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body346 347for.cond.cleanup:348  ret void349}350;.351; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]}352; CHECK: [[META1]] = !{!"llvm.loop.peeled.count", i32 2}353; CHECK: [[LOOP2]] = distinct !{[[LOOP2]], [[META1]]}354; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META1]]}355; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META1]]}356;.357