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