brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.2 KiB · b456ad8 Raw
306 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -mtriple=wasm32-unknown-unknown -passes=loop-unroll,simplifycfg,instcombine -S %s -o - | FileCheck %s3 4target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"5 6define hidden void @compile_time_full(ptr nocapture %a, ptr nocapture readonly %b) {7; CHECK-LABEL: @compile_time_full(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[B:%.*]], align 110; CHECK-NEXT:    store i8 [[I]], ptr [[A:%.*]], align 111; CHECK-NEXT:    [[ARRAYIDX_1:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 112; CHECK-NEXT:    [[I_1:%.*]] = load i8, ptr [[ARRAYIDX_1]], align 113; CHECK-NEXT:    [[ARRAYIDX1_1:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 114; CHECK-NEXT:    store i8 [[I_1]], ptr [[ARRAYIDX1_1]], align 115; CHECK-NEXT:    [[ARRAYIDX_2:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 216; CHECK-NEXT:    [[I_2:%.*]] = load i8, ptr [[ARRAYIDX_2]], align 117; CHECK-NEXT:    [[ARRAYIDX1_2:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 218; CHECK-NEXT:    store i8 [[I_2]], ptr [[ARRAYIDX1_2]], align 119; CHECK-NEXT:    [[ARRAYIDX_3:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 320; CHECK-NEXT:    [[I_3:%.*]] = load i8, ptr [[ARRAYIDX_3]], align 121; CHECK-NEXT:    [[ARRAYIDX1_3:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 322; CHECK-NEXT:    store i8 [[I_3]], ptr [[ARRAYIDX1_3]], align 123; CHECK-NEXT:    [[ARRAYIDX_4:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 424; CHECK-NEXT:    [[I_4:%.*]] = load i8, ptr [[ARRAYIDX_4]], align 125; CHECK-NEXT:    [[ARRAYIDX1_4:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 426; CHECK-NEXT:    store i8 [[I_4]], ptr [[ARRAYIDX1_4]], align 127; CHECK-NEXT:    [[ARRAYIDX_5:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 528; CHECK-NEXT:    [[I_5:%.*]] = load i8, ptr [[ARRAYIDX_5]], align 129; CHECK-NEXT:    [[ARRAYIDX1_5:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 530; CHECK-NEXT:    store i8 [[I_5]], ptr [[ARRAYIDX1_5]], align 131; CHECK-NEXT:    [[ARRAYIDX_6:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 632; CHECK-NEXT:    [[I_6:%.*]] = load i8, ptr [[ARRAYIDX_6]], align 133; CHECK-NEXT:    [[ARRAYIDX1_6:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 634; CHECK-NEXT:    store i8 [[I_6]], ptr [[ARRAYIDX1_6]], align 135; CHECK-NEXT:    [[ARRAYIDX_7:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 736; CHECK-NEXT:    [[I_7:%.*]] = load i8, ptr [[ARRAYIDX_7]], align 137; CHECK-NEXT:    [[ARRAYIDX1_7:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 738; CHECK-NEXT:    store i8 [[I_7]], ptr [[ARRAYIDX1_7]], align 139; CHECK-NEXT:    [[ARRAYIDX_8:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 840; CHECK-NEXT:    [[I_8:%.*]] = load i8, ptr [[ARRAYIDX_8]], align 141; CHECK-NEXT:    [[ARRAYIDX1_8:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 842; CHECK-NEXT:    store i8 [[I_8]], ptr [[ARRAYIDX1_8]], align 143; CHECK-NEXT:    [[ARRAYIDX_9:%.*]] = getelementptr inbounds nuw i8, ptr [[B]], i32 944; CHECK-NEXT:    [[I_9:%.*]] = load i8, ptr [[ARRAYIDX_9]], align 145; CHECK-NEXT:    [[ARRAYIDX1_9:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i32 946; CHECK-NEXT:    store i8 [[I_9]], ptr [[ARRAYIDX1_9]], align 147; CHECK-NEXT:    ret void48;49entry:50  br label %for.body51 52for.cond.cleanup:                                 ; preds = %for.body53  ret void54 55for.body:                                         ; preds = %for.body, %entry56  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]57  %arrayidx = getelementptr inbounds i8, ptr %b, i32 %i.0658  %i = load i8, ptr %arrayidx, align 159  %arrayidx1 = getelementptr inbounds i8, ptr %a, i32 %i.0660  store i8 %i, ptr %arrayidx1, align 161  %inc = add nuw nsw i32 %i.06, 162  %exitcond.not = icmp eq i32 %inc, 1063  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body64}65 66define hidden void @compile_time_partial(ptr nocapture %a, ptr nocapture readonly %b) {67; CHECK-LABEL: @compile_time_partial(68; CHECK-NEXT:  entry:69; CHECK-NEXT:    br label [[FOR_BODY:%.*]]70; CHECK:       for.cond.cleanup:71; CHECK-NEXT:    ret void72; CHECK:       for.body:73; CHECK-NEXT:    [[I_07:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC_3:%.*]], [[FOR_BODY]] ]74; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i16, ptr [[B:%.*]], i32 [[I_07]]75; CHECK-NEXT:    [[I:%.*]] = load i16, ptr [[ARRAYIDX]], align 276; CHECK-NEXT:    [[ADD:%.*]] = add i16 [[I]], 177; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds nuw i16, ptr [[A:%.*]], i32 [[I_07]]78; CHECK-NEXT:    store i16 [[ADD]], ptr [[ARRAYIDX2]], align 279; CHECK-NEXT:    [[INC:%.*]] = or disjoint i32 [[I_07]], 180; CHECK-NEXT:    [[ARRAYIDX_1:%.*]] = getelementptr inbounds nuw i16, ptr [[B]], i32 [[INC]]81; CHECK-NEXT:    [[I_1:%.*]] = load i16, ptr [[ARRAYIDX_1]], align 282; CHECK-NEXT:    [[ADD_1:%.*]] = add i16 [[I_1]], 183; CHECK-NEXT:    [[ARRAYIDX2_1:%.*]] = getelementptr inbounds nuw i16, ptr [[A]], i32 [[INC]]84; CHECK-NEXT:    store i16 [[ADD_1]], ptr [[ARRAYIDX2_1]], align 285; CHECK-NEXT:    [[INC_1:%.*]] = or disjoint i32 [[I_07]], 286; CHECK-NEXT:    [[ARRAYIDX_2:%.*]] = getelementptr inbounds nuw i16, ptr [[B]], i32 [[INC_1]]87; CHECK-NEXT:    [[I_2:%.*]] = load i16, ptr [[ARRAYIDX_2]], align 288; CHECK-NEXT:    [[ADD_2:%.*]] = add i16 [[I_2]], 189; CHECK-NEXT:    [[ARRAYIDX2_2:%.*]] = getelementptr inbounds nuw i16, ptr [[A]], i32 [[INC_1]]90; CHECK-NEXT:    store i16 [[ADD_2]], ptr [[ARRAYIDX2_2]], align 291; CHECK-NEXT:    [[INC_2:%.*]] = or disjoint i32 [[I_07]], 392; CHECK-NEXT:    [[ARRAYIDX_3:%.*]] = getelementptr inbounds nuw i16, ptr [[B]], i32 [[INC_2]]93; CHECK-NEXT:    [[I_3:%.*]] = load i16, ptr [[ARRAYIDX_3]], align 294; CHECK-NEXT:    [[ADD_3:%.*]] = add i16 [[I_3]], 195; CHECK-NEXT:    [[ARRAYIDX2_3:%.*]] = getelementptr inbounds nuw i16, ptr [[A]], i32 [[INC_2]]96; CHECK-NEXT:    store i16 [[ADD_3]], ptr [[ARRAYIDX2_3]], align 297; CHECK-NEXT:    [[INC_3]] = add nuw nsw i32 [[I_07]], 498; CHECK-NEXT:    [[EXITCOND_NOT_3:%.*]] = icmp eq i32 [[INC_3]], 100099; CHECK-NEXT:    br i1 [[EXITCOND_NOT_3]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]100;101entry:102  br label %for.body103 104for.cond.cleanup:                                 ; preds = %for.body105  ret void106 107for.body:                                         ; preds = %for.body, %entry108  %i.07 = phi i32 [ 0, %entry ], [ %inc, %for.body ]109  %arrayidx = getelementptr inbounds i16, ptr %b, i32 %i.07110  %i = load i16, ptr %arrayidx, align 2111  %add = add i16 %i, 1112  %arrayidx2 = getelementptr inbounds i16, ptr %a, i32 %i.07113  store i16 %add, ptr %arrayidx2, align 2114  %inc = add nuw nsw i32 %i.07, 1115  %exitcond.not = icmp eq i32 %inc, 1000116  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body117}118 119define hidden void @runtime(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {120; CHECK-LABEL: @runtime(121; CHECK-NEXT:  entry:122; CHECK-NEXT:    [[CMP8_NOT:%.*]] = icmp eq i32 [[N:%.*]], 0123; CHECK-NEXT:    br i1 [[CMP8_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY_PREHEADER:%.*]]124; CHECK:       for.body.preheader:125; CHECK-NEXT:    [[XTRAITER:%.*]] = and i32 [[N]], 1126; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[N]], 1127; CHECK-NEXT:    br i1 [[TMP0]], label [[FOR_BODY_EPIL_PREHEADER:%.*]], label [[FOR_BODY_PREHEADER_NEW:%.*]]128; CHECK:       for.body.preheader.new:129; CHECK-NEXT:    [[UNROLL_ITER:%.*]] = and i32 [[N]], -2130; CHECK-NEXT:    br label [[FOR_BODY:%.*]]131; CHECK:       for.cond.cleanup.loopexit.unr-lcssa:132; CHECK-NEXT:    [[LCMP_MOD_NOT:%.*]] = icmp eq i32 [[XTRAITER]], 0133; CHECK-NEXT:    br i1 [[LCMP_MOD_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY_EPIL_PREHEADER]]134; CHECK:       for.body.epil.preheader:135; CHECK-NEXT:    [[I_09_UNR:%.*]] = phi i32 [ 0, [[FOR_BODY_PREHEADER]] ], [ [[INC_1:%.*]], [[FOR_COND_CLEANUP_LOOPEXIT_UNR_LCSSA:%.*]] ]136; CHECK-NEXT:    [[LCMP_MOD1:%.*]] = icmp ne i32 [[XTRAITER]], 0137; CHECK-NEXT:    call void @llvm.assume(i1 [[LCMP_MOD1]])138; CHECK-NEXT:    [[ARRAYIDX_EPIL:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i32 [[I_09_UNR]]139; CHECK-NEXT:    [[I_EPIL:%.*]] = load i32, ptr [[ARRAYIDX_EPIL]], align 4140; CHECK-NEXT:    [[ARRAYIDX1_EPIL:%.*]] = getelementptr inbounds i32, ptr [[C:%.*]], i32 [[I_09_UNR]]141; CHECK-NEXT:    [[I1_EPIL:%.*]] = load i32, ptr [[ARRAYIDX1_EPIL]], align 4142; CHECK-NEXT:    [[MUL_EPIL:%.*]] = mul nsw i32 [[I1_EPIL]], [[I_EPIL]]143; CHECK-NEXT:    [[ARRAYIDX2_EPIL:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[I_09_UNR]]144; CHECK-NEXT:    store i32 [[MUL_EPIL]], ptr [[ARRAYIDX2_EPIL]], align 4145; CHECK-NEXT:    br label [[FOR_COND_CLEANUP]]146; CHECK:       for.cond.cleanup:147; CHECK-NEXT:    ret void148; CHECK:       for.body:149; CHECK-NEXT:    [[I_09:%.*]] = phi i32 [ 0, [[FOR_BODY_PREHEADER_NEW]] ], [ [[INC_1]], [[FOR_BODY]] ]150; CHECK-NEXT:    [[NITER:%.*]] = phi i32 [ 0, [[FOR_BODY_PREHEADER_NEW]] ], [ [[NITER_NEXT_1:%.*]], [[FOR_BODY]] ]151; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[I_09]]152; CHECK-NEXT:    [[I:%.*]] = load i32, ptr [[ARRAYIDX]], align 4153; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds i32, ptr [[C]], i32 [[I_09]]154; CHECK-NEXT:    [[I1:%.*]] = load i32, ptr [[ARRAYIDX1]], align 4155; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[I1]], [[I]]156; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[I_09]]157; CHECK-NEXT:    store i32 [[MUL]], ptr [[ARRAYIDX2]], align 4158; CHECK-NEXT:    [[INC:%.*]] = or disjoint i32 [[I_09]], 1159; CHECK-NEXT:    [[ARRAYIDX_1:%.*]] = getelementptr inbounds i32, ptr [[B]], i32 [[INC]]160; CHECK-NEXT:    [[I_1:%.*]] = load i32, ptr [[ARRAYIDX_1]], align 4161; CHECK-NEXT:    [[ARRAYIDX1_1:%.*]] = getelementptr inbounds i32, ptr [[C]], i32 [[INC]]162; CHECK-NEXT:    [[I1_1:%.*]] = load i32, ptr [[ARRAYIDX1_1]], align 4163; CHECK-NEXT:    [[MUL_1:%.*]] = mul nsw i32 [[I1_1]], [[I_1]]164; CHECK-NEXT:    [[ARRAYIDX2_1:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[INC]]165; CHECK-NEXT:    store i32 [[MUL_1]], ptr [[ARRAYIDX2_1]], align 4166; CHECK-NEXT:    [[INC_1]] = add nuw i32 [[I_09]], 2167; CHECK-NEXT:    [[NITER_NEXT_1]] = add i32 [[NITER]], 2168; CHECK-NEXT:    [[NITER_NCMP_1:%.*]] = icmp eq i32 [[NITER_NEXT_1]], [[UNROLL_ITER]]169; CHECK-NEXT:    br i1 [[NITER_NCMP_1]], label [[FOR_COND_CLEANUP_LOOPEXIT_UNR_LCSSA]], label [[FOR_BODY]]170;171entry:172  %cmp8.not = icmp eq i32 %N, 0173  br i1 %cmp8.not, label %for.cond.cleanup, label %for.body174 175for.cond.cleanup:                                 ; preds = %for.body, %entry176  ret void177 178for.body:                                         ; preds = %for.body, %entry179  %i.09 = phi i32 [ %inc, %for.body ], [ 0, %entry ]180  %arrayidx = getelementptr inbounds i32, ptr %b, i32 %i.09181  %i = load i32, ptr %arrayidx, align 4182  %arrayidx1 = getelementptr inbounds i32, ptr %c, i32 %i.09183  %i1 = load i32, ptr %arrayidx1, align 4184  %mul = mul nsw i32 %i1, %i185  %arrayidx2 = getelementptr inbounds i32, ptr %a, i32 %i.09186  store i32 %mul, ptr %arrayidx2, align 4187  %inc = add nuw i32 %i.09, 1188  %exitcond.not = icmp eq i32 %inc, %N189  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body190}191 192define hidden void @dont_unroll_call(ptr nocapture %a, ptr nocapture readonly %b, ptr nocapture readonly %c, i32 %N) {193; CHECK-LABEL: @dont_unroll_call(194; CHECK-NEXT:  entry:195; CHECK-NEXT:    [[CMP12_NOT:%.*]] = icmp eq i32 [[N:%.*]], 0196; CHECK-NEXT:    br i1 [[CMP12_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY:%.*]]197; CHECK:       for.cond.cleanup:198; CHECK-NEXT:    ret void199; CHECK:       for.body:200; CHECK-NEXT:    [[I_013:%.*]] = phi i32 [ [[INC:%.*]], [[FOR_BODY]] ], [ 0, [[ENTRY:%.*]] ]201; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[B:%.*]], i32 [[I_013]]202; CHECK-NEXT:    [[I:%.*]] = load i32, ptr [[ARRAYIDX]], align 4203; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds i32, ptr [[C:%.*]], i32 [[I_013]]204; CHECK-NEXT:    [[I1:%.*]] = load i32, ptr [[ARRAYIDX1]], align 4205; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[I1]], [[I]]206; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[I_013]]207; CHECK-NEXT:    store i32 [[MUL]], ptr [[ARRAYIDX2]], align 4208; CHECK-NEXT:    [[TMP0:%.*]] = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 [[I_013]], i32 [[MUL]])209; CHECK-NEXT:    [[INC]] = add nuw i32 [[I_013]], 1210; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], [[N]]211; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP]], label [[FOR_BODY]]212;213entry:214  %cmp12.not = icmp eq i32 %N, 0215  br i1 %cmp12.not, label %for.cond.cleanup, label %for.body216 217for.cond.cleanup:                                 ; preds = %for.body, %entry218  ret void219 220for.body:                                         ; preds = %for.body, %entry221  %i.013 = phi i32 [ %inc, %for.body ], [ 0, %entry ]222  %arrayidx = getelementptr inbounds i32, ptr %b, i32 %i.013223  %i = load i32, ptr %arrayidx, align 4224  %arrayidx1 = getelementptr inbounds i32, ptr %c, i32 %i.013225  %i1 = load i32, ptr %arrayidx1, align 4226  %mul = mul nsw i32 %i1, %i227  %arrayidx2 = getelementptr inbounds i32, ptr %a, i32 %i.013228  store i32 %mul, ptr %arrayidx2, align 4229  call i32 (ptr, ...) @printf(ptr nonnull dereferenceable(1) @.str, i32 %i.013, i32 %mul)230  %inc = add nuw i32 %i.013, 1231  %exitcond.not = icmp eq i32 %inc, %N232  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body233}234 235define hidden void @dont_unroll_optsize(ptr nocapture %a, ptr nocapture readonly %b) #0 {236; CHECK-LABEL: @dont_unroll_optsize(237; CHECK-NEXT:  entry:238; CHECK-NEXT:    br label [[FOR_BODY:%.*]]239; CHECK:       for.cond.cleanup:240; CHECK-NEXT:    ret void241; CHECK:       for.body:242; CHECK-NEXT:    [[I_06:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]243; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[B:%.*]], i32 [[I_06]]244; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[ARRAYIDX]], align 1245; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i8, ptr [[A:%.*]], i32 [[I_06]]246; CHECK-NEXT:    store i8 [[I]], ptr [[ARRAYIDX1]], align 1247; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_06]], 1248; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], 10249; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]250;251entry:252  br label %for.body253 254for.cond.cleanup:                                 ; preds = %for.body255  ret void256 257for.body:                                         ; preds = %for.body, %entry258  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]259  %arrayidx = getelementptr inbounds i8, ptr %b, i32 %i.06260  %i = load i8, ptr %arrayidx, align 1261  %arrayidx1 = getelementptr inbounds i8, ptr %a, i32 %i.06262  store i8 %i, ptr %arrayidx1, align 1263  %inc = add nuw nsw i32 %i.06, 1264  %exitcond.not = icmp eq i32 %inc, 10265  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body266}267 268define hidden void @dont_unroll_minsize(ptr nocapture %a, ptr nocapture readonly %b) #1 {269; CHECK-LABEL: @dont_unroll_minsize(270; CHECK-NEXT:  entry:271; CHECK-NEXT:    br label [[FOR_BODY:%.*]]272; CHECK:       for.cond.cleanup:273; CHECK-NEXT:    ret void274; CHECK:       for.body:275; CHECK-NEXT:    [[I_06:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]276; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[B:%.*]], i32 [[I_06]]277; CHECK-NEXT:    [[I:%.*]] = load i8, ptr [[ARRAYIDX]], align 1278; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds nuw i8, ptr [[A:%.*]], i32 [[I_06]]279; CHECK-NEXT:    store i8 [[I]], ptr [[ARRAYIDX1]], align 1280; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_06]], 1281; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC]], 10282; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]]283;284entry:285  br label %for.body286 287for.cond.cleanup:                                 ; preds = %for.body288  ret void289 290for.body:                                         ; preds = %for.body, %entry291  %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]292  %arrayidx = getelementptr inbounds i8, ptr %b, i32 %i.06293  %i = load i8, ptr %arrayidx, align 1294  %arrayidx1 = getelementptr inbounds i8, ptr %a, i32 %i.06295  store i8 %i, ptr %arrayidx1, align 1296  %inc = add nuw nsw i32 %i.06, 1297  %exitcond.not = icmp eq i32 %inc, 10298  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body299}300 301attributes #0 = { optsize }302attributes #1 = { minsize }303 304@.str = private unnamed_addr constant [12 x i8] c"a[%d] = %d\0A\00", align 1305declare i32 @printf(ptr nocapture readonly, ...)306