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