brintos

brintos / llvm-project-archived public Read only

0
0
Text · 35.8 KiB · 0f62997 Raw
764 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64 < %s | FileCheck %s3 4define void @loop1(ptr noalias nocapture noundef writeonly %dst, ptr nocapture noundef readonly %data, i32 noundef %width) {5; CHECK-LABEL: loop1:6; CHECK:       // %bb.0: // %entry7; CHECK-NEXT:    subs w8, w2, #18; CHECK-NEXT:    b.lt .LBB0_89; CHECK-NEXT:  // %bb.1: // %for.body.preheader10; CHECK-NEXT:    cmp w8, #611; CHECK-NEXT:    b.hi .LBB0_312; CHECK-NEXT:  // %bb.2:13; CHECK-NEXT:    mov w10, wzr14; CHECK-NEXT:    mov x8, x115; CHECK-NEXT:    mov x9, x016; CHECK-NEXT:    b .LBB0_617; CHECK-NEXT:  .LBB0_3: // %vector.ph18; CHECK-NEXT:    add x11, x8, #119; CHECK-NEXT:    mov w8, #1132396544 // =0x437f000020; CHECK-NEXT:    add x12, x0, #421; CHECK-NEXT:    and x10, x11, #0x1fffffff822; CHECK-NEXT:    dup v0.4s, w823; CHECK-NEXT:    add x13, x1, #1624; CHECK-NEXT:    add x8, x1, x10, lsl #225; CHECK-NEXT:    add x9, x0, x1026; CHECK-NEXT:    and x14, x11, #0x1fffffff827; CHECK-NEXT:  .LBB0_4: // %vector.body28; CHECK-NEXT:    // =>This Inner Loop Header: Depth=129; CHECK-NEXT:    ldp q1, q2, [x13, #-16]30; CHECK-NEXT:    subs x14, x14, #831; CHECK-NEXT:    add x13, x13, #3232; CHECK-NEXT:    fcmgt v3.4s, v1.4s, v0.4s33; CHECK-NEXT:    fcmgt v4.4s, v2.4s, v0.4s34; CHECK-NEXT:    bsl v3.16b, v0.16b, v1.16b35; CHECK-NEXT:    bsl v4.16b, v0.16b, v2.16b36; CHECK-NEXT:    fcmlt v1.4s, v1.4s, #0.037; CHECK-NEXT:    fcmlt v2.4s, v2.4s, #0.038; CHECK-NEXT:    bic v1.16b, v3.16b, v1.16b39; CHECK-NEXT:    bic v2.16b, v4.16b, v2.16b40; CHECK-NEXT:    fcvtzs v1.4s, v1.4s41; CHECK-NEXT:    fcvtzs v2.4s, v2.4s42; CHECK-NEXT:    xtn v1.4h, v1.4s43; CHECK-NEXT:    xtn v2.4h, v2.4s44; CHECK-NEXT:    uzp1 v1.8b, v1.8b, v0.8b45; CHECK-NEXT:    uzp1 v2.8b, v2.8b, v0.8b46; CHECK-NEXT:    mov v1.s[1], v2.s[0]47; CHECK-NEXT:    stur d1, [x12, #-4]48; CHECK-NEXT:    add x12, x12, #849; CHECK-NEXT:    b.ne .LBB0_450; CHECK-NEXT:  // %bb.5: // %middle.block51; CHECK-NEXT:    cmp x11, x1052; CHECK-NEXT:    b.eq .LBB0_853; CHECK-NEXT:  .LBB0_6: // %for.body.preheader154; CHECK-NEXT:    movi d0, #000000000000000055; CHECK-NEXT:    mov w11, #1132396544 // =0x437f000056; CHECK-NEXT:    sub w10, w2, w1057; CHECK-NEXT:    fmov s1, w1158; CHECK-NEXT:  .LBB0_7: // %for.body59; CHECK-NEXT:    // =>This Inner Loop Header: Depth=160; CHECK-NEXT:    ldr s2, [x8], #461; CHECK-NEXT:    fcmp s2, s162; CHECK-NEXT:    fcsel s3, s1, s2, gt63; CHECK-NEXT:    fcmp s2, #0.064; CHECK-NEXT:    fcsel s2, s0, s3, mi65; CHECK-NEXT:    subs w10, w10, #166; CHECK-NEXT:    fcvtzs s2, s267; CHECK-NEXT:    fmov w11, s268; CHECK-NEXT:    strb w11, [x9], #169; CHECK-NEXT:    b.ne .LBB0_770; CHECK-NEXT:  .LBB0_8: // %for.cond.cleanup71; CHECK-NEXT:    ret72entry:73  %cmp9 = icmp sgt i32 %width, 074  br i1 %cmp9, label %for.body.preheader, label %for.cond.cleanup75 76for.body.preheader:                               ; preds = %entry77  %0 = add i32 %width, -178  %1 = zext i32 %0 to i6479  %2 = add nuw nsw i64 %1, 180  %min.iters.check = icmp ult i32 %0, 781  br i1 %min.iters.check, label %for.body.preheader21, label %vector.ph82 83vector.ph:                                        ; preds = %for.body.preheader84  %n.vec = and i64 %2, 858993458485  %ind.end = trunc i64 %n.vec to i3286  %ind.end14 = getelementptr float, ptr %data, i64 %n.vec87  %ind.end16 = getelementptr i8, ptr %dst, i64 %n.vec88  br label %vector.body89 90vector.body:                                      ; preds = %vector.body, %vector.ph91  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]92  %next.gep = getelementptr float, ptr %data, i64 %index93  %next.gep18 = getelementptr i8, ptr %dst, i64 %index94  %wide.load = load <4 x float>, ptr %next.gep, align 495  %3 = getelementptr float, ptr %next.gep, i64 496  %wide.load20 = load <4 x float>, ptr %3, align 497  %4 = fcmp olt <4 x float> %wide.load, zeroinitializer98  %5 = fcmp olt <4 x float> %wide.load20, zeroinitializer99  %6 = fcmp ogt <4 x float> %wide.load, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>100  %7 = fcmp ogt <4 x float> %wide.load20, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>101  %8 = select <4 x i1> %6, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %wide.load102  %9 = select <4 x i1> %7, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %wide.load20103  %10 = select <4 x i1> %4, <4 x float> zeroinitializer, <4 x float> %8104  %11 = select <4 x i1> %5, <4 x float> zeroinitializer, <4 x float> %9105  %12 = fptoui <4 x float> %10 to <4 x i8>106  %13 = fptoui <4 x float> %11 to <4 x i8>107  store <4 x i8> %12, ptr %next.gep18, align 1108  %14 = getelementptr i8, ptr %next.gep18, i64 4109  store <4 x i8> %13, ptr %14, align 1110  %index.next = add nuw i64 %index, 8111  %15 = icmp eq i64 %index.next, %n.vec112  br i1 %15, label %middle.block, label %vector.body113 114middle.block:                                     ; preds = %vector.body115  %cmp.n = icmp eq i64 %2, %n.vec116  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader21117 118for.body.preheader21:                             ; preds = %for.body.preheader, %middle.block119  %i.012.ph = phi i32 [ 0, %for.body.preheader ], [ %ind.end, %middle.block ]120  %src.011.ph = phi ptr [ %data, %for.body.preheader ], [ %ind.end14, %middle.block ]121  %dst.addr.010.ph = phi ptr [ %dst, %for.body.preheader ], [ %ind.end16, %middle.block ]122  br label %for.body123 124for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry125  ret void126 127for.body:                                         ; preds = %for.body.preheader21, %for.body128  %i.012 = phi i32 [ %inc, %for.body ], [ %i.012.ph, %for.body.preheader21 ]129  %src.011 = phi ptr [ %add.ptr, %for.body ], [ %src.011.ph, %for.body.preheader21 ]130  %dst.addr.010 = phi ptr [ %add.ptr2, %for.body ], [ %dst.addr.010.ph, %for.body.preheader21 ]131  %16 = load float, ptr %src.011, align 4132  %cmp.i = fcmp olt float %16, 0.000000e+00133  %cmp1.i = fcmp ogt float %16, 2.550000e+02134  %.x.i = select i1 %cmp1.i, float 2.550000e+02, float %16135  %retval.0.i = select i1 %cmp.i, float 0.000000e+00, float %.x.i136  %conv = fptoui float %retval.0.i to i8137  store i8 %conv, ptr %dst.addr.010, align 1138  %add.ptr = getelementptr inbounds float, ptr %src.011, i64 1139  %add.ptr2 = getelementptr inbounds i8, ptr %dst.addr.010, i64 1140  %inc = add nuw nsw i32 %i.012, 1141  %exitcond.not = icmp eq i32 %inc, %width142  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body143}144 145define void @loop2(ptr noalias nocapture noundef writeonly %dst, ptr nocapture noundef readonly %data, i32 noundef %width) {146; CHECK-LABEL: loop2:147; CHECK:       // %bb.0: // %entry148; CHECK-NEXT:    subs w8, w2, #1149; CHECK-NEXT:    b.lt .LBB1_7150; CHECK-NEXT:  // %bb.1: // %for.body.preheader151; CHECK-NEXT:    cmp w8, #2152; CHECK-NEXT:    b.ls .LBB1_4153; CHECK-NEXT:  // %bb.2: // %vector.memcheck154; CHECK-NEXT:    ubfiz x9, x8, #1, #32155; CHECK-NEXT:    add x9, x9, #2156; CHECK-NEXT:    add x10, x1, x9, lsl #2157; CHECK-NEXT:    cmp x10, x0158; CHECK-NEXT:    b.ls .LBB1_8159; CHECK-NEXT:  // %bb.3: // %vector.memcheck160; CHECK-NEXT:    add x9, x0, x9161; CHECK-NEXT:    cmp x9, x1162; CHECK-NEXT:    b.ls .LBB1_8163; CHECK-NEXT:  .LBB1_4:164; CHECK-NEXT:    mov w10, wzr165; CHECK-NEXT:    mov x8, x1166; CHECK-NEXT:    mov x9, x0167; CHECK-NEXT:  .LBB1_5: // %for.body.preheader1168; CHECK-NEXT:    movi d0, #0000000000000000169; CHECK-NEXT:    mov w11, #1132396544 // =0x437f0000170; CHECK-NEXT:    sub w10, w2, w10171; CHECK-NEXT:    fmov s1, w11172; CHECK-NEXT:  .LBB1_6: // %for.body173; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1174; CHECK-NEXT:    ldp s2, s3, [x8], #8175; CHECK-NEXT:    fcmp s2, s1176; CHECK-NEXT:    fcsel s4, s1, s2, gt177; CHECK-NEXT:    fcmp s2, #0.0178; CHECK-NEXT:    fcsel s2, s0, s4, mi179; CHECK-NEXT:    fcmp s3, s1180; CHECK-NEXT:    fcsel s4, s1, s3, gt181; CHECK-NEXT:    fcmp s3, #0.0182; CHECK-NEXT:    fcvtzs s2, s2183; CHECK-NEXT:    fcsel s3, s0, s4, mi184; CHECK-NEXT:    subs w10, w10, #1185; CHECK-NEXT:    str b2, [x9]186; CHECK-NEXT:    fcvtzs s3, s3187; CHECK-NEXT:    stur b3, [x9, #1]188; CHECK-NEXT:    add x9, x9, #2189; CHECK-NEXT:    b.ne .LBB1_6190; CHECK-NEXT:  .LBB1_7: // %for.cond.cleanup191; CHECK-NEXT:    ret192; CHECK-NEXT:  .LBB1_8: // %vector.ph193; CHECK-NEXT:    add x11, x8, #1194; CHECK-NEXT:    mov w8, #1132396544 // =0x437f0000195; CHECK-NEXT:    and x10, x11, #0x1fffffffc196; CHECK-NEXT:    dup v0.4s, w8197; CHECK-NEXT:    and x12, x11, #0x1fffffffc198; CHECK-NEXT:    add x8, x1, x10, lsl #3199; CHECK-NEXT:    add x9, x0, x10, lsl #1200; CHECK-NEXT:  .LBB1_9: // %vector.body201; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1202; CHECK-NEXT:    ld2 { v1.4s, v2.4s }, [x1], #32203; CHECK-NEXT:    subs x12, x12, #4204; CHECK-NEXT:    fcmgt v3.4s, v1.4s, v0.4s205; CHECK-NEXT:    fcmgt v4.4s, v2.4s, v0.4s206; CHECK-NEXT:    fcmlt v5.4s, v1.4s, #0.0207; CHECK-NEXT:    bsl v3.16b, v0.16b, v1.16b208; CHECK-NEXT:    bsl v4.16b, v0.16b, v2.16b209; CHECK-NEXT:    fcmlt v1.4s, v2.4s, #0.0210; CHECK-NEXT:    bic v2.16b, v3.16b, v5.16b211; CHECK-NEXT:    bic v1.16b, v4.16b, v1.16b212; CHECK-NEXT:    fcvtzs v2.4s, v2.4s213; CHECK-NEXT:    fcvtzs v1.4s, v1.4s214; CHECK-NEXT:    xtn v2.4h, v2.4s215; CHECK-NEXT:    xtn v1.4h, v1.4s216; CHECK-NEXT:    trn1 v1.8b, v2.8b, v1.8b217; CHECK-NEXT:    str d1, [x0], #8218; CHECK-NEXT:    b.ne .LBB1_9219; CHECK-NEXT:  // %bb.10: // %middle.block220; CHECK-NEXT:    cmp x11, x10221; CHECK-NEXT:    b.ne .LBB1_5222; CHECK-NEXT:    b .LBB1_7223entry:224  %cmp19 = icmp sgt i32 %width, 0225  br i1 %cmp19, label %for.body.preheader, label %for.cond.cleanup226 227for.body.preheader:                               ; preds = %entry228  %0 = add i32 %width, -1229  %1 = zext i32 %0 to i64230  %2 = add nuw nsw i64 %1, 1231  %min.iters.check = icmp ult i32 %0, 3232  br i1 %min.iters.check, label %for.body.preheader35, label %vector.memcheck233 234vector.memcheck:                                  ; preds = %for.body.preheader235  %3 = add i32 %width, -1236  %4 = zext i32 %3 to i64237  %5 = shl nuw nsw i64 %4, 1238  %6 = add nuw nsw i64 %5, 2239  %scevgep = getelementptr i8, ptr %dst, i64 %6240  %scevgep24 = getelementptr float, ptr %data, i64 %6241  %bound0 = icmp ugt ptr %scevgep24, %dst242  %bound1 = icmp ugt ptr %scevgep, %data243  %found.conflict = and i1 %bound0, %bound1244  br i1 %found.conflict, label %for.body.preheader35, label %vector.ph245 246vector.ph:                                        ; preds = %vector.memcheck247  %n.vec = and i64 %2, 8589934588248  %ind.end = trunc i64 %n.vec to i32249  %7 = shl nuw nsw i64 %n.vec, 1250  %ind.end27 = getelementptr float, ptr %data, i64 %7251  %8 = shl nuw nsw i64 %n.vec, 1252  %ind.end29 = getelementptr i8, ptr %dst, i64 %8253  br label %vector.body254 255vector.body:                                      ; preds = %vector.body, %vector.ph256  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]257  %9 = shl i64 %index, 1258  %next.gep = getelementptr float, ptr %data, i64 %9259  %10 = shl i64 %index, 1260  %wide.vec = load <8 x float>, ptr %next.gep, align 4261  %strided.vec = shufflevector <8 x float> %wide.vec, <8 x float> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>262  %strided.vec34 = shufflevector <8 x float> %wide.vec, <8 x float> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>263  %11 = fcmp olt <4 x float> %strided.vec, zeroinitializer264  %12 = fcmp ogt <4 x float> %strided.vec, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>265  %13 = select <4 x i1> %12, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec266  %14 = select <4 x i1> %11, <4 x float> zeroinitializer, <4 x float> %13267  %15 = fptoui <4 x float> %14 to <4 x i8>268  %16 = fcmp olt <4 x float> %strided.vec34, zeroinitializer269  %17 = fcmp ogt <4 x float> %strided.vec34, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>270  %18 = select <4 x i1> %17, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec34271  %19 = select <4 x i1> %16, <4 x float> zeroinitializer, <4 x float> %18272  %20 = fptoui <4 x float> %19 to <4 x i8>273  %21 = getelementptr inbounds i8, ptr %dst, i64 %10274  %interleaved.vec = shufflevector <4 x i8> %15, <4 x i8> %20, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>275  store <8 x i8> %interleaved.vec, ptr %21, align 1276  %index.next = add nuw i64 %index, 4277  %22 = icmp eq i64 %index.next, %n.vec278  br i1 %22, label %middle.block, label %vector.body279 280middle.block:                                     ; preds = %vector.body281  %cmp.n = icmp eq i64 %2, %n.vec282  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader35283 284for.body.preheader35:                             ; preds = %vector.memcheck, %for.body.preheader, %middle.block285  %i.022.ph = phi i32 [ 0, %vector.memcheck ], [ 0, %for.body.preheader ], [ %ind.end, %middle.block ]286  %src.021.ph = phi ptr [ %data, %vector.memcheck ], [ %data, %for.body.preheader ], [ %ind.end27, %middle.block ]287  %dst.addr.020.ph = phi ptr [ %dst, %vector.memcheck ], [ %dst, %for.body.preheader ], [ %ind.end29, %middle.block ]288  br label %for.body289 290for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry291  ret void292 293for.body:                                         ; preds = %for.body.preheader35, %for.body294  %i.022 = phi i32 [ %inc, %for.body ], [ %i.022.ph, %for.body.preheader35 ]295  %src.021 = phi ptr [ %add.ptr, %for.body ], [ %src.021.ph, %for.body.preheader35 ]296  %dst.addr.020 = phi ptr [ %add.ptr6, %for.body ], [ %dst.addr.020.ph, %for.body.preheader35 ]297  %23 = load float, ptr %src.021, align 4298  %cmp.i = fcmp olt float %23, 0.000000e+00299  %cmp1.i = fcmp ogt float %23, 2.550000e+02300  %.x.i = select i1 %cmp1.i, float 2.550000e+02, float %23301  %retval.0.i = select i1 %cmp.i, float 0.000000e+00, float %.x.i302  %conv = fptoui float %retval.0.i to i8303  store i8 %conv, ptr %dst.addr.020, align 1304  %arrayidx2 = getelementptr inbounds float, ptr %src.021, i64 1305  %24 = load float, ptr %arrayidx2, align 4306  %cmp.i15 = fcmp olt float %24, 0.000000e+00307  %cmp1.i16 = fcmp ogt float %24, 2.550000e+02308  %.x.i17 = select i1 %cmp1.i16, float 2.550000e+02, float %24309  %retval.0.i18 = select i1 %cmp.i15, float 0.000000e+00, float %.x.i17310  %conv4 = fptoui float %retval.0.i18 to i8311  %arrayidx5 = getelementptr inbounds i8, ptr %dst.addr.020, i64 1312  store i8 %conv4, ptr %arrayidx5, align 1313  %add.ptr = getelementptr inbounds float, ptr %src.021, i64 2314  %add.ptr6 = getelementptr inbounds i8, ptr %dst.addr.020, i64 2315  %inc = add nuw nsw i32 %i.022, 1316  %exitcond.not = icmp eq i32 %inc, %width317  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body318}319 320define void @loop3(ptr noalias nocapture noundef writeonly %dst, ptr nocapture noundef readonly %data, i32 noundef %width) {321; CHECK-LABEL: loop3:322; CHECK:       // %bb.0: // %entry323; CHECK-NEXT:    subs w8, w2, #1324; CHECK-NEXT:    b.lt .LBB2_9325; CHECK-NEXT:  // %bb.1: // %for.body.preheader326; CHECK-NEXT:    cmp w8, #2327; CHECK-NEXT:    b.ls .LBB2_6328; CHECK-NEXT:  // %bb.2: // %vector.memcheck329; CHECK-NEXT:    add x9, x8, w8, uxtw #1330; CHECK-NEXT:    add x9, x9, #3331; CHECK-NEXT:    add x10, x1, x9, lsl #2332; CHECK-NEXT:    add x9, x0, x9333; CHECK-NEXT:    cmp x10, x0334; CHECK-NEXT:    ccmp x9, x1, #0, hi335; CHECK-NEXT:    b.hi .LBB2_6336; CHECK-NEXT:  // %bb.3: // %vector.ph337; CHECK-NEXT:    add x11, x8, #1338; CHECK-NEXT:    mov w8, #1132396544 // =0x437f0000339; CHECK-NEXT:    adrp x12, .LCPI2_0340; CHECK-NEXT:    and x10, x11, #0x1fffffffc341; CHECK-NEXT:    dup v0.4s, w8342; CHECK-NEXT:    ldr q1, [x12, :lo12:.LCPI2_0]343; CHECK-NEXT:    add x9, x10, x10, lsl #1344; CHECK-NEXT:    and x12, x11, #0x1fffffffc345; CHECK-NEXT:    add x8, x1, x9, lsl #2346; CHECK-NEXT:    add x9, x0, x9347; CHECK-NEXT:  .LBB2_4: // %vector.body348; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1349; CHECK-NEXT:    ld3 { v2.4s, v3.4s, v4.4s }, [x1], #48350; CHECK-NEXT:    subs x12, x12, #4351; CHECK-NEXT:    fcmgt v5.4s, v2.4s, v0.4s352; CHECK-NEXT:    fcmgt v6.4s, v3.4s, v0.4s353; CHECK-NEXT:    fcmgt v7.4s, v4.4s, v0.4s354; CHECK-NEXT:    fcmlt v16.4s, v2.4s, #0.0355; CHECK-NEXT:    fcmlt v17.4s, v3.4s, #0.0356; CHECK-NEXT:    bsl v5.16b, v0.16b, v2.16b357; CHECK-NEXT:    bsl v6.16b, v0.16b, v3.16b358; CHECK-NEXT:    bsl v7.16b, v0.16b, v4.16b359; CHECK-NEXT:    fcmlt v2.4s, v4.4s, #0.0360; CHECK-NEXT:    bic v3.16b, v5.16b, v16.16b361; CHECK-NEXT:    bic v4.16b, v6.16b, v17.16b362; CHECK-NEXT:    bic v2.16b, v7.16b, v2.16b363; CHECK-NEXT:    fcvtzs v3.4s, v3.4s364; CHECK-NEXT:    fcvtzs v4.4s, v4.4s365; CHECK-NEXT:    fcvtzs v2.4s, v2.4s366; CHECK-NEXT:    xtn v5.4h, v3.4s367; CHECK-NEXT:    xtn v6.4h, v4.4s368; CHECK-NEXT:    xtn v7.4h, v2.4s369; CHECK-NEXT:    tbl v2.16b, { v5.16b, v6.16b, v7.16b }, v1.16b370; CHECK-NEXT:    mov s3, v2.s[2]371; CHECK-NEXT:    str d2, [x0]372; CHECK-NEXT:    str s3, [x0, #8]373; CHECK-NEXT:    add x0, x0, #12374; CHECK-NEXT:    b.ne .LBB2_4375; CHECK-NEXT:  // %bb.5: // %middle.block376; CHECK-NEXT:    cmp x11, x10377; CHECK-NEXT:    b.ne .LBB2_7378; CHECK-NEXT:    b .LBB2_9379; CHECK-NEXT:  .LBB2_6:380; CHECK-NEXT:    mov w10, wzr381; CHECK-NEXT:    mov x8, x1382; CHECK-NEXT:    mov x9, x0383; CHECK-NEXT:  .LBB2_7: // %for.body.preheader1384; CHECK-NEXT:    movi d0, #0000000000000000385; CHECK-NEXT:    mov w11, #1132396544 // =0x437f0000386; CHECK-NEXT:    sub w10, w2, w10387; CHECK-NEXT:    fmov s1, w11388; CHECK-NEXT:  .LBB2_8: // %for.body389; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1390; CHECK-NEXT:    ldp s2, s3, [x8]391; CHECK-NEXT:    fcmp s2, s1392; CHECK-NEXT:    fcsel s4, s1, s2, gt393; CHECK-NEXT:    fcmp s2, #0.0394; CHECK-NEXT:    fcsel s2, s0, s4, mi395; CHECK-NEXT:    fcmp s3, s1396; CHECK-NEXT:    fcsel s4, s1, s3, gt397; CHECK-NEXT:    fcmp s3, #0.0398; CHECK-NEXT:    ldr s3, [x8, #8]399; CHECK-NEXT:    fcvtzs s2, s2400; CHECK-NEXT:    add x8, x8, #12401; CHECK-NEXT:    fcsel s4, s0, s4, mi402; CHECK-NEXT:    fcmp s3, s1403; CHECK-NEXT:    str b2, [x9]404; CHECK-NEXT:    fcsel s5, s1, s3, gt405; CHECK-NEXT:    fcmp s3, #0.0406; CHECK-NEXT:    fcvtzs s4, s4407; CHECK-NEXT:    fcsel s3, s0, s5, mi408; CHECK-NEXT:    subs w10, w10, #1409; CHECK-NEXT:    stur b4, [x9, #1]410; CHECK-NEXT:    fcvtzs s3, s3411; CHECK-NEXT:    stur b3, [x9, #2]412; CHECK-NEXT:    add x9, x9, #3413; CHECK-NEXT:    b.ne .LBB2_8414; CHECK-NEXT:  .LBB2_9: // %for.cond.cleanup415; CHECK-NEXT:    ret416entry:417  %cmp29 = icmp sgt i32 %width, 0418  br i1 %cmp29, label %for.body.preheader, label %for.cond.cleanup419 420for.body.preheader:                               ; preds = %entry421  %0 = add i32 %width, -1422  %1 = zext i32 %0 to i64423  %2 = add nuw nsw i64 %1, 1424  %min.iters.check = icmp ult i32 %0, 3425  br i1 %min.iters.check, label %for.body.preheader46, label %vector.memcheck426 427vector.memcheck:                                  ; preds = %for.body.preheader428  %3 = add i32 %width, -1429  %4 = zext i32 %3 to i64430  %5 = mul nuw nsw i64 %4, 3431  %6 = add nuw nsw i64 %5, 3432  %scevgep = getelementptr i8, ptr %dst, i64 %6433  %scevgep34 = getelementptr float, ptr %data, i64 %6434  %bound0 = icmp ugt ptr %scevgep34, %dst435  %bound1 = icmp ugt ptr %scevgep, %data436  %found.conflict = and i1 %bound0, %bound1437  br i1 %found.conflict, label %for.body.preheader46, label %vector.ph438 439vector.ph:                                        ; preds = %vector.memcheck440  %n.vec = and i64 %2, 8589934588441  %ind.end = trunc i64 %n.vec to i32442  %7 = mul nuw nsw i64 %n.vec, 3443  %ind.end37 = getelementptr float, ptr %data, i64 %7444  %8 = mul nuw nsw i64 %n.vec, 3445  %ind.end39 = getelementptr i8, ptr %dst, i64 %8446  br label %vector.body447 448vector.body:                                      ; preds = %vector.body, %vector.ph449  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]450  %9 = mul i64 %index, 3451  %next.gep = getelementptr float, ptr %data, i64 %9452  %10 = mul i64 %index, 3453  %wide.vec = load <12 x float>, ptr %next.gep, align 4454  %strided.vec = shufflevector <12 x float> %wide.vec, <12 x float> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>455  %strided.vec44 = shufflevector <12 x float> %wide.vec, <12 x float> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>456  %strided.vec45 = shufflevector <12 x float> %wide.vec, <12 x float> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>457  %11 = fcmp olt <4 x float> %strided.vec, zeroinitializer458  %12 = fcmp ogt <4 x float> %strided.vec, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>459  %13 = select <4 x i1> %12, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec460  %14 = select <4 x i1> %11, <4 x float> zeroinitializer, <4 x float> %13461  %15 = fptoui <4 x float> %14 to <4 x i8>462  %16 = fcmp olt <4 x float> %strided.vec44, zeroinitializer463  %17 = fcmp ogt <4 x float> %strided.vec44, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>464  %18 = select <4 x i1> %17, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec44465  %19 = select <4 x i1> %16, <4 x float> zeroinitializer, <4 x float> %18466  %20 = fptoui <4 x float> %19 to <4 x i8>467  %21 = fcmp olt <4 x float> %strided.vec45, zeroinitializer468  %22 = fcmp ogt <4 x float> %strided.vec45, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>469  %23 = select <4 x i1> %22, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec45470  %24 = select <4 x i1> %21, <4 x float> zeroinitializer, <4 x float> %23471  %25 = fptoui <4 x float> %24 to <4 x i8>472  %26 = getelementptr inbounds i8, ptr %dst, i64 %10473  %27 = shufflevector <4 x i8> %15, <4 x i8> %20, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>474  %28 = shufflevector <4 x i8> %25, <4 x i8> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>475  %interleaved.vec = shufflevector <8 x i8> %27, <8 x i8> %28, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>476  store <12 x i8> %interleaved.vec, ptr %26, align 1477  %index.next = add nuw i64 %index, 4478  %29 = icmp eq i64 %index.next, %n.vec479  br i1 %29, label %middle.block, label %vector.body480 481middle.block:                                     ; preds = %vector.body482  %cmp.n = icmp eq i64 %2, %n.vec483  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader46484 485for.body.preheader46:                             ; preds = %vector.memcheck, %for.body.preheader, %middle.block486  %i.032.ph = phi i32 [ 0, %vector.memcheck ], [ 0, %for.body.preheader ], [ %ind.end, %middle.block ]487  %src.031.ph = phi ptr [ %data, %vector.memcheck ], [ %data, %for.body.preheader ], [ %ind.end37, %middle.block ]488  %dst.addr.030.ph = phi ptr [ %dst, %vector.memcheck ], [ %dst, %for.body.preheader ], [ %ind.end39, %middle.block ]489  br label %for.body490 491for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry492  ret void493 494for.body:                                         ; preds = %for.body.preheader46, %for.body495  %i.032 = phi i32 [ %inc, %for.body ], [ %i.032.ph, %for.body.preheader46 ]496  %src.031 = phi ptr [ %add.ptr, %for.body ], [ %src.031.ph, %for.body.preheader46 ]497  %dst.addr.030 = phi ptr [ %add.ptr10, %for.body ], [ %dst.addr.030.ph, %for.body.preheader46 ]498  %30 = load float, ptr %src.031, align 4499  %cmp.i = fcmp olt float %30, 0.000000e+00500  %cmp1.i = fcmp ogt float %30, 2.550000e+02501  %.x.i = select i1 %cmp1.i, float 2.550000e+02, float %30502  %retval.0.i = select i1 %cmp.i, float 0.000000e+00, float %.x.i503  %conv = fptoui float %retval.0.i to i8504  store i8 %conv, ptr %dst.addr.030, align 1505  %arrayidx2 = getelementptr inbounds float, ptr %src.031, i64 1506  %31 = load float, ptr %arrayidx2, align 4507  %cmp.i21 = fcmp olt float %31, 0.000000e+00508  %cmp1.i22 = fcmp ogt float %31, 2.550000e+02509  %.x.i23 = select i1 %cmp1.i22, float 2.550000e+02, float %31510  %retval.0.i24 = select i1 %cmp.i21, float 0.000000e+00, float %.x.i23511  %conv4 = fptoui float %retval.0.i24 to i8512  %arrayidx5 = getelementptr inbounds i8, ptr %dst.addr.030, i64 1513  store i8 %conv4, ptr %arrayidx5, align 1514  %arrayidx6 = getelementptr inbounds float, ptr %src.031, i64 2515  %32 = load float, ptr %arrayidx6, align 4516  %cmp.i25 = fcmp olt float %32, 0.000000e+00517  %cmp1.i26 = fcmp ogt float %32, 2.550000e+02518  %.x.i27 = select i1 %cmp1.i26, float 2.550000e+02, float %32519  %retval.0.i28 = select i1 %cmp.i25, float 0.000000e+00, float %.x.i27520  %conv8 = fptoui float %retval.0.i28 to i8521  %arrayidx9 = getelementptr inbounds i8, ptr %dst.addr.030, i64 2522  store i8 %conv8, ptr %arrayidx9, align 1523  %add.ptr = getelementptr inbounds float, ptr %src.031, i64 3524  %add.ptr10 = getelementptr inbounds i8, ptr %dst.addr.030, i64 3525  %inc = add nuw nsw i32 %i.032, 1526  %exitcond.not = icmp eq i32 %inc, %width527  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body528}529 530define void @loop4(ptr noalias nocapture noundef writeonly %dst, ptr nocapture noundef readonly %data, i32 noundef %width) {531; CHECK-LABEL: loop4:532; CHECK:       // %bb.0: // %entry533; CHECK-NEXT:    subs w8, w2, #1534; CHECK-NEXT:    b.lt .LBB3_7535; CHECK-NEXT:  // %bb.1: // %for.body.preheader536; CHECK-NEXT:    cmp w8, #2537; CHECK-NEXT:    b.ls .LBB3_4538; CHECK-NEXT:  // %bb.2: // %vector.memcheck539; CHECK-NEXT:    ubfiz x9, x8, #2, #32540; CHECK-NEXT:    add x9, x9, #4541; CHECK-NEXT:    add x10, x1, x9, lsl #2542; CHECK-NEXT:    cmp x10, x0543; CHECK-NEXT:    b.ls .LBB3_8544; CHECK-NEXT:  // %bb.3: // %vector.memcheck545; CHECK-NEXT:    add x9, x0, x9546; CHECK-NEXT:    cmp x9, x1547; CHECK-NEXT:    b.ls .LBB3_8548; CHECK-NEXT:  .LBB3_4:549; CHECK-NEXT:    mov w10, wzr550; CHECK-NEXT:    mov x8, x1551; CHECK-NEXT:    mov x9, x0552; CHECK-NEXT:  .LBB3_5: // %for.body.preheader1553; CHECK-NEXT:    movi d0, #0000000000000000554; CHECK-NEXT:    mov w11, #1132396544 // =0x437f0000555; CHECK-NEXT:    sub w10, w2, w10556; CHECK-NEXT:    fmov s1, w11557; CHECK-NEXT:  .LBB3_6: // %for.body558; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1559; CHECK-NEXT:    ldp s2, s3, [x8]560; CHECK-NEXT:    fcmp s2, s1561; CHECK-NEXT:    fcsel s4, s1, s2, gt562; CHECK-NEXT:    fcmp s2, #0.0563; CHECK-NEXT:    fcsel s2, s0, s4, mi564; CHECK-NEXT:    fcmp s3, s1565; CHECK-NEXT:    fcsel s4, s1, s3, gt566; CHECK-NEXT:    fcmp s3, #0.0567; CHECK-NEXT:    fcvtzs s2, s2568; CHECK-NEXT:    ldp s3, s5, [x8, #8]569; CHECK-NEXT:    add x8, x8, #16570; CHECK-NEXT:    fcsel s4, s0, s4, mi571; CHECK-NEXT:    fcmp s3, s1572; CHECK-NEXT:    str b2, [x9]573; CHECK-NEXT:    fcvtzs s4, s4574; CHECK-NEXT:    fcsel s6, s1, s3, gt575; CHECK-NEXT:    fcmp s3, #0.0576; CHECK-NEXT:    fcsel s3, s0, s6, mi577; CHECK-NEXT:    fcmp s5, s1578; CHECK-NEXT:    stur b4, [x9, #1]579; CHECK-NEXT:    fcsel s6, s1, s5, gt580; CHECK-NEXT:    fcmp s5, #0.0581; CHECK-NEXT:    fcvtzs s3, s3582; CHECK-NEXT:    fcsel s5, s0, s6, mi583; CHECK-NEXT:    subs w10, w10, #1584; CHECK-NEXT:    stur b3, [x9, #2]585; CHECK-NEXT:    fcvtzs s5, s5586; CHECK-NEXT:    stur b5, [x9, #3]587; CHECK-NEXT:    add x9, x9, #4588; CHECK-NEXT:    b.ne .LBB3_6589; CHECK-NEXT:  .LBB3_7: // %for.cond.cleanup590; CHECK-NEXT:    ret591; CHECK-NEXT:  .LBB3_8: // %vector.ph592; CHECK-NEXT:    add x11, x8, #1593; CHECK-NEXT:    mov w8, #1132396544 // =0x437f0000594; CHECK-NEXT:    adrp x12, .LCPI3_0595; CHECK-NEXT:    and x10, x11, #0x1fffffffc596; CHECK-NEXT:    dup v0.4s, w8597; CHECK-NEXT:    ldr q1, [x12, :lo12:.LCPI3_0]598; CHECK-NEXT:    add x8, x1, x10, lsl #4599; CHECK-NEXT:    add x9, x0, x10, lsl #2600; CHECK-NEXT:    and x12, x11, #0x1fffffffc601; CHECK-NEXT:  .LBB3_9: // %vector.body602; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1603; CHECK-NEXT:    ld4 { v2.4s, v3.4s, v4.4s, v5.4s }, [x1], #64604; CHECK-NEXT:    subs x12, x12, #4605; CHECK-NEXT:    fcmgt v6.4s, v2.4s, v0.4s606; CHECK-NEXT:    fcmgt v7.4s, v3.4s, v0.4s607; CHECK-NEXT:    fcmgt v16.4s, v4.4s, v0.4s608; CHECK-NEXT:    fcmgt v17.4s, v5.4s, v0.4s609; CHECK-NEXT:    fcmlt v18.4s, v2.4s, #0.0610; CHECK-NEXT:    fcmlt v19.4s, v3.4s, #0.0611; CHECK-NEXT:    fcmlt v20.4s, v4.4s, #0.0612; CHECK-NEXT:    bsl v6.16b, v0.16b, v2.16b613; CHECK-NEXT:    bsl v7.16b, v0.16b, v3.16b614; CHECK-NEXT:    bsl v16.16b, v0.16b, v4.16b615; CHECK-NEXT:    bsl v17.16b, v0.16b, v5.16b616; CHECK-NEXT:    fcmlt v2.4s, v5.4s, #0.0617; CHECK-NEXT:    bic v3.16b, v6.16b, v18.16b618; CHECK-NEXT:    bic v4.16b, v7.16b, v19.16b619; CHECK-NEXT:    bic v5.16b, v16.16b, v20.16b620; CHECK-NEXT:    bic v2.16b, v17.16b, v2.16b621; CHECK-NEXT:    fcvtzs v3.4s, v3.4s622; CHECK-NEXT:    fcvtzs v4.4s, v4.4s623; CHECK-NEXT:    fcvtzs v5.4s, v5.4s624; CHECK-NEXT:    fcvtzs v2.4s, v2.4s625; CHECK-NEXT:    xtn v16.4h, v3.4s626; CHECK-NEXT:    xtn v17.4h, v4.4s627; CHECK-NEXT:    xtn v18.4h, v5.4s628; CHECK-NEXT:    xtn v19.4h, v2.4s629; CHECK-NEXT:    tbl v2.16b, { v16.16b, v17.16b, v18.16b, v19.16b }, v1.16b630; CHECK-NEXT:    str q2, [x0], #16631; CHECK-NEXT:    b.ne .LBB3_9632; CHECK-NEXT:  // %bb.10: // %middle.block633; CHECK-NEXT:    cmp x11, x10634; CHECK-NEXT:    b.ne .LBB3_5635; CHECK-NEXT:    b .LBB3_7636entry:637  %cmp39 = icmp sgt i32 %width, 0638  br i1 %cmp39, label %for.body.preheader, label %for.cond.cleanup639 640for.body.preheader:                               ; preds = %entry641  %0 = add i32 %width, -1642  %1 = zext i32 %0 to i64643  %2 = add nuw nsw i64 %1, 1644  %min.iters.check = icmp ult i32 %0, 3645  br i1 %min.iters.check, label %for.body.preheader57, label %vector.memcheck646 647vector.memcheck:                                  ; preds = %for.body.preheader648  %3 = add i32 %width, -1649  %4 = zext i32 %3 to i64650  %5 = shl nuw nsw i64 %4, 2651  %6 = add nuw nsw i64 %5, 4652  %scevgep = getelementptr i8, ptr %dst, i64 %6653  %scevgep44 = getelementptr float, ptr %data, i64 %6654  %bound0 = icmp ugt ptr %scevgep44, %dst655  %bound1 = icmp ugt ptr %scevgep, %data656  %found.conflict = and i1 %bound0, %bound1657  br i1 %found.conflict, label %for.body.preheader57, label %vector.ph658 659vector.ph:                                        ; preds = %vector.memcheck660  %n.vec = and i64 %2, 8589934588661  %ind.end = trunc i64 %n.vec to i32662  %7 = shl nuw nsw i64 %n.vec, 2663  %ind.end47 = getelementptr float, ptr %data, i64 %7664  %8 = shl nuw nsw i64 %n.vec, 2665  %ind.end49 = getelementptr i8, ptr %dst, i64 %8666  br label %vector.body667 668vector.body:                                      ; preds = %vector.body, %vector.ph669  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]670  %9 = shl i64 %index, 2671  %next.gep = getelementptr float, ptr %data, i64 %9672  %10 = shl i64 %index, 2673  %wide.vec = load <16 x float>, ptr %next.gep, align 4674  %strided.vec = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>675  %strided.vec54 = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>676  %strided.vec55 = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>677  %strided.vec56 = shufflevector <16 x float> %wide.vec, <16 x float> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>678  %11 = fcmp olt <4 x float> %strided.vec, zeroinitializer679  %12 = fcmp ogt <4 x float> %strided.vec, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>680  %13 = select <4 x i1> %12, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec681  %14 = select <4 x i1> %11, <4 x float> zeroinitializer, <4 x float> %13682  %15 = fptoui <4 x float> %14 to <4 x i8>683  %16 = fcmp olt <4 x float> %strided.vec54, zeroinitializer684  %17 = fcmp ogt <4 x float> %strided.vec54, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>685  %18 = select <4 x i1> %17, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec54686  %19 = select <4 x i1> %16, <4 x float> zeroinitializer, <4 x float> %18687  %20 = fptoui <4 x float> %19 to <4 x i8>688  %21 = fcmp olt <4 x float> %strided.vec55, zeroinitializer689  %22 = fcmp ogt <4 x float> %strided.vec55, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>690  %23 = select <4 x i1> %22, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec55691  %24 = select <4 x i1> %21, <4 x float> zeroinitializer, <4 x float> %23692  %25 = fptoui <4 x float> %24 to <4 x i8>693  %26 = fcmp olt <4 x float> %strided.vec56, zeroinitializer694  %27 = fcmp ogt <4 x float> %strided.vec56, <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>695  %28 = select <4 x i1> %27, <4 x float> <float 2.550000e+02, float 2.550000e+02, float 2.550000e+02, float 2.550000e+02>, <4 x float> %strided.vec56696  %29 = select <4 x i1> %26, <4 x float> zeroinitializer, <4 x float> %28697  %30 = fptoui <4 x float> %29 to <4 x i8>698  %31 = getelementptr inbounds i8, ptr %dst, i64 %10699  %32 = shufflevector <4 x i8> %15, <4 x i8> %20, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>700  %33 = shufflevector <4 x i8> %25, <4 x i8> %30, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>701  %interleaved.vec = shufflevector <8 x i8> %32, <8 x i8> %33, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>702  store <16 x i8> %interleaved.vec, ptr %31, align 1703  %index.next = add nuw i64 %index, 4704  %34 = icmp eq i64 %index.next, %n.vec705  br i1 %34, label %middle.block, label %vector.body706 707middle.block:                                     ; preds = %vector.body708  %cmp.n = icmp eq i64 %2, %n.vec709  br i1 %cmp.n, label %for.cond.cleanup, label %for.body.preheader57710 711for.body.preheader57:                             ; preds = %vector.memcheck, %for.body.preheader, %middle.block712  %i.042.ph = phi i32 [ 0, %vector.memcheck ], [ 0, %for.body.preheader ], [ %ind.end, %middle.block ]713  %src.041.ph = phi ptr [ %data, %vector.memcheck ], [ %data, %for.body.preheader ], [ %ind.end47, %middle.block ]714  %dst.addr.040.ph = phi ptr [ %dst, %vector.memcheck ], [ %dst, %for.body.preheader ], [ %ind.end49, %middle.block ]715  br label %for.body716 717for.cond.cleanup:                                 ; preds = %for.body, %middle.block, %entry718  ret void719 720for.body:                                         ; preds = %for.body.preheader57, %for.body721  %i.042 = phi i32 [ %inc, %for.body ], [ %i.042.ph, %for.body.preheader57 ]722  %src.041 = phi ptr [ %add.ptr, %for.body ], [ %src.041.ph, %for.body.preheader57 ]723  %dst.addr.040 = phi ptr [ %add.ptr14, %for.body ], [ %dst.addr.040.ph, %for.body.preheader57 ]724  %35 = load float, ptr %src.041, align 4725  %cmp.i = fcmp olt float %35, 0.000000e+00726  %cmp1.i = fcmp ogt float %35, 2.550000e+02727  %.x.i = select i1 %cmp1.i, float 2.550000e+02, float %35728  %retval.0.i = select i1 %cmp.i, float 0.000000e+00, float %.x.i729  %conv = fptoui float %retval.0.i to i8730  store i8 %conv, ptr %dst.addr.040, align 1731  %arrayidx2 = getelementptr inbounds float, ptr %src.041, i64 1732  %36 = load float, ptr %arrayidx2, align 4733  %cmp.i27 = fcmp olt float %36, 0.000000e+00734  %cmp1.i28 = fcmp ogt float %36, 2.550000e+02735  %.x.i29 = select i1 %cmp1.i28, float 2.550000e+02, float %36736  %retval.0.i30 = select i1 %cmp.i27, float 0.000000e+00, float %.x.i29737  %conv4 = fptoui float %retval.0.i30 to i8738  %arrayidx5 = getelementptr inbounds i8, ptr %dst.addr.040, i64 1739  store i8 %conv4, ptr %arrayidx5, align 1740  %arrayidx6 = getelementptr inbounds float, ptr %src.041, i64 2741  %37 = load float, ptr %arrayidx6, align 4742  %cmp.i31 = fcmp olt float %37, 0.000000e+00743  %cmp1.i32 = fcmp ogt float %37, 2.550000e+02744  %.x.i33 = select i1 %cmp1.i32, float 2.550000e+02, float %37745  %retval.0.i34 = select i1 %cmp.i31, float 0.000000e+00, float %.x.i33746  %conv8 = fptoui float %retval.0.i34 to i8747  %arrayidx9 = getelementptr inbounds i8, ptr %dst.addr.040, i64 2748  store i8 %conv8, ptr %arrayidx9, align 1749  %arrayidx10 = getelementptr inbounds float, ptr %src.041, i64 3750  %38 = load float, ptr %arrayidx10, align 4751  %cmp.i35 = fcmp olt float %38, 0.000000e+00752  %cmp1.i36 = fcmp ogt float %38, 2.550000e+02753  %.x.i37 = select i1 %cmp1.i36, float 2.550000e+02, float %38754  %retval.0.i38 = select i1 %cmp.i35, float 0.000000e+00, float %.x.i37755  %conv12 = fptoui float %retval.0.i38 to i8756  %arrayidx13 = getelementptr inbounds i8, ptr %dst.addr.040, i64 3757  store i8 %conv12, ptr %arrayidx13, align 1758  %add.ptr = getelementptr inbounds float, ptr %src.041, i64 4759  %add.ptr14 = getelementptr inbounds i8, ptr %dst.addr.040, i64 4760  %inc = add nuw nsw i32 %i.042, 1761  %exitcond.not = icmp eq i32 %inc, %width762  br i1 %exitcond.not, label %for.cond.cleanup, label %for.body763}764