diff --git a/bench/graphviz/optimized/spring_electrical.c.ll b/bench/graphviz/optimized/spring_electrical.c.ll index e237a417265..5b5bbe91009 100644 --- a/bench/graphviz/optimized/spring_electrical.c.ll +++ b/bench/graphviz/optimized/spring_electrical.c.ll @@ -3073,16 +3073,17 @@ define void @pcp_rotate(i32 noundef %0, i32 noundef %1, ptr nocapture noundef %2 %67 = insertelement <2 x double> poison, double %sqrt, i64 0 %68 = shufflevector <2 x double> %67, <2 x double> poison, <2 x i32> zeroinitializer %69 = fdiv <2 x double> %66, %68 - br i1 %44, label %.lr.ph125.preheader, label %._crit_edge126 + br i1 %44, label %.lr.ph125.lver.check, label %._crit_edge126 -.lr.ph125.preheader: ; preds = %64 +.lr.ph125.lver.check: ; preds = %64 %70 = sext i32 %1 to i64 %wide.trip.count171 = zext nneg i32 %0 to i64 - br label %.lr.ph125 + %ident.check.not = icmp eq i32 %1, 1 + br i1 %ident.check.not, label %.lr.ph125.ph, label %.lr.ph125.lver.orig -.lr.ph125: ; preds = %.lr.ph125.preheader, %.lr.ph125 - %indvars.iv168 = phi i64 [ 0, %.lr.ph125.preheader ], [ %indvars.iv.next169, %.lr.ph125 ] - %71 = mul nsw i64 %indvars.iv168, %70 +.lr.ph125.lver.orig: ; preds = %.lr.ph125.lver.check, %.lr.ph125.lver.orig + %indvars.iv168.lver.orig = phi i64 [ %indvars.iv.next169.lver.orig, %.lr.ph125.lver.orig ], [ 0, %.lr.ph125.lver.check ] + %71 = mul nsw i64 %indvars.iv168.lver.orig, %70 %72 = getelementptr inbounds double, ptr %2, i64 %71 %73 = load double, ptr %72, align 8 %74 = getelementptr i8, ptr %72, i64 8 @@ -3096,11 +3097,36 @@ define void @pcp_rotate(i32 noundef %0, i32 noundef %1, ptr nocapture noundef %2 %82 = insertelement <2 x double> %81, double %76, i64 1 %83 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %82, <2 x double> %69, <2 x double> %80) store <2 x double> %83, ptr %72, align 8 + %indvars.iv.next169.lver.orig = add nuw nsw i64 %indvars.iv168.lver.orig, 1 + %exitcond172.not.lver.orig = icmp eq i64 %indvars.iv.next169.lver.orig, %wide.trip.count171 + br i1 %exitcond172.not.lver.orig, label %._crit_edge126, label %.lr.ph125.lver.orig + +.lr.ph125.ph: ; preds = %.lr.ph125.lver.check + %load_initial = load double, ptr %2, align 8 + br label %.lr.ph125 + +.lr.ph125: ; preds = %.lr.ph125.ph, %.lr.ph125 + %store_forwarded = phi double [ %load_initial, %.lr.ph125.ph ], [ %96, %.lr.ph125 ] + %indvars.iv168 = phi i64 [ 0, %.lr.ph125.ph ], [ %indvars.iv.next169, %.lr.ph125 ] + %84 = mul nuw nsw i64 %indvars.iv168, %70 + %85 = getelementptr inbounds double, ptr %2, i64 %84 + %86 = getelementptr i8, ptr %85, i64 8 + %87 = load double, ptr %86, align 8 + %88 = fneg double %store_forwarded + %89 = insertelement <2 x double> poison, double %87, i64 0 + %90 = shufflevector <2 x double> %89, <2 x double> poison, <2 x i32> zeroinitializer + %91 = fmul <2 x double> %69, %90 + %92 = shufflevector <2 x double> %91, <2 x double> poison, <2 x i32> + %93 = insertelement <2 x double> poison, double %store_forwarded, i64 0 + %94 = insertelement <2 x double> %93, double %88, i64 1 + %95 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %94, <2 x double> %69, <2 x double> %92) + store <2 x double> %95, ptr %85, align 8 %indvars.iv.next169 = add nuw nsw i64 %indvars.iv168, 1 %exitcond172.not = icmp eq i64 %indvars.iv.next169, %wide.trip.count171 + %96 = extractelement <2 x double> %95, i64 1 br i1 %exitcond172.not, label %._crit_edge126, label %.lr.ph125 -._crit_edge126: ; preds = %.lr.ph125, %64 +._crit_edge126: ; preds = %.lr.ph125.lver.orig, %.lr.ph125, %64 ret void } @@ -3112,7 +3138,7 @@ define void @multilevel_spring_electrical_embedding(i32 noundef %0, ptr noundef call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(136) %10, ptr noundef nonnull align 8 dereferenceable(136) %2, i64 136, i1 false) store i32 0, ptr %7, align 4 %.not = icmp eq ptr %1, null - br i1 %.not, label %718, label %12 + br i1 %.not, label %733, label %12 12: ; preds = %8 %13 = getelementptr inbounds i8, ptr %1, i64 4 @@ -3120,7 +3146,7 @@ define void @multilevel_spring_electrical_embedding(i32 noundef %0, ptr noundef %15 = icmp slt i32 %14, 1 %16 = icmp slt i32 %0, 1 %or.cond = or i1 %16, %15 - br i1 %or.cond, label %718, label %17 + br i1 %or.cond, label %733, label %17 17: ; preds = %12 %18 = tail call zeroext i1 @SparseMatrix_is_symmetric(ptr noundef nonnull %1, i1 noundef zeroext false) #23 @@ -3748,11 +3774,11 @@ attach_edge_label_coordinates.exit: ; preds = %._crit_edge121.i.lo tail call void @SparseMatrix_delete(ptr noundef %202) #23 tail call void @free(ptr noundef %38) #23 %.not157 = icmp eq ptr %.0, %1 - br i1 %.not157, label %718, label %281 + br i1 %.not157, label %733, label %281 281: ; preds = %attach_edge_label_coordinates.exit tail call void @SparseMatrix_delete(ptr noundef nonnull %.0) #23 - br label %718 + br label %733 282: ; preds = %33, %30 call void @Multilevel_control_new(ptr dead_on_unwind nonnull writable sret(%struct.Multilevel_control) align 8 %11) #23 @@ -4426,7 +4452,7 @@ spring_electrical_embedding_slow.exit: ; preds = %543, %365, %349, %5 563: ; preds = %561 call void @free(ptr noundef %.1) #23 - br label %715 + br label %730 564: ; preds = %561 %565 = getelementptr inbounds i8, ptr %.0140, i64 16 @@ -4645,14 +4671,14 @@ prolongate.exit: ; preds = %.loopexit30.us.i, % %663 = getelementptr inbounds i8, ptr %2, i64 120 %664 = load double, ptr %663, align 8 %665 = fcmp une double %664, 0.000000e+00 - br i1 %665, label %669, label %706 + br i1 %665, label %669, label %721 .thread209: ; preds = %660 call void @pcp_rotate(i32 noundef %14, i32 noundef 2, ptr noundef %4) %666 = getelementptr inbounds i8, ptr %2, i64 120 %667 = load double, ptr %666, align 8 %668 = fcmp une double %667, 0.000000e+00 - br i1 %668, label %.thread210, label %706 + br i1 %668, label %.thread210, label %721 .thread210: ; preds = %.thread209 call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %9) @@ -4716,7 +4742,7 @@ prolongate.exit: ; preds = %.loopexit30.us.i, % ._crit_edge.us81.i: ; preds = %679 %indvars.iv.next104.i = add nuw nsw i64 %indvars.iv103.i, 1 %exitcond107.not.i = icmp eq i64 %indvars.iv.next104.i, %wide.trip.count91.i - br i1 %exitcond107.not.i, label %._crit_edge80.i, label %.preheader.us.i199 + br i1 %exitcond107.not.i, label %.lr.ph83.i.lver.check, label %.preheader.us.i199 684: ; preds = %684, %.lr.ph76.i %indvars.iv93.i = phi i64 [ 0, %.lr.ph76.i ], [ %indvars.iv.next94.i, %684 ] @@ -4728,18 +4754,22 @@ prolongate.exit: ; preds = %.loopexit30.us.i, % %exitcond97.not.i = icmp eq i64 %indvars.iv.next94.i, %345 br i1 %exitcond97.not.i, label %.preheader.us.i199, label %684 -._crit_edge80.i: ; preds = %._crit_edge.us81.i +.lr.ph83.i.lver.check: ; preds = %._crit_edge.us81.i %688 = fmul double %670, 0xBF91DF45A50DE270 %689 = call double @cos(double noundef %688) #23 %690 = call double @sin(double noundef %688) #23 + %ident.check.not = icmp eq i32 %0, 1 + br i1 %ident.check.not, label %.lr.ph83.i.ph, label %.lr.ph83.i.lver.orig.preheader + +.lr.ph83.i.lver.orig.preheader: ; preds = %.lr.ph83.i.lver.check %691 = insertelement <2 x double> poison, double %690, i64 0 %692 = insertelement <2 x double> %691, double %689, i64 1 %693 = shufflevector <2 x double> %692, <2 x double> poison, <2 x i32> - br label %.lr.ph83.i + br label %.lr.ph83.i.lver.orig -.lr.ph83.i: ; preds = %.lr.ph83.i, %._crit_edge80.i - %indvars.iv108.i = phi i64 [ 0, %._crit_edge80.i ], [ %indvars.iv.next109.i, %.lr.ph83.i ] - %694 = mul nuw nsw i64 %indvars.iv108.i, %345 +.lr.ph83.i.lver.orig: ; preds = %.lr.ph83.i.lver.orig.preheader, %.lr.ph83.i.lver.orig + %indvars.iv108.i.lver.orig = phi i64 [ %indvars.iv.next109.i.lver.orig, %.lr.ph83.i.lver.orig ], [ 0, %.lr.ph83.i.lver.orig.preheader ] + %694 = mul nuw nsw i64 %indvars.iv108.i.lver.orig, %345 %695 = getelementptr inbounds double, ptr %4, i64 %694 %696 = load double, ptr %695, align 8 %697 = getelementptr i8, ptr %695, i64 8 @@ -4752,40 +4782,67 @@ prolongate.exit: ; preds = %.loopexit30.us.i, % %704 = insertelement <2 x double> %703, double %699, i64 1 %705 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %704, <2 x double> %693, <2 x double> %702) store <2 x double> %705, ptr %695, align 8 + %indvars.iv.next109.i.lver.orig = add nuw nsw i64 %indvars.iv108.i.lver.orig, 1 + %exitcond112.not.i.lver.orig = icmp eq i64 %indvars.iv.next109.i.lver.orig, %wide.trip.count91.i + br i1 %exitcond112.not.i.lver.orig, label %rotate.exit, label %.lr.ph83.i.lver.orig + +.lr.ph83.i.ph: ; preds = %.lr.ph83.i.lver.check + %load_initial = load double, ptr %4, align 8 + %706 = insertelement <2 x double> poison, double %690, i64 0 + %707 = insertelement <2 x double> %706, double %689, i64 1 + %708 = shufflevector <2 x double> %707, <2 x double> poison, <2 x i32> + br label %.lr.ph83.i + +.lr.ph83.i: ; preds = %.lr.ph83.i, %.lr.ph83.i.ph + %store_forwarded = phi double [ %load_initial, %.lr.ph83.i.ph ], [ %720, %.lr.ph83.i ] + %indvars.iv108.i = phi i64 [ 0, %.lr.ph83.i.ph ], [ %indvars.iv.next109.i, %.lr.ph83.i ] + %709 = mul nuw nsw i64 %indvars.iv108.i, %345 + %710 = getelementptr inbounds double, ptr %4, i64 %709 + %711 = getelementptr i8, ptr %710, i64 8 + %712 = load double, ptr %711, align 8 + %713 = fneg double %store_forwarded + %714 = insertelement <2 x double> poison, double %712, i64 0 + %715 = shufflevector <2 x double> %714, <2 x double> poison, <2 x i32> zeroinitializer + %716 = fmul <2 x double> %707, %715 + %717 = insertelement <2 x double> poison, double %store_forwarded, i64 0 + %718 = insertelement <2 x double> %717, double %713, i64 1 + %719 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %718, <2 x double> %708, <2 x double> %716) + store <2 x double> %719, ptr %710, align 8 %indvars.iv.next109.i = add nuw nsw i64 %indvars.iv108.i, 1 %exitcond112.not.i = icmp eq i64 %indvars.iv.next109.i, %wide.trip.count91.i + %720 = extractelement <2 x double> %719, i64 1 br i1 %exitcond112.not.i, label %rotate.exit, label %.lr.ph83.i -rotate.exit: ; preds = %.lr.ph83.i +rotate.exit: ; preds = %.lr.ph83.i.lver.orig, %.lr.ph83.i call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %9) - br label %706 - -706: ; preds = %.thread209, %rotate.exit, %662 - %707 = getelementptr inbounds i8, ptr %2, i64 100 - %708 = load i32, ptr %707, align 4 - %709 = getelementptr inbounds i8, ptr %2, i64 112 - %710 = load double, ptr %709, align 8 - %711 = load i32, ptr %27, align 8 - %712 = getelementptr inbounds i8, ptr %2, i64 104 - %713 = load i8, ptr %712, align 8 - %714 = trunc i8 %713 to i1 - call void @remove_overlap(i32 noundef %0, ptr noundef nonnull %.0, ptr noundef %4, ptr noundef %3, i32 noundef %708, double noundef %710, i32 noundef %711, i32 noundef %5, ptr noundef %6, ptr noundef nonnull %.0, i1 noundef zeroext %714) #23 - br label %715 - -715: ; preds = %706, %563 + br label %721 + +721: ; preds = %.thread209, %rotate.exit, %662 + %722 = getelementptr inbounds i8, ptr %2, i64 100 + %723 = load i32, ptr %722, align 4 + %724 = getelementptr inbounds i8, ptr %2, i64 112 + %725 = load double, ptr %724, align 8 + %726 = load i32, ptr %27, align 8 + %727 = getelementptr inbounds i8, ptr %2, i64 104 + %728 = load i8, ptr %727, align 8 + %729 = trunc i8 %728 to i1 + call void @remove_overlap(i32 noundef %0, ptr noundef nonnull %.0, ptr noundef %4, ptr noundef %3, i32 noundef %723, double noundef %725, i32 noundef %726, i32 noundef %5, ptr noundef %6, ptr noundef nonnull %.0, i1 noundef zeroext %729) #23 + br label %730 + +730: ; preds = %721, %563 call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(136) %2, ptr noundef nonnull align 8 dereferenceable(136) %10, i64 136, i1 false) %.not156 = icmp eq ptr %.0, %1 - br i1 %.not156, label %717, label %716 + br i1 %.not156, label %732, label %731 -716: ; preds = %715 +731: ; preds = %730 call void @SparseMatrix_delete(ptr noundef nonnull %.0) #23 - br label %717 + br label %732 -717: ; preds = %716, %715 +732: ; preds = %731, %730 call void @Multilevel_delete(ptr noundef %286) #23 - br label %718 + br label %733 -718: ; preds = %attach_edge_label_coordinates.exit, %281, %12, %8, %717 +733: ; preds = %attach_edge_label_coordinates.exit, %281, %12, %8, %732 ret void } diff --git a/bench/gromacs/optimized/dlasr.cpp.ll b/bench/gromacs/optimized/dlasr.cpp.ll index bf87117fb64..af0cd622b21 100644 --- a/bench/gromacs/optimized/dlasr.cpp.ll +++ b/bench/gromacs/optimized/dlasr.cpp.ll @@ -25,8 +25,8 @@ define void @dlasr_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea switch i8 %21, label %.loopexit570 [ i8 76, label %22 i8 108, label %22 - i8 82, label %208 - i8 114, label %208 + i8 82, label %226 + i8 114, label %226 ] 22: ; preds = %20, %20 @@ -34,10 +34,10 @@ define void @dlasr_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea switch i8 %23, label %.loopexit570 [ i8 86, label %24 i8 118, label %24 - i8 84, label %78 - i8 116, label %78 - i8 66, label %137 - i8 98, label %137 + i8 84, label %96 + i8 116, label %96 + i8 66, label %155 + i8 98, label %155 ] 24: ; preds = %22, %22 @@ -47,8 +47,8 @@ define void @dlasr_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea switch i8 %27, label %.loopexit570 [ i8 1, label %28 i8 9, label %28 - i8 0, label %52 - i8 8, label %52 + i8 0, label %60 + i8 8, label %60 ] 28: ; preds = %24, %24 @@ -59,807 +59,862 @@ define void @dlasr_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea %29 = sext i32 %12 to i64 %wide.trip.count785 = zext nneg i32 %15 to i64 %invariant.gep832 = getelementptr i8, ptr %14, i64 8 + %ident.check.not = icmp eq i32 %12, 1 br label %.lr.ph671 .lr.ph671: ; preds = %.lr.ph671.preheader, %.loopexit + %indvar = phi i64 [ 0, %.lr.ph671.preheader ], [ %indvar.next, %.loopexit ] %indvars.iv782 = phi i64 [ 1, %.lr.ph671.preheader ], [ %indvars.iv.next783, %.loopexit ] - %30 = getelementptr inbounds double, ptr %10, i64 %indvars.iv782 - %31 = load double, ptr %30, align 8 - %32 = getelementptr inbounds double, ptr %11, i64 %indvars.iv782 - %33 = load double, ptr %32, align 8 - %34 = fadd double %31, -1.000000e+00 - %35 = tail call noundef double @llvm.fabs.f64(double %34) - %36 = fcmp ogt double %35, 0x3CB0000000000000 - %37 = tail call double @llvm.fabs.f64(double %33) - %38 = fcmp ogt double %37, 0x10000000000000 - %or.cond = select i1 %36, i1 true, i1 %38 - br i1 %or.cond, label %39, label %.loopexit - -39: ; preds = %.lr.ph671 - %40 = load i32, ptr %4, align 4 - %.not546665 = icmp slt i32 %40, 1 - br i1 %.not546665, label %.loopexit, label %.lr.ph667 - -.lr.ph667: ; preds = %39 - %41 = fneg double %33 - %42 = add nuw i32 %40, 1 - %wide.trip.count780 = zext i32 %42 to i64 + %30 = shl nuw nsw i64 %indvar, 3 + %scevgep = getelementptr i8, ptr %7, i64 %30 + %31 = getelementptr inbounds double, ptr %10, i64 %indvars.iv782 + %32 = load double, ptr %31, align 8 + %33 = getelementptr inbounds double, ptr %11, i64 %indvars.iv782 + %34 = load double, ptr %33, align 8 + %35 = fadd double %32, -1.000000e+00 + %36 = tail call noundef double @llvm.fabs.f64(double %35) + %37 = fcmp ogt double %36, 0x3CB0000000000000 + %38 = tail call double @llvm.fabs.f64(double %34) + %39 = fcmp ogt double %38, 0x10000000000000 + %or.cond = select i1 %37, i1 true, i1 %39 + br i1 %or.cond, label %40, label %.loopexit + +40: ; preds = %.lr.ph671 + %41 = load i32, ptr %4, align 4 + %.not546665 = icmp slt i32 %41, 1 + br i1 %.not546665, label %.loopexit, label %.lver.check + +.lver.check: ; preds = %40 + %42 = fneg double %34 + %43 = add nuw i32 %41, 1 + %wide.trip.count780 = zext i32 %43 to i64 %gep833 = getelementptr double, ptr %invariant.gep832, i64 %indvars.iv782 %invariant.gep830 = getelementptr double, ptr %14, i64 %indvars.iv782 - br label %43 + br i1 %ident.check.not, label %.ph, label %.ph.lver.orig -43: ; preds = %.lr.ph667, %43 - %indvars.iv777 = phi i64 [ 1, %.lr.ph667 ], [ %indvars.iv.next778, %43 ] - %44 = mul nsw i64 %indvars.iv777, %29 +.ph.lver.orig: ; preds = %.lver.check, %.ph.lver.orig + %indvars.iv777.lver.orig = phi i64 [ %indvars.iv.next778.lver.orig, %.ph.lver.orig ], [ 1, %.lver.check ] + %44 = mul nsw i64 %indvars.iv777.lver.orig, %29 %45 = getelementptr double, ptr %gep833, i64 %44 %46 = load double, ptr %45, align 8 - %gep831 = getelementptr double, ptr %invariant.gep830, i64 %44 - %47 = load double, ptr %gep831, align 8 - %48 = fmul double %47, %41 - %49 = tail call double @llvm.fmuladd.f64(double %31, double %46, double %48) + %gep831.lver.orig = getelementptr double, ptr %invariant.gep830, i64 %44 + %47 = load double, ptr %gep831.lver.orig, align 8 + %48 = fmul double %47, %42 + %49 = tail call double @llvm.fmuladd.f64(double %32, double %46, double %48) store double %49, ptr %45, align 8 - %50 = fmul double %31, %47 - %51 = tail call double @llvm.fmuladd.f64(double %33, double %46, double %50) - store double %51, ptr %gep831, align 8 + %50 = fmul double %32, %47 + %51 = tail call double @llvm.fmuladd.f64(double %34, double %46, double %50) + store double %51, ptr %gep831.lver.orig, align 8 + %indvars.iv.next778.lver.orig = add nuw nsw i64 %indvars.iv777.lver.orig, 1 + %exitcond781.not.lver.orig = icmp eq i64 %indvars.iv.next778.lver.orig, %wide.trip.count780 + br i1 %exitcond781.not.lver.orig, label %.loopexit, label %.ph.lver.orig, !llvm.loop !4 + +.ph: ; preds = %.lver.check + %load_initial = load double, ptr %scevgep, align 8 + br label %52 + +52: ; preds = %.ph, %52 + %store_forwarded = phi double [ %load_initial, %.ph ], [ %57, %52 ] + %indvars.iv777 = phi i64 [ 1, %.ph ], [ %indvars.iv.next778, %52 ] + %53 = mul nuw nsw i64 %indvars.iv777, %29 + %54 = getelementptr double, ptr %gep833, i64 %53 + %55 = load double, ptr %54, align 8 + %gep831 = getelementptr double, ptr %invariant.gep830, i64 %53 + %56 = fmul double %store_forwarded, %42 + %57 = tail call double @llvm.fmuladd.f64(double %32, double %55, double %56) + store double %57, ptr %54, align 8 + %58 = fmul double %32, %store_forwarded + %59 = tail call double @llvm.fmuladd.f64(double %34, double %55, double %58) + store double %59, ptr %gep831, align 8 %indvars.iv.next778 = add nuw nsw i64 %indvars.iv777, 1 %exitcond781.not = icmp eq i64 %indvars.iv.next778, %wide.trip.count780 - br i1 %exitcond781.not, label %.loopexit, label %43, !llvm.loop !4 + br i1 %exitcond781.not, label %.loopexit, label %52, !llvm.loop !4 -.loopexit: ; preds = %43, %39, %.lr.ph671 +.loopexit: ; preds = %.ph.lver.orig, %52, %40, %.lr.ph671 %indvars.iv.next783 = add nuw nsw i64 %indvars.iv782, 1 %exitcond786.not = icmp eq i64 %indvars.iv.next783, %wide.trip.count785 + %indvar.next = add i64 %indvar, 1 br i1 %exitcond786.not, label %.loopexit570, label %.lr.ph671, !llvm.loop !6 -52: ; preds = %24, %24 - %53 = icmp sgt i32 %15, 1 - br i1 %53, label %.lr.ph664.preheader, label %.loopexit570 +60: ; preds = %24, %24 + %61 = icmp sgt i32 %15, 1 + br i1 %61, label %.lr.ph664.preheader, label %.loopexit570 -.lr.ph664.preheader: ; preds = %52 - %54 = sext i32 %12 to i64 - %55 = zext nneg i32 %15 to i64 +.lr.ph664.preheader: ; preds = %60 + %62 = sext i32 %12 to i64 + %63 = zext nneg i32 %15 to i64 + %64 = shl nuw nsw i64 %63, 3 + %65 = add nsw i64 %64, -16 + %ident.check846.not = icmp eq i32 %12, 1 br label %.lr.ph664 .lr.ph664: ; preds = %.lr.ph664.preheader, %.loopexit571 - %indvars.iv774 = phi i64 [ %55, %.lr.ph664.preheader ], [ %indvars.iv.next775, %.loopexit571 ] + %indvar850 = phi i64 [ 0, %.lr.ph664.preheader ], [ %indvar.next851, %.loopexit571 ] + %indvars.iv774 = phi i64 [ %63, %.lr.ph664.preheader ], [ %indvars.iv.next775, %.loopexit571 ] + %66 = shl i64 %indvar850, 3 + %67 = sub i64 %65, %66 + %scevgep852 = getelementptr i8, ptr %7, i64 %67 %indvars.iv.next775 = add nsw i64 %indvars.iv774, -1 - %56 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next775 - %57 = load double, ptr %56, align 8 - %58 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next775 - %59 = load double, ptr %58, align 8 - %60 = fadd double %57, -1.000000e+00 - %61 = tail call noundef double @llvm.fabs.f64(double %60) - %62 = fcmp ogt double %61, 0x3CB0000000000000 - %63 = tail call double @llvm.fabs.f64(double %59) - %64 = fcmp ogt double %63, 0x10000000000000 - %or.cond549 = select i1 %62, i1 true, i1 %64 - br i1 %or.cond549, label %65, label %.loopexit571 - -65: ; preds = %.lr.ph664 - %66 = load i32, ptr %4, align 4 - %.not544658 = icmp slt i32 %66, 1 - br i1 %.not544658, label %.loopexit571, label %.lr.ph660 - -.lr.ph660: ; preds = %65 - %67 = fneg double %59 - %68 = add nuw i32 %66, 1 - %wide.trip.count772 = zext i32 %68 to i64 + %68 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next775 + %69 = load double, ptr %68, align 8 + %70 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next775 + %71 = load double, ptr %70, align 8 + %72 = fadd double %69, -1.000000e+00 + %73 = tail call noundef double @llvm.fabs.f64(double %72) + %74 = fcmp ogt double %73, 0x3CB0000000000000 + %75 = tail call double @llvm.fabs.f64(double %71) + %76 = fcmp ogt double %75, 0x10000000000000 + %or.cond549 = select i1 %74, i1 true, i1 %76 + br i1 %or.cond549, label %77, label %.loopexit571 + +77: ; preds = %.lr.ph664 + %78 = load i32, ptr %4, align 4 + %.not544658 = icmp slt i32 %78, 1 + br i1 %.not544658, label %.loopexit571, label %.lver.check847 + +.lver.check847: ; preds = %77 + %79 = fneg double %71 + %80 = add nuw i32 %78, 1 + %wide.trip.count772 = zext i32 %80 to i64 %invariant.gep826 = getelementptr double, ptr %14, i64 %indvars.iv774 %invariant.gep828 = getelementptr double, ptr %14, i64 %indvars.iv.next775 - br label %69 - -69: ; preds = %.lr.ph660, %69 - %indvars.iv769 = phi i64 [ 1, %.lr.ph660 ], [ %indvars.iv.next770, %69 ] - %70 = mul nsw i64 %indvars.iv769, %54 - %gep827 = getelementptr double, ptr %invariant.gep826, i64 %70 - %71 = load double, ptr %gep827, align 8 - %gep829 = getelementptr double, ptr %invariant.gep828, i64 %70 - %72 = load double, ptr %gep829, align 8 - %73 = fmul double %72, %67 - %74 = tail call double @llvm.fmuladd.f64(double %57, double %71, double %73) - store double %74, ptr %gep827, align 8 - %75 = fmul double %57, %72 - %76 = tail call double @llvm.fmuladd.f64(double %59, double %71, double %75) - store double %76, ptr %gep829, align 8 + br i1 %ident.check846.not, label %.ph848, label %.ph848.lver.orig + +.ph848.lver.orig: ; preds = %.lver.check847, %.ph848.lver.orig + %indvars.iv769.lver.orig = phi i64 [ %indvars.iv.next770.lver.orig, %.ph848.lver.orig ], [ 1, %.lver.check847 ] + %81 = mul nsw i64 %indvars.iv769.lver.orig, %62 + %gep827.lver.orig = getelementptr double, ptr %invariant.gep826, i64 %81 + %82 = load double, ptr %gep827.lver.orig, align 8 + %gep829.lver.orig = getelementptr double, ptr %invariant.gep828, i64 %81 + %83 = load double, ptr %gep829.lver.orig, align 8 + %84 = fmul double %83, %79 + %85 = tail call double @llvm.fmuladd.f64(double %69, double %82, double %84) + store double %85, ptr %gep827.lver.orig, align 8 + %86 = fmul double %69, %83 + %87 = tail call double @llvm.fmuladd.f64(double %71, double %82, double %86) + store double %87, ptr %gep829.lver.orig, align 8 + %indvars.iv.next770.lver.orig = add nuw nsw i64 %indvars.iv769.lver.orig, 1 + %exitcond773.not.lver.orig = icmp eq i64 %indvars.iv.next770.lver.orig, %wide.trip.count772 + br i1 %exitcond773.not.lver.orig, label %.loopexit571, label %.ph848.lver.orig, !llvm.loop !7 + +.ph848: ; preds = %.lver.check847 + %load_initial853 = load double, ptr %scevgep852, align 8 + br label %88 + +88: ; preds = %.ph848, %88 + %store_forwarded854 = phi double [ %load_initial853, %.ph848 ], [ %92, %88 ] + %indvars.iv769 = phi i64 [ 1, %.ph848 ], [ %indvars.iv.next770, %88 ] + %89 = mul nuw nsw i64 %indvars.iv769, %62 + %gep827 = getelementptr double, ptr %invariant.gep826, i64 %89 + %90 = load double, ptr %gep827, align 8 + %gep829 = getelementptr double, ptr %invariant.gep828, i64 %89 + %91 = fmul double %store_forwarded854, %79 + %92 = tail call double @llvm.fmuladd.f64(double %69, double %90, double %91) + store double %92, ptr %gep827, align 8 + %93 = fmul double %69, %store_forwarded854 + %94 = tail call double @llvm.fmuladd.f64(double %71, double %90, double %93) + store double %94, ptr %gep829, align 8 %indvars.iv.next770 = add nuw nsw i64 %indvars.iv769, 1 %exitcond773.not = icmp eq i64 %indvars.iv.next770, %wide.trip.count772 - br i1 %exitcond773.not, label %.loopexit571, label %69, !llvm.loop !7 - -.loopexit571: ; preds = %69, %65, %.lr.ph664 - %77 = icmp sgt i64 %indvars.iv774, 2 - br i1 %77, label %.lr.ph664, label %.loopexit570, !llvm.loop !8 - -78: ; preds = %22, %22 - %79 = load i8, ptr %2, align 1 - %80 = add i8 %79, -66 - %81 = tail call i8 @llvm.fshl.i8(i8 %80, i8 %80, i8 6) - switch i8 %81, label %.loopexit570 [ - i8 1, label %82 - i8 9, label %82 - i8 0, label %109 - i8 8, label %109 + br i1 %exitcond773.not, label %.loopexit571, label %88, !llvm.loop !7 + +.loopexit571: ; preds = %.ph848.lver.orig, %88, %77, %.lr.ph664 + %95 = icmp sgt i64 %indvars.iv774, 2 + %indvar.next851 = add i64 %indvar850, 1 + br i1 %95, label %.lr.ph664, label %.loopexit570, !llvm.loop !8 + +96: ; preds = %22, %22 + %97 = load i8, ptr %2, align 1 + %98 = add i8 %97, -66 + %99 = tail call i8 @llvm.fshl.i8(i8 %98, i8 %98, i8 6) + switch i8 %99, label %.loopexit570 [ + i8 1, label %100 + i8 9, label %100 + i8 0, label %127 + i8 8, label %127 ] -82: ; preds = %78, %78 +100: ; preds = %96, %96 %.not542654 = icmp slt i32 %15, 2 br i1 %.not542654, label %.loopexit570, label %.lr.ph657 -.lr.ph657: ; preds = %82 +.lr.ph657: ; preds = %100 %invariant.gep649 = getelementptr i8, ptr %14, i64 8 - %83 = sext i32 %12 to i64 - %84 = add nuw i32 %15, 1 - %wide.trip.count767 = zext i32 %84 to i64 - br label %85 + %101 = sext i32 %12 to i64 + %102 = add nuw i32 %15, 1 + %wide.trip.count767 = zext i32 %102 to i64 + br label %103 -85: ; preds = %.lr.ph657, %.loopexit573 +103: ; preds = %.lr.ph657, %.loopexit573 %indvars.iv764 = phi i64 [ 2, %.lr.ph657 ], [ %indvars.iv.next765, %.loopexit573 ] - %86 = add nsw i64 %indvars.iv764, -1 - %87 = getelementptr inbounds double, ptr %10, i64 %86 - %88 = load double, ptr %87, align 8 - %89 = getelementptr inbounds double, ptr %11, i64 %86 - %90 = load double, ptr %89, align 8 - %91 = fadd double %88, -1.000000e+00 - %92 = tail call noundef double @llvm.fabs.f64(double %91) - %93 = fcmp ogt double %92, 0x3CB0000000000000 - %94 = tail call double @llvm.fabs.f64(double %90) - %95 = fcmp ogt double %94, 0x10000000000000 - %or.cond551 = select i1 %93, i1 true, i1 %95 - br i1 %or.cond551, label %96, label %.loopexit573 - -96: ; preds = %85 - %97 = load i32, ptr %4, align 4 - %.not543651 = icmp slt i32 %97, 1 + %104 = add nsw i64 %indvars.iv764, -1 + %105 = getelementptr inbounds double, ptr %10, i64 %104 + %106 = load double, ptr %105, align 8 + %107 = getelementptr inbounds double, ptr %11, i64 %104 + %108 = load double, ptr %107, align 8 + %109 = fadd double %106, -1.000000e+00 + %110 = tail call noundef double @llvm.fabs.f64(double %109) + %111 = fcmp ogt double %110, 0x3CB0000000000000 + %112 = tail call double @llvm.fabs.f64(double %108) + %113 = fcmp ogt double %112, 0x10000000000000 + %or.cond551 = select i1 %111, i1 true, i1 %113 + br i1 %or.cond551, label %114, label %.loopexit573 + +114: ; preds = %103 + %115 = load i32, ptr %4, align 4 + %.not543651 = icmp slt i32 %115, 1 br i1 %.not543651, label %.loopexit573, label %.lr.ph653 -.lr.ph653: ; preds = %96 - %98 = fneg double %90 - %99 = add nuw i32 %97, 1 - %wide.trip.count762 = zext i32 %99 to i64 +.lr.ph653: ; preds = %114 + %116 = fneg double %108 + %117 = add nuw i32 %115, 1 + %wide.trip.count762 = zext i32 %117 to i64 %invariant.gep824 = getelementptr double, ptr %14, i64 %indvars.iv764 - br label %100 - -100: ; preds = %.lr.ph653, %100 - %indvars.iv759 = phi i64 [ 1, %.lr.ph653 ], [ %indvars.iv.next760, %100 ] - %101 = mul nsw i64 %indvars.iv759, %83 - %gep825 = getelementptr double, ptr %invariant.gep824, i64 %101 - %102 = load double, ptr %gep825, align 8 - %gep650 = getelementptr double, ptr %invariant.gep649, i64 %101 - %103 = load double, ptr %gep650, align 8 - %104 = fmul double %103, %98 - %105 = tail call double @llvm.fmuladd.f64(double %88, double %102, double %104) - store double %105, ptr %gep825, align 8 - %106 = load double, ptr %gep650, align 8 - %107 = fmul double %88, %106 - %108 = tail call double @llvm.fmuladd.f64(double %90, double %102, double %107) - store double %108, ptr %gep650, align 8 + br label %118 + +118: ; preds = %.lr.ph653, %118 + %indvars.iv759 = phi i64 [ 1, %.lr.ph653 ], [ %indvars.iv.next760, %118 ] + %119 = mul nsw i64 %indvars.iv759, %101 + %gep825 = getelementptr double, ptr %invariant.gep824, i64 %119 + %120 = load double, ptr %gep825, align 8 + %gep650 = getelementptr double, ptr %invariant.gep649, i64 %119 + %121 = load double, ptr %gep650, align 8 + %122 = fmul double %121, %116 + %123 = tail call double @llvm.fmuladd.f64(double %106, double %120, double %122) + store double %123, ptr %gep825, align 8 + %124 = load double, ptr %gep650, align 8 + %125 = fmul double %106, %124 + %126 = tail call double @llvm.fmuladd.f64(double %108, double %120, double %125) + store double %126, ptr %gep650, align 8 %indvars.iv.next760 = add nuw nsw i64 %indvars.iv759, 1 %exitcond763.not = icmp eq i64 %indvars.iv.next760, %wide.trip.count762 - br i1 %exitcond763.not, label %.loopexit573, label %100, !llvm.loop !9 + br i1 %exitcond763.not, label %.loopexit573, label %118, !llvm.loop !9 -.loopexit573: ; preds = %100, %96, %85 +.loopexit573: ; preds = %118, %114, %103 %indvars.iv.next765 = add nuw nsw i64 %indvars.iv764, 1 %exitcond768.not = icmp eq i64 %indvars.iv.next765, %wide.trip.count767 - br i1 %exitcond768.not, label %.loopexit570, label %85, !llvm.loop !10 + br i1 %exitcond768.not, label %.loopexit570, label %103, !llvm.loop !10 -109: ; preds = %78, %78 - %110 = icmp sgt i32 %15, 1 - br i1 %110, label %.lr.ph648, label %.loopexit570 +127: ; preds = %96, %96 + %128 = icmp sgt i32 %15, 1 + br i1 %128, label %.lr.ph648, label %.loopexit570 -.lr.ph648: ; preds = %109 +.lr.ph648: ; preds = %127 %invariant.gep = getelementptr i8, ptr %14, i64 8 - %111 = sext i32 %12 to i64 - %112 = zext nneg i32 %15 to i64 - br label %113 + %129 = sext i32 %12 to i64 + %130 = zext nneg i32 %15 to i64 + br label %131 -113: ; preds = %.lr.ph648, %.loopexit575 - %indvars.iv756 = phi i64 [ %112, %.lr.ph648 ], [ %indvars.iv.next757, %.loopexit575 ] +131: ; preds = %.lr.ph648, %.loopexit575 + %indvars.iv756 = phi i64 [ %130, %.lr.ph648 ], [ %indvars.iv.next757, %.loopexit575 ] %indvars.iv.next757 = add nsw i64 %indvars.iv756, -1 - %114 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next757 - %115 = load double, ptr %114, align 8 - %116 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next757 - %117 = load double, ptr %116, align 8 - %118 = fadd double %115, -1.000000e+00 - %119 = tail call noundef double @llvm.fabs.f64(double %118) - %120 = fcmp ogt double %119, 0x3CB0000000000000 - %121 = tail call double @llvm.fabs.f64(double %117) - %122 = fcmp ogt double %121, 0x10000000000000 - %or.cond553 = select i1 %120, i1 true, i1 %122 - br i1 %or.cond553, label %123, label %.loopexit575 - -123: ; preds = %113 - %124 = load i32, ptr %4, align 4 - %.not541644 = icmp slt i32 %124, 1 + %132 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next757 + %133 = load double, ptr %132, align 8 + %134 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next757 + %135 = load double, ptr %134, align 8 + %136 = fadd double %133, -1.000000e+00 + %137 = tail call noundef double @llvm.fabs.f64(double %136) + %138 = fcmp ogt double %137, 0x3CB0000000000000 + %139 = tail call double @llvm.fabs.f64(double %135) + %140 = fcmp ogt double %139, 0x10000000000000 + %or.cond553 = select i1 %138, i1 true, i1 %140 + br i1 %or.cond553, label %141, label %.loopexit575 + +141: ; preds = %131 + %142 = load i32, ptr %4, align 4 + %.not541644 = icmp slt i32 %142, 1 br i1 %.not541644, label %.loopexit575, label %.lr.ph646 -.lr.ph646: ; preds = %123 - %125 = fneg double %117 - %126 = add nuw i32 %124, 1 - %wide.trip.count754 = zext i32 %126 to i64 +.lr.ph646: ; preds = %141 + %143 = fneg double %135 + %144 = add nuw i32 %142, 1 + %wide.trip.count754 = zext i32 %144 to i64 %invariant.gep822 = getelementptr double, ptr %14, i64 %indvars.iv756 - br label %127 - -127: ; preds = %.lr.ph646, %127 - %indvars.iv751 = phi i64 [ 1, %.lr.ph646 ], [ %indvars.iv.next752, %127 ] - %128 = mul nsw i64 %indvars.iv751, %111 - %gep823 = getelementptr double, ptr %invariant.gep822, i64 %128 - %129 = load double, ptr %gep823, align 8 - %gep = getelementptr double, ptr %invariant.gep, i64 %128 - %130 = load double, ptr %gep, align 8 - %131 = fmul double %130, %125 - %132 = tail call double @llvm.fmuladd.f64(double %115, double %129, double %131) - store double %132, ptr %gep823, align 8 - %133 = load double, ptr %gep, align 8 - %134 = fmul double %115, %133 - %135 = tail call double @llvm.fmuladd.f64(double %117, double %129, double %134) - store double %135, ptr %gep, align 8 + br label %145 + +145: ; preds = %.lr.ph646, %145 + %indvars.iv751 = phi i64 [ 1, %.lr.ph646 ], [ %indvars.iv.next752, %145 ] + %146 = mul nsw i64 %indvars.iv751, %129 + %gep823 = getelementptr double, ptr %invariant.gep822, i64 %146 + %147 = load double, ptr %gep823, align 8 + %gep = getelementptr double, ptr %invariant.gep, i64 %146 + %148 = load double, ptr %gep, align 8 + %149 = fmul double %148, %143 + %150 = tail call double @llvm.fmuladd.f64(double %133, double %147, double %149) + store double %150, ptr %gep823, align 8 + %151 = load double, ptr %gep, align 8 + %152 = fmul double %133, %151 + %153 = tail call double @llvm.fmuladd.f64(double %135, double %147, double %152) + store double %153, ptr %gep, align 8 %indvars.iv.next752 = add nuw nsw i64 %indvars.iv751, 1 %exitcond755.not = icmp eq i64 %indvars.iv.next752, %wide.trip.count754 - br i1 %exitcond755.not, label %.loopexit575, label %127, !llvm.loop !11 - -.loopexit575: ; preds = %127, %123, %113 - %136 = icmp sgt i64 %indvars.iv756, 2 - br i1 %136, label %113, label %.loopexit570, !llvm.loop !12 - -137: ; preds = %22, %22 - %138 = load i8, ptr %2, align 1 - %139 = add i8 %138, -66 - %140 = tail call i8 @llvm.fshl.i8(i8 %139, i8 %139, i8 6) - switch i8 %140, label %.loopexit570 [ - i8 1, label %141 - i8 9, label %141 - i8 0, label %173 - i8 8, label %173 + br i1 %exitcond755.not, label %.loopexit575, label %145, !llvm.loop !11 + +.loopexit575: ; preds = %145, %141, %131 + %154 = icmp sgt i64 %indvars.iv756, 2 + br i1 %154, label %131, label %.loopexit570, !llvm.loop !12 + +155: ; preds = %22, %22 + %156 = load i8, ptr %2, align 1 + %157 = add i8 %156, -66 + %158 = tail call i8 @llvm.fshl.i8(i8 %157, i8 %157, i8 6) + switch i8 %158, label %.loopexit570 [ + i8 1, label %159 + i8 9, label %159 + i8 0, label %191 + i8 8, label %191 ] -141: ; preds = %137, %137 +159: ; preds = %155, %155 %.not539.not640 = icmp sgt i32 %15, 1 br i1 %.not539.not640, label %.lr.ph643.preheader, label %.loopexit570 -.lr.ph643.preheader: ; preds = %141 - %142 = sext i32 %12 to i64 +.lr.ph643.preheader: ; preds = %159 + %160 = sext i32 %12 to i64 %wide.trip.count749 = zext nneg i32 %15 to i64 br label %.lr.ph643 .lr.ph643: ; preds = %.lr.ph643.preheader, %.loopexit577 %indvars.iv746 = phi i64 [ 1, %.lr.ph643.preheader ], [ %indvars.iv.next747, %.loopexit577 ] - %143 = getelementptr inbounds double, ptr %10, i64 %indvars.iv746 - %144 = load double, ptr %143, align 8 - %145 = getelementptr inbounds double, ptr %11, i64 %indvars.iv746 - %146 = load double, ptr %145, align 8 - %147 = fadd double %144, -1.000000e+00 - %148 = tail call noundef double @llvm.fabs.f64(double %147) - %149 = fcmp ogt double %148, 0x3CB0000000000000 - %150 = tail call double @llvm.fabs.f64(double %146) - %151 = fcmp ogt double %150, 0x10000000000000 - %or.cond555 = select i1 %149, i1 true, i1 %151 - br i1 %or.cond555, label %152, label %.loopexit577 - -152: ; preds = %.lr.ph643 - %153 = load i32, ptr %4, align 4 - %.not540637 = icmp slt i32 %153, 1 + %161 = getelementptr inbounds double, ptr %10, i64 %indvars.iv746 + %162 = load double, ptr %161, align 8 + %163 = getelementptr inbounds double, ptr %11, i64 %indvars.iv746 + %164 = load double, ptr %163, align 8 + %165 = fadd double %162, -1.000000e+00 + %166 = tail call noundef double @llvm.fabs.f64(double %165) + %167 = fcmp ogt double %166, 0x3CB0000000000000 + %168 = tail call double @llvm.fabs.f64(double %164) + %169 = fcmp ogt double %168, 0x10000000000000 + %or.cond555 = select i1 %167, i1 true, i1 %169 + br i1 %or.cond555, label %170, label %.loopexit577 + +170: ; preds = %.lr.ph643 + %171 = load i32, ptr %4, align 4 + %.not540637 = icmp slt i32 %171, 1 br i1 %.not540637, label %.loopexit577, label %.lr.ph639 -.lr.ph639: ; preds = %152 - %154 = fneg double %146 - %155 = add nuw i32 %153, 1 - %wide.trip.count744 = zext i32 %155 to i64 +.lr.ph639: ; preds = %170 + %172 = fneg double %164 + %173 = add nuw i32 %171, 1 + %wide.trip.count744 = zext i32 %173 to i64 %invariant.gep820 = getelementptr double, ptr %14, i64 %indvars.iv746 - br label %156 - -156: ; preds = %.lr.ph639, %156 - %indvars.iv741 = phi i64 [ 1, %.lr.ph639 ], [ %indvars.iv.next742, %156 ] - %157 = mul nsw i64 %indvars.iv741, %142 - %gep821 = getelementptr double, ptr %invariant.gep820, i64 %157 - %158 = load double, ptr %gep821, align 8 - %159 = load i32, ptr %3, align 4 - %160 = sext i32 %159 to i64 - %161 = getelementptr double, ptr %14, i64 %157 - %162 = getelementptr double, ptr %161, i64 %160 - %163 = load double, ptr %162, align 8 - %164 = fmul double %144, %158 - %165 = tail call double @llvm.fmuladd.f64(double %146, double %163, double %164) - store double %165, ptr %gep821, align 8 - %166 = load i32, ptr %3, align 4 - %167 = sext i32 %166 to i64 - %168 = getelementptr double, ptr %14, i64 %157 - %169 = getelementptr double, ptr %168, i64 %167 - %170 = load double, ptr %169, align 8 - %171 = fmul double %158, %154 - %172 = tail call double @llvm.fmuladd.f64(double %144, double %170, double %171) - store double %172, ptr %169, align 8 + br label %174 + +174: ; preds = %.lr.ph639, %174 + %indvars.iv741 = phi i64 [ 1, %.lr.ph639 ], [ %indvars.iv.next742, %174 ] + %175 = mul nsw i64 %indvars.iv741, %160 + %gep821 = getelementptr double, ptr %invariant.gep820, i64 %175 + %176 = load double, ptr %gep821, align 8 + %177 = load i32, ptr %3, align 4 + %178 = sext i32 %177 to i64 + %179 = getelementptr double, ptr %14, i64 %175 + %180 = getelementptr double, ptr %179, i64 %178 + %181 = load double, ptr %180, align 8 + %182 = fmul double %162, %176 + %183 = tail call double @llvm.fmuladd.f64(double %164, double %181, double %182) + store double %183, ptr %gep821, align 8 + %184 = load i32, ptr %3, align 4 + %185 = sext i32 %184 to i64 + %186 = getelementptr double, ptr %14, i64 %175 + %187 = getelementptr double, ptr %186, i64 %185 + %188 = load double, ptr %187, align 8 + %189 = fmul double %176, %172 + %190 = tail call double @llvm.fmuladd.f64(double %162, double %188, double %189) + store double %190, ptr %187, align 8 %indvars.iv.next742 = add nuw nsw i64 %indvars.iv741, 1 %exitcond745.not = icmp eq i64 %indvars.iv.next742, %wide.trip.count744 - br i1 %exitcond745.not, label %.loopexit577, label %156, !llvm.loop !13 + br i1 %exitcond745.not, label %.loopexit577, label %174, !llvm.loop !13 -.loopexit577: ; preds = %156, %152, %.lr.ph643 +.loopexit577: ; preds = %174, %170, %.lr.ph643 %indvars.iv.next747 = add nuw nsw i64 %indvars.iv746, 1 %exitcond750.not = icmp eq i64 %indvars.iv.next747, %wide.trip.count749 br i1 %exitcond750.not, label %.loopexit570, label %.lr.ph643, !llvm.loop !14 -173: ; preds = %137, %137 - %174 = icmp sgt i32 %15, 1 - br i1 %174, label %.lr.ph636.preheader, label %.loopexit570 +191: ; preds = %155, %155 + %192 = icmp sgt i32 %15, 1 + br i1 %192, label %.lr.ph636.preheader, label %.loopexit570 -.lr.ph636.preheader: ; preds = %173 - %175 = sext i32 %12 to i64 - %176 = zext nneg i32 %15 to i64 +.lr.ph636.preheader: ; preds = %191 + %193 = sext i32 %12 to i64 + %194 = zext nneg i32 %15 to i64 br label %.lr.ph636 .lr.ph636: ; preds = %.lr.ph636.preheader, %.loopexit579 - %indvars.iv738 = phi i64 [ %176, %.lr.ph636.preheader ], [ %indvars.iv.next739, %.loopexit579 ] + %indvars.iv738 = phi i64 [ %194, %.lr.ph636.preheader ], [ %indvars.iv.next739, %.loopexit579 ] %indvars.iv.next739 = add nsw i64 %indvars.iv738, -1 - %177 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next739 - %178 = load double, ptr %177, align 8 - %179 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next739 - %180 = load double, ptr %179, align 8 - %181 = fadd double %178, -1.000000e+00 - %182 = tail call noundef double @llvm.fabs.f64(double %181) - %183 = fcmp ogt double %182, 0x3CB0000000000000 - %184 = tail call double @llvm.fabs.f64(double %180) - %185 = fcmp ogt double %184, 0x10000000000000 - %or.cond557 = select i1 %183, i1 true, i1 %185 - br i1 %or.cond557, label %186, label %.loopexit579 - -186: ; preds = %.lr.ph636 - %187 = load i32, ptr %4, align 4 - %.not538631 = icmp slt i32 %187, 1 + %195 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next739 + %196 = load double, ptr %195, align 8 + %197 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next739 + %198 = load double, ptr %197, align 8 + %199 = fadd double %196, -1.000000e+00 + %200 = tail call noundef double @llvm.fabs.f64(double %199) + %201 = fcmp ogt double %200, 0x3CB0000000000000 + %202 = tail call double @llvm.fabs.f64(double %198) + %203 = fcmp ogt double %202, 0x10000000000000 + %or.cond557 = select i1 %201, i1 true, i1 %203 + br i1 %or.cond557, label %204, label %.loopexit579 + +204: ; preds = %.lr.ph636 + %205 = load i32, ptr %4, align 4 + %.not538631 = icmp slt i32 %205, 1 br i1 %.not538631, label %.loopexit579, label %.lr.ph633 -.lr.ph633: ; preds = %186 - %188 = fneg double %180 - %189 = add nuw i32 %187, 1 - %wide.trip.count736 = zext i32 %189 to i64 +.lr.ph633: ; preds = %204 + %206 = fneg double %198 + %207 = add nuw i32 %205, 1 + %wide.trip.count736 = zext i32 %207 to i64 %invariant.gep818 = getelementptr double, ptr %14, i64 %indvars.iv.next739 - br label %190 - -190: ; preds = %.lr.ph633, %190 - %indvars.iv733 = phi i64 [ 1, %.lr.ph633 ], [ %indvars.iv.next734, %190 ] - %191 = mul nsw i64 %indvars.iv733, %175 - %gep819 = getelementptr double, ptr %invariant.gep818, i64 %191 - %192 = load double, ptr %gep819, align 8 - %193 = load i32, ptr %3, align 4 - %194 = sext i32 %193 to i64 - %195 = getelementptr double, ptr %14, i64 %191 - %196 = getelementptr double, ptr %195, i64 %194 - %197 = load double, ptr %196, align 8 - %198 = fmul double %178, %192 - %199 = tail call double @llvm.fmuladd.f64(double %180, double %197, double %198) - store double %199, ptr %gep819, align 8 - %200 = load i32, ptr %3, align 4 - %201 = sext i32 %200 to i64 - %202 = getelementptr double, ptr %14, i64 %191 - %203 = getelementptr double, ptr %202, i64 %201 - %204 = load double, ptr %203, align 8 - %205 = fmul double %192, %188 - %206 = tail call double @llvm.fmuladd.f64(double %178, double %204, double %205) - store double %206, ptr %203, align 8 + br label %208 + +208: ; preds = %.lr.ph633, %208 + %indvars.iv733 = phi i64 [ 1, %.lr.ph633 ], [ %indvars.iv.next734, %208 ] + %209 = mul nsw i64 %indvars.iv733, %193 + %gep819 = getelementptr double, ptr %invariant.gep818, i64 %209 + %210 = load double, ptr %gep819, align 8 + %211 = load i32, ptr %3, align 4 + %212 = sext i32 %211 to i64 + %213 = getelementptr double, ptr %14, i64 %209 + %214 = getelementptr double, ptr %213, i64 %212 + %215 = load double, ptr %214, align 8 + %216 = fmul double %196, %210 + %217 = tail call double @llvm.fmuladd.f64(double %198, double %215, double %216) + store double %217, ptr %gep819, align 8 + %218 = load i32, ptr %3, align 4 + %219 = sext i32 %218 to i64 + %220 = getelementptr double, ptr %14, i64 %209 + %221 = getelementptr double, ptr %220, i64 %219 + %222 = load double, ptr %221, align 8 + %223 = fmul double %210, %206 + %224 = tail call double @llvm.fmuladd.f64(double %196, double %222, double %223) + store double %224, ptr %221, align 8 %indvars.iv.next734 = add nuw nsw i64 %indvars.iv733, 1 %exitcond737.not = icmp eq i64 %indvars.iv.next734, %wide.trip.count736 - br i1 %exitcond737.not, label %.loopexit579, label %190, !llvm.loop !15 - -.loopexit579: ; preds = %190, %186, %.lr.ph636 - %207 = icmp sgt i64 %indvars.iv738, 2 - br i1 %207, label %.lr.ph636, label %.loopexit570, !llvm.loop !16 - -208: ; preds = %20, %20 - %209 = load i8, ptr %1, align 1 - switch i8 %209, label %.loopexit570 [ - i8 86, label %210 - i8 118, label %210 - i8 84, label %268 - i8 116, label %268 - i8 66, label %325 - i8 98, label %325 + br i1 %exitcond737.not, label %.loopexit579, label %208, !llvm.loop !15 + +.loopexit579: ; preds = %208, %204, %.lr.ph636 + %225 = icmp sgt i64 %indvars.iv738, 2 + br i1 %225, label %.lr.ph636, label %.loopexit570, !llvm.loop !16 + +226: ; preds = %20, %20 + %227 = load i8, ptr %1, align 1 + switch i8 %227, label %.loopexit570 [ + i8 86, label %228 + i8 118, label %228 + i8 84, label %286 + i8 116, label %286 + i8 66, label %343 + i8 98, label %343 ] -210: ; preds = %208, %208 - %211 = load i8, ptr %2, align 1 - %212 = add i8 %211, -66 - %213 = tail call i8 @llvm.fshl.i8(i8 %212, i8 %212, i8 6) - switch i8 %213, label %.loopexit570 [ - i8 1, label %214 - i8 9, label %214 - i8 0, label %240 - i8 8, label %240 +228: ; preds = %226, %226 + %229 = load i8, ptr %2, align 1 + %230 = add i8 %229, -66 + %231 = tail call i8 @llvm.fshl.i8(i8 %230, i8 %230, i8 6) + switch i8 %231, label %.loopexit570 [ + i8 1, label %232 + i8 9, label %232 + i8 0, label %258 + i8 8, label %258 ] -214: ; preds = %210, %210 +232: ; preds = %228, %228 %.not536.not627 = icmp sgt i32 %18, 1 br i1 %.not536.not627, label %.lr.ph630.preheader, label %.loopexit570 -.lr.ph630.preheader: ; preds = %214 - %215 = sext i32 %12 to i64 +.lr.ph630.preheader: ; preds = %232 + %233 = sext i32 %12 to i64 %wide.trip.count731 = zext nneg i32 %18 to i64 br label %.lr.ph630 .lr.ph630: ; preds = %.lr.ph630.preheader, %.loopexit581 %indvars.iv728 = phi i64 [ 1, %.lr.ph630.preheader ], [ %indvars.iv.next729, %.loopexit581 ] - %216 = getelementptr inbounds double, ptr %10, i64 %indvars.iv728 - %217 = load double, ptr %216, align 8 - %218 = getelementptr inbounds double, ptr %11, i64 %indvars.iv728 - %219 = load double, ptr %218, align 8 - %220 = fadd double %217, -1.000000e+00 - %221 = tail call noundef double @llvm.fabs.f64(double %220) - %222 = fcmp ogt double %221, 0x3CB0000000000000 - %223 = tail call double @llvm.fabs.f64(double %219) - %224 = fcmp ogt double %223, 0x10000000000000 - %or.cond559 = select i1 %222, i1 true, i1 %224 - br i1 %or.cond559, label %225, label %.loopexit581 - -225: ; preds = %.lr.ph630 - %226 = load i32, ptr %3, align 4 - %.not537624 = icmp slt i32 %226, 1 + %234 = getelementptr inbounds double, ptr %10, i64 %indvars.iv728 + %235 = load double, ptr %234, align 8 + %236 = getelementptr inbounds double, ptr %11, i64 %indvars.iv728 + %237 = load double, ptr %236, align 8 + %238 = fadd double %235, -1.000000e+00 + %239 = tail call noundef double @llvm.fabs.f64(double %238) + %240 = fcmp ogt double %239, 0x3CB0000000000000 + %241 = tail call double @llvm.fabs.f64(double %237) + %242 = fcmp ogt double %241, 0x10000000000000 + %or.cond559 = select i1 %240, i1 true, i1 %242 + br i1 %or.cond559, label %243, label %.loopexit581 + +243: ; preds = %.lr.ph630 + %244 = load i32, ptr %3, align 4 + %.not537624 = icmp slt i32 %244, 1 br i1 %.not537624, label %.loopexit581, label %.lr.ph626 -.lr.ph626: ; preds = %225 - %227 = add nuw nsw i64 %indvars.iv728, 1 - %228 = mul nsw i64 %227, %215 - %229 = mul nsw i64 %indvars.iv728, %215 - %230 = fneg double %219 - %231 = add nuw i32 %226, 1 - %wide.trip.count726 = zext i32 %231 to i64 - %invariant.gep814 = getelementptr double, ptr %14, i64 %228 - %invariant.gep816 = getelementptr double, ptr %14, i64 %229 - br label %232 - -232: ; preds = %.lr.ph626, %232 - %indvars.iv723 = phi i64 [ 1, %.lr.ph626 ], [ %indvars.iv.next724, %232 ] +.lr.ph626: ; preds = %243 + %245 = add nuw nsw i64 %indvars.iv728, 1 + %246 = mul nsw i64 %245, %233 + %247 = mul nsw i64 %indvars.iv728, %233 + %248 = fneg double %237 + %249 = add nuw i32 %244, 1 + %wide.trip.count726 = zext i32 %249 to i64 + %invariant.gep814 = getelementptr double, ptr %14, i64 %246 + %invariant.gep816 = getelementptr double, ptr %14, i64 %247 + br label %250 + +250: ; preds = %.lr.ph626, %250 + %indvars.iv723 = phi i64 [ 1, %.lr.ph626 ], [ %indvars.iv.next724, %250 ] %gep815 = getelementptr double, ptr %invariant.gep814, i64 %indvars.iv723 - %233 = load double, ptr %gep815, align 8 + %251 = load double, ptr %gep815, align 8 %gep817 = getelementptr double, ptr %invariant.gep816, i64 %indvars.iv723 - %234 = load double, ptr %gep817, align 8 - %235 = fmul double %234, %230 - %236 = tail call double @llvm.fmuladd.f64(double %217, double %233, double %235) - store double %236, ptr %gep815, align 8 - %237 = load double, ptr %gep817, align 8 - %238 = fmul double %217, %237 - %239 = tail call double @llvm.fmuladd.f64(double %219, double %233, double %238) - store double %239, ptr %gep817, align 8 + %252 = load double, ptr %gep817, align 8 + %253 = fmul double %252, %248 + %254 = tail call double @llvm.fmuladd.f64(double %235, double %251, double %253) + store double %254, ptr %gep815, align 8 + %255 = load double, ptr %gep817, align 8 + %256 = fmul double %235, %255 + %257 = tail call double @llvm.fmuladd.f64(double %237, double %251, double %256) + store double %257, ptr %gep817, align 8 %indvars.iv.next724 = add nuw nsw i64 %indvars.iv723, 1 %exitcond727.not = icmp eq i64 %indvars.iv.next724, %wide.trip.count726 - br i1 %exitcond727.not, label %.loopexit581, label %232, !llvm.loop !17 + br i1 %exitcond727.not, label %.loopexit581, label %250, !llvm.loop !17 -.loopexit581: ; preds = %232, %225, %.lr.ph630 +.loopexit581: ; preds = %250, %243, %.lr.ph630 %indvars.iv.next729 = add nuw nsw i64 %indvars.iv728, 1 %exitcond732.not = icmp eq i64 %indvars.iv.next729, %wide.trip.count731 br i1 %exitcond732.not, label %.loopexit570, label %.lr.ph630, !llvm.loop !18 -240: ; preds = %210, %210 - %241 = icmp sgt i32 %18, 1 - br i1 %241, label %.lr.ph623.preheader, label %.loopexit570 +258: ; preds = %228, %228 + %259 = icmp sgt i32 %18, 1 + br i1 %259, label %.lr.ph623.preheader, label %.loopexit570 -.lr.ph623.preheader: ; preds = %240 - %242 = zext nneg i32 %18 to i64 - %243 = sext i32 %12 to i64 +.lr.ph623.preheader: ; preds = %258 + %260 = zext nneg i32 %18 to i64 + %261 = sext i32 %12 to i64 br label %.lr.ph623 .lr.ph623: ; preds = %.lr.ph623.preheader, %.loopexit583 - %indvars.iv720 = phi i64 [ %242, %.lr.ph623.preheader ], [ %indvars.iv.next721, %.loopexit583 ] + %indvars.iv720 = phi i64 [ %260, %.lr.ph623.preheader ], [ %indvars.iv.next721, %.loopexit583 ] %indvars.iv.next721 = add nsw i64 %indvars.iv720, -1 - %244 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next721 - %245 = load double, ptr %244, align 8 - %246 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next721 - %247 = load double, ptr %246, align 8 - %248 = fadd double %245, -1.000000e+00 - %249 = tail call noundef double @llvm.fabs.f64(double %248) - %250 = fcmp ogt double %249, 0x3CB0000000000000 - %251 = tail call double @llvm.fabs.f64(double %247) - %252 = fcmp ogt double %251, 0x10000000000000 - %or.cond561 = select i1 %250, i1 true, i1 %252 - br i1 %or.cond561, label %253, label %.loopexit583 - -253: ; preds = %.lr.ph623 - %254 = load i32, ptr %3, align 4 - %.not535617 = icmp slt i32 %254, 1 + %262 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next721 + %263 = load double, ptr %262, align 8 + %264 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next721 + %265 = load double, ptr %264, align 8 + %266 = fadd double %263, -1.000000e+00 + %267 = tail call noundef double @llvm.fabs.f64(double %266) + %268 = fcmp ogt double %267, 0x3CB0000000000000 + %269 = tail call double @llvm.fabs.f64(double %265) + %270 = fcmp ogt double %269, 0x10000000000000 + %or.cond561 = select i1 %268, i1 true, i1 %270 + br i1 %or.cond561, label %271, label %.loopexit583 + +271: ; preds = %.lr.ph623 + %272 = load i32, ptr %3, align 4 + %.not535617 = icmp slt i32 %272, 1 br i1 %.not535617, label %.loopexit583, label %.lr.ph619 -.lr.ph619: ; preds = %253 - %255 = mul nsw i64 %indvars.iv720, %243 - %256 = mul nsw i64 %indvars.iv.next721, %243 - %257 = fneg double %247 - %258 = add nuw i32 %254, 1 - %wide.trip.count718 = zext i32 %258 to i64 - %invariant.gep810 = getelementptr double, ptr %14, i64 %255 - %invariant.gep812 = getelementptr double, ptr %14, i64 %256 - br label %259 - -259: ; preds = %.lr.ph619, %259 - %indvars.iv715 = phi i64 [ 1, %.lr.ph619 ], [ %indvars.iv.next716, %259 ] +.lr.ph619: ; preds = %271 + %273 = mul nsw i64 %indvars.iv720, %261 + %274 = mul nsw i64 %indvars.iv.next721, %261 + %275 = fneg double %265 + %276 = add nuw i32 %272, 1 + %wide.trip.count718 = zext i32 %276 to i64 + %invariant.gep810 = getelementptr double, ptr %14, i64 %273 + %invariant.gep812 = getelementptr double, ptr %14, i64 %274 + br label %277 + +277: ; preds = %.lr.ph619, %277 + %indvars.iv715 = phi i64 [ 1, %.lr.ph619 ], [ %indvars.iv.next716, %277 ] %gep811 = getelementptr double, ptr %invariant.gep810, i64 %indvars.iv715 - %260 = load double, ptr %gep811, align 8 + %278 = load double, ptr %gep811, align 8 %gep813 = getelementptr double, ptr %invariant.gep812, i64 %indvars.iv715 - %261 = load double, ptr %gep813, align 8 - %262 = fmul double %261, %257 - %263 = tail call double @llvm.fmuladd.f64(double %245, double %260, double %262) - store double %263, ptr %gep811, align 8 - %264 = load double, ptr %gep813, align 8 - %265 = fmul double %245, %264 - %266 = tail call double @llvm.fmuladd.f64(double %247, double %260, double %265) - store double %266, ptr %gep813, align 8 + %279 = load double, ptr %gep813, align 8 + %280 = fmul double %279, %275 + %281 = tail call double @llvm.fmuladd.f64(double %263, double %278, double %280) + store double %281, ptr %gep811, align 8 + %282 = load double, ptr %gep813, align 8 + %283 = fmul double %263, %282 + %284 = tail call double @llvm.fmuladd.f64(double %265, double %278, double %283) + store double %284, ptr %gep813, align 8 %indvars.iv.next716 = add nuw nsw i64 %indvars.iv715, 1 %exitcond719.not = icmp eq i64 %indvars.iv.next716, %wide.trip.count718 - br i1 %exitcond719.not, label %.loopexit583, label %259, !llvm.loop !19 - -.loopexit583: ; preds = %259, %253, %.lr.ph623 - %267 = icmp sgt i64 %indvars.iv720, 2 - br i1 %267, label %.lr.ph623, label %.loopexit570, !llvm.loop !20 - -268: ; preds = %208, %208 - %269 = load i8, ptr %2, align 1 - %270 = add i8 %269, -66 - %271 = tail call i8 @llvm.fshl.i8(i8 %270, i8 %270, i8 6) - switch i8 %271, label %.loopexit570 [ - i8 1, label %272 - i8 9, label %272 - i8 0, label %298 - i8 8, label %298 + br i1 %exitcond719.not, label %.loopexit583, label %277, !llvm.loop !19 + +.loopexit583: ; preds = %277, %271, %.lr.ph623 + %285 = icmp sgt i64 %indvars.iv720, 2 + br i1 %285, label %.lr.ph623, label %.loopexit570, !llvm.loop !20 + +286: ; preds = %226, %226 + %287 = load i8, ptr %2, align 1 + %288 = add i8 %287, -66 + %289 = tail call i8 @llvm.fshl.i8(i8 %288, i8 %288, i8 6) + switch i8 %289, label %.loopexit570 [ + i8 1, label %290 + i8 9, label %290 + i8 0, label %316 + i8 8, label %316 ] -272: ; preds = %268, %268 +290: ; preds = %286, %286 %.not533613 = icmp slt i32 %18, 2 br i1 %.not533613, label %.loopexit570, label %.lr.ph616.preheader -.lr.ph616.preheader: ; preds = %272 - %273 = sext i32 %12 to i64 - %274 = add nuw i32 %18, 1 - %wide.trip.count713 = zext i32 %274 to i64 - %invariant.gep808 = getelementptr double, ptr %14, i64 %273 +.lr.ph616.preheader: ; preds = %290 + %291 = sext i32 %12 to i64 + %292 = add nuw i32 %18, 1 + %wide.trip.count713 = zext i32 %292 to i64 + %invariant.gep808 = getelementptr double, ptr %14, i64 %291 br label %.lr.ph616 .lr.ph616: ; preds = %.lr.ph616.preheader, %.loopexit585 %indvars.iv710 = phi i64 [ 2, %.lr.ph616.preheader ], [ %indvars.iv.next711, %.loopexit585 ] - %275 = add nsw i64 %indvars.iv710, -1 - %276 = getelementptr inbounds double, ptr %10, i64 %275 - %277 = load double, ptr %276, align 8 - %278 = getelementptr inbounds double, ptr %11, i64 %275 - %279 = load double, ptr %278, align 8 - %280 = fadd double %277, -1.000000e+00 - %281 = tail call noundef double @llvm.fabs.f64(double %280) - %282 = fcmp ogt double %281, 0x3CB0000000000000 - %283 = tail call double @llvm.fabs.f64(double %279) - %284 = fcmp ogt double %283, 0x10000000000000 - %or.cond563 = select i1 %282, i1 true, i1 %284 - br i1 %or.cond563, label %285, label %.loopexit585 - -285: ; preds = %.lr.ph616 - %286 = load i32, ptr %3, align 4 - %.not534610 = icmp slt i32 %286, 1 + %293 = add nsw i64 %indvars.iv710, -1 + %294 = getelementptr inbounds double, ptr %10, i64 %293 + %295 = load double, ptr %294, align 8 + %296 = getelementptr inbounds double, ptr %11, i64 %293 + %297 = load double, ptr %296, align 8 + %298 = fadd double %295, -1.000000e+00 + %299 = tail call noundef double @llvm.fabs.f64(double %298) + %300 = fcmp ogt double %299, 0x3CB0000000000000 + %301 = tail call double @llvm.fabs.f64(double %297) + %302 = fcmp ogt double %301, 0x10000000000000 + %or.cond563 = select i1 %300, i1 true, i1 %302 + br i1 %or.cond563, label %303, label %.loopexit585 + +303: ; preds = %.lr.ph616 + %304 = load i32, ptr %3, align 4 + %.not534610 = icmp slt i32 %304, 1 br i1 %.not534610, label %.loopexit585, label %.lr.ph612 -.lr.ph612: ; preds = %285 - %287 = mul nsw i64 %indvars.iv710, %273 - %288 = fneg double %279 - %289 = add nuw i32 %286, 1 - %wide.trip.count708 = zext i32 %289 to i64 - %invariant.gep806 = getelementptr double, ptr %14, i64 %287 - br label %290 +.lr.ph612: ; preds = %303 + %305 = mul nsw i64 %indvars.iv710, %291 + %306 = fneg double %297 + %307 = add nuw i32 %304, 1 + %wide.trip.count708 = zext i32 %307 to i64 + %invariant.gep806 = getelementptr double, ptr %14, i64 %305 + br label %308 -290: ; preds = %.lr.ph612, %290 - %indvars.iv705 = phi i64 [ 1, %.lr.ph612 ], [ %indvars.iv.next706, %290 ] +308: ; preds = %.lr.ph612, %308 + %indvars.iv705 = phi i64 [ 1, %.lr.ph612 ], [ %indvars.iv.next706, %308 ] %gep807 = getelementptr double, ptr %invariant.gep806, i64 %indvars.iv705 - %291 = load double, ptr %gep807, align 8 + %309 = load double, ptr %gep807, align 8 %gep809 = getelementptr double, ptr %invariant.gep808, i64 %indvars.iv705 - %292 = load double, ptr %gep809, align 8 - %293 = fmul double %292, %288 - %294 = tail call double @llvm.fmuladd.f64(double %277, double %291, double %293) - store double %294, ptr %gep807, align 8 - %295 = load double, ptr %gep809, align 8 - %296 = fmul double %277, %295 - %297 = tail call double @llvm.fmuladd.f64(double %279, double %291, double %296) - store double %297, ptr %gep809, align 8 + %310 = load double, ptr %gep809, align 8 + %311 = fmul double %310, %306 + %312 = tail call double @llvm.fmuladd.f64(double %295, double %309, double %311) + store double %312, ptr %gep807, align 8 + %313 = load double, ptr %gep809, align 8 + %314 = fmul double %295, %313 + %315 = tail call double @llvm.fmuladd.f64(double %297, double %309, double %314) + store double %315, ptr %gep809, align 8 %indvars.iv.next706 = add nuw nsw i64 %indvars.iv705, 1 %exitcond709.not = icmp eq i64 %indvars.iv.next706, %wide.trip.count708 - br i1 %exitcond709.not, label %.loopexit585, label %290, !llvm.loop !21 + br i1 %exitcond709.not, label %.loopexit585, label %308, !llvm.loop !21 -.loopexit585: ; preds = %290, %285, %.lr.ph616 +.loopexit585: ; preds = %308, %303, %.lr.ph616 %indvars.iv.next711 = add nuw nsw i64 %indvars.iv710, 1 %exitcond714.not = icmp eq i64 %indvars.iv.next711, %wide.trip.count713 br i1 %exitcond714.not, label %.loopexit570, label %.lr.ph616, !llvm.loop !22 -298: ; preds = %268, %268 - %299 = icmp sgt i32 %18, 1 - br i1 %299, label %.lr.ph609.preheader, label %.loopexit570 +316: ; preds = %286, %286 + %317 = icmp sgt i32 %18, 1 + br i1 %317, label %.lr.ph609.preheader, label %.loopexit570 -.lr.ph609.preheader: ; preds = %298 - %300 = sext i32 %12 to i64 - %301 = zext nneg i32 %18 to i64 - %invariant.gep804 = getelementptr double, ptr %14, i64 %300 +.lr.ph609.preheader: ; preds = %316 + %318 = sext i32 %12 to i64 + %319 = zext nneg i32 %18 to i64 + %invariant.gep804 = getelementptr double, ptr %14, i64 %318 br label %.lr.ph609 .lr.ph609: ; preds = %.lr.ph609.preheader, %.loopexit587 - %indvars.iv702 = phi i64 [ %301, %.lr.ph609.preheader ], [ %indvars.iv.next703, %.loopexit587 ] + %indvars.iv702 = phi i64 [ %319, %.lr.ph609.preheader ], [ %indvars.iv.next703, %.loopexit587 ] %indvars.iv.next703 = add nsw i64 %indvars.iv702, -1 - %302 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next703 - %303 = load double, ptr %302, align 8 - %304 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next703 - %305 = load double, ptr %304, align 8 - %306 = fadd double %303, -1.000000e+00 - %307 = tail call noundef double @llvm.fabs.f64(double %306) - %308 = fcmp ogt double %307, 0x3CB0000000000000 - %309 = tail call double @llvm.fabs.f64(double %305) - %310 = fcmp ogt double %309, 0x10000000000000 - %or.cond565 = select i1 %308, i1 true, i1 %310 - br i1 %or.cond565, label %311, label %.loopexit587 - -311: ; preds = %.lr.ph609 - %312 = load i32, ptr %3, align 4 - %.not532605 = icmp slt i32 %312, 1 + %320 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next703 + %321 = load double, ptr %320, align 8 + %322 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next703 + %323 = load double, ptr %322, align 8 + %324 = fadd double %321, -1.000000e+00 + %325 = tail call noundef double @llvm.fabs.f64(double %324) + %326 = fcmp ogt double %325, 0x3CB0000000000000 + %327 = tail call double @llvm.fabs.f64(double %323) + %328 = fcmp ogt double %327, 0x10000000000000 + %or.cond565 = select i1 %326, i1 true, i1 %328 + br i1 %or.cond565, label %329, label %.loopexit587 + +329: ; preds = %.lr.ph609 + %330 = load i32, ptr %3, align 4 + %.not532605 = icmp slt i32 %330, 1 br i1 %.not532605, label %.loopexit587, label %.lr.ph607 -.lr.ph607: ; preds = %311 - %313 = mul nsw i64 %indvars.iv702, %300 - %314 = fneg double %305 - %315 = add nuw i32 %312, 1 - %wide.trip.count700 = zext i32 %315 to i64 - %invariant.gep802 = getelementptr double, ptr %14, i64 %313 - br label %316 +.lr.ph607: ; preds = %329 + %331 = mul nsw i64 %indvars.iv702, %318 + %332 = fneg double %323 + %333 = add nuw i32 %330, 1 + %wide.trip.count700 = zext i32 %333 to i64 + %invariant.gep802 = getelementptr double, ptr %14, i64 %331 + br label %334 -316: ; preds = %.lr.ph607, %316 - %indvars.iv697 = phi i64 [ 1, %.lr.ph607 ], [ %indvars.iv.next698, %316 ] +334: ; preds = %.lr.ph607, %334 + %indvars.iv697 = phi i64 [ 1, %.lr.ph607 ], [ %indvars.iv.next698, %334 ] %gep803 = getelementptr double, ptr %invariant.gep802, i64 %indvars.iv697 - %317 = load double, ptr %gep803, align 8 + %335 = load double, ptr %gep803, align 8 %gep805 = getelementptr double, ptr %invariant.gep804, i64 %indvars.iv697 - %318 = load double, ptr %gep805, align 8 - %319 = fmul double %318, %314 - %320 = tail call double @llvm.fmuladd.f64(double %303, double %317, double %319) - store double %320, ptr %gep803, align 8 - %321 = load double, ptr %gep805, align 8 - %322 = fmul double %303, %321 - %323 = tail call double @llvm.fmuladd.f64(double %305, double %317, double %322) - store double %323, ptr %gep805, align 8 + %336 = load double, ptr %gep805, align 8 + %337 = fmul double %336, %332 + %338 = tail call double @llvm.fmuladd.f64(double %321, double %335, double %337) + store double %338, ptr %gep803, align 8 + %339 = load double, ptr %gep805, align 8 + %340 = fmul double %321, %339 + %341 = tail call double @llvm.fmuladd.f64(double %323, double %335, double %340) + store double %341, ptr %gep805, align 8 %indvars.iv.next698 = add nuw nsw i64 %indvars.iv697, 1 %exitcond701.not = icmp eq i64 %indvars.iv.next698, %wide.trip.count700 - br i1 %exitcond701.not, label %.loopexit587, label %316, !llvm.loop !23 - -.loopexit587: ; preds = %316, %311, %.lr.ph609 - %324 = icmp sgt i64 %indvars.iv702, 2 - br i1 %324, label %.lr.ph609, label %.loopexit570, !llvm.loop !24 - -325: ; preds = %208, %208 - %326 = load i8, ptr %2, align 1 - %327 = add i8 %326, -66 - %328 = tail call i8 @llvm.fshl.i8(i8 %327, i8 %327, i8 6) - switch i8 %328, label %.loopexit570 [ - i8 1, label %329 - i8 9, label %329 - i8 0, label %363 - i8 8, label %363 + br i1 %exitcond701.not, label %.loopexit587, label %334, !llvm.loop !23 + +.loopexit587: ; preds = %334, %329, %.lr.ph609 + %342 = icmp sgt i64 %indvars.iv702, 2 + br i1 %342, label %.lr.ph609, label %.loopexit570, !llvm.loop !24 + +343: ; preds = %226, %226 + %344 = load i8, ptr %2, align 1 + %345 = add i8 %344, -66 + %346 = tail call i8 @llvm.fshl.i8(i8 %345, i8 %345, i8 6) + switch i8 %346, label %.loopexit570 [ + i8 1, label %347 + i8 9, label %347 + i8 0, label %381 + i8 8, label %381 ] -329: ; preds = %325, %325 +347: ; preds = %343, %343 %.not530.not601 = icmp sgt i32 %18, 1 br i1 %.not530.not601, label %.lr.ph604.preheader, label %.loopexit570 -.lr.ph604.preheader: ; preds = %329 - %330 = sext i32 %12 to i64 +.lr.ph604.preheader: ; preds = %347 + %348 = sext i32 %12 to i64 %wide.trip.count695 = zext nneg i32 %18 to i64 br label %.lr.ph604 .lr.ph604: ; preds = %.lr.ph604.preheader, %.loopexit589 %indvars.iv692 = phi i64 [ 1, %.lr.ph604.preheader ], [ %indvars.iv.next693, %.loopexit589 ] - %331 = getelementptr inbounds double, ptr %10, i64 %indvars.iv692 - %332 = load double, ptr %331, align 8 - %333 = getelementptr inbounds double, ptr %11, i64 %indvars.iv692 - %334 = load double, ptr %333, align 8 - %335 = fadd double %332, -1.000000e+00 - %336 = tail call noundef double @llvm.fabs.f64(double %335) - %337 = fcmp ogt double %336, 0x3CB0000000000000 - %338 = tail call double @llvm.fabs.f64(double %334) - %339 = fcmp ogt double %338, 0x10000000000000 - %or.cond567 = select i1 %337, i1 true, i1 %339 - br i1 %or.cond567, label %340, label %.loopexit589 - -340: ; preds = %.lr.ph604 - %341 = load i32, ptr %3, align 4 - %.not531598 = icmp slt i32 %341, 1 + %349 = getelementptr inbounds double, ptr %10, i64 %indvars.iv692 + %350 = load double, ptr %349, align 8 + %351 = getelementptr inbounds double, ptr %11, i64 %indvars.iv692 + %352 = load double, ptr %351, align 8 + %353 = fadd double %350, -1.000000e+00 + %354 = tail call noundef double @llvm.fabs.f64(double %353) + %355 = fcmp ogt double %354, 0x3CB0000000000000 + %356 = tail call double @llvm.fabs.f64(double %352) + %357 = fcmp ogt double %356, 0x10000000000000 + %or.cond567 = select i1 %355, i1 true, i1 %357 + br i1 %or.cond567, label %358, label %.loopexit589 + +358: ; preds = %.lr.ph604 + %359 = load i32, ptr %3, align 4 + %.not531598 = icmp slt i32 %359, 1 br i1 %.not531598, label %.loopexit589, label %.lr.ph600 -.lr.ph600: ; preds = %340 - %342 = mul nsw i64 %indvars.iv692, %330 - %343 = fneg double %334 - %344 = add nuw i32 %341, 1 - %wide.trip.count690 = zext i32 %344 to i64 - %invariant.gep800 = getelementptr double, ptr %14, i64 %342 - br label %345 +.lr.ph600: ; preds = %358 + %360 = mul nsw i64 %indvars.iv692, %348 + %361 = fneg double %352 + %362 = add nuw i32 %359, 1 + %wide.trip.count690 = zext i32 %362 to i64 + %invariant.gep800 = getelementptr double, ptr %14, i64 %360 + br label %363 -345: ; preds = %.lr.ph600, %345 - %indvars.iv687 = phi i64 [ 1, %.lr.ph600 ], [ %indvars.iv.next688, %345 ] +363: ; preds = %.lr.ph600, %363 + %indvars.iv687 = phi i64 [ 1, %.lr.ph600 ], [ %indvars.iv.next688, %363 ] %gep801 = getelementptr double, ptr %invariant.gep800, i64 %indvars.iv687 - %346 = load double, ptr %gep801, align 8 - %347 = load i32, ptr %4, align 4 - %348 = mul nsw i32 %347, %12 - %349 = sext i32 %348 to i64 - %350 = getelementptr double, ptr %14, i64 %indvars.iv687 - %351 = getelementptr double, ptr %350, i64 %349 - %352 = load double, ptr %351, align 8 - %353 = fmul double %332, %346 - %354 = tail call double @llvm.fmuladd.f64(double %334, double %352, double %353) - store double %354, ptr %gep801, align 8 - %355 = load i32, ptr %4, align 4 - %356 = mul nsw i32 %355, %12 - %357 = sext i32 %356 to i64 - %358 = getelementptr double, ptr %14, i64 %indvars.iv687 - %359 = getelementptr double, ptr %358, i64 %357 - %360 = load double, ptr %359, align 8 - %361 = fmul double %346, %343 - %362 = tail call double @llvm.fmuladd.f64(double %332, double %360, double %361) - store double %362, ptr %359, align 8 + %364 = load double, ptr %gep801, align 8 + %365 = load i32, ptr %4, align 4 + %366 = mul nsw i32 %365, %12 + %367 = sext i32 %366 to i64 + %368 = getelementptr double, ptr %14, i64 %indvars.iv687 + %369 = getelementptr double, ptr %368, i64 %367 + %370 = load double, ptr %369, align 8 + %371 = fmul double %350, %364 + %372 = tail call double @llvm.fmuladd.f64(double %352, double %370, double %371) + store double %372, ptr %gep801, align 8 + %373 = load i32, ptr %4, align 4 + %374 = mul nsw i32 %373, %12 + %375 = sext i32 %374 to i64 + %376 = getelementptr double, ptr %14, i64 %indvars.iv687 + %377 = getelementptr double, ptr %376, i64 %375 + %378 = load double, ptr %377, align 8 + %379 = fmul double %364, %361 + %380 = tail call double @llvm.fmuladd.f64(double %350, double %378, double %379) + store double %380, ptr %377, align 8 %indvars.iv.next688 = add nuw nsw i64 %indvars.iv687, 1 %exitcond691.not = icmp eq i64 %indvars.iv.next688, %wide.trip.count690 - br i1 %exitcond691.not, label %.loopexit589, label %345, !llvm.loop !25 + br i1 %exitcond691.not, label %.loopexit589, label %363, !llvm.loop !25 -.loopexit589: ; preds = %345, %340, %.lr.ph604 +.loopexit589: ; preds = %363, %358, %.lr.ph604 %indvars.iv.next693 = add nuw nsw i64 %indvars.iv692, 1 %exitcond696.not = icmp eq i64 %indvars.iv.next693, %wide.trip.count695 br i1 %exitcond696.not, label %.loopexit570, label %.lr.ph604, !llvm.loop !26 -363: ; preds = %325, %325 - %364 = icmp sgt i32 %18, 1 - br i1 %364, label %.lr.ph597.preheader, label %.loopexit570 +381: ; preds = %343, %343 + %382 = icmp sgt i32 %18, 1 + br i1 %382, label %.lr.ph597.preheader, label %.loopexit570 -.lr.ph597.preheader: ; preds = %363 - %365 = zext nneg i32 %18 to i64 - %366 = sext i32 %12 to i64 +.lr.ph597.preheader: ; preds = %381 + %383 = zext nneg i32 %18 to i64 + %384 = sext i32 %12 to i64 br label %.lr.ph597 .lr.ph597: ; preds = %.lr.ph597.preheader, %.loopexit591 - %indvars.iv684 = phi i64 [ %365, %.lr.ph597.preheader ], [ %indvars.iv.next685, %.loopexit591 ] + %indvars.iv684 = phi i64 [ %383, %.lr.ph597.preheader ], [ %indvars.iv.next685, %.loopexit591 ] %indvars.iv.next685 = add nsw i64 %indvars.iv684, -1 - %367 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next685 - %368 = load double, ptr %367, align 8 - %369 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next685 - %370 = load double, ptr %369, align 8 - %371 = fadd double %368, -1.000000e+00 - %372 = tail call noundef double @llvm.fabs.f64(double %371) - %373 = fcmp ogt double %372, 0x3CB0000000000000 - %374 = tail call double @llvm.fabs.f64(double %370) - %375 = fcmp ogt double %374, 0x10000000000000 - %or.cond569 = select i1 %373, i1 true, i1 %375 - br i1 %or.cond569, label %376, label %.loopexit591 - -376: ; preds = %.lr.ph597 - %377 = load i32, ptr %3, align 4 - %.not593 = icmp slt i32 %377, 1 + %385 = getelementptr inbounds double, ptr %10, i64 %indvars.iv.next685 + %386 = load double, ptr %385, align 8 + %387 = getelementptr inbounds double, ptr %11, i64 %indvars.iv.next685 + %388 = load double, ptr %387, align 8 + %389 = fadd double %386, -1.000000e+00 + %390 = tail call noundef double @llvm.fabs.f64(double %389) + %391 = fcmp ogt double %390, 0x3CB0000000000000 + %392 = tail call double @llvm.fabs.f64(double %388) + %393 = fcmp ogt double %392, 0x10000000000000 + %or.cond569 = select i1 %391, i1 true, i1 %393 + br i1 %or.cond569, label %394, label %.loopexit591 + +394: ; preds = %.lr.ph597 + %395 = load i32, ptr %3, align 4 + %.not593 = icmp slt i32 %395, 1 br i1 %.not593, label %.loopexit591, label %.lr.ph -.lr.ph: ; preds = %376 - %378 = mul nsw i64 %indvars.iv.next685, %366 - %379 = fneg double %370 - %380 = add nuw i32 %377, 1 - %wide.trip.count = zext i32 %380 to i64 - %invariant.gep798 = getelementptr double, ptr %14, i64 %378 - br label %381 +.lr.ph: ; preds = %394 + %396 = mul nsw i64 %indvars.iv.next685, %384 + %397 = fneg double %388 + %398 = add nuw i32 %395, 1 + %wide.trip.count = zext i32 %398 to i64 + %invariant.gep798 = getelementptr double, ptr %14, i64 %396 + br label %399 -381: ; preds = %.lr.ph, %381 - %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %381 ] +399: ; preds = %.lr.ph, %399 + %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %399 ] %gep799 = getelementptr double, ptr %invariant.gep798, i64 %indvars.iv - %382 = load double, ptr %gep799, align 8 - %383 = load i32, ptr %4, align 4 - %384 = mul nsw i32 %383, %12 - %385 = sext i32 %384 to i64 - %386 = getelementptr double, ptr %14, i64 %indvars.iv - %387 = getelementptr double, ptr %386, i64 %385 - %388 = load double, ptr %387, align 8 - %389 = fmul double %368, %382 - %390 = tail call double @llvm.fmuladd.f64(double %370, double %388, double %389) - store double %390, ptr %gep799, align 8 - %391 = load i32, ptr %4, align 4 - %392 = mul nsw i32 %391, %12 - %393 = sext i32 %392 to i64 - %394 = getelementptr double, ptr %14, i64 %indvars.iv - %395 = getelementptr double, ptr %394, i64 %393 - %396 = load double, ptr %395, align 8 - %397 = fmul double %382, %379 - %398 = tail call double @llvm.fmuladd.f64(double %368, double %396, double %397) - store double %398, ptr %395, align 8 + %400 = load double, ptr %gep799, align 8 + %401 = load i32, ptr %4, align 4 + %402 = mul nsw i32 %401, %12 + %403 = sext i32 %402 to i64 + %404 = getelementptr double, ptr %14, i64 %indvars.iv + %405 = getelementptr double, ptr %404, i64 %403 + %406 = load double, ptr %405, align 8 + %407 = fmul double %386, %400 + %408 = tail call double @llvm.fmuladd.f64(double %388, double %406, double %407) + store double %408, ptr %gep799, align 8 + %409 = load i32, ptr %4, align 4 + %410 = mul nsw i32 %409, %12 + %411 = sext i32 %410 to i64 + %412 = getelementptr double, ptr %14, i64 %indvars.iv + %413 = getelementptr double, ptr %412, i64 %411 + %414 = load double, ptr %413, align 8 + %415 = fmul double %400, %397 + %416 = tail call double @llvm.fmuladd.f64(double %386, double %414, double %415) + store double %416, ptr %413, align 8 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond.not, label %.loopexit591, label %381, !llvm.loop !27 + br i1 %exitcond.not, label %.loopexit591, label %399, !llvm.loop !27 -.loopexit591: ; preds = %381, %376, %.lr.ph597 - %399 = icmp sgt i64 %indvars.iv684, 2 - br i1 %399, label %.lr.ph597, label %.loopexit570, !llvm.loop !28 +.loopexit591: ; preds = %399, %394, %.lr.ph597 + %417 = icmp sgt i64 %indvars.iv684, 2 + br i1 %417, label %.lr.ph597, label %.loopexit570, !llvm.loop !28 -.loopexit570: ; preds = %.loopexit591, %.loopexit589, %.loopexit587, %.loopexit585, %.loopexit583, %.loopexit581, %.loopexit579, %.loopexit577, %.loopexit575, %.loopexit573, %.loopexit571, %.loopexit, %363, %329, %298, %272, %240, %214, %173, %141, %109, %82, %52, %28, %325, %208, %268, %210, %20, %137, %22, %78, %24, %9, %17 +.loopexit570: ; preds = %.loopexit591, %.loopexit589, %.loopexit587, %.loopexit585, %.loopexit583, %.loopexit581, %.loopexit579, %.loopexit577, %.loopexit575, %.loopexit573, %.loopexit571, %.loopexit, %381, %347, %316, %290, %258, %232, %191, %159, %127, %100, %60, %28, %343, %226, %286, %228, %20, %155, %22, %96, %24, %9, %17 ret void } diff --git a/bench/gromacs/optimized/slasr.cpp.ll b/bench/gromacs/optimized/slasr.cpp.ll index 61f4381282c..a1876a4ae0a 100644 --- a/bench/gromacs/optimized/slasr.cpp.ll +++ b/bench/gromacs/optimized/slasr.cpp.ll @@ -25,8 +25,8 @@ define void @slasr_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea switch i8 %21, label %.loopexit570 [ i8 76, label %22 i8 108, label %22 - i8 82, label %214 - i8 114, label %214 + i8 82, label %232 + i8 114, label %232 ] 22: ; preds = %20, %20 @@ -34,10 +34,10 @@ define void @slasr_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea switch i8 %23, label %.loopexit570 [ i8 86, label %24 i8 118, label %24 - i8 84, label %80 - i8 116, label %80 - i8 66, label %141 - i8 98, label %141 + i8 84, label %98 + i8 116, label %98 + i8 66, label %159 + i8 98, label %159 ] 24: ; preds = %22, %22 @@ -47,8 +47,8 @@ define void @slasr_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea switch i8 %27, label %.loopexit570 [ i8 1, label %28 i8 9, label %28 - i8 0, label %53 - i8 8, label %53 + i8 0, label %61 + i8 8, label %61 ] 28: ; preds = %24, %24 @@ -59,819 +59,874 @@ define void @slasr_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea %29 = sext i32 %12 to i64 %wide.trip.count785 = zext nneg i32 %15 to i64 %invariant.gep832 = getelementptr i8, ptr %14, i64 4 + %ident.check.not = icmp eq i32 %12, 1 br label %.lr.ph671 .lr.ph671: ; preds = %.lr.ph671.preheader, %.loopexit + %indvar = phi i64 [ 0, %.lr.ph671.preheader ], [ %indvar.next, %.loopexit ] %indvars.iv782 = phi i64 [ 1, %.lr.ph671.preheader ], [ %indvars.iv.next783, %.loopexit ] - %30 = getelementptr inbounds float, ptr %10, i64 %indvars.iv782 - %31 = load float, ptr %30, align 4 - %32 = getelementptr inbounds float, ptr %11, i64 %indvars.iv782 - %33 = load float, ptr %32, align 4 - %34 = fpext float %31 to double - %35 = fadd double %34, -1.000000e+00 - %36 = tail call noundef double @llvm.fabs.f64(double %35) - %37 = fcmp ogt double %36, 0x3E80000000000000 - %38 = tail call float @llvm.fabs.f32(float %33) - %39 = fcmp ogt float %38, 0x3810000000000000 - %or.cond = select i1 %37, i1 true, i1 %39 - br i1 %or.cond, label %40, label %.loopexit - -40: ; preds = %.lr.ph671 - %41 = load i32, ptr %4, align 4 - %.not546665 = icmp slt i32 %41, 1 - br i1 %.not546665, label %.loopexit, label %.lr.ph667 - -.lr.ph667: ; preds = %40 - %42 = fneg float %33 - %43 = add nuw i32 %41, 1 - %wide.trip.count780 = zext i32 %43 to i64 + %30 = shl nuw nsw i64 %indvar, 2 + %scevgep = getelementptr i8, ptr %7, i64 %30 + %31 = getelementptr inbounds float, ptr %10, i64 %indvars.iv782 + %32 = load float, ptr %31, align 4 + %33 = getelementptr inbounds float, ptr %11, i64 %indvars.iv782 + %34 = load float, ptr %33, align 4 + %35 = fpext float %32 to double + %36 = fadd double %35, -1.000000e+00 + %37 = tail call noundef double @llvm.fabs.f64(double %36) + %38 = fcmp ogt double %37, 0x3E80000000000000 + %39 = tail call float @llvm.fabs.f32(float %34) + %40 = fcmp ogt float %39, 0x3810000000000000 + %or.cond = select i1 %38, i1 true, i1 %40 + br i1 %or.cond, label %41, label %.loopexit + +41: ; preds = %.lr.ph671 + %42 = load i32, ptr %4, align 4 + %.not546665 = icmp slt i32 %42, 1 + br i1 %.not546665, label %.loopexit, label %.lver.check + +.lver.check: ; preds = %41 + %43 = fneg float %34 + %44 = add nuw i32 %42, 1 + %wide.trip.count780 = zext i32 %44 to i64 %gep833 = getelementptr float, ptr %invariant.gep832, i64 %indvars.iv782 %invariant.gep830 = getelementptr float, ptr %14, i64 %indvars.iv782 - br label %44 + br i1 %ident.check.not, label %.ph, label %.ph.lver.orig -44: ; preds = %.lr.ph667, %44 - %indvars.iv777 = phi i64 [ 1, %.lr.ph667 ], [ %indvars.iv.next778, %44 ] - %45 = mul nsw i64 %indvars.iv777, %29 +.ph.lver.orig: ; preds = %.lver.check, %.ph.lver.orig + %indvars.iv777.lver.orig = phi i64 [ %indvars.iv.next778.lver.orig, %.ph.lver.orig ], [ 1, %.lver.check ] + %45 = mul nsw i64 %indvars.iv777.lver.orig, %29 %46 = getelementptr float, ptr %gep833, i64 %45 %47 = load float, ptr %46, align 4 - %gep831 = getelementptr float, ptr %invariant.gep830, i64 %45 - %48 = load float, ptr %gep831, align 4 - %49 = fmul float %48, %42 - %50 = tail call float @llvm.fmuladd.f32(float %31, float %47, float %49) + %gep831.lver.orig = getelementptr float, ptr %invariant.gep830, i64 %45 + %48 = load float, ptr %gep831.lver.orig, align 4 + %49 = fmul float %48, %43 + %50 = tail call float @llvm.fmuladd.f32(float %32, float %47, float %49) store float %50, ptr %46, align 4 - %51 = fmul float %31, %48 - %52 = tail call float @llvm.fmuladd.f32(float %33, float %47, float %51) - store float %52, ptr %gep831, align 4 + %51 = fmul float %32, %48 + %52 = tail call float @llvm.fmuladd.f32(float %34, float %47, float %51) + store float %52, ptr %gep831.lver.orig, align 4 + %indvars.iv.next778.lver.orig = add nuw nsw i64 %indvars.iv777.lver.orig, 1 + %exitcond781.not.lver.orig = icmp eq i64 %indvars.iv.next778.lver.orig, %wide.trip.count780 + br i1 %exitcond781.not.lver.orig, label %.loopexit, label %.ph.lver.orig, !llvm.loop !4 + +.ph: ; preds = %.lver.check + %load_initial = load float, ptr %scevgep, align 4 + br label %53 + +53: ; preds = %.ph, %53 + %store_forwarded = phi float [ %load_initial, %.ph ], [ %58, %53 ] + %indvars.iv777 = phi i64 [ 1, %.ph ], [ %indvars.iv.next778, %53 ] + %54 = mul nuw nsw i64 %indvars.iv777, %29 + %55 = getelementptr float, ptr %gep833, i64 %54 + %56 = load float, ptr %55, align 4 + %gep831 = getelementptr float, ptr %invariant.gep830, i64 %54 + %57 = fmul float %store_forwarded, %43 + %58 = tail call float @llvm.fmuladd.f32(float %32, float %56, float %57) + store float %58, ptr %55, align 4 + %59 = fmul float %32, %store_forwarded + %60 = tail call float @llvm.fmuladd.f32(float %34, float %56, float %59) + store float %60, ptr %gep831, align 4 %indvars.iv.next778 = add nuw nsw i64 %indvars.iv777, 1 %exitcond781.not = icmp eq i64 %indvars.iv.next778, %wide.trip.count780 - br i1 %exitcond781.not, label %.loopexit, label %44, !llvm.loop !4 + br i1 %exitcond781.not, label %.loopexit, label %53, !llvm.loop !4 -.loopexit: ; preds = %44, %40, %.lr.ph671 +.loopexit: ; preds = %.ph.lver.orig, %53, %41, %.lr.ph671 %indvars.iv.next783 = add nuw nsw i64 %indvars.iv782, 1 %exitcond786.not = icmp eq i64 %indvars.iv.next783, %wide.trip.count785 + %indvar.next = add i64 %indvar, 1 br i1 %exitcond786.not, label %.loopexit570, label %.lr.ph671, !llvm.loop !6 -53: ; preds = %24, %24 - %54 = icmp sgt i32 %15, 1 - br i1 %54, label %.lr.ph664.preheader, label %.loopexit570 +61: ; preds = %24, %24 + %62 = icmp sgt i32 %15, 1 + br i1 %62, label %.lr.ph664.preheader, label %.loopexit570 -.lr.ph664.preheader: ; preds = %53 - %55 = sext i32 %12 to i64 - %56 = zext nneg i32 %15 to i64 +.lr.ph664.preheader: ; preds = %61 + %63 = sext i32 %12 to i64 + %64 = zext nneg i32 %15 to i64 + %65 = shl nuw nsw i64 %64, 2 + %66 = add nsw i64 %65, -8 + %ident.check846.not = icmp eq i32 %12, 1 br label %.lr.ph664 .lr.ph664: ; preds = %.lr.ph664.preheader, %.loopexit571 - %indvars.iv774 = phi i64 [ %56, %.lr.ph664.preheader ], [ %indvars.iv.next775, %.loopexit571 ] + %indvar850 = phi i64 [ 0, %.lr.ph664.preheader ], [ %indvar.next851, %.loopexit571 ] + %indvars.iv774 = phi i64 [ %64, %.lr.ph664.preheader ], [ %indvars.iv.next775, %.loopexit571 ] + %67 = shl i64 %indvar850, 2 + %68 = sub i64 %66, %67 + %scevgep852 = getelementptr i8, ptr %7, i64 %68 %indvars.iv.next775 = add nsw i64 %indvars.iv774, -1 - %57 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next775 - %58 = load float, ptr %57, align 4 - %59 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next775 - %60 = load float, ptr %59, align 4 - %61 = fpext float %58 to double - %62 = fadd double %61, -1.000000e+00 - %63 = tail call noundef double @llvm.fabs.f64(double %62) - %64 = fcmp ogt double %63, 0x3E80000000000000 - %65 = tail call float @llvm.fabs.f32(float %60) - %66 = fcmp ogt float %65, 0x3810000000000000 - %or.cond549 = select i1 %64, i1 true, i1 %66 - br i1 %or.cond549, label %67, label %.loopexit571 - -67: ; preds = %.lr.ph664 - %68 = load i32, ptr %4, align 4 - %.not544658 = icmp slt i32 %68, 1 - br i1 %.not544658, label %.loopexit571, label %.lr.ph660 - -.lr.ph660: ; preds = %67 - %69 = fneg float %60 - %70 = add nuw i32 %68, 1 - %wide.trip.count772 = zext i32 %70 to i64 + %69 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next775 + %70 = load float, ptr %69, align 4 + %71 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next775 + %72 = load float, ptr %71, align 4 + %73 = fpext float %70 to double + %74 = fadd double %73, -1.000000e+00 + %75 = tail call noundef double @llvm.fabs.f64(double %74) + %76 = fcmp ogt double %75, 0x3E80000000000000 + %77 = tail call float @llvm.fabs.f32(float %72) + %78 = fcmp ogt float %77, 0x3810000000000000 + %or.cond549 = select i1 %76, i1 true, i1 %78 + br i1 %or.cond549, label %79, label %.loopexit571 + +79: ; preds = %.lr.ph664 + %80 = load i32, ptr %4, align 4 + %.not544658 = icmp slt i32 %80, 1 + br i1 %.not544658, label %.loopexit571, label %.lver.check847 + +.lver.check847: ; preds = %79 + %81 = fneg float %72 + %82 = add nuw i32 %80, 1 + %wide.trip.count772 = zext i32 %82 to i64 %invariant.gep826 = getelementptr float, ptr %14, i64 %indvars.iv774 %invariant.gep828 = getelementptr float, ptr %14, i64 %indvars.iv.next775 - br label %71 - -71: ; preds = %.lr.ph660, %71 - %indvars.iv769 = phi i64 [ 1, %.lr.ph660 ], [ %indvars.iv.next770, %71 ] - %72 = mul nsw i64 %indvars.iv769, %55 - %gep827 = getelementptr float, ptr %invariant.gep826, i64 %72 - %73 = load float, ptr %gep827, align 4 - %gep829 = getelementptr float, ptr %invariant.gep828, i64 %72 - %74 = load float, ptr %gep829, align 4 - %75 = fmul float %74, %69 - %76 = tail call float @llvm.fmuladd.f32(float %58, float %73, float %75) - store float %76, ptr %gep827, align 4 - %77 = fmul float %58, %74 - %78 = tail call float @llvm.fmuladd.f32(float %60, float %73, float %77) - store float %78, ptr %gep829, align 4 + br i1 %ident.check846.not, label %.ph848, label %.ph848.lver.orig + +.ph848.lver.orig: ; preds = %.lver.check847, %.ph848.lver.orig + %indvars.iv769.lver.orig = phi i64 [ %indvars.iv.next770.lver.orig, %.ph848.lver.orig ], [ 1, %.lver.check847 ] + %83 = mul nsw i64 %indvars.iv769.lver.orig, %63 + %gep827.lver.orig = getelementptr float, ptr %invariant.gep826, i64 %83 + %84 = load float, ptr %gep827.lver.orig, align 4 + %gep829.lver.orig = getelementptr float, ptr %invariant.gep828, i64 %83 + %85 = load float, ptr %gep829.lver.orig, align 4 + %86 = fmul float %85, %81 + %87 = tail call float @llvm.fmuladd.f32(float %70, float %84, float %86) + store float %87, ptr %gep827.lver.orig, align 4 + %88 = fmul float %70, %85 + %89 = tail call float @llvm.fmuladd.f32(float %72, float %84, float %88) + store float %89, ptr %gep829.lver.orig, align 4 + %indvars.iv.next770.lver.orig = add nuw nsw i64 %indvars.iv769.lver.orig, 1 + %exitcond773.not.lver.orig = icmp eq i64 %indvars.iv.next770.lver.orig, %wide.trip.count772 + br i1 %exitcond773.not.lver.orig, label %.loopexit571, label %.ph848.lver.orig, !llvm.loop !7 + +.ph848: ; preds = %.lver.check847 + %load_initial853 = load float, ptr %scevgep852, align 4 + br label %90 + +90: ; preds = %.ph848, %90 + %store_forwarded854 = phi float [ %load_initial853, %.ph848 ], [ %94, %90 ] + %indvars.iv769 = phi i64 [ 1, %.ph848 ], [ %indvars.iv.next770, %90 ] + %91 = mul nuw nsw i64 %indvars.iv769, %63 + %gep827 = getelementptr float, ptr %invariant.gep826, i64 %91 + %92 = load float, ptr %gep827, align 4 + %gep829 = getelementptr float, ptr %invariant.gep828, i64 %91 + %93 = fmul float %store_forwarded854, %81 + %94 = tail call float @llvm.fmuladd.f32(float %70, float %92, float %93) + store float %94, ptr %gep827, align 4 + %95 = fmul float %70, %store_forwarded854 + %96 = tail call float @llvm.fmuladd.f32(float %72, float %92, float %95) + store float %96, ptr %gep829, align 4 %indvars.iv.next770 = add nuw nsw i64 %indvars.iv769, 1 %exitcond773.not = icmp eq i64 %indvars.iv.next770, %wide.trip.count772 - br i1 %exitcond773.not, label %.loopexit571, label %71, !llvm.loop !7 - -.loopexit571: ; preds = %71, %67, %.lr.ph664 - %79 = icmp sgt i64 %indvars.iv774, 2 - br i1 %79, label %.lr.ph664, label %.loopexit570, !llvm.loop !8 - -80: ; preds = %22, %22 - %81 = load i8, ptr %2, align 1 - %82 = add i8 %81, -66 - %83 = tail call i8 @llvm.fshl.i8(i8 %82, i8 %82, i8 6) - switch i8 %83, label %.loopexit570 [ - i8 1, label %84 - i8 9, label %84 - i8 0, label %112 - i8 8, label %112 + br i1 %exitcond773.not, label %.loopexit571, label %90, !llvm.loop !7 + +.loopexit571: ; preds = %.ph848.lver.orig, %90, %79, %.lr.ph664 + %97 = icmp sgt i64 %indvars.iv774, 2 + %indvar.next851 = add i64 %indvar850, 1 + br i1 %97, label %.lr.ph664, label %.loopexit570, !llvm.loop !8 + +98: ; preds = %22, %22 + %99 = load i8, ptr %2, align 1 + %100 = add i8 %99, -66 + %101 = tail call i8 @llvm.fshl.i8(i8 %100, i8 %100, i8 6) + switch i8 %101, label %.loopexit570 [ + i8 1, label %102 + i8 9, label %102 + i8 0, label %130 + i8 8, label %130 ] -84: ; preds = %80, %80 +102: ; preds = %98, %98 %.not542654 = icmp slt i32 %15, 2 br i1 %.not542654, label %.loopexit570, label %.lr.ph657 -.lr.ph657: ; preds = %84 +.lr.ph657: ; preds = %102 %invariant.gep649 = getelementptr i8, ptr %14, i64 4 - %85 = sext i32 %12 to i64 - %86 = add nuw i32 %15, 1 - %wide.trip.count767 = zext i32 %86 to i64 - br label %87 + %103 = sext i32 %12 to i64 + %104 = add nuw i32 %15, 1 + %wide.trip.count767 = zext i32 %104 to i64 + br label %105 -87: ; preds = %.lr.ph657, %.loopexit573 +105: ; preds = %.lr.ph657, %.loopexit573 %indvars.iv764 = phi i64 [ 2, %.lr.ph657 ], [ %indvars.iv.next765, %.loopexit573 ] - %88 = add nsw i64 %indvars.iv764, -1 - %89 = getelementptr inbounds float, ptr %10, i64 %88 - %90 = load float, ptr %89, align 4 - %91 = getelementptr inbounds float, ptr %11, i64 %88 - %92 = load float, ptr %91, align 4 - %93 = fpext float %90 to double - %94 = fadd double %93, -1.000000e+00 - %95 = tail call noundef double @llvm.fabs.f64(double %94) - %96 = fcmp ogt double %95, 0x3E80000000000000 - %97 = tail call float @llvm.fabs.f32(float %92) - %98 = fcmp ogt float %97, 0x3810000000000000 - %or.cond551 = select i1 %96, i1 true, i1 %98 - br i1 %or.cond551, label %99, label %.loopexit573 - -99: ; preds = %87 - %100 = load i32, ptr %4, align 4 - %.not543651 = icmp slt i32 %100, 1 + %106 = add nsw i64 %indvars.iv764, -1 + %107 = getelementptr inbounds float, ptr %10, i64 %106 + %108 = load float, ptr %107, align 4 + %109 = getelementptr inbounds float, ptr %11, i64 %106 + %110 = load float, ptr %109, align 4 + %111 = fpext float %108 to double + %112 = fadd double %111, -1.000000e+00 + %113 = tail call noundef double @llvm.fabs.f64(double %112) + %114 = fcmp ogt double %113, 0x3E80000000000000 + %115 = tail call float @llvm.fabs.f32(float %110) + %116 = fcmp ogt float %115, 0x3810000000000000 + %or.cond551 = select i1 %114, i1 true, i1 %116 + br i1 %or.cond551, label %117, label %.loopexit573 + +117: ; preds = %105 + %118 = load i32, ptr %4, align 4 + %.not543651 = icmp slt i32 %118, 1 br i1 %.not543651, label %.loopexit573, label %.lr.ph653 -.lr.ph653: ; preds = %99 - %101 = fneg float %92 - %102 = add nuw i32 %100, 1 - %wide.trip.count762 = zext i32 %102 to i64 +.lr.ph653: ; preds = %117 + %119 = fneg float %110 + %120 = add nuw i32 %118, 1 + %wide.trip.count762 = zext i32 %120 to i64 %invariant.gep824 = getelementptr float, ptr %14, i64 %indvars.iv764 - br label %103 - -103: ; preds = %.lr.ph653, %103 - %indvars.iv759 = phi i64 [ 1, %.lr.ph653 ], [ %indvars.iv.next760, %103 ] - %104 = mul nsw i64 %indvars.iv759, %85 - %gep825 = getelementptr float, ptr %invariant.gep824, i64 %104 - %105 = load float, ptr %gep825, align 4 - %gep650 = getelementptr float, ptr %invariant.gep649, i64 %104 - %106 = load float, ptr %gep650, align 4 - %107 = fmul float %106, %101 - %108 = tail call float @llvm.fmuladd.f32(float %90, float %105, float %107) - store float %108, ptr %gep825, align 4 - %109 = load float, ptr %gep650, align 4 - %110 = fmul float %90, %109 - %111 = tail call float @llvm.fmuladd.f32(float %92, float %105, float %110) - store float %111, ptr %gep650, align 4 + br label %121 + +121: ; preds = %.lr.ph653, %121 + %indvars.iv759 = phi i64 [ 1, %.lr.ph653 ], [ %indvars.iv.next760, %121 ] + %122 = mul nsw i64 %indvars.iv759, %103 + %gep825 = getelementptr float, ptr %invariant.gep824, i64 %122 + %123 = load float, ptr %gep825, align 4 + %gep650 = getelementptr float, ptr %invariant.gep649, i64 %122 + %124 = load float, ptr %gep650, align 4 + %125 = fmul float %124, %119 + %126 = tail call float @llvm.fmuladd.f32(float %108, float %123, float %125) + store float %126, ptr %gep825, align 4 + %127 = load float, ptr %gep650, align 4 + %128 = fmul float %108, %127 + %129 = tail call float @llvm.fmuladd.f32(float %110, float %123, float %128) + store float %129, ptr %gep650, align 4 %indvars.iv.next760 = add nuw nsw i64 %indvars.iv759, 1 %exitcond763.not = icmp eq i64 %indvars.iv.next760, %wide.trip.count762 - br i1 %exitcond763.not, label %.loopexit573, label %103, !llvm.loop !9 + br i1 %exitcond763.not, label %.loopexit573, label %121, !llvm.loop !9 -.loopexit573: ; preds = %103, %99, %87 +.loopexit573: ; preds = %121, %117, %105 %indvars.iv.next765 = add nuw nsw i64 %indvars.iv764, 1 %exitcond768.not = icmp eq i64 %indvars.iv.next765, %wide.trip.count767 - br i1 %exitcond768.not, label %.loopexit570, label %87, !llvm.loop !10 + br i1 %exitcond768.not, label %.loopexit570, label %105, !llvm.loop !10 -112: ; preds = %80, %80 - %113 = icmp sgt i32 %15, 1 - br i1 %113, label %.lr.ph648, label %.loopexit570 +130: ; preds = %98, %98 + %131 = icmp sgt i32 %15, 1 + br i1 %131, label %.lr.ph648, label %.loopexit570 -.lr.ph648: ; preds = %112 +.lr.ph648: ; preds = %130 %invariant.gep = getelementptr i8, ptr %14, i64 4 - %114 = sext i32 %12 to i64 - %115 = zext nneg i32 %15 to i64 - br label %116 + %132 = sext i32 %12 to i64 + %133 = zext nneg i32 %15 to i64 + br label %134 -116: ; preds = %.lr.ph648, %.loopexit575 - %indvars.iv756 = phi i64 [ %115, %.lr.ph648 ], [ %indvars.iv.next757, %.loopexit575 ] +134: ; preds = %.lr.ph648, %.loopexit575 + %indvars.iv756 = phi i64 [ %133, %.lr.ph648 ], [ %indvars.iv.next757, %.loopexit575 ] %indvars.iv.next757 = add nsw i64 %indvars.iv756, -1 - %117 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next757 - %118 = load float, ptr %117, align 4 - %119 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next757 - %120 = load float, ptr %119, align 4 - %121 = fpext float %118 to double - %122 = fadd double %121, -1.000000e+00 - %123 = tail call noundef double @llvm.fabs.f64(double %122) - %124 = fcmp ogt double %123, 0x3E80000000000000 - %125 = tail call float @llvm.fabs.f32(float %120) - %126 = fcmp ogt float %125, 0x3810000000000000 - %or.cond553 = select i1 %124, i1 true, i1 %126 - br i1 %or.cond553, label %127, label %.loopexit575 - -127: ; preds = %116 - %128 = load i32, ptr %4, align 4 - %.not541644 = icmp slt i32 %128, 1 + %135 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next757 + %136 = load float, ptr %135, align 4 + %137 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next757 + %138 = load float, ptr %137, align 4 + %139 = fpext float %136 to double + %140 = fadd double %139, -1.000000e+00 + %141 = tail call noundef double @llvm.fabs.f64(double %140) + %142 = fcmp ogt double %141, 0x3E80000000000000 + %143 = tail call float @llvm.fabs.f32(float %138) + %144 = fcmp ogt float %143, 0x3810000000000000 + %or.cond553 = select i1 %142, i1 true, i1 %144 + br i1 %or.cond553, label %145, label %.loopexit575 + +145: ; preds = %134 + %146 = load i32, ptr %4, align 4 + %.not541644 = icmp slt i32 %146, 1 br i1 %.not541644, label %.loopexit575, label %.lr.ph646 -.lr.ph646: ; preds = %127 - %129 = fneg float %120 - %130 = add nuw i32 %128, 1 - %wide.trip.count754 = zext i32 %130 to i64 +.lr.ph646: ; preds = %145 + %147 = fneg float %138 + %148 = add nuw i32 %146, 1 + %wide.trip.count754 = zext i32 %148 to i64 %invariant.gep822 = getelementptr float, ptr %14, i64 %indvars.iv756 - br label %131 - -131: ; preds = %.lr.ph646, %131 - %indvars.iv751 = phi i64 [ 1, %.lr.ph646 ], [ %indvars.iv.next752, %131 ] - %132 = mul nsw i64 %indvars.iv751, %114 - %gep823 = getelementptr float, ptr %invariant.gep822, i64 %132 - %133 = load float, ptr %gep823, align 4 - %gep = getelementptr float, ptr %invariant.gep, i64 %132 - %134 = load float, ptr %gep, align 4 - %135 = fmul float %134, %129 - %136 = tail call float @llvm.fmuladd.f32(float %118, float %133, float %135) - store float %136, ptr %gep823, align 4 - %137 = load float, ptr %gep, align 4 - %138 = fmul float %118, %137 - %139 = tail call float @llvm.fmuladd.f32(float %120, float %133, float %138) - store float %139, ptr %gep, align 4 + br label %149 + +149: ; preds = %.lr.ph646, %149 + %indvars.iv751 = phi i64 [ 1, %.lr.ph646 ], [ %indvars.iv.next752, %149 ] + %150 = mul nsw i64 %indvars.iv751, %132 + %gep823 = getelementptr float, ptr %invariant.gep822, i64 %150 + %151 = load float, ptr %gep823, align 4 + %gep = getelementptr float, ptr %invariant.gep, i64 %150 + %152 = load float, ptr %gep, align 4 + %153 = fmul float %152, %147 + %154 = tail call float @llvm.fmuladd.f32(float %136, float %151, float %153) + store float %154, ptr %gep823, align 4 + %155 = load float, ptr %gep, align 4 + %156 = fmul float %136, %155 + %157 = tail call float @llvm.fmuladd.f32(float %138, float %151, float %156) + store float %157, ptr %gep, align 4 %indvars.iv.next752 = add nuw nsw i64 %indvars.iv751, 1 %exitcond755.not = icmp eq i64 %indvars.iv.next752, %wide.trip.count754 - br i1 %exitcond755.not, label %.loopexit575, label %131, !llvm.loop !11 - -.loopexit575: ; preds = %131, %127, %116 - %140 = icmp sgt i64 %indvars.iv756, 2 - br i1 %140, label %116, label %.loopexit570, !llvm.loop !12 - -141: ; preds = %22, %22 - %142 = load i8, ptr %2, align 1 - %143 = add i8 %142, -66 - %144 = tail call i8 @llvm.fshl.i8(i8 %143, i8 %143, i8 6) - switch i8 %144, label %.loopexit570 [ - i8 1, label %145 - i8 9, label %145 - i8 0, label %178 - i8 8, label %178 + br i1 %exitcond755.not, label %.loopexit575, label %149, !llvm.loop !11 + +.loopexit575: ; preds = %149, %145, %134 + %158 = icmp sgt i64 %indvars.iv756, 2 + br i1 %158, label %134, label %.loopexit570, !llvm.loop !12 + +159: ; preds = %22, %22 + %160 = load i8, ptr %2, align 1 + %161 = add i8 %160, -66 + %162 = tail call i8 @llvm.fshl.i8(i8 %161, i8 %161, i8 6) + switch i8 %162, label %.loopexit570 [ + i8 1, label %163 + i8 9, label %163 + i8 0, label %196 + i8 8, label %196 ] -145: ; preds = %141, %141 +163: ; preds = %159, %159 %.not539.not640 = icmp sgt i32 %15, 1 br i1 %.not539.not640, label %.lr.ph643.preheader, label %.loopexit570 -.lr.ph643.preheader: ; preds = %145 - %146 = sext i32 %12 to i64 +.lr.ph643.preheader: ; preds = %163 + %164 = sext i32 %12 to i64 %wide.trip.count749 = zext nneg i32 %15 to i64 br label %.lr.ph643 .lr.ph643: ; preds = %.lr.ph643.preheader, %.loopexit577 %indvars.iv746 = phi i64 [ 1, %.lr.ph643.preheader ], [ %indvars.iv.next747, %.loopexit577 ] - %147 = getelementptr inbounds float, ptr %10, i64 %indvars.iv746 - %148 = load float, ptr %147, align 4 - %149 = getelementptr inbounds float, ptr %11, i64 %indvars.iv746 - %150 = load float, ptr %149, align 4 - %151 = fpext float %148 to double - %152 = fadd double %151, -1.000000e+00 - %153 = tail call noundef double @llvm.fabs.f64(double %152) - %154 = fcmp ogt double %153, 0x3E80000000000000 - %155 = tail call float @llvm.fabs.f32(float %150) - %156 = fcmp ogt float %155, 0x3810000000000000 - %or.cond555 = select i1 %154, i1 true, i1 %156 - br i1 %or.cond555, label %157, label %.loopexit577 - -157: ; preds = %.lr.ph643 - %158 = load i32, ptr %4, align 4 - %.not540637 = icmp slt i32 %158, 1 + %165 = getelementptr inbounds float, ptr %10, i64 %indvars.iv746 + %166 = load float, ptr %165, align 4 + %167 = getelementptr inbounds float, ptr %11, i64 %indvars.iv746 + %168 = load float, ptr %167, align 4 + %169 = fpext float %166 to double + %170 = fadd double %169, -1.000000e+00 + %171 = tail call noundef double @llvm.fabs.f64(double %170) + %172 = fcmp ogt double %171, 0x3E80000000000000 + %173 = tail call float @llvm.fabs.f32(float %168) + %174 = fcmp ogt float %173, 0x3810000000000000 + %or.cond555 = select i1 %172, i1 true, i1 %174 + br i1 %or.cond555, label %175, label %.loopexit577 + +175: ; preds = %.lr.ph643 + %176 = load i32, ptr %4, align 4 + %.not540637 = icmp slt i32 %176, 1 br i1 %.not540637, label %.loopexit577, label %.lr.ph639 -.lr.ph639: ; preds = %157 - %159 = fneg float %150 - %160 = add nuw i32 %158, 1 - %wide.trip.count744 = zext i32 %160 to i64 +.lr.ph639: ; preds = %175 + %177 = fneg float %168 + %178 = add nuw i32 %176, 1 + %wide.trip.count744 = zext i32 %178 to i64 %invariant.gep820 = getelementptr float, ptr %14, i64 %indvars.iv746 - br label %161 - -161: ; preds = %.lr.ph639, %161 - %indvars.iv741 = phi i64 [ 1, %.lr.ph639 ], [ %indvars.iv.next742, %161 ] - %162 = mul nsw i64 %indvars.iv741, %146 - %gep821 = getelementptr float, ptr %invariant.gep820, i64 %162 - %163 = load float, ptr %gep821, align 4 - %164 = load i32, ptr %3, align 4 - %165 = sext i32 %164 to i64 - %166 = getelementptr float, ptr %14, i64 %162 - %167 = getelementptr float, ptr %166, i64 %165 - %168 = load float, ptr %167, align 4 - %169 = fmul float %148, %163 - %170 = tail call float @llvm.fmuladd.f32(float %150, float %168, float %169) - store float %170, ptr %gep821, align 4 - %171 = load i32, ptr %3, align 4 - %172 = sext i32 %171 to i64 - %173 = getelementptr float, ptr %14, i64 %162 - %174 = getelementptr float, ptr %173, i64 %172 - %175 = load float, ptr %174, align 4 - %176 = fmul float %163, %159 - %177 = tail call float @llvm.fmuladd.f32(float %148, float %175, float %176) - store float %177, ptr %174, align 4 + br label %179 + +179: ; preds = %.lr.ph639, %179 + %indvars.iv741 = phi i64 [ 1, %.lr.ph639 ], [ %indvars.iv.next742, %179 ] + %180 = mul nsw i64 %indvars.iv741, %164 + %gep821 = getelementptr float, ptr %invariant.gep820, i64 %180 + %181 = load float, ptr %gep821, align 4 + %182 = load i32, ptr %3, align 4 + %183 = sext i32 %182 to i64 + %184 = getelementptr float, ptr %14, i64 %180 + %185 = getelementptr float, ptr %184, i64 %183 + %186 = load float, ptr %185, align 4 + %187 = fmul float %166, %181 + %188 = tail call float @llvm.fmuladd.f32(float %168, float %186, float %187) + store float %188, ptr %gep821, align 4 + %189 = load i32, ptr %3, align 4 + %190 = sext i32 %189 to i64 + %191 = getelementptr float, ptr %14, i64 %180 + %192 = getelementptr float, ptr %191, i64 %190 + %193 = load float, ptr %192, align 4 + %194 = fmul float %181, %177 + %195 = tail call float @llvm.fmuladd.f32(float %166, float %193, float %194) + store float %195, ptr %192, align 4 %indvars.iv.next742 = add nuw nsw i64 %indvars.iv741, 1 %exitcond745.not = icmp eq i64 %indvars.iv.next742, %wide.trip.count744 - br i1 %exitcond745.not, label %.loopexit577, label %161, !llvm.loop !13 + br i1 %exitcond745.not, label %.loopexit577, label %179, !llvm.loop !13 -.loopexit577: ; preds = %161, %157, %.lr.ph643 +.loopexit577: ; preds = %179, %175, %.lr.ph643 %indvars.iv.next747 = add nuw nsw i64 %indvars.iv746, 1 %exitcond750.not = icmp eq i64 %indvars.iv.next747, %wide.trip.count749 br i1 %exitcond750.not, label %.loopexit570, label %.lr.ph643, !llvm.loop !14 -178: ; preds = %141, %141 - %179 = icmp sgt i32 %15, 1 - br i1 %179, label %.lr.ph636.preheader, label %.loopexit570 +196: ; preds = %159, %159 + %197 = icmp sgt i32 %15, 1 + br i1 %197, label %.lr.ph636.preheader, label %.loopexit570 -.lr.ph636.preheader: ; preds = %178 - %180 = sext i32 %12 to i64 - %181 = zext nneg i32 %15 to i64 +.lr.ph636.preheader: ; preds = %196 + %198 = sext i32 %12 to i64 + %199 = zext nneg i32 %15 to i64 br label %.lr.ph636 .lr.ph636: ; preds = %.lr.ph636.preheader, %.loopexit579 - %indvars.iv738 = phi i64 [ %181, %.lr.ph636.preheader ], [ %indvars.iv.next739, %.loopexit579 ] + %indvars.iv738 = phi i64 [ %199, %.lr.ph636.preheader ], [ %indvars.iv.next739, %.loopexit579 ] %indvars.iv.next739 = add nsw i64 %indvars.iv738, -1 - %182 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next739 - %183 = load float, ptr %182, align 4 - %184 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next739 - %185 = load float, ptr %184, align 4 - %186 = fpext float %183 to double - %187 = fadd double %186, -1.000000e+00 - %188 = tail call noundef double @llvm.fabs.f64(double %187) - %189 = fcmp ogt double %188, 0x3E80000000000000 - %190 = tail call float @llvm.fabs.f32(float %185) - %191 = fcmp ogt float %190, 0x3810000000000000 - %or.cond557 = select i1 %189, i1 true, i1 %191 - br i1 %or.cond557, label %192, label %.loopexit579 - -192: ; preds = %.lr.ph636 - %193 = load i32, ptr %4, align 4 - %.not538631 = icmp slt i32 %193, 1 + %200 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next739 + %201 = load float, ptr %200, align 4 + %202 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next739 + %203 = load float, ptr %202, align 4 + %204 = fpext float %201 to double + %205 = fadd double %204, -1.000000e+00 + %206 = tail call noundef double @llvm.fabs.f64(double %205) + %207 = fcmp ogt double %206, 0x3E80000000000000 + %208 = tail call float @llvm.fabs.f32(float %203) + %209 = fcmp ogt float %208, 0x3810000000000000 + %or.cond557 = select i1 %207, i1 true, i1 %209 + br i1 %or.cond557, label %210, label %.loopexit579 + +210: ; preds = %.lr.ph636 + %211 = load i32, ptr %4, align 4 + %.not538631 = icmp slt i32 %211, 1 br i1 %.not538631, label %.loopexit579, label %.lr.ph633 -.lr.ph633: ; preds = %192 - %194 = fneg float %185 - %195 = add nuw i32 %193, 1 - %wide.trip.count736 = zext i32 %195 to i64 +.lr.ph633: ; preds = %210 + %212 = fneg float %203 + %213 = add nuw i32 %211, 1 + %wide.trip.count736 = zext i32 %213 to i64 %invariant.gep818 = getelementptr float, ptr %14, i64 %indvars.iv.next739 - br label %196 - -196: ; preds = %.lr.ph633, %196 - %indvars.iv733 = phi i64 [ 1, %.lr.ph633 ], [ %indvars.iv.next734, %196 ] - %197 = mul nsw i64 %indvars.iv733, %180 - %gep819 = getelementptr float, ptr %invariant.gep818, i64 %197 - %198 = load float, ptr %gep819, align 4 - %199 = load i32, ptr %3, align 4 - %200 = sext i32 %199 to i64 - %201 = getelementptr float, ptr %14, i64 %197 - %202 = getelementptr float, ptr %201, i64 %200 - %203 = load float, ptr %202, align 4 - %204 = fmul float %183, %198 - %205 = tail call float @llvm.fmuladd.f32(float %185, float %203, float %204) - store float %205, ptr %gep819, align 4 - %206 = load i32, ptr %3, align 4 - %207 = sext i32 %206 to i64 - %208 = getelementptr float, ptr %14, i64 %197 - %209 = getelementptr float, ptr %208, i64 %207 - %210 = load float, ptr %209, align 4 - %211 = fmul float %198, %194 - %212 = tail call float @llvm.fmuladd.f32(float %183, float %210, float %211) - store float %212, ptr %209, align 4 + br label %214 + +214: ; preds = %.lr.ph633, %214 + %indvars.iv733 = phi i64 [ 1, %.lr.ph633 ], [ %indvars.iv.next734, %214 ] + %215 = mul nsw i64 %indvars.iv733, %198 + %gep819 = getelementptr float, ptr %invariant.gep818, i64 %215 + %216 = load float, ptr %gep819, align 4 + %217 = load i32, ptr %3, align 4 + %218 = sext i32 %217 to i64 + %219 = getelementptr float, ptr %14, i64 %215 + %220 = getelementptr float, ptr %219, i64 %218 + %221 = load float, ptr %220, align 4 + %222 = fmul float %201, %216 + %223 = tail call float @llvm.fmuladd.f32(float %203, float %221, float %222) + store float %223, ptr %gep819, align 4 + %224 = load i32, ptr %3, align 4 + %225 = sext i32 %224 to i64 + %226 = getelementptr float, ptr %14, i64 %215 + %227 = getelementptr float, ptr %226, i64 %225 + %228 = load float, ptr %227, align 4 + %229 = fmul float %216, %212 + %230 = tail call float @llvm.fmuladd.f32(float %201, float %228, float %229) + store float %230, ptr %227, align 4 %indvars.iv.next734 = add nuw nsw i64 %indvars.iv733, 1 %exitcond737.not = icmp eq i64 %indvars.iv.next734, %wide.trip.count736 - br i1 %exitcond737.not, label %.loopexit579, label %196, !llvm.loop !15 - -.loopexit579: ; preds = %196, %192, %.lr.ph636 - %213 = icmp sgt i64 %indvars.iv738, 2 - br i1 %213, label %.lr.ph636, label %.loopexit570, !llvm.loop !16 - -214: ; preds = %20, %20 - %215 = load i8, ptr %1, align 1 - switch i8 %215, label %.loopexit570 [ - i8 86, label %216 - i8 118, label %216 - i8 84, label %276 - i8 116, label %276 - i8 66, label %335 - i8 98, label %335 + br i1 %exitcond737.not, label %.loopexit579, label %214, !llvm.loop !15 + +.loopexit579: ; preds = %214, %210, %.lr.ph636 + %231 = icmp sgt i64 %indvars.iv738, 2 + br i1 %231, label %.lr.ph636, label %.loopexit570, !llvm.loop !16 + +232: ; preds = %20, %20 + %233 = load i8, ptr %1, align 1 + switch i8 %233, label %.loopexit570 [ + i8 86, label %234 + i8 118, label %234 + i8 84, label %294 + i8 116, label %294 + i8 66, label %353 + i8 98, label %353 ] -216: ; preds = %214, %214 - %217 = load i8, ptr %2, align 1 - %218 = add i8 %217, -66 - %219 = tail call i8 @llvm.fshl.i8(i8 %218, i8 %218, i8 6) - switch i8 %219, label %.loopexit570 [ - i8 1, label %220 - i8 9, label %220 - i8 0, label %247 - i8 8, label %247 +234: ; preds = %232, %232 + %235 = load i8, ptr %2, align 1 + %236 = add i8 %235, -66 + %237 = tail call i8 @llvm.fshl.i8(i8 %236, i8 %236, i8 6) + switch i8 %237, label %.loopexit570 [ + i8 1, label %238 + i8 9, label %238 + i8 0, label %265 + i8 8, label %265 ] -220: ; preds = %216, %216 +238: ; preds = %234, %234 %.not536.not627 = icmp sgt i32 %18, 1 br i1 %.not536.not627, label %.lr.ph630.preheader, label %.loopexit570 -.lr.ph630.preheader: ; preds = %220 - %221 = sext i32 %12 to i64 +.lr.ph630.preheader: ; preds = %238 + %239 = sext i32 %12 to i64 %wide.trip.count731 = zext nneg i32 %18 to i64 br label %.lr.ph630 .lr.ph630: ; preds = %.lr.ph630.preheader, %.loopexit581 %indvars.iv728 = phi i64 [ 1, %.lr.ph630.preheader ], [ %indvars.iv.next729, %.loopexit581 ] - %222 = getelementptr inbounds float, ptr %10, i64 %indvars.iv728 - %223 = load float, ptr %222, align 4 - %224 = getelementptr inbounds float, ptr %11, i64 %indvars.iv728 - %225 = load float, ptr %224, align 4 - %226 = fpext float %223 to double - %227 = fadd double %226, -1.000000e+00 - %228 = tail call noundef double @llvm.fabs.f64(double %227) - %229 = fcmp ogt double %228, 0x3E80000000000000 - %230 = tail call float @llvm.fabs.f32(float %225) - %231 = fcmp ogt float %230, 0x3810000000000000 - %or.cond559 = select i1 %229, i1 true, i1 %231 - br i1 %or.cond559, label %232, label %.loopexit581 - -232: ; preds = %.lr.ph630 - %233 = load i32, ptr %3, align 4 - %.not537624 = icmp slt i32 %233, 1 + %240 = getelementptr inbounds float, ptr %10, i64 %indvars.iv728 + %241 = load float, ptr %240, align 4 + %242 = getelementptr inbounds float, ptr %11, i64 %indvars.iv728 + %243 = load float, ptr %242, align 4 + %244 = fpext float %241 to double + %245 = fadd double %244, -1.000000e+00 + %246 = tail call noundef double @llvm.fabs.f64(double %245) + %247 = fcmp ogt double %246, 0x3E80000000000000 + %248 = tail call float @llvm.fabs.f32(float %243) + %249 = fcmp ogt float %248, 0x3810000000000000 + %or.cond559 = select i1 %247, i1 true, i1 %249 + br i1 %or.cond559, label %250, label %.loopexit581 + +250: ; preds = %.lr.ph630 + %251 = load i32, ptr %3, align 4 + %.not537624 = icmp slt i32 %251, 1 br i1 %.not537624, label %.loopexit581, label %.lr.ph626 -.lr.ph626: ; preds = %232 - %234 = add nuw nsw i64 %indvars.iv728, 1 - %235 = mul nsw i64 %234, %221 - %236 = mul nsw i64 %indvars.iv728, %221 - %237 = fneg float %225 - %238 = add nuw i32 %233, 1 - %wide.trip.count726 = zext i32 %238 to i64 - %invariant.gep814 = getelementptr float, ptr %14, i64 %235 - %invariant.gep816 = getelementptr float, ptr %14, i64 %236 - br label %239 - -239: ; preds = %.lr.ph626, %239 - %indvars.iv723 = phi i64 [ 1, %.lr.ph626 ], [ %indvars.iv.next724, %239 ] +.lr.ph626: ; preds = %250 + %252 = add nuw nsw i64 %indvars.iv728, 1 + %253 = mul nsw i64 %252, %239 + %254 = mul nsw i64 %indvars.iv728, %239 + %255 = fneg float %243 + %256 = add nuw i32 %251, 1 + %wide.trip.count726 = zext i32 %256 to i64 + %invariant.gep814 = getelementptr float, ptr %14, i64 %253 + %invariant.gep816 = getelementptr float, ptr %14, i64 %254 + br label %257 + +257: ; preds = %.lr.ph626, %257 + %indvars.iv723 = phi i64 [ 1, %.lr.ph626 ], [ %indvars.iv.next724, %257 ] %gep815 = getelementptr float, ptr %invariant.gep814, i64 %indvars.iv723 - %240 = load float, ptr %gep815, align 4 + %258 = load float, ptr %gep815, align 4 %gep817 = getelementptr float, ptr %invariant.gep816, i64 %indvars.iv723 - %241 = load float, ptr %gep817, align 4 - %242 = fmul float %241, %237 - %243 = tail call float @llvm.fmuladd.f32(float %223, float %240, float %242) - store float %243, ptr %gep815, align 4 - %244 = load float, ptr %gep817, align 4 - %245 = fmul float %223, %244 - %246 = tail call float @llvm.fmuladd.f32(float %225, float %240, float %245) - store float %246, ptr %gep817, align 4 + %259 = load float, ptr %gep817, align 4 + %260 = fmul float %259, %255 + %261 = tail call float @llvm.fmuladd.f32(float %241, float %258, float %260) + store float %261, ptr %gep815, align 4 + %262 = load float, ptr %gep817, align 4 + %263 = fmul float %241, %262 + %264 = tail call float @llvm.fmuladd.f32(float %243, float %258, float %263) + store float %264, ptr %gep817, align 4 %indvars.iv.next724 = add nuw nsw i64 %indvars.iv723, 1 %exitcond727.not = icmp eq i64 %indvars.iv.next724, %wide.trip.count726 - br i1 %exitcond727.not, label %.loopexit581, label %239, !llvm.loop !17 + br i1 %exitcond727.not, label %.loopexit581, label %257, !llvm.loop !17 -.loopexit581: ; preds = %239, %232, %.lr.ph630 +.loopexit581: ; preds = %257, %250, %.lr.ph630 %indvars.iv.next729 = add nuw nsw i64 %indvars.iv728, 1 %exitcond732.not = icmp eq i64 %indvars.iv.next729, %wide.trip.count731 br i1 %exitcond732.not, label %.loopexit570, label %.lr.ph630, !llvm.loop !18 -247: ; preds = %216, %216 - %248 = icmp sgt i32 %18, 1 - br i1 %248, label %.lr.ph623.preheader, label %.loopexit570 +265: ; preds = %234, %234 + %266 = icmp sgt i32 %18, 1 + br i1 %266, label %.lr.ph623.preheader, label %.loopexit570 -.lr.ph623.preheader: ; preds = %247 - %249 = zext nneg i32 %18 to i64 - %250 = sext i32 %12 to i64 +.lr.ph623.preheader: ; preds = %265 + %267 = zext nneg i32 %18 to i64 + %268 = sext i32 %12 to i64 br label %.lr.ph623 .lr.ph623: ; preds = %.lr.ph623.preheader, %.loopexit583 - %indvars.iv720 = phi i64 [ %249, %.lr.ph623.preheader ], [ %indvars.iv.next721, %.loopexit583 ] + %indvars.iv720 = phi i64 [ %267, %.lr.ph623.preheader ], [ %indvars.iv.next721, %.loopexit583 ] %indvars.iv.next721 = add nsw i64 %indvars.iv720, -1 - %251 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next721 - %252 = load float, ptr %251, align 4 - %253 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next721 - %254 = load float, ptr %253, align 4 - %255 = fpext float %252 to double - %256 = fadd double %255, -1.000000e+00 - %257 = tail call noundef double @llvm.fabs.f64(double %256) - %258 = fcmp ogt double %257, 0x3E80000000000000 - %259 = tail call float @llvm.fabs.f32(float %254) - %260 = fcmp ogt float %259, 0x3810000000000000 - %or.cond561 = select i1 %258, i1 true, i1 %260 - br i1 %or.cond561, label %261, label %.loopexit583 - -261: ; preds = %.lr.ph623 - %262 = load i32, ptr %3, align 4 - %.not535617 = icmp slt i32 %262, 1 + %269 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next721 + %270 = load float, ptr %269, align 4 + %271 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next721 + %272 = load float, ptr %271, align 4 + %273 = fpext float %270 to double + %274 = fadd double %273, -1.000000e+00 + %275 = tail call noundef double @llvm.fabs.f64(double %274) + %276 = fcmp ogt double %275, 0x3E80000000000000 + %277 = tail call float @llvm.fabs.f32(float %272) + %278 = fcmp ogt float %277, 0x3810000000000000 + %or.cond561 = select i1 %276, i1 true, i1 %278 + br i1 %or.cond561, label %279, label %.loopexit583 + +279: ; preds = %.lr.ph623 + %280 = load i32, ptr %3, align 4 + %.not535617 = icmp slt i32 %280, 1 br i1 %.not535617, label %.loopexit583, label %.lr.ph619 -.lr.ph619: ; preds = %261 - %263 = mul nsw i64 %indvars.iv720, %250 - %264 = mul nsw i64 %indvars.iv.next721, %250 - %265 = fneg float %254 - %266 = add nuw i32 %262, 1 - %wide.trip.count718 = zext i32 %266 to i64 - %invariant.gep810 = getelementptr float, ptr %14, i64 %263 - %invariant.gep812 = getelementptr float, ptr %14, i64 %264 - br label %267 - -267: ; preds = %.lr.ph619, %267 - %indvars.iv715 = phi i64 [ 1, %.lr.ph619 ], [ %indvars.iv.next716, %267 ] +.lr.ph619: ; preds = %279 + %281 = mul nsw i64 %indvars.iv720, %268 + %282 = mul nsw i64 %indvars.iv.next721, %268 + %283 = fneg float %272 + %284 = add nuw i32 %280, 1 + %wide.trip.count718 = zext i32 %284 to i64 + %invariant.gep810 = getelementptr float, ptr %14, i64 %281 + %invariant.gep812 = getelementptr float, ptr %14, i64 %282 + br label %285 + +285: ; preds = %.lr.ph619, %285 + %indvars.iv715 = phi i64 [ 1, %.lr.ph619 ], [ %indvars.iv.next716, %285 ] %gep811 = getelementptr float, ptr %invariant.gep810, i64 %indvars.iv715 - %268 = load float, ptr %gep811, align 4 + %286 = load float, ptr %gep811, align 4 %gep813 = getelementptr float, ptr %invariant.gep812, i64 %indvars.iv715 - %269 = load float, ptr %gep813, align 4 - %270 = fmul float %269, %265 - %271 = tail call float @llvm.fmuladd.f32(float %252, float %268, float %270) - store float %271, ptr %gep811, align 4 - %272 = load float, ptr %gep813, align 4 - %273 = fmul float %252, %272 - %274 = tail call float @llvm.fmuladd.f32(float %254, float %268, float %273) - store float %274, ptr %gep813, align 4 + %287 = load float, ptr %gep813, align 4 + %288 = fmul float %287, %283 + %289 = tail call float @llvm.fmuladd.f32(float %270, float %286, float %288) + store float %289, ptr %gep811, align 4 + %290 = load float, ptr %gep813, align 4 + %291 = fmul float %270, %290 + %292 = tail call float @llvm.fmuladd.f32(float %272, float %286, float %291) + store float %292, ptr %gep813, align 4 %indvars.iv.next716 = add nuw nsw i64 %indvars.iv715, 1 %exitcond719.not = icmp eq i64 %indvars.iv.next716, %wide.trip.count718 - br i1 %exitcond719.not, label %.loopexit583, label %267, !llvm.loop !19 - -.loopexit583: ; preds = %267, %261, %.lr.ph623 - %275 = icmp sgt i64 %indvars.iv720, 2 - br i1 %275, label %.lr.ph623, label %.loopexit570, !llvm.loop !20 - -276: ; preds = %214, %214 - %277 = load i8, ptr %2, align 1 - %278 = add i8 %277, -66 - %279 = tail call i8 @llvm.fshl.i8(i8 %278, i8 %278, i8 6) - switch i8 %279, label %.loopexit570 [ - i8 1, label %280 - i8 9, label %280 - i8 0, label %307 - i8 8, label %307 + br i1 %exitcond719.not, label %.loopexit583, label %285, !llvm.loop !19 + +.loopexit583: ; preds = %285, %279, %.lr.ph623 + %293 = icmp sgt i64 %indvars.iv720, 2 + br i1 %293, label %.lr.ph623, label %.loopexit570, !llvm.loop !20 + +294: ; preds = %232, %232 + %295 = load i8, ptr %2, align 1 + %296 = add i8 %295, -66 + %297 = tail call i8 @llvm.fshl.i8(i8 %296, i8 %296, i8 6) + switch i8 %297, label %.loopexit570 [ + i8 1, label %298 + i8 9, label %298 + i8 0, label %325 + i8 8, label %325 ] -280: ; preds = %276, %276 +298: ; preds = %294, %294 %.not533613 = icmp slt i32 %18, 2 br i1 %.not533613, label %.loopexit570, label %.lr.ph616.preheader -.lr.ph616.preheader: ; preds = %280 - %281 = sext i32 %12 to i64 - %282 = add nuw i32 %18, 1 - %wide.trip.count713 = zext i32 %282 to i64 - %invariant.gep808 = getelementptr float, ptr %14, i64 %281 +.lr.ph616.preheader: ; preds = %298 + %299 = sext i32 %12 to i64 + %300 = add nuw i32 %18, 1 + %wide.trip.count713 = zext i32 %300 to i64 + %invariant.gep808 = getelementptr float, ptr %14, i64 %299 br label %.lr.ph616 .lr.ph616: ; preds = %.lr.ph616.preheader, %.loopexit585 %indvars.iv710 = phi i64 [ 2, %.lr.ph616.preheader ], [ %indvars.iv.next711, %.loopexit585 ] - %283 = add nsw i64 %indvars.iv710, -1 - %284 = getelementptr inbounds float, ptr %10, i64 %283 - %285 = load float, ptr %284, align 4 - %286 = getelementptr inbounds float, ptr %11, i64 %283 - %287 = load float, ptr %286, align 4 - %288 = fpext float %285 to double - %289 = fadd double %288, -1.000000e+00 - %290 = tail call noundef double @llvm.fabs.f64(double %289) - %291 = fcmp ogt double %290, 0x3E80000000000000 - %292 = tail call float @llvm.fabs.f32(float %287) - %293 = fcmp ogt float %292, 0x3810000000000000 - %or.cond563 = select i1 %291, i1 true, i1 %293 - br i1 %or.cond563, label %294, label %.loopexit585 - -294: ; preds = %.lr.ph616 - %295 = load i32, ptr %3, align 4 - %.not534610 = icmp slt i32 %295, 1 + %301 = add nsw i64 %indvars.iv710, -1 + %302 = getelementptr inbounds float, ptr %10, i64 %301 + %303 = load float, ptr %302, align 4 + %304 = getelementptr inbounds float, ptr %11, i64 %301 + %305 = load float, ptr %304, align 4 + %306 = fpext float %303 to double + %307 = fadd double %306, -1.000000e+00 + %308 = tail call noundef double @llvm.fabs.f64(double %307) + %309 = fcmp ogt double %308, 0x3E80000000000000 + %310 = tail call float @llvm.fabs.f32(float %305) + %311 = fcmp ogt float %310, 0x3810000000000000 + %or.cond563 = select i1 %309, i1 true, i1 %311 + br i1 %or.cond563, label %312, label %.loopexit585 + +312: ; preds = %.lr.ph616 + %313 = load i32, ptr %3, align 4 + %.not534610 = icmp slt i32 %313, 1 br i1 %.not534610, label %.loopexit585, label %.lr.ph612 -.lr.ph612: ; preds = %294 - %296 = mul nsw i64 %indvars.iv710, %281 - %297 = fneg float %287 - %298 = add nuw i32 %295, 1 - %wide.trip.count708 = zext i32 %298 to i64 - %invariant.gep806 = getelementptr float, ptr %14, i64 %296 - br label %299 +.lr.ph612: ; preds = %312 + %314 = mul nsw i64 %indvars.iv710, %299 + %315 = fneg float %305 + %316 = add nuw i32 %313, 1 + %wide.trip.count708 = zext i32 %316 to i64 + %invariant.gep806 = getelementptr float, ptr %14, i64 %314 + br label %317 -299: ; preds = %.lr.ph612, %299 - %indvars.iv705 = phi i64 [ 1, %.lr.ph612 ], [ %indvars.iv.next706, %299 ] +317: ; preds = %.lr.ph612, %317 + %indvars.iv705 = phi i64 [ 1, %.lr.ph612 ], [ %indvars.iv.next706, %317 ] %gep807 = getelementptr float, ptr %invariant.gep806, i64 %indvars.iv705 - %300 = load float, ptr %gep807, align 4 + %318 = load float, ptr %gep807, align 4 %gep809 = getelementptr float, ptr %invariant.gep808, i64 %indvars.iv705 - %301 = load float, ptr %gep809, align 4 - %302 = fmul float %301, %297 - %303 = tail call float @llvm.fmuladd.f32(float %285, float %300, float %302) - store float %303, ptr %gep807, align 4 - %304 = load float, ptr %gep809, align 4 - %305 = fmul float %285, %304 - %306 = tail call float @llvm.fmuladd.f32(float %287, float %300, float %305) - store float %306, ptr %gep809, align 4 + %319 = load float, ptr %gep809, align 4 + %320 = fmul float %319, %315 + %321 = tail call float @llvm.fmuladd.f32(float %303, float %318, float %320) + store float %321, ptr %gep807, align 4 + %322 = load float, ptr %gep809, align 4 + %323 = fmul float %303, %322 + %324 = tail call float @llvm.fmuladd.f32(float %305, float %318, float %323) + store float %324, ptr %gep809, align 4 %indvars.iv.next706 = add nuw nsw i64 %indvars.iv705, 1 %exitcond709.not = icmp eq i64 %indvars.iv.next706, %wide.trip.count708 - br i1 %exitcond709.not, label %.loopexit585, label %299, !llvm.loop !21 + br i1 %exitcond709.not, label %.loopexit585, label %317, !llvm.loop !21 -.loopexit585: ; preds = %299, %294, %.lr.ph616 +.loopexit585: ; preds = %317, %312, %.lr.ph616 %indvars.iv.next711 = add nuw nsw i64 %indvars.iv710, 1 %exitcond714.not = icmp eq i64 %indvars.iv.next711, %wide.trip.count713 br i1 %exitcond714.not, label %.loopexit570, label %.lr.ph616, !llvm.loop !22 -307: ; preds = %276, %276 - %308 = icmp sgt i32 %18, 1 - br i1 %308, label %.lr.ph609.preheader, label %.loopexit570 +325: ; preds = %294, %294 + %326 = icmp sgt i32 %18, 1 + br i1 %326, label %.lr.ph609.preheader, label %.loopexit570 -.lr.ph609.preheader: ; preds = %307 - %309 = sext i32 %12 to i64 - %310 = zext nneg i32 %18 to i64 - %invariant.gep804 = getelementptr float, ptr %14, i64 %309 +.lr.ph609.preheader: ; preds = %325 + %327 = sext i32 %12 to i64 + %328 = zext nneg i32 %18 to i64 + %invariant.gep804 = getelementptr float, ptr %14, i64 %327 br label %.lr.ph609 .lr.ph609: ; preds = %.lr.ph609.preheader, %.loopexit587 - %indvars.iv702 = phi i64 [ %310, %.lr.ph609.preheader ], [ %indvars.iv.next703, %.loopexit587 ] + %indvars.iv702 = phi i64 [ %328, %.lr.ph609.preheader ], [ %indvars.iv.next703, %.loopexit587 ] %indvars.iv.next703 = add nsw i64 %indvars.iv702, -1 - %311 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next703 - %312 = load float, ptr %311, align 4 - %313 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next703 - %314 = load float, ptr %313, align 4 - %315 = fpext float %312 to double - %316 = fadd double %315, -1.000000e+00 - %317 = tail call noundef double @llvm.fabs.f64(double %316) - %318 = fcmp ogt double %317, 0x3E80000000000000 - %319 = tail call float @llvm.fabs.f32(float %314) - %320 = fcmp ogt float %319, 0x3810000000000000 - %or.cond565 = select i1 %318, i1 true, i1 %320 - br i1 %or.cond565, label %321, label %.loopexit587 - -321: ; preds = %.lr.ph609 - %322 = load i32, ptr %3, align 4 - %.not532605 = icmp slt i32 %322, 1 + %329 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next703 + %330 = load float, ptr %329, align 4 + %331 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next703 + %332 = load float, ptr %331, align 4 + %333 = fpext float %330 to double + %334 = fadd double %333, -1.000000e+00 + %335 = tail call noundef double @llvm.fabs.f64(double %334) + %336 = fcmp ogt double %335, 0x3E80000000000000 + %337 = tail call float @llvm.fabs.f32(float %332) + %338 = fcmp ogt float %337, 0x3810000000000000 + %or.cond565 = select i1 %336, i1 true, i1 %338 + br i1 %or.cond565, label %339, label %.loopexit587 + +339: ; preds = %.lr.ph609 + %340 = load i32, ptr %3, align 4 + %.not532605 = icmp slt i32 %340, 1 br i1 %.not532605, label %.loopexit587, label %.lr.ph607 -.lr.ph607: ; preds = %321 - %323 = mul nsw i64 %indvars.iv702, %309 - %324 = fneg float %314 - %325 = add nuw i32 %322, 1 - %wide.trip.count700 = zext i32 %325 to i64 - %invariant.gep802 = getelementptr float, ptr %14, i64 %323 - br label %326 +.lr.ph607: ; preds = %339 + %341 = mul nsw i64 %indvars.iv702, %327 + %342 = fneg float %332 + %343 = add nuw i32 %340, 1 + %wide.trip.count700 = zext i32 %343 to i64 + %invariant.gep802 = getelementptr float, ptr %14, i64 %341 + br label %344 -326: ; preds = %.lr.ph607, %326 - %indvars.iv697 = phi i64 [ 1, %.lr.ph607 ], [ %indvars.iv.next698, %326 ] +344: ; preds = %.lr.ph607, %344 + %indvars.iv697 = phi i64 [ 1, %.lr.ph607 ], [ %indvars.iv.next698, %344 ] %gep803 = getelementptr float, ptr %invariant.gep802, i64 %indvars.iv697 - %327 = load float, ptr %gep803, align 4 + %345 = load float, ptr %gep803, align 4 %gep805 = getelementptr float, ptr %invariant.gep804, i64 %indvars.iv697 - %328 = load float, ptr %gep805, align 4 - %329 = fmul float %328, %324 - %330 = tail call float @llvm.fmuladd.f32(float %312, float %327, float %329) - store float %330, ptr %gep803, align 4 - %331 = load float, ptr %gep805, align 4 - %332 = fmul float %312, %331 - %333 = tail call float @llvm.fmuladd.f32(float %314, float %327, float %332) - store float %333, ptr %gep805, align 4 + %346 = load float, ptr %gep805, align 4 + %347 = fmul float %346, %342 + %348 = tail call float @llvm.fmuladd.f32(float %330, float %345, float %347) + store float %348, ptr %gep803, align 4 + %349 = load float, ptr %gep805, align 4 + %350 = fmul float %330, %349 + %351 = tail call float @llvm.fmuladd.f32(float %332, float %345, float %350) + store float %351, ptr %gep805, align 4 %indvars.iv.next698 = add nuw nsw i64 %indvars.iv697, 1 %exitcond701.not = icmp eq i64 %indvars.iv.next698, %wide.trip.count700 - br i1 %exitcond701.not, label %.loopexit587, label %326, !llvm.loop !23 - -.loopexit587: ; preds = %326, %321, %.lr.ph609 - %334 = icmp sgt i64 %indvars.iv702, 2 - br i1 %334, label %.lr.ph609, label %.loopexit570, !llvm.loop !24 - -335: ; preds = %214, %214 - %336 = load i8, ptr %2, align 1 - %337 = add i8 %336, -66 - %338 = tail call i8 @llvm.fshl.i8(i8 %337, i8 %337, i8 6) - switch i8 %338, label %.loopexit570 [ - i8 1, label %339 - i8 9, label %339 - i8 0, label %374 - i8 8, label %374 + br i1 %exitcond701.not, label %.loopexit587, label %344, !llvm.loop !23 + +.loopexit587: ; preds = %344, %339, %.lr.ph609 + %352 = icmp sgt i64 %indvars.iv702, 2 + br i1 %352, label %.lr.ph609, label %.loopexit570, !llvm.loop !24 + +353: ; preds = %232, %232 + %354 = load i8, ptr %2, align 1 + %355 = add i8 %354, -66 + %356 = tail call i8 @llvm.fshl.i8(i8 %355, i8 %355, i8 6) + switch i8 %356, label %.loopexit570 [ + i8 1, label %357 + i8 9, label %357 + i8 0, label %392 + i8 8, label %392 ] -339: ; preds = %335, %335 +357: ; preds = %353, %353 %.not530.not601 = icmp sgt i32 %18, 1 br i1 %.not530.not601, label %.lr.ph604.preheader, label %.loopexit570 -.lr.ph604.preheader: ; preds = %339 - %340 = sext i32 %12 to i64 +.lr.ph604.preheader: ; preds = %357 + %358 = sext i32 %12 to i64 %wide.trip.count695 = zext nneg i32 %18 to i64 br label %.lr.ph604 .lr.ph604: ; preds = %.lr.ph604.preheader, %.loopexit589 %indvars.iv692 = phi i64 [ 1, %.lr.ph604.preheader ], [ %indvars.iv.next693, %.loopexit589 ] - %341 = getelementptr inbounds float, ptr %10, i64 %indvars.iv692 - %342 = load float, ptr %341, align 4 - %343 = getelementptr inbounds float, ptr %11, i64 %indvars.iv692 - %344 = load float, ptr %343, align 4 - %345 = fpext float %342 to double - %346 = fadd double %345, -1.000000e+00 - %347 = tail call noundef double @llvm.fabs.f64(double %346) - %348 = fcmp ogt double %347, 0x3E80000000000000 - %349 = tail call float @llvm.fabs.f32(float %344) - %350 = fcmp ogt float %349, 0x3810000000000000 - %or.cond567 = select i1 %348, i1 true, i1 %350 - br i1 %or.cond567, label %351, label %.loopexit589 - -351: ; preds = %.lr.ph604 - %352 = load i32, ptr %3, align 4 - %.not531598 = icmp slt i32 %352, 1 + %359 = getelementptr inbounds float, ptr %10, i64 %indvars.iv692 + %360 = load float, ptr %359, align 4 + %361 = getelementptr inbounds float, ptr %11, i64 %indvars.iv692 + %362 = load float, ptr %361, align 4 + %363 = fpext float %360 to double + %364 = fadd double %363, -1.000000e+00 + %365 = tail call noundef double @llvm.fabs.f64(double %364) + %366 = fcmp ogt double %365, 0x3E80000000000000 + %367 = tail call float @llvm.fabs.f32(float %362) + %368 = fcmp ogt float %367, 0x3810000000000000 + %or.cond567 = select i1 %366, i1 true, i1 %368 + br i1 %or.cond567, label %369, label %.loopexit589 + +369: ; preds = %.lr.ph604 + %370 = load i32, ptr %3, align 4 + %.not531598 = icmp slt i32 %370, 1 br i1 %.not531598, label %.loopexit589, label %.lr.ph600 -.lr.ph600: ; preds = %351 - %353 = mul nsw i64 %indvars.iv692, %340 - %354 = fneg float %344 - %355 = add nuw i32 %352, 1 - %wide.trip.count690 = zext i32 %355 to i64 - %invariant.gep800 = getelementptr float, ptr %14, i64 %353 - br label %356 +.lr.ph600: ; preds = %369 + %371 = mul nsw i64 %indvars.iv692, %358 + %372 = fneg float %362 + %373 = add nuw i32 %370, 1 + %wide.trip.count690 = zext i32 %373 to i64 + %invariant.gep800 = getelementptr float, ptr %14, i64 %371 + br label %374 -356: ; preds = %.lr.ph600, %356 - %indvars.iv687 = phi i64 [ 1, %.lr.ph600 ], [ %indvars.iv.next688, %356 ] +374: ; preds = %.lr.ph600, %374 + %indvars.iv687 = phi i64 [ 1, %.lr.ph600 ], [ %indvars.iv.next688, %374 ] %gep801 = getelementptr float, ptr %invariant.gep800, i64 %indvars.iv687 - %357 = load float, ptr %gep801, align 4 - %358 = load i32, ptr %4, align 4 - %359 = mul nsw i32 %358, %12 - %360 = sext i32 %359 to i64 - %361 = getelementptr float, ptr %14, i64 %indvars.iv687 - %362 = getelementptr float, ptr %361, i64 %360 - %363 = load float, ptr %362, align 4 - %364 = fmul float %342, %357 - %365 = tail call float @llvm.fmuladd.f32(float %344, float %363, float %364) - store float %365, ptr %gep801, align 4 - %366 = load i32, ptr %4, align 4 - %367 = mul nsw i32 %366, %12 - %368 = sext i32 %367 to i64 - %369 = getelementptr float, ptr %14, i64 %indvars.iv687 - %370 = getelementptr float, ptr %369, i64 %368 - %371 = load float, ptr %370, align 4 - %372 = fmul float %357, %354 - %373 = tail call float @llvm.fmuladd.f32(float %342, float %371, float %372) - store float %373, ptr %370, align 4 + %375 = load float, ptr %gep801, align 4 + %376 = load i32, ptr %4, align 4 + %377 = mul nsw i32 %376, %12 + %378 = sext i32 %377 to i64 + %379 = getelementptr float, ptr %14, i64 %indvars.iv687 + %380 = getelementptr float, ptr %379, i64 %378 + %381 = load float, ptr %380, align 4 + %382 = fmul float %360, %375 + %383 = tail call float @llvm.fmuladd.f32(float %362, float %381, float %382) + store float %383, ptr %gep801, align 4 + %384 = load i32, ptr %4, align 4 + %385 = mul nsw i32 %384, %12 + %386 = sext i32 %385 to i64 + %387 = getelementptr float, ptr %14, i64 %indvars.iv687 + %388 = getelementptr float, ptr %387, i64 %386 + %389 = load float, ptr %388, align 4 + %390 = fmul float %375, %372 + %391 = tail call float @llvm.fmuladd.f32(float %360, float %389, float %390) + store float %391, ptr %388, align 4 %indvars.iv.next688 = add nuw nsw i64 %indvars.iv687, 1 %exitcond691.not = icmp eq i64 %indvars.iv.next688, %wide.trip.count690 - br i1 %exitcond691.not, label %.loopexit589, label %356, !llvm.loop !25 + br i1 %exitcond691.not, label %.loopexit589, label %374, !llvm.loop !25 -.loopexit589: ; preds = %356, %351, %.lr.ph604 +.loopexit589: ; preds = %374, %369, %.lr.ph604 %indvars.iv.next693 = add nuw nsw i64 %indvars.iv692, 1 %exitcond696.not = icmp eq i64 %indvars.iv.next693, %wide.trip.count695 br i1 %exitcond696.not, label %.loopexit570, label %.lr.ph604, !llvm.loop !26 -374: ; preds = %335, %335 - %375 = icmp sgt i32 %18, 1 - br i1 %375, label %.lr.ph597.preheader, label %.loopexit570 +392: ; preds = %353, %353 + %393 = icmp sgt i32 %18, 1 + br i1 %393, label %.lr.ph597.preheader, label %.loopexit570 -.lr.ph597.preheader: ; preds = %374 - %376 = zext nneg i32 %18 to i64 - %377 = sext i32 %12 to i64 +.lr.ph597.preheader: ; preds = %392 + %394 = zext nneg i32 %18 to i64 + %395 = sext i32 %12 to i64 br label %.lr.ph597 .lr.ph597: ; preds = %.lr.ph597.preheader, %.loopexit591 - %indvars.iv684 = phi i64 [ %376, %.lr.ph597.preheader ], [ %indvars.iv.next685, %.loopexit591 ] + %indvars.iv684 = phi i64 [ %394, %.lr.ph597.preheader ], [ %indvars.iv.next685, %.loopexit591 ] %indvars.iv.next685 = add nsw i64 %indvars.iv684, -1 - %378 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next685 - %379 = load float, ptr %378, align 4 - %380 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next685 - %381 = load float, ptr %380, align 4 - %382 = fpext float %379 to double - %383 = fadd double %382, -1.000000e+00 - %384 = tail call noundef double @llvm.fabs.f64(double %383) - %385 = fcmp ogt double %384, 0x3E80000000000000 - %386 = tail call float @llvm.fabs.f32(float %381) - %387 = fcmp ogt float %386, 0x3810000000000000 - %or.cond569 = select i1 %385, i1 true, i1 %387 - br i1 %or.cond569, label %388, label %.loopexit591 - -388: ; preds = %.lr.ph597 - %389 = load i32, ptr %3, align 4 - %.not593 = icmp slt i32 %389, 1 + %396 = getelementptr inbounds float, ptr %10, i64 %indvars.iv.next685 + %397 = load float, ptr %396, align 4 + %398 = getelementptr inbounds float, ptr %11, i64 %indvars.iv.next685 + %399 = load float, ptr %398, align 4 + %400 = fpext float %397 to double + %401 = fadd double %400, -1.000000e+00 + %402 = tail call noundef double @llvm.fabs.f64(double %401) + %403 = fcmp ogt double %402, 0x3E80000000000000 + %404 = tail call float @llvm.fabs.f32(float %399) + %405 = fcmp ogt float %404, 0x3810000000000000 + %or.cond569 = select i1 %403, i1 true, i1 %405 + br i1 %or.cond569, label %406, label %.loopexit591 + +406: ; preds = %.lr.ph597 + %407 = load i32, ptr %3, align 4 + %.not593 = icmp slt i32 %407, 1 br i1 %.not593, label %.loopexit591, label %.lr.ph -.lr.ph: ; preds = %388 - %390 = mul nsw i64 %indvars.iv.next685, %377 - %391 = fneg float %381 - %392 = add nuw i32 %389, 1 - %wide.trip.count = zext i32 %392 to i64 - %invariant.gep798 = getelementptr float, ptr %14, i64 %390 - br label %393 +.lr.ph: ; preds = %406 + %408 = mul nsw i64 %indvars.iv.next685, %395 + %409 = fneg float %399 + %410 = add nuw i32 %407, 1 + %wide.trip.count = zext i32 %410 to i64 + %invariant.gep798 = getelementptr float, ptr %14, i64 %408 + br label %411 -393: ; preds = %.lr.ph, %393 - %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %393 ] +411: ; preds = %.lr.ph, %411 + %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %411 ] %gep799 = getelementptr float, ptr %invariant.gep798, i64 %indvars.iv - %394 = load float, ptr %gep799, align 4 - %395 = load i32, ptr %4, align 4 - %396 = mul nsw i32 %395, %12 - %397 = sext i32 %396 to i64 - %398 = getelementptr float, ptr %14, i64 %indvars.iv - %399 = getelementptr float, ptr %398, i64 %397 - %400 = load float, ptr %399, align 4 - %401 = fmul float %379, %394 - %402 = tail call float @llvm.fmuladd.f32(float %381, float %400, float %401) - store float %402, ptr %gep799, align 4 - %403 = load i32, ptr %4, align 4 - %404 = mul nsw i32 %403, %12 - %405 = sext i32 %404 to i64 - %406 = getelementptr float, ptr %14, i64 %indvars.iv - %407 = getelementptr float, ptr %406, i64 %405 - %408 = load float, ptr %407, align 4 - %409 = fmul float %394, %391 - %410 = tail call float @llvm.fmuladd.f32(float %379, float %408, float %409) - store float %410, ptr %407, align 4 + %412 = load float, ptr %gep799, align 4 + %413 = load i32, ptr %4, align 4 + %414 = mul nsw i32 %413, %12 + %415 = sext i32 %414 to i64 + %416 = getelementptr float, ptr %14, i64 %indvars.iv + %417 = getelementptr float, ptr %416, i64 %415 + %418 = load float, ptr %417, align 4 + %419 = fmul float %397, %412 + %420 = tail call float @llvm.fmuladd.f32(float %399, float %418, float %419) + store float %420, ptr %gep799, align 4 + %421 = load i32, ptr %4, align 4 + %422 = mul nsw i32 %421, %12 + %423 = sext i32 %422 to i64 + %424 = getelementptr float, ptr %14, i64 %indvars.iv + %425 = getelementptr float, ptr %424, i64 %423 + %426 = load float, ptr %425, align 4 + %427 = fmul float %412, %409 + %428 = tail call float @llvm.fmuladd.f32(float %397, float %426, float %427) + store float %428, ptr %425, align 4 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count - br i1 %exitcond.not, label %.loopexit591, label %393, !llvm.loop !27 + br i1 %exitcond.not, label %.loopexit591, label %411, !llvm.loop !27 -.loopexit591: ; preds = %393, %388, %.lr.ph597 - %411 = icmp sgt i64 %indvars.iv684, 2 - br i1 %411, label %.lr.ph597, label %.loopexit570, !llvm.loop !28 +.loopexit591: ; preds = %411, %406, %.lr.ph597 + %429 = icmp sgt i64 %indvars.iv684, 2 + br i1 %429, label %.lr.ph597, label %.loopexit570, !llvm.loop !28 -.loopexit570: ; preds = %.loopexit591, %.loopexit589, %.loopexit587, %.loopexit585, %.loopexit583, %.loopexit581, %.loopexit579, %.loopexit577, %.loopexit575, %.loopexit573, %.loopexit571, %.loopexit, %374, %339, %307, %280, %247, %220, %178, %145, %112, %84, %53, %28, %335, %214, %276, %216, %20, %141, %22, %80, %24, %9, %17 +.loopexit570: ; preds = %.loopexit591, %.loopexit589, %.loopexit587, %.loopexit585, %.loopexit583, %.loopexit581, %.loopexit579, %.loopexit577, %.loopexit575, %.loopexit573, %.loopexit571, %.loopexit, %392, %357, %325, %298, %265, %238, %196, %163, %130, %102, %61, %28, %353, %232, %294, %234, %20, %159, %22, %98, %24, %9, %17 ret void } diff --git a/bench/oiio/optimized/tiffinput.cpp.ll b/bench/oiio/optimized/tiffinput.cpp.ll index 935f8d667c1..1e8b81f5441 100644 --- a/bench/oiio/optimized/tiffinput.cpp.ll +++ b/bench/oiio/optimized/tiffinput.cpp.ll @@ -13011,56 +13011,80 @@ for.cond2.preheader.lr.ph.split.us.i: ; preds = %for.cond2.preheader for.cond2.preheader.us.us.preheader.i: ; preds = %for.cond2.preheader.lr.ph.split.us.i %wide.trip.count55.i = zext nneg i32 %width to i64 + %18 = zext nneg i32 %width to i64 + %ident.check.not = icmp eq i32 %channels, 1 br label %for.cond2.preheader.us.us.i for.cond2.preheader.us.us.i: ; preds = %for.cond2.for.inc26_crit_edge.split.us.us.us.i, %for.cond2.preheader.us.us.preheader.i + %indvar = phi i64 [ %indvar.next, %for.cond2.for.inc26_crit_edge.split.us.us.us.i ], [ 0, %for.cond2.preheader.us.us.preheader.i ] %y.033.us.us.i = phi i32 [ %inc27.us.us.i, %for.cond2.for.inc26_crit_edge.split.us.us.us.i ], [ 0, %for.cond2.preheader.us.us.preheader.i ] %dst.addr.031.us.us.i = phi ptr [ %add.ptr31.us.us.i, %for.cond2.for.inc26_crit_edge.split.us.us.us.i ], [ %uncompressed_buf, %for.cond2.preheader.us.us.preheader.i ] - br label %for.body4.us.us.us.i + %19 = mul i64 %indvar, %18 + %20 = getelementptr i8, ptr %uncompressed_buf, i64 %19 + br label %for.body9.us.us.us.i.lver.check -for.body4.us.us.us.i: ; preds = %for.cond7.for.inc23_crit_edge.us.us.us.i, %for.cond2.preheader.us.us.i +for.body9.us.us.us.i.lver.check: ; preds = %for.cond7.for.inc23_crit_edge.us.us.us.i, %for.cond2.preheader.us.us.i %indvars.iv57.i = phi i64 [ %indvars.iv.next58.i, %for.cond7.for.inc23_crit_edge.us.us.us.i ], [ 0, %for.cond2.preheader.us.us.i ] - br label %for.body9.us.us.us.i + br i1 %ident.check.not, label %for.body9.us.us.us.i.ph, label %for.body9.us.us.us.i.lver.orig -for.body9.us.us.us.i: ; preds = %for.body9.us.us.us.i, %for.body4.us.us.us.i - %indvars.iv47.i = phi i64 [ %indvars.iv.next48.i, %for.body9.us.us.us.i ], [ 1, %for.body4.us.us.us.i ] - %18 = add nsw i64 %indvars.iv47.i, -1 - %19 = mul nuw nsw i64 %18, %17 - %20 = add nuw nsw i64 %19, %indvars.iv57.i - %arrayidx11.us.us.us.i = getelementptr inbounds i8, ptr %dst.addr.031.us.us.i, i64 %20 - %21 = load i8, ptr %arrayidx11.us.us.us.i, align 1 - %22 = mul nuw nsw i64 %indvars.iv47.i, %17 +for.body9.us.us.us.i.lver.orig: ; preds = %for.body9.us.us.us.i.lver.check, %for.body9.us.us.us.i.lver.orig + %indvars.iv47.i.lver.orig = phi i64 [ %indvars.iv.next48.i.lver.orig, %for.body9.us.us.us.i.lver.orig ], [ 1, %for.body9.us.us.us.i.lver.check ] + %21 = add nsw i64 %indvars.iv47.i.lver.orig, -1 + %22 = mul nuw nsw i64 %21, %17 %23 = add nuw nsw i64 %22, %indvars.iv57.i - %arrayidx15.us.us.us.i = getelementptr inbounds i8, ptr %dst.addr.031.us.us.i, i64 %23 - %24 = load i8, ptr %arrayidx15.us.us.us.i, align 1 - %add17.us.us.us.i = add i8 %24, %21 + %arrayidx11.us.us.us.i.lver.orig = getelementptr inbounds i8, ptr %dst.addr.031.us.us.i, i64 %23 + %24 = load i8, ptr %arrayidx11.us.us.us.i.lver.orig, align 1 + %25 = mul nuw nsw i64 %indvars.iv47.i.lver.orig, %17 + %26 = add nuw nsw i64 %25, %indvars.iv57.i + %arrayidx15.us.us.us.i.lver.orig = getelementptr inbounds i8, ptr %dst.addr.031.us.us.i, i64 %26 + %27 = load i8, ptr %arrayidx15.us.us.us.i.lver.orig, align 1 + %add17.us.us.us.i.lver.orig = add i8 %27, %24 + store i8 %add17.us.us.us.i.lver.orig, ptr %arrayidx15.us.us.us.i.lver.orig, align 1 + %indvars.iv.next48.i.lver.orig = add nuw nsw i64 %indvars.iv47.i.lver.orig, 1 + %exitcond56.not.i.lver.orig = icmp eq i64 %indvars.iv.next48.i.lver.orig, %wide.trip.count55.i + br i1 %exitcond56.not.i.lver.orig, label %for.cond7.for.inc23_crit_edge.us.us.us.i, label %for.body9.us.us.us.i.lver.orig, !llvm.loop !150 + +for.body9.us.us.us.i.ph: ; preds = %for.body9.us.us.us.i.lver.check + %scevgep = getelementptr i8, ptr %20, i64 %indvars.iv57.i + %load_initial = load i8, ptr %scevgep, align 1 + br label %for.body9.us.us.us.i + +for.body9.us.us.us.i: ; preds = %for.body9.us.us.us.i, %for.body9.us.us.us.i.ph + %store_forwarded = phi i8 [ %load_initial, %for.body9.us.us.us.i.ph ], [ %add17.us.us.us.i, %for.body9.us.us.us.i ] + %indvars.iv47.i = phi i64 [ 1, %for.body9.us.us.us.i.ph ], [ %indvars.iv.next48.i, %for.body9.us.us.us.i ] + %28 = mul nuw nsw i64 %indvars.iv47.i, %17 + %29 = add nuw nsw i64 %28, %indvars.iv57.i + %arrayidx15.us.us.us.i = getelementptr inbounds i8, ptr %dst.addr.031.us.us.i, i64 %29 + %30 = load i8, ptr %arrayidx15.us.us.us.i, align 1 + %add17.us.us.us.i = add i8 %30, %store_forwarded store i8 %add17.us.us.us.i, ptr %arrayidx15.us.us.us.i, align 1 %indvars.iv.next48.i = add nuw nsw i64 %indvars.iv47.i, 1 %exitcond56.not.i = icmp eq i64 %indvars.iv.next48.i, %wide.trip.count55.i br i1 %exitcond56.not.i, label %for.cond7.for.inc23_crit_edge.us.us.us.i, label %for.body9.us.us.us.i, !llvm.loop !150 -for.cond7.for.inc23_crit_edge.us.us.us.i: ; preds = %for.body9.us.us.us.i +for.cond7.for.inc23_crit_edge.us.us.us.i: ; preds = %for.body9.us.us.us.i.lver.orig, %for.body9.us.us.us.i %indvars.iv.next58.i = add nuw nsw i64 %indvars.iv57.i, 1 %exitcond61.not.i = icmp eq i64 %indvars.iv.next58.i, %17 - br i1 %exitcond61.not.i, label %for.cond2.for.inc26_crit_edge.split.us.us.us.i, label %for.body4.us.us.us.i, !llvm.loop !151 + br i1 %exitcond61.not.i, label %for.cond2.for.inc26_crit_edge.split.us.us.us.i, label %for.body9.us.us.us.i.lver.check, !llvm.loop !151 for.cond2.for.inc26_crit_edge.split.us.us.us.i: ; preds = %for.cond7.for.inc23_crit_edge.us.us.us.i %inc27.us.us.i = add nuw nsw i32 %y.033.us.us.i, 1 %add.ptr31.us.us.i = getelementptr i8, ptr %dst.addr.031.us.us.i, i64 %idx.ext.i %exitcond62.not.i = icmp eq i32 %inc27.us.us.i, %height + %indvar.next = add i64 %indvar, 1 br i1 %exitcond62.not.i, label %if.end34, label %for.cond2.preheader.us.us.i, !llvm.loop !152 land.lhs.true.i41: ; preds = %if.then23 %aggregate.i42 = getelementptr inbounds i8, ptr %this, i64 73 - %25 = load i8, ptr %aggregate.i42, align 1 - %cmp7.i43 = icmp eq i8 %25, 1 + %31 = load i8, ptr %aggregate.i42, align 1 + %cmp7.i43 = icmp eq i8 %31, 1 %vecsemantics.i45 = getelementptr inbounds i8, ptr %this, i64 74 - %26 = load i8, ptr %vecsemantics.i45, align 2 - %cmp12.i46 = icmp eq i8 %26, 0 + %32 = load i8, ptr %vecsemantics.i45, align 2 + %cmp12.i46 = icmp eq i8 %32, 0 %or.cond112 = select i1 %cmp7.i43, i1 %cmp12.i46, i1 false %arraylen.i48 = getelementptr inbounds i8, ptr %this, i64 76 - %27 = load i32, ptr %arraylen.i48, align 4 - %cmp14.i49 = icmp eq i32 %27, 0 + %33 = load i32, ptr %arraylen.i48, align 4 + %cmp14.i49 = icmp eq i32 %33, 0 %or.cond113 = select i1 %or.cond112, i1 %cmp14.i49, i1 false %cmp28.i51 = icmp sgt i32 %height, 0 %or.cond114 = and i1 %cmp28.i51, %or.cond113 @@ -13074,48 +13098,74 @@ for.cond2.preheader.lr.ph.i52: ; preds = %land.lhs.true.i41 for.cond2.preheader.lr.ph.split.us.i56: ; preds = %for.cond2.preheader.lr.ph.i52 %cmp824.i57 = icmp sgt i32 %width, 1 - %28 = zext nneg i32 %channels to i64 + %34 = zext nneg i32 %channels to i64 br i1 %cmp824.i57, label %for.cond2.preheader.us.us.preheader.i73, label %if.end34 for.cond2.preheader.us.us.preheader.i73: ; preds = %for.cond2.preheader.lr.ph.split.us.i56 %wide.trip.count55.i75 = zext nneg i32 %width to i64 + %35 = shl nuw i32 %width, 1 + %36 = zext i32 %35 to i64 + %ident.check128.not = icmp eq i32 %channels, 1 br label %for.cond2.preheader.us.us.i76 for.cond2.preheader.us.us.i76: ; preds = %for.cond2.for.inc26_crit_edge.split.us.us.us.i95, %for.cond2.preheader.us.us.preheader.i73 + %indvar130 = phi i64 [ %indvar.next131, %for.cond2.for.inc26_crit_edge.split.us.us.us.i95 ], [ 0, %for.cond2.preheader.us.us.preheader.i73 ] %y.033.us.us.i77 = phi i32 [ %inc27.us.us.i96, %for.cond2.for.inc26_crit_edge.split.us.us.us.i95 ], [ 0, %for.cond2.preheader.us.us.preheader.i73 ] %dst.addr.031.us.us.i78 = phi ptr [ %add.ptr31.us.us.i98, %for.cond2.for.inc26_crit_edge.split.us.us.us.i95 ], [ %uncompressed_buf, %for.cond2.preheader.us.us.preheader.i73 ] - br label %for.body4.us.us.us.i80 + %37 = mul i64 %indvar130, %36 + %38 = getelementptr i8, ptr %uncompressed_buf, i64 %37 + br label %for.body9.us.us.us.i84.lver.check -for.body4.us.us.us.i80: ; preds = %for.cond7.for.inc23_crit_edge.us.us.us.i92, %for.cond2.preheader.us.us.i76 +for.body9.us.us.us.i84.lver.check: ; preds = %for.cond7.for.inc23_crit_edge.us.us.us.i92, %for.cond2.preheader.us.us.i76 %indvars.iv57.i81 = phi i64 [ %indvars.iv.next58.i93, %for.cond7.for.inc23_crit_edge.us.us.us.i92 ], [ 0, %for.cond2.preheader.us.us.i76 ] + br i1 %ident.check128.not, label %for.body9.us.us.us.i84.ph, label %for.body9.us.us.us.i84.lver.orig + +for.body9.us.us.us.i84.lver.orig: ; preds = %for.body9.us.us.us.i84.lver.check, %for.body9.us.us.us.i84.lver.orig + %indvars.iv47.i85.lver.orig = phi i64 [ %indvars.iv.next48.i90.lver.orig, %for.body9.us.us.us.i84.lver.orig ], [ 1, %for.body9.us.us.us.i84.lver.check ] + %39 = add nsw i64 %indvars.iv47.i85.lver.orig, -1 + %40 = mul nuw nsw i64 %39, %34 + %41 = add nuw nsw i64 %40, %indvars.iv57.i81 + %arrayidx11.us.us.us.i86.lver.orig = getelementptr inbounds i16, ptr %dst.addr.031.us.us.i78, i64 %41 + %42 = load i16, ptr %arrayidx11.us.us.us.i86.lver.orig, align 2 + %43 = mul nuw nsw i64 %indvars.iv47.i85.lver.orig, %34 + %44 = add nuw nsw i64 %43, %indvars.iv57.i81 + %arrayidx15.us.us.us.i87.lver.orig = getelementptr inbounds i16, ptr %dst.addr.031.us.us.i78, i64 %44 + %45 = load i16, ptr %arrayidx15.us.us.us.i87.lver.orig, align 2 + %add17.us.us.us.i88.lver.orig = add i16 %45, %42 + store i16 %add17.us.us.us.i88.lver.orig, ptr %arrayidx15.us.us.us.i87.lver.orig, align 2 + %indvars.iv.next48.i90.lver.orig = add nuw nsw i64 %indvars.iv47.i85.lver.orig, 1 + %exitcond56.not.i91.lver.orig = icmp eq i64 %indvars.iv.next48.i90.lver.orig, %wide.trip.count55.i75 + br i1 %exitcond56.not.i91.lver.orig, label %for.cond7.for.inc23_crit_edge.us.us.us.i92, label %for.body9.us.us.us.i84.lver.orig, !llvm.loop !153 + +for.body9.us.us.us.i84.ph: ; preds = %for.body9.us.us.us.i84.lver.check + %46 = shl nuw nsw i64 %indvars.iv57.i81, 1 + %scevgep132 = getelementptr i8, ptr %38, i64 %46 + %load_initial133 = load i16, ptr %scevgep132, align 2 br label %for.body9.us.us.us.i84 -for.body9.us.us.us.i84: ; preds = %for.body9.us.us.us.i84, %for.body4.us.us.us.i80 - %indvars.iv47.i85 = phi i64 [ %indvars.iv.next48.i90, %for.body9.us.us.us.i84 ], [ 1, %for.body4.us.us.us.i80 ] - %29 = add nsw i64 %indvars.iv47.i85, -1 - %30 = mul nuw nsw i64 %29, %28 - %31 = add nuw nsw i64 %30, %indvars.iv57.i81 - %arrayidx11.us.us.us.i86 = getelementptr inbounds i16, ptr %dst.addr.031.us.us.i78, i64 %31 - %32 = load i16, ptr %arrayidx11.us.us.us.i86, align 2 - %33 = mul nuw nsw i64 %indvars.iv47.i85, %28 - %34 = add nuw nsw i64 %33, %indvars.iv57.i81 - %arrayidx15.us.us.us.i87 = getelementptr inbounds i16, ptr %dst.addr.031.us.us.i78, i64 %34 - %35 = load i16, ptr %arrayidx15.us.us.us.i87, align 2 - %add17.us.us.us.i88 = add i16 %35, %32 +for.body9.us.us.us.i84: ; preds = %for.body9.us.us.us.i84, %for.body9.us.us.us.i84.ph + %store_forwarded134 = phi i16 [ %load_initial133, %for.body9.us.us.us.i84.ph ], [ %add17.us.us.us.i88, %for.body9.us.us.us.i84 ] + %indvars.iv47.i85 = phi i64 [ 1, %for.body9.us.us.us.i84.ph ], [ %indvars.iv.next48.i90, %for.body9.us.us.us.i84 ] + %47 = mul nuw nsw i64 %indvars.iv47.i85, %34 + %48 = add nuw nsw i64 %47, %indvars.iv57.i81 + %arrayidx15.us.us.us.i87 = getelementptr inbounds i16, ptr %dst.addr.031.us.us.i78, i64 %48 + %49 = load i16, ptr %arrayidx15.us.us.us.i87, align 2 + %add17.us.us.us.i88 = add i16 %49, %store_forwarded134 store i16 %add17.us.us.us.i88, ptr %arrayidx15.us.us.us.i87, align 2 %indvars.iv.next48.i90 = add nuw nsw i64 %indvars.iv47.i85, 1 %exitcond56.not.i91 = icmp eq i64 %indvars.iv.next48.i90, %wide.trip.count55.i75 br i1 %exitcond56.not.i91, label %for.cond7.for.inc23_crit_edge.us.us.us.i92, label %for.body9.us.us.us.i84, !llvm.loop !153 -for.cond7.for.inc23_crit_edge.us.us.us.i92: ; preds = %for.body9.us.us.us.i84 +for.cond7.for.inc23_crit_edge.us.us.us.i92: ; preds = %for.body9.us.us.us.i84.lver.orig, %for.body9.us.us.us.i84 %indvars.iv.next58.i93 = add nuw nsw i64 %indvars.iv57.i81, 1 - %exitcond61.not.i94 = icmp eq i64 %indvars.iv.next58.i93, %28 - br i1 %exitcond61.not.i94, label %for.cond2.for.inc26_crit_edge.split.us.us.us.i95, label %for.body4.us.us.us.i80, !llvm.loop !154 + %exitcond61.not.i94 = icmp eq i64 %indvars.iv.next58.i93, %34 + br i1 %exitcond61.not.i94, label %for.cond2.for.inc26_crit_edge.split.us.us.us.i95, label %for.body9.us.us.us.i84.lver.check, !llvm.loop !154 for.cond2.for.inc26_crit_edge.split.us.us.us.i95: ; preds = %for.cond7.for.inc23_crit_edge.us.us.us.i92 %inc27.us.us.i96 = add nuw nsw i32 %y.033.us.us.i77, 1 %add.ptr31.us.us.i98 = getelementptr i16, ptr %dst.addr.031.us.us.i78, i64 %idx.ext.i55 %exitcond62.not.i99 = icmp eq i32 %inc27.us.us.i96, %height + %indvar.next131 = add i64 %indvar130, 1 br i1 %exitcond62.not.i99, label %if.end34, label %for.cond2.preheader.us.us.i76, !llvm.loop !155 if.end34: ; preds = %for.cond2.for.inc26_crit_edge.split.us.us.us.i95, %for.cond2.for.inc26_crit_edge.split.us.us.us.i, %for.cond2.preheader.lr.ph.split.us.i56, %for.cond2.preheader.lr.ph.split.us.i, %if.then23, %land.lhs.true.i30, %land.lhs.true.i41, %land.lhs.true, %for.cond2.preheader.lr.ph.i52, %for.cond2.preheader.lr.ph.i, %if.then, %if.then6, %if.end20, %if.then11 diff --git a/bench/openblas/optimized/dgtsv.c.ll b/bench/openblas/optimized/dgtsv.c.ll index a0f89b0bb76..7b5910d918b 100644 --- a/bench/openblas/optimized/dgtsv.c.ll +++ b/bench/openblas/optimized/dgtsv.c.ll @@ -208,7 +208,7 @@ define void @dgtsv_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea %143 = getelementptr inbounds double, ptr %11, i64 %142 %144 = load double, ptr %143, align 8, !tbaa !7 %145 = fcmp oeq double %144, 0.000000e+00 - br i1 %145, label %146, label %290 + br i1 %145, label %146, label %305 146: ; preds = %141 store i32 %17, ptr %7, align 4, !tbaa !3 @@ -224,392 +224,434 @@ define void @dgtsv_(ptr nocapture noundef readonly %0, ptr nocapture noundef rea %152 = add nsw i32 %17, -1 %153 = zext nneg i32 %152 to i64 %154 = zext i32 %151 to i64 + %ident.check.not = icmp eq i32 %13, 1 + %ident.check47.not = icmp eq i32 %13, 1 br label %155 155: ; preds = %.loopexit18, %148 - %156 = phi i64 [ 1, %148 ], [ %215, %.loopexit18 ] - %157 = getelementptr inbounds double, ptr %11, i64 %156 - %158 = load double, ptr %157, align 8, !tbaa !7 - %159 = fcmp oge double %158, 0.000000e+00 - %160 = fneg double %158 - %161 = select i1 %159, double %158, double %160 - %162 = getelementptr inbounds double, ptr %10, i64 %156 - %163 = load double, ptr %162, align 8, !tbaa !7 - %164 = fcmp oge double %163, 0.000000e+00 - %165 = fneg double %163 - %166 = select i1 %164, double %163, double %165 - %167 = fcmp ult double %161, %166 - br i1 %167, label %192, label %168 - -168: ; preds = %155 - %169 = fcmp une double %158, 0.000000e+00 - br i1 %169, label %170, label %190 - -170: ; preds = %168 - %171 = getelementptr inbounds double, ptr %12, i64 %156 - %172 = load double, ptr %171, align 8, !tbaa !7 - %173 = getelementptr double, ptr %3, i64 %156 + %indvar = phi i64 [ %indvar.next, %.loopexit18 ], [ 0, %148 ] + %156 = phi i64 [ %230, %.loopexit18 ], [ 1, %148 ] + %157 = shl nuw nsw i64 %indvar, 3 + %scevgep51 = getelementptr i8, ptr %5, i64 %157 + %158 = shl nuw nsw i64 %indvar, 3 + %scevgep = getelementptr i8, ptr %5, i64 %158 + %159 = getelementptr inbounds double, ptr %11, i64 %156 + %160 = load double, ptr %159, align 8, !tbaa !7 + %161 = fcmp oge double %160, 0.000000e+00 + %162 = fneg double %160 + %163 = select i1 %161, double %160, double %162 + %164 = getelementptr inbounds double, ptr %10, i64 %156 + %165 = load double, ptr %164, align 8, !tbaa !7 + %166 = fcmp oge double %165, 0.000000e+00 + %167 = fneg double %165 + %168 = select i1 %166, double %165, double %167 + %169 = fcmp ult double %163, %168 + br i1 %169, label %200, label %170 + +170: ; preds = %155 + %171 = fcmp une double %160, 0.000000e+00 + br i1 %171, label %172, label %198 + +172: ; preds = %170 + %173 = getelementptr inbounds double, ptr %12, i64 %156 %174 = load double, ptr %173, align 8, !tbaa !7 - %175 = fdiv double %165, %158 - %176 = tail call double @llvm.fmuladd.f64(double %175, double %172, double %174) - store double %176, ptr %173, align 8, !tbaa !7 - br i1 %149, label %.loopexit19, label %177 - -177: ; preds = %170 - %178 = getelementptr double, ptr %16, i64 %156 - %179 = getelementptr i8, ptr %178, i64 8 - br label %180 - -180: ; preds = %180, %177 - %181 = phi i64 [ 1, %177 ], [ %188, %180 ] + %175 = getelementptr double, ptr %3, i64 %156 + %176 = load double, ptr %175, align 8, !tbaa !7 + %177 = fdiv double %167, %160 + %178 = tail call double @llvm.fmuladd.f64(double %177, double %174, double %176) + store double %178, ptr %175, align 8, !tbaa !7 + br i1 %149, label %.loopexit19, label %.lver.check + +.lver.check: ; preds = %172 + %179 = getelementptr double, ptr %16, i64 %156 + %180 = getelementptr i8, ptr %179, i64 8 + br i1 %ident.check.not, label %.ph, label %.ph.lver.orig + +.ph.lver.orig: ; preds = %.lver.check, %.ph.lver.orig + %181 = phi i64 [ %188, %.ph.lver.orig ], [ 1, %.lver.check ] %182 = mul nsw i64 %181, %150 - %183 = getelementptr double, ptr %178, i64 %182 + %183 = getelementptr double, ptr %179, i64 %182 %184 = load double, ptr %183, align 8, !tbaa !7 - %185 = getelementptr double, ptr %179, i64 %182 + %185 = getelementptr double, ptr %180, i64 %182 %186 = load double, ptr %185, align 8, !tbaa !7 - %187 = tail call double @llvm.fmuladd.f64(double %175, double %184, double %186) + %187 = tail call double @llvm.fmuladd.f64(double %177, double %184, double %186) store double %187, ptr %185, align 8, !tbaa !7 %188 = add nuw nsw i64 %181, 1 %189 = icmp eq i64 %188, %154 - br i1 %189, label %.loopexit19, label %180, !llvm.loop !12 + br i1 %189, label %.loopexit19, label %.ph.lver.orig, !llvm.loop !12 -190: ; preds = %168 - %191 = trunc i64 %156 to i32 - store i32 %191, ptr %7, align 4, !tbaa !3 +.ph: ; preds = %.lver.check + %load_initial = load double, ptr %scevgep, align 8 + br label %190 + +190: ; preds = %190, %.ph + %store_forwarded = phi double [ %load_initial, %.ph ], [ %195, %190 ] + %191 = phi i64 [ 1, %.ph ], [ %196, %190 ] + %192 = mul nuw nsw i64 %191, %150 + %193 = getelementptr double, ptr %180, i64 %192 + %194 = load double, ptr %193, align 8, !tbaa !7 + %195 = tail call double @llvm.fmuladd.f64(double %177, double %store_forwarded, double %194) + store double %195, ptr %193, align 8, !tbaa !7 + %196 = add nuw nsw i64 %191, 1 + %197 = icmp eq i64 %196, %154 + br i1 %197, label %.loopexit19, label %190, !llvm.loop !12 + +198: ; preds = %170 + %199 = trunc i64 %156 to i32 + store i32 %199, ptr %7, align 4, !tbaa !3 br label %.loopexit -.loopexit19: ; preds = %180, %170 - store double 0.000000e+00, ptr %162, align 8, !tbaa !7 +.loopexit19: ; preds = %.ph.lver.orig, %190, %172 + store double 0.000000e+00, ptr %164, align 8, !tbaa !7 br label %.loopexit18 -192: ; preds = %155 - store double %163, ptr %157, align 8, !tbaa !7 - %193 = getelementptr double, ptr %3, i64 %156 - %194 = load double, ptr %193, align 8, !tbaa !7 - %195 = getelementptr inbounds double, ptr %12, i64 %156 - %196 = load double, ptr %195, align 8, !tbaa !7 - %197 = fdiv double %160, %163 - %198 = tail call double @llvm.fmuladd.f64(double %197, double %194, double %196) - store double %198, ptr %193, align 8, !tbaa !7 - %199 = getelementptr double, ptr %4, i64 %156 - %200 = load double, ptr %199, align 8, !tbaa !7 - store double %200, ptr %162, align 8, !tbaa !7 - %201 = fmul double %197, %200 - store double %201, ptr %199, align 8, !tbaa !7 - store double %194, ptr %195, align 8, !tbaa !7 - br i1 %149, label %.loopexit18, label %202 - -202: ; preds = %192 - %203 = getelementptr double, ptr %16, i64 %156 - %204 = getelementptr i8, ptr %203, i64 8 - br label %205 - -205: ; preds = %205, %202 - %206 = phi i64 [ 1, %202 ], [ %213, %205 ] - %207 = mul nsw i64 %206, %150 - %208 = getelementptr double, ptr %203, i64 %207 - %209 = load double, ptr %208, align 8, !tbaa !7 - %210 = getelementptr double, ptr %204, i64 %207 - %211 = load double, ptr %210, align 8, !tbaa !7 - store double %211, ptr %208, align 8, !tbaa !7 - %212 = tail call double @llvm.fmuladd.f64(double %197, double %211, double %209) - store double %212, ptr %210, align 8, !tbaa !7 - %213 = add nuw nsw i64 %206, 1 - %214 = icmp eq i64 %213, %154 - br i1 %214, label %.loopexit18, label %205, !llvm.loop !13 - -.loopexit18: ; preds = %205, %192, %.loopexit19 - %215 = add nuw nsw i64 %156, 1 - %216 = icmp eq i64 %215, %153 - br i1 %216, label %.loopexit20, label %155, !llvm.loop !14 +200: ; preds = %155 + store double %165, ptr %159, align 8, !tbaa !7 + %201 = getelementptr double, ptr %3, i64 %156 + %202 = load double, ptr %201, align 8, !tbaa !7 + %203 = getelementptr inbounds double, ptr %12, i64 %156 + %204 = load double, ptr %203, align 8, !tbaa !7 + %205 = fdiv double %162, %165 + %206 = tail call double @llvm.fmuladd.f64(double %205, double %202, double %204) + store double %206, ptr %201, align 8, !tbaa !7 + %207 = getelementptr double, ptr %4, i64 %156 + %208 = load double, ptr %207, align 8, !tbaa !7 + store double %208, ptr %164, align 8, !tbaa !7 + %209 = fmul double %205, %208 + store double %209, ptr %207, align 8, !tbaa !7 + store double %202, ptr %203, align 8, !tbaa !7 + br i1 %149, label %.loopexit18, label %.lver.check48 + +.lver.check48: ; preds = %200 + %210 = getelementptr double, ptr %16, i64 %156 + %211 = getelementptr i8, ptr %210, i64 8 + br i1 %ident.check47.not, label %.ph49, label %.ph49.lver.orig + +.ph49.lver.orig: ; preds = %.lver.check48, %.ph49.lver.orig + %212 = phi i64 [ %219, %.ph49.lver.orig ], [ 1, %.lver.check48 ] + %213 = mul nsw i64 %212, %150 + %214 = getelementptr double, ptr %210, i64 %213 + %215 = load double, ptr %214, align 8, !tbaa !7 + %216 = getelementptr double, ptr %211, i64 %213 + %217 = load double, ptr %216, align 8, !tbaa !7 + store double %217, ptr %214, align 8, !tbaa !7 + %218 = tail call double @llvm.fmuladd.f64(double %205, double %217, double %215) + store double %218, ptr %216, align 8, !tbaa !7 + %219 = add nuw nsw i64 %212, 1 + %220 = icmp eq i64 %219, %154 + br i1 %220, label %.loopexit18, label %.ph49.lver.orig, !llvm.loop !13 + +.ph49: ; preds = %.lver.check48 + %load_initial52 = load double, ptr %scevgep51, align 8 + br label %221 + +221: ; preds = %221, %.ph49 + %store_forwarded53 = phi double [ %load_initial52, %.ph49 ], [ %227, %221 ] + %222 = phi i64 [ 1, %.ph49 ], [ %228, %221 ] + %223 = mul nuw nsw i64 %222, %150 + %224 = getelementptr double, ptr %210, i64 %223 + %225 = getelementptr double, ptr %211, i64 %223 + %226 = load double, ptr %225, align 8, !tbaa !7 + store double %226, ptr %224, align 8, !tbaa !7 + %227 = tail call double @llvm.fmuladd.f64(double %205, double %226, double %store_forwarded53) + store double %227, ptr %225, align 8, !tbaa !7 + %228 = add nuw nsw i64 %222, 1 + %229 = icmp eq i64 %228, %154 + br i1 %229, label %.loopexit18, label %221, !llvm.loop !13 + +.loopexit18: ; preds = %.ph49.lver.orig, %221, %200, %.loopexit19 + %230 = add nuw nsw i64 %156, 1 + %231 = icmp eq i64 %230, %153 + %indvar.next = add i64 %indvar, 1 + br i1 %231, label %.loopexit20, label %155, !llvm.loop !14 .loopexit20: ; preds = %.loopexit18, %147 - %217 = icmp sgt i32 %17, 1 - br i1 %217, label %218, label %.loopexit16 - -218: ; preds = %.loopexit20 - %219 = add nsw i32 %17, -1 - %220 = zext nneg i32 %219 to i64 - %221 = getelementptr inbounds double, ptr %11, i64 %220 - %222 = load double, ptr %221, align 8, !tbaa !7 - %223 = fcmp oge double %222, 0.000000e+00 - %224 = fneg double %222 - %225 = select i1 %223, double %222, double %224 - %226 = getelementptr inbounds double, ptr %10, i64 %220 - %227 = load double, ptr %226, align 8, !tbaa !7 - %228 = fcmp oge double %227, 0.000000e+00 - %229 = fneg double %227 - %230 = select i1 %228, double %227, double %229 - %231 = fcmp ult double %225, %230 - br i1 %231, label %260, label %232 - -232: ; preds = %218 - %233 = fcmp une double %222, 0.000000e+00 - br i1 %233, label %234, label %259 - -234: ; preds = %232 - %235 = getelementptr inbounds double, ptr %12, i64 %220 - %236 = load double, ptr %235, align 8, !tbaa !7 - %237 = zext nneg i32 %17 to i64 - %238 = getelementptr inbounds double, ptr %11, i64 %237 - %239 = load double, ptr %238, align 8, !tbaa !7 - %240 = fdiv double %229, %222 - %241 = tail call double @llvm.fmuladd.f64(double %240, double %236, double %239) - store double %241, ptr %238, align 8, !tbaa !7 - %242 = icmp eq i32 %20, 0 - br i1 %242, label %.loopexit16, label %243 - -243: ; preds = %234 - %244 = sext i32 %13 to i64 - %245 = add nuw i32 %20, 1 - %246 = zext i32 %245 to i64 - %247 = getelementptr double, ptr %16, i64 %220 - %248 = getelementptr double, ptr %16, i64 %237 - br label %249 - -249: ; preds = %249, %243 - %250 = phi i64 [ 1, %243 ], [ %257, %249 ] - %251 = mul nsw i64 %250, %244 - %252 = getelementptr double, ptr %247, i64 %251 - %253 = load double, ptr %252, align 8, !tbaa !7 - %254 = getelementptr double, ptr %248, i64 %251 - %255 = load double, ptr %254, align 8, !tbaa !7 - %256 = tail call double @llvm.fmuladd.f64(double %240, double %253, double %255) - store double %256, ptr %254, align 8, !tbaa !7 - %257 = add nuw nsw i64 %250, 1 - %258 = icmp eq i64 %257, %246 - br i1 %258, label %.loopexit16, label %249, !llvm.loop !15 - -259: ; preds = %232 - store i32 %219, ptr %7, align 4, !tbaa !3 + %232 = icmp sgt i32 %17, 1 + br i1 %232, label %233, label %.loopexit16 + +233: ; preds = %.loopexit20 + %234 = add nsw i32 %17, -1 + %235 = zext nneg i32 %234 to i64 + %236 = getelementptr inbounds double, ptr %11, i64 %235 + %237 = load double, ptr %236, align 8, !tbaa !7 + %238 = fcmp oge double %237, 0.000000e+00 + %239 = fneg double %237 + %240 = select i1 %238, double %237, double %239 + %241 = getelementptr inbounds double, ptr %10, i64 %235 + %242 = load double, ptr %241, align 8, !tbaa !7 + %243 = fcmp oge double %242, 0.000000e+00 + %244 = fneg double %242 + %245 = select i1 %243, double %242, double %244 + %246 = fcmp ult double %240, %245 + br i1 %246, label %275, label %247 + +247: ; preds = %233 + %248 = fcmp une double %237, 0.000000e+00 + br i1 %248, label %249, label %274 + +249: ; preds = %247 + %250 = getelementptr inbounds double, ptr %12, i64 %235 + %251 = load double, ptr %250, align 8, !tbaa !7 + %252 = zext nneg i32 %17 to i64 + %253 = getelementptr inbounds double, ptr %11, i64 %252 + %254 = load double, ptr %253, align 8, !tbaa !7 + %255 = fdiv double %244, %237 + %256 = tail call double @llvm.fmuladd.f64(double %255, double %251, double %254) + store double %256, ptr %253, align 8, !tbaa !7 + %257 = icmp eq i32 %20, 0 + br i1 %257, label %.loopexit16, label %258 + +258: ; preds = %249 + %259 = sext i32 %13 to i64 + %260 = add nuw i32 %20, 1 + %261 = zext i32 %260 to i64 + %262 = getelementptr double, ptr %16, i64 %235 + %263 = getelementptr double, ptr %16, i64 %252 + br label %264 + +264: ; preds = %264, %258 + %265 = phi i64 [ 1, %258 ], [ %272, %264 ] + %266 = mul nsw i64 %265, %259 + %267 = getelementptr double, ptr %262, i64 %266 + %268 = load double, ptr %267, align 8, !tbaa !7 + %269 = getelementptr double, ptr %263, i64 %266 + %270 = load double, ptr %269, align 8, !tbaa !7 + %271 = tail call double @llvm.fmuladd.f64(double %255, double %268, double %270) + store double %271, ptr %269, align 8, !tbaa !7 + %272 = add nuw nsw i64 %265, 1 + %273 = icmp eq i64 %272, %261 + br i1 %273, label %.loopexit16, label %264, !llvm.loop !15 + +274: ; preds = %247 + store i32 %234, ptr %7, align 4, !tbaa !3 br label %.loopexit -260: ; preds = %218 - store double %227, ptr %221, align 8, !tbaa !7 - %261 = zext nneg i32 %17 to i64 - %262 = getelementptr inbounds double, ptr %11, i64 %261 - %263 = load double, ptr %262, align 8, !tbaa !7 - %264 = getelementptr inbounds double, ptr %12, i64 %220 - %265 = load double, ptr %264, align 8, !tbaa !7 - %266 = fdiv double %224, %227 - %267 = tail call double @llvm.fmuladd.f64(double %266, double %263, double %265) - store double %267, ptr %262, align 8, !tbaa !7 - store double %263, ptr %264, align 8, !tbaa !7 - %268 = icmp eq i32 %20, 0 - br i1 %268, label %.loopexit16, label %269 - -269: ; preds = %260 - %270 = sext i32 %13 to i64 - %271 = add nuw i32 %20, 1 - %272 = zext i32 %271 to i64 - %273 = getelementptr double, ptr %16, i64 %220 - %274 = getelementptr double, ptr %16, i64 %261 - br label %275 - -275: ; preds = %275, %269 - %276 = phi i64 [ 1, %269 ], [ %283, %275 ] - %277 = mul nsw i64 %276, %270 - %278 = getelementptr double, ptr %273, i64 %277 - %279 = load double, ptr %278, align 8, !tbaa !7 - %280 = getelementptr double, ptr %274, i64 %277 - %281 = load double, ptr %280, align 8, !tbaa !7 - store double %281, ptr %278, align 8, !tbaa !7 - %282 = tail call double @llvm.fmuladd.f64(double %266, double %281, double %279) - store double %282, ptr %280, align 8, !tbaa !7 - %283 = add nuw nsw i64 %276, 1 - %284 = icmp eq i64 %283, %272 - br i1 %284, label %.loopexit16, label %275, !llvm.loop !16 - -.loopexit16: ; preds = %249, %275, %260, %234, %.loopexit20 - %285 = zext nneg i32 %17 to i64 - %286 = getelementptr inbounds double, ptr %11, i64 %285 - %287 = load double, ptr %286, align 8, !tbaa !7 - %288 = fcmp oeq double %287, 0.000000e+00 - br i1 %288, label %289, label %290 - -289: ; preds = %.loopexit16 +275: ; preds = %233 + store double %242, ptr %236, align 8, !tbaa !7 + %276 = zext nneg i32 %17 to i64 + %277 = getelementptr inbounds double, ptr %11, i64 %276 + %278 = load double, ptr %277, align 8, !tbaa !7 + %279 = getelementptr inbounds double, ptr %12, i64 %235 + %280 = load double, ptr %279, align 8, !tbaa !7 + %281 = fdiv double %239, %242 + %282 = tail call double @llvm.fmuladd.f64(double %281, double %278, double %280) + store double %282, ptr %277, align 8, !tbaa !7 + store double %278, ptr %279, align 8, !tbaa !7 + %283 = icmp eq i32 %20, 0 + br i1 %283, label %.loopexit16, label %284 + +284: ; preds = %275 + %285 = sext i32 %13 to i64 + %286 = add nuw i32 %20, 1 + %287 = zext i32 %286 to i64 + %288 = getelementptr double, ptr %16, i64 %235 + %289 = getelementptr double, ptr %16, i64 %276 + br label %290 + +290: ; preds = %290, %284 + %291 = phi i64 [ 1, %284 ], [ %298, %290 ] + %292 = mul nsw i64 %291, %285 + %293 = getelementptr double, ptr %288, i64 %292 + %294 = load double, ptr %293, align 8, !tbaa !7 + %295 = getelementptr double, ptr %289, i64 %292 + %296 = load double, ptr %295, align 8, !tbaa !7 + store double %296, ptr %293, align 8, !tbaa !7 + %297 = tail call double @llvm.fmuladd.f64(double %281, double %296, double %294) + store double %297, ptr %295, align 8, !tbaa !7 + %298 = add nuw nsw i64 %291, 1 + %299 = icmp eq i64 %298, %287 + br i1 %299, label %.loopexit16, label %290, !llvm.loop !16 + +.loopexit16: ; preds = %264, %290, %275, %249, %.loopexit20 + %300 = zext nneg i32 %17 to i64 + %301 = getelementptr inbounds double, ptr %11, i64 %300 + %302 = load double, ptr %301, align 8, !tbaa !7 + %303 = fcmp oeq double %302, 0.000000e+00 + br i1 %303, label %304, label %305 + +304: ; preds = %.loopexit16 store i32 %17, ptr %7, align 4, !tbaa !3 br label %.loopexit -290: ; preds = %.loopexit16, %141 - %291 = icmp slt i32 %20, 3 - %292 = zext nneg i32 %17 to i64 - %293 = getelementptr inbounds double, ptr %11, i64 %292 - %294 = icmp sgt i32 %17, 1 - %295 = sext i32 %34 to i64 - %296 = sext i32 %13 to i64 - br i1 %291, label %297, label %363 - -297: ; preds = %290 - %298 = icmp sgt i32 %17, 2 - %299 = add nsw i32 %17, -1 - %300 = zext nneg i32 %299 to i64 - %301 = getelementptr inbounds double, ptr %12, i64 %300 - %302 = getelementptr inbounds double, ptr %11, i64 %300 - %303 = sext i32 %299 to i64 - %304 = tail call i32 @llvm.smax.i32(i32 %20, i32 1) - %305 = add nuw nsw i32 %304, 1 - %306 = zext nneg i32 %305 to i64 - %307 = getelementptr double, ptr %16, i64 %292 - %308 = getelementptr double, ptr %16, i64 %303 - br i1 %294, label %.split24.us, label %.thread12 - -.split24.us: ; preds = %297, %.thread12.us - %309 = phi i64 [ %353, %.thread12.us ], [ 1, %297 ] - %310 = load double, ptr %293, align 8, !tbaa !7 - %311 = mul nsw i64 %309, %296 - %312 = getelementptr double, ptr %307, i64 %311 - %313 = load double, ptr %312, align 8, !tbaa !7 - %314 = fdiv double %313, %310 - store double %314, ptr %312, align 8, !tbaa !7 - %315 = getelementptr double, ptr %308, i64 %311 - %316 = load double, ptr %315, align 8, !tbaa !7 - %317 = load double, ptr %301, align 8, !tbaa !7 - %318 = fneg double %317 - %319 = tail call double @llvm.fmuladd.f64(double %318, double %314, double %316) - %320 = load double, ptr %302, align 8, !tbaa !7 - %321 = fdiv double %319, %320 - store double %321, ptr %315, align 8, !tbaa !7 - br i1 %298, label %322, label %.thread12.us - -322: ; preds = %.split24.us - %323 = add nsw i64 %311, 1 - %324 = add nsw i64 %311, 2 - %325 = getelementptr double, ptr %16, i64 %311 - br label %326 - -326: ; preds = %326, %322 - %327 = phi i64 [ %295, %322 ], [ %351, %326 ] - %328 = getelementptr double, ptr %325, i64 %327 - %329 = load double, ptr %328, align 8, !tbaa !7 - %330 = getelementptr inbounds double, ptr %12, i64 %327 +305: ; preds = %.loopexit16, %141 + %306 = icmp slt i32 %20, 3 + %307 = zext nneg i32 %17 to i64 + %308 = getelementptr inbounds double, ptr %11, i64 %307 + %309 = icmp sgt i32 %17, 1 + %310 = sext i32 %34 to i64 + %311 = sext i32 %13 to i64 + br i1 %306, label %312, label %378 + +312: ; preds = %305 + %313 = icmp sgt i32 %17, 2 + %314 = add nsw i32 %17, -1 + %315 = zext nneg i32 %314 to i64 + %316 = getelementptr inbounds double, ptr %12, i64 %315 + %317 = getelementptr inbounds double, ptr %11, i64 %315 + %318 = sext i32 %314 to i64 + %319 = tail call i32 @llvm.smax.i32(i32 %20, i32 1) + %320 = add nuw nsw i32 %319, 1 + %321 = zext nneg i32 %320 to i64 + %322 = getelementptr double, ptr %16, i64 %307 + %323 = getelementptr double, ptr %16, i64 %318 + br i1 %309, label %.split24.us, label %.thread12 + +.split24.us: ; preds = %312, %.thread12.us + %324 = phi i64 [ %368, %.thread12.us ], [ 1, %312 ] + %325 = load double, ptr %308, align 8, !tbaa !7 + %326 = mul nsw i64 %324, %311 + %327 = getelementptr double, ptr %322, i64 %326 + %328 = load double, ptr %327, align 8, !tbaa !7 + %329 = fdiv double %328, %325 + store double %329, ptr %327, align 8, !tbaa !7 + %330 = getelementptr double, ptr %323, i64 %326 %331 = load double, ptr %330, align 8, !tbaa !7 - %332 = add i64 %323, %327 - %333 = shl i64 %332, 32 - %334 = ashr exact i64 %333, 32 - %335 = getelementptr inbounds double, ptr %16, i64 %334 - %336 = load double, ptr %335, align 8, !tbaa !7 - %337 = fneg double %331 - %338 = tail call double @llvm.fmuladd.f64(double %337, double %336, double %329) - %339 = getelementptr inbounds double, ptr %10, i64 %327 - %340 = load double, ptr %339, align 8, !tbaa !7 - %341 = add i64 %324, %327 - %342 = shl i64 %341, 32 - %343 = ashr exact i64 %342, 32 - %344 = getelementptr inbounds double, ptr %16, i64 %343 - %345 = load double, ptr %344, align 8, !tbaa !7 - %346 = fneg double %340 - %347 = tail call double @llvm.fmuladd.f64(double %346, double %345, double %338) - %348 = getelementptr inbounds double, ptr %11, i64 %327 - %349 = load double, ptr %348, align 8, !tbaa !7 - %350 = fdiv double %347, %349 - store double %350, ptr %328, align 8, !tbaa !7 - %351 = add nsw i64 %327, -1 - %352 = icmp sgt i64 %327, 1 - br i1 %352, label %326, label %.thread12.us, !llvm.loop !17 - -.thread12.us: ; preds = %326, %.split24.us - %353 = add nuw nsw i64 %309, 1 - %354 = icmp eq i64 %353, %306 - br i1 %354, label %.loopexit, label %.split24.us - -.thread12: ; preds = %297, %.thread12 - %355 = phi i64 [ %361, %.thread12 ], [ 1, %297 ] - %356 = load double, ptr %293, align 8, !tbaa !7 - %357 = mul nsw i64 %355, %296 - %358 = getelementptr double, ptr %307, i64 %357 - %359 = load double, ptr %358, align 8, !tbaa !7 - %360 = fdiv double %359, %356 - store double %360, ptr %358, align 8, !tbaa !7 - %361 = add nuw nsw i64 %355, 1 - %362 = icmp eq i64 %361, %306 - br i1 %362, label %.loopexit, label %.thread12 - -363: ; preds = %290 - %364 = add nsw i32 %17, -1 - %365 = zext nneg i32 %364 to i64 - %366 = getelementptr inbounds double, ptr %12, i64 %365 - %367 = getelementptr inbounds double, ptr %11, i64 %365 - %368 = icmp sgt i32 %17, 2 - %369 = sext i32 %364 to i64 - %370 = add nuw i32 %20, 1 - %371 = zext i32 %370 to i64 - %372 = getelementptr double, ptr %16, i64 %292 - %373 = getelementptr double, ptr %16, i64 %369 - br i1 %294, label %.split.us, label %.thread13 - -.split.us: ; preds = %363, %.thread13.us - %374 = phi i64 [ %418, %.thread13.us ], [ 1, %363 ] - %375 = load double, ptr %293, align 8, !tbaa !7 - %376 = mul nsw i64 %374, %296 - %377 = getelementptr double, ptr %372, i64 %376 - %378 = load double, ptr %377, align 8, !tbaa !7 - %379 = fdiv double %378, %375 - store double %379, ptr %377, align 8, !tbaa !7 - %380 = getelementptr double, ptr %373, i64 %376 - %381 = load double, ptr %380, align 8, !tbaa !7 - %382 = load double, ptr %366, align 8, !tbaa !7 - %383 = fneg double %382 - %384 = tail call double @llvm.fmuladd.f64(double %383, double %379, double %381) - %385 = load double, ptr %367, align 8, !tbaa !7 - %386 = fdiv double %384, %385 - store double %386, ptr %380, align 8, !tbaa !7 - br i1 %368, label %387, label %.thread13.us - -387: ; preds = %.split.us - %388 = add nsw i64 %376, 1 - %389 = add nsw i64 %376, 2 - %390 = getelementptr double, ptr %16, i64 %376 - br label %391 - -391: ; preds = %391, %387 - %392 = phi i64 [ %295, %387 ], [ %416, %391 ] - %393 = getelementptr double, ptr %390, i64 %392 - %394 = load double, ptr %393, align 8, !tbaa !7 - %395 = getelementptr inbounds double, ptr %12, i64 %392 + %332 = load double, ptr %316, align 8, !tbaa !7 + %333 = fneg double %332 + %334 = tail call double @llvm.fmuladd.f64(double %333, double %329, double %331) + %335 = load double, ptr %317, align 8, !tbaa !7 + %336 = fdiv double %334, %335 + store double %336, ptr %330, align 8, !tbaa !7 + br i1 %313, label %337, label %.thread12.us + +337: ; preds = %.split24.us + %338 = add nsw i64 %326, 1 + %339 = add nsw i64 %326, 2 + %340 = getelementptr double, ptr %16, i64 %326 + br label %341 + +341: ; preds = %341, %337 + %342 = phi i64 [ %310, %337 ], [ %366, %341 ] + %343 = getelementptr double, ptr %340, i64 %342 + %344 = load double, ptr %343, align 8, !tbaa !7 + %345 = getelementptr inbounds double, ptr %12, i64 %342 + %346 = load double, ptr %345, align 8, !tbaa !7 + %347 = add i64 %338, %342 + %348 = shl i64 %347, 32 + %349 = ashr exact i64 %348, 32 + %350 = getelementptr inbounds double, ptr %16, i64 %349 + %351 = load double, ptr %350, align 8, !tbaa !7 + %352 = fneg double %346 + %353 = tail call double @llvm.fmuladd.f64(double %352, double %351, double %344) + %354 = getelementptr inbounds double, ptr %10, i64 %342 + %355 = load double, ptr %354, align 8, !tbaa !7 + %356 = add i64 %339, %342 + %357 = shl i64 %356, 32 + %358 = ashr exact i64 %357, 32 + %359 = getelementptr inbounds double, ptr %16, i64 %358 + %360 = load double, ptr %359, align 8, !tbaa !7 + %361 = fneg double %355 + %362 = tail call double @llvm.fmuladd.f64(double %361, double %360, double %353) + %363 = getelementptr inbounds double, ptr %11, i64 %342 + %364 = load double, ptr %363, align 8, !tbaa !7 + %365 = fdiv double %362, %364 + store double %365, ptr %343, align 8, !tbaa !7 + %366 = add nsw i64 %342, -1 + %367 = icmp sgt i64 %342, 1 + br i1 %367, label %341, label %.thread12.us, !llvm.loop !17 + +.thread12.us: ; preds = %341, %.split24.us + %368 = add nuw nsw i64 %324, 1 + %369 = icmp eq i64 %368, %321 + br i1 %369, label %.loopexit, label %.split24.us + +.thread12: ; preds = %312, %.thread12 + %370 = phi i64 [ %376, %.thread12 ], [ 1, %312 ] + %371 = load double, ptr %308, align 8, !tbaa !7 + %372 = mul nsw i64 %370, %311 + %373 = getelementptr double, ptr %322, i64 %372 + %374 = load double, ptr %373, align 8, !tbaa !7 + %375 = fdiv double %374, %371 + store double %375, ptr %373, align 8, !tbaa !7 + %376 = add nuw nsw i64 %370, 1 + %377 = icmp eq i64 %376, %321 + br i1 %377, label %.loopexit, label %.thread12 + +378: ; preds = %305 + %379 = add nsw i32 %17, -1 + %380 = zext nneg i32 %379 to i64 + %381 = getelementptr inbounds double, ptr %12, i64 %380 + %382 = getelementptr inbounds double, ptr %11, i64 %380 + %383 = icmp sgt i32 %17, 2 + %384 = sext i32 %379 to i64 + %385 = add nuw i32 %20, 1 + %386 = zext i32 %385 to i64 + %387 = getelementptr double, ptr %16, i64 %307 + %388 = getelementptr double, ptr %16, i64 %384 + br i1 %309, label %.split.us, label %.thread13 + +.split.us: ; preds = %378, %.thread13.us + %389 = phi i64 [ %433, %.thread13.us ], [ 1, %378 ] + %390 = load double, ptr %308, align 8, !tbaa !7 + %391 = mul nsw i64 %389, %311 + %392 = getelementptr double, ptr %387, i64 %391 + %393 = load double, ptr %392, align 8, !tbaa !7 + %394 = fdiv double %393, %390 + store double %394, ptr %392, align 8, !tbaa !7 + %395 = getelementptr double, ptr %388, i64 %391 %396 = load double, ptr %395, align 8, !tbaa !7 - %397 = add i64 %388, %392 - %398 = shl i64 %397, 32 - %399 = ashr exact i64 %398, 32 - %400 = getelementptr inbounds double, ptr %16, i64 %399 - %401 = load double, ptr %400, align 8, !tbaa !7 - %402 = fneg double %396 - %403 = tail call double @llvm.fmuladd.f64(double %402, double %401, double %394) - %404 = getelementptr inbounds double, ptr %10, i64 %392 - %405 = load double, ptr %404, align 8, !tbaa !7 - %406 = add i64 %389, %392 - %407 = shl i64 %406, 32 - %408 = ashr exact i64 %407, 32 - %409 = getelementptr inbounds double, ptr %16, i64 %408 - %410 = load double, ptr %409, align 8, !tbaa !7 - %411 = fneg double %405 - %412 = tail call double @llvm.fmuladd.f64(double %411, double %410, double %403) - %413 = getelementptr inbounds double, ptr %11, i64 %392 - %414 = load double, ptr %413, align 8, !tbaa !7 - %415 = fdiv double %412, %414 - store double %415, ptr %393, align 8, !tbaa !7 - %416 = add nsw i64 %392, -1 - %417 = icmp sgt i64 %392, 1 - br i1 %417, label %391, label %.thread13.us, !llvm.loop !18 - -.thread13.us: ; preds = %391, %.split.us - %418 = add nuw nsw i64 %374, 1 - %419 = icmp eq i64 %418, %371 - br i1 %419, label %.loopexit, label %.split.us, !llvm.loop !19 - -.thread13: ; preds = %363, %.thread13 - %420 = phi i64 [ %426, %.thread13 ], [ 1, %363 ] - %421 = load double, ptr %293, align 8, !tbaa !7 - %422 = mul nsw i64 %420, %296 - %423 = getelementptr double, ptr %372, i64 %422 - %424 = load double, ptr %423, align 8, !tbaa !7 - %425 = fdiv double %424, %421 - store double %425, ptr %423, align 8, !tbaa !7 - %426 = add nuw nsw i64 %420, 1 - %427 = icmp eq i64 %426, %371 - br i1 %427, label %.loopexit, label %.thread13, !llvm.loop !19 - -.loopexit: ; preds = %.thread13, %.thread13.us, %.thread12, %.thread12.us, %289, %259, %190, %146, %123, %69, %30, %26 + %397 = load double, ptr %381, align 8, !tbaa !7 + %398 = fneg double %397 + %399 = tail call double @llvm.fmuladd.f64(double %398, double %394, double %396) + %400 = load double, ptr %382, align 8, !tbaa !7 + %401 = fdiv double %399, %400 + store double %401, ptr %395, align 8, !tbaa !7 + br i1 %383, label %402, label %.thread13.us + +402: ; preds = %.split.us + %403 = add nsw i64 %391, 1 + %404 = add nsw i64 %391, 2 + %405 = getelementptr double, ptr %16, i64 %391 + br label %406 + +406: ; preds = %406, %402 + %407 = phi i64 [ %310, %402 ], [ %431, %406 ] + %408 = getelementptr double, ptr %405, i64 %407 + %409 = load double, ptr %408, align 8, !tbaa !7 + %410 = getelementptr inbounds double, ptr %12, i64 %407 + %411 = load double, ptr %410, align 8, !tbaa !7 + %412 = add i64 %403, %407 + %413 = shl i64 %412, 32 + %414 = ashr exact i64 %413, 32 + %415 = getelementptr inbounds double, ptr %16, i64 %414 + %416 = load double, ptr %415, align 8, !tbaa !7 + %417 = fneg double %411 + %418 = tail call double @llvm.fmuladd.f64(double %417, double %416, double %409) + %419 = getelementptr inbounds double, ptr %10, i64 %407 + %420 = load double, ptr %419, align 8, !tbaa !7 + %421 = add i64 %404, %407 + %422 = shl i64 %421, 32 + %423 = ashr exact i64 %422, 32 + %424 = getelementptr inbounds double, ptr %16, i64 %423 + %425 = load double, ptr %424, align 8, !tbaa !7 + %426 = fneg double %420 + %427 = tail call double @llvm.fmuladd.f64(double %426, double %425, double %418) + %428 = getelementptr inbounds double, ptr %11, i64 %407 + %429 = load double, ptr %428, align 8, !tbaa !7 + %430 = fdiv double %427, %429 + store double %430, ptr %408, align 8, !tbaa !7 + %431 = add nsw i64 %407, -1 + %432 = icmp sgt i64 %407, 1 + br i1 %432, label %406, label %.thread13.us, !llvm.loop !18 + +.thread13.us: ; preds = %406, %.split.us + %433 = add nuw nsw i64 %389, 1 + %434 = icmp eq i64 %433, %386 + br i1 %434, label %.loopexit, label %.split.us, !llvm.loop !19 + +.thread13: ; preds = %378, %.thread13 + %435 = phi i64 [ %441, %.thread13 ], [ 1, %378 ] + %436 = load double, ptr %308, align 8, !tbaa !7 + %437 = mul nsw i64 %435, %311 + %438 = getelementptr double, ptr %387, i64 %437 + %439 = load double, ptr %438, align 8, !tbaa !7 + %440 = fdiv double %439, %436 + store double %440, ptr %438, align 8, !tbaa !7 + %441 = add nuw nsw i64 %435, 1 + %442 = icmp eq i64 %441, %386 + br i1 %442, label %.loopexit, label %.thread13, !llvm.loop !19 + +.loopexit: ; preds = %.thread13, %.thread13.us, %.thread12, %.thread12.us, %304, %274, %198, %146, %123, %69, %30, %26 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #5 ret void } diff --git a/bench/openblas/optimized/dhgeqz.c.ll b/bench/openblas/optimized/dhgeqz.c.ll index 199490b5469..e63d21890b3 100644 --- a/bench/openblas/optimized/dhgeqz.c.ll +++ b/bench/openblas/optimized/dhgeqz.c.ll @@ -230,10 +230,10 @@ define void @dhgeqz_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %153 = sub nsw i32 0, %152 store i32 %153, ptr %21, align 4, !tbaa !3 %154 = call i32 @xerbla_(ptr noundef nonnull @.str.5, ptr noundef nonnull %21, i32 noundef 6) #5 - br label %1946 + br label %2017 155: ; preds = %148 - br i1 %114, label %1946, label %156 + br i1 %114, label %2017, label %156 156: ; preds = %155 %157 = icmp eq i32 %110, 0 @@ -241,7 +241,7 @@ define void @dhgeqz_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef 158: ; preds = %156 store double 1.000000e+00, ptr %17, align 8, !tbaa !7 - br label %1946 + br label %2017 159: ; preds = %156 br i1 %97, label %160, label %161 @@ -489,2292 +489,2428 @@ define void @dhgeqz_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %327 = extractelement <2 x double> %321, i64 0 %328 = extractelement <2 x double> %321, i64 1 %329 = extractelement <2 x double> %197, i64 1 - br label %330 - -330: ; preds = %.loopexit76, %304 - %331 = phi i32 [ %305, %304 ], [ %1873, %.loopexit76 ] - %332 = phi i32 [ %306, %304 ], [ %1872, %.loopexit76 ] - %333 = phi double [ 0.000000e+00, %304 ], [ %1871, %.loopexit76 ] - %334 = phi i32 [ 0, %304 ], [ %1870, %.loopexit76 ] - %335 = phi i32 [ %199, %304 ], [ %1869, %.loopexit76 ] - %336 = phi i32 [ 1, %304 ], [ %1874, %.loopexit76 ] - %337 = load i32, ptr %4, align 4, !tbaa !3 - %338 = icmp eq i32 %335, %337 - br i1 %338, label %590, label %339 - -339: ; preds = %330 - %340 = add nsw i32 %335, -1 - %341 = mul nsw i32 %340, %60 - %342 = add nsw i32 %341, %335 - %343 = sext i32 %342 to i64 - %344 = getelementptr inbounds double, ptr %63, i64 %343 - %345 = load double, ptr %344, align 8, !tbaa !7 - %346 = fcmp oge double %345, 0.000000e+00 - %347 = fneg double %345 - %348 = select i1 %346, double %345, double %347 - %349 = fcmp ugt double %348, %187 - br i1 %349, label %351, label %350 - -350: ; preds = %339 - store double 0.000000e+00, ptr %344, align 8, !tbaa !7 - br label %590 - -351: ; preds = %339 - %352 = mul nsw i32 %335, %64 - %353 = add nsw i32 %352, %335 - %354 = sext i32 %353 to i64 - %355 = getelementptr inbounds double, ptr %67, i64 %354 - %356 = load double, ptr %355, align 8, !tbaa !7 - store double %356, ptr %24, align 8, !tbaa !7 - %357 = fcmp oge double %356, 0.000000e+00 - %358 = fneg double %356 - %359 = select i1 %357, double %356, double %358 - %360 = fcmp ugt double %359, %190 - br i1 %360, label %362, label %361 - -361: ; preds = %351 - store double 0.000000e+00, ptr %355, align 8, !tbaa !7 + %ident.check = icmp ne i32 %60, 1 + %ident.check256 = icmp ne i32 %64, 1 + %330 = or i1 %ident.check, %ident.check256 + %ident.check272 = icmp ne i32 %60, 1 + %ident.check273 = icmp ne i32 %64, 1 + %331 = or i1 %ident.check272, %ident.check273 + br label %332 + +332: ; preds = %.loopexit76, %304 + %333 = phi i32 [ %305, %304 ], [ %1944, %.loopexit76 ] + %334 = phi i32 [ %306, %304 ], [ %1943, %.loopexit76 ] + %335 = phi double [ 0.000000e+00, %304 ], [ %1942, %.loopexit76 ] + %336 = phi i32 [ 0, %304 ], [ %1941, %.loopexit76 ] + %337 = phi i32 [ %199, %304 ], [ %1940, %.loopexit76 ] + %338 = phi i32 [ 1, %304 ], [ %1945, %.loopexit76 ] + %339 = load i32, ptr %4, align 4, !tbaa !3 + %340 = icmp eq i32 %337, %339 + br i1 %340, label %592, label %341 + +341: ; preds = %332 + %342 = add nsw i32 %337, -1 + %343 = mul nsw i32 %342, %60 + %344 = add nsw i32 %343, %337 + %345 = sext i32 %344 to i64 + %346 = getelementptr inbounds double, ptr %63, i64 %345 + %347 = load double, ptr %346, align 8, !tbaa !7 + %348 = fcmp oge double %347, 0.000000e+00 + %349 = fneg double %347 + %350 = select i1 %348, double %347, double %349 + %351 = fcmp ugt double %350, %187 + br i1 %351, label %353, label %352 + +352: ; preds = %341 + store double 0.000000e+00, ptr %346, align 8, !tbaa !7 + br label %592 + +353: ; preds = %341 + %354 = mul nsw i32 %337, %64 + %355 = add nsw i32 %354, %337 + %356 = sext i32 %355 to i64 + %357 = getelementptr inbounds double, ptr %67, i64 %356 + %358 = load double, ptr %357, align 8, !tbaa !7 + store double %358, ptr %24, align 8, !tbaa !7 + %359 = fcmp oge double %358, 0.000000e+00 + %360 = fneg double %358 + %361 = select i1 %359, double %358, double %360 + %362 = fcmp ugt double %361, %190 + br i1 %362, label %364, label %363 + +363: ; preds = %353 + store double 0.000000e+00, ptr %357, align 8, !tbaa !7 br label %.loopexit80 -362: ; preds = %351 - store i32 %337, ptr %22, align 4, !tbaa !3 - %363 = icmp sgt i32 %335, %337 - br i1 %363, label %364, label %.loopexit82 - -364: ; preds = %362 - %365 = sext i32 %335 to i64 - %366 = sext i32 %337 to i64 - br label %367 - -367: ; preds = %560, %364 - %368 = phi i64 [ %365, %364 ], [ %369, %560 ] - %369 = add nsw i64 %368, -1 - %370 = icmp eq i64 %369, %366 - %.pre172 = trunc i64 %369 to i32 - br i1 %370, label %._crit_edge171, label %371 - -371: ; preds = %367 - %372 = add nsw i32 %.pre172, -1 - %373 = mul nsw i32 %372, %60 - %374 = sext i32 %373 to i64 - %375 = getelementptr double, ptr %63, i64 %369 - %376 = getelementptr double, ptr %375, i64 %374 - %377 = load double, ptr %376, align 8, !tbaa !7 - %378 = fcmp oge double %377, 0.000000e+00 - %379 = fneg double %377 - %380 = select i1 %378, double %377, double %379 - %381 = fcmp ugt double %380, %187 - br i1 %381, label %._crit_edge171, label %382 - -382: ; preds = %371 - store double 0.000000e+00, ptr %376, align 8, !tbaa !7 +364: ; preds = %353 + store i32 %339, ptr %22, align 4, !tbaa !3 + %365 = icmp sgt i32 %337, %339 + br i1 %365, label %366, label %.loopexit82 + +366: ; preds = %364 + %367 = sext i32 %337 to i64 + %368 = sext i32 %339 to i64 + br label %369 + +369: ; preds = %562, %366 + %370 = phi i64 [ %367, %366 ], [ %371, %562 ] + %371 = add nsw i64 %370, -1 + %372 = icmp eq i64 %371, %368 + %.pre172 = trunc i64 %371 to i32 + br i1 %372, label %._crit_edge171, label %373 + +373: ; preds = %369 + %374 = add nsw i32 %.pre172, -1 + %375 = mul nsw i32 %374, %60 + %376 = sext i32 %375 to i64 + %377 = getelementptr double, ptr %63, i64 %371 + %378 = getelementptr double, ptr %377, i64 %376 + %379 = load double, ptr %378, align 8, !tbaa !7 + %380 = fcmp oge double %379, 0.000000e+00 + %381 = fneg double %379 + %382 = select i1 %380, double %379, double %381 + %383 = fcmp ugt double %382, %187 + br i1 %383, label %._crit_edge171, label %384 + +384: ; preds = %373 + store double 0.000000e+00, ptr %378, align 8, !tbaa !7 br label %._crit_edge171 -._crit_edge171: ; preds = %367, %382, %371 - %383 = phi i1 [ false, %382 ], [ true, %371 ], [ false, %367 ] - %384 = phi i1 [ true, %382 ], [ false, %371 ], [ true, %367 ] - %385 = mul i32 %180, %.pre172 - %386 = sext i32 %385 to i64 - %387 = getelementptr inbounds double, ptr %67, i64 %386 - %388 = load double, ptr %387, align 8, !tbaa !7 - %389 = fcmp oge double %388, 0.000000e+00 - %390 = fneg double %388 - %391 = select i1 %389, double %388, double %390 - %392 = fcmp olt double %391, %190 - br i1 %392, label %393, label %559 - -393: ; preds = %._crit_edge171 - %394 = getelementptr inbounds double, ptr %67, i64 %386 - store double %388, ptr %24, align 8, !tbaa !7 - store double 0.000000e+00, ptr %394, align 8, !tbaa !7 - br i1 %384, label %.thread67, label %395 - -395: ; preds = %393 - %396 = add nsw i32 %.pre172, -1 - %397 = mul nsw i32 %396, %60 - %398 = add nsw i32 %397, %.pre172 - %399 = sext i32 %398 to i64 - %400 = getelementptr inbounds double, ptr %63, i64 %399 - %401 = load double, ptr %400, align 8, !tbaa !7 - %402 = mul nsw i32 %60, %.pre172 - %403 = add nsw i32 %402, %.pre172 - %404 = sext i32 %403 to i64 - %405 = getelementptr inbounds double, ptr %63, i64 %404 - %406 = load double, ptr %405, align 8, !tbaa !7 - %407 = insertelement <2 x double> poison, double %406, i64 0 - %408 = insertelement <2 x double> %407, double %401, i64 1 - %409 = fcmp oge <2 x double> %408, zeroinitializer - %410 = fneg <2 x double> %408 - %411 = select <2 x i1> %409, <2 x double> %408, <2 x double> %410 - %412 = extractelement <2 x double> %411, i64 0 - store double %412, ptr %26, align 8, !tbaa !7 - %413 = extractelement <2 x double> %411, i64 1 - %414 = fcmp oge double %413, %412 - %415 = select i1 %414, double %413, double %412 - store double %415, ptr %30, align 8, !tbaa !7 - %416 = fcmp olt double %415, 1.000000e+00 - %417 = fcmp une double %415, 0.000000e+00 - %418 = and i1 %416, %417 - br i1 %418, label %419, label %424 - -419: ; preds = %395 - %420 = insertelement <2 x double> poison, double %415, i64 0 - %421 = shufflevector <2 x double> %420, <2 x double> poison, <2 x i32> zeroinitializer - %422 = fdiv <2 x double> %411, %421 - %423 = extractelement <2 x double> %422, i64 0 - store double %423, ptr %26, align 8, !tbaa !7 - br label %424 - -424: ; preds = %419, %395 - %425 = phi <2 x double> [ %422, %419 ], [ %411, %395 ] - %426 = add nsw i32 %.pre172, 1 - %427 = add nsw i32 %426, %402 - %428 = sext i32 %427 to i64 - %429 = getelementptr inbounds double, ptr %63, i64 %428 - %430 = load double, ptr %429, align 8, !tbaa !7 - store double %430, ptr %24, align 8, !tbaa !7 - %431 = fcmp oge double %430, 0.000000e+00 - %432 = fneg double %430 - %433 = select i1 %431, double %430, double %432 - %434 = fmul double %307, %433 - %435 = extractelement <2 x double> %425, i64 1 - %436 = fmul double %435, %434 - %437 = extractelement <2 x double> %425, i64 0 - %438 = fmul double %308, %437 - %439 = fcmp ugt double %436, %438 - br i1 %439, label %441, label %.thread67 - -.thread67: ; preds = %393, %424 - %.ph66 = phi i32 [ 0, %393 ], [ 1, %424 ] - %440 = icmp sgt i32 %335, %.pre172 - br i1 %440, label %.preheader, label %.loopexit80 - -441: ; preds = %424 - %442 = icmp sgt i32 %335, %.pre172 - br i1 %442, label %443, label %.loopexit80 - -443: ; preds = %441 - %444 = add nsw i32 %332, -1 - %445 = add i32 %332, 2 - %446 = sext i32 %331 to i64 - %447 = sext i32 %444 to i64 - %448 = getelementptr double, ptr %63, i64 %446 - %449 = getelementptr double, ptr %67, i64 %446 - br label %499 - -.preheader: ; preds = %.thread67, %497 - %450 = phi i64 [ %459, %497 ], [ %369, %.thread67 ] - %451 = phi i32 [ 0, %497 ], [ %.ph66, %.thread67 ] - %452 = trunc i64 %450 to i32 - %453 = mul nsw i64 %450, %324 - %454 = mul nsw i32 %60, %452 - %455 = sext i32 %454 to i64 - %456 = getelementptr double, ptr %63, i64 %450 - %457 = getelementptr double, ptr %456, i64 %455 - %458 = load double, ptr %457, align 8, !tbaa !7 - store double %458, ptr %25, align 8, !tbaa !7 - %459 = add nsw i64 %450, 1 - %460 = trunc i64 %459 to i32 - %461 = getelementptr double, ptr %63, i64 %459 - %462 = getelementptr double, ptr %461, i64 %453 - call void @dlartg_(ptr noundef nonnull %25, ptr noundef %462, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %457) #5 - store double 0.000000e+00, ptr %462, align 8, !tbaa !7 - %463 = sub i32 %332, %452 - store i32 %463, ptr %23, align 4, !tbaa !3 - %464 = mul nsw i32 %60, %460 - %465 = sext i32 %464 to i64 - %466 = getelementptr double, ptr %456, i64 %465 - %467 = getelementptr double, ptr %461, i64 %465 - call void @drot_(ptr noundef nonnull %23, ptr noundef %466, ptr noundef nonnull %7, ptr noundef %467, ptr noundef nonnull %7, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - store i32 %463, ptr %23, align 4, !tbaa !3 - %468 = mul nsw i32 %64, %460 - %469 = sext i32 %468 to i64 - %470 = getelementptr double, ptr %67, i64 %450 - %471 = getelementptr double, ptr %470, i64 %469 - %472 = getelementptr double, ptr %67, i64 %459 - %473 = getelementptr double, ptr %472, i64 %469 - call void @drot_(ptr noundef nonnull %23, ptr noundef %471, ptr noundef nonnull %9, ptr noundef %473, ptr noundef nonnull %9, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br i1 %87, label %474, label %479 - -474: ; preds = %.preheader - %475 = mul nsw i64 %450, %325 - %476 = getelementptr double, ptr %301, i64 %475 - %477 = mul nsw i64 %459, %325 +._crit_edge171: ; preds = %369, %384, %373 + %385 = phi i1 [ false, %384 ], [ true, %373 ], [ false, %369 ] + %386 = phi i1 [ true, %384 ], [ false, %373 ], [ true, %369 ] + %387 = mul i32 %180, %.pre172 + %388 = sext i32 %387 to i64 + %389 = getelementptr inbounds double, ptr %67, i64 %388 + %390 = load double, ptr %389, align 8, !tbaa !7 + %391 = fcmp oge double %390, 0.000000e+00 + %392 = fneg double %390 + %393 = select i1 %391, double %390, double %392 + %394 = fcmp olt double %393, %190 + br i1 %394, label %395, label %561 + +395: ; preds = %._crit_edge171 + %396 = getelementptr inbounds double, ptr %67, i64 %388 + store double %390, ptr %24, align 8, !tbaa !7 + store double 0.000000e+00, ptr %396, align 8, !tbaa !7 + br i1 %386, label %.thread67, label %397 + +397: ; preds = %395 + %398 = add nsw i32 %.pre172, -1 + %399 = mul nsw i32 %398, %60 + %400 = add nsw i32 %399, %.pre172 + %401 = sext i32 %400 to i64 + %402 = getelementptr inbounds double, ptr %63, i64 %401 + %403 = load double, ptr %402, align 8, !tbaa !7 + %404 = mul nsw i32 %60, %.pre172 + %405 = add nsw i32 %404, %.pre172 + %406 = sext i32 %405 to i64 + %407 = getelementptr inbounds double, ptr %63, i64 %406 + %408 = load double, ptr %407, align 8, !tbaa !7 + %409 = insertelement <2 x double> poison, double %408, i64 0 + %410 = insertelement <2 x double> %409, double %403, i64 1 + %411 = fcmp oge <2 x double> %410, zeroinitializer + %412 = fneg <2 x double> %410 + %413 = select <2 x i1> %411, <2 x double> %410, <2 x double> %412 + %414 = extractelement <2 x double> %413, i64 0 + store double %414, ptr %26, align 8, !tbaa !7 + %415 = extractelement <2 x double> %413, i64 1 + %416 = fcmp oge double %415, %414 + %417 = select i1 %416, double %415, double %414 + store double %417, ptr %30, align 8, !tbaa !7 + %418 = fcmp olt double %417, 1.000000e+00 + %419 = fcmp une double %417, 0.000000e+00 + %420 = and i1 %418, %419 + br i1 %420, label %421, label %426 + +421: ; preds = %397 + %422 = insertelement <2 x double> poison, double %417, i64 0 + %423 = shufflevector <2 x double> %422, <2 x double> poison, <2 x i32> zeroinitializer + %424 = fdiv <2 x double> %413, %423 + %425 = extractelement <2 x double> %424, i64 0 + store double %425, ptr %26, align 8, !tbaa !7 + br label %426 + +426: ; preds = %421, %397 + %427 = phi <2 x double> [ %424, %421 ], [ %413, %397 ] + %428 = add nsw i32 %.pre172, 1 + %429 = add nsw i32 %428, %404 + %430 = sext i32 %429 to i64 + %431 = getelementptr inbounds double, ptr %63, i64 %430 + %432 = load double, ptr %431, align 8, !tbaa !7 + store double %432, ptr %24, align 8, !tbaa !7 + %433 = fcmp oge double %432, 0.000000e+00 + %434 = fneg double %432 + %435 = select i1 %433, double %432, double %434 + %436 = fmul double %307, %435 + %437 = extractelement <2 x double> %427, i64 1 + %438 = fmul double %437, %436 + %439 = extractelement <2 x double> %427, i64 0 + %440 = fmul double %308, %439 + %441 = fcmp ugt double %438, %440 + br i1 %441, label %443, label %.thread67 + +.thread67: ; preds = %395, %426 + %.ph66 = phi i32 [ 0, %395 ], [ 1, %426 ] + %442 = icmp sgt i32 %337, %.pre172 + br i1 %442, label %.preheader, label %.loopexit80 + +443: ; preds = %426 + %444 = icmp sgt i32 %337, %.pre172 + br i1 %444, label %445, label %.loopexit80 + +445: ; preds = %443 + %446 = add nsw i32 %334, -1 + %447 = add i32 %334, 2 + %448 = sext i32 %333 to i64 + %449 = sext i32 %446 to i64 + %450 = getelementptr double, ptr %63, i64 %448 + %451 = getelementptr double, ptr %67, i64 %448 + br label %501 + +.preheader: ; preds = %.thread67, %499 + %452 = phi i64 [ %461, %499 ], [ %371, %.thread67 ] + %453 = phi i32 [ 0, %499 ], [ %.ph66, %.thread67 ] + %454 = trunc i64 %452 to i32 + %455 = mul nsw i64 %452, %324 + %456 = mul nsw i32 %60, %454 + %457 = sext i32 %456 to i64 + %458 = getelementptr double, ptr %63, i64 %452 + %459 = getelementptr double, ptr %458, i64 %457 + %460 = load double, ptr %459, align 8, !tbaa !7 + store double %460, ptr %25, align 8, !tbaa !7 + %461 = add nsw i64 %452, 1 + %462 = trunc i64 %461 to i32 + %463 = getelementptr double, ptr %63, i64 %461 + %464 = getelementptr double, ptr %463, i64 %455 + call void @dlartg_(ptr noundef nonnull %25, ptr noundef %464, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %459) #5 + store double 0.000000e+00, ptr %464, align 8, !tbaa !7 + %465 = sub i32 %334, %454 + store i32 %465, ptr %23, align 4, !tbaa !3 + %466 = mul nsw i32 %60, %462 + %467 = sext i32 %466 to i64 + %468 = getelementptr double, ptr %458, i64 %467 + %469 = getelementptr double, ptr %463, i64 %467 + call void @drot_(ptr noundef nonnull %23, ptr noundef %468, ptr noundef nonnull %7, ptr noundef %469, ptr noundef nonnull %7, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + store i32 %465, ptr %23, align 4, !tbaa !3 + %470 = mul nsw i32 %64, %462 + %471 = sext i32 %470 to i64 + %472 = getelementptr double, ptr %67, i64 %452 + %473 = getelementptr double, ptr %472, i64 %471 + %474 = getelementptr double, ptr %67, i64 %461 + %475 = getelementptr double, ptr %474, i64 %471 + call void @drot_(ptr noundef nonnull %23, ptr noundef %473, ptr noundef nonnull %9, ptr noundef %475, ptr noundef nonnull %9, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br i1 %87, label %476, label %481 + +476: ; preds = %.preheader + %477 = mul nsw i64 %452, %325 %478 = getelementptr double, ptr %301, i64 %477 - call void @drot_(ptr noundef nonnull %3, ptr noundef %476, ptr noundef nonnull @c__1, ptr noundef %478, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br label %479 - -479: ; preds = %474, %.preheader - %480 = icmp eq i32 %451, 0 - br i1 %480, label %489, label %481 - -481: ; preds = %479 - %482 = load double, ptr %27, align 8, !tbaa !7 - %483 = add nsw i32 %452, -1 - %484 = mul nsw i32 %483, %60 - %485 = sext i32 %484 to i64 - %486 = getelementptr double, ptr %456, i64 %485 - %487 = load double, ptr %486, align 8, !tbaa !7 - %488 = fmul double %482, %487 - store double %488, ptr %486, align 8, !tbaa !7 - br label %489 - -489: ; preds = %481, %479 - %490 = load double, ptr %473, align 8, !tbaa !7 - store double %490, ptr %24, align 8, !tbaa !7 - %491 = fcmp oge double %490, 0.000000e+00 - %492 = fneg double %490 - %493 = select i1 %491, double %490, double %492 - %494 = fcmp ult double %493, %190 - br i1 %494, label %497, label %495 - -495: ; preds = %489 - %496 = icmp sgt i32 %335, %460 - br i1 %496, label %.loopexit220, label %590 - -497: ; preds = %489 - store double 0.000000e+00, ptr %473, align 8, !tbaa !7 - %498 = icmp eq i64 %459, %365 - br i1 %498, label %.loopexit80, label %.preheader, !llvm.loop !14 - -499: ; preds = %557, %443 - %500 = phi i64 [ %369, %443 ], [ %502, %557 ] - %501 = trunc i64 %500 to i32 - %502 = add nsw i64 %500, 1 + %479 = mul nsw i64 %461, %325 + %480 = getelementptr double, ptr %301, i64 %479 + call void @drot_(ptr noundef nonnull %3, ptr noundef %478, ptr noundef nonnull @c__1, ptr noundef %480, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br label %481 + +481: ; preds = %476, %.preheader + %482 = icmp eq i32 %453, 0 + br i1 %482, label %491, label %483 + +483: ; preds = %481 + %484 = load double, ptr %27, align 8, !tbaa !7 + %485 = add nsw i32 %454, -1 + %486 = mul nsw i32 %485, %60 + %487 = sext i32 %486 to i64 + %488 = getelementptr double, ptr %458, i64 %487 + %489 = load double, ptr %488, align 8, !tbaa !7 + %490 = fmul double %484, %489 + store double %490, ptr %488, align 8, !tbaa !7 + br label %491 + +491: ; preds = %483, %481 + %492 = load double, ptr %475, align 8, !tbaa !7 + store double %492, ptr %24, align 8, !tbaa !7 + %493 = fcmp oge double %492, 0.000000e+00 + %494 = fneg double %492 + %495 = select i1 %493, double %492, double %494 + %496 = fcmp ult double %495, %190 + br i1 %496, label %499, label %497 + +497: ; preds = %491 + %498 = icmp sgt i32 %337, %462 + br i1 %498, label %.loopexit220, label %592 + +499: ; preds = %491 + store double 0.000000e+00, ptr %475, align 8, !tbaa !7 + %500 = icmp eq i64 %461, %367 + br i1 %500, label %.loopexit80, label %.preheader, !llvm.loop !14 + +501: ; preds = %559, %445 + %502 = phi i64 [ %371, %445 ], [ %504, %559 ] %503 = trunc i64 %502 to i32 - %504 = mul nsw i32 %64, %503 - %505 = sext i32 %504 to i64 - %506 = getelementptr double, ptr %67, i64 %500 - %507 = getelementptr double, ptr %506, i64 %505 - %508 = load double, ptr %507, align 8, !tbaa !7 - store double %508, ptr %25, align 8, !tbaa !7 - %509 = getelementptr double, ptr %67, i64 %502 - %510 = getelementptr double, ptr %509, i64 %505 - call void @dlartg_(ptr noundef nonnull %25, ptr noundef %510, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %507) #5 - store double 0.000000e+00, ptr %510, align 8, !tbaa !7 - %511 = icmp slt i64 %500, %447 - br i1 %511, label %512, label %523 - -512: ; preds = %499 - %513 = xor i32 %501, -1 - %514 = add i32 %332, %513 - store i32 %514, ptr %23, align 4, !tbaa !3 - %515 = add nsw i64 %500, 2 - %516 = add nsw i32 %501, 2 - %517 = mul nsw i64 %515, %323 - %518 = mul nsw i32 %516, %64 - %519 = sext i32 %518 to i64 - %520 = getelementptr double, ptr %506, i64 %519 - %521 = getelementptr double, ptr %67, i64 %517 - %522 = getelementptr double, ptr %521, i64 %502 - call void @drot_(ptr noundef nonnull %23, ptr noundef %520, ptr noundef nonnull %9, ptr noundef %522, ptr noundef nonnull %9, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br label %523 - -523: ; preds = %512, %499 - %524 = sub i32 %445, %501 - store i32 %524, ptr %23, align 4, !tbaa !3 - %525 = add nsw i64 %500, -1 - %526 = add nsw i32 %501, -1 - %527 = mul nsw i64 %525, %324 - %528 = mul nsw i32 %526, %60 - %529 = sext i32 %528 to i64 - %530 = getelementptr double, ptr %63, i64 %500 - %531 = getelementptr double, ptr %530, i64 %529 - %532 = getelementptr double, ptr %63, i64 %527 - %533 = getelementptr double, ptr %532, i64 %502 - call void @drot_(ptr noundef nonnull %23, ptr noundef %531, ptr noundef nonnull %7, ptr noundef %533, ptr noundef nonnull %7, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br i1 %87, label %534, label %539 - -534: ; preds = %523 - %535 = mul nsw i64 %500, %325 - %536 = getelementptr double, ptr %301, i64 %535 + %504 = add nsw i64 %502, 1 + %505 = trunc i64 %504 to i32 + %506 = mul nsw i32 %64, %505 + %507 = sext i32 %506 to i64 + %508 = getelementptr double, ptr %67, i64 %502 + %509 = getelementptr double, ptr %508, i64 %507 + %510 = load double, ptr %509, align 8, !tbaa !7 + store double %510, ptr %25, align 8, !tbaa !7 + %511 = getelementptr double, ptr %67, i64 %504 + %512 = getelementptr double, ptr %511, i64 %507 + call void @dlartg_(ptr noundef nonnull %25, ptr noundef %512, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %509) #5 + store double 0.000000e+00, ptr %512, align 8, !tbaa !7 + %513 = icmp slt i64 %502, %449 + br i1 %513, label %514, label %525 + +514: ; preds = %501 + %515 = xor i32 %503, -1 + %516 = add i32 %334, %515 + store i32 %516, ptr %23, align 4, !tbaa !3 + %517 = add nsw i64 %502, 2 + %518 = add nsw i32 %503, 2 + %519 = mul nsw i64 %517, %323 + %520 = mul nsw i32 %518, %64 + %521 = sext i32 %520 to i64 + %522 = getelementptr double, ptr %508, i64 %521 + %523 = getelementptr double, ptr %67, i64 %519 + %524 = getelementptr double, ptr %523, i64 %504 + call void @drot_(ptr noundef nonnull %23, ptr noundef %522, ptr noundef nonnull %9, ptr noundef %524, ptr noundef nonnull %9, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br label %525 + +525: ; preds = %514, %501 + %526 = sub i32 %447, %503 + store i32 %526, ptr %23, align 4, !tbaa !3 + %527 = add nsw i64 %502, -1 + %528 = add nsw i32 %503, -1 + %529 = mul nsw i64 %527, %324 + %530 = mul nsw i32 %528, %60 + %531 = sext i32 %530 to i64 + %532 = getelementptr double, ptr %63, i64 %502 + %533 = getelementptr double, ptr %532, i64 %531 + %534 = getelementptr double, ptr %63, i64 %529 + %535 = getelementptr double, ptr %534, i64 %504 + call void @drot_(ptr noundef nonnull %23, ptr noundef %533, ptr noundef nonnull %7, ptr noundef %535, ptr noundef nonnull %7, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br i1 %87, label %536, label %541 + +536: ; preds = %525 %537 = mul nsw i64 %502, %325 %538 = getelementptr double, ptr %301, i64 %537 - call void @drot_(ptr noundef nonnull %3, ptr noundef %536, ptr noundef nonnull @c__1, ptr noundef %538, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br label %539 - -539: ; preds = %534, %523 - %540 = mul nsw i64 %500, %324 - %541 = getelementptr double, ptr %63, i64 %502 - %542 = getelementptr double, ptr %541, i64 %540 - %543 = load double, ptr %542, align 8, !tbaa !7 - store double %543, ptr %25, align 8, !tbaa !7 - call void @dlartg_(ptr noundef nonnull %25, ptr noundef %533, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %542) #5 - store double 0.000000e+00, ptr %533, align 8, !tbaa !7 - %544 = sub i32 %503, %331 - store i32 %544, ptr %23, align 4, !tbaa !3 - %545 = getelementptr double, ptr %448, i64 %540 - %546 = getelementptr double, ptr %448, i64 %527 - call void @drot_(ptr noundef nonnull %23, ptr noundef %545, ptr noundef nonnull @c__1, ptr noundef %546, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - %547 = sub i32 %501, %331 - store i32 %547, ptr %23, align 4, !tbaa !3 - %548 = mul nsw i64 %500, %323 - %549 = getelementptr double, ptr %449, i64 %548 - %550 = mul nsw i64 %525, %323 - %551 = getelementptr double, ptr %449, i64 %550 - call void @drot_(ptr noundef nonnull %23, ptr noundef %549, ptr noundef nonnull @c__1, ptr noundef %551, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br i1 %99, label %552, label %557 - -552: ; preds = %539 - %553 = mul nsw i64 %500, %322 - %554 = getelementptr double, ptr %302, i64 %553 - %555 = mul nsw i64 %525, %322 + %539 = mul nsw i64 %504, %325 + %540 = getelementptr double, ptr %301, i64 %539 + call void @drot_(ptr noundef nonnull %3, ptr noundef %538, ptr noundef nonnull @c__1, ptr noundef %540, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br label %541 + +541: ; preds = %536, %525 + %542 = mul nsw i64 %502, %324 + %543 = getelementptr double, ptr %63, i64 %504 + %544 = getelementptr double, ptr %543, i64 %542 + %545 = load double, ptr %544, align 8, !tbaa !7 + store double %545, ptr %25, align 8, !tbaa !7 + call void @dlartg_(ptr noundef nonnull %25, ptr noundef %535, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %544) #5 + store double 0.000000e+00, ptr %535, align 8, !tbaa !7 + %546 = sub i32 %505, %333 + store i32 %546, ptr %23, align 4, !tbaa !3 + %547 = getelementptr double, ptr %450, i64 %542 + %548 = getelementptr double, ptr %450, i64 %529 + call void @drot_(ptr noundef nonnull %23, ptr noundef %547, ptr noundef nonnull @c__1, ptr noundef %548, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + %549 = sub i32 %503, %333 + store i32 %549, ptr %23, align 4, !tbaa !3 + %550 = mul nsw i64 %502, %323 + %551 = getelementptr double, ptr %451, i64 %550 + %552 = mul nsw i64 %527, %323 + %553 = getelementptr double, ptr %451, i64 %552 + call void @drot_(ptr noundef nonnull %23, ptr noundef %551, ptr noundef nonnull @c__1, ptr noundef %553, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br i1 %99, label %554, label %559 + +554: ; preds = %541 + %555 = mul nsw i64 %502, %322 %556 = getelementptr double, ptr %302, i64 %555 - call void @drot_(ptr noundef nonnull %3, ptr noundef %554, ptr noundef nonnull @c__1, ptr noundef %556, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br label %557 + %557 = mul nsw i64 %527, %322 + %558 = getelementptr double, ptr %302, i64 %557 + call void @drot_(ptr noundef nonnull %3, ptr noundef %556, ptr noundef nonnull @c__1, ptr noundef %558, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br label %559 -557: ; preds = %552, %539 - %558 = icmp eq i64 %502, %365 - br i1 %558, label %.loopexit80, label %499, !llvm.loop !15 +559: ; preds = %554, %541 + %560 = icmp eq i64 %504, %367 + br i1 %560, label %.loopexit80, label %501, !llvm.loop !15 -559: ; preds = %._crit_edge171 - br i1 %383, label %560, label %.loopexit220 +561: ; preds = %._crit_edge171 + br i1 %385, label %562, label %.loopexit220 -560: ; preds = %559 - %561 = icmp sgt i64 %369, %366 - br i1 %561, label %367, label %.loopexit82, !llvm.loop !16 +562: ; preds = %561 + %563 = icmp sgt i64 %371, %368 + br i1 %563, label %369, label %.loopexit82, !llvm.loop !16 -.loopexit82: ; preds = %362, %560 - %562 = load i32, ptr %3, align 4, !tbaa !3 - %563 = add nsw i32 %562, 1 +.loopexit82: ; preds = %364, %562 + %564 = load i32, ptr %3, align 4, !tbaa !3 + %565 = add nsw i32 %564, 1 br label %.loopexit73 -.loopexit80: ; preds = %557, %497, %.thread67, %441, %361 - %564 = mul nsw i32 %335, %60 - %565 = add nsw i32 %564, %335 - %566 = sext i32 %565 to i64 - %567 = getelementptr inbounds double, ptr %63, i64 %566 - %568 = load double, ptr %567, align 8, !tbaa !7 - store double %568, ptr %25, align 8, !tbaa !7 - call void @dlartg_(ptr noundef nonnull %25, ptr noundef nonnull %344, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %567) #5 - store double 0.000000e+00, ptr %344, align 8, !tbaa !7 - %569 = sub nsw i32 %335, %331 - store i32 %569, ptr %22, align 4, !tbaa !3 - %570 = add nsw i32 %564, %331 - %571 = sext i32 %570 to i64 - %572 = getelementptr inbounds double, ptr %63, i64 %571 - %573 = add nsw i32 %341, %331 - %574 = sext i32 %573 to i64 - %575 = getelementptr inbounds double, ptr %63, i64 %574 - call void @drot_(ptr noundef nonnull %22, ptr noundef %572, ptr noundef nonnull @c__1, ptr noundef %575, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - store i32 %569, ptr %22, align 4, !tbaa !3 - %576 = add nsw i32 %352, %331 - %577 = sext i32 %576 to i64 - %578 = getelementptr inbounds double, ptr %67, i64 %577 - %579 = mul nsw i32 %340, %64 - %580 = add nsw i32 %579, %331 - %581 = sext i32 %580 to i64 - %582 = getelementptr inbounds double, ptr %67, i64 %581 - call void @drot_(ptr noundef nonnull %22, ptr noundef %578, ptr noundef nonnull @c__1, ptr noundef %582, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br i1 %99, label %583, label %590 - -583: ; preds = %.loopexit80 - %584 = mul nsw i32 %335, %75 - %585 = sext i32 %584 to i64 - %586 = getelementptr double, ptr %302, i64 %585 - %587 = mul nsw i32 %340, %75 - %588 = sext i32 %587 to i64 - %589 = getelementptr double, ptr %302, i64 %588 - call void @drot_(ptr noundef nonnull %3, ptr noundef %586, ptr noundef nonnull @c__1, ptr noundef %589, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 - br label %590 - -590: ; preds = %583, %.loopexit80, %495, %350, %330 - %591 = mul nsw i32 %335, %64 - %592 = add nsw i32 %591, %335 - %593 = sext i32 %592 to i64 - %594 = getelementptr inbounds double, ptr %67, i64 %593 - %595 = load double, ptr %594, align 8, !tbaa !7 - %596 = fcmp olt double %595, 0.000000e+00 - br i1 %596, label %597, label %.loopexit74 - -597: ; preds = %590 - br i1 %80, label %598, label %619 - -598: ; preds = %597 - store i32 %335, ptr %22, align 4, !tbaa !3 - %599 = icmp sgt i32 %331, %335 - br i1 %599, label %.loopexit75, label %600 - -600: ; preds = %598 - %601 = mul nsw i32 %335, %60 - %602 = sext i32 %331 to i64 - %603 = sext i32 %601 to i64 - %604 = sext i32 %591 to i64 - %605 = add i32 %335, 1 - %606 = getelementptr double, ptr %63, i64 %603 - %607 = getelementptr double, ptr %67, i64 %604 - br label %608 - -608: ; preds = %608, %600 - %609 = phi i64 [ %602, %600 ], [ %616, %608 ] - %610 = getelementptr double, ptr %606, i64 %609 - %611 = load double, ptr %610, align 8, !tbaa !7 - %612 = fneg double %611 - store double %612, ptr %610, align 8, !tbaa !7 - %613 = getelementptr double, ptr %607, i64 %609 - %614 = load double, ptr %613, align 8, !tbaa !7 - %615 = fneg double %614 - store double %615, ptr %613, align 8, !tbaa !7 - %616 = add nsw i64 %609, 1 - %617 = trunc i64 %616 to i32 - %618 = icmp eq i32 %605, %617 - br i1 %618, label %.loopexit75, label %608, !llvm.loop !17 - -619: ; preds = %597 - %620 = mul i32 %335, %174 - %621 = sext i32 %620 to i64 - %622 = getelementptr inbounds double, ptr %63, i64 %621 - %623 = load double, ptr %622, align 8, !tbaa !7 - %624 = fneg double %623 - store double %624, ptr %622, align 8, !tbaa !7 - %625 = load double, ptr %594, align 8, !tbaa !7 +.loopexit80: ; preds = %559, %499, %.thread67, %443, %363 + %566 = mul nsw i32 %337, %60 + %567 = add nsw i32 %566, %337 + %568 = sext i32 %567 to i64 + %569 = getelementptr inbounds double, ptr %63, i64 %568 + %570 = load double, ptr %569, align 8, !tbaa !7 + store double %570, ptr %25, align 8, !tbaa !7 + call void @dlartg_(ptr noundef nonnull %25, ptr noundef nonnull %346, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %569) #5 + store double 0.000000e+00, ptr %346, align 8, !tbaa !7 + %571 = sub nsw i32 %337, %333 + store i32 %571, ptr %22, align 4, !tbaa !3 + %572 = add nsw i32 %566, %333 + %573 = sext i32 %572 to i64 + %574 = getelementptr inbounds double, ptr %63, i64 %573 + %575 = add nsw i32 %343, %333 + %576 = sext i32 %575 to i64 + %577 = getelementptr inbounds double, ptr %63, i64 %576 + call void @drot_(ptr noundef nonnull %22, ptr noundef %574, ptr noundef nonnull @c__1, ptr noundef %577, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + store i32 %571, ptr %22, align 4, !tbaa !3 + %578 = add nsw i32 %354, %333 + %579 = sext i32 %578 to i64 + %580 = getelementptr inbounds double, ptr %67, i64 %579 + %581 = mul nsw i32 %342, %64 + %582 = add nsw i32 %581, %333 + %583 = sext i32 %582 to i64 + %584 = getelementptr inbounds double, ptr %67, i64 %583 + call void @drot_(ptr noundef nonnull %22, ptr noundef %580, ptr noundef nonnull @c__1, ptr noundef %584, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br i1 %99, label %585, label %592 + +585: ; preds = %.loopexit80 + %586 = mul nsw i32 %337, %75 + %587 = sext i32 %586 to i64 + %588 = getelementptr double, ptr %302, i64 %587 + %589 = mul nsw i32 %342, %75 + %590 = sext i32 %589 to i64 + %591 = getelementptr double, ptr %302, i64 %590 + call void @drot_(ptr noundef nonnull %3, ptr noundef %588, ptr noundef nonnull @c__1, ptr noundef %591, ptr noundef nonnull @c__1, ptr noundef nonnull %27, ptr noundef nonnull %28) #5 + br label %592 + +592: ; preds = %585, %.loopexit80, %497, %352, %332 + %593 = mul nsw i32 %337, %64 + %594 = add nsw i32 %593, %337 + %595 = sext i32 %594 to i64 + %596 = getelementptr inbounds double, ptr %67, i64 %595 + %597 = load double, ptr %596, align 8, !tbaa !7 + %598 = fcmp olt double %597, 0.000000e+00 + br i1 %598, label %599, label %.loopexit74 + +599: ; preds = %592 + br i1 %80, label %600, label %621 + +600: ; preds = %599 + store i32 %337, ptr %22, align 4, !tbaa !3 + %601 = icmp sgt i32 %333, %337 + br i1 %601, label %.loopexit75, label %602 + +602: ; preds = %600 + %603 = mul nsw i32 %337, %60 + %604 = sext i32 %333 to i64 + %605 = sext i32 %603 to i64 + %606 = sext i32 %593 to i64 + %607 = add i32 %337, 1 + %608 = getelementptr double, ptr %63, i64 %605 + %609 = getelementptr double, ptr %67, i64 %606 + br label %610 + +610: ; preds = %610, %602 + %611 = phi i64 [ %604, %602 ], [ %618, %610 ] + %612 = getelementptr double, ptr %608, i64 %611 + %613 = load double, ptr %612, align 8, !tbaa !7 + %614 = fneg double %613 + store double %614, ptr %612, align 8, !tbaa !7 + %615 = getelementptr double, ptr %609, i64 %611 + %616 = load double, ptr %615, align 8, !tbaa !7 + %617 = fneg double %616 + store double %617, ptr %615, align 8, !tbaa !7 + %618 = add nsw i64 %611, 1 + %619 = trunc i64 %618 to i32 + %620 = icmp eq i32 %607, %619 + br i1 %620, label %.loopexit75, label %610, !llvm.loop !17 + +621: ; preds = %599 + %622 = mul i32 %337, %174 + %623 = sext i32 %622 to i64 + %624 = getelementptr inbounds double, ptr %63, i64 %623 + %625 = load double, ptr %624, align 8, !tbaa !7 %626 = fneg double %625 - store double %626, ptr %594, align 8, !tbaa !7 + store double %626, ptr %624, align 8, !tbaa !7 + %627 = load double, ptr %596, align 8, !tbaa !7 + %628 = fneg double %627 + store double %628, ptr %596, align 8, !tbaa !7 br label %.loopexit75 -.loopexit75: ; preds = %608, %619, %598 - br i1 %99, label %627, label %.loopexit74 - -627: ; preds = %.loopexit75 - %628 = load i32, ptr %3, align 4, !tbaa !3 - store i32 %628, ptr %22, align 4, !tbaa !3 - %629 = icmp slt i32 %628, 1 - br i1 %629, label %.loopexit74, label %630 - -630: ; preds = %627 - %631 = mul nsw i32 %335, %75 - %632 = sext i32 %631 to i64 - %633 = add nuw i32 %628, 1 - %634 = zext i32 %633 to i64 - %635 = getelementptr double, ptr %78, i64 %632 - br label %636 - -636: ; preds = %636, %630 - %637 = phi i64 [ 1, %630 ], [ %641, %636 ] - %638 = getelementptr double, ptr %635, i64 %637 - %639 = load double, ptr %638, align 8, !tbaa !7 - %640 = fneg double %639 - store double %640, ptr %638, align 8, !tbaa !7 - %641 = add nuw nsw i64 %637, 1 - %642 = icmp eq i64 %641, %634 - br i1 %642, label %.loopexit74, label %636, !llvm.loop !18 - -.loopexit74: ; preds = %636, %627, %.loopexit75, %590 - %643 = mul i32 %335, %174 - %644 = sext i32 %643 to i64 - %645 = getelementptr inbounds double, ptr %63, i64 %644 - %646 = load double, ptr %645, align 8, !tbaa !7 - %647 = sext i32 %335 to i64 - %648 = getelementptr inbounds double, ptr %68, i64 %647 - store double %646, ptr %648, align 8, !tbaa !7 - %649 = getelementptr inbounds double, ptr %69, i64 %647 - store double 0.000000e+00, ptr %649, align 8, !tbaa !7 - %650 = load double, ptr %594, align 8, !tbaa !7 - %651 = getelementptr inbounds double, ptr %70, i64 %647 - store double %650, ptr %651, align 8, !tbaa !7 - %652 = add nsw i32 %335, -1 - %653 = load i32, ptr %4, align 4, !tbaa !3 - %654 = icmp sgt i32 %335, %653 - br i1 %654, label %655, label %.loopexit83 - -655: ; preds = %.loopexit74 - br i1 %80, label %.loopexit76, label %656 - -656: ; preds = %655 - %657 = icmp slt i32 %331, %335 - %658 = select i1 %657, i32 %331, i32 %653 +.loopexit75: ; preds = %610, %621, %600 + br i1 %99, label %629, label %.loopexit74 + +629: ; preds = %.loopexit75 + %630 = load i32, ptr %3, align 4, !tbaa !3 + store i32 %630, ptr %22, align 4, !tbaa !3 + %631 = icmp slt i32 %630, 1 + br i1 %631, label %.loopexit74, label %632 + +632: ; preds = %629 + %633 = mul nsw i32 %337, %75 + %634 = sext i32 %633 to i64 + %635 = add nuw i32 %630, 1 + %636 = zext i32 %635 to i64 + %637 = getelementptr double, ptr %78, i64 %634 + br label %638 + +638: ; preds = %638, %632 + %639 = phi i64 [ 1, %632 ], [ %643, %638 ] + %640 = getelementptr double, ptr %637, i64 %639 + %641 = load double, ptr %640, align 8, !tbaa !7 + %642 = fneg double %641 + store double %642, ptr %640, align 8, !tbaa !7 + %643 = add nuw nsw i64 %639, 1 + %644 = icmp eq i64 %643, %636 + br i1 %644, label %.loopexit74, label %638, !llvm.loop !18 + +.loopexit74: ; preds = %638, %629, %.loopexit75, %592 + %645 = mul i32 %337, %174 + %646 = sext i32 %645 to i64 + %647 = getelementptr inbounds double, ptr %63, i64 %646 + %648 = load double, ptr %647, align 8, !tbaa !7 + %649 = sext i32 %337 to i64 + %650 = getelementptr inbounds double, ptr %68, i64 %649 + store double %648, ptr %650, align 8, !tbaa !7 + %651 = getelementptr inbounds double, ptr %69, i64 %649 + store double 0.000000e+00, ptr %651, align 8, !tbaa !7 + %652 = load double, ptr %596, align 8, !tbaa !7 + %653 = getelementptr inbounds double, ptr %70, i64 %649 + store double %652, ptr %653, align 8, !tbaa !7 + %654 = add nsw i32 %337, -1 + %655 = load i32, ptr %4, align 4, !tbaa !3 + %656 = icmp sgt i32 %337, %655 + br i1 %656, label %657, label %.loopexit83 + +657: ; preds = %.loopexit74 + br i1 %80, label %.loopexit76, label %658 + +658: ; preds = %657 + %659 = icmp slt i32 %333, %337 + %660 = select i1 %659, i32 %333, i32 %655 br label %.loopexit76 -.loopexit220: ; preds = %559, %495 - %659 = phi i32 [ %460, %495 ], [ %.pre172, %559 ] - %660 = add i32 %334, 1 - %661 = select i1 %80, i32 %331, i32 %659 - %662 = srem i32 %660, 10 - %663 = icmp eq i32 %662, 0 - br i1 %663, label %664, label %681 - -664: ; preds = %.loopexit220 - %665 = load double, ptr %344, align 8, !tbaa !7 - store double %665, ptr %24, align 8, !tbaa !7 - %666 = fcmp oge double %665, 0.000000e+00 - %667 = fneg double %665 - %668 = select i1 %666, double %665, double %667 - %669 = fmul double %314, %668 - %670 = mul i32 %340, %180 - %671 = sext i32 %670 to i64 - %672 = getelementptr inbounds double, ptr %67, i64 %671 - %673 = load double, ptr %672, align 8, !tbaa !7 - %674 = fcmp oge double %673, 0.000000e+00 - %675 = fneg double %673 - %676 = select i1 %674, double %673, double %675 - %677 = fcmp olt double %669, %676 - %678 = fdiv double %665, %673 - %679 = fadd double %315, %333 - %680 = select i1 %677, double %678, double %679 - %.pre = fneg double %680 - br label %734 - -681: ; preds = %.loopexit220 +.loopexit220: ; preds = %561, %497 + %661 = phi i32 [ %462, %497 ], [ %.pre172, %561 ] + %662 = add i32 %336, 1 + %663 = select i1 %80, i32 %333, i32 %661 + %664 = srem i32 %662, 10 + %665 = icmp eq i32 %664, 0 + br i1 %665, label %666, label %683 + +666: ; preds = %.loopexit220 + %667 = load double, ptr %346, align 8, !tbaa !7 + store double %667, ptr %24, align 8, !tbaa !7 + %668 = fcmp oge double %667, 0.000000e+00 + %669 = fneg double %667 + %670 = select i1 %668, double %667, double %669 + %671 = fmul double %314, %670 + %672 = mul i32 %342, %180 + %673 = sext i32 %672 to i64 + %674 = getelementptr inbounds double, ptr %67, i64 %673 + %675 = load double, ptr %674, align 8, !tbaa !7 + %676 = fcmp oge double %675, 0.000000e+00 + %677 = fneg double %675 + %678 = select i1 %676, double %675, double %677 + %679 = fcmp olt double %671, %678 + %680 = fdiv double %667, %675 + %681 = fadd double %315, %335 + %682 = select i1 %679, double %680, double %681 + %.pre = fneg double %682 + br label %736 + +683: ; preds = %.loopexit220 store double %309, ptr %24, align 8, !tbaa !7 - %682 = add nsw i32 %341, %340 - %683 = sext i32 %682 to i64 - %684 = getelementptr inbounds double, ptr %63, i64 %683 - %685 = mul nsw i32 %340, %64 - %686 = add nsw i32 %685, %340 - %687 = sext i32 %686 to i64 - %688 = getelementptr inbounds double, ptr %67, i64 %687 - call void @dlag2_(ptr noundef %684, ptr noundef nonnull %7, ptr noundef %688, ptr noundef nonnull %9, ptr noundef nonnull %24, ptr noundef nonnull %31, ptr noundef nonnull %32, ptr noundef nonnull %45, ptr noundef nonnull %52, ptr noundef nonnull %43) #5 - %689 = load double, ptr %45, align 8 - %690 = load double, ptr %31, align 8, !tbaa !7 - %691 = load double, ptr %355, align 8, !tbaa !7 - %692 = mul nsw i32 %335, %60 - %693 = add nsw i32 %692, %335 - %694 = sext i32 %693 to i64 - %695 = getelementptr inbounds double, ptr %63, i64 %694 - %696 = load double, ptr %695, align 8, !tbaa !7 - %697 = fneg double %696 - %698 = load double, ptr %52, align 8, !tbaa !7 - %699 = load double, ptr %32, align 8, !tbaa !7 - %700 = insertelement <2 x double> poison, double %689, i64 0 - %701 = insertelement <2 x double> %700, double %698, i64 1 - %702 = insertelement <2 x double> poison, double %690, i64 0 - %703 = insertelement <2 x double> %702, double %699, i64 1 - %704 = fdiv <2 x double> %701, %703 - %705 = insertelement <2 x double> poison, double %691, i64 0 - %706 = shufflevector <2 x double> %705, <2 x double> poison, <2 x i32> zeroinitializer - %707 = insertelement <2 x double> poison, double %697, i64 0 + %684 = add nsw i32 %343, %342 + %685 = sext i32 %684 to i64 + %686 = getelementptr inbounds double, ptr %63, i64 %685 + %687 = mul nsw i32 %342, %64 + %688 = add nsw i32 %687, %342 + %689 = sext i32 %688 to i64 + %690 = getelementptr inbounds double, ptr %67, i64 %689 + call void @dlag2_(ptr noundef %686, ptr noundef nonnull %7, ptr noundef %690, ptr noundef nonnull %9, ptr noundef nonnull %24, ptr noundef nonnull %31, ptr noundef nonnull %32, ptr noundef nonnull %45, ptr noundef nonnull %52, ptr noundef nonnull %43) #5 + %691 = load double, ptr %45, align 8 + %692 = load double, ptr %31, align 8, !tbaa !7 + %693 = load double, ptr %357, align 8, !tbaa !7 + %694 = mul nsw i32 %337, %60 + %695 = add nsw i32 %694, %337 + %696 = sext i32 %695 to i64 + %697 = getelementptr inbounds double, ptr %63, i64 %696 + %698 = load double, ptr %697, align 8, !tbaa !7 + %699 = fneg double %698 + %700 = load double, ptr %52, align 8, !tbaa !7 + %701 = load double, ptr %32, align 8, !tbaa !7 + %702 = insertelement <2 x double> poison, double %691, i64 0 + %703 = insertelement <2 x double> %702, double %700, i64 1 + %704 = insertelement <2 x double> poison, double %692, i64 0 + %705 = insertelement <2 x double> %704, double %701, i64 1 + %706 = fdiv <2 x double> %703, %705 + %707 = insertelement <2 x double> poison, double %693, i64 0 %708 = shufflevector <2 x double> %707, <2 x double> poison, <2 x i32> zeroinitializer - %709 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %704, <2 x double> %706, <2 x double> %708) - %710 = fcmp oge <2 x double> %709, zeroinitializer - %711 = fneg <2 x double> %709 - %712 = select <2 x i1> %710, <2 x double> %709, <2 x double> %711 - %shift = shufflevector <2 x double> %712, <2 x double> poison, <2 x i32> - %713 = fcmp ogt <2 x double> %712, %shift - %714 = extractelement <2 x i1> %713, i64 0 - br i1 %714, label %715, label %716 - -715: ; preds = %681 - store double %698, ptr %45, align 8, !tbaa !7 - store double %689, ptr %52, align 8, !tbaa !7 - store double %699, ptr %31, align 8, !tbaa !7 - store double %690, ptr %32, align 8, !tbaa !7 - br label %716 - -716: ; preds = %715, %681 - %717 = phi double [ %699, %715 ], [ %690, %681 ] - %718 = phi double [ %698, %715 ], [ %689, %681 ] - %719 = fcmp oge double %718, 0.000000e+00 - %720 = fneg double %718 - %721 = select i1 %719, double %718, double %720 - %722 = fcmp ole double %721, 1.000000e+00 - %723 = select i1 %722, double 1.000000e+00, double %721 - %724 = load double, ptr %43, align 8 - %725 = fcmp oge double %724, 0.000000e+00 - %726 = fneg double %724 - %727 = select i1 %725, double %724, double %726 - store double %717, ptr %24, align 8, !tbaa !7 - %728 = fcmp oge double %723, %727 - %729 = select i1 %728, double %723, double %727 - %730 = fmul double %168, %729 - %731 = fcmp oge double %717, %730 - %732 = select i1 %731, double %717, double %730 - store double %732, ptr %25, align 8, !tbaa !7 - %733 = fcmp une double %724, 0.000000e+00 - br i1 %733, label %986, label %734 - -734: ; preds = %716, %664 - %.pre-phi = phi double [ %720, %716 ], [ %.pre, %664 ] - %735 = phi double [ %718, %716 ], [ %680, %664 ] - %736 = phi double [ %717, %716 ], [ 1.000000e+00, %664 ] - %737 = phi double [ %333, %716 ], [ %680, %664 ] - %738 = fdiv double %327, %736 - %739 = fcmp oge double %735, 0.000000e+00 - %740 = select i1 %739, double %735, double %.pre-phi - %741 = insertelement <2 x double> poison, double %736, i64 0 - %742 = insertelement <2 x double> %741, double %740, i64 1 - %743 = fcmp ogt <2 x double> %742, %321 - %744 = extractelement <2 x i1> %743, i64 0 - %745 = select i1 %744, double %738, double 1.000000e+00 - %746 = extractelement <2 x i1> %743, i64 1 - br i1 %746, label %747, label %751 - -747: ; preds = %734 - store double %745, ptr %24, align 8, !tbaa !7 - %748 = fdiv double %328, %740 - %749 = fcmp ole double %745, %748 - %750 = select i1 %749, double %745, double %748 - br label %751 - -751: ; preds = %747, %734 - %752 = phi double [ %750, %747 ], [ %745, %734 ] - %753 = fmul double %736, %752 - store double %753, ptr %31, align 8, !tbaa !7 - %754 = fmul double %735, %752 - store double %754, ptr %45, align 8, !tbaa !7 - %755 = add nsw i32 %659, 1 - store i32 %755, ptr %22, align 4, !tbaa !3 - %756 = fneg double %754 - %757 = sext i32 %340 to i64 - %758 = sext i32 %659 to i64 - br label %759 - -759: ; preds = %762, %751 - %760 = phi i64 [ %763, %762 ], [ %757, %751 ] - %761 = icmp sgt i64 %760, %758 - br i1 %761, label %762, label %._crit_edge170 - -._crit_edge170: ; preds = %759 - %.pre174 = mul i32 %659, %180 + %709 = insertelement <2 x double> poison, double %699, i64 0 + %710 = shufflevector <2 x double> %709, <2 x double> poison, <2 x i32> zeroinitializer + %711 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %706, <2 x double> %708, <2 x double> %710) + %712 = fcmp oge <2 x double> %711, zeroinitializer + %713 = fneg <2 x double> %711 + %714 = select <2 x i1> %712, <2 x double> %711, <2 x double> %713 + %shift = shufflevector <2 x double> %714, <2 x double> poison, <2 x i32> + %715 = fcmp ogt <2 x double> %714, %shift + %716 = extractelement <2 x i1> %715, i64 0 + br i1 %716, label %717, label %718 + +717: ; preds = %683 + store double %700, ptr %45, align 8, !tbaa !7 + store double %691, ptr %52, align 8, !tbaa !7 + store double %701, ptr %31, align 8, !tbaa !7 + store double %692, ptr %32, align 8, !tbaa !7 + br label %718 + +718: ; preds = %717, %683 + %719 = phi double [ %701, %717 ], [ %692, %683 ] + %720 = phi double [ %700, %717 ], [ %691, %683 ] + %721 = fcmp oge double %720, 0.000000e+00 + %722 = fneg double %720 + %723 = select i1 %721, double %720, double %722 + %724 = fcmp ole double %723, 1.000000e+00 + %725 = select i1 %724, double 1.000000e+00, double %723 + %726 = load double, ptr %43, align 8 + %727 = fcmp oge double %726, 0.000000e+00 + %728 = fneg double %726 + %729 = select i1 %727, double %726, double %728 + store double %719, ptr %24, align 8, !tbaa !7 + %730 = fcmp oge double %725, %729 + %731 = select i1 %730, double %725, double %729 + %732 = fmul double %168, %731 + %733 = fcmp oge double %719, %732 + %734 = select i1 %733, double %719, double %732 + store double %734, ptr %25, align 8, !tbaa !7 + %735 = fcmp une double %726, 0.000000e+00 + br i1 %735, label %1014, label %736 + +736: ; preds = %718, %666 + %.pre-phi = phi double [ %722, %718 ], [ %.pre, %666 ] + %737 = phi double [ %720, %718 ], [ %682, %666 ] + %738 = phi double [ %719, %718 ], [ 1.000000e+00, %666 ] + %739 = phi double [ %335, %718 ], [ %682, %666 ] + %740 = fdiv double %327, %738 + %741 = fcmp oge double %737, 0.000000e+00 + %742 = select i1 %741, double %737, double %.pre-phi + %743 = insertelement <2 x double> poison, double %738, i64 0 + %744 = insertelement <2 x double> %743, double %742, i64 1 + %745 = fcmp ogt <2 x double> %744, %321 + %746 = extractelement <2 x i1> %745, i64 0 + %747 = select i1 %746, double %740, double 1.000000e+00 + %748 = extractelement <2 x i1> %745, i64 1 + br i1 %748, label %749, label %753 + +749: ; preds = %736 + store double %747, ptr %24, align 8, !tbaa !7 + %750 = fdiv double %328, %742 + %751 = fcmp ole double %747, %750 + %752 = select i1 %751, double %747, double %750 + br label %753 + +753: ; preds = %749, %736 + %754 = phi double [ %752, %749 ], [ %747, %736 ] + %755 = fmul double %738, %754 + store double %755, ptr %31, align 8, !tbaa !7 + %756 = fmul double %737, %754 + store double %756, ptr %45, align 8, !tbaa !7 + %757 = add nsw i32 %661, 1 + store i32 %757, ptr %22, align 4, !tbaa !3 + %758 = fneg double %756 + %759 = sext i32 %342 to i64 + %760 = sext i32 %661 to i64 + br label %761 + +761: ; preds = %764, %753 + %762 = phi i64 [ %765, %764 ], [ %759, %753 ] + %763 = icmp sgt i64 %762, %760 + br i1 %763, label %764, label %._crit_edge170 + +._crit_edge170: ; preds = %761 + %.pre174 = mul i32 %661, %180 %.pre176 = sext i32 %.pre174 to i64 br label %split -762: ; preds = %759 - %763 = add nsw i64 %760, -1 - %764 = mul nsw i64 %763, %324 - %765 = getelementptr double, ptr %63, i64 %764 - %766 = getelementptr double, ptr %765, i64 %760 - %767 = load double, ptr %766, align 8, !tbaa !7 - %768 = fmul double %753, %767 - %769 = mul nsw i64 %760, %324 - %770 = getelementptr double, ptr %63, i64 %769 - %771 = getelementptr double, ptr %770, i64 %760 - %772 = load double, ptr %771, align 8, !tbaa !7 - %773 = trunc nsw i64 %760 to i32 - %774 = mul i32 %180, %773 - %775 = sext i32 %774 to i64 - %776 = getelementptr inbounds double, ptr %67, i64 %775 - %777 = load double, ptr %776, align 8, !tbaa !7 - %778 = fmul double %777, %756 - %779 = call double @llvm.fmuladd.f64(double %753, double %772, double %778) - %780 = insertelement <2 x double> poison, double %768, i64 0 - %781 = insertelement <2 x double> %780, double %779, i64 1 - %782 = fcmp oge <2 x double> %781, zeroinitializer - %783 = fneg <2 x double> %781 - %784 = select <2 x i1> %782, <2 x double> %781, <2 x double> %783 - %785 = extractelement <2 x double> %784, i64 0 - %786 = extractelement <2 x double> %784, i64 1 - %787 = fcmp oge double %785, %786 - %788 = select i1 %787, double %785, double %786 - store double %788, ptr %30, align 8, !tbaa !7 - %789 = fcmp olt double %788, 1.000000e+00 - %790 = fcmp une double %788, 0.000000e+00 - %791 = and i1 %789, %790 - %792 = fdiv double %785, %788 - %793 = fdiv double %786, %788 - %794 = select i1 %791, double %793, double %786 - %795 = select i1 %791, double %792, double %785 - %796 = getelementptr double, ptr %326, i64 %760 - %797 = getelementptr double, ptr %796, i64 %769 - %798 = load double, ptr %797, align 8, !tbaa !7 - %799 = fmul double %307, %798 - %800 = fmul double %795, %799 - store double %800, ptr %24, align 8, !tbaa !7 - %801 = fcmp oge double %800, 0.000000e+00 - %802 = fneg double %800 - %803 = select i1 %801, double %800, double %802 - %804 = fmul double %308, %794 - %805 = fcmp ugt double %803, %804 - br i1 %805, label %759, label %split, !llvm.loop !19 - -split: ; preds = %762, %._crit_edge170 - %.pre-phi177 = phi i64 [ %.pre176, %._crit_edge170 ], [ %775, %762 ] - %806 = phi i32 [ %659, %._crit_edge170 ], [ %773, %762 ] - %807 = mul i32 %806, %174 - %808 = sext i32 %807 to i64 - %809 = getelementptr inbounds double, ptr %63, i64 %808 - %810 = load double, ptr %809, align 8, !tbaa !7 - %811 = getelementptr inbounds double, ptr %67, i64 %.pre-phi177 +764: ; preds = %761 + %765 = add nsw i64 %762, -1 + %766 = mul nsw i64 %765, %324 + %767 = getelementptr double, ptr %63, i64 %766 + %768 = getelementptr double, ptr %767, i64 %762 + %769 = load double, ptr %768, align 8, !tbaa !7 + %770 = fmul double %755, %769 + %771 = mul nsw i64 %762, %324 + %772 = getelementptr double, ptr %63, i64 %771 + %773 = getelementptr double, ptr %772, i64 %762 + %774 = load double, ptr %773, align 8, !tbaa !7 + %775 = trunc nsw i64 %762 to i32 + %776 = mul i32 %180, %775 + %777 = sext i32 %776 to i64 + %778 = getelementptr inbounds double, ptr %67, i64 %777 + %779 = load double, ptr %778, align 8, !tbaa !7 + %780 = fmul double %779, %758 + %781 = call double @llvm.fmuladd.f64(double %755, double %774, double %780) + %782 = insertelement <2 x double> poison, double %770, i64 0 + %783 = insertelement <2 x double> %782, double %781, i64 1 + %784 = fcmp oge <2 x double> %783, zeroinitializer + %785 = fneg <2 x double> %783 + %786 = select <2 x i1> %784, <2 x double> %783, <2 x double> %785 + %787 = extractelement <2 x double> %786, i64 0 + %788 = extractelement <2 x double> %786, i64 1 + %789 = fcmp oge double %787, %788 + %790 = select i1 %789, double %787, double %788 + store double %790, ptr %30, align 8, !tbaa !7 + %791 = fcmp olt double %790, 1.000000e+00 + %792 = fcmp une double %790, 0.000000e+00 + %793 = and i1 %791, %792 + %794 = fdiv double %787, %790 + %795 = fdiv double %788, %790 + %796 = select i1 %793, double %795, double %788 + %797 = select i1 %793, double %794, double %787 + %798 = getelementptr double, ptr %326, i64 %762 + %799 = getelementptr double, ptr %798, i64 %771 + %800 = load double, ptr %799, align 8, !tbaa !7 + %801 = fmul double %307, %800 + %802 = fmul double %797, %801 + store double %802, ptr %24, align 8, !tbaa !7 + %803 = fcmp oge double %802, 0.000000e+00 + %804 = fneg double %802 + %805 = select i1 %803, double %802, double %804 + %806 = fmul double %308, %796 + %807 = fcmp ugt double %805, %806 + br i1 %807, label %761, label %split, !llvm.loop !19 + +split: ; preds = %764, %._crit_edge170 + %.pre-phi177 = phi i64 [ %.pre176, %._crit_edge170 ], [ %777, %764 ] + %808 = phi i32 [ %661, %._crit_edge170 ], [ %775, %764 ] + %809 = mul i32 %808, %174 + %810 = sext i32 %809 to i64 + %811 = getelementptr inbounds double, ptr %63, i64 %810 %812 = load double, ptr %811, align 8, !tbaa !7 - %813 = fmul double %812, %756 - %814 = call double @llvm.fmuladd.f64(double %753, double %810, double %813) - store double %814, ptr %25, align 8, !tbaa !7 - %815 = add i32 %807, 1 - %816 = sext i32 %815 to i64 - %817 = getelementptr inbounds double, ptr %63, i64 %816 - %818 = load double, ptr %817, align 8, !tbaa !7 - %819 = fmul double %753, %818 - store double %819, ptr %26, align 8, !tbaa !7 + %813 = getelementptr inbounds double, ptr %67, i64 %.pre-phi177 + %814 = load double, ptr %813, align 8, !tbaa !7 + %815 = fmul double %814, %758 + %816 = call double @llvm.fmuladd.f64(double %755, double %812, double %815) + store double %816, ptr %25, align 8, !tbaa !7 + %817 = add i32 %809, 1 + %818 = sext i32 %817 to i64 + %819 = getelementptr inbounds double, ptr %63, i64 %818 + %820 = load double, ptr %819, align 8, !tbaa !7 + %821 = fmul double %755, %820 + store double %821, ptr %26, align 8, !tbaa !7 call void @dlartg_(ptr noundef nonnull %25, ptr noundef nonnull %26, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %30) #5 - store i32 %340, ptr %22, align 4, !tbaa !3 - %820 = icmp slt i32 %806, %335 - br i1 %820, label %821, label %.loopexit76 - -821: ; preds = %split - %822 = sext i32 %806 to i64 - %823 = sext i32 %332 to i64 - %824 = sext i32 %661 to i64 - %825 = add i32 %806, 2 - br label %826 - -826: ; preds = %982, %821 - %indvars.iv164 = phi i32 [ %indvars.iv.next165, %982 ], [ %825, %821 ] - %827 = phi i64 [ %830, %982 ], [ %822, %821 ] - %828 = call i32 @llvm.smin.i32(i32 %335, i32 %indvars.iv164) - %829 = call i32 @llvm.smax.i32(i32 %828, i32 %661) - %smax167 = sext i32 %829 to i64 - %830 = add nsw i64 %827, 1 - %indvars = trunc i64 %830 to i32 - %831 = icmp sgt i64 %827, %822 - br i1 %831, label %832, label %844 - -832: ; preds = %826 - %833 = trunc i64 %827 to i32 - %834 = add nsw i64 %827, -1 - %835 = add nsw i32 %833, -1 - %836 = mul nsw i64 %834, %324 - %837 = mul nsw i32 %835, %60 - %838 = sext i32 %837 to i64 - %839 = getelementptr double, ptr %63, i64 %827 - %840 = getelementptr double, ptr %839, i64 %838 - %841 = load double, ptr %840, align 8, !tbaa !7 - store double %841, ptr %25, align 8, !tbaa !7 - %842 = getelementptr double, ptr %326, i64 %827 - %843 = getelementptr double, ptr %842, i64 %836 - call void @dlartg_(ptr noundef nonnull %25, ptr noundef %843, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %840) #5 - store double 0.000000e+00, ptr %843, align 8, !tbaa !7 - br label %844 - -844: ; preds = %832, %826 - %845 = icmp sgt i64 %827, %823 - br i1 %845, label %877, label %846 - -846: ; preds = %844 - %847 = load double, ptr %27, align 8, !tbaa !7 - %848 = load double, ptr %28, align 8, !tbaa !7 - %849 = fneg double %848 - %850 = getelementptr double, ptr %63, i64 %827 - %851 = getelementptr double, ptr %63, i64 %830 - %852 = getelementptr double, ptr %67, i64 %827 - %853 = getelementptr double, ptr %67, i64 %830 - br label %854 - -854: ; preds = %854, %846 - %855 = phi i64 [ %827, %846 ], [ %874, %854 ] - %856 = mul nsw i64 %855, %324 - %857 = getelementptr double, ptr %850, i64 %856 - %858 = load double, ptr %857, align 8, !tbaa !7 - %859 = getelementptr double, ptr %851, i64 %856 - %860 = load double, ptr %859, align 8, !tbaa !7 - %861 = fmul double %848, %860 - %862 = call double @llvm.fmuladd.f64(double %847, double %858, double %861) - %863 = fmul double %847, %860 - %864 = call double @llvm.fmuladd.f64(double %849, double %858, double %863) - store double %864, ptr %859, align 8, !tbaa !7 - store double %862, ptr %857, align 8, !tbaa !7 - %865 = mul nsw i64 %855, %323 - %866 = getelementptr double, ptr %852, i64 %865 + store i32 %342, ptr %22, align 4, !tbaa !3 + %822 = icmp slt i32 %808, %337 + br i1 %822, label %823, label %.loopexit76 + +823: ; preds = %split + %824 = sext i32 %808 to i64 + %825 = sext i32 %334 to i64 + %826 = sext i32 %663 to i64 + %827 = add i32 %808, 2 + %828 = add nsw i64 %824, %825 + br label %829 + +829: ; preds = %1010, %823 + %indvar263 = phi i64 [ %indvar.next264, %1010 ], [ 0, %823 ] + %indvars.iv164 = phi i32 [ %indvars.iv.next165, %1010 ], [ %827, %823 ] + %830 = phi i64 [ %841, %1010 ], [ %824, %823 ] + %831 = add i64 %indvar263, %824 + %832 = shl i64 %831, 4 + %833 = add i64 %832, -16 + %scevgep280 = getelementptr i8, ptr %8, i64 %833 + %scevgep283 = getelementptr i8, ptr %6, i64 %833 + %834 = add i64 %indvar263, %824 + %835 = shl i64 %834, 4 + %836 = add i64 %835, -16 + %scevgep265 = getelementptr i8, ptr %6, i64 %836 + %837 = add i64 %828, %indvar263 + %838 = shl i64 %837, 3 + %scevgep266 = getelementptr i8, ptr %6, i64 %838 + %scevgep267 = getelementptr i8, ptr %8, i64 %836 + %scevgep268 = getelementptr i8, ptr %8, i64 %838 + %839 = call i32 @llvm.smin.i32(i32 %337, i32 %indvars.iv164) + %840 = call i32 @llvm.smax.i32(i32 %839, i32 %663) + %smax167 = sext i32 %840 to i64 + %841 = add nsw i64 %830, 1 + %indvars = trunc i64 %841 to i32 + %842 = icmp sgt i64 %830, %824 + br i1 %842, label %843, label %855 + +843: ; preds = %829 + %844 = trunc i64 %830 to i32 + %845 = add nsw i64 %830, -1 + %846 = add nsw i32 %844, -1 + %847 = mul nsw i64 %845, %324 + %848 = mul nsw i32 %846, %60 + %849 = sext i32 %848 to i64 + %850 = getelementptr double, ptr %63, i64 %830 + %851 = getelementptr double, ptr %850, i64 %849 + %852 = load double, ptr %851, align 8, !tbaa !7 + store double %852, ptr %25, align 8, !tbaa !7 + %853 = getelementptr double, ptr %326, i64 %830 + %854 = getelementptr double, ptr %853, i64 %847 + call void @dlartg_(ptr noundef nonnull %25, ptr noundef %854, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %851) #5 + store double 0.000000e+00, ptr %854, align 8, !tbaa !7 + br label %855 + +855: ; preds = %843, %829 + %856 = icmp sgt i64 %830, %825 + br i1 %856, label %905, label %.lver.check275 + +.lver.check275: ; preds = %855 + %857 = load double, ptr %27, align 8, !tbaa !7 + %858 = load double, ptr %28, align 8, !tbaa !7 + %859 = fneg double %858 + %860 = getelementptr double, ptr %63, i64 %830 + %861 = getelementptr double, ptr %63, i64 %841 + %862 = getelementptr double, ptr %67, i64 %830 + %863 = getelementptr double, ptr %67, i64 %841 + %bound0269 = icmp ult ptr %scevgep265, %scevgep268 + %bound1270 = icmp ult ptr %scevgep267, %scevgep266 + %found.conflict271 = and i1 %bound0269, %bound1270 + %lver.safe274 = or i1 %found.conflict271, %331 + br i1 %lver.safe274, label %.ph276.lver.orig, label %.ph276 + +.ph276.lver.orig: ; preds = %.lver.check275, %.ph276.lver.orig + %864 = phi i64 [ %883, %.ph276.lver.orig ], [ %830, %.lver.check275 ] + %865 = mul nsw i64 %864, %324 + %866 = getelementptr double, ptr %860, i64 %865 %867 = load double, ptr %866, align 8, !tbaa !7 - %868 = getelementptr double, ptr %853, i64 %865 + %868 = getelementptr double, ptr %861, i64 %865 %869 = load double, ptr %868, align 8, !tbaa !7 - %870 = fmul double %848, %869 - %871 = call double @llvm.fmuladd.f64(double %847, double %867, double %870) - %872 = fmul double %847, %869 - %873 = call double @llvm.fmuladd.f64(double %849, double %867, double %872) + %870 = fmul double %858, %869 + %871 = call double @llvm.fmuladd.f64(double %857, double %867, double %870) + %872 = fmul double %857, %869 + %873 = call double @llvm.fmuladd.f64(double %859, double %867, double %872) store double %873, ptr %868, align 8, !tbaa !7 store double %871, ptr %866, align 8, !tbaa !7 - %874 = add nsw i64 %855, 1 - %875 = icmp slt i64 %855, %823 - br i1 %875, label %854, label %876, !llvm.loop !20 - -876: ; preds = %854 - store double %871, ptr %26, align 8, !tbaa !7 - br label %877 - -877: ; preds = %876, %844 - br i1 %87, label %878, label %.loopexit215 - -878: ; preds = %877 - %879 = load i32, ptr %3, align 4, !tbaa !3 - %880 = icmp slt i32 %879, 1 - br i1 %880, label %.loopexit215, label %881 - -881: ; preds = %878 - %882 = load double, ptr %27, align 8, !tbaa !7 - %883 = mul nsw i64 %827, %325 - %884 = load double, ptr %28, align 8, !tbaa !7 - %885 = mul nsw i64 %830, %325 - %886 = fneg double %884 - %887 = add nuw i32 %879, 1 - %888 = zext i32 %887 to i64 - %889 = getelementptr double, ptr %74, i64 %883 - %890 = getelementptr double, ptr %74, i64 %885 - br label %891 - -891: ; preds = %891, %881 - %892 = phi i64 [ 1, %881 ], [ %901, %891 ] - %893 = getelementptr double, ptr %889, i64 %892 - %894 = load double, ptr %893, align 8, !tbaa !7 - %895 = getelementptr double, ptr %890, i64 %892 - %896 = load double, ptr %895, align 8, !tbaa !7 - %897 = fmul double %884, %896 - %898 = call double @llvm.fmuladd.f64(double %882, double %894, double %897) - %899 = fmul double %882, %896 - %900 = call double @llvm.fmuladd.f64(double %886, double %894, double %899) - store double %900, ptr %895, align 8, !tbaa !7 - store double %898, ptr %893, align 8, !tbaa !7 - %901 = add nuw nsw i64 %892, 1 - %902 = icmp eq i64 %901, %888 - br i1 %902, label %.loopexit215, label %891, !llvm.loop !21 - -.loopexit215: ; preds = %891, %878, %877 - %903 = mul nsw i64 %830, %323 - %904 = getelementptr double, ptr %67, i64 %903 - %905 = getelementptr double, ptr %904, i64 %830 - %906 = load double, ptr %905, align 8, !tbaa !7 - store double %906, ptr %25, align 8, !tbaa !7 - %907 = mul nsw i64 %827, %323 - %908 = getelementptr double, ptr %67, i64 %830 - %909 = getelementptr double, ptr %908, i64 %907 - call void @dlartg_(ptr noundef nonnull %25, ptr noundef %909, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %905) #5 - store double 0.000000e+00, ptr %909, align 8, !tbaa !7 - %910 = trunc i64 %827 to i32 - %911 = add i32 %910, 2 - store i32 %911, ptr %23, align 4, !tbaa !3 - %912 = call i32 @llvm.smin.i32(i32 %911, i32 %335) - %913 = icmp sgt i32 %661, %912 - br i1 %913, label %923, label %914 - -914: ; preds = %.loopexit215 - %915 = load double, ptr %27, align 8, !tbaa !7 - %916 = mul nsw i64 %830, %324 - %917 = load double, ptr %28, align 8, !tbaa !7 - %918 = mul nsw i64 %827, %324 - %919 = fneg double %917 - %920 = getelementptr double, ptr %63, i64 %916 - %921 = getelementptr double, ptr %63, i64 %918 - br label %930 - -922: ; preds = %930 - store double %937, ptr %25, align 8, !tbaa !7 - br label %923 - -923: ; preds = %922, %.loopexit215 - %924 = icmp slt i64 %827, %824 - br i1 %924, label %955, label %925 - -925: ; preds = %923 - %926 = load double, ptr %27, align 8, !tbaa !7 - %927 = load double, ptr %28, align 8, !tbaa !7 - %928 = fneg double %927 - %929 = getelementptr double, ptr %67, i64 %907 - br label %941 - -930: ; preds = %930, %914 - %931 = phi i64 [ %824, %914 ], [ %940, %930 ] - %932 = getelementptr double, ptr %920, i64 %931 - %933 = load double, ptr %932, align 8, !tbaa !7 - %934 = getelementptr double, ptr %921, i64 %931 - %935 = load double, ptr %934, align 8, !tbaa !7 - %936 = fmul double %917, %935 - %937 = call double @llvm.fmuladd.f64(double %915, double %933, double %936) - %938 = fmul double %915, %935 - %939 = call double @llvm.fmuladd.f64(double %919, double %933, double %938) - store double %939, ptr %934, align 8, !tbaa !7 - store double %937, ptr %932, align 8, !tbaa !7 - %940 = add nsw i64 %931, 1 - %exitcond168.not = icmp eq i64 %931, %smax167 - br i1 %exitcond168.not, label %922, label %930, !llvm.loop !22 - -941: ; preds = %941, %925 - %942 = phi i64 [ %824, %925 ], [ %951, %941 ] - %943 = getelementptr double, ptr %904, i64 %942 - %944 = load double, ptr %943, align 8, !tbaa !7 - %945 = getelementptr double, ptr %929, i64 %942 - %946 = load double, ptr %945, align 8, !tbaa !7 - %947 = fmul double %927, %946 - %948 = call double @llvm.fmuladd.f64(double %926, double %944, double %947) - %949 = fmul double %926, %946 - %950 = call double @llvm.fmuladd.f64(double %928, double %944, double %949) - store double %950, ptr %945, align 8, !tbaa !7 - store double %948, ptr %943, align 8, !tbaa !7 - %951 = add nsw i64 %942, 1 - %952 = trunc i64 %951 to i32 - %953 = icmp eq i32 %indvars, %952 - br i1 %953, label %954, label %941, !llvm.loop !23 - -954: ; preds = %941 - store double %948, ptr %25, align 8, !tbaa !7 - br label %955 - -955: ; preds = %954, %923 - br i1 %99, label %956, label %982 - -956: ; preds = %955 - %957 = load i32, ptr %3, align 4, !tbaa !3 - %958 = icmp slt i32 %957, 1 - br i1 %958, label %982, label %959 - -959: ; preds = %956 - %960 = load double, ptr %27, align 8, !tbaa !7 - %961 = mul nsw i64 %830, %322 - %962 = load double, ptr %28, align 8, !tbaa !7 - %963 = mul nsw i64 %827, %322 - %964 = fneg double %962 - %965 = add nuw i32 %957, 1 - %966 = zext i32 %965 to i64 - %967 = getelementptr double, ptr %78, i64 %961 - %968 = getelementptr double, ptr %78, i64 %963 + %874 = mul nsw i64 %864, %323 + %875 = getelementptr double, ptr %862, i64 %874 + %876 = load double, ptr %875, align 8, !tbaa !7 + %877 = getelementptr double, ptr %863, i64 %874 + %878 = load double, ptr %877, align 8, !tbaa !7 + %879 = fmul double %858, %878 + %880 = call double @llvm.fmuladd.f64(double %857, double %876, double %879) + %881 = fmul double %857, %878 + %882 = call double @llvm.fmuladd.f64(double %859, double %876, double %881) + store double %882, ptr %877, align 8, !tbaa !7 + store double %880, ptr %875, align 8, !tbaa !7 + %883 = add nsw i64 %864, 1 + %884 = icmp slt i64 %864, %825 + br i1 %884, label %.ph276.lver.orig, label %.loopexit277, !llvm.loop !20 + +.ph276: ; preds = %.lver.check275 + %load_initial281 = load double, ptr %scevgep280, align 8 + %load_initial284 = load double, ptr %scevgep283, align 8 + br label %885 + +885: ; preds = %885, %.ph276 + %store_forwarded285 = phi double [ %load_initial284, %.ph276 ], [ %894, %885 ] + %store_forwarded282 = phi double [ %load_initial281, %.ph276 ], [ %902, %885 ] + %886 = phi i64 [ %830, %.ph276 ], [ %903, %885 ] + %887 = mul nuw nsw i64 %886, %324 + %888 = getelementptr double, ptr %860, i64 %887 + %889 = getelementptr double, ptr %861, i64 %887 + %890 = load double, ptr %889, align 8, !tbaa !7 + %891 = fmul double %858, %890 + %892 = call double @llvm.fmuladd.f64(double %857, double %store_forwarded285, double %891) + %893 = fmul double %857, %890 + %894 = call double @llvm.fmuladd.f64(double %859, double %store_forwarded285, double %893) + store double %894, ptr %889, align 8, !tbaa !7 + store double %892, ptr %888, align 8, !tbaa !7 + %895 = mul nuw nsw i64 %886, %323 + %896 = getelementptr double, ptr %862, i64 %895 + %897 = getelementptr double, ptr %863, i64 %895 + %898 = load double, ptr %897, align 8, !tbaa !7 + %899 = fmul double %858, %898 + %900 = call double @llvm.fmuladd.f64(double %857, double %store_forwarded282, double %899) + %901 = fmul double %857, %898 + %902 = call double @llvm.fmuladd.f64(double %859, double %store_forwarded282, double %901) + store double %902, ptr %897, align 8, !tbaa !7 + store double %900, ptr %896, align 8, !tbaa !7 + %903 = add nsw i64 %886, 1 + %904 = icmp slt i64 %886, %825 + br i1 %904, label %885, label %.loopexit277, !llvm.loop !20 + +.loopexit277: ; preds = %885, %.ph276.lver.orig + %.lcssa248 = phi double [ %880, %.ph276.lver.orig ], [ %900, %885 ] + store double %.lcssa248, ptr %26, align 8, !tbaa !7 + br label %905 + +905: ; preds = %.loopexit277, %855 + br i1 %87, label %906, label %.loopexit215 + +906: ; preds = %905 + %907 = load i32, ptr %3, align 4, !tbaa !3 + %908 = icmp slt i32 %907, 1 + br i1 %908, label %.loopexit215, label %909 + +909: ; preds = %906 + %910 = load double, ptr %27, align 8, !tbaa !7 + %911 = mul nsw i64 %830, %325 + %912 = load double, ptr %28, align 8, !tbaa !7 + %913 = mul nsw i64 %841, %325 + %914 = fneg double %912 + %915 = add nuw i32 %907, 1 + %916 = zext i32 %915 to i64 + %917 = getelementptr double, ptr %74, i64 %911 + %918 = getelementptr double, ptr %74, i64 %913 + br label %919 + +919: ; preds = %919, %909 + %920 = phi i64 [ 1, %909 ], [ %929, %919 ] + %921 = getelementptr double, ptr %917, i64 %920 + %922 = load double, ptr %921, align 8, !tbaa !7 + %923 = getelementptr double, ptr %918, i64 %920 + %924 = load double, ptr %923, align 8, !tbaa !7 + %925 = fmul double %912, %924 + %926 = call double @llvm.fmuladd.f64(double %910, double %922, double %925) + %927 = fmul double %910, %924 + %928 = call double @llvm.fmuladd.f64(double %914, double %922, double %927) + store double %928, ptr %923, align 8, !tbaa !7 + store double %926, ptr %921, align 8, !tbaa !7 + %929 = add nuw nsw i64 %920, 1 + %930 = icmp eq i64 %929, %916 + br i1 %930, label %.loopexit215, label %919, !llvm.loop !21 + +.loopexit215: ; preds = %919, %906, %905 + %931 = mul nsw i64 %841, %323 + %932 = getelementptr double, ptr %67, i64 %931 + %933 = getelementptr double, ptr %932, i64 %841 + %934 = load double, ptr %933, align 8, !tbaa !7 + store double %934, ptr %25, align 8, !tbaa !7 + %935 = mul nsw i64 %830, %323 + %936 = getelementptr double, ptr %67, i64 %841 + %937 = getelementptr double, ptr %936, i64 %935 + call void @dlartg_(ptr noundef nonnull %25, ptr noundef %937, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %933) #5 + store double 0.000000e+00, ptr %937, align 8, !tbaa !7 + %938 = trunc i64 %830 to i32 + %939 = add i32 %938, 2 + store i32 %939, ptr %23, align 4, !tbaa !3 + %940 = call i32 @llvm.smin.i32(i32 %939, i32 %337) + %941 = icmp sgt i32 %663, %940 + br i1 %941, label %951, label %942 + +942: ; preds = %.loopexit215 + %943 = load double, ptr %27, align 8, !tbaa !7 + %944 = mul nsw i64 %841, %324 + %945 = load double, ptr %28, align 8, !tbaa !7 + %946 = mul nsw i64 %830, %324 + %947 = fneg double %945 + %948 = getelementptr double, ptr %63, i64 %944 + %949 = getelementptr double, ptr %63, i64 %946 + br label %958 + +950: ; preds = %958 + store double %965, ptr %25, align 8, !tbaa !7 + br label %951 + +951: ; preds = %950, %.loopexit215 + %952 = icmp slt i64 %830, %826 + br i1 %952, label %983, label %953 + +953: ; preds = %951 + %954 = load double, ptr %27, align 8, !tbaa !7 + %955 = load double, ptr %28, align 8, !tbaa !7 + %956 = fneg double %955 + %957 = getelementptr double, ptr %67, i64 %935 br label %969 -969: ; preds = %969, %959 - %970 = phi i64 [ 1, %959 ], [ %979, %969 ] - %971 = getelementptr double, ptr %967, i64 %970 +958: ; preds = %958, %942 + %959 = phi i64 [ %826, %942 ], [ %968, %958 ] + %960 = getelementptr double, ptr %948, i64 %959 + %961 = load double, ptr %960, align 8, !tbaa !7 + %962 = getelementptr double, ptr %949, i64 %959 + %963 = load double, ptr %962, align 8, !tbaa !7 + %964 = fmul double %945, %963 + %965 = call double @llvm.fmuladd.f64(double %943, double %961, double %964) + %966 = fmul double %943, %963 + %967 = call double @llvm.fmuladd.f64(double %947, double %961, double %966) + store double %967, ptr %962, align 8, !tbaa !7 + store double %965, ptr %960, align 8, !tbaa !7 + %968 = add nsw i64 %959, 1 + %exitcond168.not = icmp eq i64 %959, %smax167 + br i1 %exitcond168.not, label %950, label %958, !llvm.loop !22 + +969: ; preds = %969, %953 + %970 = phi i64 [ %826, %953 ], [ %979, %969 ] + %971 = getelementptr double, ptr %932, i64 %970 %972 = load double, ptr %971, align 8, !tbaa !7 - %973 = getelementptr double, ptr %968, i64 %970 + %973 = getelementptr double, ptr %957, i64 %970 %974 = load double, ptr %973, align 8, !tbaa !7 - %975 = fmul double %962, %974 - %976 = call double @llvm.fmuladd.f64(double %960, double %972, double %975) - %977 = fmul double %960, %974 - %978 = call double @llvm.fmuladd.f64(double %964, double %972, double %977) + %975 = fmul double %955, %974 + %976 = call double @llvm.fmuladd.f64(double %954, double %972, double %975) + %977 = fmul double %954, %974 + %978 = call double @llvm.fmuladd.f64(double %956, double %972, double %977) store double %978, ptr %973, align 8, !tbaa !7 store double %976, ptr %971, align 8, !tbaa !7 - %979 = add nuw nsw i64 %970, 1 - %980 = icmp eq i64 %979, %966 - br i1 %980, label %981, label %969, !llvm.loop !24 + %979 = add nsw i64 %970, 1 + %980 = trunc i64 %979 to i32 + %981 = icmp eq i32 %indvars, %980 + br i1 %981, label %982, label %969, !llvm.loop !23 -981: ; preds = %969 +982: ; preds = %969 store double %976, ptr %25, align 8, !tbaa !7 - br label %982 - -982: ; preds = %981, %956, %955 - %983 = load i32, ptr %22, align 4, !tbaa !3 - %984 = sext i32 %983 to i64 - %985 = icmp slt i64 %827, %984 - %indvars.iv.next165 = add i32 %indvars.iv164, 1 - br i1 %985, label %826, label %.loopexit76, !llvm.loop !25 - -986: ; preds = %716 - %987 = add nsw i32 %659, 1 - %988 = icmp eq i32 %987, %335 - br i1 %988, label %989, label %1304 - -989: ; preds = %986 - %990 = add nsw i32 %340, %352 - %991 = sext i32 %990 to i64 - %992 = getelementptr inbounds double, ptr %67, i64 %991 - call void @dlasv2_(ptr noundef nonnull %688, ptr noundef %992, ptr noundef nonnull %355, ptr noundef nonnull %34, ptr noundef nonnull %33, ptr noundef nonnull %44, ptr noundef nonnull %39, ptr noundef nonnull %42, ptr noundef nonnull %37) #5 - %993 = load double, ptr %33, align 8, !tbaa !7 - %994 = fcmp olt double %993, 0.000000e+00 - br i1 %994, label %995, label %1003 - -995: ; preds = %989 - %996 = load double, ptr %39, align 8, !tbaa !7 - %997 = fneg double %996 - store double %997, ptr %39, align 8, !tbaa !7 - %998 = load double, ptr %44, align 8, !tbaa !7 - %999 = fneg double %998 - store double %999, ptr %44, align 8, !tbaa !7 - %1000 = fneg double %993 - store double %1000, ptr %33, align 8, !tbaa !7 - %1001 = load double, ptr %34, align 8, !tbaa !7 - %1002 = fneg double %1001 - store double %1002, ptr %34, align 8, !tbaa !7 - br label %1003 - -1003: ; preds = %995, %989 - %1004 = add nsw i32 %332, 1 - %1005 = sub i32 %1004, %659 - store i32 %1005, ptr %22, align 4, !tbaa !3 - call void @drot_(ptr noundef nonnull %22, ptr noundef nonnull %684, ptr noundef nonnull %7, ptr noundef nonnull %344, ptr noundef nonnull %7, ptr noundef nonnull %37, ptr noundef nonnull %42) #5 - %1006 = add i32 %335, 1 - %1007 = sub nsw i32 %1006, %661 - store i32 %1007, ptr %22, align 4, !tbaa !3 - %1008 = add nsw i32 %661, %341 - %1009 = sext i32 %1008 to i64 - %1010 = getelementptr inbounds double, ptr %63, i64 %1009 - %1011 = add nsw i32 %661, %692 + br label %983 + +983: ; preds = %982, %951 + br i1 %99, label %984, label %1010 + +984: ; preds = %983 + %985 = load i32, ptr %3, align 4, !tbaa !3 + %986 = icmp slt i32 %985, 1 + br i1 %986, label %1010, label %987 + +987: ; preds = %984 + %988 = load double, ptr %27, align 8, !tbaa !7 + %989 = mul nsw i64 %841, %322 + %990 = load double, ptr %28, align 8, !tbaa !7 + %991 = mul nsw i64 %830, %322 + %992 = fneg double %990 + %993 = add nuw i32 %985, 1 + %994 = zext i32 %993 to i64 + %995 = getelementptr double, ptr %78, i64 %989 + %996 = getelementptr double, ptr %78, i64 %991 + br label %997 + +997: ; preds = %997, %987 + %998 = phi i64 [ 1, %987 ], [ %1007, %997 ] + %999 = getelementptr double, ptr %995, i64 %998 + %1000 = load double, ptr %999, align 8, !tbaa !7 + %1001 = getelementptr double, ptr %996, i64 %998 + %1002 = load double, ptr %1001, align 8, !tbaa !7 + %1003 = fmul double %990, %1002 + %1004 = call double @llvm.fmuladd.f64(double %988, double %1000, double %1003) + %1005 = fmul double %988, %1002 + %1006 = call double @llvm.fmuladd.f64(double %992, double %1000, double %1005) + store double %1006, ptr %1001, align 8, !tbaa !7 + store double %1004, ptr %999, align 8, !tbaa !7 + %1007 = add nuw nsw i64 %998, 1 + %1008 = icmp eq i64 %1007, %994 + br i1 %1008, label %1009, label %997, !llvm.loop !24 + +1009: ; preds = %997 + store double %1004, ptr %25, align 8, !tbaa !7 + br label %1010 + +1010: ; preds = %1009, %984, %983 + %1011 = load i32, ptr %22, align 4, !tbaa !3 %1012 = sext i32 %1011 to i64 - %1013 = getelementptr inbounds double, ptr %63, i64 %1012 - call void @drot_(ptr noundef nonnull %22, ptr noundef %1010, ptr noundef nonnull @c__1, ptr noundef %1013, ptr noundef nonnull @c__1, ptr noundef nonnull %39, ptr noundef nonnull %44) #5 - %1014 = icmp slt i32 %335, %332 - br i1 %1014, label %1015, label %1024 - -1015: ; preds = %1003 - %1016 = sub nsw i32 %332, %335 - store i32 %1016, ptr %22, align 4, !tbaa !3 - %1017 = mul nsw i32 %1006, %64 - %1018 = add nsw i32 %1017, %340 + %1013 = icmp slt i64 %830, %1012 + %indvars.iv.next165 = add i32 %indvars.iv164, 1 + %indvar.next264 = add i64 %indvar263, 1 + br i1 %1013, label %829, label %.loopexit76, !llvm.loop !25 + +1014: ; preds = %718 + %1015 = add nsw i32 %661, 1 + %1016 = icmp eq i32 %1015, %337 + br i1 %1016, label %1017, label %1332 + +1017: ; preds = %1014 + %1018 = add nsw i32 %342, %354 %1019 = sext i32 %1018 to i64 %1020 = getelementptr inbounds double, ptr %67, i64 %1019 - %1021 = add nsw i32 %1017, %335 - %1022 = sext i32 %1021 to i64 - %1023 = getelementptr inbounds double, ptr %67, i64 %1022 - call void @drot_(ptr noundef nonnull %22, ptr noundef %1020, ptr noundef nonnull %9, ptr noundef %1023, ptr noundef nonnull %9, ptr noundef nonnull %37, ptr noundef nonnull %42) #5 - br label %1024 - -1024: ; preds = %1015, %1003 - %1025 = icmp slt i32 %661, %340 - br i1 %1025, label %1026, label %1034 - -1026: ; preds = %1024 - %1027 = sub nsw i32 %659, %661 - store i32 %1027, ptr %22, align 4, !tbaa !3 - %1028 = add nsw i32 %661, %685 - %1029 = sext i32 %1028 to i64 - %1030 = getelementptr inbounds double, ptr %67, i64 %1029 - %1031 = add nsw i32 %661, %352 - %1032 = sext i32 %1031 to i64 - %1033 = getelementptr inbounds double, ptr %67, i64 %1032 - call void @drot_(ptr noundef nonnull %22, ptr noundef %1030, ptr noundef nonnull @c__1, ptr noundef %1033, ptr noundef nonnull @c__1, ptr noundef nonnull %39, ptr noundef nonnull %44) #5 - br label %1034 - -1034: ; preds = %1026, %1024 - br i1 %87, label %1035, label %1042 - -1035: ; preds = %1034 - %1036 = mul nsw i32 %340, %71 + call void @dlasv2_(ptr noundef nonnull %690, ptr noundef %1020, ptr noundef nonnull %357, ptr noundef nonnull %34, ptr noundef nonnull %33, ptr noundef nonnull %44, ptr noundef nonnull %39, ptr noundef nonnull %42, ptr noundef nonnull %37) #5 + %1021 = load double, ptr %33, align 8, !tbaa !7 + %1022 = fcmp olt double %1021, 0.000000e+00 + br i1 %1022, label %1023, label %1031 + +1023: ; preds = %1017 + %1024 = load double, ptr %39, align 8, !tbaa !7 + %1025 = fneg double %1024 + store double %1025, ptr %39, align 8, !tbaa !7 + %1026 = load double, ptr %44, align 8, !tbaa !7 + %1027 = fneg double %1026 + store double %1027, ptr %44, align 8, !tbaa !7 + %1028 = fneg double %1021 + store double %1028, ptr %33, align 8, !tbaa !7 + %1029 = load double, ptr %34, align 8, !tbaa !7 + %1030 = fneg double %1029 + store double %1030, ptr %34, align 8, !tbaa !7 + br label %1031 + +1031: ; preds = %1023, %1017 + %1032 = add nsw i32 %334, 1 + %1033 = sub i32 %1032, %661 + store i32 %1033, ptr %22, align 4, !tbaa !3 + call void @drot_(ptr noundef nonnull %22, ptr noundef nonnull %686, ptr noundef nonnull %7, ptr noundef nonnull %346, ptr noundef nonnull %7, ptr noundef nonnull %37, ptr noundef nonnull %42) #5 + %1034 = add i32 %337, 1 + %1035 = sub nsw i32 %1034, %663 + store i32 %1035, ptr %22, align 4, !tbaa !3 + %1036 = add nsw i32 %663, %343 %1037 = sext i32 %1036 to i64 - %1038 = getelementptr double, ptr %301, i64 %1037 - %1039 = mul nsw i32 %335, %71 + %1038 = getelementptr inbounds double, ptr %63, i64 %1037 + %1039 = add nsw i32 %663, %694 %1040 = sext i32 %1039 to i64 - %1041 = getelementptr double, ptr %301, i64 %1040 - call void @drot_(ptr noundef nonnull %3, ptr noundef %1038, ptr noundef nonnull @c__1, ptr noundef %1041, ptr noundef nonnull @c__1, ptr noundef nonnull %37, ptr noundef nonnull %42) #5 - br label %1042 - -1042: ; preds = %1035, %1034 - br i1 %99, label %1043, label %1050 - -1043: ; preds = %1042 - %1044 = mul nsw i32 %340, %75 - %1045 = sext i32 %1044 to i64 - %1046 = getelementptr double, ptr %302, i64 %1045 - %1047 = mul nsw i32 %335, %75 - %1048 = sext i32 %1047 to i64 - %1049 = getelementptr double, ptr %302, i64 %1048 - call void @drot_(ptr noundef nonnull %3, ptr noundef %1046, ptr noundef nonnull @c__1, ptr noundef %1049, ptr noundef nonnull @c__1, ptr noundef nonnull %39, ptr noundef nonnull %44) #5 - br label %1050 - -1050: ; preds = %1043, %1042 - %1051 = load double, ptr %33, align 8, !tbaa !7 - store double %1051, ptr %688, align 8, !tbaa !7 - store double 0.000000e+00, ptr %992, align 8, !tbaa !7 - %1052 = add nsw i32 %685, %335 - %1053 = sext i32 %1052 to i64 - %1054 = getelementptr inbounds double, ptr %67, i64 %1053 - store double 0.000000e+00, ptr %1054, align 8, !tbaa !7 - %1055 = load double, ptr %34, align 8, !tbaa !7 - store double %1055, ptr %355, align 8, !tbaa !7 - %1056 = fcmp olt double %1055, 0.000000e+00 - br i1 %1056, label %1057, label %1093 - -1057: ; preds = %1050 - store i32 %335, ptr %22, align 4, !tbaa !3 - %1058 = icmp sgt i32 %661, %335 - br i1 %1058, label %.loopexit78, label %1059 - -1059: ; preds = %1057 - %1060 = sext i32 %661 to i64 - %1061 = sext i32 %692 to i64 - %1062 = sext i32 %352 to i64 - %1063 = getelementptr double, ptr %63, i64 %1061 - %1064 = getelementptr double, ptr %67, i64 %1062 - br label %1065 - -1065: ; preds = %1065, %1059 - %1066 = phi i64 [ %1060, %1059 ], [ %1073, %1065 ] - %1067 = getelementptr double, ptr %1063, i64 %1066 - %1068 = load double, ptr %1067, align 8, !tbaa !7 - %1069 = fneg double %1068 - store double %1069, ptr %1067, align 8, !tbaa !7 - %1070 = getelementptr double, ptr %1064, i64 %1066 - %1071 = load double, ptr %1070, align 8, !tbaa !7 - %1072 = fneg double %1071 - store double %1072, ptr %1070, align 8, !tbaa !7 - %1073 = add nsw i64 %1066, 1 - %1074 = trunc i64 %1073 to i32 - %1075 = icmp eq i32 %1006, %1074 - br i1 %1075, label %.loopexit78, label %1065, !llvm.loop !26 - -.loopexit78: ; preds = %1065, %1057 - br i1 %99, label %1076, label %.loopexit77 - -1076: ; preds = %.loopexit78 - %1077 = load i32, ptr %3, align 4, !tbaa !3 - store i32 %1077, ptr %22, align 4, !tbaa !3 - %1078 = icmp slt i32 %1077, 1 - br i1 %1078, label %.loopexit77, label %1079 - -1079: ; preds = %1076 - %1080 = mul nsw i32 %335, %75 + %1041 = getelementptr inbounds double, ptr %63, i64 %1040 + call void @drot_(ptr noundef nonnull %22, ptr noundef %1038, ptr noundef nonnull @c__1, ptr noundef %1041, ptr noundef nonnull @c__1, ptr noundef nonnull %39, ptr noundef nonnull %44) #5 + %1042 = icmp slt i32 %337, %334 + br i1 %1042, label %1043, label %1052 + +1043: ; preds = %1031 + %1044 = sub nsw i32 %334, %337 + store i32 %1044, ptr %22, align 4, !tbaa !3 + %1045 = mul nsw i32 %1034, %64 + %1046 = add nsw i32 %1045, %342 + %1047 = sext i32 %1046 to i64 + %1048 = getelementptr inbounds double, ptr %67, i64 %1047 + %1049 = add nsw i32 %1045, %337 + %1050 = sext i32 %1049 to i64 + %1051 = getelementptr inbounds double, ptr %67, i64 %1050 + call void @drot_(ptr noundef nonnull %22, ptr noundef %1048, ptr noundef nonnull %9, ptr noundef %1051, ptr noundef nonnull %9, ptr noundef nonnull %37, ptr noundef nonnull %42) #5 + br label %1052 + +1052: ; preds = %1043, %1031 + %1053 = icmp slt i32 %663, %342 + br i1 %1053, label %1054, label %1062 + +1054: ; preds = %1052 + %1055 = sub nsw i32 %661, %663 + store i32 %1055, ptr %22, align 4, !tbaa !3 + %1056 = add nsw i32 %663, %687 + %1057 = sext i32 %1056 to i64 + %1058 = getelementptr inbounds double, ptr %67, i64 %1057 + %1059 = add nsw i32 %663, %354 + %1060 = sext i32 %1059 to i64 + %1061 = getelementptr inbounds double, ptr %67, i64 %1060 + call void @drot_(ptr noundef nonnull %22, ptr noundef %1058, ptr noundef nonnull @c__1, ptr noundef %1061, ptr noundef nonnull @c__1, ptr noundef nonnull %39, ptr noundef nonnull %44) #5 + br label %1062 + +1062: ; preds = %1054, %1052 + br i1 %87, label %1063, label %1070 + +1063: ; preds = %1062 + %1064 = mul nsw i32 %342, %71 + %1065 = sext i32 %1064 to i64 + %1066 = getelementptr double, ptr %301, i64 %1065 + %1067 = mul nsw i32 %337, %71 + %1068 = sext i32 %1067 to i64 + %1069 = getelementptr double, ptr %301, i64 %1068 + call void @drot_(ptr noundef nonnull %3, ptr noundef %1066, ptr noundef nonnull @c__1, ptr noundef %1069, ptr noundef nonnull @c__1, ptr noundef nonnull %37, ptr noundef nonnull %42) #5 + br label %1070 + +1070: ; preds = %1063, %1062 + br i1 %99, label %1071, label %1078 + +1071: ; preds = %1070 + %1072 = mul nsw i32 %342, %75 + %1073 = sext i32 %1072 to i64 + %1074 = getelementptr double, ptr %302, i64 %1073 + %1075 = mul nsw i32 %337, %75 + %1076 = sext i32 %1075 to i64 + %1077 = getelementptr double, ptr %302, i64 %1076 + call void @drot_(ptr noundef nonnull %3, ptr noundef %1074, ptr noundef nonnull @c__1, ptr noundef %1077, ptr noundef nonnull @c__1, ptr noundef nonnull %39, ptr noundef nonnull %44) #5 + br label %1078 + +1078: ; preds = %1071, %1070 + %1079 = load double, ptr %33, align 8, !tbaa !7 + store double %1079, ptr %690, align 8, !tbaa !7 + store double 0.000000e+00, ptr %1020, align 8, !tbaa !7 + %1080 = add nsw i32 %687, %337 %1081 = sext i32 %1080 to i64 - %1082 = add nuw i32 %1077, 1 - %1083 = zext i32 %1082 to i64 - %1084 = getelementptr double, ptr %78, i64 %1081 - br label %1085 - -1085: ; preds = %1085, %1079 - %1086 = phi i64 [ 1, %1079 ], [ %1090, %1085 ] - %1087 = getelementptr double, ptr %1084, i64 %1086 - %1088 = load double, ptr %1087, align 8, !tbaa !7 - %1089 = fneg double %1088 - store double %1089, ptr %1087, align 8, !tbaa !7 - %1090 = add nuw nsw i64 %1086, 1 - %1091 = icmp eq i64 %1090, %1083 - br i1 %1091, label %.loopexit77, label %1085, !llvm.loop !27 - -.loopexit77: ; preds = %1085, %1076, %.loopexit78 - %1092 = fneg double %1055 - store double %1092, ptr %34, align 8, !tbaa !7 + %1082 = getelementptr inbounds double, ptr %67, i64 %1081 + store double 0.000000e+00, ptr %1082, align 8, !tbaa !7 + %1083 = load double, ptr %34, align 8, !tbaa !7 + store double %1083, ptr %357, align 8, !tbaa !7 + %1084 = fcmp olt double %1083, 0.000000e+00 + br i1 %1084, label %1085, label %1121 + +1085: ; preds = %1078 + store i32 %337, ptr %22, align 4, !tbaa !3 + %1086 = icmp sgt i32 %663, %337 + br i1 %1086, label %.loopexit78, label %1087 + +1087: ; preds = %1085 + %1088 = sext i32 %663 to i64 + %1089 = sext i32 %694 to i64 + %1090 = sext i32 %354 to i64 + %1091 = getelementptr double, ptr %63, i64 %1089 + %1092 = getelementptr double, ptr %67, i64 %1090 br label %1093 -1093: ; preds = %.loopexit77, %1050 +1093: ; preds = %1093, %1087 + %1094 = phi i64 [ %1088, %1087 ], [ %1101, %1093 ] + %1095 = getelementptr double, ptr %1091, i64 %1094 + %1096 = load double, ptr %1095, align 8, !tbaa !7 + %1097 = fneg double %1096 + store double %1097, ptr %1095, align 8, !tbaa !7 + %1098 = getelementptr double, ptr %1092, i64 %1094 + %1099 = load double, ptr %1098, align 8, !tbaa !7 + %1100 = fneg double %1099 + store double %1100, ptr %1098, align 8, !tbaa !7 + %1101 = add nsw i64 %1094, 1 + %1102 = trunc i64 %1101 to i32 + %1103 = icmp eq i32 %1034, %1102 + br i1 %1103, label %.loopexit78, label %1093, !llvm.loop !26 + +.loopexit78: ; preds = %1093, %1085 + br i1 %99, label %1104, label %.loopexit77 + +1104: ; preds = %.loopexit78 + %1105 = load i32, ptr %3, align 4, !tbaa !3 + store i32 %1105, ptr %22, align 4, !tbaa !3 + %1106 = icmp slt i32 %1105, 1 + br i1 %1106, label %.loopexit77, label %1107 + +1107: ; preds = %1104 + %1108 = mul nsw i32 %337, %75 + %1109 = sext i32 %1108 to i64 + %1110 = add nuw i32 %1105, 1 + %1111 = zext i32 %1110 to i64 + %1112 = getelementptr double, ptr %78, i64 %1109 + br label %1113 + +1113: ; preds = %1113, %1107 + %1114 = phi i64 [ 1, %1107 ], [ %1118, %1113 ] + %1115 = getelementptr double, ptr %1112, i64 %1114 + %1116 = load double, ptr %1115, align 8, !tbaa !7 + %1117 = fneg double %1116 + store double %1117, ptr %1115, align 8, !tbaa !7 + %1118 = add nuw nsw i64 %1114, 1 + %1119 = icmp eq i64 %1118, %1111 + br i1 %1119, label %.loopexit77, label %1113, !llvm.loop !27 + +.loopexit77: ; preds = %1113, %1104, %.loopexit78 + %1120 = fneg double %1083 + store double %1120, ptr %34, align 8, !tbaa !7 + br label %1121 + +1121: ; preds = %.loopexit77, %1078 store double %309, ptr %24, align 8, !tbaa !7 - call void @dlag2_(ptr noundef %684, ptr noundef nonnull %7, ptr noundef nonnull %688, ptr noundef nonnull %9, ptr noundef nonnull %24, ptr noundef nonnull %31, ptr noundef nonnull %25, ptr noundef nonnull %45, ptr noundef nonnull %26, ptr noundef nonnull %43) #5 - %1094 = load double, ptr %43, align 8, !tbaa !7 - %1095 = fcmp oeq double %1094, 0.000000e+00 - br i1 %1095, label %.loopexit76, label %1096 - -1096: ; preds = %1093 - %1097 = load double, ptr %31, align 8, !tbaa !7 - %1098 = fdiv double 1.000000e+00, %1097 - %1099 = load double, ptr %684, align 8, !tbaa !7 - %1100 = load double, ptr %344, align 8, !tbaa !7 - %1101 = add nsw i32 %340, %692 - %1102 = sext i32 %1101 to i64 - %1103 = getelementptr inbounds double, ptr %63, i64 %1102 - %1104 = load double, ptr %1103, align 8, !tbaa !7 - %1105 = load double, ptr %695, align 8, !tbaa !7 - %1106 = load double, ptr %45, align 8, !tbaa !7 - %1107 = load double, ptr %33, align 8, !tbaa !7 - %1108 = fneg double %1106 - %1109 = fmul double %1107, %1108 - %1110 = call double @llvm.fmuladd.f64(double %1097, double %1099, double %1109) - store double %1110, ptr %55, align 8, !tbaa !7 - %1111 = fneg double %1094 - %1112 = fmul double %1107, %1111 - store double %1112, ptr %53, align 8, !tbaa !7 - %1113 = fmul double %1097, %1100 - store double %1113, ptr %36, align 8, !tbaa !7 - %1114 = load double, ptr %34, align 8, !tbaa !7 - %1115 = fmul double %1114, %1108 - %1116 = call double @llvm.fmuladd.f64(double %1097, double %1105, double %1115) - store double %1116, ptr %56, align 8, !tbaa !7 - %1117 = insertelement <2 x double> poison, double %1112, i64 0 - %1118 = insertelement <2 x double> %1117, double %1110, i64 1 - %1119 = fcmp oge <2 x double> %1118, zeroinitializer - %1120 = fneg <2 x double> %1118 - %1121 = select <2 x i1> %1119, <2 x double> %1118, <2 x double> %1120 - %1122 = insertelement <2 x double> poison, double %1113, i64 0 - %1123 = insertelement <2 x double> %1122, double %1116, i64 1 - %1124 = fcmp oge <2 x double> %1123, zeroinitializer - %1125 = fneg <2 x double> %1123 - %1126 = select <2 x i1> %1124, <2 x double> %1123, <2 x double> %1125 - %1127 = insertelement <2 x double> poison, double %1097, i64 0 - %1128 = insertelement <2 x double> %1127, double %1114, i64 1 - %1129 = insertelement <2 x double> poison, double %1104, i64 0 - %1130 = insertelement <2 x double> %1129, double %1111, i64 1 - %1131 = fmul <2 x double> %1128, %1130 - %1132 = extractelement <2 x double> %1131, i64 0 - store double %1132, ptr %35, align 8, !tbaa !7 - %1133 = extractelement <2 x double> %1131, i64 1 - store double %1133, ptr %54, align 8, !tbaa !7 - %1134 = shufflevector <2 x double> %1121, <2 x double> %1126, <2 x i32> - %1135 = shufflevector <2 x double> %1121, <2 x double> %1126, <2 x i32> - %1136 = fadd <2 x double> %1134, %1135 - %1137 = fcmp oge <2 x double> %1131, zeroinitializer - %1138 = fneg <2 x double> %1131 - %1139 = select <2 x i1> %1137, <2 x double> %1131, <2 x double> %1138 - %1140 = fadd <2 x double> %1139, %1136 - %shift253 = shufflevector <2 x double> %1140, <2 x double> poison, <2 x i32> - %1141 = fcmp ogt <2 x double> %1140, %shift253 - %1142 = extractelement <2 x i1> %1141, i64 0 - br i1 %1142, label %1143, label %1157 - -1143: ; preds = %1096 - %1144 = call double @dlapy3_(ptr noundef nonnull %35, ptr noundef nonnull %55, ptr noundef nonnull %53) #5 - %1145 = load double, ptr %35, align 8, !tbaa !7 - %1146 = load double, ptr %55, align 8, !tbaa !7 - %1147 = fneg double %1146 - %1148 = fdiv double %1147, %1144 - %1149 = load double, ptr %53, align 8, !tbaa !7 - %1150 = fneg double %1149 - %1151 = insertelement <2 x double> poison, double %1145, i64 0 - %1152 = insertelement <2 x double> %1151, double %1150, i64 1 - %1153 = insertelement <2 x double> poison, double %1144, i64 0 - %1154 = shufflevector <2 x double> %1153, <2 x double> poison, <2 x i32> zeroinitializer - %1155 = fdiv <2 x double> %1152, %1154 - %1156 = extractelement <2 x double> %1155, i64 0 - store double %1156, ptr %41, align 8, !tbaa !7 - br label %1180 - -1157: ; preds = %1096 - %1158 = call double @dlapy2_(ptr noundef nonnull %56, ptr noundef nonnull %54) #5 - store double %1158, ptr %41, align 8, !tbaa !7 - %1159 = fcmp ugt double %1158, %168 - br i1 %1159, label %1161, label %1160 - -1160: ; preds = %1157 + call void @dlag2_(ptr noundef %686, ptr noundef nonnull %7, ptr noundef nonnull %690, ptr noundef nonnull %9, ptr noundef nonnull %24, ptr noundef nonnull %31, ptr noundef nonnull %25, ptr noundef nonnull %45, ptr noundef nonnull %26, ptr noundef nonnull %43) #5 + %1122 = load double, ptr %43, align 8, !tbaa !7 + %1123 = fcmp oeq double %1122, 0.000000e+00 + br i1 %1123, label %.loopexit76, label %1124 + +1124: ; preds = %1121 + %1125 = load double, ptr %31, align 8, !tbaa !7 + %1126 = fdiv double 1.000000e+00, %1125 + %1127 = load double, ptr %686, align 8, !tbaa !7 + %1128 = load double, ptr %346, align 8, !tbaa !7 + %1129 = add nsw i32 %342, %694 + %1130 = sext i32 %1129 to i64 + %1131 = getelementptr inbounds double, ptr %63, i64 %1130 + %1132 = load double, ptr %1131, align 8, !tbaa !7 + %1133 = load double, ptr %697, align 8, !tbaa !7 + %1134 = load double, ptr %45, align 8, !tbaa !7 + %1135 = load double, ptr %33, align 8, !tbaa !7 + %1136 = fneg double %1134 + %1137 = fmul double %1135, %1136 + %1138 = call double @llvm.fmuladd.f64(double %1125, double %1127, double %1137) + store double %1138, ptr %55, align 8, !tbaa !7 + %1139 = fneg double %1122 + %1140 = fmul double %1135, %1139 + store double %1140, ptr %53, align 8, !tbaa !7 + %1141 = fmul double %1125, %1128 + store double %1141, ptr %36, align 8, !tbaa !7 + %1142 = load double, ptr %34, align 8, !tbaa !7 + %1143 = fmul double %1142, %1136 + %1144 = call double @llvm.fmuladd.f64(double %1125, double %1133, double %1143) + store double %1144, ptr %56, align 8, !tbaa !7 + %1145 = insertelement <2 x double> poison, double %1140, i64 0 + %1146 = insertelement <2 x double> %1145, double %1138, i64 1 + %1147 = fcmp oge <2 x double> %1146, zeroinitializer + %1148 = fneg <2 x double> %1146 + %1149 = select <2 x i1> %1147, <2 x double> %1146, <2 x double> %1148 + %1150 = insertelement <2 x double> poison, double %1141, i64 0 + %1151 = insertelement <2 x double> %1150, double %1144, i64 1 + %1152 = fcmp oge <2 x double> %1151, zeroinitializer + %1153 = fneg <2 x double> %1151 + %1154 = select <2 x i1> %1152, <2 x double> %1151, <2 x double> %1153 + %1155 = insertelement <2 x double> poison, double %1125, i64 0 + %1156 = insertelement <2 x double> %1155, double %1142, i64 1 + %1157 = insertelement <2 x double> poison, double %1132, i64 0 + %1158 = insertelement <2 x double> %1157, double %1139, i64 1 + %1159 = fmul <2 x double> %1156, %1158 + %1160 = extractelement <2 x double> %1159, i64 0 + store double %1160, ptr %35, align 8, !tbaa !7 + %1161 = extractelement <2 x double> %1159, i64 1 + store double %1161, ptr %54, align 8, !tbaa !7 + %1162 = shufflevector <2 x double> %1149, <2 x double> %1154, <2 x i32> + %1163 = shufflevector <2 x double> %1149, <2 x double> %1154, <2 x i32> + %1164 = fadd <2 x double> %1162, %1163 + %1165 = fcmp oge <2 x double> %1159, zeroinitializer + %1166 = fneg <2 x double> %1159 + %1167 = select <2 x i1> %1165, <2 x double> %1159, <2 x double> %1166 + %1168 = fadd <2 x double> %1167, %1164 + %shift286 = shufflevector <2 x double> %1168, <2 x double> poison, <2 x i32> + %1169 = fcmp ogt <2 x double> %1168, %shift286 + %1170 = extractelement <2 x i1> %1169, i64 0 + br i1 %1170, label %1171, label %1185 + +1171: ; preds = %1124 + %1172 = call double @dlapy3_(ptr noundef nonnull %35, ptr noundef nonnull %55, ptr noundef nonnull %53) #5 + %1173 = load double, ptr %35, align 8, !tbaa !7 + %1174 = load double, ptr %55, align 8, !tbaa !7 + %1175 = fneg double %1174 + %1176 = fdiv double %1175, %1172 + %1177 = load double, ptr %53, align 8, !tbaa !7 + %1178 = fneg double %1177 + %1179 = insertelement <2 x double> poison, double %1173, i64 0 + %1180 = insertelement <2 x double> %1179, double %1178, i64 1 + %1181 = insertelement <2 x double> poison, double %1172, i64 0 + %1182 = shufflevector <2 x double> %1181, <2 x double> poison, <2 x i32> zeroinitializer + %1183 = fdiv <2 x double> %1180, %1182 + %1184 = extractelement <2 x double> %1183, i64 0 + store double %1184, ptr %41, align 8, !tbaa !7 + br label %1208 + +1185: ; preds = %1124 + %1186 = call double @dlapy2_(ptr noundef nonnull %56, ptr noundef nonnull %54) #5 + store double %1186, ptr %41, align 8, !tbaa !7 + %1187 = fcmp ugt double %1186, %168 + br i1 %1187, label %1189, label %1188 + +1188: ; preds = %1185 store double 0.000000e+00, ptr %41, align 8, !tbaa !7 - br label %1180 - -1161: ; preds = %1157 - %1162 = load double, ptr %56, align 8, !tbaa !7 - %1163 = fdiv double %1162, %1158 - store double %1163, ptr %30, align 8, !tbaa !7 - %1164 = load double, ptr %54, align 8, !tbaa !7 - %1165 = fdiv double %1164, %1158 - %1166 = call double @dlapy2_(ptr noundef nonnull %41, ptr noundef nonnull %36) #5 - %1167 = load double, ptr %41, align 8, !tbaa !7 - %1168 = load double, ptr %36, align 8, !tbaa !7 - %1169 = fneg double %1168 - %1170 = load double, ptr %30, align 8, !tbaa !7 - %1171 = fmul double %1170, %1169 - %1172 = fdiv double %1171, %1166 - %1173 = fmul double %1165, %1168 - %1174 = insertelement <2 x double> poison, double %1167, i64 0 - %1175 = insertelement <2 x double> %1174, double %1173, i64 1 - %1176 = insertelement <2 x double> poison, double %1166, i64 0 - %1177 = shufflevector <2 x double> %1176, <2 x double> poison, <2 x i32> zeroinitializer - %1178 = fdiv <2 x double> %1175, %1177 - %1179 = extractelement <2 x double> %1178, i64 0 - store double %1179, ptr %41, align 8, !tbaa !7 - br label %1180 - -1180: ; preds = %1161, %1160, %1143 - %1181 = phi double [ %1148, %1143 ], [ 1.000000e+00, %1160 ], [ %1172, %1161 ] - %1182 = phi <2 x double> [ %1155, %1143 ], [ zeroinitializer, %1160 ], [ %1178, %1161 ] - %1183 = fcmp oge double %1099, 0.000000e+00 - %1184 = fneg double %1099 - %1185 = select i1 %1183, double %1099, double %1184 - %1186 = fcmp oge double %1104, 0.000000e+00 - %1187 = fneg double %1104 - %1188 = select i1 %1186, double %1104, double %1187 - %1189 = fadd double %1185, %1188 - %1190 = fcmp oge double %1100, 0.000000e+00 - %1191 = fneg double %1100 - %1192 = select i1 %1190, double %1100, double %1191 - %1193 = fadd double %1192, %1189 - %1194 = fcmp oge double %1105, 0.000000e+00 - %1195 = fneg double %1105 - %1196 = select i1 %1194, double %1105, double %1195 - %1197 = fadd double %1196, %1193 - %1198 = load double, ptr %33, align 8 - %1199 = fcmp oge double %1198, 0.000000e+00 - %1200 = fneg double %1198 - %1201 = select i1 %1199, double %1198, double %1200 - %1202 = load double, ptr %34, align 8 - %1203 = fcmp oge double %1202, 0.000000e+00 - %1204 = fneg double %1202 - %1205 = select i1 %1203, double %1202, double %1204 - %1206 = fadd double %1201, %1205 - %1207 = load double, ptr %45, align 8 - %1208 = fcmp oge double %1207, 0.000000e+00 - %1209 = fneg double %1207 - %1210 = select i1 %1208, double %1207, double %1209 - %1211 = load double, ptr %43, align 8 - %1212 = fcmp oge double %1211, 0.000000e+00 - %1213 = fneg double %1211 - %1214 = select i1 %1212, double %1211, double %1213 - %1215 = fadd double %1210, %1214 - %1216 = load double, ptr %31, align 8, !tbaa !7 - %1217 = fmul double %1197, %1216 - %1218 = fmul double %1206, %1215 - %1219 = fcmp ogt double %1217, %1218 - br i1 %1219, label %1220, label %1227 - -1220: ; preds = %1180 - %1221 = extractelement <2 x double> %1182, i64 0 - %1222 = fmul double %1198, %1221 - store double %1222, ptr %38, align 8, !tbaa !7 - %1223 = fmul double %1181, %1202 - store double %1223, ptr %59, align 8, !tbaa !7 - %1224 = extractelement <2 x double> %1182, i64 1 - %1225 = fneg double %1224 - %1226 = fmul double %1202, %1225 - store double %1226, ptr %58, align 8, !tbaa !7 - br label %1249 - -1227: ; preds = %1180 - %1228 = fmul double %1104, %1181 - %1229 = extractelement <2 x double> %1182, i64 0 - %1230 = call double @llvm.fmuladd.f64(double %1229, double %1099, double %1228) - store double %1230, ptr %49, align 8, !tbaa !7 - %1231 = extractelement <2 x double> %1182, i64 1 - %1232 = fmul double %1104, %1231 - store double %1232, ptr %46, align 8, !tbaa !7 - %1233 = call double @dlapy2_(ptr noundef nonnull %49, ptr noundef nonnull %46) #5 - store double %1233, ptr %38, align 8, !tbaa !7 - %1234 = fcmp ugt double %1233, %168 - br i1 %1234, label %1236, label %1235 - -1235: ; preds = %1227 + br label %1208 + +1189: ; preds = %1185 + %1190 = load double, ptr %56, align 8, !tbaa !7 + %1191 = fdiv double %1190, %1186 + store double %1191, ptr %30, align 8, !tbaa !7 + %1192 = load double, ptr %54, align 8, !tbaa !7 + %1193 = fdiv double %1192, %1186 + %1194 = call double @dlapy2_(ptr noundef nonnull %41, ptr noundef nonnull %36) #5 + %1195 = load double, ptr %41, align 8, !tbaa !7 + %1196 = load double, ptr %36, align 8, !tbaa !7 + %1197 = fneg double %1196 + %1198 = load double, ptr %30, align 8, !tbaa !7 + %1199 = fmul double %1198, %1197 + %1200 = fdiv double %1199, %1194 + %1201 = fmul double %1193, %1196 + %1202 = insertelement <2 x double> poison, double %1195, i64 0 + %1203 = insertelement <2 x double> %1202, double %1201, i64 1 + %1204 = insertelement <2 x double> poison, double %1194, i64 0 + %1205 = shufflevector <2 x double> %1204, <2 x double> poison, <2 x i32> zeroinitializer + %1206 = fdiv <2 x double> %1203, %1205 + %1207 = extractelement <2 x double> %1206, i64 0 + store double %1207, ptr %41, align 8, !tbaa !7 + br label %1208 + +1208: ; preds = %1189, %1188, %1171 + %1209 = phi double [ %1176, %1171 ], [ 1.000000e+00, %1188 ], [ %1200, %1189 ] + %1210 = phi <2 x double> [ %1183, %1171 ], [ zeroinitializer, %1188 ], [ %1206, %1189 ] + %1211 = fcmp oge double %1127, 0.000000e+00 + %1212 = fneg double %1127 + %1213 = select i1 %1211, double %1127, double %1212 + %1214 = fcmp oge double %1132, 0.000000e+00 + %1215 = fneg double %1132 + %1216 = select i1 %1214, double %1132, double %1215 + %1217 = fadd double %1213, %1216 + %1218 = fcmp oge double %1128, 0.000000e+00 + %1219 = fneg double %1128 + %1220 = select i1 %1218, double %1128, double %1219 + %1221 = fadd double %1220, %1217 + %1222 = fcmp oge double %1133, 0.000000e+00 + %1223 = fneg double %1133 + %1224 = select i1 %1222, double %1133, double %1223 + %1225 = fadd double %1224, %1221 + %1226 = load double, ptr %33, align 8 + %1227 = fcmp oge double %1226, 0.000000e+00 + %1228 = fneg double %1226 + %1229 = select i1 %1227, double %1226, double %1228 + %1230 = load double, ptr %34, align 8 + %1231 = fcmp oge double %1230, 0.000000e+00 + %1232 = fneg double %1230 + %1233 = select i1 %1231, double %1230, double %1232 + %1234 = fadd double %1229, %1233 + %1235 = load double, ptr %45, align 8 + %1236 = fcmp oge double %1235, 0.000000e+00 + %1237 = fneg double %1235 + %1238 = select i1 %1236, double %1235, double %1237 + %1239 = load double, ptr %43, align 8 + %1240 = fcmp oge double %1239, 0.000000e+00 + %1241 = fneg double %1239 + %1242 = select i1 %1240, double %1239, double %1241 + %1243 = fadd double %1238, %1242 + %1244 = load double, ptr %31, align 8, !tbaa !7 + %1245 = fmul double %1225, %1244 + %1246 = fmul double %1234, %1243 + %1247 = fcmp ogt double %1245, %1246 + br i1 %1247, label %1248, label %1255 + +1248: ; preds = %1208 + %1249 = extractelement <2 x double> %1210, i64 0 + %1250 = fmul double %1226, %1249 + store double %1250, ptr %38, align 8, !tbaa !7 + %1251 = fmul double %1209, %1230 + store double %1251, ptr %59, align 8, !tbaa !7 + %1252 = extractelement <2 x double> %1210, i64 1 + %1253 = fneg double %1252 + %1254 = fmul double %1230, %1253 + store double %1254, ptr %58, align 8, !tbaa !7 + br label %1277 + +1255: ; preds = %1208 + %1256 = fmul double %1132, %1209 + %1257 = extractelement <2 x double> %1210, i64 0 + %1258 = call double @llvm.fmuladd.f64(double %1257, double %1127, double %1256) + store double %1258, ptr %49, align 8, !tbaa !7 + %1259 = extractelement <2 x double> %1210, i64 1 + %1260 = fmul double %1132, %1259 + store double %1260, ptr %46, align 8, !tbaa !7 + %1261 = call double @dlapy2_(ptr noundef nonnull %49, ptr noundef nonnull %46) #5 + store double %1261, ptr %38, align 8, !tbaa !7 + %1262 = fcmp ugt double %1261, %168 + br i1 %1262, label %1264, label %1263 + +1263: ; preds = %1255 store double 0.000000e+00, ptr %38, align 8, !tbaa !7 store double 1.000000e+00, ptr %59, align 8, !tbaa !7 store double 0.000000e+00, ptr %58, align 8, !tbaa !7 - br label %1249 - -1236: ; preds = %1227 - %1237 = fmul double %1105, %1231 - %1238 = fmul double %1105, %1181 - %1239 = call double @llvm.fmuladd.f64(double %1229, double %1100, double %1238) - %1240 = load double, ptr %49, align 8, !tbaa !7 - %1241 = fdiv double %1240, %1233 - store double %1241, ptr %30, align 8, !tbaa !7 - %1242 = load double, ptr %46, align 8, !tbaa !7 - %1243 = fdiv double %1242, %1233 - %1244 = fmul double %1237, %1243 - %1245 = call double @llvm.fmuladd.f64(double %1241, double %1239, double %1244) - store double %1245, ptr %59, align 8, !tbaa !7 - %1246 = fneg double %1241 - %1247 = fmul double %1237, %1246 - %1248 = call double @llvm.fmuladd.f64(double %1243, double %1239, double %1247) - store double %1248, ptr %58, align 8, !tbaa !7 - br label %1249 - -1249: ; preds = %1236, %1235, %1220 - %1250 = call double @dlapy3_(ptr noundef nonnull %38, ptr noundef nonnull %59, ptr noundef nonnull %58) #5 - %1251 = load double, ptr %38, align 8, !tbaa !7 - %1252 = fdiv double %1251, %1250 - store double %1252, ptr %38, align 8, !tbaa !7 - %1253 = load double, ptr %59, align 8, !tbaa !7 - %1254 = fdiv double %1253, %1250 - store double %1254, ptr %59, align 8, !tbaa !7 - %1255 = load double, ptr %58, align 8, !tbaa !7 - %1256 = fdiv double %1255, %1250 - store double %1256, ptr %58, align 8, !tbaa !7 - %1257 = fneg double %1256 - %1258 = extractelement <2 x double> %1182, i64 1 - %1259 = fmul double %1258, %1257 - %1260 = call double @llvm.fmuladd.f64(double %1254, double %1181, double %1259) - store double %1260, ptr %30, align 8, !tbaa !7 - %1261 = fmul double %1181, %1256 - %1262 = call double @llvm.fmuladd.f64(double %1254, double %1258, double %1261) - %1263 = load double, ptr %41, align 8, !tbaa !7 - %1264 = fmul double %1252, %1263 - %1265 = load double, ptr %33, align 8, !tbaa !7 - %1266 = load double, ptr %34, align 8, !tbaa !7 - %1267 = fmul double %1260, %1266 - %1268 = call double @llvm.fmuladd.f64(double %1264, double %1265, double %1267) - store double %1268, ptr %50, align 8, !tbaa !7 - %1269 = fmul double %1262, %1266 - store double %1269, ptr %47, align 8, !tbaa !7 - %1270 = call double @dlapy2_(ptr noundef nonnull %50, ptr noundef nonnull %47) #5 - %1271 = load double, ptr %38, align 8, !tbaa !7 - %1272 = load double, ptr %41, align 8, !tbaa !7 - %1273 = fmul double %1271, %1272 - %1274 = load double, ptr %34, align 8, !tbaa !7 - %1275 = load double, ptr %30, align 8, !tbaa !7 - %1276 = load double, ptr %33, align 8, !tbaa !7 - %1277 = fmul double %1275, %1276 - %1278 = call double @llvm.fmuladd.f64(double %1273, double %1274, double %1277) - store double %1278, ptr %51, align 8, !tbaa !7 - %1279 = fneg double %1262 - %1280 = fmul double %1276, %1279 - store double %1280, ptr %48, align 8, !tbaa !7 - %1281 = call double @dlapy2_(ptr noundef nonnull %51, ptr noundef nonnull %48) #5 - %1282 = sext i32 %340 to i64 - %1283 = getelementptr inbounds double, ptr %70, i64 %1282 - store double %1270, ptr %1283, align 8, !tbaa !7 - %1284 = getelementptr inbounds double, ptr %70, i64 %365 - store double %1281, ptr %1284, align 8, !tbaa !7 - %1285 = load double, ptr %45, align 8, !tbaa !7 - %1286 = fmul double %1270, %1285 - %1287 = fmul double %1098, %1286 - %1288 = getelementptr inbounds double, ptr %68, i64 %1282 - store double %1287, ptr %1288, align 8, !tbaa !7 - %1289 = load double, ptr %43, align 8, !tbaa !7 - %1290 = fmul double %1270, %1289 - %1291 = fmul double %1098, %1290 - %1292 = getelementptr inbounds double, ptr %69, i64 %1282 - store double %1291, ptr %1292, align 8, !tbaa !7 - %1293 = fmul double %1281, %1285 - %1294 = fmul double %1098, %1293 - %1295 = getelementptr inbounds double, ptr %68, i64 %365 - store double %1294, ptr %1295, align 8, !tbaa !7 - %1296 = fneg double %1289 - %1297 = fmul double %1281, %1296 - %1298 = fmul double %1098, %1297 - %1299 = getelementptr inbounds double, ptr %69, i64 %365 - store double %1298, ptr %1299, align 8, !tbaa !7 - %1300 = load i32, ptr %4, align 4, !tbaa !3 - %1301 = icmp sgt i32 %659, %1300 - br i1 %1301, label %1302, label %.loopexit83 - -1302: ; preds = %1249 - %1303 = add nsw i32 %659, -1 - %spec.select = select i1 %80, i32 %332, i32 %1303 - %spec.select69 = select i1 %80, i32 %331, i32 %1300 + br label %1277 + +1264: ; preds = %1255 + %1265 = fmul double %1133, %1259 + %1266 = fmul double %1133, %1209 + %1267 = call double @llvm.fmuladd.f64(double %1257, double %1128, double %1266) + %1268 = load double, ptr %49, align 8, !tbaa !7 + %1269 = fdiv double %1268, %1261 + store double %1269, ptr %30, align 8, !tbaa !7 + %1270 = load double, ptr %46, align 8, !tbaa !7 + %1271 = fdiv double %1270, %1261 + %1272 = fmul double %1265, %1271 + %1273 = call double @llvm.fmuladd.f64(double %1269, double %1267, double %1272) + store double %1273, ptr %59, align 8, !tbaa !7 + %1274 = fneg double %1269 + %1275 = fmul double %1265, %1274 + %1276 = call double @llvm.fmuladd.f64(double %1271, double %1267, double %1275) + store double %1276, ptr %58, align 8, !tbaa !7 + br label %1277 + +1277: ; preds = %1264, %1263, %1248 + %1278 = call double @dlapy3_(ptr noundef nonnull %38, ptr noundef nonnull %59, ptr noundef nonnull %58) #5 + %1279 = load double, ptr %38, align 8, !tbaa !7 + %1280 = fdiv double %1279, %1278 + store double %1280, ptr %38, align 8, !tbaa !7 + %1281 = load double, ptr %59, align 8, !tbaa !7 + %1282 = fdiv double %1281, %1278 + store double %1282, ptr %59, align 8, !tbaa !7 + %1283 = load double, ptr %58, align 8, !tbaa !7 + %1284 = fdiv double %1283, %1278 + store double %1284, ptr %58, align 8, !tbaa !7 + %1285 = fneg double %1284 + %1286 = extractelement <2 x double> %1210, i64 1 + %1287 = fmul double %1286, %1285 + %1288 = call double @llvm.fmuladd.f64(double %1282, double %1209, double %1287) + store double %1288, ptr %30, align 8, !tbaa !7 + %1289 = fmul double %1209, %1284 + %1290 = call double @llvm.fmuladd.f64(double %1282, double %1286, double %1289) + %1291 = load double, ptr %41, align 8, !tbaa !7 + %1292 = fmul double %1280, %1291 + %1293 = load double, ptr %33, align 8, !tbaa !7 + %1294 = load double, ptr %34, align 8, !tbaa !7 + %1295 = fmul double %1288, %1294 + %1296 = call double @llvm.fmuladd.f64(double %1292, double %1293, double %1295) + store double %1296, ptr %50, align 8, !tbaa !7 + %1297 = fmul double %1290, %1294 + store double %1297, ptr %47, align 8, !tbaa !7 + %1298 = call double @dlapy2_(ptr noundef nonnull %50, ptr noundef nonnull %47) #5 + %1299 = load double, ptr %38, align 8, !tbaa !7 + %1300 = load double, ptr %41, align 8, !tbaa !7 + %1301 = fmul double %1299, %1300 + %1302 = load double, ptr %34, align 8, !tbaa !7 + %1303 = load double, ptr %30, align 8, !tbaa !7 + %1304 = load double, ptr %33, align 8, !tbaa !7 + %1305 = fmul double %1303, %1304 + %1306 = call double @llvm.fmuladd.f64(double %1301, double %1302, double %1305) + store double %1306, ptr %51, align 8, !tbaa !7 + %1307 = fneg double %1290 + %1308 = fmul double %1304, %1307 + store double %1308, ptr %48, align 8, !tbaa !7 + %1309 = call double @dlapy2_(ptr noundef nonnull %51, ptr noundef nonnull %48) #5 + %1310 = sext i32 %342 to i64 + %1311 = getelementptr inbounds double, ptr %70, i64 %1310 + store double %1298, ptr %1311, align 8, !tbaa !7 + %1312 = getelementptr inbounds double, ptr %70, i64 %367 + store double %1309, ptr %1312, align 8, !tbaa !7 + %1313 = load double, ptr %45, align 8, !tbaa !7 + %1314 = fmul double %1298, %1313 + %1315 = fmul double %1126, %1314 + %1316 = getelementptr inbounds double, ptr %68, i64 %1310 + store double %1315, ptr %1316, align 8, !tbaa !7 + %1317 = load double, ptr %43, align 8, !tbaa !7 + %1318 = fmul double %1298, %1317 + %1319 = fmul double %1126, %1318 + %1320 = getelementptr inbounds double, ptr %69, i64 %1310 + store double %1319, ptr %1320, align 8, !tbaa !7 + %1321 = fmul double %1309, %1313 + %1322 = fmul double %1126, %1321 + %1323 = getelementptr inbounds double, ptr %68, i64 %367 + store double %1322, ptr %1323, align 8, !tbaa !7 + %1324 = fneg double %1317 + %1325 = fmul double %1309, %1324 + %1326 = fmul double %1126, %1325 + %1327 = getelementptr inbounds double, ptr %69, i64 %367 + store double %1326, ptr %1327, align 8, !tbaa !7 + %1328 = load i32, ptr %4, align 4, !tbaa !3 + %1329 = icmp sgt i32 %661, %1328 + br i1 %1329, label %1330, label %.loopexit83 + +1330: ; preds = %1277 + %1331 = add nsw i32 %661, -1 + %spec.select = select i1 %80, i32 %334, i32 %1331 + %spec.select69 = select i1 %80, i32 %333, i32 %1328 br label %.loopexit76 -1304: ; preds = %986 - %1305 = load double, ptr %684, align 8, !tbaa !7 - %1306 = fmul double %307, %1305 - %1307 = load double, ptr %688, align 8, !tbaa !7 - %1308 = fmul double %329, %1307 - %1309 = fdiv double %1306, %1308 - %1310 = load double, ptr %344, align 8, !tbaa !7 - %1311 = fmul double %307, %1310 - %1312 = fdiv double %1311, %1308 - %1313 = add nsw i32 %340, %692 - %1314 = sext i32 %1313 to i64 - %1315 = getelementptr inbounds double, ptr %63, i64 %1314 - %1316 = load double, ptr %1315, align 8, !tbaa !7 - %1317 = fmul double %329, %691 - %1318 = fmul double %307, %696 - %1319 = fdiv double %1318, %1317 - %1320 = add nsw i32 %340, %352 - %1321 = sext i32 %1320 to i64 - %1322 = getelementptr inbounds double, ptr %67, i64 %1321 - %1323 = load double, ptr %1322, align 8, !tbaa !7 - %1324 = fdiv double %1323, %691 - %1325 = mul nsw i32 %659, %60 - %1326 = add nsw i32 %1325, %659 - %1327 = sext i32 %1326 to i64 - %1328 = getelementptr inbounds double, ptr %63, i64 %1327 - %1329 = load double, ptr %1328, align 8, !tbaa !7 - %1330 = fmul double %307, %1329 - %1331 = mul i32 %659, %180 - %1332 = sext i32 %1331 to i64 - %1333 = getelementptr inbounds double, ptr %67, i64 %1332 - %1334 = load double, ptr %1333, align 8, !tbaa !7 - %1335 = fmul double %329, %1334 - %1336 = fdiv double %1330, %1335 - %1337 = add nsw i32 %987, %1325 - %1338 = sext i32 %1337 to i64 - %1339 = getelementptr inbounds double, ptr %63, i64 %1338 - %1340 = load double, ptr %1339, align 8, !tbaa !7 - %1341 = fmul double %307, %1340 - %1342 = fdiv double %1341, %1335 - %1343 = mul nsw i32 %987, %60 - %1344 = add nsw i32 %1343, %659 - %1345 = sext i32 %1344 to i64 - %1346 = getelementptr inbounds double, ptr %63, i64 %1345 - %1347 = load double, ptr %1346, align 8, !tbaa !7 - %1348 = fmul double %307, %1347 - %1349 = mul nsw i32 %987, %64 - %1350 = add nsw i32 %1349, %987 - %1351 = sext i32 %1350 to i64 - %1352 = getelementptr inbounds double, ptr %67, i64 %1351 - %1353 = load double, ptr %1352, align 8, !tbaa !7 - %1354 = fmul double %329, %1353 - %1355 = fdiv double %1348, %1354 - %1356 = add nsw i32 %1343, %987 - %1357 = sext i32 %1356 to i64 - %1358 = getelementptr inbounds double, ptr %63, i64 %1357 - %1359 = load double, ptr %1358, align 8, !tbaa !7 - %1360 = fmul double %307, %1359 - %1361 = fdiv double %1360, %1354 - %1362 = add nsw i32 %659, 2 - %1363 = add nsw i32 %1362, %1343 - %1364 = sext i32 %1363 to i64 - %1365 = getelementptr inbounds double, ptr %63, i64 %1364 - %1366 = load double, ptr %1365, align 8, !tbaa !7 - %1367 = fmul double %307, %1366 - %1368 = fdiv double %1367, %1354 - %1369 = add nsw i32 %1349, %659 - %1370 = sext i32 %1369 to i64 - %1371 = getelementptr inbounds double, ptr %67, i64 %1370 - %1372 = load double, ptr %1371, align 8, !tbaa !7 - %1373 = fdiv double %1372, %1353 - %1374 = fsub double %1309, %1336 - %1375 = fsub double %1319, %1336 - %1376 = fmul double %1316, %310 - %1377 = fdiv double %1376, %1317 - %1378 = fmul double %1312, %1377 - %1379 = call double @llvm.fmuladd.f64(double %1374, double %1375, double %1378) - %1380 = fmul double %1312, %1324 - %1381 = call double @llvm.fmuladd.f64(double %1380, double %1336, double %1379) - %1382 = fneg double %1336 - %1383 = call double @llvm.fmuladd.f64(double %1382, double %1373, double %1355) - %1384 = call double @llvm.fmuladd.f64(double %1383, double %1342, double %1381) - store double %1384, ptr %29, align 16, !tbaa !7 - %1385 = fsub double %1361, %1336 - %1386 = fneg double %1342 - %1387 = call double @llvm.fmuladd.f64(double %1386, double %1373, double %1385) - %1388 = fsub double %1387, %1374 - %1389 = fsub double %1388, %1375 - %1390 = call double @llvm.fmuladd.f64(double %1312, double %1324, double %1389) - %1391 = fmul double %1342, %1390 - store double %1391, ptr %311, align 8, !tbaa !7 - %1392 = fmul double %1342, %1368 - store double %1392, ptr %312, align 16, !tbaa !7 +1332: ; preds = %1014 + %1333 = load double, ptr %686, align 8, !tbaa !7 + %1334 = fmul double %307, %1333 + %1335 = load double, ptr %690, align 8, !tbaa !7 + %1336 = fmul double %329, %1335 + %1337 = fdiv double %1334, %1336 + %1338 = load double, ptr %346, align 8, !tbaa !7 + %1339 = fmul double %307, %1338 + %1340 = fdiv double %1339, %1336 + %1341 = add nsw i32 %342, %694 + %1342 = sext i32 %1341 to i64 + %1343 = getelementptr inbounds double, ptr %63, i64 %1342 + %1344 = load double, ptr %1343, align 8, !tbaa !7 + %1345 = fmul double %329, %693 + %1346 = fmul double %307, %698 + %1347 = fdiv double %1346, %1345 + %1348 = add nsw i32 %342, %354 + %1349 = sext i32 %1348 to i64 + %1350 = getelementptr inbounds double, ptr %67, i64 %1349 + %1351 = load double, ptr %1350, align 8, !tbaa !7 + %1352 = fdiv double %1351, %693 + %1353 = mul nsw i32 %661, %60 + %1354 = add nsw i32 %1353, %661 + %1355 = sext i32 %1354 to i64 + %1356 = getelementptr inbounds double, ptr %63, i64 %1355 + %1357 = load double, ptr %1356, align 8, !tbaa !7 + %1358 = fmul double %307, %1357 + %1359 = mul i32 %661, %180 + %1360 = sext i32 %1359 to i64 + %1361 = getelementptr inbounds double, ptr %67, i64 %1360 + %1362 = load double, ptr %1361, align 8, !tbaa !7 + %1363 = fmul double %329, %1362 + %1364 = fdiv double %1358, %1363 + %1365 = add nsw i32 %1015, %1353 + %1366 = sext i32 %1365 to i64 + %1367 = getelementptr inbounds double, ptr %63, i64 %1366 + %1368 = load double, ptr %1367, align 8, !tbaa !7 + %1369 = fmul double %307, %1368 + %1370 = fdiv double %1369, %1363 + %1371 = mul nsw i32 %1015, %60 + %1372 = add nsw i32 %1371, %661 + %1373 = sext i32 %1372 to i64 + %1374 = getelementptr inbounds double, ptr %63, i64 %1373 + %1375 = load double, ptr %1374, align 8, !tbaa !7 + %1376 = fmul double %307, %1375 + %1377 = mul nsw i32 %1015, %64 + %1378 = add nsw i32 %1377, %1015 + %1379 = sext i32 %1378 to i64 + %1380 = getelementptr inbounds double, ptr %67, i64 %1379 + %1381 = load double, ptr %1380, align 8, !tbaa !7 + %1382 = fmul double %329, %1381 + %1383 = fdiv double %1376, %1382 + %1384 = add nsw i32 %1371, %1015 + %1385 = sext i32 %1384 to i64 + %1386 = getelementptr inbounds double, ptr %63, i64 %1385 + %1387 = load double, ptr %1386, align 8, !tbaa !7 + %1388 = fmul double %307, %1387 + %1389 = fdiv double %1388, %1382 + %1390 = add nsw i32 %661, 2 + %1391 = add nsw i32 %1390, %1371 + %1392 = sext i32 %1391 to i64 + %1393 = getelementptr inbounds double, ptr %63, i64 %1392 + %1394 = load double, ptr %1393, align 8, !tbaa !7 + %1395 = fmul double %307, %1394 + %1396 = fdiv double %1395, %1382 + %1397 = add nsw i32 %1377, %661 + %1398 = sext i32 %1397 to i64 + %1399 = getelementptr inbounds double, ptr %67, i64 %1398 + %1400 = load double, ptr %1399, align 8, !tbaa !7 + %1401 = fdiv double %1400, %1381 + %1402 = fsub double %1337, %1364 + %1403 = fsub double %1347, %1364 + %1404 = fmul double %1344, %310 + %1405 = fdiv double %1404, %1345 + %1406 = fmul double %1340, %1405 + %1407 = call double @llvm.fmuladd.f64(double %1402, double %1403, double %1406) + %1408 = fmul double %1340, %1352 + %1409 = call double @llvm.fmuladd.f64(double %1408, double %1364, double %1407) + %1410 = fneg double %1364 + %1411 = call double @llvm.fmuladd.f64(double %1410, double %1401, double %1383) + %1412 = call double @llvm.fmuladd.f64(double %1411, double %1370, double %1409) + store double %1412, ptr %29, align 16, !tbaa !7 + %1413 = fsub double %1389, %1364 + %1414 = fneg double %1370 + %1415 = call double @llvm.fmuladd.f64(double %1414, double %1401, double %1413) + %1416 = fsub double %1415, %1402 + %1417 = fsub double %1416, %1403 + %1418 = call double @llvm.fmuladd.f64(double %1340, double %1352, double %1417) + %1419 = fmul double %1370, %1418 + store double %1419, ptr %311, align 8, !tbaa !7 + %1420 = fmul double %1370, %1396 + store double %1420, ptr %312, align 16, !tbaa !7 call void @dlarfg_(ptr noundef nonnull @c__3, ptr noundef nonnull %29, ptr noundef nonnull %311, ptr noundef nonnull @c__1, ptr noundef nonnull %57) #5 store double 1.000000e+00, ptr %29, align 16, !tbaa !7 - %1393 = add nsw i32 %335, -2 - store i32 %1393, ptr %22, align 4, !tbaa !3 - %1394 = icmp sgt i32 %659, %1393 - br i1 %1394, label %.loopexit79, label %1395 - -1395: ; preds = %1304 - %1396 = sext i32 %659 to i64 - %1397 = sext i32 %332 to i64 - %1398 = sext i32 %661 to i64 - %1399 = add i32 %659, 3 - br label %1400 - -1400: ; preds = %1709, %1395 - %indvars.iv = phi i32 [ %indvars.iv.next, %1709 ], [ %1399, %1395 ] - %1401 = phi i64 [ %1500, %1709 ], [ %1396, %1395 ] - %1402 = call i32 @llvm.smin.i32(i32 %335, i32 %indvars.iv) - %1403 = call i32 @llvm.smax.i32(i32 %1402, i32 %661) - %smax = sext i32 %1403 to i64 - %1404 = trunc i64 %1401 to i32 - %1405 = icmp sgt i64 %1401, %1396 - br i1 %1405, label %1406, label %1418 - -1406: ; preds = %1400 - %1407 = add nsw i64 %1401, -1 - %1408 = add nsw i32 %1404, -1 - %1409 = mul nsw i64 %1407, %324 - %1410 = mul nsw i32 %1408, %60 - %1411 = sext i32 %1410 to i64 - %1412 = getelementptr double, ptr %63, i64 %1401 - %1413 = getelementptr double, ptr %1412, i64 %1411 - %1414 = load double, ptr %1413, align 8, !tbaa !7 - store double %1414, ptr %29, align 16, !tbaa !7 - %1415 = getelementptr double, ptr %326, i64 %1401 - %1416 = getelementptr double, ptr %1415, i64 %1409 - %1417 = load <2 x double>, ptr %1416, align 8, !tbaa !7 - store <2 x double> %1417, ptr %311, align 8, !tbaa !7 - call void @dlarfg_(ptr noundef nonnull @c__3, ptr noundef nonnull %1413, ptr noundef nonnull %311, ptr noundef nonnull @c__1, ptr noundef nonnull %57) #5 + %1421 = add nsw i32 %337, -2 + store i32 %1421, ptr %22, align 4, !tbaa !3 + %1422 = icmp sgt i32 %661, %1421 + br i1 %1422, label %.loopexit79, label %1423 + +1423: ; preds = %1332 + %1424 = sext i32 %661 to i64 + %1425 = sext i32 %334 to i64 + %1426 = sext i32 %663 to i64 + %1427 = add i32 %661, 3 + %1428 = add nsw i64 %1424, %1425 + br label %1429 + +1429: ; preds = %1780, %1423 + %indvar = phi i64 [ %indvar.next, %1780 ], [ 0, %1423 ] + %indvars.iv = phi i32 [ %indvars.iv.next, %1780 ], [ %1427, %1423 ] + %1430 = phi i64 [ %1571, %1780 ], [ %1424, %1423 ] + %1431 = add i64 %indvar, %1424 + %1432 = shl i64 %1431, 4 + %1433 = add i64 %1432, -8 + %scevgep259 = getelementptr i8, ptr %8, i64 %1433 + %scevgep260 = getelementptr i8, ptr %6, i64 %1433 + %1434 = add i64 %indvar, %1424 + %1435 = shl i64 %1434, 4 + %1436 = add i64 %1435, -16 + %scevgep = getelementptr i8, ptr %6, i64 %1436 + %1437 = add i64 %1428, %indvar + %1438 = shl i64 %1437, 3 + %1439 = add i64 %1438, 8 + %scevgep253 = getelementptr i8, ptr %6, i64 %1439 + %scevgep254 = getelementptr i8, ptr %8, i64 %1436 + %scevgep255 = getelementptr i8, ptr %8, i64 %1439 + %1440 = call i32 @llvm.smin.i32(i32 %337, i32 %indvars.iv) + %1441 = call i32 @llvm.smax.i32(i32 %1440, i32 %663) + %smax = sext i32 %1441 to i64 + %1442 = trunc i64 %1430 to i32 + %1443 = icmp sgt i64 %1430, %1424 + br i1 %1443, label %1444, label %1456 + +1444: ; preds = %1429 + %1445 = add nsw i64 %1430, -1 + %1446 = add nsw i32 %1442, -1 + %1447 = mul nsw i64 %1445, %324 + %1448 = mul nsw i32 %1446, %60 + %1449 = sext i32 %1448 to i64 + %1450 = getelementptr double, ptr %63, i64 %1430 + %1451 = getelementptr double, ptr %1450, i64 %1449 + %1452 = load double, ptr %1451, align 8, !tbaa !7 + store double %1452, ptr %29, align 16, !tbaa !7 + %1453 = getelementptr double, ptr %326, i64 %1430 + %1454 = getelementptr double, ptr %1453, i64 %1447 + %1455 = load <2 x double>, ptr %1454, align 8, !tbaa !7 + store <2 x double> %1455, ptr %311, align 8, !tbaa !7 + call void @dlarfg_(ptr noundef nonnull @c__3, ptr noundef nonnull %1451, ptr noundef nonnull %311, ptr noundef nonnull @c__1, ptr noundef nonnull %57) #5 store double 1.000000e+00, ptr %29, align 16, !tbaa !7 - store <2 x double> zeroinitializer, ptr %1416, align 8, !tbaa !7 - br label %1418 - -1418: ; preds = %1406, %1400 - %1419 = icmp sgt i64 %1401, %1397 - br i1 %1419, label %.loopexit217, label %1420 - -1420: ; preds = %1418 - %1421 = load double, ptr %57, align 8, !tbaa !7 - %1422 = add nsw i64 %1401, 1 - %1423 = load <2 x double>, ptr %311, align 8, !tbaa !7 - %1424 = getelementptr double, ptr %63, i64 %1401 - %1425 = getelementptr double, ptr %63, i64 %1422 - %1426 = getelementptr double, ptr %67, i64 %1401 - %1427 = getelementptr double, ptr %67, i64 %1422 - %1428 = extractelement <2 x double> %1423, i64 0 - %1429 = extractelement <2 x double> %1423, i64 1 - br label %1430 - -1430: ; preds = %1430, %1420 - %1431 = phi i64 [ %1401, %1420 ], [ %1462, %1430 ] - %1432 = mul nsw i64 %1431, %324 - %1433 = getelementptr double, ptr %1424, i64 %1432 - %1434 = load double, ptr %1433, align 8, !tbaa !7 - %1435 = getelementptr double, ptr %1425, i64 %1432 - %1436 = load <2 x double>, ptr %1435, align 8, !tbaa !7 - %1437 = extractelement <2 x double> %1436, i64 0 - %1438 = call double @llvm.fmuladd.f64(double %1428, double %1437, double %1434) - %1439 = extractelement <2 x double> %1436, i64 1 - %1440 = call double @llvm.fmuladd.f64(double %1429, double %1439, double %1438) - %1441 = fmul double %1421, %1440 - %1442 = fsub double %1434, %1441 - store double %1442, ptr %1433, align 8, !tbaa !7 - %1443 = fneg double %1441 - %1444 = insertelement <2 x double> poison, double %1443, i64 0 - %1445 = shufflevector <2 x double> %1444, <2 x double> poison, <2 x i32> zeroinitializer - %1446 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1445, <2 x double> %1423, <2 x double> %1436) - store <2 x double> %1446, ptr %1435, align 8, !tbaa !7 - %1447 = mul nsw i64 %1431, %323 - %1448 = getelementptr double, ptr %1426, i64 %1447 - %1449 = load double, ptr %1448, align 8, !tbaa !7 - %1450 = getelementptr double, ptr %1427, i64 %1447 - %1451 = load <2 x double>, ptr %1450, align 8, !tbaa !7 - %1452 = extractelement <2 x double> %1451, i64 0 - %1453 = call double @llvm.fmuladd.f64(double %1428, double %1452, double %1449) - %1454 = extractelement <2 x double> %1451, i64 1 - %1455 = call double @llvm.fmuladd.f64(double %1429, double %1454, double %1453) - %1456 = fmul double %1421, %1455 - %1457 = fsub double %1449, %1456 - store double %1457, ptr %1448, align 8, !tbaa !7 - %1458 = fneg double %1456 - %1459 = insertelement <2 x double> poison, double %1458, i64 0 - %1460 = shufflevector <2 x double> %1459, <2 x double> poison, <2 x i32> zeroinitializer - %1461 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1460, <2 x double> %1423, <2 x double> %1451) - store <2 x double> %1461, ptr %1450, align 8, !tbaa !7 - %1462 = add nsw i64 %1431, 1 - %1463 = icmp slt i64 %1431, %1397 - br i1 %1463, label %1430, label %.loopexit217, !llvm.loop !28 - -.loopexit217: ; preds = %1430, %1418 - br i1 %87, label %1464, label %.loopexit216 - -1464: ; preds = %.loopexit217 - %1465 = load i32, ptr %3, align 4, !tbaa !3 - %1466 = icmp slt i32 %1465, 1 - br i1 %1466, label %.loopexit216, label %1467 - -1467: ; preds = %1464 - %1468 = load double, ptr %57, align 8, !tbaa !7 - %1469 = mul nsw i64 %1401, %325 - %1470 = load double, ptr %311, align 8, !tbaa !7 - %1471 = add nsw i64 %1401, 1 - %1472 = mul nsw i64 %1471, %325 - %1473 = load double, ptr %312, align 16, !tbaa !7 - %1474 = add nsw i64 %1401, 2 - %1475 = mul nsw i64 %1474, %325 - %1476 = add nuw i32 %1465, 1 - %1477 = zext i32 %1476 to i64 - %1478 = getelementptr double, ptr %74, i64 %1469 - %1479 = getelementptr double, ptr %74, i64 %1472 - %1480 = getelementptr double, ptr %74, i64 %1475 - br label %1481 - -1481: ; preds = %1481, %1467 - %1482 = phi i64 [ 1, %1467 ], [ %1498, %1481 ] - %1483 = getelementptr double, ptr %1478, i64 %1482 - %1484 = load double, ptr %1483, align 8, !tbaa !7 - %1485 = getelementptr double, ptr %1479, i64 %1482 - %1486 = load double, ptr %1485, align 8, !tbaa !7 - %1487 = call double @llvm.fmuladd.f64(double %1470, double %1486, double %1484) - %1488 = getelementptr double, ptr %1480, i64 %1482 - %1489 = load double, ptr %1488, align 8, !tbaa !7 - %1490 = call double @llvm.fmuladd.f64(double %1473, double %1489, double %1487) - %1491 = fmul double %1468, %1490 - %1492 = fsub double %1484, %1491 - store double %1492, ptr %1483, align 8, !tbaa !7 - %1493 = load double, ptr %1485, align 8, !tbaa !7 - %1494 = fneg double %1491 - %1495 = call double @llvm.fmuladd.f64(double %1494, double %1470, double %1493) - store double %1495, ptr %1485, align 8, !tbaa !7 - %1496 = load double, ptr %1488, align 8, !tbaa !7 - %1497 = call double @llvm.fmuladd.f64(double %1494, double %1473, double %1496) - store double %1497, ptr %1488, align 8, !tbaa !7 - %1498 = add nuw nsw i64 %1482, 1 - %1499 = icmp eq i64 %1498, %1477 - br i1 %1499, label %.loopexit216, label %1481, !llvm.loop !29 - -.loopexit216: ; preds = %1481, %1464, %.loopexit217 - %1500 = add nsw i64 %1401, 1 - %1501 = mul nsw i64 %1500, %323 - %1502 = getelementptr double, ptr %67, i64 %1501 - %1503 = getelementptr double, ptr %1502, i64 %1500 - %1504 = add nsw i64 %1401, 2 - %1505 = add nsw i32 %1404, 2 - %1506 = mul nsw i64 %1504, %323 - %1507 = mul nsw i32 %1505, %64 - %1508 = getelementptr double, ptr %67, i64 %1506 - %1509 = getelementptr double, ptr %1508, i64 %1500 - %1510 = load double, ptr %1509, align 8, !tbaa !7 - %1511 = sext i32 %1507 to i64 - %1512 = getelementptr double, ptr %67, i64 %1504 - %1513 = getelementptr double, ptr %1512, i64 %1511 - %1514 = load double, ptr %1513, align 8, !tbaa !7 - %1515 = load <2 x double>, ptr %1503, align 8, !tbaa !7 - %1516 = fcmp oge <2 x double> %1515, zeroinitializer - %1517 = fneg <2 x double> %1515 - %1518 = select <2 x i1> %1516, <2 x double> %1515, <2 x double> %1517 - %1519 = insertelement <2 x double> poison, double %1510, i64 0 - %1520 = insertelement <2 x double> %1519, double %1514, i64 1 - %1521 = fcmp oge <2 x double> %1520, zeroinitializer - %1522 = fneg <2 x double> %1520 - %1523 = select <2 x i1> %1521, <2 x double> %1520, <2 x double> %1522 - %1524 = fcmp oge <2 x double> %1518, %1523 - %1525 = select <2 x i1> %1524, <2 x double> %1518, <2 x double> %1523 - %1526 = extractelement <2 x double> %1525, i64 0 - store double %1526, ptr %25, align 8, !tbaa !7 - %1527 = extractelement <2 x double> %1525, i64 1 - store double %1527, ptr %26, align 8, !tbaa !7 - %1528 = fcmp oge double %1526, %1527 - %1529 = select i1 %1528, double %1526, double %1527 - %1530 = fcmp olt double %1529, %168 - br i1 %1530, label %.thread68, label %1531 - -1531: ; preds = %.loopexit216 - %1532 = trunc i64 %1500 to i32 - %1533 = mul i32 %64, %1404 - %1534 = add nsw i32 %1533, %1532 - %1535 = trunc i64 %1504 to i32 - %1536 = add nsw i32 %1533, %1535 - %1537 = select i1 %1528, i32 %1536, i32 %1534 - %1538 = select i1 %1528, i32 %1534, i32 %1536 - %1539 = extractelement <2 x double> %1515, i64 0 - %1540 = extractelement <2 x double> %1515, i64 1 - %1541 = select i1 %1528, double %1539, double %1540 - %1542 = select i1 %1528, double %1510, double %1514 - %1543 = select i1 %1528, double %1540, double %1539 - %1544 = select i1 %1528, double %1514, double %1510 - %1545 = sext i32 %1538 to i64 - %1546 = getelementptr inbounds double, ptr %67, i64 %1545 - %1547 = load double, ptr %1546, align 8, !tbaa !7 - %1548 = sext i32 %1537 to i64 - %1549 = getelementptr inbounds double, ptr %67, i64 %1548 - %1550 = load double, ptr %1549, align 8, !tbaa !7 - %1551 = fcmp oge double %1542, 0.000000e+00 - %1552 = fneg double %1542 - %1553 = select i1 %1551, double %1542, double %1552 - %1554 = fcmp oge double %1541, 0.000000e+00 - %1555 = fneg double %1541 - %1556 = select i1 %1554, double %1541, double %1555 - %1557 = fcmp ule double %1553, %1556 - br i1 %1557, label %1559, label %1558 - -1558: ; preds = %1531 - store double %1544, ptr %26, align 8, !tbaa !7 - br label %1559 - -1559: ; preds = %1558, %1531 - %1560 = phi double [ %1542, %1558 ], [ %1541, %1531 ] - %1561 = phi double [ %1541, %1558 ], [ %1542, %1531 ] - %1562 = phi double [ %1544, %1558 ], [ %1543, %1531 ] - %1563 = phi double [ %1543, %1558 ], [ %1544, %1531 ] - %1564 = fdiv double %1562, %1560 - store double %1564, ptr %25, align 8, !tbaa !7 - %1565 = fneg double %1564 - %1566 = call double @llvm.fmuladd.f64(double %1565, double %1547, double %1550) - %1567 = call double @llvm.fmuladd.f64(double %1565, double %1561, double %1563) - %1568 = fcmp oge double %1567, 0.000000e+00 - %1569 = fneg double %1567 - %1570 = select i1 %1568, double %1567, double %1569 - %1571 = fcmp olt double %1570, %168 - br i1 %1571, label %1572, label %1574 - -1572: ; preds = %1559 - %1573 = fneg double %1561 - br label %1605 - -1574: ; preds = %1559 - %1575 = fcmp oge double %1566, 0.000000e+00 - %1576 = fneg double %1566 - %1577 = select i1 %1575, double %1566, double %1576 - %1578 = fcmp olt double %1570, %1577 - %1579 = fdiv double %1567, %1566 - %1580 = fcmp oge double %1579, 0.000000e+00 - %1581 = fneg double %1579 - %1582 = select i1 %1580, double %1579, double %1581 - %1583 = select i1 %1578, double %1582, double 1.000000e+00 - %1584 = insertelement <2 x double> poison, double %1560, i64 0 - %1585 = insertelement <2 x double> %1584, double %1547, i64 1 - %1586 = fcmp oge <2 x double> %1585, zeroinitializer - %1587 = fneg <2 x double> %1585 - %1588 = select <2 x i1> %1586, <2 x double> %1585, <2 x double> %1587 - %shift254 = shufflevector <2 x double> %1588, <2 x double> poison, <2 x i32> - %1589 = fcmp olt <2 x double> %1588, %shift254 - %1590 = extractelement <2 x i1> %1589, i64 0 - br i1 %1590, label %1591, label %1598 - -1591: ; preds = %1574 - %1592 = fdiv double %1560, %1547 - store double %1592, ptr %24, align 8, !tbaa !7 - %1593 = fcmp oge double %1592, 0.000000e+00 - %1594 = fneg double %1592 - %1595 = select i1 %1593, double %1592, double %1594 - %1596 = fcmp ole double %1583, %1595 - %1597 = select i1 %1596, double %1583, double %1595 - br label %1598 - -1598: ; preds = %1591, %1574 - %1599 = phi double [ %1597, %1591 ], [ %1583, %1574 ] - %1600 = fmul double %1566, %1599 - %1601 = fdiv double %1600, %1567 - %1602 = fneg double %1561 - %1603 = fmul double %1601, %1602 - %1604 = call double @llvm.fmuladd.f64(double %1599, double %1547, double %1603) - br label %1605 - -1605: ; preds = %1598, %1572 - %1606 = phi double [ 1.000000e+00, %1572 ], [ %1601, %1598 ] - %.pn = phi double [ %1573, %1572 ], [ %1604, %1598 ] - %1607 = phi double [ 0.000000e+00, %1572 ], [ %1599, %1598 ] - %1608 = fdiv double %.pn, %1560 - br i1 %1557, label %.thread68, label %1609 - -1609: ; preds = %1605 - store double %1606, ptr %25, align 8, !tbaa !7 - br label %.thread68 + store <2 x double> zeroinitializer, ptr %1454, align 8, !tbaa !7 + br label %1456 + +1456: ; preds = %1444, %1429 + %1457 = icmp sgt i64 %1430, %1425 + br i1 %1457, label %.loopexit217, label %.lver.check + +.lver.check: ; preds = %1456 + %1458 = load double, ptr %57, align 8, !tbaa !7 + %1459 = add nsw i64 %1430, 1 + %1460 = load <2 x double>, ptr %311, align 8, !tbaa !7 + %1461 = add nsw i64 %1430, 2 + %1462 = getelementptr double, ptr %63, i64 %1430 + %1463 = getelementptr double, ptr %63, i64 %1459 + %1464 = getelementptr double, ptr %63, i64 %1461 + %1465 = getelementptr double, ptr %67, i64 %1430 + %1466 = getelementptr double, ptr %67, i64 %1459 + %1467 = getelementptr double, ptr %67, i64 %1461 + %bound0 = icmp ult ptr %scevgep, %scevgep255 + %bound1 = icmp ult ptr %scevgep254, %scevgep253 + %found.conflict = and i1 %bound0, %bound1 + %lver.safe = or i1 %found.conflict, %330 + br i1 %lver.safe, label %.ph257.lver.orig.preheader, label %.ph257 + +.ph257.lver.orig.preheader: ; preds = %.lver.check + %1468 = extractelement <2 x double> %1460, i64 0 + %1469 = extractelement <2 x double> %1460, i64 1 + br label %.ph257.lver.orig + +.ph257.lver.orig: ; preds = %.ph257.lver.orig.preheader, %.ph257.lver.orig + %1470 = phi i64 [ %1501, %.ph257.lver.orig ], [ %1430, %.ph257.lver.orig.preheader ] + %1471 = mul nsw i64 %1470, %324 + %1472 = getelementptr double, ptr %1462, i64 %1471 + %1473 = load double, ptr %1472, align 8, !tbaa !7 + %1474 = getelementptr double, ptr %1463, i64 %1471 + %1475 = load <2 x double>, ptr %1474, align 8, !tbaa !7 + %1476 = extractelement <2 x double> %1475, i64 0 + %1477 = call double @llvm.fmuladd.f64(double %1468, double %1476, double %1473) + %1478 = extractelement <2 x double> %1475, i64 1 + %1479 = call double @llvm.fmuladd.f64(double %1469, double %1478, double %1477) + %1480 = fmul double %1458, %1479 + %1481 = fsub double %1473, %1480 + store double %1481, ptr %1472, align 8, !tbaa !7 + %1482 = fneg double %1480 + %1483 = insertelement <2 x double> poison, double %1482, i64 0 + %1484 = shufflevector <2 x double> %1483, <2 x double> poison, <2 x i32> zeroinitializer + %1485 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1484, <2 x double> %1460, <2 x double> %1475) + store <2 x double> %1485, ptr %1474, align 8, !tbaa !7 + %1486 = mul nsw i64 %1470, %323 + %1487 = getelementptr double, ptr %1465, i64 %1486 + %1488 = load double, ptr %1487, align 8, !tbaa !7 + %1489 = getelementptr double, ptr %1466, i64 %1486 + %1490 = load <2 x double>, ptr %1489, align 8, !tbaa !7 + %1491 = extractelement <2 x double> %1490, i64 0 + %1492 = call double @llvm.fmuladd.f64(double %1468, double %1491, double %1488) + %1493 = extractelement <2 x double> %1490, i64 1 + %1494 = call double @llvm.fmuladd.f64(double %1469, double %1493, double %1492) + %1495 = fmul double %1458, %1494 + %1496 = fsub double %1488, %1495 + store double %1496, ptr %1487, align 8, !tbaa !7 + %1497 = fneg double %1495 + %1498 = insertelement <2 x double> poison, double %1497, i64 0 + %1499 = shufflevector <2 x double> %1498, <2 x double> poison, <2 x i32> zeroinitializer + %1500 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %1499, <2 x double> %1460, <2 x double> %1490) + store <2 x double> %1500, ptr %1489, align 8, !tbaa !7 + %1501 = add nsw i64 %1470, 1 + %1502 = icmp slt i64 %1470, %1425 + br i1 %1502, label %.ph257.lver.orig, label %.loopexit217, !llvm.loop !28 + +.ph257: ; preds = %.lver.check + %load_initial = load double, ptr %scevgep259, align 8 + %load_initial261 = load double, ptr %scevgep260, align 8 + %1503 = extractelement <2 x double> %1460, i64 0 + %1504 = extractelement <2 x double> %1460, i64 1 + br label %1505 + +1505: ; preds = %1505, %.ph257 + %store_forwarded262 = phi double [ %load_initial261, %.ph257 ], [ %1519, %1505 ] + %store_forwarded = phi double [ %load_initial, %.ph257 ], [ %1532, %1505 ] + %1506 = phi i64 [ %1430, %.ph257 ], [ %1533, %1505 ] + %1507 = mul nuw nsw i64 %1506, %324 + %1508 = getelementptr double, ptr %1462, i64 %1507 + %1509 = load double, ptr %1508, align 8, !tbaa !7 + %1510 = getelementptr double, ptr %1463, i64 %1507 + %1511 = call double @llvm.fmuladd.f64(double %1503, double %store_forwarded262, double %1509) + %1512 = getelementptr double, ptr %1464, i64 %1507 + %1513 = load double, ptr %1512, align 8, !tbaa !7 + %1514 = call double @llvm.fmuladd.f64(double %1504, double %1513, double %1511) + %1515 = fmul double %1458, %1514 + %1516 = fsub double %1509, %1515 + store double %1516, ptr %1508, align 8, !tbaa !7 + %1517 = fneg double %1515 + %1518 = call double @llvm.fmuladd.f64(double %1517, double %1503, double %store_forwarded262) + store double %1518, ptr %1510, align 8, !tbaa !7 + %1519 = call double @llvm.fmuladd.f64(double %1517, double %1504, double %1513) + store double %1519, ptr %1512, align 8, !tbaa !7 + %1520 = mul nuw nsw i64 %1506, %323 + %1521 = getelementptr double, ptr %1465, i64 %1520 + %1522 = load double, ptr %1521, align 8, !tbaa !7 + %1523 = getelementptr double, ptr %1466, i64 %1520 + %1524 = call double @llvm.fmuladd.f64(double %1503, double %store_forwarded, double %1522) + %1525 = getelementptr double, ptr %1467, i64 %1520 + %1526 = load double, ptr %1525, align 8, !tbaa !7 + %1527 = call double @llvm.fmuladd.f64(double %1504, double %1526, double %1524) + %1528 = fmul double %1458, %1527 + %1529 = fsub double %1522, %1528 + store double %1529, ptr %1521, align 8, !tbaa !7 + %1530 = fneg double %1528 + %1531 = call double @llvm.fmuladd.f64(double %1530, double %1503, double %store_forwarded) + store double %1531, ptr %1523, align 8, !tbaa !7 + %1532 = call double @llvm.fmuladd.f64(double %1530, double %1504, double %1526) + store double %1532, ptr %1525, align 8, !tbaa !7 + %1533 = add nsw i64 %1506, 1 + %1534 = icmp slt i64 %1506, %1425 + br i1 %1534, label %1505, label %.loopexit217, !llvm.loop !28 + +.loopexit217: ; preds = %1505, %.ph257.lver.orig, %1456 + br i1 %87, label %1535, label %.loopexit216 + +1535: ; preds = %.loopexit217 + %1536 = load i32, ptr %3, align 4, !tbaa !3 + %1537 = icmp slt i32 %1536, 1 + br i1 %1537, label %.loopexit216, label %1538 + +1538: ; preds = %1535 + %1539 = load double, ptr %57, align 8, !tbaa !7 + %1540 = mul nsw i64 %1430, %325 + %1541 = load double, ptr %311, align 8, !tbaa !7 + %1542 = add nsw i64 %1430, 1 + %1543 = mul nsw i64 %1542, %325 + %1544 = load double, ptr %312, align 16, !tbaa !7 + %1545 = add nsw i64 %1430, 2 + %1546 = mul nsw i64 %1545, %325 + %1547 = add nuw i32 %1536, 1 + %1548 = zext i32 %1547 to i64 + %1549 = getelementptr double, ptr %74, i64 %1540 + %1550 = getelementptr double, ptr %74, i64 %1543 + %1551 = getelementptr double, ptr %74, i64 %1546 + br label %1552 + +1552: ; preds = %1552, %1538 + %1553 = phi i64 [ 1, %1538 ], [ %1569, %1552 ] + %1554 = getelementptr double, ptr %1549, i64 %1553 + %1555 = load double, ptr %1554, align 8, !tbaa !7 + %1556 = getelementptr double, ptr %1550, i64 %1553 + %1557 = load double, ptr %1556, align 8, !tbaa !7 + %1558 = call double @llvm.fmuladd.f64(double %1541, double %1557, double %1555) + %1559 = getelementptr double, ptr %1551, i64 %1553 + %1560 = load double, ptr %1559, align 8, !tbaa !7 + %1561 = call double @llvm.fmuladd.f64(double %1544, double %1560, double %1558) + %1562 = fmul double %1539, %1561 + %1563 = fsub double %1555, %1562 + store double %1563, ptr %1554, align 8, !tbaa !7 + %1564 = load double, ptr %1556, align 8, !tbaa !7 + %1565 = fneg double %1562 + %1566 = call double @llvm.fmuladd.f64(double %1565, double %1541, double %1564) + store double %1566, ptr %1556, align 8, !tbaa !7 + %1567 = load double, ptr %1559, align 8, !tbaa !7 + %1568 = call double @llvm.fmuladd.f64(double %1565, double %1544, double %1567) + store double %1568, ptr %1559, align 8, !tbaa !7 + %1569 = add nuw nsw i64 %1553, 1 + %1570 = icmp eq i64 %1569, %1548 + br i1 %1570, label %.loopexit216, label %1552, !llvm.loop !29 + +.loopexit216: ; preds = %1552, %1535, %.loopexit217 + %1571 = add nsw i64 %1430, 1 + %1572 = mul nsw i64 %1571, %323 + %1573 = getelementptr double, ptr %67, i64 %1572 + %1574 = getelementptr double, ptr %1573, i64 %1571 + %1575 = add nsw i64 %1430, 2 + %1576 = add nsw i32 %1442, 2 + %1577 = mul nsw i64 %1575, %323 + %1578 = mul nsw i32 %1576, %64 + %1579 = getelementptr double, ptr %67, i64 %1577 + %1580 = getelementptr double, ptr %1579, i64 %1571 + %1581 = load double, ptr %1580, align 8, !tbaa !7 + %1582 = sext i32 %1578 to i64 + %1583 = getelementptr double, ptr %67, i64 %1575 + %1584 = getelementptr double, ptr %1583, i64 %1582 + %1585 = load double, ptr %1584, align 8, !tbaa !7 + %1586 = load <2 x double>, ptr %1574, align 8, !tbaa !7 + %1587 = fcmp oge <2 x double> %1586, zeroinitializer + %1588 = fneg <2 x double> %1586 + %1589 = select <2 x i1> %1587, <2 x double> %1586, <2 x double> %1588 + %1590 = insertelement <2 x double> poison, double %1581, i64 0 + %1591 = insertelement <2 x double> %1590, double %1585, i64 1 + %1592 = fcmp oge <2 x double> %1591, zeroinitializer + %1593 = fneg <2 x double> %1591 + %1594 = select <2 x i1> %1592, <2 x double> %1591, <2 x double> %1593 + %1595 = fcmp oge <2 x double> %1589, %1594 + %1596 = select <2 x i1> %1595, <2 x double> %1589, <2 x double> %1594 + %1597 = extractelement <2 x double> %1596, i64 0 + store double %1597, ptr %25, align 8, !tbaa !7 + %1598 = extractelement <2 x double> %1596, i64 1 + store double %1598, ptr %26, align 8, !tbaa !7 + %1599 = fcmp oge double %1597, %1598 + %1600 = select i1 %1599, double %1597, double %1598 + %1601 = fcmp olt double %1600, %168 + br i1 %1601, label %.thread68, label %1602 + +1602: ; preds = %.loopexit216 + %1603 = trunc i64 %1571 to i32 + %1604 = mul i32 %64, %1442 + %1605 = add nsw i32 %1604, %1603 + %1606 = trunc i64 %1575 to i32 + %1607 = add nsw i32 %1604, %1606 + %1608 = select i1 %1599, i32 %1607, i32 %1605 + %1609 = select i1 %1599, i32 %1605, i32 %1607 + %1610 = extractelement <2 x double> %1586, i64 0 + %1611 = extractelement <2 x double> %1586, i64 1 + %1612 = select i1 %1599, double %1610, double %1611 + %1613 = select i1 %1599, double %1581, double %1585 + %1614 = select i1 %1599, double %1611, double %1610 + %1615 = select i1 %1599, double %1585, double %1581 + %1616 = sext i32 %1609 to i64 + %1617 = getelementptr inbounds double, ptr %67, i64 %1616 + %1618 = load double, ptr %1617, align 8, !tbaa !7 + %1619 = sext i32 %1608 to i64 + %1620 = getelementptr inbounds double, ptr %67, i64 %1619 + %1621 = load double, ptr %1620, align 8, !tbaa !7 + %1622 = fcmp oge double %1613, 0.000000e+00 + %1623 = fneg double %1613 + %1624 = select i1 %1622, double %1613, double %1623 + %1625 = fcmp oge double %1612, 0.000000e+00 + %1626 = fneg double %1612 + %1627 = select i1 %1625, double %1612, double %1626 + %1628 = fcmp ule double %1624, %1627 + br i1 %1628, label %1630, label %1629 + +1629: ; preds = %1602 + store double %1615, ptr %26, align 8, !tbaa !7 + br label %1630 + +1630: ; preds = %1629, %1602 + %1631 = phi double [ %1613, %1629 ], [ %1612, %1602 ] + %1632 = phi double [ %1612, %1629 ], [ %1613, %1602 ] + %1633 = phi double [ %1615, %1629 ], [ %1614, %1602 ] + %1634 = phi double [ %1614, %1629 ], [ %1615, %1602 ] + %1635 = fdiv double %1633, %1631 + store double %1635, ptr %25, align 8, !tbaa !7 + %1636 = fneg double %1635 + %1637 = call double @llvm.fmuladd.f64(double %1636, double %1618, double %1621) + %1638 = call double @llvm.fmuladd.f64(double %1636, double %1632, double %1634) + %1639 = fcmp oge double %1638, 0.000000e+00 + %1640 = fneg double %1638 + %1641 = select i1 %1639, double %1638, double %1640 + %1642 = fcmp olt double %1641, %168 + br i1 %1642, label %1643, label %1645 + +1643: ; preds = %1630 + %1644 = fneg double %1632 + br label %1676 -.thread68: ; preds = %.loopexit216, %1609, %1605 - %1610 = phi double [ %1607, %1609 ], [ %1607, %1605 ], [ 0.000000e+00, %.loopexit216 ] - %1611 = phi double [ %1608, %1609 ], [ %1606, %1605 ], [ 0.000000e+00, %.loopexit216 ] - %1612 = phi double [ %1606, %1609 ], [ %1608, %1605 ], [ 1.000000e+00, %.loopexit216 ] - store double %1610, ptr %24, align 8, !tbaa !7 - %1613 = fmul double %1612, %1612 - %1614 = call double @llvm.fmuladd.f64(double %1610, double %1610, double %1613) - %1615 = call double @llvm.fmuladd.f64(double %1611, double %1611, double %1614) - %sqrt = call double @llvm.sqrt.f64(double %1615) - %1616 = fdiv double %1610, %sqrt - %1617 = fadd double %1616, 1.000000e+00 - store double %1617, ptr %57, align 8, !tbaa !7 - %1618 = fadd double %1610, %sqrt - %1619 = fdiv double -1.000000e+00, %1618 - store double 1.000000e+00, ptr %29, align 16, !tbaa !7 - %1620 = fmul double %1612, %1619 - store double %1620, ptr %311, align 8, !tbaa !7 - %1621 = fmul double %1611, %1619 - store double %1621, ptr %312, align 16, !tbaa !7 - %1622 = add i32 %1404, 3 - store i32 %1622, ptr %23, align 4, !tbaa !3 - %1623 = call i32 @llvm.smin.i32(i32 %1622, i32 %335) - %1624 = icmp sgt i32 %661, %1623 - br i1 %1624, label %1633, label %1625 - -1625: ; preds = %.thread68 - %1626 = mul nsw i64 %1401, %324 - %1627 = mul nsw i64 %1500, %324 - %1628 = mul nsw i64 %1504, %324 - %1629 = getelementptr double, ptr %63, i64 %1626 - %1630 = getelementptr double, ptr %63, i64 %1627 - %1631 = getelementptr double, ptr %63, i64 %1628 - br label %1638 - -1632: ; preds = %1638 - store double %1648, ptr %25, align 8, !tbaa !7 - br label %1633 - -1633: ; preds = %1632, %.thread68 - %1634 = icmp slt i64 %1504, %1398 - br i1 %1634, label %1676, label %1635 - -1635: ; preds = %1633 - %1636 = mul nsw i64 %1401, %323 - %1637 = getelementptr double, ptr %67, i64 %1636 - br label %1656 - -1638: ; preds = %1638, %1625 - %1639 = phi i64 [ %1398, %1625 ], [ %1655, %1638 ] - %1640 = getelementptr double, ptr %1629, i64 %1639 - %1641 = load double, ptr %1640, align 8, !tbaa !7 - %1642 = getelementptr double, ptr %1630, i64 %1639 - %1643 = load double, ptr %1642, align 8, !tbaa !7 - %1644 = call double @llvm.fmuladd.f64(double %1620, double %1643, double %1641) - %1645 = getelementptr double, ptr %1631, i64 %1639 - %1646 = load double, ptr %1645, align 8, !tbaa !7 - %1647 = call double @llvm.fmuladd.f64(double %1621, double %1646, double %1644) - %1648 = fmul double %1617, %1647 - %1649 = fsub double %1641, %1648 - store double %1649, ptr %1640, align 8, !tbaa !7 - %1650 = load double, ptr %1642, align 8, !tbaa !7 - %1651 = fneg double %1648 - %1652 = call double @llvm.fmuladd.f64(double %1651, double %1620, double %1650) - store double %1652, ptr %1642, align 8, !tbaa !7 - %1653 = load double, ptr %1645, align 8, !tbaa !7 - %1654 = call double @llvm.fmuladd.f64(double %1651, double %1621, double %1653) - store double %1654, ptr %1645, align 8, !tbaa !7 - %1655 = add nsw i64 %1639, 1 - %exitcond.not = icmp eq i64 %1639, %smax - br i1 %exitcond.not, label %1632, label %1638, !llvm.loop !30 - -1656: ; preds = %1656, %1635 - %1657 = phi i64 [ %1398, %1635 ], [ %1673, %1656 ] - %1658 = getelementptr double, ptr %1637, i64 %1657 - %1659 = load double, ptr %1658, align 8, !tbaa !7 - %1660 = getelementptr double, ptr %1502, i64 %1657 - %1661 = load double, ptr %1660, align 8, !tbaa !7 - %1662 = call double @llvm.fmuladd.f64(double %1620, double %1661, double %1659) - %1663 = getelementptr double, ptr %1508, i64 %1657 - %1664 = load double, ptr %1663, align 8, !tbaa !7 - %1665 = call double @llvm.fmuladd.f64(double %1621, double %1664, double %1662) - %1666 = fmul double %1617, %1665 - %1667 = fsub double %1659, %1666 - store double %1667, ptr %1658, align 8, !tbaa !7 - %1668 = load double, ptr %1660, align 8, !tbaa !7 - %1669 = fneg double %1666 - %1670 = call double @llvm.fmuladd.f64(double %1669, double %1620, double %1668) - store double %1670, ptr %1660, align 8, !tbaa !7 - %1671 = load double, ptr %1663, align 8, !tbaa !7 - %1672 = call double @llvm.fmuladd.f64(double %1669, double %1621, double %1671) - store double %1672, ptr %1663, align 8, !tbaa !7 - %1673 = add nsw i64 %1657, 1 - %1674 = icmp slt i64 %1657, %1504 - br i1 %1674, label %1656, label %1675, !llvm.loop !31 - -1675: ; preds = %1656 - store double %1666, ptr %25, align 8, !tbaa !7 +1645: ; preds = %1630 + %1646 = fcmp oge double %1637, 0.000000e+00 + %1647 = fneg double %1637 + %1648 = select i1 %1646, double %1637, double %1647 + %1649 = fcmp olt double %1641, %1648 + %1650 = fdiv double %1638, %1637 + %1651 = fcmp oge double %1650, 0.000000e+00 + %1652 = fneg double %1650 + %1653 = select i1 %1651, double %1650, double %1652 + %1654 = select i1 %1649, double %1653, double 1.000000e+00 + %1655 = insertelement <2 x double> poison, double %1631, i64 0 + %1656 = insertelement <2 x double> %1655, double %1618, i64 1 + %1657 = fcmp oge <2 x double> %1656, zeroinitializer + %1658 = fneg <2 x double> %1656 + %1659 = select <2 x i1> %1657, <2 x double> %1656, <2 x double> %1658 + %shift287 = shufflevector <2 x double> %1659, <2 x double> poison, <2 x i32> + %1660 = fcmp olt <2 x double> %1659, %shift287 + %1661 = extractelement <2 x i1> %1660, i64 0 + br i1 %1661, label %1662, label %1669 + +1662: ; preds = %1645 + %1663 = fdiv double %1631, %1618 + store double %1663, ptr %24, align 8, !tbaa !7 + %1664 = fcmp oge double %1663, 0.000000e+00 + %1665 = fneg double %1663 + %1666 = select i1 %1664, double %1663, double %1665 + %1667 = fcmp ole double %1654, %1666 + %1668 = select i1 %1667, double %1654, double %1666 + br label %1669 + +1669: ; preds = %1662, %1645 + %1670 = phi double [ %1668, %1662 ], [ %1654, %1645 ] + %1671 = fmul double %1637, %1670 + %1672 = fdiv double %1671, %1638 + %1673 = fneg double %1632 + %1674 = fmul double %1672, %1673 + %1675 = call double @llvm.fmuladd.f64(double %1670, double %1618, double %1674) br label %1676 -1676: ; preds = %1675, %1633 - br i1 %99, label %1677, label %1709 - -1677: ; preds = %1676 - %1678 = load i32, ptr %3, align 4, !tbaa !3 - %1679 = icmp slt i32 %1678, 1 - br i1 %1679, label %1709, label %1680 - -1680: ; preds = %1677 - %1681 = mul nsw i64 %1401, %322 - %1682 = mul nsw i64 %1500, %322 - %1683 = mul nsw i64 %1504, %322 - %1684 = add nuw i32 %1678, 1 - %1685 = zext i32 %1684 to i64 - %1686 = getelementptr double, ptr %78, i64 %1681 - %1687 = getelementptr double, ptr %78, i64 %1682 - %1688 = getelementptr double, ptr %78, i64 %1683 - br label %1689 - -1689: ; preds = %1689, %1680 - %1690 = phi i64 [ 1, %1680 ], [ %1706, %1689 ] - %1691 = getelementptr double, ptr %1686, i64 %1690 - %1692 = load double, ptr %1691, align 8, !tbaa !7 - %1693 = getelementptr double, ptr %1687, i64 %1690 - %1694 = load double, ptr %1693, align 8, !tbaa !7 - %1695 = call double @llvm.fmuladd.f64(double %1620, double %1694, double %1692) - %1696 = getelementptr double, ptr %1688, i64 %1690 - %1697 = load double, ptr %1696, align 8, !tbaa !7 - %1698 = call double @llvm.fmuladd.f64(double %1621, double %1697, double %1695) - %1699 = fmul double %1617, %1698 - %1700 = fsub double %1692, %1699 - store double %1700, ptr %1691, align 8, !tbaa !7 - %1701 = load double, ptr %1693, align 8, !tbaa !7 - %1702 = fneg double %1699 - %1703 = call double @llvm.fmuladd.f64(double %1702, double %1620, double %1701) - store double %1703, ptr %1693, align 8, !tbaa !7 - %1704 = load double, ptr %1696, align 8, !tbaa !7 - %1705 = call double @llvm.fmuladd.f64(double %1702, double %1621, double %1704) - store double %1705, ptr %1696, align 8, !tbaa !7 - %1706 = add nuw nsw i64 %1690, 1 - %1707 = icmp eq i64 %1706, %1685 - br i1 %1707, label %1708, label %1689, !llvm.loop !32 - -1708: ; preds = %1689 - store double %1699, ptr %25, align 8, !tbaa !7 +1676: ; preds = %1669, %1643 + %1677 = phi double [ 1.000000e+00, %1643 ], [ %1672, %1669 ] + %.pn = phi double [ %1644, %1643 ], [ %1675, %1669 ] + %1678 = phi double [ 0.000000e+00, %1643 ], [ %1670, %1669 ] + %1679 = fdiv double %.pn, %1631 + br i1 %1628, label %.thread68, label %1680 + +1680: ; preds = %1676 + store double %1677, ptr %25, align 8, !tbaa !7 + br label %.thread68 + +.thread68: ; preds = %.loopexit216, %1680, %1676 + %1681 = phi double [ %1678, %1680 ], [ %1678, %1676 ], [ 0.000000e+00, %.loopexit216 ] + %1682 = phi double [ %1679, %1680 ], [ %1677, %1676 ], [ 0.000000e+00, %.loopexit216 ] + %1683 = phi double [ %1677, %1680 ], [ %1679, %1676 ], [ 1.000000e+00, %.loopexit216 ] + store double %1681, ptr %24, align 8, !tbaa !7 + %1684 = fmul double %1683, %1683 + %1685 = call double @llvm.fmuladd.f64(double %1681, double %1681, double %1684) + %1686 = call double @llvm.fmuladd.f64(double %1682, double %1682, double %1685) + %sqrt = call double @llvm.sqrt.f64(double %1686) + %1687 = fdiv double %1681, %sqrt + %1688 = fadd double %1687, 1.000000e+00 + store double %1688, ptr %57, align 8, !tbaa !7 + %1689 = fadd double %1681, %sqrt + %1690 = fdiv double -1.000000e+00, %1689 + store double 1.000000e+00, ptr %29, align 16, !tbaa !7 + %1691 = fmul double %1683, %1690 + store double %1691, ptr %311, align 8, !tbaa !7 + %1692 = fmul double %1682, %1690 + store double %1692, ptr %312, align 16, !tbaa !7 + %1693 = add i32 %1442, 3 + store i32 %1693, ptr %23, align 4, !tbaa !3 + %1694 = call i32 @llvm.smin.i32(i32 %1693, i32 %337) + %1695 = icmp sgt i32 %663, %1694 + br i1 %1695, label %1704, label %1696 + +1696: ; preds = %.thread68 + %1697 = mul nsw i64 %1430, %324 + %1698 = mul nsw i64 %1571, %324 + %1699 = mul nsw i64 %1575, %324 + %1700 = getelementptr double, ptr %63, i64 %1697 + %1701 = getelementptr double, ptr %63, i64 %1698 + %1702 = getelementptr double, ptr %63, i64 %1699 br label %1709 -1709: ; preds = %1708, %1677, %1676 - %1710 = mul nsw i64 %1401, %323 - %1711 = getelementptr double, ptr %67, i64 %1500 - %1712 = getelementptr double, ptr %1711, i64 %1710 - store <2 x double> zeroinitializer, ptr %1712, align 8, !tbaa !7 - %1713 = load i32, ptr %22, align 4, !tbaa !3 - %1714 = sext i32 %1713 to i64 - %1715 = icmp slt i64 %1401, %1714 +1703: ; preds = %1709 + store double %1719, ptr %25, align 8, !tbaa !7 + br label %1704 + +1704: ; preds = %1703, %.thread68 + %1705 = icmp slt i64 %1575, %1426 + br i1 %1705, label %1747, label %1706 + +1706: ; preds = %1704 + %1707 = mul nsw i64 %1430, %323 + %1708 = getelementptr double, ptr %67, i64 %1707 + br label %1727 + +1709: ; preds = %1709, %1696 + %1710 = phi i64 [ %1426, %1696 ], [ %1726, %1709 ] + %1711 = getelementptr double, ptr %1700, i64 %1710 + %1712 = load double, ptr %1711, align 8, !tbaa !7 + %1713 = getelementptr double, ptr %1701, i64 %1710 + %1714 = load double, ptr %1713, align 8, !tbaa !7 + %1715 = call double @llvm.fmuladd.f64(double %1691, double %1714, double %1712) + %1716 = getelementptr double, ptr %1702, i64 %1710 + %1717 = load double, ptr %1716, align 8, !tbaa !7 + %1718 = call double @llvm.fmuladd.f64(double %1692, double %1717, double %1715) + %1719 = fmul double %1688, %1718 + %1720 = fsub double %1712, %1719 + store double %1720, ptr %1711, align 8, !tbaa !7 + %1721 = load double, ptr %1713, align 8, !tbaa !7 + %1722 = fneg double %1719 + %1723 = call double @llvm.fmuladd.f64(double %1722, double %1691, double %1721) + store double %1723, ptr %1713, align 8, !tbaa !7 + %1724 = load double, ptr %1716, align 8, !tbaa !7 + %1725 = call double @llvm.fmuladd.f64(double %1722, double %1692, double %1724) + store double %1725, ptr %1716, align 8, !tbaa !7 + %1726 = add nsw i64 %1710, 1 + %exitcond.not = icmp eq i64 %1710, %smax + br i1 %exitcond.not, label %1703, label %1709, !llvm.loop !30 + +1727: ; preds = %1727, %1706 + %1728 = phi i64 [ %1426, %1706 ], [ %1744, %1727 ] + %1729 = getelementptr double, ptr %1708, i64 %1728 + %1730 = load double, ptr %1729, align 8, !tbaa !7 + %1731 = getelementptr double, ptr %1573, i64 %1728 + %1732 = load double, ptr %1731, align 8, !tbaa !7 + %1733 = call double @llvm.fmuladd.f64(double %1691, double %1732, double %1730) + %1734 = getelementptr double, ptr %1579, i64 %1728 + %1735 = load double, ptr %1734, align 8, !tbaa !7 + %1736 = call double @llvm.fmuladd.f64(double %1692, double %1735, double %1733) + %1737 = fmul double %1688, %1736 + %1738 = fsub double %1730, %1737 + store double %1738, ptr %1729, align 8, !tbaa !7 + %1739 = load double, ptr %1731, align 8, !tbaa !7 + %1740 = fneg double %1737 + %1741 = call double @llvm.fmuladd.f64(double %1740, double %1691, double %1739) + store double %1741, ptr %1731, align 8, !tbaa !7 + %1742 = load double, ptr %1734, align 8, !tbaa !7 + %1743 = call double @llvm.fmuladd.f64(double %1740, double %1692, double %1742) + store double %1743, ptr %1734, align 8, !tbaa !7 + %1744 = add nsw i64 %1728, 1 + %1745 = icmp slt i64 %1728, %1575 + br i1 %1745, label %1727, label %1746, !llvm.loop !31 + +1746: ; preds = %1727 + store double %1737, ptr %25, align 8, !tbaa !7 + br label %1747 + +1747: ; preds = %1746, %1704 + br i1 %99, label %1748, label %1780 + +1748: ; preds = %1747 + %1749 = load i32, ptr %3, align 4, !tbaa !3 + %1750 = icmp slt i32 %1749, 1 + br i1 %1750, label %1780, label %1751 + +1751: ; preds = %1748 + %1752 = mul nsw i64 %1430, %322 + %1753 = mul nsw i64 %1571, %322 + %1754 = mul nsw i64 %1575, %322 + %1755 = add nuw i32 %1749, 1 + %1756 = zext i32 %1755 to i64 + %1757 = getelementptr double, ptr %78, i64 %1752 + %1758 = getelementptr double, ptr %78, i64 %1753 + %1759 = getelementptr double, ptr %78, i64 %1754 + br label %1760 + +1760: ; preds = %1760, %1751 + %1761 = phi i64 [ 1, %1751 ], [ %1777, %1760 ] + %1762 = getelementptr double, ptr %1757, i64 %1761 + %1763 = load double, ptr %1762, align 8, !tbaa !7 + %1764 = getelementptr double, ptr %1758, i64 %1761 + %1765 = load double, ptr %1764, align 8, !tbaa !7 + %1766 = call double @llvm.fmuladd.f64(double %1691, double %1765, double %1763) + %1767 = getelementptr double, ptr %1759, i64 %1761 + %1768 = load double, ptr %1767, align 8, !tbaa !7 + %1769 = call double @llvm.fmuladd.f64(double %1692, double %1768, double %1766) + %1770 = fmul double %1688, %1769 + %1771 = fsub double %1763, %1770 + store double %1771, ptr %1762, align 8, !tbaa !7 + %1772 = load double, ptr %1764, align 8, !tbaa !7 + %1773 = fneg double %1770 + %1774 = call double @llvm.fmuladd.f64(double %1773, double %1691, double %1772) + store double %1774, ptr %1764, align 8, !tbaa !7 + %1775 = load double, ptr %1767, align 8, !tbaa !7 + %1776 = call double @llvm.fmuladd.f64(double %1773, double %1692, double %1775) + store double %1776, ptr %1767, align 8, !tbaa !7 + %1777 = add nuw nsw i64 %1761, 1 + %1778 = icmp eq i64 %1777, %1756 + br i1 %1778, label %1779, label %1760, !llvm.loop !32 + +1779: ; preds = %1760 + store double %1770, ptr %25, align 8, !tbaa !7 + br label %1780 + +1780: ; preds = %1779, %1748, %1747 + %1781 = mul nsw i64 %1430, %323 + %1782 = getelementptr double, ptr %67, i64 %1571 + %1783 = getelementptr double, ptr %1782, i64 %1781 + store <2 x double> zeroinitializer, ptr %1783, align 8, !tbaa !7 + %1784 = load i32, ptr %22, align 4, !tbaa !3 + %1785 = sext i32 %1784 to i64 + %1786 = icmp slt i64 %1430, %1785 %indvars.iv.next = add i32 %indvars.iv, 1 - br i1 %1715, label %1400, label %.loopexit79, !llvm.loop !33 - -.loopexit79: ; preds = %1709, %1304 - %1716 = mul nsw i32 %1393, %60 - %1717 = add nsw i32 %1716, %340 - %1718 = sext i32 %1717 to i64 - %1719 = getelementptr inbounds double, ptr %63, i64 %1718 - %1720 = load double, ptr %1719, align 8, !tbaa !7 - store double %1720, ptr %25, align 8, !tbaa !7 - %1721 = add nsw i32 %1716, %335 - %1722 = sext i32 %1721 to i64 - %1723 = getelementptr inbounds double, ptr %63, i64 %1722 - call void @dlartg_(ptr noundef nonnull %25, ptr noundef %1723, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %1719) #5 - store double 0.000000e+00, ptr %1723, align 8, !tbaa !7 - store i32 %332, ptr %22, align 4, !tbaa !3 - %1724 = icmp sgt i32 %340, %332 - br i1 %1724, label %1759, label %1725 - -1725: ; preds = %.loopexit79 - %1726 = load double, ptr %27, align 8, !tbaa !7 - %1727 = load double, ptr %28, align 8, !tbaa !7 - %1728 = fneg double %1727 - %1729 = sext i32 %340 to i64 - %1730 = add i32 %332, 1 - %1731 = getelementptr double, ptr %63, i64 %1729 - %1732 = getelementptr double, ptr %63, i64 %365 - %1733 = getelementptr double, ptr %67, i64 %1729 - %1734 = getelementptr double, ptr %67, i64 %365 - br label %1735 - -1735: ; preds = %1735, %1725 - %1736 = phi i64 [ %1729, %1725 ], [ %1755, %1735 ] - %1737 = mul nsw i64 %1736, %324 - %1738 = getelementptr double, ptr %1731, i64 %1737 - %1739 = load double, ptr %1738, align 8, !tbaa !7 - %1740 = getelementptr double, ptr %1732, i64 %1737 - %1741 = load double, ptr %1740, align 8, !tbaa !7 - %1742 = fmul double %1727, %1741 - %1743 = call double @llvm.fmuladd.f64(double %1726, double %1739, double %1742) - %1744 = fmul double %1726, %1741 - %1745 = call double @llvm.fmuladd.f64(double %1728, double %1739, double %1744) - store double %1745, ptr %1740, align 8, !tbaa !7 - store double %1743, ptr %1738, align 8, !tbaa !7 - %1746 = mul nsw i64 %1736, %323 - %1747 = getelementptr double, ptr %1733, i64 %1746 - %1748 = load double, ptr %1747, align 8, !tbaa !7 - %1749 = getelementptr double, ptr %1734, i64 %1746 - %1750 = load double, ptr %1749, align 8, !tbaa !7 - %1751 = fmul double %1727, %1750 - %1752 = call double @llvm.fmuladd.f64(double %1726, double %1748, double %1751) - %1753 = fmul double %1726, %1750 - %1754 = call double @llvm.fmuladd.f64(double %1728, double %1748, double %1753) - store double %1754, ptr %1749, align 8, !tbaa !7 - store double %1752, ptr %1747, align 8, !tbaa !7 - %1755 = add nsw i64 %1736, 1 - %1756 = trunc i64 %1755 to i32 - %1757 = icmp eq i32 %1730, %1756 - br i1 %1757, label %1758, label %1735, !llvm.loop !34 - -1758: ; preds = %1735 - store double %1752, ptr %26, align 8, !tbaa !7 - br label %1759 - -1759: ; preds = %1758, %.loopexit79 - br i1 %87, label %1760, label %.loopexit218 - -1760: ; preds = %1759 - %1761 = load i32, ptr %3, align 4, !tbaa !3 - store i32 %1761, ptr %22, align 4, !tbaa !3 - %1762 = icmp slt i32 %1761, 1 - br i1 %1762, label %.loopexit218, label %1763 - -1763: ; preds = %1760 - %1764 = load double, ptr %27, align 8, !tbaa !7 - %1765 = mul nsw i32 %340, %71 - %1766 = load double, ptr %28, align 8, !tbaa !7 - %1767 = mul nsw i32 %335, %71 - %1768 = fneg double %1766 - %1769 = sext i32 %1765 to i64 - %1770 = sext i32 %1767 to i64 - %1771 = add nuw i32 %1761, 1 - %1772 = zext i32 %1771 to i64 - %1773 = getelementptr double, ptr %74, i64 %1769 - %1774 = getelementptr double, ptr %74, i64 %1770 - br label %1775 - -1775: ; preds = %1775, %1763 - %1776 = phi i64 [ 1, %1763 ], [ %1785, %1775 ] - %1777 = getelementptr double, ptr %1773, i64 %1776 - %1778 = load double, ptr %1777, align 8, !tbaa !7 - %1779 = getelementptr double, ptr %1774, i64 %1776 - %1780 = load double, ptr %1779, align 8, !tbaa !7 - %1781 = fmul double %1766, %1780 - %1782 = call double @llvm.fmuladd.f64(double %1764, double %1778, double %1781) - %1783 = fmul double %1764, %1780 - %1784 = call double @llvm.fmuladd.f64(double %1768, double %1778, double %1783) - store double %1784, ptr %1779, align 8, !tbaa !7 - store double %1782, ptr %1777, align 8, !tbaa !7 - %1785 = add nuw nsw i64 %1776, 1 - %1786 = icmp eq i64 %1785, %1772 - br i1 %1786, label %.loopexit218, label %1775, !llvm.loop !35 - -.loopexit218: ; preds = %1775, %1760, %1759 - %1787 = load double, ptr %355, align 8, !tbaa !7 - store double %1787, ptr %25, align 8, !tbaa !7 - %1788 = add nsw i32 %685, %335 + %indvar.next = add i64 %indvar, 1 + br i1 %1786, label %1429, label %.loopexit79, !llvm.loop !33 + +.loopexit79: ; preds = %1780, %1332 + %1787 = mul nsw i32 %1421, %60 + %1788 = add nsw i32 %1787, %342 %1789 = sext i32 %1788 to i64 - %1790 = getelementptr inbounds double, ptr %67, i64 %1789 - call void @dlartg_(ptr noundef nonnull %25, ptr noundef %1790, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %355) #5 - store double 0.000000e+00, ptr %1790, align 8, !tbaa !7 - %1791 = icmp sgt i32 %661, %335 - br i1 %1791, label %1816, label %1792 - -1792: ; preds = %.loopexit218 - %1793 = load double, ptr %27, align 8, !tbaa !7 - %1794 = load double, ptr %28, align 8, !tbaa !7 - %1795 = fneg double %1794 - %1796 = sext i32 %661 to i64 - %1797 = sext i32 %692 to i64 - %1798 = sext i32 %341 to i64 - %1799 = add i32 %335, 1 - %1800 = getelementptr double, ptr %63, i64 %1797 - %1801 = getelementptr double, ptr %63, i64 %1798 - br label %1802 - -1802: ; preds = %1802, %1792 - %1803 = phi i64 [ %1796, %1792 ], [ %1812, %1802 ] - %1804 = getelementptr double, ptr %1800, i64 %1803 - %1805 = load double, ptr %1804, align 8, !tbaa !7 - %1806 = getelementptr double, ptr %1801, i64 %1803 - %1807 = load double, ptr %1806, align 8, !tbaa !7 - %1808 = fmul double %1794, %1807 - %1809 = call double @llvm.fmuladd.f64(double %1793, double %1805, double %1808) - %1810 = fmul double %1793, %1807 - %1811 = call double @llvm.fmuladd.f64(double %1795, double %1805, double %1810) - store double %1811, ptr %1806, align 8, !tbaa !7 - store double %1809, ptr %1804, align 8, !tbaa !7 - %1812 = add nsw i64 %1803, 1 - %1813 = trunc i64 %1812 to i32 - %1814 = icmp eq i32 %1799, %1813 - br i1 %1814, label %1815, label %1802, !llvm.loop !36 - -1815: ; preds = %1802 - store double %1809, ptr %25, align 8, !tbaa !7 - br label %1816 - -1816: ; preds = %1815, %.loopexit218 - store i32 %340, ptr %22, align 4, !tbaa !3 - %1817 = icmp slt i32 %661, %335 - br i1 %1817, label %1818, label %1840 - -1818: ; preds = %1816 - %1819 = load double, ptr %27, align 8, !tbaa !7 - %1820 = load double, ptr %28, align 8, !tbaa !7 - %1821 = fneg double %1820 - %1822 = sext i32 %661 to i64 - %1823 = sext i32 %352 to i64 - %1824 = sext i32 %685 to i64 - %1825 = getelementptr double, ptr %67, i64 %1823 - %1826 = getelementptr double, ptr %67, i64 %1824 - br label %1827 - -1827: ; preds = %1827, %1818 - %1828 = phi i64 [ %1822, %1818 ], [ %1837, %1827 ] - %1829 = getelementptr double, ptr %1825, i64 %1828 - %1830 = load double, ptr %1829, align 8, !tbaa !7 - %1831 = getelementptr double, ptr %1826, i64 %1828 - %1832 = load double, ptr %1831, align 8, !tbaa !7 - %1833 = fmul double %1820, %1832 - %1834 = call double @llvm.fmuladd.f64(double %1819, double %1830, double %1833) - %1835 = fmul double %1819, %1832 - %1836 = call double @llvm.fmuladd.f64(double %1821, double %1830, double %1835) - store double %1836, ptr %1831, align 8, !tbaa !7 - store double %1834, ptr %1829, align 8, !tbaa !7 - %1837 = add nsw i64 %1828, 1 - %1838 = icmp eq i64 %1837, %365 - br i1 %1838, label %1839, label %1827, !llvm.loop !37 - -1839: ; preds = %1827 - store double %1834, ptr %25, align 8, !tbaa !7 - br label %1840 - -1840: ; preds = %1839, %1816 - br i1 %99, label %1841, label %.loopexit76 - -1841: ; preds = %1840 - %1842 = load i32, ptr %3, align 4, !tbaa !3 - store i32 %1842, ptr %22, align 4, !tbaa !3 - %1843 = icmp slt i32 %1842, 1 - br i1 %1843, label %.loopexit76, label %1844 - -1844: ; preds = %1841 - %1845 = load double, ptr %27, align 8, !tbaa !7 - %1846 = mul nsw i32 %335, %75 - %1847 = load double, ptr %28, align 8, !tbaa !7 - %1848 = mul nsw i32 %340, %75 - %1849 = fneg double %1847 - %1850 = sext i32 %1846 to i64 - %1851 = sext i32 %1848 to i64 - %1852 = add nuw i32 %1842, 1 - %1853 = zext i32 %1852 to i64 - %1854 = getelementptr double, ptr %78, i64 %1850 - %1855 = getelementptr double, ptr %78, i64 %1851 - br label %1856 - -1856: ; preds = %1856, %1844 - %1857 = phi i64 [ 1, %1844 ], [ %1866, %1856 ] - %1858 = getelementptr double, ptr %1854, i64 %1857 - %1859 = load double, ptr %1858, align 8, !tbaa !7 - %1860 = getelementptr double, ptr %1855, i64 %1857 - %1861 = load double, ptr %1860, align 8, !tbaa !7 - %1862 = fmul double %1847, %1861 - %1863 = call double @llvm.fmuladd.f64(double %1845, double %1859, double %1862) - %1864 = fmul double %1845, %1861 - %1865 = call double @llvm.fmuladd.f64(double %1849, double %1859, double %1864) - store double %1865, ptr %1860, align 8, !tbaa !7 - store double %1863, ptr %1858, align 8, !tbaa !7 - %1866 = add nuw nsw i64 %1857, 1 - %1867 = icmp eq i64 %1866, %1853 - br i1 %1867, label %1868, label %1856, !llvm.loop !38 - -1868: ; preds = %1856 - store double %1863, ptr %25, align 8, !tbaa !7 + %1790 = getelementptr inbounds double, ptr %63, i64 %1789 + %1791 = load double, ptr %1790, align 8, !tbaa !7 + store double %1791, ptr %25, align 8, !tbaa !7 + %1792 = add nsw i32 %1787, %337 + %1793 = sext i32 %1792 to i64 + %1794 = getelementptr inbounds double, ptr %63, i64 %1793 + call void @dlartg_(ptr noundef nonnull %25, ptr noundef %1794, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %1790) #5 + store double 0.000000e+00, ptr %1794, align 8, !tbaa !7 + store i32 %334, ptr %22, align 4, !tbaa !3 + %1795 = icmp sgt i32 %342, %334 + br i1 %1795, label %1830, label %1796 + +1796: ; preds = %.loopexit79 + %1797 = load double, ptr %27, align 8, !tbaa !7 + %1798 = load double, ptr %28, align 8, !tbaa !7 + %1799 = fneg double %1798 + %1800 = sext i32 %342 to i64 + %1801 = add i32 %334, 1 + %1802 = getelementptr double, ptr %63, i64 %1800 + %1803 = getelementptr double, ptr %63, i64 %367 + %1804 = getelementptr double, ptr %67, i64 %1800 + %1805 = getelementptr double, ptr %67, i64 %367 + br label %1806 + +1806: ; preds = %1806, %1796 + %1807 = phi i64 [ %1800, %1796 ], [ %1826, %1806 ] + %1808 = mul nsw i64 %1807, %324 + %1809 = getelementptr double, ptr %1802, i64 %1808 + %1810 = load double, ptr %1809, align 8, !tbaa !7 + %1811 = getelementptr double, ptr %1803, i64 %1808 + %1812 = load double, ptr %1811, align 8, !tbaa !7 + %1813 = fmul double %1798, %1812 + %1814 = call double @llvm.fmuladd.f64(double %1797, double %1810, double %1813) + %1815 = fmul double %1797, %1812 + %1816 = call double @llvm.fmuladd.f64(double %1799, double %1810, double %1815) + store double %1816, ptr %1811, align 8, !tbaa !7 + store double %1814, ptr %1809, align 8, !tbaa !7 + %1817 = mul nsw i64 %1807, %323 + %1818 = getelementptr double, ptr %1804, i64 %1817 + %1819 = load double, ptr %1818, align 8, !tbaa !7 + %1820 = getelementptr double, ptr %1805, i64 %1817 + %1821 = load double, ptr %1820, align 8, !tbaa !7 + %1822 = fmul double %1798, %1821 + %1823 = call double @llvm.fmuladd.f64(double %1797, double %1819, double %1822) + %1824 = fmul double %1797, %1821 + %1825 = call double @llvm.fmuladd.f64(double %1799, double %1819, double %1824) + store double %1825, ptr %1820, align 8, !tbaa !7 + store double %1823, ptr %1818, align 8, !tbaa !7 + %1826 = add nsw i64 %1807, 1 + %1827 = trunc i64 %1826 to i32 + %1828 = icmp eq i32 %1801, %1827 + br i1 %1828, label %1829, label %1806, !llvm.loop !34 + +1829: ; preds = %1806 + store double %1823, ptr %26, align 8, !tbaa !7 + br label %1830 + +1830: ; preds = %1829, %.loopexit79 + br i1 %87, label %1831, label %.loopexit218 + +1831: ; preds = %1830 + %1832 = load i32, ptr %3, align 4, !tbaa !3 + store i32 %1832, ptr %22, align 4, !tbaa !3 + %1833 = icmp slt i32 %1832, 1 + br i1 %1833, label %.loopexit218, label %1834 + +1834: ; preds = %1831 + %1835 = load double, ptr %27, align 8, !tbaa !7 + %1836 = mul nsw i32 %342, %71 + %1837 = load double, ptr %28, align 8, !tbaa !7 + %1838 = mul nsw i32 %337, %71 + %1839 = fneg double %1837 + %1840 = sext i32 %1836 to i64 + %1841 = sext i32 %1838 to i64 + %1842 = add nuw i32 %1832, 1 + %1843 = zext i32 %1842 to i64 + %1844 = getelementptr double, ptr %74, i64 %1840 + %1845 = getelementptr double, ptr %74, i64 %1841 + br label %1846 + +1846: ; preds = %1846, %1834 + %1847 = phi i64 [ 1, %1834 ], [ %1856, %1846 ] + %1848 = getelementptr double, ptr %1844, i64 %1847 + %1849 = load double, ptr %1848, align 8, !tbaa !7 + %1850 = getelementptr double, ptr %1845, i64 %1847 + %1851 = load double, ptr %1850, align 8, !tbaa !7 + %1852 = fmul double %1837, %1851 + %1853 = call double @llvm.fmuladd.f64(double %1835, double %1849, double %1852) + %1854 = fmul double %1835, %1851 + %1855 = call double @llvm.fmuladd.f64(double %1839, double %1849, double %1854) + store double %1855, ptr %1850, align 8, !tbaa !7 + store double %1853, ptr %1848, align 8, !tbaa !7 + %1856 = add nuw nsw i64 %1847, 1 + %1857 = icmp eq i64 %1856, %1843 + br i1 %1857, label %.loopexit218, label %1846, !llvm.loop !35 + +.loopexit218: ; preds = %1846, %1831, %1830 + %1858 = load double, ptr %357, align 8, !tbaa !7 + store double %1858, ptr %25, align 8, !tbaa !7 + %1859 = add nsw i32 %687, %337 + %1860 = sext i32 %1859 to i64 + %1861 = getelementptr inbounds double, ptr %67, i64 %1860 + call void @dlartg_(ptr noundef nonnull %25, ptr noundef %1861, ptr noundef nonnull %27, ptr noundef nonnull %28, ptr noundef nonnull %357) #5 + store double 0.000000e+00, ptr %1861, align 8, !tbaa !7 + %1862 = icmp sgt i32 %663, %337 + br i1 %1862, label %1887, label %1863 + +1863: ; preds = %.loopexit218 + %1864 = load double, ptr %27, align 8, !tbaa !7 + %1865 = load double, ptr %28, align 8, !tbaa !7 + %1866 = fneg double %1865 + %1867 = sext i32 %663 to i64 + %1868 = sext i32 %694 to i64 + %1869 = sext i32 %343 to i64 + %1870 = add i32 %337, 1 + %1871 = getelementptr double, ptr %63, i64 %1868 + %1872 = getelementptr double, ptr %63, i64 %1869 + br label %1873 + +1873: ; preds = %1873, %1863 + %1874 = phi i64 [ %1867, %1863 ], [ %1883, %1873 ] + %1875 = getelementptr double, ptr %1871, i64 %1874 + %1876 = load double, ptr %1875, align 8, !tbaa !7 + %1877 = getelementptr double, ptr %1872, i64 %1874 + %1878 = load double, ptr %1877, align 8, !tbaa !7 + %1879 = fmul double %1865, %1878 + %1880 = call double @llvm.fmuladd.f64(double %1864, double %1876, double %1879) + %1881 = fmul double %1864, %1878 + %1882 = call double @llvm.fmuladd.f64(double %1866, double %1876, double %1881) + store double %1882, ptr %1877, align 8, !tbaa !7 + store double %1880, ptr %1875, align 8, !tbaa !7 + %1883 = add nsw i64 %1874, 1 + %1884 = trunc i64 %1883 to i32 + %1885 = icmp eq i32 %1870, %1884 + br i1 %1885, label %1886, label %1873, !llvm.loop !36 + +1886: ; preds = %1873 + store double %1880, ptr %25, align 8, !tbaa !7 + br label %1887 + +1887: ; preds = %1886, %.loopexit218 + store i32 %342, ptr %22, align 4, !tbaa !3 + %1888 = icmp slt i32 %663, %337 + br i1 %1888, label %1889, label %1911 + +1889: ; preds = %1887 + %1890 = load double, ptr %27, align 8, !tbaa !7 + %1891 = load double, ptr %28, align 8, !tbaa !7 + %1892 = fneg double %1891 + %1893 = sext i32 %663 to i64 + %1894 = sext i32 %354 to i64 + %1895 = sext i32 %687 to i64 + %1896 = getelementptr double, ptr %67, i64 %1894 + %1897 = getelementptr double, ptr %67, i64 %1895 + br label %1898 + +1898: ; preds = %1898, %1889 + %1899 = phi i64 [ %1893, %1889 ], [ %1908, %1898 ] + %1900 = getelementptr double, ptr %1896, i64 %1899 + %1901 = load double, ptr %1900, align 8, !tbaa !7 + %1902 = getelementptr double, ptr %1897, i64 %1899 + %1903 = load double, ptr %1902, align 8, !tbaa !7 + %1904 = fmul double %1891, %1903 + %1905 = call double @llvm.fmuladd.f64(double %1890, double %1901, double %1904) + %1906 = fmul double %1890, %1903 + %1907 = call double @llvm.fmuladd.f64(double %1892, double %1901, double %1906) + store double %1907, ptr %1902, align 8, !tbaa !7 + store double %1905, ptr %1900, align 8, !tbaa !7 + %1908 = add nsw i64 %1899, 1 + %1909 = icmp eq i64 %1908, %367 + br i1 %1909, label %1910, label %1898, !llvm.loop !37 + +1910: ; preds = %1898 + store double %1905, ptr %25, align 8, !tbaa !7 + br label %1911 + +1911: ; preds = %1910, %1887 + br i1 %99, label %1912, label %.loopexit76 + +1912: ; preds = %1911 + %1913 = load i32, ptr %3, align 4, !tbaa !3 + store i32 %1913, ptr %22, align 4, !tbaa !3 + %1914 = icmp slt i32 %1913, 1 + br i1 %1914, label %.loopexit76, label %1915 + +1915: ; preds = %1912 + %1916 = load double, ptr %27, align 8, !tbaa !7 + %1917 = mul nsw i32 %337, %75 + %1918 = load double, ptr %28, align 8, !tbaa !7 + %1919 = mul nsw i32 %342, %75 + %1920 = fneg double %1918 + %1921 = sext i32 %1917 to i64 + %1922 = sext i32 %1919 to i64 + %1923 = add nuw i32 %1913, 1 + %1924 = zext i32 %1923 to i64 + %1925 = getelementptr double, ptr %78, i64 %1921 + %1926 = getelementptr double, ptr %78, i64 %1922 + br label %1927 + +1927: ; preds = %1927, %1915 + %1928 = phi i64 [ 1, %1915 ], [ %1937, %1927 ] + %1929 = getelementptr double, ptr %1925, i64 %1928 + %1930 = load double, ptr %1929, align 8, !tbaa !7 + %1931 = getelementptr double, ptr %1926, i64 %1928 + %1932 = load double, ptr %1931, align 8, !tbaa !7 + %1933 = fmul double %1918, %1932 + %1934 = call double @llvm.fmuladd.f64(double %1916, double %1930, double %1933) + %1935 = fmul double %1916, %1932 + %1936 = call double @llvm.fmuladd.f64(double %1920, double %1930, double %1935) + store double %1936, ptr %1931, align 8, !tbaa !7 + store double %1934, ptr %1929, align 8, !tbaa !7 + %1937 = add nuw nsw i64 %1928, 1 + %1938 = icmp eq i64 %1937, %1924 + br i1 %1938, label %1939, label %1927, !llvm.loop !38 + +1939: ; preds = %1927 + store double %1934, ptr %25, align 8, !tbaa !7 br label %.loopexit76 -.loopexit76: ; preds = %982, %1302, %1868, %1841, %1840, %1093, %split, %656, %655 - %1869 = phi i32 [ %652, %655 ], [ %335, %1093 ], [ %335, %1840 ], [ %652, %656 ], [ %335, %split ], [ %335, %1868 ], [ %335, %1841 ], [ %1303, %1302 ], [ %335, %982 ] - %1870 = phi i32 [ 0, %655 ], [ %660, %1093 ], [ %660, %1840 ], [ 0, %656 ], [ %660, %split ], [ %660, %1868 ], [ %660, %1841 ], [ 0, %1302 ], [ %660, %982 ] - %1871 = phi double [ 0.000000e+00, %655 ], [ %333, %1093 ], [ %333, %1840 ], [ 0.000000e+00, %656 ], [ %737, %split ], [ %333, %1868 ], [ %333, %1841 ], [ 0.000000e+00, %1302 ], [ %737, %982 ] - %1872 = phi i32 [ %332, %655 ], [ %332, %1093 ], [ %332, %1840 ], [ %652, %656 ], [ %332, %split ], [ %332, %1868 ], [ %332, %1841 ], [ %spec.select, %1302 ], [ %332, %982 ] - %1873 = phi i32 [ %331, %655 ], [ %661, %1093 ], [ %661, %1840 ], [ %658, %656 ], [ %661, %split ], [ %661, %1868 ], [ %661, %1841 ], [ %spec.select69, %1302 ], [ %661, %982 ] - %1874 = add nuw nsw i32 %336, 1 - %1875 = icmp slt i32 %336, %300 - br i1 %1875, label %330, label %.loopexit73, !llvm.loop !39 - -.loopexit83: ; preds = %1249, %.loopexit74, %.loopexit88 - %1876 = phi i32 [ %295, %.loopexit88 ], [ %653, %.loopexit74 ], [ %1300, %1249 ] - %1877 = icmp sgt i32 %1876, 1 - br i1 %1877, label %1878, label %.loopexit73 - -1878: ; preds = %.loopexit83 - %1879 = sext i32 %64 to i64 - %1880 = sext i32 %60 to i64 - %1881 = sext i32 %75 to i64 - %1882 = zext nneg i32 %1876 to i64 - br label %1883 - -1883: ; preds = %.loopexit, %1878 - %1884 = phi i64 [ 1, %1878 ], [ %1940, %.loopexit ] - %1885 = phi i64 [ 2, %1878 ], [ %1941, %.loopexit ] - %1886 = trunc i64 %1884 to i32 - %1887 = mul nsw i64 %1884, %1879 - %1888 = mul nsw i32 %64, %1886 - %1889 = sext i32 %1888 to i64 - %1890 = getelementptr double, ptr %67, i64 %1884 - %1891 = getelementptr double, ptr %1890, i64 %1889 - %1892 = load double, ptr %1891, align 8, !tbaa !7 - %1893 = fcmp olt double %1892, 0.000000e+00 - br i1 %1893, label %1894, label %.loopexit - -1894: ; preds = %1883 - br i1 %80, label %1895, label %1909 - -1895: ; preds = %1894 - %1896 = mul nsw i64 %1884, %1880 - %1897 = getelementptr double, ptr %63, i64 %1896 - %1898 = getelementptr double, ptr %67, i64 %1887 - br label %1899 - -1899: ; preds = %1899, %1895 - %1900 = phi i64 [ 1, %1895 ], [ %1907, %1899 ] - %1901 = getelementptr double, ptr %1897, i64 %1900 - %1902 = load double, ptr %1901, align 8, !tbaa !7 - %1903 = fneg double %1902 - store double %1903, ptr %1901, align 8, !tbaa !7 - %1904 = getelementptr double, ptr %1898, i64 %1900 - %1905 = load double, ptr %1904, align 8, !tbaa !7 - %1906 = fneg double %1905 - store double %1906, ptr %1904, align 8, !tbaa !7 - %1907 = add nuw nsw i64 %1900, 1 - %1908 = icmp eq i64 %1907, %1885 - br i1 %1908, label %.loopexit72, label %1899, !llvm.loop !40 - -1909: ; preds = %1894 - %1910 = mul i32 %174, %1886 - %1911 = sext i32 %1910 to i64 - %1912 = getelementptr inbounds double, ptr %63, i64 %1911 - %1913 = load double, ptr %1912, align 8, !tbaa !7 - %1914 = fneg double %1913 - store double %1914, ptr %1912, align 8, !tbaa !7 - %1915 = load double, ptr %1891, align 8, !tbaa !7 - %1916 = fneg double %1915 - store double %1916, ptr %1891, align 8, !tbaa !7 +.loopexit76: ; preds = %1010, %1330, %1939, %1912, %1911, %1121, %split, %658, %657 + %1940 = phi i32 [ %654, %657 ], [ %337, %1121 ], [ %337, %1911 ], [ %654, %658 ], [ %337, %split ], [ %337, %1939 ], [ %337, %1912 ], [ %1331, %1330 ], [ %337, %1010 ] + %1941 = phi i32 [ 0, %657 ], [ %662, %1121 ], [ %662, %1911 ], [ 0, %658 ], [ %662, %split ], [ %662, %1939 ], [ %662, %1912 ], [ 0, %1330 ], [ %662, %1010 ] + %1942 = phi double [ 0.000000e+00, %657 ], [ %335, %1121 ], [ %335, %1911 ], [ 0.000000e+00, %658 ], [ %739, %split ], [ %335, %1939 ], [ %335, %1912 ], [ 0.000000e+00, %1330 ], [ %739, %1010 ] + %1943 = phi i32 [ %334, %657 ], [ %334, %1121 ], [ %334, %1911 ], [ %654, %658 ], [ %334, %split ], [ %334, %1939 ], [ %334, %1912 ], [ %spec.select, %1330 ], [ %334, %1010 ] + %1944 = phi i32 [ %333, %657 ], [ %663, %1121 ], [ %663, %1911 ], [ %660, %658 ], [ %663, %split ], [ %663, %1939 ], [ %663, %1912 ], [ %spec.select69, %1330 ], [ %663, %1010 ] + %1945 = add nuw nsw i32 %338, 1 + %1946 = icmp slt i32 %338, %300 + br i1 %1946, label %332, label %.loopexit73, !llvm.loop !39 + +.loopexit83: ; preds = %1277, %.loopexit74, %.loopexit88 + %1947 = phi i32 [ %295, %.loopexit88 ], [ %655, %.loopexit74 ], [ %1328, %1277 ] + %1948 = icmp sgt i32 %1947, 1 + br i1 %1948, label %1949, label %.loopexit73 + +1949: ; preds = %.loopexit83 + %1950 = sext i32 %64 to i64 + %1951 = sext i32 %60 to i64 + %1952 = sext i32 %75 to i64 + %1953 = zext nneg i32 %1947 to i64 + br label %1954 + +1954: ; preds = %.loopexit, %1949 + %1955 = phi i64 [ 1, %1949 ], [ %2011, %.loopexit ] + %1956 = phi i64 [ 2, %1949 ], [ %2012, %.loopexit ] + %1957 = trunc i64 %1955 to i32 + %1958 = mul nsw i64 %1955, %1950 + %1959 = mul nsw i32 %64, %1957 + %1960 = sext i32 %1959 to i64 + %1961 = getelementptr double, ptr %67, i64 %1955 + %1962 = getelementptr double, ptr %1961, i64 %1960 + %1963 = load double, ptr %1962, align 8, !tbaa !7 + %1964 = fcmp olt double %1963, 0.000000e+00 + br i1 %1964, label %1965, label %.loopexit + +1965: ; preds = %1954 + br i1 %80, label %1966, label %1980 + +1966: ; preds = %1965 + %1967 = mul nsw i64 %1955, %1951 + %1968 = getelementptr double, ptr %63, i64 %1967 + %1969 = getelementptr double, ptr %67, i64 %1958 + br label %1970 + +1970: ; preds = %1970, %1966 + %1971 = phi i64 [ 1, %1966 ], [ %1978, %1970 ] + %1972 = getelementptr double, ptr %1968, i64 %1971 + %1973 = load double, ptr %1972, align 8, !tbaa !7 + %1974 = fneg double %1973 + store double %1974, ptr %1972, align 8, !tbaa !7 + %1975 = getelementptr double, ptr %1969, i64 %1971 + %1976 = load double, ptr %1975, align 8, !tbaa !7 + %1977 = fneg double %1976 + store double %1977, ptr %1975, align 8, !tbaa !7 + %1978 = add nuw nsw i64 %1971, 1 + %1979 = icmp eq i64 %1978, %1956 + br i1 %1979, label %.loopexit72, label %1970, !llvm.loop !40 + +1980: ; preds = %1965 + %1981 = mul i32 %174, %1957 + %1982 = sext i32 %1981 to i64 + %1983 = getelementptr inbounds double, ptr %63, i64 %1982 + %1984 = load double, ptr %1983, align 8, !tbaa !7 + %1985 = fneg double %1984 + store double %1985, ptr %1983, align 8, !tbaa !7 + %1986 = load double, ptr %1962, align 8, !tbaa !7 + %1987 = fneg double %1986 + store double %1987, ptr %1962, align 8, !tbaa !7 br label %.loopexit72 -.loopexit72: ; preds = %1899, %1909 - br i1 %99, label %1917, label %.loopexit - -1917: ; preds = %.loopexit72 - %1918 = load i32, ptr %3, align 4, !tbaa !3 - %1919 = icmp slt i32 %1918, 1 - br i1 %1919, label %.loopexit, label %1920 - -1920: ; preds = %1917 - %1921 = mul nsw i64 %1884, %1881 - %1922 = add nuw i32 %1918, 1 - %1923 = zext i32 %1922 to i64 - %1924 = getelementptr double, ptr %78, i64 %1921 - br label %1925 - -1925: ; preds = %1925, %1920 - %1926 = phi i64 [ 1, %1920 ], [ %1930, %1925 ] - %1927 = getelementptr double, ptr %1924, i64 %1926 - %1928 = load double, ptr %1927, align 8, !tbaa !7 - %1929 = fneg double %1928 - store double %1929, ptr %1927, align 8, !tbaa !7 - %1930 = add nuw nsw i64 %1926, 1 - %1931 = icmp eq i64 %1930, %1923 - br i1 %1931, label %.loopexit, label %1925, !llvm.loop !41 - -.loopexit: ; preds = %1925, %1917, %.loopexit72, %1883 - %1932 = mul i32 %174, %1886 - %1933 = sext i32 %1932 to i64 - %1934 = getelementptr inbounds double, ptr %63, i64 %1933 - %1935 = load double, ptr %1934, align 8, !tbaa !7 - %1936 = getelementptr inbounds double, ptr %68, i64 %1884 - store double %1935, ptr %1936, align 8, !tbaa !7 - %1937 = getelementptr inbounds double, ptr %69, i64 %1884 - store double 0.000000e+00, ptr %1937, align 8, !tbaa !7 - %1938 = load double, ptr %1891, align 8, !tbaa !7 - %1939 = getelementptr inbounds double, ptr %70, i64 %1884 - store double %1938, ptr %1939, align 8, !tbaa !7 - %1940 = add nuw nsw i64 %1884, 1 - %1941 = add nuw nsw i64 %1885, 1 - %1942 = icmp eq i64 %1940, %1882 - br i1 %1942, label %.loopexit73, label %1883, !llvm.loop !42 +.loopexit72: ; preds = %1970, %1980 + br i1 %99, label %1988, label %.loopexit + +1988: ; preds = %.loopexit72 + %1989 = load i32, ptr %3, align 4, !tbaa !3 + %1990 = icmp slt i32 %1989, 1 + br i1 %1990, label %.loopexit, label %1991 + +1991: ; preds = %1988 + %1992 = mul nsw i64 %1955, %1952 + %1993 = add nuw i32 %1989, 1 + %1994 = zext i32 %1993 to i64 + %1995 = getelementptr double, ptr %78, i64 %1992 + br label %1996 + +1996: ; preds = %1996, %1991 + %1997 = phi i64 [ 1, %1991 ], [ %2001, %1996 ] + %1998 = getelementptr double, ptr %1995, i64 %1997 + %1999 = load double, ptr %1998, align 8, !tbaa !7 + %2000 = fneg double %1999 + store double %2000, ptr %1998, align 8, !tbaa !7 + %2001 = add nuw nsw i64 %1997, 1 + %2002 = icmp eq i64 %2001, %1994 + br i1 %2002, label %.loopexit, label %1996, !llvm.loop !41 + +.loopexit: ; preds = %1996, %1988, %.loopexit72, %1954 + %2003 = mul i32 %174, %1957 + %2004 = sext i32 %2003 to i64 + %2005 = getelementptr inbounds double, ptr %63, i64 %2004 + %2006 = load double, ptr %2005, align 8, !tbaa !7 + %2007 = getelementptr inbounds double, ptr %68, i64 %1955 + store double %2006, ptr %2007, align 8, !tbaa !7 + %2008 = getelementptr inbounds double, ptr %69, i64 %1955 + store double 0.000000e+00, ptr %2008, align 8, !tbaa !7 + %2009 = load double, ptr %1962, align 8, !tbaa !7 + %2010 = getelementptr inbounds double, ptr %70, i64 %1955 + store double %2009, ptr %2010, align 8, !tbaa !7 + %2011 = add nuw nsw i64 %1955, 1 + %2012 = add nuw nsw i64 %1956, 1 + %2013 = icmp eq i64 %2011, %1953 + br i1 %2013, label %.loopexit73, label %1954, !llvm.loop !42 .loopexit73: ; preds = %.loopexit76, %.loopexit, %.loopexit83, %.loopexit82, %297 - %1943 = phi i32 [ %563, %.loopexit82 ], [ %199, %297 ], [ 0, %.loopexit83 ], [ 0, %.loopexit ], [ %1869, %.loopexit76 ] - store i32 %1943, ptr %19, align 4, !tbaa !3 - %1944 = load i32, ptr %3, align 4, !tbaa !3 - %1945 = sitofp i32 %1944 to double - store double %1945, ptr %17, align 8, !tbaa !7 - br label %1946 - -1946: ; preds = %.loopexit73, %158, %155, %151 + %2014 = phi i32 [ %565, %.loopexit82 ], [ %199, %297 ], [ 0, %.loopexit83 ], [ 0, %.loopexit ], [ %1940, %.loopexit76 ] + store i32 %2014, ptr %19, align 4, !tbaa !3 + %2015 = load i32, ptr %3, align 4, !tbaa !3 + %2016 = sitofp i32 %2015 to double + store double %2016, ptr %17, align 8, !tbaa !7 + br label %2017 + +2017: ; preds = %.loopexit73, %158, %155, %151 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #5 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #5 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #5 diff --git a/bench/openblas/optimized/dlaein.c.ll b/bench/openblas/optimized/dlaein.c.ll index 978affb4c73..8315b88dac3 100644 --- a/bench/openblas/optimized/dlaein.c.ll +++ b/bench/openblas/optimized/dlaein.c.ll @@ -118,7 +118,7 @@ define void @dlaein_(ptr nocapture noundef readonly %0, ptr nocapture noundef re %90 = fcmp oeq double %89, 0.000000e+00 %91 = load i32, ptr %1, align 4, !tbaa !3 %92 = icmp eq i32 %91, 0 - br i1 %90, label %93, label %300 + br i1 %90, label %93, label %317 93: ; preds = %88 br i1 %92, label %103, label %94 @@ -157,7 +157,7 @@ define void @dlaein_(ptr nocapture noundef readonly %0, ptr nocapture noundef re %111 = load i32, ptr %0, align 4, !tbaa !3 %112 = icmp eq i32 %111, 0 %113 = icmp sgt i32 %110, 1 - br i1 %112, label %186, label %114 + br i1 %112, label %203, label %114 114: ; preds = %.loopexit28 %115 = add i32 %35, 1 @@ -169,1151 +169,1317 @@ define void @dlaein_(ptr nocapture noundef readonly %0, ptr nocapture noundef re %119 = sext i32 %29 to i64 %120 = zext nneg i32 %110 to i64 %121 = zext i32 %118 to i64 + %ident.check.not = icmp eq i32 %35, 1 + %ident.check93.not = icmp eq i32 %35, 1 br label %122 122: ; preds = %.loopexit26, %116 - %123 = phi i64 [ 1, %116 ], [ %125, %.loopexit26 ] - %124 = phi i64 [ 2, %116 ], [ %178, %.loopexit26 ] - %125 = add nuw nsw i64 %123, 1 - %126 = mul nsw i64 %123, %119 - %127 = getelementptr double, ptr %32, i64 %125 - %128 = getelementptr double, ptr %127, i64 %126 - %129 = load double, ptr %128, align 8, !tbaa !7 - %130 = trunc i64 %123 to i32 - %131 = mul i32 %115, %130 - %132 = sext i32 %131 to i64 - %133 = getelementptr inbounds double, ptr %38, i64 %132 - %134 = load double, ptr %133, align 8, !tbaa !7 - %135 = fcmp oge double %134, 0.000000e+00 - %136 = fneg double %134 - %137 = select i1 %135, double %134, double %136 - %138 = fcmp oge double %129, 0.000000e+00 - %139 = fneg double %129 - %140 = select i1 %138, double %129, double %139 - %141 = fcmp olt double %137, %140 - br i1 %141, label %142, label %156 - -142: ; preds = %122 - store double %129, ptr %133, align 8, !tbaa !7 - %143 = fdiv double %136, %129 - %144 = getelementptr double, ptr %38, i64 %125 - %145 = getelementptr double, ptr %38, i64 %123 - br label %146 - -146: ; preds = %146, %142 - %147 = phi i64 [ %124, %142 ], [ %154, %146 ] - %148 = mul nsw i64 %147, %117 - %149 = getelementptr double, ptr %144, i64 %148 - %150 = load double, ptr %149, align 8, !tbaa !7 - %151 = getelementptr double, ptr %145, i64 %148 + %indvar = phi i64 [ %indvar.next, %.loopexit26 ], [ 0, %116 ] + %123 = phi i64 [ %129, %.loopexit26 ], [ 1, %116 ] + %124 = phi i64 [ %195, %.loopexit26 ], [ 2, %116 ] + %125 = shl nuw nsw i64 %indvar, 4 + %126 = or disjoint i64 %125, 8 + %scevgep97 = getelementptr i8, ptr %9, i64 %126 + %127 = shl nuw nsw i64 %indvar, 4 + %128 = or disjoint i64 %127, 8 + %scevgep = getelementptr i8, ptr %9, i64 %128 + %129 = add nuw nsw i64 %123, 1 + %130 = mul nsw i64 %123, %119 + %131 = getelementptr double, ptr %32, i64 %129 + %132 = getelementptr double, ptr %131, i64 %130 + %133 = load double, ptr %132, align 8, !tbaa !7 + %134 = trunc i64 %123 to i32 + %135 = mul i32 %115, %134 + %136 = sext i32 %135 to i64 + %137 = getelementptr inbounds double, ptr %38, i64 %136 + %138 = load double, ptr %137, align 8, !tbaa !7 + %139 = fcmp oge double %138, 0.000000e+00 + %140 = fneg double %138 + %141 = select i1 %139, double %138, double %140 + %142 = fcmp oge double %133, 0.000000e+00 + %143 = fneg double %133 + %144 = select i1 %142, double %133, double %143 + %145 = fcmp olt double %141, %144 + br i1 %145, label %.lver.check94, label %167 + +.lver.check94: ; preds = %122 + store double %133, ptr %137, align 8, !tbaa !7 + %146 = fdiv double %140, %133 + %147 = getelementptr double, ptr %38, i64 %129 + %148 = getelementptr double, ptr %38, i64 %123 + br i1 %ident.check93.not, label %.ph95, label %.ph95.lver.orig + +.ph95.lver.orig: ; preds = %.lver.check94, %.ph95.lver.orig + %149 = phi i64 [ %156, %.ph95.lver.orig ], [ %124, %.lver.check94 ] + %150 = mul nsw i64 %149, %117 + %151 = getelementptr double, ptr %147, i64 %150 %152 = load double, ptr %151, align 8, !tbaa !7 - %153 = call double @llvm.fmuladd.f64(double %143, double %150, double %152) - store double %153, ptr %149, align 8, !tbaa !7 - store double %150, ptr %151, align 8, !tbaa !7 - %154 = add nuw nsw i64 %147, 1 - %155 = icmp eq i64 %154, %121 - br i1 %155, label %.loopexit26, label %146, !llvm.loop !14 - -156: ; preds = %122 - %157 = fcmp oeq double %134, 0.000000e+00 - br i1 %157, label %158, label %160 - -158: ; preds = %156 - %159 = load double, ptr %12, align 8, !tbaa !7 - store double %159, ptr %133, align 8, !tbaa !7 - br label %160 - -160: ; preds = %158, %156 - %161 = phi double [ %159, %158 ], [ %134, %156 ] - %162 = fdiv double %129, %161 - %163 = fcmp une double %162, 0.000000e+00 - br i1 %163, label %164, label %.loopexit26 - -164: ; preds = %160 - %165 = fneg double %162 - %166 = getelementptr double, ptr %38, i64 %123 - %167 = getelementptr double, ptr %38, i64 %125 - br label %168 - -168: ; preds = %168, %164 - %169 = phi i64 [ %124, %164 ], [ %176, %168 ] - %170 = mul nsw i64 %169, %117 - %171 = getelementptr double, ptr %166, i64 %170 - %172 = load double, ptr %171, align 8, !tbaa !7 - %173 = getelementptr double, ptr %167, i64 %170 - %174 = load double, ptr %173, align 8, !tbaa !7 - %175 = call double @llvm.fmuladd.f64(double %165, double %172, double %174) - store double %175, ptr %173, align 8, !tbaa !7 - %176 = add nuw nsw i64 %169, 1 - %177 = icmp eq i64 %176, %121 - br i1 %177, label %.loopexit26, label %168, !llvm.loop !15 - -.loopexit26: ; preds = %168, %146, %160 - %178 = add nuw nsw i64 %124, 1 - %179 = icmp eq i64 %125, %120 - br i1 %179, label %180, label %122, !llvm.loop !16 - -180: ; preds = %.loopexit26 - store double %134, ptr %20, align 8, !tbaa !7 + %153 = getelementptr double, ptr %148, i64 %150 + %154 = load double, ptr %153, align 8, !tbaa !7 + %155 = call double @llvm.fmuladd.f64(double %146, double %152, double %154) + store double %155, ptr %151, align 8, !tbaa !7 + store double %152, ptr %153, align 8, !tbaa !7 + %156 = add nuw nsw i64 %149, 1 + %157 = icmp eq i64 %156, %121 + br i1 %157, label %.loopexit26, label %.ph95.lver.orig, !llvm.loop !14 + +.ph95: ; preds = %.lver.check94 + %load_initial98 = load double, ptr %scevgep97, align 8 + br label %158 + +158: ; preds = %158, %.ph95 + %store_forwarded99 = phi double [ %load_initial98, %.ph95 ], [ %164, %158 ] + %159 = phi i64 [ %124, %.ph95 ], [ %165, %158 ] + %160 = mul nuw nsw i64 %159, %117 + %161 = getelementptr double, ptr %147, i64 %160 + %162 = load double, ptr %161, align 8, !tbaa !7 + %163 = getelementptr double, ptr %148, i64 %160 + %164 = call double @llvm.fmuladd.f64(double %146, double %162, double %store_forwarded99) + store double %164, ptr %161, align 8, !tbaa !7 + store double %162, ptr %163, align 8, !tbaa !7 + %165 = add nuw nsw i64 %159, 1 + %166 = icmp eq i64 %165, %121 + br i1 %166, label %.loopexit26, label %158, !llvm.loop !14 + +167: ; preds = %122 + %168 = fcmp oeq double %138, 0.000000e+00 + br i1 %168, label %169, label %171 + +169: ; preds = %167 + %170 = load double, ptr %12, align 8, !tbaa !7 + store double %170, ptr %137, align 8, !tbaa !7 + br label %171 + +171: ; preds = %169, %167 + %172 = phi double [ %170, %169 ], [ %138, %167 ] + %173 = fdiv double %133, %172 + %174 = fcmp une double %173, 0.000000e+00 + br i1 %174, label %.lver.check, label %.loopexit26 + +.lver.check: ; preds = %171 + %175 = fneg double %173 + %176 = getelementptr double, ptr %38, i64 %123 + %177 = getelementptr double, ptr %38, i64 %129 + br i1 %ident.check.not, label %.ph, label %.ph.lver.orig + +.ph.lver.orig: ; preds = %.lver.check, %.ph.lver.orig + %178 = phi i64 [ %185, %.ph.lver.orig ], [ %124, %.lver.check ] + %179 = mul nsw i64 %178, %117 + %180 = getelementptr double, ptr %176, i64 %179 + %181 = load double, ptr %180, align 8, !tbaa !7 + %182 = getelementptr double, ptr %177, i64 %179 + %183 = load double, ptr %182, align 8, !tbaa !7 + %184 = call double @llvm.fmuladd.f64(double %175, double %181, double %183) + store double %184, ptr %182, align 8, !tbaa !7 + %185 = add nuw nsw i64 %178, 1 + %186 = icmp eq i64 %185, %121 + br i1 %186, label %.loopexit26, label %.ph.lver.orig, !llvm.loop !15 + +.ph: ; preds = %.lver.check + %load_initial = load double, ptr %scevgep, align 8 + br label %187 + +187: ; preds = %187, %.ph + %store_forwarded = phi double [ %load_initial, %.ph ], [ %192, %187 ] + %188 = phi i64 [ %124, %.ph ], [ %193, %187 ] + %189 = mul nuw nsw i64 %188, %117 + %190 = getelementptr double, ptr %177, i64 %189 + %191 = load double, ptr %190, align 8, !tbaa !7 + %192 = call double @llvm.fmuladd.f64(double %175, double %store_forwarded, double %191) + store double %192, ptr %190, align 8, !tbaa !7 + %193 = add nuw nsw i64 %188, 1 + %194 = icmp eq i64 %193, %121 + br i1 %194, label %.loopexit26, label %187, !llvm.loop !15 + +.loopexit26: ; preds = %.ph.lver.orig, %187, %.ph95.lver.orig, %158, %171 + %195 = add nuw nsw i64 %124, 1 + %196 = icmp eq i64 %129, %120 + %indvar.next = add i64 %indvar, 1 + br i1 %196, label %197, label %122, !llvm.loop !16 + +197: ; preds = %.loopexit26 + store double %138, ptr %20, align 8, !tbaa !7 br label %._crit_edge64 -._crit_edge64: ; preds = %114, %180 - %181 = mul i32 %110, %115 - %182 = sext i32 %181 to i64 - %183 = getelementptr inbounds double, ptr %38, i64 %182 - %184 = load double, ptr %183, align 8, !tbaa !7 - %185 = fcmp oeq double %184, 0.000000e+00 - br i1 %185, label %254, label %258 - -186: ; preds = %.loopexit28 - br i1 %113, label %187, label %251 - -187: ; preds = %186 - %188 = zext nneg i32 %110 to i64 - %189 = sext i32 %35 to i64 - br label %190 - -190: ; preds = %.loopexit24, %187 - %191 = phi i64 [ %188, %187 ], [ %193, %.loopexit24 ] - %192 = trunc i64 %191 to i32 - %193 = add nsw i64 %191, -1 - %194 = trunc i64 %193 to i32 - %195 = mul nsw i32 %29, %194 - %196 = sext i32 %195 to i64 - %197 = getelementptr double, ptr %32, i64 %191 - %198 = getelementptr double, ptr %197, i64 %196 - %199 = load double, ptr %198, align 8, !tbaa !7 - %200 = mul nsw i64 %191, %189 - %201 = mul nsw i32 %35, %192 - %202 = sext i32 %201 to i64 - %203 = getelementptr double, ptr %38, i64 %191 - %204 = getelementptr double, ptr %203, i64 %202 - %205 = load double, ptr %204, align 8, !tbaa !7 - %206 = fcmp oge double %205, 0.000000e+00 - %207 = fneg double %205 - %208 = select i1 %206, double %205, double %207 - %209 = fcmp oge double %199, 0.000000e+00 - %210 = fneg double %199 - %211 = select i1 %209, double %199, double %210 - %212 = fcmp olt double %208, %211 - br i1 %212, label %213, label %227 - -213: ; preds = %190 - store double %199, ptr %204, align 8, !tbaa !7 - store i32 %194, ptr %17, align 4, !tbaa !3 - %214 = mul nsw i64 %193, %189 - %215 = fdiv double %207, %199 - %216 = getelementptr double, ptr %38, i64 %214 - %217 = getelementptr double, ptr %38, i64 %200 - br label %218 - -218: ; preds = %218, %213 - %219 = phi i64 [ 1, %213 ], [ %225, %218 ] - %220 = getelementptr double, ptr %216, i64 %219 - %221 = load double, ptr %220, align 8, !tbaa !7 - %222 = getelementptr double, ptr %217, i64 %219 - %223 = load double, ptr %222, align 8, !tbaa !7 - %224 = call double @llvm.fmuladd.f64(double %215, double %221, double %223) - store double %224, ptr %220, align 8, !tbaa !7 - store double %221, ptr %222, align 8, !tbaa !7 - %225 = add nuw nsw i64 %219, 1 - %226 = icmp eq i64 %225, %191 - br i1 %226, label %.loopexit24, label %218, !llvm.loop !17 - -227: ; preds = %190 - %228 = fcmp oeq double %205, 0.000000e+00 - br i1 %228, label %229, label %231 - -229: ; preds = %227 - %230 = load double, ptr %12, align 8, !tbaa !7 - store double %230, ptr %204, align 8, !tbaa !7 - br label %231 - -231: ; preds = %229, %227 - %232 = phi double [ %230, %229 ], [ %205, %227 ] - %233 = fdiv double %199, %232 - %234 = fcmp une double %233, 0.000000e+00 - br i1 %234, label %235, label %.loopexit24 - -235: ; preds = %231 - store i32 %194, ptr %17, align 4, !tbaa !3 - %236 = mul nsw i64 %193, %189 - %237 = fneg double %233 - %238 = getelementptr double, ptr %38, i64 %200 - %239 = getelementptr double, ptr %38, i64 %236 - br label %240 - -240: ; preds = %240, %235 - %241 = phi i64 [ 1, %235 ], [ %247, %240 ] - %242 = getelementptr double, ptr %238, i64 %241 - %243 = load double, ptr %242, align 8, !tbaa !7 - %244 = getelementptr double, ptr %239, i64 %241 - %245 = load double, ptr %244, align 8, !tbaa !7 - %246 = call double @llvm.fmuladd.f64(double %237, double %243, double %245) - store double %246, ptr %244, align 8, !tbaa !7 - %247 = add nuw nsw i64 %241, 1 - %248 = icmp eq i64 %247, %191 - br i1 %248, label %.loopexit24, label %240, !llvm.loop !18 - -.loopexit24: ; preds = %240, %218, %231 - %249 = icmp sgt i64 %191, 2 - br i1 %249, label %190, label %250, !llvm.loop !19 - -250: ; preds = %.loopexit24 - store double %205, ptr %20, align 8, !tbaa !7 - br label %251 - -251: ; preds = %250, %186 - %252 = load double, ptr %9, align 8, !tbaa !7 - %253 = fcmp oeq double %252, 0.000000e+00 - br i1 %253, label %254, label %258 - -254: ; preds = %251, %._crit_edge64 - %255 = phi ptr [ %183, %._crit_edge64 ], [ %9, %251 ] - %256 = phi i8 [ 78, %._crit_edge64 ], [ 84, %251 ] - %257 = load double, ptr %12, align 8, !tbaa !7 - store double %257, ptr %255, align 8, !tbaa !7 - br label %258 - -258: ; preds = %254, %251, %._crit_edge64 - %259 = phi i8 [ 78, %._crit_edge64 ], [ 84, %251 ], [ %256, %254 ] - store i8 %259, ptr %24, align 1, !tbaa !20 +._crit_edge64: ; preds = %114, %197 + %198 = mul i32 %110, %115 + %199 = sext i32 %198 to i64 + %200 = getelementptr inbounds double, ptr %38, i64 %199 + %201 = load double, ptr %200, align 8, !tbaa !7 + %202 = fcmp oeq double %201, 0.000000e+00 + br i1 %202, label %271, label %275 + +203: ; preds = %.loopexit28 + br i1 %113, label %204, label %268 + +204: ; preds = %203 + %205 = zext nneg i32 %110 to i64 + %206 = sext i32 %35 to i64 + br label %207 + +207: ; preds = %.loopexit24, %204 + %208 = phi i64 [ %205, %204 ], [ %210, %.loopexit24 ] + %209 = trunc i64 %208 to i32 + %210 = add nsw i64 %208, -1 + %211 = trunc i64 %210 to i32 + %212 = mul nsw i32 %29, %211 + %213 = sext i32 %212 to i64 + %214 = getelementptr double, ptr %32, i64 %208 + %215 = getelementptr double, ptr %214, i64 %213 + %216 = load double, ptr %215, align 8, !tbaa !7 + %217 = mul nsw i64 %208, %206 + %218 = mul nsw i32 %35, %209 + %219 = sext i32 %218 to i64 + %220 = getelementptr double, ptr %38, i64 %208 + %221 = getelementptr double, ptr %220, i64 %219 + %222 = load double, ptr %221, align 8, !tbaa !7 + %223 = fcmp oge double %222, 0.000000e+00 + %224 = fneg double %222 + %225 = select i1 %223, double %222, double %224 + %226 = fcmp oge double %216, 0.000000e+00 + %227 = fneg double %216 + %228 = select i1 %226, double %216, double %227 + %229 = fcmp olt double %225, %228 + br i1 %229, label %230, label %244 + +230: ; preds = %207 + store double %216, ptr %221, align 8, !tbaa !7 + store i32 %211, ptr %17, align 4, !tbaa !3 + %231 = mul nsw i64 %210, %206 + %232 = fdiv double %224, %216 + %233 = getelementptr double, ptr %38, i64 %231 + %234 = getelementptr double, ptr %38, i64 %217 + br label %235 + +235: ; preds = %235, %230 + %236 = phi i64 [ 1, %230 ], [ %242, %235 ] + %237 = getelementptr double, ptr %233, i64 %236 + %238 = load double, ptr %237, align 8, !tbaa !7 + %239 = getelementptr double, ptr %234, i64 %236 + %240 = load double, ptr %239, align 8, !tbaa !7 + %241 = call double @llvm.fmuladd.f64(double %232, double %238, double %240) + store double %241, ptr %237, align 8, !tbaa !7 + store double %238, ptr %239, align 8, !tbaa !7 + %242 = add nuw nsw i64 %236, 1 + %243 = icmp eq i64 %242, %208 + br i1 %243, label %.loopexit24, label %235, !llvm.loop !17 + +244: ; preds = %207 + %245 = fcmp oeq double %222, 0.000000e+00 + br i1 %245, label %246, label %248 + +246: ; preds = %244 + %247 = load double, ptr %12, align 8, !tbaa !7 + store double %247, ptr %221, align 8, !tbaa !7 + br label %248 + +248: ; preds = %246, %244 + %249 = phi double [ %247, %246 ], [ %222, %244 ] + %250 = fdiv double %216, %249 + %251 = fcmp une double %250, 0.000000e+00 + br i1 %251, label %252, label %.loopexit24 + +252: ; preds = %248 + store i32 %211, ptr %17, align 4, !tbaa !3 + %253 = mul nsw i64 %210, %206 + %254 = fneg double %250 + %255 = getelementptr double, ptr %38, i64 %217 + %256 = getelementptr double, ptr %38, i64 %253 + br label %257 + +257: ; preds = %257, %252 + %258 = phi i64 [ 1, %252 ], [ %264, %257 ] + %259 = getelementptr double, ptr %255, i64 %258 + %260 = load double, ptr %259, align 8, !tbaa !7 + %261 = getelementptr double, ptr %256, i64 %258 + %262 = load double, ptr %261, align 8, !tbaa !7 + %263 = call double @llvm.fmuladd.f64(double %254, double %260, double %262) + store double %263, ptr %261, align 8, !tbaa !7 + %264 = add nuw nsw i64 %258, 1 + %265 = icmp eq i64 %264, %208 + br i1 %265, label %.loopexit24, label %257, !llvm.loop !18 + +.loopexit24: ; preds = %257, %235, %248 + %266 = icmp sgt i64 %208, 2 + br i1 %266, label %207, label %267, !llvm.loop !19 + +267: ; preds = %.loopexit24 + store double %222, ptr %20, align 8, !tbaa !7 + br label %268 + +268: ; preds = %267, %203 + %269 = load double, ptr %9, align 8, !tbaa !7 + %270 = fcmp oeq double %269, 0.000000e+00 + br i1 %270, label %271, label %275 + +271: ; preds = %268, %._crit_edge64 + %272 = phi ptr [ %200, %._crit_edge64 ], [ %9, %268 ] + %273 = phi i8 [ 78, %._crit_edge64 ], [ 84, %268 ] + %274 = load double, ptr %12, align 8, !tbaa !7 + store double %274, ptr %272, align 8, !tbaa !7 + br label %275 + +275: ; preds = %271, %268, %._crit_edge64 + %276 = phi i8 [ 78, %._crit_edge64 ], [ 84, %268 ], [ %273, %271 ] + store i8 %276, ptr %24, align 1, !tbaa !20 store i8 78, ptr %27, align 1, !tbaa !20 store i32 %110, ptr %17, align 4, !tbaa !3 - %260 = icmp slt i32 %110, 1 - br i1 %260, label %.loopexit23, label %261 + %277 = icmp slt i32 %110, 1 + br i1 %277, label %.loopexit23, label %278 -261: ; preds = %258 - %262 = fadd double %42, 1.000000e+00 - br label %263 +278: ; preds = %275 + %279 = fadd double %42, 1.000000e+00 + br label %280 -263: ; preds = %.loopexit, %261 - %264 = phi i32 [ 1, %261 ], [ %289, %.loopexit ] +280: ; preds = %.loopexit, %278 + %281 = phi i32 [ 1, %278 ], [ %306, %.loopexit ] call void @dlatrs_(ptr noundef nonnull @.str, ptr noundef nonnull %24, ptr noundef nonnull @.str.1, ptr noundef nonnull %27, ptr noundef nonnull %2, ptr noundef %9, ptr noundef nonnull %10, ptr noundef %7, ptr noundef nonnull %23, ptr noundef %11, ptr noundef nonnull %22) #6 store i8 89, ptr %27, align 1, !tbaa !20 - %265 = call double @dasum_(ptr noundef nonnull %2, ptr noundef %7, ptr noundef nonnull @c__1) #6 - %266 = load double, ptr %23, align 8, !tbaa !7 - %267 = fmul double %43, %266 - %268 = fcmp ult double %265, %267 - br i1 %268, label %269, label %.loopexit22 - -269: ; preds = %263 - %270 = load double, ptr %12, align 8, !tbaa !7 - %271 = fdiv double %270, %262 - store double %270, ptr %7, align 8, !tbaa !7 - %272 = load i32, ptr %2, align 4, !tbaa !3 - %273 = icmp slt i32 %272, 2 - br i1 %273, label %.loopexit, label %274 - -274: ; preds = %269 - %275 = add nuw i32 %272, 1 - %276 = zext i32 %275 to i64 - br label %277 - -277: ; preds = %277, %274 - %278 = phi i64 [ 2, %274 ], [ %280, %277 ] - %279 = getelementptr inbounds double, ptr %33, i64 %278 - store double %271, ptr %279, align 8, !tbaa !7 - %280 = add nuw nsw i64 %278, 1 - %281 = icmp eq i64 %280, %276 - br i1 %281, label %.loopexit.loopexit, label %277, !llvm.loop !21 - -.loopexit.loopexit: ; preds = %277 + %282 = call double @dasum_(ptr noundef nonnull %2, ptr noundef %7, ptr noundef nonnull @c__1) #6 + %283 = load double, ptr %23, align 8, !tbaa !7 + %284 = fmul double %43, %283 + %285 = fcmp ult double %282, %284 + br i1 %285, label %286, label %.loopexit22 + +286: ; preds = %280 + %287 = load double, ptr %12, align 8, !tbaa !7 + %288 = fdiv double %287, %279 + store double %287, ptr %7, align 8, !tbaa !7 + %289 = load i32, ptr %2, align 4, !tbaa !3 + %290 = icmp slt i32 %289, 2 + br i1 %290, label %.loopexit, label %291 + +291: ; preds = %286 + %292 = add nuw i32 %289, 1 + %293 = zext i32 %292 to i64 + br label %294 + +294: ; preds = %294, %291 + %295 = phi i64 [ 2, %291 ], [ %297, %294 ] + %296 = getelementptr inbounds double, ptr %33, i64 %295 + store double %288, ptr %296, align 8, !tbaa !7 + %297 = add nuw nsw i64 %295, 1 + %298 = icmp eq i64 %297, %293 + br i1 %298, label %.loopexit.loopexit, label %294, !llvm.loop !21 + +.loopexit.loopexit: ; preds = %294 %.pre63 = load double, ptr %12, align 8, !tbaa !7 br label %.loopexit -.loopexit: ; preds = %.loopexit.loopexit, %269 - %282 = phi double [ %.pre63, %.loopexit.loopexit ], [ %270, %269 ] - %283 = sub nsw i32 %272, %264 - %284 = sext i32 %283 to i64 - %285 = getelementptr double, ptr %7, i64 %284 - %286 = load double, ptr %285, align 8, !tbaa !7 - %287 = fneg double %282 - %288 = call double @llvm.fmuladd.f64(double %287, double %42, double %286) - store double %288, ptr %285, align 8, !tbaa !7 - %289 = add nuw nsw i32 %264, 1 - %290 = load i32, ptr %17, align 4, !tbaa !3 - %291 = icmp slt i32 %264, %290 - br i1 %291, label %263, label %.loopexit23, !llvm.loop !22 - -.loopexit23: ; preds = %.loopexit, %258 +.loopexit: ; preds = %.loopexit.loopexit, %286 + %299 = phi double [ %.pre63, %.loopexit.loopexit ], [ %287, %286 ] + %300 = sub nsw i32 %289, %281 + %301 = sext i32 %300 to i64 + %302 = getelementptr double, ptr %7, i64 %301 + %303 = load double, ptr %302, align 8, !tbaa !7 + %304 = fneg double %299 + %305 = call double @llvm.fmuladd.f64(double %304, double %42, double %303) + store double %305, ptr %302, align 8, !tbaa !7 + %306 = add nuw nsw i32 %281, 1 + %307 = load i32, ptr %17, align 4, !tbaa !3 + %308 = icmp slt i32 %281, %307 + br i1 %308, label %280, label %.loopexit23, !llvm.loop !22 + +.loopexit23: ; preds = %.loopexit, %275 store i32 1, ptr %15, align 4, !tbaa !3 br label %.loopexit22 -.loopexit22: ; preds = %263, %.loopexit23 - %292 = call i32 @idamax_(ptr noundef nonnull %2, ptr noundef %7, ptr noundef nonnull @c__1) #6 - %293 = sext i32 %292 to i64 - %294 = getelementptr inbounds double, ptr %33, i64 %293 - %295 = load double, ptr %294, align 8, !tbaa !7 - store double %295, ptr %20, align 8, !tbaa !7 - %296 = fcmp oge double %295, 0.000000e+00 - %297 = fneg double %295 - %298 = select i1 %296, double %295, double %297 - %299 = fdiv double 1.000000e+00, %298 - store double %299, ptr %21, align 8, !tbaa !7 +.loopexit22: ; preds = %280, %.loopexit23 + %309 = call i32 @idamax_(ptr noundef nonnull %2, ptr noundef %7, ptr noundef nonnull @c__1) #6 + %310 = sext i32 %309 to i64 + %311 = getelementptr inbounds double, ptr %33, i64 %310 + %312 = load double, ptr %311, align 8, !tbaa !7 + store double %312, ptr %20, align 8, !tbaa !7 + %313 = fcmp oge double %312, 0.000000e+00 + %314 = fneg double %312 + %315 = select i1 %313, double %312, double %314 + %316 = fdiv double 1.000000e+00, %315 + store double %316, ptr %21, align 8, !tbaa !7 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %21, ptr noundef %7, ptr noundef nonnull @c__1) #6 - br label %873 - -300: ; preds = %88 - br i1 %92, label %312, label %301 - -301: ; preds = %300 - br i1 %51, label %.loopexit37, label %302 - -302: ; preds = %301 - %303 = add nuw i32 %50, 1 - %304 = zext i32 %303 to i64 - br label %305 - -305: ; preds = %305, %302 - %306 = phi i64 [ 1, %302 ], [ %310, %305 ] - %307 = load double, ptr %12, align 8, !tbaa !7 - %308 = getelementptr inbounds double, ptr %33, i64 %306 - store double %307, ptr %308, align 8, !tbaa !7 - %309 = getelementptr inbounds double, ptr %34, i64 %306 - store double 0.000000e+00, ptr %309, align 8, !tbaa !7 - %310 = add nuw nsw i64 %306, 1 - %311 = icmp eq i64 %310, %304 - br i1 %311, label %.loopexit37, label %305, !llvm.loop !23 - -312: ; preds = %300 - %313 = tail call double @dnrm2_(ptr noundef nonnull %2, ptr noundef %7, ptr noundef nonnull @c__1) #6 - store double %313, ptr %20, align 8, !tbaa !7 - %314 = tail call double @dnrm2_(ptr noundef nonnull %2, ptr noundef %8, ptr noundef nonnull @c__1) #6 - store double %314, ptr %21, align 8, !tbaa !7 - %315 = call double @dlapy2_(ptr noundef nonnull %20, ptr noundef nonnull %21) #6 - %316 = load double, ptr %12, align 8, !tbaa !7 - %317 = fmul double %42, %316 - %318 = fcmp oge double %315, %49 - %319 = select i1 %318, double %315, double %49 - %320 = fdiv double %317, %319 - store double %320, ptr %28, align 8, !tbaa !7 + br label %948 + +317: ; preds = %88 + br i1 %92, label %329, label %318 + +318: ; preds = %317 + br i1 %51, label %.loopexit37, label %319 + +319: ; preds = %318 + %320 = add nuw i32 %50, 1 + %321 = zext i32 %320 to i64 + br label %322 + +322: ; preds = %322, %319 + %323 = phi i64 [ 1, %319 ], [ %327, %322 ] + %324 = load double, ptr %12, align 8, !tbaa !7 + %325 = getelementptr inbounds double, ptr %33, i64 %323 + store double %324, ptr %325, align 8, !tbaa !7 + %326 = getelementptr inbounds double, ptr %34, i64 %323 + store double 0.000000e+00, ptr %326, align 8, !tbaa !7 + %327 = add nuw nsw i64 %323, 1 + %328 = icmp eq i64 %327, %321 + br i1 %328, label %.loopexit37, label %322, !llvm.loop !23 + +329: ; preds = %317 + %330 = tail call double @dnrm2_(ptr noundef nonnull %2, ptr noundef %7, ptr noundef nonnull @c__1) #6 + store double %330, ptr %20, align 8, !tbaa !7 + %331 = tail call double @dnrm2_(ptr noundef nonnull %2, ptr noundef %8, ptr noundef nonnull @c__1) #6 + store double %331, ptr %21, align 8, !tbaa !7 + %332 = call double @dlapy2_(ptr noundef nonnull %20, ptr noundef nonnull %21) #6 + %333 = load double, ptr %12, align 8, !tbaa !7 + %334 = fmul double %42, %333 + %335 = fcmp oge double %332, %49 + %336 = select i1 %335, double %332, double %49 + %337 = fdiv double %334, %336 + store double %337, ptr %28, align 8, !tbaa !7 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef %7, ptr noundef nonnull @c__1) #6 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef %8, ptr noundef nonnull @c__1) #6 br label %.loopexit37 -.loopexit37: ; preds = %305, %312, %301 - %321 = load i32, ptr %0, align 4, !tbaa !3 - %322 = icmp eq i32 %321, 0 - %323 = load double, ptr %6, align 8, !tbaa !7 - br i1 %322, label %488, label %324 - -324: ; preds = %.loopexit37 - %325 = fneg double %323 - %326 = sext i32 %35 to i64 - %327 = getelementptr double, ptr %38, i64 %326 - %328 = getelementptr i8, ptr %327, i64 16 - store double %325, ptr %328, align 8, !tbaa !7 - %329 = load i32, ptr %2, align 4, !tbaa !3 - %330 = icmp slt i32 %329, 2 - br i1 %330, label %.loopexit36, label %331 - -331: ; preds = %324 - %332 = add i32 %35, 3 - %333 = sext i32 %332 to i64 - %334 = add nsw i64 %333, %37 - %335 = shl nsw i64 %334, 3 - %336 = getelementptr i8, ptr %9, i64 %335 - %337 = add nsw i32 %329, -1 - %338 = zext nneg i32 %337 to i64 - %339 = shl nuw nsw i64 %338, 3 - call void @llvm.memset.p0.i64(ptr align 8 %336, i8 0, i64 %339, i1 false), !tbaa !7 - store i32 %337, ptr %17, align 4, !tbaa !3 - %340 = sext i32 %29 to i64 - %341 = getelementptr i8, ptr %38, i64 16 - br label %342 - -342: ; preds = %455, %331 - %343 = phi i64 [ 1, %331 ], [ %351, %455 ] - %344 = phi i64 [ 2, %331 ], [ %470, %455 ] - %345 = trunc i64 %343 to i32 - %346 = mul nsw i64 %343, %326 - %347 = mul nsw i32 %35, %345 - %348 = sext i32 %347 to i64 - %349 = getelementptr double, ptr %38, i64 %343 - %350 = getelementptr double, ptr %349, i64 %348 - %351 = add nuw nsw i64 %343, 1 - %352 = trunc i64 %351 to i32 - %353 = getelementptr double, ptr %38, i64 %351 - %354 = getelementptr double, ptr %353, i64 %346 - %355 = call double @dlapy2_(ptr noundef %350, ptr noundef %354) #6 - %356 = mul nsw i64 %343, %340 - %357 = getelementptr double, ptr %32, i64 %351 - %358 = getelementptr double, ptr %357, i64 %356 - %359 = load double, ptr %358, align 8, !tbaa !7 - %360 = fcmp oge double %359, 0.000000e+00 - %361 = fneg double %359 - %362 = select i1 %360, double %359, double %361 - %363 = fcmp olt double %355, %362 - br i1 %363, label %364, label %408 - -364: ; preds = %342 - %365 = load double, ptr %350, align 8, !tbaa !7 - %366 = fdiv double %365, %359 - store double %366, ptr %26, align 8, !tbaa !7 - %367 = load double, ptr %354, align 8, !tbaa !7 - %368 = fdiv double %367, %359 - store double %368, ptr %25, align 8, !tbaa !7 - store double %359, ptr %350, align 8, !tbaa !7 - store double 0.000000e+00, ptr %354, align 8, !tbaa !7 - %369 = load i32, ptr %2, align 4, !tbaa !3 - %370 = sext i32 %369 to i64 - %371 = icmp slt i64 %343, %370 - %372 = fneg double %368 - br i1 %371, label %373, label %..loopexit34_crit_edge - -..loopexit34_crit_edge: ; preds = %364 - %.pre66 = mul nsw i64 %351, %326 +.loopexit37: ; preds = %322, %329, %318 + %338 = load i32, ptr %0, align 4, !tbaa !3 + %339 = icmp eq i32 %338, 0 + %340 = load double, ptr %6, align 8, !tbaa !7 + br i1 %339, label %531, label %341 + +341: ; preds = %.loopexit37 + %342 = fneg double %340 + %343 = sext i32 %35 to i64 + %344 = getelementptr double, ptr %38, i64 %343 + %345 = getelementptr i8, ptr %344, i64 16 + store double %342, ptr %345, align 8, !tbaa !7 + %346 = load i32, ptr %2, align 4, !tbaa !3 + %347 = icmp slt i32 %346, 2 + br i1 %347, label %.loopexit36, label %348 + +348: ; preds = %341 + %349 = add i32 %35, 3 + %350 = sext i32 %349 to i64 + %351 = add nsw i64 %350, %37 + %352 = shl nsw i64 %351, 3 + %353 = getelementptr i8, ptr %9, i64 %352 + %354 = add nsw i32 %346, -1 + %355 = zext nneg i32 %354 to i64 + %356 = shl nuw nsw i64 %355, 3 + call void @llvm.memset.p0.i64(ptr align 8 %353, i8 0, i64 %356, i1 false), !tbaa !7 + store i32 %354, ptr %17, align 4, !tbaa !3 + %357 = sext i32 %29 to i64 + %358 = getelementptr i8, ptr %38, i64 16 + %invariant.gep = getelementptr i8, ptr %9, i64 16 + %invariant.gep160 = getelementptr i8, ptr %9, i64 16 + %ident.check118.not = icmp eq i32 %35, 1 + %ident.check129.not = icmp eq i32 %35, 1 + br label %359 + +359: ; preds = %498, %348 + %indvar122 = phi i64 [ %indvar.next123, %498 ], [ 0, %348 ] + %360 = phi i64 [ %370, %498 ], [ 1, %348 ] + %361 = phi i64 [ %513, %498 ], [ 2, %348 ] + %362 = shl nuw nsw i64 %indvar122, 4 + %gep = getelementptr i8, ptr %invariant.gep, i64 %362 + %363 = shl nuw nsw i64 %indvar122, 4 + %gep161 = getelementptr i8, ptr %invariant.gep160, i64 %363 + %364 = trunc i64 %360 to i32 + %365 = mul nsw i64 %360, %343 + %366 = mul nsw i32 %35, %364 + %367 = sext i32 %366 to i64 + %368 = getelementptr double, ptr %38, i64 %360 + %369 = getelementptr double, ptr %368, i64 %367 + %370 = add nuw nsw i64 %360, 1 + %371 = trunc i64 %370 to i32 + %372 = getelementptr double, ptr %38, i64 %370 + %373 = getelementptr double, ptr %372, i64 %365 + %374 = call double @dlapy2_(ptr noundef %369, ptr noundef %373) #6 + %375 = mul nsw i64 %360, %357 + %376 = getelementptr double, ptr %32, i64 %370 + %377 = getelementptr double, ptr %376, i64 %375 + %378 = load double, ptr %377, align 8, !tbaa !7 + %379 = fcmp oge double %378, 0.000000e+00 + %380 = fneg double %378 + %381 = select i1 %379, double %378, double %380 + %382 = fcmp olt double %374, %381 + br i1 %382, label %383, label %438 + +383: ; preds = %359 + %384 = load double, ptr %369, align 8, !tbaa !7 + %385 = fdiv double %384, %378 + store double %385, ptr %26, align 8, !tbaa !7 + %386 = load double, ptr %373, align 8, !tbaa !7 + %387 = fdiv double %386, %378 + store double %387, ptr %25, align 8, !tbaa !7 + store double %378, ptr %369, align 8, !tbaa !7 + store double 0.000000e+00, ptr %373, align 8, !tbaa !7 + %388 = load i32, ptr %2, align 4, !tbaa !3 + %389 = sext i32 %388 to i64 + %390 = icmp slt i64 %360, %389 + %391 = fneg double %387 + br i1 %390, label %.lver.check130, label %..loopexit34_crit_edge + +..loopexit34_crit_edge: ; preds = %383 + %.pre66 = mul nsw i64 %370, %343 br label %.loopexit34 -373: ; preds = %364 - %374 = fneg double %366 - %375 = mul nsw i64 %351, %326 - %376 = add i32 %369, 1 - %377 = zext i32 %376 to i64 - %378 = getelementptr double, ptr %38, i64 %346 - %379 = getelementptr double, ptr %38, i64 %375 - br label %380 - -380: ; preds = %380, %373 - %381 = phi i64 [ %344, %373 ], [ %388, %380 ] - %382 = mul nsw i64 %381, %326 - %383 = getelementptr double, ptr %353, i64 %382 - %384 = load double, ptr %383, align 8, !tbaa !7 - %385 = getelementptr double, ptr %349, i64 %382 - %386 = load double, ptr %385, align 8, !tbaa !7 - %387 = call double @llvm.fmuladd.f64(double %374, double %384, double %386) - store double %387, ptr %383, align 8, !tbaa !7 - %388 = add nuw nsw i64 %381, 1 - %389 = getelementptr double, ptr %378, i64 %388 - %390 = load double, ptr %389, align 8, !tbaa !7 - %391 = call double @llvm.fmuladd.f64(double %372, double %384, double %390) - %392 = getelementptr double, ptr %379, i64 %388 - store double %391, ptr %392, align 8, !tbaa !7 - store double %384, ptr %385, align 8, !tbaa !7 - store double 0.000000e+00, ptr %389, align 8, !tbaa !7 - %393 = icmp eq i64 %388, %377 - br i1 %393, label %.loopexit34, label %380, !llvm.loop !24 - -.loopexit34: ; preds = %380, %..loopexit34_crit_edge - %.pre-phi67 = phi i64 [ %.pre66, %..loopexit34_crit_edge ], [ %375, %380 ] - %394 = load double, ptr %6, align 8, !tbaa !7 - %395 = fneg double %394 - %396 = add nuw nsw i64 %343, 2 - %397 = getelementptr double, ptr %38, i64 %396 - %398 = getelementptr double, ptr %397, i64 %346 - store double %395, ptr %398, align 8, !tbaa !7 - %399 = load double, ptr %6, align 8, !tbaa !7 - %400 = getelementptr double, ptr %38, i64 %.pre-phi67 - %401 = getelementptr double, ptr %400, i64 %351 - %402 = load double, ptr %401, align 8, !tbaa !7 - %403 = call double @llvm.fmuladd.f64(double %372, double %399, double %402) - store double %403, ptr %401, align 8, !tbaa !7 - %404 = load double, ptr %6, align 8, !tbaa !7 - %405 = getelementptr double, ptr %400, i64 %396 - %406 = load double, ptr %405, align 8, !tbaa !7 - %407 = call double @llvm.fmuladd.f64(double %366, double %404, double %406) - store double %407, ptr %405, align 8, !tbaa !7 - br label %455 - -408: ; preds = %342 - %409 = fcmp oeq double %355, 0.000000e+00 - br i1 %409, label %410, label %._crit_edge - -._crit_edge: ; preds = %408 - %.pre = load double, ptr %354, align 8, !tbaa !7 - br label %413 - -410: ; preds = %408 - %411 = load double, ptr %12, align 8, !tbaa !7 - store double %411, ptr %350, align 8, !tbaa !7 - store double 0.000000e+00, ptr %354, align 8, !tbaa !7 - %412 = load double, ptr %12, align 8, !tbaa !7 - br label %413 - -413: ; preds = %._crit_edge, %410 - %414 = phi double [ 0.000000e+00, %410 ], [ %.pre, %._crit_edge ] - %415 = phi double [ %412, %410 ], [ %355, %._crit_edge ] - %416 = fdiv double %359, %415 - %417 = fdiv double %416, %415 - %418 = load double, ptr %350, align 8, !tbaa !7 - %419 = fmul double %418, %417 - store double %419, ptr %26, align 8, !tbaa !7 - %420 = fneg double %414 - %421 = fmul double %417, %420 - store double %421, ptr %25, align 8, !tbaa !7 - %422 = load i32, ptr %2, align 4, !tbaa !3 - %423 = sext i32 %422 to i64 - %424 = icmp slt i64 %343, %423 - br i1 %424, label %425, label %..loopexit35_crit_edge - -..loopexit35_crit_edge: ; preds = %413 - %.pre70 = mul nsw i64 %351, %326 +.lver.check130: ; preds = %383 + %392 = fneg double %385 + %393 = mul nsw i64 %370, %343 + %394 = add i32 %388, 1 + %395 = zext i32 %394 to i64 + %396 = getelementptr double, ptr %38, i64 %365 + %397 = getelementptr double, ptr %38, i64 %393 + br i1 %ident.check129.not, label %.ph131, label %.ph131.lver.orig + +.ph131.lver.orig: ; preds = %.lver.check130, %.ph131.lver.orig + %398 = phi i64 [ %405, %.ph131.lver.orig ], [ %361, %.lver.check130 ] + %399 = mul nsw i64 %398, %343 + %400 = getelementptr double, ptr %372, i64 %399 + %401 = load double, ptr %400, align 8, !tbaa !7 + %402 = getelementptr double, ptr %368, i64 %399 + %403 = load double, ptr %402, align 8, !tbaa !7 + %404 = call double @llvm.fmuladd.f64(double %392, double %401, double %403) + store double %404, ptr %400, align 8, !tbaa !7 + %405 = add nuw nsw i64 %398, 1 + %406 = getelementptr double, ptr %396, i64 %405 + %407 = load double, ptr %406, align 8, !tbaa !7 + %408 = call double @llvm.fmuladd.f64(double %391, double %401, double %407) + %409 = getelementptr double, ptr %397, i64 %405 + store double %408, ptr %409, align 8, !tbaa !7 + store double %401, ptr %402, align 8, !tbaa !7 + store double 0.000000e+00, ptr %406, align 8, !tbaa !7 + %410 = icmp eq i64 %405, %395 + br i1 %410, label %.loopexit34, label %.ph131.lver.orig, !llvm.loop !24 + +.ph131: ; preds = %.lver.check130 + %load_initial134 = load double, ptr %gep, align 8 + br label %411 + +411: ; preds = %411, %.ph131 + %store_forwarded135 = phi double [ %load_initial134, %.ph131 ], [ %421, %411 ] + %412 = phi i64 [ %361, %.ph131 ], [ %418, %411 ] + %413 = mul nuw nsw i64 %412, %343 + %414 = getelementptr double, ptr %372, i64 %413 + %415 = getelementptr double, ptr %368, i64 %413 + %416 = load double, ptr %415, align 8, !tbaa !7 + %417 = call double @llvm.fmuladd.f64(double %392, double %store_forwarded135, double %416) + store double %417, ptr %414, align 8, !tbaa !7 + %418 = add nuw nsw i64 %412, 1 + %419 = getelementptr double, ptr %396, i64 %418 + %420 = load double, ptr %419, align 8, !tbaa !7 + %421 = call double @llvm.fmuladd.f64(double %391, double %store_forwarded135, double %420) + %422 = getelementptr double, ptr %397, i64 %418 + store double %421, ptr %422, align 8, !tbaa !7 + store double %store_forwarded135, ptr %415, align 8, !tbaa !7 + store double 0.000000e+00, ptr %419, align 8, !tbaa !7 + %423 = icmp eq i64 %418, %395 + br i1 %423, label %.loopexit34, label %411, !llvm.loop !24 + +.loopexit34: ; preds = %.ph131.lver.orig, %411, %..loopexit34_crit_edge + %.pre-phi67 = phi i64 [ %.pre66, %..loopexit34_crit_edge ], [ %393, %411 ], [ %393, %.ph131.lver.orig ] + %424 = load double, ptr %6, align 8, !tbaa !7 + %425 = fneg double %424 + %426 = add nuw nsw i64 %360, 2 + %427 = getelementptr double, ptr %38, i64 %426 + %428 = getelementptr double, ptr %427, i64 %365 + store double %425, ptr %428, align 8, !tbaa !7 + %429 = load double, ptr %6, align 8, !tbaa !7 + %430 = getelementptr double, ptr %38, i64 %.pre-phi67 + %431 = getelementptr double, ptr %430, i64 %370 + %432 = load double, ptr %431, align 8, !tbaa !7 + %433 = call double @llvm.fmuladd.f64(double %391, double %429, double %432) + store double %433, ptr %431, align 8, !tbaa !7 + %434 = load double, ptr %6, align 8, !tbaa !7 + %435 = getelementptr double, ptr %430, i64 %426 + %436 = load double, ptr %435, align 8, !tbaa !7 + %437 = call double @llvm.fmuladd.f64(double %385, double %434, double %436) + store double %437, ptr %435, align 8, !tbaa !7 + br label %498 + +438: ; preds = %359 + %439 = fcmp oeq double %374, 0.000000e+00 + br i1 %439, label %440, label %._crit_edge + +._crit_edge: ; preds = %438 + %.pre = load double, ptr %373, align 8, !tbaa !7 + br label %443 + +440: ; preds = %438 + %441 = load double, ptr %12, align 8, !tbaa !7 + store double %441, ptr %369, align 8, !tbaa !7 + store double 0.000000e+00, ptr %373, align 8, !tbaa !7 + %442 = load double, ptr %12, align 8, !tbaa !7 + br label %443 + +443: ; preds = %._crit_edge, %440 + %444 = phi double [ 0.000000e+00, %440 ], [ %.pre, %._crit_edge ] + %445 = phi double [ %442, %440 ], [ %374, %._crit_edge ] + %446 = fdiv double %378, %445 + %447 = fdiv double %446, %445 + %448 = load double, ptr %369, align 8, !tbaa !7 + %449 = fmul double %448, %447 + store double %449, ptr %26, align 8, !tbaa !7 + %450 = fneg double %444 + %451 = fmul double %447, %450 + store double %451, ptr %25, align 8, !tbaa !7 + %452 = load i32, ptr %2, align 4, !tbaa !3 + %453 = sext i32 %452 to i64 + %454 = icmp slt i64 %360, %453 + br i1 %454, label %.lver.check119, label %..loopexit35_crit_edge + +..loopexit35_crit_edge: ; preds = %443 + %.pre70 = mul nsw i64 %370, %343 br label %.loopexit35 -425: ; preds = %413 - %426 = fneg double %419 - %427 = fneg double %421 - %428 = mul nsw i64 %351, %326 - %429 = add i32 %422, 1 - %430 = zext i32 %429 to i64 - %431 = getelementptr double, ptr %38, i64 %346 - %432 = getelementptr double, ptr %38, i64 %428 - br label %433 - -433: ; preds = %433, %425 - %434 = phi i64 [ %344, %425 ], [ %441, %433 ] - %435 = mul nsw i64 %434, %326 - %436 = getelementptr double, ptr %353, i64 %435 - %437 = load double, ptr %436, align 8, !tbaa !7 - %438 = getelementptr double, ptr %349, i64 %435 - %439 = load double, ptr %438, align 8, !tbaa !7 - %440 = call double @llvm.fmuladd.f64(double %426, double %439, double %437) - %441 = add nuw nsw i64 %434, 1 - %442 = getelementptr double, ptr %431, i64 %441 - %443 = load double, ptr %442, align 8, !tbaa !7 - %444 = call double @llvm.fmuladd.f64(double %421, double %443, double %440) - store double %444, ptr %436, align 8, !tbaa !7 - %445 = load double, ptr %442, align 8, !tbaa !7 - %446 = fmul double %439, %427 - %447 = call double @llvm.fmuladd.f64(double %426, double %445, double %446) - %448 = getelementptr double, ptr %432, i64 %441 - store double %447, ptr %448, align 8, !tbaa !7 - %449 = icmp eq i64 %441, %430 - br i1 %449, label %.loopexit35, label %433, !llvm.loop !25 - -.loopexit35: ; preds = %433, %..loopexit35_crit_edge - %.pre-phi71 = phi i64 [ %.pre70, %..loopexit35_crit_edge ], [ %428, %433 ] - %450 = load double, ptr %6, align 8, !tbaa !7 - %451 = getelementptr double, ptr %341, i64 %343 - %452 = getelementptr double, ptr %451, i64 %.pre-phi71 - %453 = load double, ptr %452, align 8, !tbaa !7 - %454 = fsub double %453, %450 - store double %454, ptr %452, align 8, !tbaa !7 - br label %455 - -455: ; preds = %.loopexit35, %.loopexit34 - %456 = phi i32 [ %422, %.loopexit35 ], [ %369, %.loopexit34 ] - %457 = sub nsw i32 %456, %345 - store i32 %457, ptr %18, align 4, !tbaa !3 - store i32 %457, ptr %19, align 4, !tbaa !3 - %458 = mul nsw i32 %35, %352 - %459 = sext i32 %458 to i64 - %460 = getelementptr double, ptr %349, i64 %459 - %461 = call double @dasum_(ptr noundef nonnull %18, ptr noundef %460, ptr noundef nonnull %10) #6 - %462 = getelementptr double, ptr %341, i64 %343 - %463 = getelementptr double, ptr %462, i64 %346 - %464 = call double @dasum_(ptr noundef nonnull %19, ptr noundef %463, ptr noundef nonnull @c__1) #6 - %465 = fadd double %461, %464 - %466 = getelementptr inbounds double, ptr %39, i64 %343 - store double %465, ptr %466, align 8, !tbaa !7 - %467 = load i32, ptr %17, align 4, !tbaa !3 - %468 = sext i32 %467 to i64 - %469 = icmp slt i64 %343, %468 - %470 = add nuw nsw i64 %344, 1 - br i1 %469, label %342, label %.loopexit36.loopexit, !llvm.loop !26 - -.loopexit36.loopexit: ; preds = %455 +.lver.check119: ; preds = %443 + %455 = fneg double %449 + %456 = fneg double %451 + %457 = mul nsw i64 %370, %343 + %458 = add i32 %452, 1 + %459 = zext i32 %458 to i64 + %460 = getelementptr double, ptr %38, i64 %365 + %461 = getelementptr double, ptr %38, i64 %457 + br i1 %ident.check118.not, label %.ph120, label %.ph120.lver.orig + +.ph120.lver.orig: ; preds = %.lver.check119, %.ph120.lver.orig + %462 = phi i64 [ %469, %.ph120.lver.orig ], [ %361, %.lver.check119 ] + %463 = mul nsw i64 %462, %343 + %464 = getelementptr double, ptr %372, i64 %463 + %465 = load double, ptr %464, align 8, !tbaa !7 + %466 = getelementptr double, ptr %368, i64 %463 + %467 = load double, ptr %466, align 8, !tbaa !7 + %468 = call double @llvm.fmuladd.f64(double %455, double %467, double %465) + %469 = add nuw nsw i64 %462, 1 + %470 = getelementptr double, ptr %460, i64 %469 + %471 = load double, ptr %470, align 8, !tbaa !7 + %472 = call double @llvm.fmuladd.f64(double %451, double %471, double %468) + store double %472, ptr %464, align 8, !tbaa !7 + %473 = load double, ptr %470, align 8, !tbaa !7 + %474 = fmul double %467, %456 + %475 = call double @llvm.fmuladd.f64(double %455, double %473, double %474) + %476 = getelementptr double, ptr %461, i64 %469 + store double %475, ptr %476, align 8, !tbaa !7 + %477 = icmp eq i64 %469, %459 + br i1 %477, label %.loopexit35, label %.ph120.lver.orig, !llvm.loop !25 + +.ph120: ; preds = %.lver.check119 + %load_initial125 = load double, ptr %gep161, align 8 + br label %478 + +478: ; preds = %478, %.ph120 + %store_forwarded126 = phi double [ %load_initial125, %.ph120 ], [ %490, %478 ] + %479 = phi i64 [ %361, %.ph120 ], [ %485, %478 ] + %480 = mul nuw nsw i64 %479, %343 + %481 = getelementptr double, ptr %372, i64 %480 + %482 = getelementptr double, ptr %368, i64 %480 + %483 = load double, ptr %482, align 8, !tbaa !7 + %484 = call double @llvm.fmuladd.f64(double %455, double %483, double %store_forwarded126) + %485 = add nuw nsw i64 %479, 1 + %486 = getelementptr double, ptr %460, i64 %485 + %487 = call double @llvm.fmuladd.f64(double %451, double %store_forwarded126, double %484) + store double %487, ptr %481, align 8, !tbaa !7 + %488 = load double, ptr %486, align 8, !tbaa !7 + %489 = fmul double %483, %456 + %490 = call double @llvm.fmuladd.f64(double %455, double %488, double %489) + %491 = getelementptr double, ptr %461, i64 %485 + store double %490, ptr %491, align 8, !tbaa !7 + %492 = icmp eq i64 %485, %459 + br i1 %492, label %.loopexit35, label %478, !llvm.loop !25 + +.loopexit35: ; preds = %.ph120.lver.orig, %478, %..loopexit35_crit_edge + %.pre-phi71 = phi i64 [ %.pre70, %..loopexit35_crit_edge ], [ %457, %478 ], [ %457, %.ph120.lver.orig ] + %493 = load double, ptr %6, align 8, !tbaa !7 + %494 = getelementptr double, ptr %358, i64 %360 + %495 = getelementptr double, ptr %494, i64 %.pre-phi71 + %496 = load double, ptr %495, align 8, !tbaa !7 + %497 = fsub double %496, %493 + store double %497, ptr %495, align 8, !tbaa !7 + br label %498 + +498: ; preds = %.loopexit35, %.loopexit34 + %499 = phi i32 [ %452, %.loopexit35 ], [ %388, %.loopexit34 ] + %500 = sub nsw i32 %499, %364 + store i32 %500, ptr %18, align 4, !tbaa !3 + store i32 %500, ptr %19, align 4, !tbaa !3 + %501 = mul nsw i32 %35, %371 + %502 = sext i32 %501 to i64 + %503 = getelementptr double, ptr %368, i64 %502 + %504 = call double @dasum_(ptr noundef nonnull %18, ptr noundef %503, ptr noundef nonnull %10) #6 + %505 = getelementptr double, ptr %358, i64 %360 + %506 = getelementptr double, ptr %505, i64 %365 + %507 = call double @dasum_(ptr noundef nonnull %19, ptr noundef %506, ptr noundef nonnull @c__1) #6 + %508 = fadd double %504, %507 + %509 = getelementptr inbounds double, ptr %39, i64 %360 + store double %508, ptr %509, align 8, !tbaa !7 + %510 = load i32, ptr %17, align 4, !tbaa !3 + %511 = sext i32 %510 to i64 + %512 = icmp slt i64 %360, %511 + %513 = add nuw nsw i64 %361, 1 + %indvar.next123 = add i64 %indvar122, 1 + br i1 %512, label %359, label %.loopexit36.loopexit, !llvm.loop !26 + +.loopexit36.loopexit: ; preds = %498 %.pre58 = load i32, ptr %2, align 4, !tbaa !3 br label %.loopexit36 -.loopexit36: ; preds = %324, %.loopexit36.loopexit - %.pr = phi i32 [ %.pre58, %.loopexit36.loopexit ], [ %329, %324 ] - %471 = add i32 %35, 1 - %472 = mul i32 %.pr, %471 - %473 = sext i32 %472 to i64 - %474 = getelementptr inbounds double, ptr %38, i64 %473 - %475 = load double, ptr %474, align 8, !tbaa !7 - %476 = fcmp oeq double %475, 0.000000e+00 - br i1 %476, label %477, label %485 - -477: ; preds = %.loopexit36 - %478 = add i32 %472, 1 - %479 = sext i32 %478 to i64 - %480 = getelementptr inbounds double, ptr %38, i64 %479 - %481 = load double, ptr %480, align 8, !tbaa !7 - %482 = fcmp oeq double %481, 0.000000e+00 - br i1 %482, label %483, label %485 - -483: ; preds = %477 - %484 = load double, ptr %12, align 8, !tbaa !7 - store double %484, ptr %474, align 8, !tbaa !7 - br label %485 - -485: ; preds = %483, %477, %.loopexit36 - %486 = sext i32 %.pr to i64 - %487 = getelementptr inbounds double, ptr %39, i64 %486 - store double 0.000000e+00, ptr %487, align 8, !tbaa !7 - br label %634 - -488: ; preds = %.loopexit37 - %489 = load i32, ptr %2, align 4, !tbaa !3 - %490 = add nsw i32 %489, 1 - %491 = mul nsw i32 %489, %35 - %492 = add nsw i32 %490, %491 - %493 = sext i32 %492 to i64 - %494 = getelementptr inbounds double, ptr %38, i64 %493 - store double %323, ptr %494, align 8, !tbaa !7 - %495 = add nsw i32 %489, -1 - store i32 %495, ptr %17, align 4, !tbaa !3 - %496 = icmp sgt i32 %489, 1 - br i1 %496, label %497, label %.thread - -497: ; preds = %488 - %498 = sext i32 %35 to i64 - %499 = zext nneg i32 %490 to i64 - %500 = zext nneg i32 %489 to i64 - %501 = getelementptr double, ptr %38, i64 %499 - br label %505 - -502: ; preds = %505 - %503 = getelementptr i8, ptr %38, i64 8 - %504 = getelementptr double, ptr %38, i64 %498 - br label %511 - -505: ; preds = %505, %497 - %506 = phi i64 [ 1, %497 ], [ %509, %505 ] - %507 = mul nsw i64 %506, %498 - %508 = getelementptr double, ptr %501, i64 %507 - store double 0.000000e+00, ptr %508, align 8, !tbaa !7 - %509 = add nuw nsw i64 %506, 1 - %510 = icmp eq i64 %509, %500 - br i1 %510, label %502, label %505, !llvm.loop !27 - -511: ; preds = %614, %502 - %512 = phi i64 [ %500, %502 ], [ %514, %614 ] - %513 = trunc i64 %512 to i32 - %514 = add nsw i64 %512, -1 - %515 = trunc i64 %514 to i32 - %516 = mul nsw i32 %29, %515 - %517 = sext i32 %516 to i64 - %518 = getelementptr double, ptr %32, i64 %512 - %519 = getelementptr double, ptr %518, i64 %517 - %520 = load double, ptr %519, align 8, !tbaa !7 - %521 = mul nsw i64 %512, %498 - %522 = mul nsw i32 %35, %513 - %523 = sext i32 %522 to i64 - %524 = getelementptr double, ptr %38, i64 %512 - %525 = getelementptr double, ptr %524, i64 %523 - %526 = add nuw nsw i64 %512, 1 - %527 = getelementptr double, ptr %38, i64 %526 - %528 = getelementptr double, ptr %527, i64 %521 - %529 = call double @dlapy2_(ptr noundef %525, ptr noundef %528) #6 - %530 = fcmp oge double %520, 0.000000e+00 - %531 = fneg double %520 - %532 = select i1 %530, double %520, double %531 - %533 = fcmp olt double %529, %532 - br i1 %533, label %534, label %570 - -534: ; preds = %511 - %535 = load double, ptr %525, align 8, !tbaa !7 - %536 = fdiv double %535, %520 - store double %536, ptr %26, align 8, !tbaa !7 - %537 = load double, ptr %528, align 8, !tbaa !7 - %538 = fdiv double %537, %520 - store double %538, ptr %25, align 8, !tbaa !7 - store double %520, ptr %525, align 8, !tbaa !7 - store double 0.000000e+00, ptr %528, align 8, !tbaa !7 - %539 = mul nsw i64 %514, %498 - %540 = fneg double %536 - %541 = fneg double %538 - %542 = getelementptr double, ptr %38, i64 %539 - %543 = getelementptr double, ptr %38, i64 %521 - br label %544 - -544: ; preds = %544, %534 - %545 = phi i64 [ 1, %534 ], [ %556, %544 ] - %546 = getelementptr double, ptr %542, i64 %545 - %547 = load double, ptr %546, align 8, !tbaa !7 - %548 = getelementptr double, ptr %543, i64 %545 - %549 = load double, ptr %548, align 8, !tbaa !7 - %550 = call double @llvm.fmuladd.f64(double %540, double %547, double %549) - store double %550, ptr %546, align 8, !tbaa !7 - %551 = mul nsw i64 %545, %498 - %552 = getelementptr double, ptr %527, i64 %551 - %553 = load double, ptr %552, align 8, !tbaa !7 - %554 = call double @llvm.fmuladd.f64(double %541, double %547, double %553) - %555 = getelementptr double, ptr %524, i64 %551 - store double %554, ptr %555, align 8, !tbaa !7 - store double %547, ptr %548, align 8, !tbaa !7 - store double 0.000000e+00, ptr %552, align 8, !tbaa !7 - %556 = add nuw nsw i64 %545, 1 - %557 = icmp eq i64 %556, %512 - br i1 %557, label %558, label %544, !llvm.loop !28 - -558: ; preds = %544 - %559 = load double, ptr %6, align 8, !tbaa !7 - %560 = mul nsw i32 %35, %515 - %561 = getelementptr double, ptr %542, i64 %526 - store double %559, ptr %561, align 8, !tbaa !7 - %562 = getelementptr double, ptr %542, i64 %514 - %563 = load double, ptr %562, align 8, !tbaa !7 - %564 = call double @llvm.fmuladd.f64(double %538, double %559, double %563) - store double %564, ptr %562, align 8, !tbaa !7 - %565 = load double, ptr %6, align 8, !tbaa !7 - %566 = sext i32 %560 to i64 - %567 = getelementptr double, ptr %524, i64 %566 - %568 = load double, ptr %567, align 8, !tbaa !7 - %569 = call double @llvm.fmuladd.f64(double %540, double %565, double %568) - store double %569, ptr %567, align 8, !tbaa !7 - br label %614 - -570: ; preds = %511 - %571 = fcmp oeq double %529, 0.000000e+00 - br i1 %571, label %572, label %._crit_edge59 - -._crit_edge59: ; preds = %570 - %.pre60 = load double, ptr %528, align 8, !tbaa !7 - br label %575 - -572: ; preds = %570 - %573 = load double, ptr %12, align 8, !tbaa !7 - store double %573, ptr %525, align 8, !tbaa !7 - store double 0.000000e+00, ptr %528, align 8, !tbaa !7 - %574 = load double, ptr %12, align 8, !tbaa !7 - br label %575 - -575: ; preds = %._crit_edge59, %572 - %576 = phi double [ 0.000000e+00, %572 ], [ %.pre60, %._crit_edge59 ] - %577 = phi double [ %574, %572 ], [ %529, %._crit_edge59 ] - %578 = fdiv double %520, %577 - %579 = fdiv double %578, %577 - %580 = load double, ptr %525, align 8, !tbaa !7 - %581 = fmul double %580, %579 - store double %581, ptr %26, align 8, !tbaa !7 - %582 = fneg double %576 - %583 = fmul double %579, %582 - store double %583, ptr %25, align 8, !tbaa !7 - %584 = mul nsw i64 %514, %498 - %585 = fneg double %581 - %586 = fneg double %583 - %587 = getelementptr double, ptr %38, i64 %584 - %588 = getelementptr double, ptr %38, i64 %521 - br label %589 - -589: ; preds = %589, %575 - %590 = phi i64 [ 1, %575 ], [ %605, %589 ] - %591 = getelementptr double, ptr %587, i64 %590 - %592 = load double, ptr %591, align 8, !tbaa !7 - %593 = getelementptr double, ptr %588, i64 %590 - %594 = load double, ptr %593, align 8, !tbaa !7 - %595 = call double @llvm.fmuladd.f64(double %585, double %594, double %592) - %596 = mul nsw i64 %590, %498 - %597 = getelementptr double, ptr %527, i64 %596 +.loopexit36: ; preds = %341, %.loopexit36.loopexit + %.pr = phi i32 [ %.pre58, %.loopexit36.loopexit ], [ %346, %341 ] + %514 = add i32 %35, 1 + %515 = mul i32 %.pr, %514 + %516 = sext i32 %515 to i64 + %517 = getelementptr inbounds double, ptr %38, i64 %516 + %518 = load double, ptr %517, align 8, !tbaa !7 + %519 = fcmp oeq double %518, 0.000000e+00 + br i1 %519, label %520, label %528 + +520: ; preds = %.loopexit36 + %521 = add i32 %515, 1 + %522 = sext i32 %521 to i64 + %523 = getelementptr inbounds double, ptr %38, i64 %522 + %524 = load double, ptr %523, align 8, !tbaa !7 + %525 = fcmp oeq double %524, 0.000000e+00 + br i1 %525, label %526, label %528 + +526: ; preds = %520 + %527 = load double, ptr %12, align 8, !tbaa !7 + store double %527, ptr %517, align 8, !tbaa !7 + br label %528 + +528: ; preds = %526, %520, %.loopexit36 + %529 = sext i32 %.pr to i64 + %530 = getelementptr inbounds double, ptr %39, i64 %529 + store double 0.000000e+00, ptr %530, align 8, !tbaa !7 + br label %709 + +531: ; preds = %.loopexit37 + %532 = load i32, ptr %2, align 4, !tbaa !3 + %533 = add nsw i32 %532, 1 + %534 = mul nsw i32 %532, %35 + %535 = add nsw i32 %533, %534 + %536 = sext i32 %535 to i64 + %537 = getelementptr inbounds double, ptr %38, i64 %536 + store double %340, ptr %537, align 8, !tbaa !7 + %538 = add nsw i32 %532, -1 + store i32 %538, ptr %17, align 4, !tbaa !3 + %539 = icmp sgt i32 %532, 1 + br i1 %539, label %540, label %.thread + +540: ; preds = %531 + %541 = sext i32 %35 to i64 + %542 = zext nneg i32 %533 to i64 + %543 = zext nneg i32 %532 to i64 + %544 = getelementptr double, ptr %38, i64 %542 + br label %552 + +545: ; preds = %552 + %546 = getelementptr i8, ptr %38, i64 8 + %547 = getelementptr double, ptr %38, i64 %541 + %548 = shl nuw nsw i64 %543, 3 + %549 = add nsw i64 %548, -16 + %550 = shl nuw nsw i64 %543, 3 + %551 = add nsw i64 %550, -8 + %ident.check100.not = icmp eq i32 %35, 1 + %ident.check110.not = icmp eq i32 %35, 1 + br label %558 + +552: ; preds = %552, %540 + %553 = phi i64 [ 1, %540 ], [ %556, %552 ] + %554 = mul nsw i64 %553, %541 + %555 = getelementptr double, ptr %544, i64 %554 + store double 0.000000e+00, ptr %555, align 8, !tbaa !7 + %556 = add nuw nsw i64 %553, 1 + %557 = icmp eq i64 %556, %543 + br i1 %557, label %545, label %552, !llvm.loop !27 + +558: ; preds = %689, %545 + %indvar105 = phi i64 [ %indvar.next106, %689 ], [ 0, %545 ] + %559 = phi i64 [ %565, %689 ], [ %543, %545 ] + %560 = shl i64 %indvar105, 3 + %561 = sub i64 %551, %560 + %scevgep115 = getelementptr i8, ptr %9, i64 %561 + %562 = shl i64 %indvar105, 3 + %563 = sub i64 %549, %562 + %scevgep107 = getelementptr i8, ptr %9, i64 %563 + %564 = trunc i64 %559 to i32 + %565 = add nsw i64 %559, -1 + %566 = trunc i64 %565 to i32 + %567 = mul nsw i32 %29, %566 + %568 = sext i32 %567 to i64 + %569 = getelementptr double, ptr %32, i64 %559 + %570 = getelementptr double, ptr %569, i64 %568 + %571 = load double, ptr %570, align 8, !tbaa !7 + %572 = mul nsw i64 %559, %541 + %573 = mul nsw i32 %35, %564 + %574 = sext i32 %573 to i64 + %575 = getelementptr double, ptr %38, i64 %559 + %576 = getelementptr double, ptr %575, i64 %574 + %577 = add nuw nsw i64 %559, 1 + %578 = getelementptr double, ptr %38, i64 %577 + %579 = getelementptr double, ptr %578, i64 %572 + %580 = call double @dlapy2_(ptr noundef %576, ptr noundef %579) #6 + %581 = fcmp oge double %571, 0.000000e+00 + %582 = fneg double %571 + %583 = select i1 %581, double %571, double %582 + %584 = fcmp olt double %580, %583 + br i1 %584, label %.lver.check111, label %631 + +.lver.check111: ; preds = %558 + %585 = load double, ptr %576, align 8, !tbaa !7 + %586 = fdiv double %585, %571 + store double %586, ptr %26, align 8, !tbaa !7 + %587 = load double, ptr %579, align 8, !tbaa !7 + %588 = fdiv double %587, %571 + store double %588, ptr %25, align 8, !tbaa !7 + store double %571, ptr %576, align 8, !tbaa !7 + store double 0.000000e+00, ptr %579, align 8, !tbaa !7 + %589 = mul nsw i64 %565, %541 + %590 = fneg double %586 + %591 = fneg double %588 + %592 = getelementptr double, ptr %38, i64 %589 + %593 = getelementptr double, ptr %38, i64 %572 + br i1 %ident.check110.not, label %.ph112, label %.ph112.lver.orig + +.ph112.lver.orig: ; preds = %.lver.check111, %.ph112.lver.orig + %594 = phi i64 [ %605, %.ph112.lver.orig ], [ 1, %.lver.check111 ] + %595 = getelementptr double, ptr %592, i64 %594 + %596 = load double, ptr %595, align 8, !tbaa !7 + %597 = getelementptr double, ptr %593, i64 %594 %598 = load double, ptr %597, align 8, !tbaa !7 - %599 = call double @llvm.fmuladd.f64(double %583, double %598, double %595) - store double %599, ptr %591, align 8, !tbaa !7 - %600 = load double, ptr %597, align 8, !tbaa !7 - %601 = load double, ptr %593, align 8, !tbaa !7 - %602 = fmul double %601, %586 - %603 = call double @llvm.fmuladd.f64(double %585, double %600, double %602) - %604 = getelementptr double, ptr %524, i64 %596 + %599 = call double @llvm.fmuladd.f64(double %590, double %596, double %598) + store double %599, ptr %595, align 8, !tbaa !7 + %600 = mul nsw i64 %594, %541 + %601 = getelementptr double, ptr %578, i64 %600 + %602 = load double, ptr %601, align 8, !tbaa !7 + %603 = call double @llvm.fmuladd.f64(double %591, double %596, double %602) + %604 = getelementptr double, ptr %575, i64 %600 store double %603, ptr %604, align 8, !tbaa !7 - %605 = add nuw nsw i64 %590, 1 - %606 = icmp eq i64 %605, %512 - br i1 %606, label %607, label %589, !llvm.loop !29 - -607: ; preds = %589 - %608 = load double, ptr %6, align 8, !tbaa !7 - %609 = mul nsw i32 %35, %515 - %610 = sext i32 %609 to i64 - %611 = getelementptr double, ptr %524, i64 %610 - %612 = load double, ptr %611, align 8, !tbaa !7 - %613 = fadd double %608, %612 - store double %613, ptr %611, align 8, !tbaa !7 - br label %614 - -614: ; preds = %607, %558 - store i32 %515, ptr %17, align 4, !tbaa !3 - store i32 %515, ptr %18, align 4, !tbaa !3 - %615 = getelementptr double, ptr %503, i64 %521 - %616 = call double @dasum_(ptr noundef nonnull %17, ptr noundef %615, ptr noundef nonnull @c__1) #6 - %617 = getelementptr double, ptr %504, i64 %526 - %618 = call double @dasum_(ptr noundef nonnull %18, ptr noundef %617, ptr noundef nonnull %10) #6 - %619 = fadd double %616, %618 - %620 = getelementptr inbounds double, ptr %39, i64 %512 - store double %619, ptr %620, align 8, !tbaa !7 - %621 = icmp sgt i64 %512, 2 - br i1 %621, label %511, label %.thread, !llvm.loop !30 - -.thread: ; preds = %614, %488 - %622 = load double, ptr %9, align 8, !tbaa !7 - %623 = fcmp oeq double %622, 0.000000e+00 - br i1 %623, label %624, label %632 - -624: ; preds = %.thread - %625 = sext i32 %35 to i64 - %626 = getelementptr double, ptr %38, i64 %625 - %627 = getelementptr i8, ptr %626, i64 16 - %628 = load double, ptr %627, align 8, !tbaa !7 - %629 = fcmp oeq double %628, 0.000000e+00 - br i1 %629, label %630, label %632 - -630: ; preds = %624 - %631 = load double, ptr %12, align 8, !tbaa !7 - store double %631, ptr %9, align 8, !tbaa !7 - br label %632 - -632: ; preds = %630, %624, %.thread + store double %596, ptr %597, align 8, !tbaa !7 + store double 0.000000e+00, ptr %601, align 8, !tbaa !7 + %605 = add nuw nsw i64 %594, 1 + %606 = icmp eq i64 %605, %559 + br i1 %606, label %.loopexit113, label %.ph112.lver.orig, !llvm.loop !28 + +.ph112: ; preds = %.lver.check111 + %load_initial116 = load double, ptr %scevgep115, align 8 + br label %607 + +607: ; preds = %607, %.ph112 + %store_forwarded117 = phi double [ %load_initial116, %.ph112 ], [ 0.000000e+00, %607 ] + %608 = phi i64 [ 1, %.ph112 ], [ %618, %607 ] + %609 = getelementptr double, ptr %592, i64 %608 + %610 = load double, ptr %609, align 8, !tbaa !7 + %611 = getelementptr double, ptr %593, i64 %608 + %612 = call double @llvm.fmuladd.f64(double %590, double %610, double %store_forwarded117) + store double %612, ptr %609, align 8, !tbaa !7 + %613 = mul nuw nsw i64 %608, %541 + %614 = getelementptr double, ptr %578, i64 %613 + %615 = load double, ptr %614, align 8, !tbaa !7 + %616 = call double @llvm.fmuladd.f64(double %591, double %610, double %615) + %617 = getelementptr double, ptr %575, i64 %613 + store double %616, ptr %617, align 8, !tbaa !7 + store double %610, ptr %611, align 8, !tbaa !7 + store double 0.000000e+00, ptr %614, align 8, !tbaa !7 + %618 = add nuw nsw i64 %608, 1 + %619 = icmp eq i64 %618, %559 + br i1 %619, label %.loopexit113, label %607, !llvm.loop !28 + +.loopexit113: ; preds = %.ph112.lver.orig, %607 + %620 = load double, ptr %6, align 8, !tbaa !7 + %621 = mul nsw i32 %35, %566 + %622 = getelementptr double, ptr %592, i64 %577 + store double %620, ptr %622, align 8, !tbaa !7 + %623 = getelementptr double, ptr %592, i64 %565 + %624 = load double, ptr %623, align 8, !tbaa !7 + %625 = call double @llvm.fmuladd.f64(double %588, double %620, double %624) + store double %625, ptr %623, align 8, !tbaa !7 + %626 = load double, ptr %6, align 8, !tbaa !7 + %627 = sext i32 %621 to i64 + %628 = getelementptr double, ptr %575, i64 %627 + %629 = load double, ptr %628, align 8, !tbaa !7 + %630 = call double @llvm.fmuladd.f64(double %590, double %626, double %629) + store double %630, ptr %628, align 8, !tbaa !7 + br label %689 + +631: ; preds = %558 + %632 = fcmp oeq double %580, 0.000000e+00 + br i1 %632, label %633, label %._crit_edge59 + +._crit_edge59: ; preds = %631 + %.pre60 = load double, ptr %579, align 8, !tbaa !7 + br label %.lver.check101 + +633: ; preds = %631 + %634 = load double, ptr %12, align 8, !tbaa !7 + store double %634, ptr %576, align 8, !tbaa !7 + store double 0.000000e+00, ptr %579, align 8, !tbaa !7 + %635 = load double, ptr %12, align 8, !tbaa !7 + br label %.lver.check101 + +.lver.check101: ; preds = %._crit_edge59, %633 + %636 = phi double [ 0.000000e+00, %633 ], [ %.pre60, %._crit_edge59 ] + %637 = phi double [ %635, %633 ], [ %580, %._crit_edge59 ] + %638 = fdiv double %571, %637 + %639 = fdiv double %638, %637 + %640 = load double, ptr %576, align 8, !tbaa !7 + %641 = fmul double %640, %639 + store double %641, ptr %26, align 8, !tbaa !7 + %642 = fneg double %636 + %643 = fmul double %639, %642 + store double %643, ptr %25, align 8, !tbaa !7 + %644 = mul nsw i64 %565, %541 + %645 = fneg double %641 + %646 = fneg double %643 + %647 = getelementptr double, ptr %38, i64 %644 + %648 = getelementptr double, ptr %38, i64 %572 + br i1 %ident.check100.not, label %.ph102, label %.ph102.lver.orig + +.ph102.lver.orig: ; preds = %.lver.check101, %.ph102.lver.orig + %649 = phi i64 [ %664, %.ph102.lver.orig ], [ 1, %.lver.check101 ] + %650 = getelementptr double, ptr %647, i64 %649 + %651 = load double, ptr %650, align 8, !tbaa !7 + %652 = getelementptr double, ptr %648, i64 %649 + %653 = load double, ptr %652, align 8, !tbaa !7 + %654 = call double @llvm.fmuladd.f64(double %645, double %653, double %651) + %655 = mul nsw i64 %649, %541 + %656 = getelementptr double, ptr %578, i64 %655 + %657 = load double, ptr %656, align 8, !tbaa !7 + %658 = call double @llvm.fmuladd.f64(double %643, double %657, double %654) + store double %658, ptr %650, align 8, !tbaa !7 + %659 = load double, ptr %656, align 8, !tbaa !7 + %660 = load double, ptr %652, align 8, !tbaa !7 + %661 = fmul double %660, %646 + %662 = call double @llvm.fmuladd.f64(double %645, double %659, double %661) + %663 = getelementptr double, ptr %575, i64 %655 + store double %662, ptr %663, align 8, !tbaa !7 + %664 = add nuw nsw i64 %649, 1 + %665 = icmp eq i64 %664, %559 + br i1 %665, label %.loopexit103, label %.ph102.lver.orig, !llvm.loop !29 + +.ph102: ; preds = %.lver.check101 + %load_initial108 = load double, ptr %scevgep107, align 8 + br label %666 + +666: ; preds = %666, %.ph102 + %store_forwarded109 = phi double [ %load_initial108, %.ph102 ], [ %679, %666 ] + %667 = phi i64 [ 1, %.ph102 ], [ %681, %666 ] + %668 = getelementptr double, ptr %647, i64 %667 + %669 = getelementptr double, ptr %648, i64 %667 + %670 = load double, ptr %669, align 8, !tbaa !7 + %671 = call double @llvm.fmuladd.f64(double %645, double %670, double %store_forwarded109) + %672 = mul nuw nsw i64 %667, %541 + %673 = getelementptr double, ptr %578, i64 %672 + %674 = load double, ptr %673, align 8, !tbaa !7 + %675 = call double @llvm.fmuladd.f64(double %643, double %674, double %671) + store double %675, ptr %668, align 8, !tbaa !7 + %676 = load double, ptr %673, align 8, !tbaa !7 + %677 = load double, ptr %669, align 8, !tbaa !7 + %678 = fmul double %677, %646 + %679 = call double @llvm.fmuladd.f64(double %645, double %676, double %678) + %680 = getelementptr double, ptr %575, i64 %672 + store double %679, ptr %680, align 8, !tbaa !7 + %681 = add nuw nsw i64 %667, 1 + %682 = icmp eq i64 %681, %559 + br i1 %682, label %.loopexit103, label %666, !llvm.loop !29 + +.loopexit103: ; preds = %.ph102.lver.orig, %666 + %683 = load double, ptr %6, align 8, !tbaa !7 + %684 = mul nsw i32 %35, %566 + %685 = sext i32 %684 to i64 + %686 = getelementptr double, ptr %575, i64 %685 + %687 = load double, ptr %686, align 8, !tbaa !7 + %688 = fadd double %683, %687 + store double %688, ptr %686, align 8, !tbaa !7 + br label %689 + +689: ; preds = %.loopexit103, %.loopexit113 + store i32 %566, ptr %17, align 4, !tbaa !3 + store i32 %566, ptr %18, align 4, !tbaa !3 + %690 = getelementptr double, ptr %546, i64 %572 + %691 = call double @dasum_(ptr noundef nonnull %17, ptr noundef %690, ptr noundef nonnull @c__1) #6 + %692 = getelementptr double, ptr %547, i64 %577 + %693 = call double @dasum_(ptr noundef nonnull %18, ptr noundef %692, ptr noundef nonnull %10) #6 + %694 = fadd double %691, %693 + %695 = getelementptr inbounds double, ptr %39, i64 %559 + store double %694, ptr %695, align 8, !tbaa !7 + %696 = icmp sgt i64 %559, 2 + %indvar.next106 = add i64 %indvar105, 1 + br i1 %696, label %558, label %.thread, !llvm.loop !30 + +.thread: ; preds = %689, %531 + %697 = load double, ptr %9, align 8, !tbaa !7 + %698 = fcmp oeq double %697, 0.000000e+00 + br i1 %698, label %699, label %707 + +699: ; preds = %.thread + %700 = sext i32 %35 to i64 + %701 = getelementptr double, ptr %38, i64 %700 + %702 = getelementptr i8, ptr %701, i64 16 + %703 = load double, ptr %702, align 8, !tbaa !7 + %704 = fcmp oeq double %703, 0.000000e+00 + br i1 %704, label %705, label %707 + +705: ; preds = %699 + %706 = load double, ptr %12, align 8, !tbaa !7 + store double %706, ptr %9, align 8, !tbaa !7 + br label %707 + +707: ; preds = %705, %699, %.thread store double 0.000000e+00, ptr %11, align 8, !tbaa !7 - %633 = load i32, ptr %2, align 4, !tbaa !3 - br label %634 - -634: ; preds = %632, %485 - %635 = phi i32 [ %633, %632 ], [ %.pr, %485 ] - %636 = phi i32 [ 1, %632 ], [ %.pr, %485 ] - %637 = phi i32 [ %633, %632 ], [ 1, %485 ] - %638 = phi i32 [ 1, %632 ], [ -1, %485 ] - store i32 %635, ptr %17, align 4, !tbaa !3 - %639 = icmp slt i32 %635, 1 - br i1 %639, label %.loopexit33, label %640 - -640: ; preds = %634 - %641 = fadd double %42, 1.000000e+00 - %642 = sext i32 %35 to i64 - %643 = icmp sge i32 %636, %637 - %644 = icmp sle i32 %636, %637 - %645 = select i1 %322, i1 %644, i1 %643 - %646 = getelementptr i8, ptr %38, i64 8 - br label %647 - -647: ; preds = %.loopexit30, %640 - %648 = phi i32 [ 1, %640 ], [ %843, %.loopexit30 ] - %649 = load double, ptr %14, align 8, !tbaa !7 - store i32 %637, ptr %18, align 4, !tbaa !3 - store i32 %638, ptr %19, align 4, !tbaa !3 - br i1 %645, label %.preheader, label %.loopexit31 - -.preheader: ; preds = %647, %805 - %650 = phi double [ %806, %805 ], [ 1.000000e+00, %647 ] - %651 = phi double [ %808, %805 ], [ %649, %647 ] - %652 = phi i32 [ %810, %805 ], [ %636, %647 ] - %653 = phi double [ %807, %805 ], [ 1.000000e+00, %647 ] - %654 = sext i32 %652 to i64 - %655 = getelementptr inbounds double, ptr %39, i64 %654 - %656 = load double, ptr %655, align 8, !tbaa !7 - %657 = fcmp ogt double %656, %651 - br i1 %657, label %658, label %662 - -658: ; preds = %.preheader - %659 = fdiv double 1.000000e+00, %653 - store double %659, ptr %28, align 8, !tbaa !7 + %708 = load i32, ptr %2, align 4, !tbaa !3 + br label %709 + +709: ; preds = %707, %528 + %710 = phi i32 [ %708, %707 ], [ %.pr, %528 ] + %711 = phi i32 [ 1, %707 ], [ %.pr, %528 ] + %712 = phi i32 [ %708, %707 ], [ 1, %528 ] + %713 = phi i32 [ 1, %707 ], [ -1, %528 ] + store i32 %710, ptr %17, align 4, !tbaa !3 + %714 = icmp slt i32 %710, 1 + br i1 %714, label %.loopexit33, label %715 + +715: ; preds = %709 + %716 = fadd double %42, 1.000000e+00 + %717 = sext i32 %35 to i64 + %718 = icmp sge i32 %711, %712 + %719 = icmp sle i32 %711, %712 + %720 = select i1 %339, i1 %719, i1 %718 + %721 = getelementptr i8, ptr %38, i64 8 + br label %722 + +722: ; preds = %.loopexit30, %715 + %723 = phi i32 [ 1, %715 ], [ %918, %.loopexit30 ] + %724 = load double, ptr %14, align 8, !tbaa !7 + store i32 %712, ptr %18, align 4, !tbaa !3 + store i32 %713, ptr %19, align 4, !tbaa !3 + br i1 %720, label %.preheader, label %.loopexit31 + +.preheader: ; preds = %722, %880 + %725 = phi double [ %881, %880 ], [ 1.000000e+00, %722 ] + %726 = phi double [ %883, %880 ], [ %724, %722 ] + %727 = phi i32 [ %885, %880 ], [ %711, %722 ] + %728 = phi double [ %882, %880 ], [ 1.000000e+00, %722 ] + %729 = sext i32 %727 to i64 + %730 = getelementptr inbounds double, ptr %39, i64 %729 + %731 = load double, ptr %730, align 8, !tbaa !7 + %732 = fcmp ogt double %731, %726 + br i1 %732, label %733, label %737 + +733: ; preds = %.preheader + %734 = fdiv double 1.000000e+00, %728 + store double %734, ptr %28, align 8, !tbaa !7 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef %7, ptr noundef nonnull @c__1) #6 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef %8, ptr noundef nonnull @c__1) #6 - %660 = load double, ptr %28, align 8, !tbaa !7 - %661 = fmul double %660, %650 - br label %662 - -662: ; preds = %658, %.preheader - %663 = phi double [ %661, %658 ], [ %650, %.preheader ] - %664 = phi double [ 1.000000e+00, %658 ], [ %653, %.preheader ] - %665 = getelementptr inbounds double, ptr %33, i64 %654 - %666 = load double, ptr %665, align 8, !tbaa !7 - store double %666, ptr %26, align 8, !tbaa !7 - %667 = getelementptr inbounds double, ptr %34, i64 %654 - %668 = load double, ptr %667, align 8, !tbaa !7 - store double %668, ptr %25, align 8, !tbaa !7 - %669 = load i32, ptr %0, align 4, !tbaa !3 - %670 = icmp eq i32 %669, 0 - br i1 %670, label %671, label %679 - -671: ; preds = %662 - %672 = icmp sgt i32 %652, 1 - br i1 %672, label %673, label %734 - -673: ; preds = %671 - %674 = mul nsw i32 %652, %35 - %675 = sext i32 %674 to i64 - %676 = zext nneg i32 %652 to i64 - %677 = getelementptr double, ptr %38, i64 %675 - %678 = getelementptr double, ptr %646, i64 %676 - br label %711 - -679: ; preds = %662 - %680 = load i32, ptr %2, align 4, !tbaa !3 - %681 = icmp slt i32 %652, %680 - br i1 %681, label %682, label %734 - -682: ; preds = %679 - %683 = mul nsw i32 %652, %35 - %684 = add nsw i64 %654, 1 - %685 = sext i32 %683 to i64 - %686 = add i32 %680, 1 - %687 = getelementptr double, ptr %38, i64 %654 - %688 = getelementptr double, ptr %38, i64 %685 - br label %689 - -689: ; preds = %689, %682 - %690 = phi i64 [ %684, %682 ], [ %700, %689 ] - %691 = phi double [ %666, %682 ], [ %705, %689 ] - %692 = phi double [ %668, %682 ], [ %708, %689 ] - %693 = mul nsw i64 %690, %642 - %694 = getelementptr double, ptr %687, i64 %693 - %695 = load double, ptr %694, align 8, !tbaa !7 - %696 = getelementptr inbounds double, ptr %33, i64 %690 - %697 = load double, ptr %696, align 8, !tbaa !7 - %698 = fneg double %695 - %699 = call double @llvm.fmuladd.f64(double %698, double %697, double %691) - %700 = add nsw i64 %690, 1 - %701 = getelementptr double, ptr %688, i64 %700 - %702 = load double, ptr %701, align 8, !tbaa !7 - %703 = getelementptr inbounds double, ptr %34, i64 %690 - %704 = load double, ptr %703, align 8, !tbaa !7 - %705 = call double @llvm.fmuladd.f64(double %702, double %704, double %699) - %706 = call double @llvm.fmuladd.f64(double %698, double %704, double %692) - %707 = fneg double %702 - %708 = call double @llvm.fmuladd.f64(double %707, double %697, double %706) - %709 = trunc i64 %700 to i32 - %710 = icmp eq i32 %686, %709 - br i1 %710, label %733, label %689, !llvm.loop !31 - -711: ; preds = %711, %673 - %712 = phi i64 [ 1, %673 ], [ %730, %711 ] - %713 = phi double [ %666, %673 ], [ %726, %711 ] - %714 = phi double [ %668, %673 ], [ %729, %711 ] - %715 = getelementptr double, ptr %677, i64 %712 - %716 = load double, ptr %715, align 8, !tbaa !7 - %717 = getelementptr inbounds double, ptr %33, i64 %712 - %718 = load double, ptr %717, align 8, !tbaa !7 - %719 = fneg double %716 - %720 = call double @llvm.fmuladd.f64(double %719, double %718, double %713) - %721 = mul nsw i64 %712, %642 - %722 = getelementptr double, ptr %678, i64 %721 - %723 = load double, ptr %722, align 8, !tbaa !7 - %724 = getelementptr inbounds double, ptr %34, i64 %712 - %725 = load double, ptr %724, align 8, !tbaa !7 - %726 = call double @llvm.fmuladd.f64(double %723, double %725, double %720) - %727 = call double @llvm.fmuladd.f64(double %719, double %725, double %714) - %728 = fneg double %723 - %729 = call double @llvm.fmuladd.f64(double %728, double %718, double %727) - %730 = add nuw nsw i64 %712, 1 - %731 = icmp eq i64 %730, %676 - br i1 %731, label %732, label %711, !llvm.loop !32 - -732: ; preds = %711 - store double %726, ptr %26, align 8, !tbaa !7 - store double %729, ptr %25, align 8, !tbaa !7 - br label %734 - -733: ; preds = %689 - store double %705, ptr %26, align 8, !tbaa !7 - store double %708, ptr %25, align 8, !tbaa !7 - br label %734 - -734: ; preds = %733, %732, %679, %671 - %735 = phi double [ %708, %733 ], [ %729, %732 ], [ %668, %679 ], [ %668, %671 ] - %736 = phi double [ %705, %733 ], [ %726, %732 ], [ %666, %679 ], [ %666, %671 ] - %737 = mul nsw i32 %652, %35 - %738 = add nsw i32 %737, %652 - %739 = sext i32 %738 to i64 - %740 = getelementptr inbounds double, ptr %38, i64 %739 + %735 = load double, ptr %28, align 8, !tbaa !7 + %736 = fmul double %735, %725 + br label %737 + +737: ; preds = %733, %.preheader + %738 = phi double [ %736, %733 ], [ %725, %.preheader ] + %739 = phi double [ 1.000000e+00, %733 ], [ %728, %.preheader ] + %740 = getelementptr inbounds double, ptr %33, i64 %729 %741 = load double, ptr %740, align 8, !tbaa !7 - store double %741, ptr %20, align 8, !tbaa !7 - %742 = fcmp oge double %741, 0.000000e+00 - %743 = fneg double %741 - %744 = select i1 %742, double %741, double %743 - %745 = add nsw i32 %652, 1 - %746 = add nsw i32 %745, %737 - %747 = sext i32 %746 to i64 - %748 = getelementptr inbounds double, ptr %38, i64 %747 - %749 = load double, ptr %748, align 8, !tbaa !7 - store double %749, ptr %21, align 8, !tbaa !7 - %750 = fcmp oge double %749, 0.000000e+00 - %751 = fneg double %749 - %752 = select i1 %750, double %749, double %751 - %753 = fadd double %744, %752 - %754 = load double, ptr %13, align 8, !tbaa !7 - %755 = fcmp ogt double %753, %754 - br i1 %755, label %756, label %792 - -756: ; preds = %734 - %757 = fcmp olt double %753, 1.000000e+00 - br i1 %757, label %758, label %776 - -758: ; preds = %756 - %759 = fcmp oge double %736, 0.000000e+00 - %760 = fneg double %736 - %761 = select i1 %759, double %736, double %760 - %762 = fcmp oge double %735, 0.000000e+00 - %763 = fneg double %735 - %764 = select i1 %762, double %735, double %763 - %765 = fadd double %761, %764 - %766 = load double, ptr %14, align 8, !tbaa !7 - %767 = fmul double %753, %766 - %768 = fcmp ogt double %765, %767 - br i1 %768, label %769, label %776 - -769: ; preds = %758 - %770 = fdiv double 1.000000e+00, %765 - store double %770, ptr %28, align 8, !tbaa !7 + store double %741, ptr %26, align 8, !tbaa !7 + %742 = getelementptr inbounds double, ptr %34, i64 %729 + %743 = load double, ptr %742, align 8, !tbaa !7 + store double %743, ptr %25, align 8, !tbaa !7 + %744 = load i32, ptr %0, align 4, !tbaa !3 + %745 = icmp eq i32 %744, 0 + br i1 %745, label %746, label %754 + +746: ; preds = %737 + %747 = icmp sgt i32 %727, 1 + br i1 %747, label %748, label %809 + +748: ; preds = %746 + %749 = mul nsw i32 %727, %35 + %750 = sext i32 %749 to i64 + %751 = zext nneg i32 %727 to i64 + %752 = getelementptr double, ptr %38, i64 %750 + %753 = getelementptr double, ptr %721, i64 %751 + br label %786 + +754: ; preds = %737 + %755 = load i32, ptr %2, align 4, !tbaa !3 + %756 = icmp slt i32 %727, %755 + br i1 %756, label %757, label %809 + +757: ; preds = %754 + %758 = mul nsw i32 %727, %35 + %759 = add nsw i64 %729, 1 + %760 = sext i32 %758 to i64 + %761 = add i32 %755, 1 + %762 = getelementptr double, ptr %38, i64 %729 + %763 = getelementptr double, ptr %38, i64 %760 + br label %764 + +764: ; preds = %764, %757 + %765 = phi i64 [ %759, %757 ], [ %775, %764 ] + %766 = phi double [ %741, %757 ], [ %780, %764 ] + %767 = phi double [ %743, %757 ], [ %783, %764 ] + %768 = mul nsw i64 %765, %717 + %769 = getelementptr double, ptr %762, i64 %768 + %770 = load double, ptr %769, align 8, !tbaa !7 + %771 = getelementptr inbounds double, ptr %33, i64 %765 + %772 = load double, ptr %771, align 8, !tbaa !7 + %773 = fneg double %770 + %774 = call double @llvm.fmuladd.f64(double %773, double %772, double %766) + %775 = add nsw i64 %765, 1 + %776 = getelementptr double, ptr %763, i64 %775 + %777 = load double, ptr %776, align 8, !tbaa !7 + %778 = getelementptr inbounds double, ptr %34, i64 %765 + %779 = load double, ptr %778, align 8, !tbaa !7 + %780 = call double @llvm.fmuladd.f64(double %777, double %779, double %774) + %781 = call double @llvm.fmuladd.f64(double %773, double %779, double %767) + %782 = fneg double %777 + %783 = call double @llvm.fmuladd.f64(double %782, double %772, double %781) + %784 = trunc i64 %775 to i32 + %785 = icmp eq i32 %761, %784 + br i1 %785, label %808, label %764, !llvm.loop !31 + +786: ; preds = %786, %748 + %787 = phi i64 [ 1, %748 ], [ %805, %786 ] + %788 = phi double [ %741, %748 ], [ %801, %786 ] + %789 = phi double [ %743, %748 ], [ %804, %786 ] + %790 = getelementptr double, ptr %752, i64 %787 + %791 = load double, ptr %790, align 8, !tbaa !7 + %792 = getelementptr inbounds double, ptr %33, i64 %787 + %793 = load double, ptr %792, align 8, !tbaa !7 + %794 = fneg double %791 + %795 = call double @llvm.fmuladd.f64(double %794, double %793, double %788) + %796 = mul nsw i64 %787, %717 + %797 = getelementptr double, ptr %753, i64 %796 + %798 = load double, ptr %797, align 8, !tbaa !7 + %799 = getelementptr inbounds double, ptr %34, i64 %787 + %800 = load double, ptr %799, align 8, !tbaa !7 + %801 = call double @llvm.fmuladd.f64(double %798, double %800, double %795) + %802 = call double @llvm.fmuladd.f64(double %794, double %800, double %789) + %803 = fneg double %798 + %804 = call double @llvm.fmuladd.f64(double %803, double %793, double %802) + %805 = add nuw nsw i64 %787, 1 + %806 = icmp eq i64 %805, %751 + br i1 %806, label %807, label %786, !llvm.loop !32 + +807: ; preds = %786 + store double %801, ptr %26, align 8, !tbaa !7 + store double %804, ptr %25, align 8, !tbaa !7 + br label %809 + +808: ; preds = %764 + store double %780, ptr %26, align 8, !tbaa !7 + store double %783, ptr %25, align 8, !tbaa !7 + br label %809 + +809: ; preds = %808, %807, %754, %746 + %810 = phi double [ %783, %808 ], [ %804, %807 ], [ %743, %754 ], [ %743, %746 ] + %811 = phi double [ %780, %808 ], [ %801, %807 ], [ %741, %754 ], [ %741, %746 ] + %812 = mul nsw i32 %727, %35 + %813 = add nsw i32 %812, %727 + %814 = sext i32 %813 to i64 + %815 = getelementptr inbounds double, ptr %38, i64 %814 + %816 = load double, ptr %815, align 8, !tbaa !7 + store double %816, ptr %20, align 8, !tbaa !7 + %817 = fcmp oge double %816, 0.000000e+00 + %818 = fneg double %816 + %819 = select i1 %817, double %816, double %818 + %820 = add nsw i32 %727, 1 + %821 = add nsw i32 %820, %812 + %822 = sext i32 %821 to i64 + %823 = getelementptr inbounds double, ptr %38, i64 %822 + %824 = load double, ptr %823, align 8, !tbaa !7 + store double %824, ptr %21, align 8, !tbaa !7 + %825 = fcmp oge double %824, 0.000000e+00 + %826 = fneg double %824 + %827 = select i1 %825, double %824, double %826 + %828 = fadd double %819, %827 + %829 = load double, ptr %13, align 8, !tbaa !7 + %830 = fcmp ogt double %828, %829 + br i1 %830, label %831, label %867 + +831: ; preds = %809 + %832 = fcmp olt double %828, 1.000000e+00 + br i1 %832, label %833, label %851 + +833: ; preds = %831 + %834 = fcmp oge double %811, 0.000000e+00 + %835 = fneg double %811 + %836 = select i1 %834, double %811, double %835 + %837 = fcmp oge double %810, 0.000000e+00 + %838 = fneg double %810 + %839 = select i1 %837, double %810, double %838 + %840 = fadd double %836, %839 + %841 = load double, ptr %14, align 8, !tbaa !7 + %842 = fmul double %828, %841 + %843 = fcmp ogt double %840, %842 + br i1 %843, label %844, label %851 + +844: ; preds = %833 + %845 = fdiv double 1.000000e+00, %840 + store double %845, ptr %28, align 8, !tbaa !7 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %7, ptr noundef nonnull @c__1) #6 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %28, ptr noundef nonnull %8, ptr noundef nonnull @c__1) #6 - %771 = load double, ptr %665, align 8, !tbaa !7 - store double %771, ptr %26, align 8, !tbaa !7 - %772 = load double, ptr %667, align 8, !tbaa !7 - store double %772, ptr %25, align 8, !tbaa !7 - %773 = load double, ptr %28, align 8, !tbaa !7 - %774 = fmul double %773, %663 - %775 = fmul double %664, %773 - br label %776 - -776: ; preds = %769, %758, %756 - %777 = phi double [ %774, %769 ], [ %663, %758 ], [ %663, %756 ] - %778 = phi double [ %775, %769 ], [ %664, %758 ], [ %664, %756 ] - call void @dladiv_(ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef nonnull %740, ptr noundef nonnull %748, ptr noundef nonnull %665, ptr noundef nonnull %667) #6 - %779 = load double, ptr %665, align 8, !tbaa !7 - store double %779, ptr %20, align 8, !tbaa !7 - %780 = fcmp oge double %779, 0.000000e+00 - %781 = fneg double %779 - %782 = select i1 %780, double %779, double %781 - %783 = load double, ptr %667, align 8, !tbaa !7 - store double %783, ptr %21, align 8, !tbaa !7 - %784 = fcmp oge double %783, 0.000000e+00 - %785 = fneg double %783 - %786 = select i1 %784, double %783, double %785 - %787 = fadd double %782, %786 - %788 = fcmp oge double %787, %778 - %789 = select i1 %788, double %787, double %778 - %790 = load double, ptr %14, align 8, !tbaa !7 - %791 = fdiv double %790, %789 - br label %805 - -792: ; preds = %734 - %793 = load i32, ptr %2, align 4, !tbaa !3 - %794 = icmp slt i32 %793, 1 - br i1 %794, label %.loopexit29, label %795 - -795: ; preds = %792 - %796 = add nuw i32 %793, 1 - %797 = zext i32 %796 to i64 - br label %798 - -798: ; preds = %798, %795 - %799 = phi i64 [ 1, %795 ], [ %802, %798 ] - %800 = getelementptr inbounds double, ptr %33, i64 %799 - store double 0.000000e+00, ptr %800, align 8, !tbaa !7 - %801 = getelementptr inbounds double, ptr %34, i64 %799 - store double 0.000000e+00, ptr %801, align 8, !tbaa !7 - %802 = add nuw nsw i64 %799, 1 - %803 = icmp eq i64 %802, %797 - br i1 %803, label %.loopexit29, label %798, !llvm.loop !33 - -.loopexit29: ; preds = %798, %792 - store double 1.000000e+00, ptr %665, align 8, !tbaa !7 - store double 1.000000e+00, ptr %667, align 8, !tbaa !7 - %804 = load double, ptr %14, align 8, !tbaa !7 - br label %805 - -805: ; preds = %.loopexit29, %776 - %806 = phi double [ %777, %776 ], [ 0.000000e+00, %.loopexit29 ] - %807 = phi double [ %789, %776 ], [ 1.000000e+00, %.loopexit29 ] - %808 = phi double [ %791, %776 ], [ %804, %.loopexit29 ] - %809 = load i32, ptr %19, align 4, !tbaa !3 - %810 = add nsw i32 %809, %652 - %811 = icmp slt i32 %809, 0 - %812 = load i32, ptr %18, align 4 - %813 = icmp sge i32 %810, %812 - %814 = icmp sle i32 %810, %812 - %815 = select i1 %811, i1 %813, i1 %814 - br i1 %815, label %.preheader, label %.loopexit31, !llvm.loop !34 - -.loopexit31: ; preds = %805, %647 - %816 = phi double [ 1.000000e+00, %647 ], [ %806, %805 ] - %817 = call double @dasum_(ptr noundef nonnull %2, ptr noundef %7, ptr noundef nonnull @c__1) #6 - %818 = call double @dasum_(ptr noundef nonnull %2, ptr noundef %8, ptr noundef nonnull @c__1) #6 - %819 = fadd double %817, %818 - %820 = fmul double %43, %816 - %821 = fcmp ult double %819, %820 - br i1 %821, label %822, label %.loopexit32 - -822: ; preds = %.loopexit31 - %823 = load double, ptr %12, align 8, !tbaa !7 - %824 = fdiv double %823, %641 - store double %823, ptr %7, align 8, !tbaa !7 + %846 = load double, ptr %740, align 8, !tbaa !7 + store double %846, ptr %26, align 8, !tbaa !7 + %847 = load double, ptr %742, align 8, !tbaa !7 + store double %847, ptr %25, align 8, !tbaa !7 + %848 = load double, ptr %28, align 8, !tbaa !7 + %849 = fmul double %848, %738 + %850 = fmul double %739, %848 + br label %851 + +851: ; preds = %844, %833, %831 + %852 = phi double [ %849, %844 ], [ %738, %833 ], [ %738, %831 ] + %853 = phi double [ %850, %844 ], [ %739, %833 ], [ %739, %831 ] + call void @dladiv_(ptr noundef nonnull %26, ptr noundef nonnull %25, ptr noundef nonnull %815, ptr noundef nonnull %823, ptr noundef nonnull %740, ptr noundef nonnull %742) #6 + %854 = load double, ptr %740, align 8, !tbaa !7 + store double %854, ptr %20, align 8, !tbaa !7 + %855 = fcmp oge double %854, 0.000000e+00 + %856 = fneg double %854 + %857 = select i1 %855, double %854, double %856 + %858 = load double, ptr %742, align 8, !tbaa !7 + store double %858, ptr %21, align 8, !tbaa !7 + %859 = fcmp oge double %858, 0.000000e+00 + %860 = fneg double %858 + %861 = select i1 %859, double %858, double %860 + %862 = fadd double %857, %861 + %863 = fcmp oge double %862, %853 + %864 = select i1 %863, double %862, double %853 + %865 = load double, ptr %14, align 8, !tbaa !7 + %866 = fdiv double %865, %864 + br label %880 + +867: ; preds = %809 + %868 = load i32, ptr %2, align 4, !tbaa !3 + %869 = icmp slt i32 %868, 1 + br i1 %869, label %.loopexit29, label %870 + +870: ; preds = %867 + %871 = add nuw i32 %868, 1 + %872 = zext i32 %871 to i64 + br label %873 + +873: ; preds = %873, %870 + %874 = phi i64 [ 1, %870 ], [ %877, %873 ] + %875 = getelementptr inbounds double, ptr %33, i64 %874 + store double 0.000000e+00, ptr %875, align 8, !tbaa !7 + %876 = getelementptr inbounds double, ptr %34, i64 %874 + store double 0.000000e+00, ptr %876, align 8, !tbaa !7 + %877 = add nuw nsw i64 %874, 1 + %878 = icmp eq i64 %877, %872 + br i1 %878, label %.loopexit29, label %873, !llvm.loop !33 + +.loopexit29: ; preds = %873, %867 + store double 1.000000e+00, ptr %740, align 8, !tbaa !7 + store double 1.000000e+00, ptr %742, align 8, !tbaa !7 + %879 = load double, ptr %14, align 8, !tbaa !7 + br label %880 + +880: ; preds = %.loopexit29, %851 + %881 = phi double [ %852, %851 ], [ 0.000000e+00, %.loopexit29 ] + %882 = phi double [ %864, %851 ], [ 1.000000e+00, %.loopexit29 ] + %883 = phi double [ %866, %851 ], [ %879, %.loopexit29 ] + %884 = load i32, ptr %19, align 4, !tbaa !3 + %885 = add nsw i32 %884, %727 + %886 = icmp slt i32 %884, 0 + %887 = load i32, ptr %18, align 4 + %888 = icmp sge i32 %885, %887 + %889 = icmp sle i32 %885, %887 + %890 = select i1 %886, i1 %888, i1 %889 + br i1 %890, label %.preheader, label %.loopexit31, !llvm.loop !34 + +.loopexit31: ; preds = %880, %722 + %891 = phi double [ 1.000000e+00, %722 ], [ %881, %880 ] + %892 = call double @dasum_(ptr noundef nonnull %2, ptr noundef %7, ptr noundef nonnull @c__1) #6 + %893 = call double @dasum_(ptr noundef nonnull %2, ptr noundef %8, ptr noundef nonnull @c__1) #6 + %894 = fadd double %892, %893 + %895 = fmul double %43, %891 + %896 = fcmp ult double %894, %895 + br i1 %896, label %897, label %.loopexit32 + +897: ; preds = %.loopexit31 + %898 = load double, ptr %12, align 8, !tbaa !7 + %899 = fdiv double %898, %716 + store double %898, ptr %7, align 8, !tbaa !7 store double 0.000000e+00, ptr %8, align 8, !tbaa !7 - %825 = load i32, ptr %2, align 4, !tbaa !3 - store i32 %825, ptr %19, align 4, !tbaa !3 - %826 = icmp slt i32 %825, 2 - br i1 %826, label %.loopexit30, label %827 - -827: ; preds = %822 - %828 = add nuw i32 %825, 1 - %829 = zext i32 %828 to i64 - br label %830 - -830: ; preds = %830, %827 - %831 = phi i64 [ 2, %827 ], [ %834, %830 ] - %832 = getelementptr inbounds double, ptr %33, i64 %831 - store double %824, ptr %832, align 8, !tbaa !7 - %833 = getelementptr inbounds double, ptr %34, i64 %831 - store double 0.000000e+00, ptr %833, align 8, !tbaa !7 - %834 = add nuw nsw i64 %831, 1 - %835 = icmp eq i64 %834, %829 - br i1 %835, label %.loopexit30, label %830, !llvm.loop !35 - -.loopexit30: ; preds = %830, %822 - %836 = load double, ptr %12, align 8, !tbaa !7 - %837 = sub nsw i32 %825, %648 - %838 = sext i32 %837 to i64 - %839 = getelementptr double, ptr %7, i64 %838 - %840 = load double, ptr %839, align 8, !tbaa !7 - %841 = fneg double %836 - %842 = call double @llvm.fmuladd.f64(double %841, double %42, double %840) - store double %842, ptr %839, align 8, !tbaa !7 - %843 = add nuw nsw i32 %648, 1 - %844 = load i32, ptr %17, align 4, !tbaa !3 - %845 = icmp slt i32 %648, %844 - br i1 %845, label %647, label %.loopexit33, !llvm.loop !36 - -.loopexit33: ; preds = %.loopexit30, %634 + %900 = load i32, ptr %2, align 4, !tbaa !3 + store i32 %900, ptr %19, align 4, !tbaa !3 + %901 = icmp slt i32 %900, 2 + br i1 %901, label %.loopexit30, label %902 + +902: ; preds = %897 + %903 = add nuw i32 %900, 1 + %904 = zext i32 %903 to i64 + br label %905 + +905: ; preds = %905, %902 + %906 = phi i64 [ 2, %902 ], [ %909, %905 ] + %907 = getelementptr inbounds double, ptr %33, i64 %906 + store double %899, ptr %907, align 8, !tbaa !7 + %908 = getelementptr inbounds double, ptr %34, i64 %906 + store double 0.000000e+00, ptr %908, align 8, !tbaa !7 + %909 = add nuw nsw i64 %906, 1 + %910 = icmp eq i64 %909, %904 + br i1 %910, label %.loopexit30, label %905, !llvm.loop !35 + +.loopexit30: ; preds = %905, %897 + %911 = load double, ptr %12, align 8, !tbaa !7 + %912 = sub nsw i32 %900, %723 + %913 = sext i32 %912 to i64 + %914 = getelementptr double, ptr %7, i64 %913 + %915 = load double, ptr %914, align 8, !tbaa !7 + %916 = fneg double %911 + %917 = call double @llvm.fmuladd.f64(double %916, double %42, double %915) + store double %917, ptr %914, align 8, !tbaa !7 + %918 = add nuw nsw i32 %723, 1 + %919 = load i32, ptr %17, align 4, !tbaa !3 + %920 = icmp slt i32 %723, %919 + br i1 %920, label %722, label %.loopexit33, !llvm.loop !36 + +.loopexit33: ; preds = %.loopexit30, %709 store i32 1, ptr %15, align 4, !tbaa !3 br label %.loopexit32 .loopexit32: ; preds = %.loopexit31, %.loopexit33 - %846 = load i32, ptr %2, align 4, !tbaa !3 - store i32 %846, ptr %17, align 4, !tbaa !3 - %847 = icmp slt i32 %846, 1 - br i1 %847, label %870, label %848 - -848: ; preds = %.loopexit32 - %849 = add nuw i32 %846, 1 - %850 = zext i32 %849 to i64 - br label %851 - -851: ; preds = %851, %848 - %852 = phi i64 [ 1, %848 ], [ %867, %851 ] - %853 = phi double [ 0.000000e+00, %848 ], [ %866, %851 ] - %854 = getelementptr inbounds double, ptr %33, i64 %852 - %855 = load double, ptr %854, align 8, !tbaa !7 - %856 = fcmp oge double %855, 0.000000e+00 - %857 = fneg double %855 - %858 = select i1 %856, double %855, double %857 - %859 = getelementptr inbounds double, ptr %34, i64 %852 - %860 = load double, ptr %859, align 8, !tbaa !7 - %861 = fcmp oge double %860, 0.000000e+00 - %862 = fneg double %860 - %863 = select i1 %861, double %860, double %862 - %864 = fadd double %858, %863 - %865 = fcmp oge double %853, %864 - %866 = select i1 %865, double %853, double %864 - %867 = add nuw nsw i64 %852, 1 - %868 = icmp eq i64 %867, %850 - br i1 %868, label %869, label %851, !llvm.loop !37 - -869: ; preds = %851 - store double %860, ptr %21, align 8, !tbaa !7 - br label %870 - -870: ; preds = %869, %.loopexit32 - %871 = phi double [ %866, %869 ], [ 0.000000e+00, %.loopexit32 ] - %872 = fdiv double 1.000000e+00, %871 - store double %872, ptr %20, align 8, !tbaa !7 + %921 = load i32, ptr %2, align 4, !tbaa !3 + store i32 %921, ptr %17, align 4, !tbaa !3 + %922 = icmp slt i32 %921, 1 + br i1 %922, label %945, label %923 + +923: ; preds = %.loopexit32 + %924 = add nuw i32 %921, 1 + %925 = zext i32 %924 to i64 + br label %926 + +926: ; preds = %926, %923 + %927 = phi i64 [ 1, %923 ], [ %942, %926 ] + %928 = phi double [ 0.000000e+00, %923 ], [ %941, %926 ] + %929 = getelementptr inbounds double, ptr %33, i64 %927 + %930 = load double, ptr %929, align 8, !tbaa !7 + %931 = fcmp oge double %930, 0.000000e+00 + %932 = fneg double %930 + %933 = select i1 %931, double %930, double %932 + %934 = getelementptr inbounds double, ptr %34, i64 %927 + %935 = load double, ptr %934, align 8, !tbaa !7 + %936 = fcmp oge double %935, 0.000000e+00 + %937 = fneg double %935 + %938 = select i1 %936, double %935, double %937 + %939 = fadd double %933, %938 + %940 = fcmp oge double %928, %939 + %941 = select i1 %940, double %928, double %939 + %942 = add nuw nsw i64 %927, 1 + %943 = icmp eq i64 %942, %925 + br i1 %943, label %944, label %926, !llvm.loop !37 + +944: ; preds = %926 + store double %935, ptr %21, align 8, !tbaa !7 + br label %945 + +945: ; preds = %944, %.loopexit32 + %946 = phi double [ %941, %944 ], [ 0.000000e+00, %.loopexit32 ] + %947 = fdiv double 1.000000e+00, %946 + store double %947, ptr %20, align 8, !tbaa !7 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef %7, ptr noundef nonnull @c__1) #6 - store double %872, ptr %20, align 8, !tbaa !7 + store double %947, ptr %20, align 8, !tbaa !7 call void @dscal_(ptr noundef nonnull %2, ptr noundef nonnull %20, ptr noundef %8, ptr noundef nonnull @c__1) #6 - br label %873 + br label %948 -873: ; preds = %870, %.loopexit22 +948: ; preds = %945, %.loopexit22 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %28) #6 call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #6 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %26) #6 diff --git a/bench/openblas/optimized/dlahqr.c.ll b/bench/openblas/optimized/dlahqr.c.ll index 624bdfbdd64..4b4dc351774 100644 --- a/bench/openblas/optimized/dlahqr.c.ll +++ b/bench/openblas/optimized/dlahqr.c.ll @@ -147,13 +147,20 @@ define void @dlahqr_(ptr nocapture noundef readonly %0, ptr nocapture noundef re %104 = add nsw i64 %101, 1 %105 = getelementptr i8, ptr %27, i64 8 %106 = getelementptr i8, ptr %27, i64 16 - br i1 %103, label %.loopexit44, label %.split - -.split: ; preds = %97, %731 - %107 = phi i32 [ %733, %731 ], [ %95, %97 ] - %108 = phi i32 [ %732, %731 ], [ %94, %97 ] - %109 = phi i32 [ %141, %731 ], [ %90, %97 ] - %110 = phi i32 [ %142, %731 ], [ 1, %97 ] + br i1 %103, label %.loopexit44, label %.split.preheader + +.split.preheader: ; preds = %97 + %invariant.gep = getelementptr i8, ptr %5, i64 -8 + %invariant.gep127 = getelementptr i8, ptr %5, i64 -16 + %ident.check.not = icmp eq i32 %24, 1 + %ident.check101.not = icmp eq i32 %24, 1 + br label %.split + +.split: ; preds = %.split.preheader, %759 + %107 = phi i32 [ %761, %759 ], [ %95, %.split.preheader ] + %108 = phi i32 [ %760, %759 ], [ %94, %.split.preheader ] + %109 = phi i32 [ %141, %759 ], [ %90, %.split.preheader ] + %110 = phi i32 [ %142, %759 ], [ 1, %.split.preheader ] store i32 %93, ptr %15, align 4, !tbaa !3 %111 = add nsw i32 %108, -1 %112 = mul nsw i32 %111, %24 @@ -185,7 +192,7 @@ define void @dlahqr_(ptr nocapture noundef readonly %0, ptr nocapture noundef re br label %138 138: ; preds = %.loopexit40, %.split - %139 = phi i32 [ 0, %.split ], [ %679, %.loopexit40 ] + %139 = phi i32 [ 0, %.split ], [ %707, %.loopexit40 ] %140 = phi i32 [ %107, %.split ], [ %241, %.loopexit40 ] %141 = phi i32 [ %109, %.split ], [ %256, %.loopexit40 ] %142 = phi i32 [ %110, %.split ], [ %255, %.loopexit40 ] @@ -326,7 +333,7 @@ define void @dlahqr_(ptr nocapture noundef readonly %0, ptr nocapture noundef re 250: ; preds = %244, %.loopexit42 %251 = icmp slt i32 %241, %111 - br i1 %251, label %252, label %683 + br i1 %251, label %252, label %711 252: ; preds = %250 %253 = load i32, ptr %0, align 4, !tbaa !3 @@ -450,8 +457,8 @@ define void @dlahqr_(ptr nocapture noundef readonly %0, ptr nocapture noundef re %353 = fcmp oge <2 x double> %352, zeroinitializer %354 = fneg <2 x double> %352 %355 = select <2 x i1> %353, <2 x double> %352, <2 x double> %354 - %shift99 = shufflevector <2 x double> %355, <2 x double> poison, <2 x i32> - %356 = fcmp ugt <2 x double> %355, %shift99 + %shift108 = shufflevector <2 x double> %355, <2 x double> poison, <2 x i32> + %356 = fcmp ugt <2 x double> %355, %shift108 %357 = extractelement <2 x i1> %356, i64 0 %358 = select i1 %357, double %347, double %346 %359 = fmul double %320, %358 @@ -552,8 +559,8 @@ define void @dlahqr_(ptr nocapture noundef readonly %0, ptr nocapture noundef re %444 = fcmp oge <2 x double> %433, zeroinitializer %445 = fneg <2 x double> %433 %446 = select <2 x i1> %444, <2 x double> %433, <2 x double> %445 - %shift100 = shufflevector <2 x double> %446, <2 x double> poison, <2 x i32> - %447 = fadd <2 x double> %446, %shift100 + %shift109 = shufflevector <2 x double> %446, <2 x double> poison, <2 x i32> + %447 = fadd <2 x double> %446, %shift109 %448 = extractelement <2 x double> %447, i64 0 %449 = fmul double %448, %443 %450 = fcmp oge double %430, 0.000000e+00 @@ -592,387 +599,442 @@ define void @dlahqr_(ptr nocapture noundef readonly %0, ptr nocapture noundef re br label %478 478: ; preds = %.loopexit, %471 + %indvar = phi i64 [ %indvar.next, %.loopexit ], [ 0, %471 ] %indvars.iv = phi i32 [ %indvars.iv.next, %.loopexit ], [ %477, %471 ] - %479 = phi i64 [ %676, %.loopexit ], [ %474, %471 ] - %480 = call i32 @llvm.smin.i32(i32 %108, i32 %indvars.iv) - %481 = call i32 @llvm.smax.i32(i32 %480, i32 %255) - %smax = sext i32 %481 to i64 - %482 = trunc i64 %479 to i32 - %483 = sub nsw i64 %134, %479 - %484 = icmp sgt i64 %483, 1 - %485 = trunc i64 %483 to i32 - %486 = add i32 %485, 1 - %487 = select i1 %484, i32 3, i32 %486 - store i32 %487, ptr %20, align 4, !tbaa !3 - %488 = icmp sgt i64 %479, %474 - br i1 %488, label %489, label %504 - -489: ; preds = %478 - %490 = add nsw i32 %482, -1 - %491 = mul nsw i32 %490, %24 - %492 = sext i32 %491 to i64 - %493 = getelementptr double, ptr %27, i64 %479 - %494 = getelementptr double, ptr %493, i64 %492 - call void @dcopy_(ptr noundef nonnull %20, ptr noundef %494, ptr noundef nonnull @c__1, ptr noundef nonnull %16, ptr noundef nonnull @c__1) #6 + %479 = phi i64 [ %704, %.loopexit ], [ %474, %471 ] + %480 = add i64 %indvar, %474 + %481 = shl i64 %480, 4 + %gep = getelementptr i8, ptr %invariant.gep, i64 %481 + %482 = add i64 %indvar, %474 + %483 = shl i64 %482, 4 + %gep128 = getelementptr i8, ptr %invariant.gep127, i64 %483 + %484 = call i32 @llvm.smin.i32(i32 %108, i32 %indvars.iv) + %485 = call i32 @llvm.smax.i32(i32 %484, i32 %255) + %smax = sext i32 %485 to i64 + %486 = trunc i64 %479 to i32 + %487 = sub nsw i64 %134, %479 + %488 = icmp sgt i64 %487, 1 + %489 = trunc i64 %487 to i32 + %490 = add i32 %489, 1 + %491 = select i1 %488, i32 3, i32 %490 + store i32 %491, ptr %20, align 4, !tbaa !3 + %492 = icmp sgt i64 %479, %474 + br i1 %492, label %493, label %508 + +493: ; preds = %478 + %494 = add nsw i32 %486, -1 + %495 = mul nsw i32 %494, %24 + %496 = sext i32 %495 to i64 + %497 = getelementptr double, ptr %27, i64 %479 + %498 = getelementptr double, ptr %497, i64 %496 + call void @dcopy_(ptr noundef nonnull %20, ptr noundef %498, ptr noundef nonnull @c__1, ptr noundef nonnull %16, ptr noundef nonnull @c__1) #6 call void @dlarfg_(ptr noundef nonnull %20, ptr noundef nonnull %16, ptr noundef nonnull %99, ptr noundef nonnull @c__1, ptr noundef nonnull %17) #6 - %495 = load double, ptr %16, align 16, !tbaa !7 - %496 = add nsw i64 %479, -1 - %497 = mul nsw i64 %496, %101 - store double %495, ptr %494, align 8, !tbaa !7 - %498 = getelementptr double, ptr %105, i64 %479 - %499 = getelementptr double, ptr %498, i64 %497 - store double 0.000000e+00, ptr %499, align 8, !tbaa !7 - %500 = icmp slt i64 %479, %137 - br i1 %500, label %501, label %515 - -501: ; preds = %489 - %502 = getelementptr double, ptr %106, i64 %479 - %503 = getelementptr double, ptr %502, i64 %497 + %499 = load double, ptr %16, align 16, !tbaa !7 + %500 = add nsw i64 %479, -1 + %501 = mul nsw i64 %500, %101 + store double %499, ptr %498, align 8, !tbaa !7 + %502 = getelementptr double, ptr %105, i64 %479 + %503 = getelementptr double, ptr %502, i64 %501 store double 0.000000e+00, ptr %503, align 8, !tbaa !7 - br label %515 + %504 = icmp slt i64 %479, %137 + br i1 %504, label %505, label %519 + +505: ; preds = %493 + %506 = getelementptr double, ptr %106, i64 %479 + %507 = getelementptr double, ptr %506, i64 %501 + store double 0.000000e+00, ptr %507, align 8, !tbaa !7 + br label %519 -504: ; preds = %478 +508: ; preds = %478 call void @dlarfg_(ptr noundef nonnull %20, ptr noundef nonnull %16, ptr noundef nonnull %99, ptr noundef nonnull @c__1, ptr noundef nonnull %17) #6 - br i1 %472, label %505, label %515 - -505: ; preds = %504 - %506 = load double, ptr %17, align 8, !tbaa !7 - %507 = fsub double 1.000000e+00, %506 - %508 = add nsw i32 %482, -1 - %509 = mul nsw i32 %508, %24 - %510 = sext i32 %509 to i64 - %511 = getelementptr double, ptr %27, i64 %479 - %512 = getelementptr double, ptr %511, i64 %510 - %513 = load double, ptr %512, align 8, !tbaa !7 - %514 = fmul double %513, %507 - store double %514, ptr %512, align 8, !tbaa !7 - br label %515 - -515: ; preds = %505, %504, %501, %489 - %516 = load double, ptr %99, align 8, !tbaa !7 - %517 = load double, ptr %17, align 8, !tbaa !7 - %518 = fmul double %516, %517 - %519 = load i32, ptr %20, align 4, !tbaa !3 - switch i32 %519, label %.loopexit [ - i32 3, label %525 - i32 2, label %520 + br i1 %472, label %509, label %519 + +509: ; preds = %508 + %510 = load double, ptr %17, align 8, !tbaa !7 + %511 = fsub double 1.000000e+00, %510 + %512 = add nsw i32 %486, -1 + %513 = mul nsw i32 %512, %24 + %514 = sext i32 %513 to i64 + %515 = getelementptr double, ptr %27, i64 %479 + %516 = getelementptr double, ptr %515, i64 %514 + %517 = load double, ptr %516, align 8, !tbaa !7 + %518 = fmul double %517, %511 + store double %518, ptr %516, align 8, !tbaa !7 + br label %519 + +519: ; preds = %509, %508, %505, %493 + %520 = load double, ptr %99, align 8, !tbaa !7 + %521 = load double, ptr %17, align 8, !tbaa !7 + %522 = fmul double %520, %521 + %523 = load i32, ptr %20, align 4, !tbaa !3 + switch i32 %523, label %.loopexit [ + i32 3, label %540 + i32 2, label %524 ] -520: ; preds = %515 - %521 = icmp sgt i64 %479, %475 - br i1 %521, label %.loopexit39, label %522 - -522: ; preds = %520 - %523 = getelementptr double, ptr %27, i64 %479 - %524 = getelementptr double, ptr %105, i64 %479 - br label %621 - -525: ; preds = %515 - %526 = load double, ptr %100, align 16, !tbaa !7 - %527 = fmul double %517, %526 - %528 = icmp sgt i64 %479, %475 - br i1 %528, label %.loopexit36, label %529 - -529: ; preds = %525 - %530 = getelementptr double, ptr %27, i64 %479 - %531 = getelementptr double, ptr %105, i64 %479 - %532 = getelementptr double, ptr %106, i64 %479 - br label %533 - -533: ; preds = %533, %529 - %534 = phi i64 [ %548, %533 ], [ %479, %529 ] - %535 = mul nsw i64 %534, %101 - %536 = getelementptr double, ptr %530, i64 %535 - %537 = load double, ptr %536, align 8, !tbaa !7 - %538 = getelementptr double, ptr %531, i64 %535 - %539 = load double, ptr %538, align 8, !tbaa !7 - %540 = call double @llvm.fmuladd.f64(double %516, double %539, double %537) - %541 = getelementptr double, ptr %532, i64 %535 - %542 = load double, ptr %541, align 8, !tbaa !7 - %543 = call double @llvm.fmuladd.f64(double %526, double %542, double %540) - %544 = fneg double %543 - %545 = call double @llvm.fmuladd.f64(double %544, double %517, double %537) - store double %545, ptr %536, align 8, !tbaa !7 - %546 = call double @llvm.fmuladd.f64(double %544, double %518, double %539) - store double %546, ptr %538, align 8, !tbaa !7 - %547 = call double @llvm.fmuladd.f64(double %544, double %527, double %542) - store double %547, ptr %541, align 8, !tbaa !7 - %548 = add nsw i64 %534, 1 - %549 = icmp slt i64 %534, %475 - br i1 %549, label %533, label %.loopexit36, !llvm.loop !14 - -.loopexit36: ; preds = %533, %525 - %550 = add i32 %482, 3 - %551 = call i32 @llvm.smin.i32(i32 %550, i32 %108) - %552 = icmp sgt i32 %255, %551 - br i1 %552, label %.loopexit35, label %553 - -553: ; preds = %.loopexit36 - %554 = mul nsw i64 %479, %101 - %555 = add nsw i64 %479, 1 - %556 = mul nsw i64 %555, %101 - %557 = add nsw i64 %479, 2 - %558 = mul nsw i64 %557, %101 - %559 = getelementptr double, ptr %27, i64 %554 - %560 = getelementptr double, ptr %27, i64 %556 - %561 = getelementptr double, ptr %27, i64 %558 - br label %562 - -562: ; preds = %562, %553 - %563 = phi i64 [ %476, %553 ], [ %578, %562 ] - %564 = getelementptr double, ptr %559, i64 %563 - %565 = load double, ptr %564, align 8, !tbaa !7 - %566 = getelementptr double, ptr %560, i64 %563 +524: ; preds = %519 + %525 = icmp sgt i64 %479, %475 + br i1 %525, label %.loopexit39, label %.lver.check + +.lver.check: ; preds = %524 + %526 = getelementptr double, ptr %27, i64 %479 + %527 = getelementptr double, ptr %105, i64 %479 + br i1 %ident.check.not, label %.ph99, label %.ph99.lver.orig + +.ph99.lver.orig: ; preds = %.lver.check, %.ph99.lver.orig + %528 = phi i64 [ %538, %.ph99.lver.orig ], [ %479, %.lver.check ] + %529 = mul nsw i64 %528, %101 + %530 = getelementptr double, ptr %526, i64 %529 + %531 = load double, ptr %530, align 8, !tbaa !7 + %532 = getelementptr double, ptr %527, i64 %529 + %533 = load double, ptr %532, align 8, !tbaa !7 + %534 = call double @llvm.fmuladd.f64(double %520, double %533, double %531) + %535 = fneg double %534 + %536 = call double @llvm.fmuladd.f64(double %535, double %521, double %531) + store double %536, ptr %530, align 8, !tbaa !7 + %537 = call double @llvm.fmuladd.f64(double %535, double %522, double %533) + store double %537, ptr %532, align 8, !tbaa !7 + %538 = add nsw i64 %528, 1 + %539 = icmp slt i64 %528, %475 + br i1 %539, label %.ph99.lver.orig, label %.loopexit39, !llvm.loop !14 + +.ph99: ; preds = %.lver.check + %load_initial = load double, ptr %gep128, align 8 + br label %650 + +540: ; preds = %519 + %541 = load double, ptr %100, align 16, !tbaa !7 + %542 = fmul double %521, %541 + %543 = icmp sgt i64 %479, %475 + br i1 %543, label %.loopexit36, label %.lver.check102 + +.lver.check102: ; preds = %540 + %544 = getelementptr double, ptr %27, i64 %479 + %545 = getelementptr double, ptr %105, i64 %479 + %546 = getelementptr double, ptr %106, i64 %479 + br i1 %ident.check101.not, label %.ph103, label %.ph103.lver.orig + +.ph103.lver.orig: ; preds = %.lver.check102, %.ph103.lver.orig + %547 = phi i64 [ %561, %.ph103.lver.orig ], [ %479, %.lver.check102 ] + %548 = mul nsw i64 %547, %101 + %549 = getelementptr double, ptr %544, i64 %548 + %550 = load double, ptr %549, align 8, !tbaa !7 + %551 = getelementptr double, ptr %545, i64 %548 + %552 = load double, ptr %551, align 8, !tbaa !7 + %553 = call double @llvm.fmuladd.f64(double %520, double %552, double %550) + %554 = getelementptr double, ptr %546, i64 %548 + %555 = load double, ptr %554, align 8, !tbaa !7 + %556 = call double @llvm.fmuladd.f64(double %541, double %555, double %553) + %557 = fneg double %556 + %558 = call double @llvm.fmuladd.f64(double %557, double %521, double %550) + store double %558, ptr %549, align 8, !tbaa !7 + %559 = call double @llvm.fmuladd.f64(double %557, double %522, double %552) + store double %559, ptr %551, align 8, !tbaa !7 + %560 = call double @llvm.fmuladd.f64(double %557, double %542, double %555) + store double %560, ptr %554, align 8, !tbaa !7 + %561 = add nsw i64 %547, 1 + %562 = icmp slt i64 %547, %475 + br i1 %562, label %.ph103.lver.orig, label %.loopexit36, !llvm.loop !15 + +.ph103: ; preds = %.lver.check102 + %load_initial106 = load double, ptr %gep, align 8 + br label %563 + +563: ; preds = %563, %.ph103 + %store_forwarded107 = phi double [ %load_initial106, %.ph103 ], [ %576, %563 ] + %564 = phi i64 [ %479, %.ph103 ], [ %577, %563 ] + %565 = mul nuw nsw i64 %564, %101 + %566 = getelementptr double, ptr %544, i64 %565 %567 = load double, ptr %566, align 8, !tbaa !7 - %568 = call double @llvm.fmuladd.f64(double %516, double %567, double %565) - %569 = getelementptr double, ptr %561, i64 %563 - %570 = load double, ptr %569, align 8, !tbaa !7 - %571 = call double @llvm.fmuladd.f64(double %526, double %570, double %568) - %572 = fneg double %571 - %573 = call double @llvm.fmuladd.f64(double %572, double %517, double %565) - store double %573, ptr %564, align 8, !tbaa !7 - %574 = load double, ptr %566, align 8, !tbaa !7 - %575 = call double @llvm.fmuladd.f64(double %572, double %518, double %574) - store double %575, ptr %566, align 8, !tbaa !7 - %576 = load double, ptr %569, align 8, !tbaa !7 - %577 = call double @llvm.fmuladd.f64(double %572, double %527, double %576) - store double %577, ptr %569, align 8, !tbaa !7 - %578 = add nsw i64 %563, 1 - %exitcond.not = icmp eq i64 %563, %smax - br i1 %exitcond.not, label %.loopexit35, label %562, !llvm.loop !15 - -.loopexit35: ; preds = %562, %.loopexit36 - %579 = load i32, ptr %1, align 4, !tbaa !3 - %580 = icmp eq i32 %579, 0 - br i1 %580, label %.loopexit, label %581 - -581: ; preds = %.loopexit35 - %582 = load i32, ptr %10, align 4, !tbaa !3 - %583 = load i32, ptr %9, align 4, !tbaa !3 - %584 = icmp sgt i32 %583, %582 - br i1 %584, label %.loopexit, label %585 - -585: ; preds = %581 - %586 = mul nsw i64 %479, %102 - %587 = add nsw i64 %479, 1 - %588 = mul nsw i64 %587, %102 - %589 = add nsw i64 %479, 2 - %590 = mul nsw i64 %589, %102 - %591 = sext i32 %583 to i64 - %592 = add i32 %582, 1 - %593 = getelementptr double, ptr %33, i64 %586 - %594 = getelementptr double, ptr %33, i64 %588 - %595 = getelementptr double, ptr %33, i64 %590 - br label %596 - -596: ; preds = %596, %585 - %597 = phi i64 [ %591, %585 ], [ %612, %596 ] - %598 = getelementptr double, ptr %593, i64 %597 + %568 = getelementptr double, ptr %545, i64 %565 + %569 = call double @llvm.fmuladd.f64(double %520, double %store_forwarded107, double %567) + %570 = getelementptr double, ptr %546, i64 %565 + %571 = load double, ptr %570, align 8, !tbaa !7 + %572 = call double @llvm.fmuladd.f64(double %541, double %571, double %569) + %573 = fneg double %572 + %574 = call double @llvm.fmuladd.f64(double %573, double %521, double %567) + store double %574, ptr %566, align 8, !tbaa !7 + %575 = call double @llvm.fmuladd.f64(double %573, double %522, double %store_forwarded107) + store double %575, ptr %568, align 8, !tbaa !7 + %576 = call double @llvm.fmuladd.f64(double %573, double %542, double %571) + store double %576, ptr %570, align 8, !tbaa !7 + %577 = add nsw i64 %564, 1 + %578 = icmp slt i64 %564, %475 + br i1 %578, label %563, label %.loopexit36, !llvm.loop !15 + +.loopexit36: ; preds = %.ph103.lver.orig, %563, %540 + %579 = add i32 %486, 3 + %580 = call i32 @llvm.smin.i32(i32 %579, i32 %108) + %581 = icmp sgt i32 %255, %580 + br i1 %581, label %.loopexit35, label %582 + +582: ; preds = %.loopexit36 + %583 = mul nsw i64 %479, %101 + %584 = add nsw i64 %479, 1 + %585 = mul nsw i64 %584, %101 + %586 = add nsw i64 %479, 2 + %587 = mul nsw i64 %586, %101 + %588 = getelementptr double, ptr %27, i64 %583 + %589 = getelementptr double, ptr %27, i64 %585 + %590 = getelementptr double, ptr %27, i64 %587 + br label %591 + +591: ; preds = %591, %582 + %592 = phi i64 [ %476, %582 ], [ %607, %591 ] + %593 = getelementptr double, ptr %588, i64 %592 + %594 = load double, ptr %593, align 8, !tbaa !7 + %595 = getelementptr double, ptr %589, i64 %592 + %596 = load double, ptr %595, align 8, !tbaa !7 + %597 = call double @llvm.fmuladd.f64(double %520, double %596, double %594) + %598 = getelementptr double, ptr %590, i64 %592 %599 = load double, ptr %598, align 8, !tbaa !7 - %600 = getelementptr double, ptr %594, i64 %597 - %601 = load double, ptr %600, align 8, !tbaa !7 - %602 = call double @llvm.fmuladd.f64(double %516, double %601, double %599) - %603 = getelementptr double, ptr %595, i64 %597 - %604 = load double, ptr %603, align 8, !tbaa !7 - %605 = call double @llvm.fmuladd.f64(double %526, double %604, double %602) - %606 = fneg double %605 - %607 = call double @llvm.fmuladd.f64(double %606, double %517, double %599) - store double %607, ptr %598, align 8, !tbaa !7 - %608 = load double, ptr %600, align 8, !tbaa !7 - %609 = call double @llvm.fmuladd.f64(double %606, double %518, double %608) - store double %609, ptr %600, align 8, !tbaa !7 - %610 = load double, ptr %603, align 8, !tbaa !7 - %611 = call double @llvm.fmuladd.f64(double %606, double %527, double %610) - store double %611, ptr %603, align 8, !tbaa !7 - %612 = add nsw i64 %597, 1 - %613 = trunc i64 %612 to i32 - %614 = icmp eq i32 %592, %613 - br i1 %614, label %.loopexit, label %596, !llvm.loop !16 - -.loopexit39: ; preds = %621, %520 - br i1 %473, label %.loopexit38, label %615 - -615: ; preds = %.loopexit39 - %616 = mul nsw i64 %479, %101 - %617 = add nsw i64 %479, 1 - %618 = mul nsw i64 %617, %101 - %619 = getelementptr double, ptr %27, i64 %616 - %620 = getelementptr double, ptr %27, i64 %618 - br label %634 - -621: ; preds = %621, %522 - %622 = phi i64 [ %632, %621 ], [ %479, %522 ] - %623 = mul nsw i64 %622, %101 - %624 = getelementptr double, ptr %523, i64 %623 - %625 = load double, ptr %624, align 8, !tbaa !7 - %626 = getelementptr double, ptr %524, i64 %623 - %627 = load double, ptr %626, align 8, !tbaa !7 - %628 = call double @llvm.fmuladd.f64(double %516, double %627, double %625) - %629 = fneg double %628 - %630 = call double @llvm.fmuladd.f64(double %629, double %517, double %625) - store double %630, ptr %624, align 8, !tbaa !7 - %631 = call double @llvm.fmuladd.f64(double %629, double %518, double %627) - store double %631, ptr %626, align 8, !tbaa !7 - %632 = add nsw i64 %622, 1 - %633 = icmp slt i64 %622, %475 - br i1 %633, label %621, label %.loopexit39, !llvm.loop !17 - -634: ; preds = %634, %615 - %635 = phi i64 [ %476, %615 ], [ %645, %634 ] - %636 = getelementptr double, ptr %619, i64 %635 - %637 = load double, ptr %636, align 8, !tbaa !7 - %638 = getelementptr double, ptr %620, i64 %635 - %639 = load double, ptr %638, align 8, !tbaa !7 - %640 = call double @llvm.fmuladd.f64(double %516, double %639, double %637) - %641 = fneg double %640 - %642 = call double @llvm.fmuladd.f64(double %641, double %517, double %637) - store double %642, ptr %636, align 8, !tbaa !7 - %643 = load double, ptr %638, align 8, !tbaa !7 - %644 = call double @llvm.fmuladd.f64(double %641, double %518, double %643) - store double %644, ptr %638, align 8, !tbaa !7 - %645 = add nsw i64 %635, 1 - %646 = trunc i64 %645 to i32 - %647 = icmp eq i32 %136, %646 - br i1 %647, label %.loopexit38, label %634, !llvm.loop !18 - -.loopexit38: ; preds = %634, %.loopexit39 - %648 = load i32, ptr %1, align 4, !tbaa !3 - %649 = icmp eq i32 %648, 0 - br i1 %649, label %.loopexit, label %650 - -650: ; preds = %.loopexit38 - %651 = load i32, ptr %10, align 4, !tbaa !3 - %652 = load i32, ptr %9, align 4, !tbaa !3 - %653 = icmp sgt i32 %652, %651 - br i1 %653, label %.loopexit, label %654 - -654: ; preds = %650 - %655 = mul nsw i64 %479, %102 - %656 = add nsw i64 %479, 1 - %657 = mul nsw i64 %656, %102 - %658 = sext i32 %652 to i64 - %659 = add i32 %651, 1 - %660 = getelementptr double, ptr %33, i64 %655 - %661 = getelementptr double, ptr %33, i64 %657 + %600 = call double @llvm.fmuladd.f64(double %541, double %599, double %597) + %601 = fneg double %600 + %602 = call double @llvm.fmuladd.f64(double %601, double %521, double %594) + store double %602, ptr %593, align 8, !tbaa !7 + %603 = load double, ptr %595, align 8, !tbaa !7 + %604 = call double @llvm.fmuladd.f64(double %601, double %522, double %603) + store double %604, ptr %595, align 8, !tbaa !7 + %605 = load double, ptr %598, align 8, !tbaa !7 + %606 = call double @llvm.fmuladd.f64(double %601, double %542, double %605) + store double %606, ptr %598, align 8, !tbaa !7 + %607 = add nsw i64 %592, 1 + %exitcond.not = icmp eq i64 %592, %smax + br i1 %exitcond.not, label %.loopexit35, label %591, !llvm.loop !16 + +.loopexit35: ; preds = %591, %.loopexit36 + %608 = load i32, ptr %1, align 4, !tbaa !3 + %609 = icmp eq i32 %608, 0 + br i1 %609, label %.loopexit, label %610 + +610: ; preds = %.loopexit35 + %611 = load i32, ptr %10, align 4, !tbaa !3 + %612 = load i32, ptr %9, align 4, !tbaa !3 + %613 = icmp sgt i32 %612, %611 + br i1 %613, label %.loopexit, label %614 + +614: ; preds = %610 + %615 = mul nsw i64 %479, %102 + %616 = add nsw i64 %479, 1 + %617 = mul nsw i64 %616, %102 + %618 = add nsw i64 %479, 2 + %619 = mul nsw i64 %618, %102 + %620 = sext i32 %612 to i64 + %621 = add i32 %611, 1 + %622 = getelementptr double, ptr %33, i64 %615 + %623 = getelementptr double, ptr %33, i64 %617 + %624 = getelementptr double, ptr %33, i64 %619 + br label %625 + +625: ; preds = %625, %614 + %626 = phi i64 [ %620, %614 ], [ %641, %625 ] + %627 = getelementptr double, ptr %622, i64 %626 + %628 = load double, ptr %627, align 8, !tbaa !7 + %629 = getelementptr double, ptr %623, i64 %626 + %630 = load double, ptr %629, align 8, !tbaa !7 + %631 = call double @llvm.fmuladd.f64(double %520, double %630, double %628) + %632 = getelementptr double, ptr %624, i64 %626 + %633 = load double, ptr %632, align 8, !tbaa !7 + %634 = call double @llvm.fmuladd.f64(double %541, double %633, double %631) + %635 = fneg double %634 + %636 = call double @llvm.fmuladd.f64(double %635, double %521, double %628) + store double %636, ptr %627, align 8, !tbaa !7 + %637 = load double, ptr %629, align 8, !tbaa !7 + %638 = call double @llvm.fmuladd.f64(double %635, double %522, double %637) + store double %638, ptr %629, align 8, !tbaa !7 + %639 = load double, ptr %632, align 8, !tbaa !7 + %640 = call double @llvm.fmuladd.f64(double %635, double %542, double %639) + store double %640, ptr %632, align 8, !tbaa !7 + %641 = add nsw i64 %626, 1 + %642 = trunc i64 %641 to i32 + %643 = icmp eq i32 %621, %642 + br i1 %643, label %.loopexit, label %625, !llvm.loop !17 + +.loopexit39: ; preds = %.ph99.lver.orig, %650, %524 + br i1 %473, label %.loopexit38, label %644 + +644: ; preds = %.loopexit39 + %645 = mul nsw i64 %479, %101 + %646 = add nsw i64 %479, 1 + %647 = mul nsw i64 %646, %101 + %648 = getelementptr double, ptr %27, i64 %645 + %649 = getelementptr double, ptr %27, i64 %647 br label %662 -662: ; preds = %662, %654 - %663 = phi i64 [ %658, %654 ], [ %673, %662 ] - %664 = getelementptr double, ptr %660, i64 %663 +650: ; preds = %650, %.ph99 + %store_forwarded = phi double [ %load_initial, %.ph99 ], [ %659, %650 ] + %651 = phi i64 [ %479, %.ph99 ], [ %660, %650 ] + %652 = mul nuw nsw i64 %651, %101 + %653 = getelementptr double, ptr %526, i64 %652 + %654 = getelementptr double, ptr %527, i64 %652 + %655 = load double, ptr %654, align 8, !tbaa !7 + %656 = call double @llvm.fmuladd.f64(double %520, double %655, double %store_forwarded) + %657 = fneg double %656 + %658 = call double @llvm.fmuladd.f64(double %657, double %521, double %store_forwarded) + store double %658, ptr %653, align 8, !tbaa !7 + %659 = call double @llvm.fmuladd.f64(double %657, double %522, double %655) + store double %659, ptr %654, align 8, !tbaa !7 + %660 = add nsw i64 %651, 1 + %661 = icmp slt i64 %651, %475 + br i1 %661, label %650, label %.loopexit39, !llvm.loop !14 + +662: ; preds = %662, %644 + %663 = phi i64 [ %476, %644 ], [ %673, %662 ] + %664 = getelementptr double, ptr %648, i64 %663 %665 = load double, ptr %664, align 8, !tbaa !7 - %666 = getelementptr double, ptr %661, i64 %663 + %666 = getelementptr double, ptr %649, i64 %663 %667 = load double, ptr %666, align 8, !tbaa !7 - %668 = call double @llvm.fmuladd.f64(double %516, double %667, double %665) + %668 = call double @llvm.fmuladd.f64(double %520, double %667, double %665) %669 = fneg double %668 - %670 = call double @llvm.fmuladd.f64(double %669, double %517, double %665) + %670 = call double @llvm.fmuladd.f64(double %669, double %521, double %665) store double %670, ptr %664, align 8, !tbaa !7 %671 = load double, ptr %666, align 8, !tbaa !7 - %672 = call double @llvm.fmuladd.f64(double %669, double %518, double %671) + %672 = call double @llvm.fmuladd.f64(double %669, double %522, double %671) store double %672, ptr %666, align 8, !tbaa !7 %673 = add nsw i64 %663, 1 %674 = trunc i64 %673 to i32 - %675 = icmp eq i32 %659, %674 - br i1 %675, label %.loopexit, label %662, !llvm.loop !19 - -.loopexit: ; preds = %662, %596, %650, %.loopexit38, %581, %.loopexit35, %515 - %676 = add nsw i64 %479, 1 - %677 = trunc i64 %676 to i32 - %678 = icmp eq i32 %108, %677 + %675 = icmp eq i32 %136, %674 + br i1 %675, label %.loopexit38, label %662, !llvm.loop !18 + +.loopexit38: ; preds = %662, %.loopexit39 + %676 = load i32, ptr %1, align 4, !tbaa !3 + %677 = icmp eq i32 %676, 0 + br i1 %677, label %.loopexit, label %678 + +678: ; preds = %.loopexit38 + %679 = load i32, ptr %10, align 4, !tbaa !3 + %680 = load i32, ptr %9, align 4, !tbaa !3 + %681 = icmp sgt i32 %680, %679 + br i1 %681, label %.loopexit, label %682 + +682: ; preds = %678 + %683 = mul nsw i64 %479, %102 + %684 = add nsw i64 %479, 1 + %685 = mul nsw i64 %684, %102 + %686 = sext i32 %680 to i64 + %687 = add i32 %679, 1 + %688 = getelementptr double, ptr %33, i64 %683 + %689 = getelementptr double, ptr %33, i64 %685 + br label %690 + +690: ; preds = %690, %682 + %691 = phi i64 [ %686, %682 ], [ %701, %690 ] + %692 = getelementptr double, ptr %688, i64 %691 + %693 = load double, ptr %692, align 8, !tbaa !7 + %694 = getelementptr double, ptr %689, i64 %691 + %695 = load double, ptr %694, align 8, !tbaa !7 + %696 = call double @llvm.fmuladd.f64(double %520, double %695, double %693) + %697 = fneg double %696 + %698 = call double @llvm.fmuladd.f64(double %697, double %521, double %693) + store double %698, ptr %692, align 8, !tbaa !7 + %699 = load double, ptr %694, align 8, !tbaa !7 + %700 = call double @llvm.fmuladd.f64(double %697, double %522, double %699) + store double %700, ptr %694, align 8, !tbaa !7 + %701 = add nsw i64 %691, 1 + %702 = trunc i64 %701 to i32 + %703 = icmp eq i32 %687, %702 + br i1 %703, label %.loopexit, label %690, !llvm.loop !19 + +.loopexit: ; preds = %690, %625, %678, %.loopexit38, %610, %.loopexit35, %519 + %704 = add nsw i64 %479, 1 + %705 = trunc i64 %704 to i32 + %706 = icmp eq i32 %108, %705 %indvars.iv.next = add i32 %indvars.iv, 1 - br i1 %678, label %.loopexit40, label %478, !llvm.loop !20 + %indvar.next = add i64 %indvar, 1 + br i1 %706, label %.loopexit40, label %478, !llvm.loop !20 .loopexit40: ; preds = %.loopexit, %.loopexit41 - %679 = add nuw nsw i32 %139, 1 - %680 = load i32, ptr %15, align 4, !tbaa !3 - %681 = icmp slt i32 %139, %680 - br i1 %681, label %138, label %.loopexit44, !llvm.loop !21 + %707 = add nuw nsw i32 %139, 1 + %708 = load i32, ptr %15, align 4, !tbaa !3 + %709 = icmp slt i32 %139, %708 + br i1 %709, label %138, label %.loopexit44, !llvm.loop !21 .loopexit44: ; preds = %.loopexit40, %97 - %682 = phi i32 [ %94, %97 ], [ %108, %.loopexit40 ] - store i32 %682, ptr %13, align 4, !tbaa !3 + %710 = phi i32 [ %94, %97 ], [ %108, %.loopexit40 ] + store i32 %710, ptr %13, align 4, !tbaa !3 br label %.loopexit46 -683: ; preds = %250 - %684 = icmp eq i32 %241, %108 - br i1 %684, label %685, label %689 - -685: ; preds = %683 - %686 = load double, ptr %123, align 8, !tbaa !7 - %687 = getelementptr inbounds double, ptr %28, i64 %134 - store double %686, ptr %687, align 8, !tbaa !7 - %688 = getelementptr inbounds double, ptr %29, i64 %134 - store double 0.000000e+00, ptr %688, align 8, !tbaa !7 - br label %731 - -689: ; preds = %683 - %690 = icmp eq i32 %241, %111 - br i1 %690, label %691, label %731 - -691: ; preds = %689 - %692 = getelementptr inbounds double, ptr %28, i64 %137 - %693 = getelementptr inbounds double, ptr %29, i64 %137 - %694 = getelementptr inbounds double, ptr %28, i64 %134 - %695 = getelementptr inbounds double, ptr %29, i64 %134 - call void @dlanv2_(ptr noundef %126, ptr noundef %130, ptr noundef %115, ptr noundef %133, ptr noundef nonnull %692, ptr noundef nonnull %693, ptr noundef nonnull %694, ptr noundef nonnull %695, ptr noundef nonnull %18, ptr noundef nonnull %19) #6 - %696 = load i32, ptr %0, align 4, !tbaa !3 - %697 = icmp eq i32 %696, 0 - br i1 %697, label %718, label %698 - -698: ; preds = %691 - %699 = icmp sgt i32 %141, %108 - br i1 %699, label %700, label %709 - -700: ; preds = %698 - %701 = sub nsw i32 %141, %108 - store i32 %701, ptr %15, align 4, !tbaa !3 - %702 = mul nsw i32 %136, %24 - %703 = add nsw i32 %702, %111 - %704 = sext i32 %703 to i64 - %705 = getelementptr inbounds double, ptr %27, i64 %704 - %706 = add nsw i32 %702, %108 - %707 = sext i32 %706 to i64 - %708 = getelementptr inbounds double, ptr %27, i64 %707 - call void @drot_(ptr noundef nonnull %15, ptr noundef %705, ptr noundef nonnull %6, ptr noundef %708, ptr noundef nonnull %6, ptr noundef nonnull %18, ptr noundef nonnull %19) #6 - br label %709 - -709: ; preds = %700, %698 - %710 = xor i32 %142, -1 - %711 = add i32 %108, %710 - store i32 %711, ptr %15, align 4, !tbaa !3 - %712 = add nsw i32 %142, %112 - %713 = sext i32 %712 to i64 - %714 = getelementptr inbounds double, ptr %27, i64 %713 - %715 = add nsw i32 %142, %127 - %716 = sext i32 %715 to i64 - %717 = getelementptr inbounds double, ptr %27, i64 %716 - call void @drot_(ptr noundef nonnull %15, ptr noundef %714, ptr noundef nonnull @c__1, ptr noundef %717, ptr noundef nonnull @c__1, ptr noundef nonnull %18, ptr noundef nonnull %19) #6 - br label %718 - -718: ; preds = %709, %691 - %719 = load i32, ptr %1, align 4, !tbaa !3 - %720 = icmp eq i32 %719, 0 - br i1 %720, label %731, label %721 - -721: ; preds = %718 - %722 = load i32, ptr %9, align 4, !tbaa !3 - %723 = mul nsw i32 %111, %30 - %724 = add nsw i32 %722, %723 - %725 = sext i32 %724 to i64 - %726 = getelementptr inbounds double, ptr %33, i64 %725 - %727 = mul nsw i32 %108, %30 - %728 = add nsw i32 %722, %727 - %729 = sext i32 %728 to i64 - %730 = getelementptr inbounds double, ptr %33, i64 %729 - call void @drot_(ptr noundef nonnull %21, ptr noundef %726, ptr noundef nonnull @c__1, ptr noundef %730, ptr noundef nonnull @c__1, ptr noundef nonnull %18, ptr noundef nonnull %19) #6 - br label %731 - -731: ; preds = %721, %718, %689, %685 - %732 = add nsw i32 %241, -1 - %733 = load i32, ptr %3, align 4, !tbaa !3 - %734 = icmp sgt i32 %241, %733 - br i1 %734, label %.split, label %.loopexit46 - -.loopexit46: ; preds = %731, %.loopexit44, %89, %40, %14 +711: ; preds = %250 + %712 = icmp eq i32 %241, %108 + br i1 %712, label %713, label %717 + +713: ; preds = %711 + %714 = load double, ptr %123, align 8, !tbaa !7 + %715 = getelementptr inbounds double, ptr %28, i64 %134 + store double %714, ptr %715, align 8, !tbaa !7 + %716 = getelementptr inbounds double, ptr %29, i64 %134 + store double 0.000000e+00, ptr %716, align 8, !tbaa !7 + br label %759 + +717: ; preds = %711 + %718 = icmp eq i32 %241, %111 + br i1 %718, label %719, label %759 + +719: ; preds = %717 + %720 = getelementptr inbounds double, ptr %28, i64 %137 + %721 = getelementptr inbounds double, ptr %29, i64 %137 + %722 = getelementptr inbounds double, ptr %28, i64 %134 + %723 = getelementptr inbounds double, ptr %29, i64 %134 + call void @dlanv2_(ptr noundef %126, ptr noundef %130, ptr noundef %115, ptr noundef %133, ptr noundef nonnull %720, ptr noundef nonnull %721, ptr noundef nonnull %722, ptr noundef nonnull %723, ptr noundef nonnull %18, ptr noundef nonnull %19) #6 + %724 = load i32, ptr %0, align 4, !tbaa !3 + %725 = icmp eq i32 %724, 0 + br i1 %725, label %746, label %726 + +726: ; preds = %719 + %727 = icmp sgt i32 %141, %108 + br i1 %727, label %728, label %737 + +728: ; preds = %726 + %729 = sub nsw i32 %141, %108 + store i32 %729, ptr %15, align 4, !tbaa !3 + %730 = mul nsw i32 %136, %24 + %731 = add nsw i32 %730, %111 + %732 = sext i32 %731 to i64 + %733 = getelementptr inbounds double, ptr %27, i64 %732 + %734 = add nsw i32 %730, %108 + %735 = sext i32 %734 to i64 + %736 = getelementptr inbounds double, ptr %27, i64 %735 + call void @drot_(ptr noundef nonnull %15, ptr noundef %733, ptr noundef nonnull %6, ptr noundef %736, ptr noundef nonnull %6, ptr noundef nonnull %18, ptr noundef nonnull %19) #6 + br label %737 + +737: ; preds = %728, %726 + %738 = xor i32 %142, -1 + %739 = add i32 %108, %738 + store i32 %739, ptr %15, align 4, !tbaa !3 + %740 = add nsw i32 %142, %112 + %741 = sext i32 %740 to i64 + %742 = getelementptr inbounds double, ptr %27, i64 %741 + %743 = add nsw i32 %142, %127 + %744 = sext i32 %743 to i64 + %745 = getelementptr inbounds double, ptr %27, i64 %744 + call void @drot_(ptr noundef nonnull %15, ptr noundef %742, ptr noundef nonnull @c__1, ptr noundef %745, ptr noundef nonnull @c__1, ptr noundef nonnull %18, ptr noundef nonnull %19) #6 + br label %746 + +746: ; preds = %737, %719 + %747 = load i32, ptr %1, align 4, !tbaa !3 + %748 = icmp eq i32 %747, 0 + br i1 %748, label %759, label %749 + +749: ; preds = %746 + %750 = load i32, ptr %9, align 4, !tbaa !3 + %751 = mul nsw i32 %111, %30 + %752 = add nsw i32 %750, %751 + %753 = sext i32 %752 to i64 + %754 = getelementptr inbounds double, ptr %33, i64 %753 + %755 = mul nsw i32 %108, %30 + %756 = add nsw i32 %750, %755 + %757 = sext i32 %756 to i64 + %758 = getelementptr inbounds double, ptr %33, i64 %757 + call void @drot_(ptr noundef nonnull %21, ptr noundef %754, ptr noundef nonnull @c__1, ptr noundef %758, ptr noundef nonnull @c__1, ptr noundef nonnull %18, ptr noundef nonnull %19) #6 + br label %759 + +759: ; preds = %749, %746, %717, %713 + %760 = add nsw i32 %241, -1 + %761 = load i32, ptr %3, align 4, !tbaa !3 + %762 = icmp sgt i32 %241, %761 + br i1 %762, label %.split, label %.loopexit46 + +.loopexit46: ; preds = %759, %.loopexit44, %89, %40, %14 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #6 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #6 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #6 diff --git a/bench/openblas/optimized/dlasr.c.ll b/bench/openblas/optimized/dlasr.c.ll index a508210bba1..c13ac7d24b0 100644 --- a/bench/openblas/optimized/dlasr.c.ll +++ b/bench/openblas/optimized/dlasr.c.ll @@ -109,17 +109,17 @@ define void @dlasr_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr nocaptur 57: ; preds = %54 %58 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str) #5 %59 = icmp eq i32 %58, 0 - br i1 %59, label %328, label %60 + br i1 %59, label %353, label %60 60: ; preds = %57 %61 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.2) #5 %62 = icmp eq i32 %61, 0 - br i1 %62, label %148, label %63 + br i1 %62, label %173, label %63 63: ; preds = %60 %64 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 %65 = icmp eq i32 %64, 0 - br i1 %65, label %106, label %66 + br i1 %65, label %117, label %66 66: ; preds = %63 %67 = load i32, ptr %3, align 4, !tbaa !3 @@ -130,777 +130,832 @@ define void @dlasr_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr nocaptur %70 = sext i32 %13 to i64 %71 = zext nneg i32 %67 to i64 %72 = getelementptr i8, ptr %16, i64 8 + %ident.check88.not = icmp eq i32 %13, 1 br label %73 73: ; preds = %.loopexit52, %69 - %74 = phi i64 [ 1, %69 ], [ %104, %.loopexit52 ] - %75 = getelementptr inbounds double, ptr %11, i64 %74 - %76 = load double, ptr %75, align 8, !tbaa !7 - %77 = getelementptr inbounds double, ptr %12, i64 %74 - %78 = load double, ptr %77, align 8, !tbaa !7 - %79 = fcmp une double %76, 1.000000e+00 - %80 = fcmp une double %78, 0.000000e+00 - %81 = select i1 %79, i1 true, i1 %80 - br i1 %81, label %82, label %.loopexit52 - -82: ; preds = %73 - %83 = load i32, ptr %4, align 4, !tbaa !3 - %84 = icmp slt i32 %83, 1 - br i1 %84, label %.loopexit52, label %85 - -85: ; preds = %82 - %86 = fneg double %78 - %87 = add nuw i32 %83, 1 + %indvar92 = phi i64 [ %indvar.next93, %.loopexit52 ], [ 0, %69 ] + %74 = phi i64 [ %115, %.loopexit52 ], [ 1, %69 ] + %75 = shl nuw nsw i64 %indvar92, 3 + %scevgep94 = getelementptr i8, ptr %7, i64 %75 + %76 = getelementptr inbounds double, ptr %11, i64 %74 + %77 = load double, ptr %76, align 8, !tbaa !7 + %78 = getelementptr inbounds double, ptr %12, i64 %74 + %79 = load double, ptr %78, align 8, !tbaa !7 + %80 = fcmp une double %77, 1.000000e+00 + %81 = fcmp une double %79, 0.000000e+00 + %82 = select i1 %80, i1 true, i1 %81 + br i1 %82, label %83, label %.loopexit52 + +83: ; preds = %73 + %84 = load i32, ptr %4, align 4, !tbaa !3 + %85 = icmp slt i32 %84, 1 + br i1 %85, label %.loopexit52, label %.lver.check89 + +.lver.check89: ; preds = %83 + %86 = fneg double %79 + %87 = add nuw i32 %84, 1 %88 = zext i32 %87 to i64 %89 = getelementptr double, ptr %72, i64 %74 %90 = getelementptr double, ptr %16, i64 %74 - br label %91 - -91: ; preds = %91, %85 - %92 = phi i64 [ 1, %85 ], [ %102, %91 ] - %93 = mul nsw i64 %92, %70 - %94 = getelementptr double, ptr %89, i64 %93 - %95 = load double, ptr %94, align 8, !tbaa !7 - %96 = getelementptr double, ptr %90, i64 %93 - %97 = load double, ptr %96, align 8, !tbaa !7 - %98 = fmul double %97, %86 - %99 = tail call double @llvm.fmuladd.f64(double %76, double %95, double %98) - store double %99, ptr %94, align 8, !tbaa !7 - %100 = fmul double %76, %97 - %101 = tail call double @llvm.fmuladd.f64(double %78, double %95, double %100) - store double %101, ptr %96, align 8, !tbaa !7 - %102 = add nuw nsw i64 %92, 1 - %103 = icmp eq i64 %102, %88 - br i1 %103, label %.loopexit52, label %91, !llvm.loop !9 - -.loopexit52: ; preds = %91, %82, %73 - %104 = add nuw nsw i64 %74, 1 - %105 = icmp eq i64 %104, %71 - br i1 %105, label %.loopexit31, label %73, !llvm.loop !12 - -106: ; preds = %63 - %107 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 - %108 = icmp eq i32 %107, 0 - br i1 %108, label %.loopexit31, label %109 - -109: ; preds = %106 - %110 = load i32, ptr %3, align 4, !tbaa !3 - %111 = icmp sgt i32 %110, 1 - br i1 %111, label %112, label %.loopexit31 - -112: ; preds = %109 - %113 = sext i32 %13 to i64 - %114 = zext nneg i32 %110 to i64 - br label %115 - -115: ; preds = %.loopexit50, %112 - %116 = phi i64 [ %114, %112 ], [ %117, %.loopexit50 ] - %117 = add nsw i64 %116, -1 - %118 = getelementptr inbounds double, ptr %11, i64 %117 - %119 = load double, ptr %118, align 8, !tbaa !7 - %120 = getelementptr inbounds double, ptr %12, i64 %117 - %121 = load double, ptr %120, align 8, !tbaa !7 - %122 = fcmp une double %119, 1.000000e+00 - %123 = fcmp une double %121, 0.000000e+00 - %124 = select i1 %122, i1 true, i1 %123 - br i1 %124, label %125, label %.loopexit50 - -125: ; preds = %115 - %126 = load i32, ptr %4, align 4, !tbaa !3 - %127 = icmp slt i32 %126, 1 - br i1 %127, label %.loopexit50, label %128 - -128: ; preds = %125 - %129 = fneg double %121 - %130 = add nuw i32 %126, 1 - %131 = zext i32 %130 to i64 - %132 = getelementptr double, ptr %16, i64 %116 - %133 = getelementptr double, ptr %16, i64 %117 - br label %134 - -134: ; preds = %134, %128 - %135 = phi i64 [ 1, %128 ], [ %145, %134 ] - %136 = mul nsw i64 %135, %113 - %137 = getelementptr double, ptr %132, i64 %136 - %138 = load double, ptr %137, align 8, !tbaa !7 - %139 = getelementptr double, ptr %133, i64 %136 - %140 = load double, ptr %139, align 8, !tbaa !7 - %141 = fmul double %140, %129 - %142 = tail call double @llvm.fmuladd.f64(double %119, double %138, double %141) - store double %142, ptr %137, align 8, !tbaa !7 - %143 = fmul double %119, %140 - %144 = tail call double @llvm.fmuladd.f64(double %121, double %138, double %143) - store double %144, ptr %139, align 8, !tbaa !7 - %145 = add nuw nsw i64 %135, 1 - %146 = icmp eq i64 %145, %131 - br i1 %146, label %.loopexit50, label %134, !llvm.loop !13 - -.loopexit50: ; preds = %134, %125, %115 - %147 = icmp sgt i64 %116, 2 - br i1 %147, label %115, label %.loopexit31, !llvm.loop !14 - -148: ; preds = %60 - %149 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5 - %150 = icmp eq i32 %149, 0 - br i1 %150, label %239, label %151 - -151: ; preds = %148 - %152 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 - %153 = icmp eq i32 %152, 0 - br i1 %153, label %196, label %154 - -154: ; preds = %151 - %155 = load i32, ptr %3, align 4, !tbaa !3 - %156 = icmp slt i32 %155, 2 - br i1 %156, label %.loopexit31, label %157 - -157: ; preds = %154 - %158 = getelementptr i8, ptr %16, i64 8 - %159 = sext i32 %13 to i64 - %160 = add nuw i32 %155, 1 - %161 = zext i32 %160 to i64 - br label %162 - -162: ; preds = %.loopexit48, %157 - %163 = phi i64 [ 2, %157 ], [ %194, %.loopexit48 ] - %164 = add nsw i64 %163, -1 - %165 = getelementptr inbounds double, ptr %11, i64 %164 - %166 = load double, ptr %165, align 8, !tbaa !7 - %167 = getelementptr inbounds double, ptr %12, i64 %164 - %168 = load double, ptr %167, align 8, !tbaa !7 - %169 = fcmp une double %166, 1.000000e+00 - %170 = fcmp une double %168, 0.000000e+00 - %171 = select i1 %169, i1 true, i1 %170 - br i1 %171, label %172, label %.loopexit48 - -172: ; preds = %162 - %173 = load i32, ptr %4, align 4, !tbaa !3 - %174 = icmp slt i32 %173, 1 - br i1 %174, label %.loopexit48, label %175 - -175: ; preds = %172 - %176 = fneg double %168 - %177 = add nuw i32 %173, 1 - %178 = zext i32 %177 to i64 - %179 = getelementptr double, ptr %16, i64 %163 - br label %180 - -180: ; preds = %180, %175 - %181 = phi i64 [ 1, %175 ], [ %192, %180 ] - %182 = mul nsw i64 %181, %159 - %183 = getelementptr double, ptr %179, i64 %182 - %184 = load double, ptr %183, align 8, !tbaa !7 - %185 = getelementptr double, ptr %158, i64 %182 - %186 = load double, ptr %185, align 8, !tbaa !7 - %187 = fmul double %186, %176 - %188 = tail call double @llvm.fmuladd.f64(double %166, double %184, double %187) - store double %188, ptr %183, align 8, !tbaa !7 - %189 = load double, ptr %185, align 8, !tbaa !7 - %190 = fmul double %166, %189 - %191 = tail call double @llvm.fmuladd.f64(double %168, double %184, double %190) - store double %191, ptr %185, align 8, !tbaa !7 - %192 = add nuw nsw i64 %181, 1 - %193 = icmp eq i64 %192, %178 - br i1 %193, label %.loopexit48, label %180, !llvm.loop !15 - -.loopexit48: ; preds = %180, %172, %162 - %194 = add nuw nsw i64 %163, 1 - %195 = icmp eq i64 %194, %161 - br i1 %195, label %.loopexit31, label %162, !llvm.loop !16 - -196: ; preds = %151 - %197 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 - %198 = icmp eq i32 %197, 0 - br i1 %198, label %.loopexit31, label %199 - -199: ; preds = %196 - %200 = load i32, ptr %3, align 4, !tbaa !3 - %201 = icmp sgt i32 %200, 1 - br i1 %201, label %202, label %.loopexit31 - -202: ; preds = %199 - %203 = getelementptr i8, ptr %16, i64 8 - %204 = sext i32 %13 to i64 - %205 = zext nneg i32 %200 to i64 - br label %206 - -206: ; preds = %.loopexit46, %202 - %207 = phi i64 [ %205, %202 ], [ %208, %.loopexit46 ] - %208 = add nsw i64 %207, -1 - %209 = getelementptr inbounds double, ptr %11, i64 %208 - %210 = load double, ptr %209, align 8, !tbaa !7 - %211 = getelementptr inbounds double, ptr %12, i64 %208 - %212 = load double, ptr %211, align 8, !tbaa !7 - %213 = fcmp une double %210, 1.000000e+00 - %214 = fcmp une double %212, 0.000000e+00 - %215 = select i1 %213, i1 true, i1 %214 - br i1 %215, label %216, label %.loopexit46 - -216: ; preds = %206 - %217 = load i32, ptr %4, align 4, !tbaa !3 - %218 = icmp slt i32 %217, 1 - br i1 %218, label %.loopexit46, label %219 - -219: ; preds = %216 - %220 = fneg double %212 - %221 = add nuw i32 %217, 1 - %222 = zext i32 %221 to i64 - %223 = getelementptr double, ptr %16, i64 %207 - br label %224 - -224: ; preds = %224, %219 - %225 = phi i64 [ 1, %219 ], [ %236, %224 ] - %226 = mul nsw i64 %225, %204 - %227 = getelementptr double, ptr %223, i64 %226 - %228 = load double, ptr %227, align 8, !tbaa !7 - %229 = getelementptr double, ptr %203, i64 %226 - %230 = load double, ptr %229, align 8, !tbaa !7 - %231 = fmul double %230, %220 - %232 = tail call double @llvm.fmuladd.f64(double %210, double %228, double %231) - store double %232, ptr %227, align 8, !tbaa !7 - %233 = load double, ptr %229, align 8, !tbaa !7 - %234 = fmul double %210, %233 - %235 = tail call double @llvm.fmuladd.f64(double %212, double %228, double %234) - store double %235, ptr %229, align 8, !tbaa !7 - %236 = add nuw nsw i64 %225, 1 - %237 = icmp eq i64 %236, %222 - br i1 %237, label %.loopexit46, label %224, !llvm.loop !17 - -.loopexit46: ; preds = %224, %216, %206 - %238 = icmp sgt i64 %207, 2 - br i1 %238, label %206, label %.loopexit31, !llvm.loop !18 - -239: ; preds = %148 - %240 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #5 - %241 = icmp eq i32 %240, 0 - br i1 %241, label %.loopexit31, label %242 - -242: ; preds = %239 - %243 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 - %244 = icmp eq i32 %243, 0 - br i1 %244, label %285, label %245 - -245: ; preds = %242 - %246 = load i32, ptr %3, align 4, !tbaa !3 - %247 = icmp sgt i32 %246, 1 - br i1 %247, label %248, label %.loopexit31 - -248: ; preds = %245 - %249 = sext i32 %13 to i64 - %250 = zext nneg i32 %246 to i64 - %251 = getelementptr double, ptr %16, i64 %250 - br label %252 - -252: ; preds = %.loopexit44, %248 - %253 = phi i64 [ 1, %248 ], [ %283, %.loopexit44 ] - %254 = getelementptr inbounds double, ptr %11, i64 %253 + br i1 %ident.check88.not, label %.ph90, label %.ph90.lver.orig + +.ph90.lver.orig: ; preds = %.lver.check89, %.ph90.lver.orig + %91 = phi i64 [ %101, %.ph90.lver.orig ], [ 1, %.lver.check89 ] + %92 = mul nsw i64 %91, %70 + %93 = getelementptr double, ptr %89, i64 %92 + %94 = load double, ptr %93, align 8, !tbaa !7 + %95 = getelementptr double, ptr %90, i64 %92 + %96 = load double, ptr %95, align 8, !tbaa !7 + %97 = fmul double %96, %86 + %98 = tail call double @llvm.fmuladd.f64(double %77, double %94, double %97) + store double %98, ptr %93, align 8, !tbaa !7 + %99 = fmul double %77, %96 + %100 = tail call double @llvm.fmuladd.f64(double %79, double %94, double %99) + store double %100, ptr %95, align 8, !tbaa !7 + %101 = add nuw nsw i64 %91, 1 + %102 = icmp eq i64 %101, %88 + br i1 %102, label %.loopexit52, label %.ph90.lver.orig, !llvm.loop !9 + +.ph90: ; preds = %.lver.check89 + %load_initial95 = load double, ptr %scevgep94, align 8 + br label %103 + +103: ; preds = %103, %.ph90 + %store_forwarded96 = phi double [ %load_initial95, %.ph90 ], [ %110, %103 ] + %104 = phi i64 [ 1, %.ph90 ], [ %113, %103 ] + %105 = mul nuw nsw i64 %104, %70 + %106 = getelementptr double, ptr %89, i64 %105 + %107 = load double, ptr %106, align 8, !tbaa !7 + %108 = getelementptr double, ptr %90, i64 %105 + %109 = fmul double %store_forwarded96, %86 + %110 = tail call double @llvm.fmuladd.f64(double %77, double %107, double %109) + store double %110, ptr %106, align 8, !tbaa !7 + %111 = fmul double %77, %store_forwarded96 + %112 = tail call double @llvm.fmuladd.f64(double %79, double %107, double %111) + store double %112, ptr %108, align 8, !tbaa !7 + %113 = add nuw nsw i64 %104, 1 + %114 = icmp eq i64 %113, %88 + br i1 %114, label %.loopexit52, label %103, !llvm.loop !9 + +.loopexit52: ; preds = %.ph90.lver.orig, %103, %83, %73 + %115 = add nuw nsw i64 %74, 1 + %116 = icmp eq i64 %115, %71 + %indvar.next93 = add i64 %indvar92, 1 + br i1 %116, label %.loopexit31, label %73, !llvm.loop !12 + +117: ; preds = %63 + %118 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 + %119 = icmp eq i32 %118, 0 + br i1 %119, label %.loopexit31, label %120 + +120: ; preds = %117 + %121 = load i32, ptr %3, align 4, !tbaa !3 + %122 = icmp sgt i32 %121, 1 + br i1 %122, label %123, label %.loopexit31 + +123: ; preds = %120 + %124 = sext i32 %13 to i64 + %125 = zext nneg i32 %121 to i64 + %126 = shl nuw nsw i64 %125, 3 + %127 = add nsw i64 %126, -16 + %ident.check.not = icmp eq i32 %13, 1 + br label %128 + +128: ; preds = %.loopexit50, %123 + %indvar = phi i64 [ %indvar.next, %.loopexit50 ], [ 0, %123 ] + %129 = phi i64 [ %132, %.loopexit50 ], [ %125, %123 ] + %130 = shl i64 %indvar, 3 + %131 = sub i64 %127, %130 + %scevgep = getelementptr i8, ptr %7, i64 %131 + %132 = add nsw i64 %129, -1 + %133 = getelementptr inbounds double, ptr %11, i64 %132 + %134 = load double, ptr %133, align 8, !tbaa !7 + %135 = getelementptr inbounds double, ptr %12, i64 %132 + %136 = load double, ptr %135, align 8, !tbaa !7 + %137 = fcmp une double %134, 1.000000e+00 + %138 = fcmp une double %136, 0.000000e+00 + %139 = select i1 %137, i1 true, i1 %138 + br i1 %139, label %140, label %.loopexit50 + +140: ; preds = %128 + %141 = load i32, ptr %4, align 4, !tbaa !3 + %142 = icmp slt i32 %141, 1 + br i1 %142, label %.loopexit50, label %.lver.check + +.lver.check: ; preds = %140 + %143 = fneg double %136 + %144 = add nuw i32 %141, 1 + %145 = zext i32 %144 to i64 + %146 = getelementptr double, ptr %16, i64 %129 + %147 = getelementptr double, ptr %16, i64 %132 + br i1 %ident.check.not, label %.ph, label %.ph.lver.orig + +.ph.lver.orig: ; preds = %.lver.check, %.ph.lver.orig + %148 = phi i64 [ %158, %.ph.lver.orig ], [ 1, %.lver.check ] + %149 = mul nsw i64 %148, %124 + %150 = getelementptr double, ptr %146, i64 %149 + %151 = load double, ptr %150, align 8, !tbaa !7 + %152 = getelementptr double, ptr %147, i64 %149 + %153 = load double, ptr %152, align 8, !tbaa !7 + %154 = fmul double %153, %143 + %155 = tail call double @llvm.fmuladd.f64(double %134, double %151, double %154) + store double %155, ptr %150, align 8, !tbaa !7 + %156 = fmul double %134, %153 + %157 = tail call double @llvm.fmuladd.f64(double %136, double %151, double %156) + store double %157, ptr %152, align 8, !tbaa !7 + %158 = add nuw nsw i64 %148, 1 + %159 = icmp eq i64 %158, %145 + br i1 %159, label %.loopexit50, label %.ph.lver.orig, !llvm.loop !13 + +.ph: ; preds = %.lver.check + %load_initial = load double, ptr %scevgep, align 8 + br label %160 + +160: ; preds = %160, %.ph + %store_forwarded = phi double [ %load_initial, %.ph ], [ %167, %160 ] + %161 = phi i64 [ 1, %.ph ], [ %170, %160 ] + %162 = mul nuw nsw i64 %161, %124 + %163 = getelementptr double, ptr %146, i64 %162 + %164 = load double, ptr %163, align 8, !tbaa !7 + %165 = getelementptr double, ptr %147, i64 %162 + %166 = fmul double %store_forwarded, %143 + %167 = tail call double @llvm.fmuladd.f64(double %134, double %164, double %166) + store double %167, ptr %163, align 8, !tbaa !7 + %168 = fmul double %134, %store_forwarded + %169 = tail call double @llvm.fmuladd.f64(double %136, double %164, double %168) + store double %169, ptr %165, align 8, !tbaa !7 + %170 = add nuw nsw i64 %161, 1 + %171 = icmp eq i64 %170, %145 + br i1 %171, label %.loopexit50, label %160, !llvm.loop !13 + +.loopexit50: ; preds = %.ph.lver.orig, %160, %140, %128 + %172 = icmp sgt i64 %129, 2 + %indvar.next = add i64 %indvar, 1 + br i1 %172, label %128, label %.loopexit31, !llvm.loop !14 + +173: ; preds = %60 + %174 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5 + %175 = icmp eq i32 %174, 0 + br i1 %175, label %264, label %176 + +176: ; preds = %173 + %177 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 + %178 = icmp eq i32 %177, 0 + br i1 %178, label %221, label %179 + +179: ; preds = %176 + %180 = load i32, ptr %3, align 4, !tbaa !3 + %181 = icmp slt i32 %180, 2 + br i1 %181, label %.loopexit31, label %182 + +182: ; preds = %179 + %183 = getelementptr i8, ptr %16, i64 8 + %184 = sext i32 %13 to i64 + %185 = add nuw i32 %180, 1 + %186 = zext i32 %185 to i64 + br label %187 + +187: ; preds = %.loopexit48, %182 + %188 = phi i64 [ 2, %182 ], [ %219, %.loopexit48 ] + %189 = add nsw i64 %188, -1 + %190 = getelementptr inbounds double, ptr %11, i64 %189 + %191 = load double, ptr %190, align 8, !tbaa !7 + %192 = getelementptr inbounds double, ptr %12, i64 %189 + %193 = load double, ptr %192, align 8, !tbaa !7 + %194 = fcmp une double %191, 1.000000e+00 + %195 = fcmp une double %193, 0.000000e+00 + %196 = select i1 %194, i1 true, i1 %195 + br i1 %196, label %197, label %.loopexit48 + +197: ; preds = %187 + %198 = load i32, ptr %4, align 4, !tbaa !3 + %199 = icmp slt i32 %198, 1 + br i1 %199, label %.loopexit48, label %200 + +200: ; preds = %197 + %201 = fneg double %193 + %202 = add nuw i32 %198, 1 + %203 = zext i32 %202 to i64 + %204 = getelementptr double, ptr %16, i64 %188 + br label %205 + +205: ; preds = %205, %200 + %206 = phi i64 [ 1, %200 ], [ %217, %205 ] + %207 = mul nsw i64 %206, %184 + %208 = getelementptr double, ptr %204, i64 %207 + %209 = load double, ptr %208, align 8, !tbaa !7 + %210 = getelementptr double, ptr %183, i64 %207 + %211 = load double, ptr %210, align 8, !tbaa !7 + %212 = fmul double %211, %201 + %213 = tail call double @llvm.fmuladd.f64(double %191, double %209, double %212) + store double %213, ptr %208, align 8, !tbaa !7 + %214 = load double, ptr %210, align 8, !tbaa !7 + %215 = fmul double %191, %214 + %216 = tail call double @llvm.fmuladd.f64(double %193, double %209, double %215) + store double %216, ptr %210, align 8, !tbaa !7 + %217 = add nuw nsw i64 %206, 1 + %218 = icmp eq i64 %217, %203 + br i1 %218, label %.loopexit48, label %205, !llvm.loop !15 + +.loopexit48: ; preds = %205, %197, %187 + %219 = add nuw nsw i64 %188, 1 + %220 = icmp eq i64 %219, %186 + br i1 %220, label %.loopexit31, label %187, !llvm.loop !16 + +221: ; preds = %176 + %222 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 + %223 = icmp eq i32 %222, 0 + br i1 %223, label %.loopexit31, label %224 + +224: ; preds = %221 + %225 = load i32, ptr %3, align 4, !tbaa !3 + %226 = icmp sgt i32 %225, 1 + br i1 %226, label %227, label %.loopexit31 + +227: ; preds = %224 + %228 = getelementptr i8, ptr %16, i64 8 + %229 = sext i32 %13 to i64 + %230 = zext nneg i32 %225 to i64 + br label %231 + +231: ; preds = %.loopexit46, %227 + %232 = phi i64 [ %230, %227 ], [ %233, %.loopexit46 ] + %233 = add nsw i64 %232, -1 + %234 = getelementptr inbounds double, ptr %11, i64 %233 + %235 = load double, ptr %234, align 8, !tbaa !7 + %236 = getelementptr inbounds double, ptr %12, i64 %233 + %237 = load double, ptr %236, align 8, !tbaa !7 + %238 = fcmp une double %235, 1.000000e+00 + %239 = fcmp une double %237, 0.000000e+00 + %240 = select i1 %238, i1 true, i1 %239 + br i1 %240, label %241, label %.loopexit46 + +241: ; preds = %231 + %242 = load i32, ptr %4, align 4, !tbaa !3 + %243 = icmp slt i32 %242, 1 + br i1 %243, label %.loopexit46, label %244 + +244: ; preds = %241 + %245 = fneg double %237 + %246 = add nuw i32 %242, 1 + %247 = zext i32 %246 to i64 + %248 = getelementptr double, ptr %16, i64 %232 + br label %249 + +249: ; preds = %249, %244 + %250 = phi i64 [ 1, %244 ], [ %261, %249 ] + %251 = mul nsw i64 %250, %229 + %252 = getelementptr double, ptr %248, i64 %251 + %253 = load double, ptr %252, align 8, !tbaa !7 + %254 = getelementptr double, ptr %228, i64 %251 %255 = load double, ptr %254, align 8, !tbaa !7 - %256 = getelementptr inbounds double, ptr %12, i64 %253 - %257 = load double, ptr %256, align 8, !tbaa !7 - %258 = fcmp une double %255, 1.000000e+00 - %259 = fcmp une double %257, 0.000000e+00 - %260 = select i1 %258, i1 true, i1 %259 - br i1 %260, label %261, label %.loopexit44 - -261: ; preds = %252 - %262 = load i32, ptr %4, align 4, !tbaa !3 - %263 = icmp slt i32 %262, 1 - br i1 %263, label %.loopexit44, label %264 - -264: ; preds = %261 - %265 = fneg double %257 - %266 = add nuw i32 %262, 1 - %267 = zext i32 %266 to i64 - %268 = getelementptr double, ptr %16, i64 %253 - br label %269 - -269: ; preds = %269, %264 - %270 = phi i64 [ 1, %264 ], [ %281, %269 ] - %271 = mul nsw i64 %270, %249 - %272 = getelementptr double, ptr %268, i64 %271 - %273 = load double, ptr %272, align 8, !tbaa !7 - %274 = getelementptr double, ptr %251, i64 %271 - %275 = load double, ptr %274, align 8, !tbaa !7 - %276 = fmul double %255, %273 - %277 = tail call double @llvm.fmuladd.f64(double %257, double %275, double %276) - store double %277, ptr %272, align 8, !tbaa !7 - %278 = load double, ptr %274, align 8, !tbaa !7 - %279 = fmul double %273, %265 - %280 = tail call double @llvm.fmuladd.f64(double %255, double %278, double %279) - store double %280, ptr %274, align 8, !tbaa !7 - %281 = add nuw nsw i64 %270, 1 - %282 = icmp eq i64 %281, %267 - br i1 %282, label %.loopexit44, label %269, !llvm.loop !19 - -.loopexit44: ; preds = %269, %261, %252 - %283 = add nuw nsw i64 %253, 1 - %284 = icmp eq i64 %283, %250 - br i1 %284, label %.loopexit31, label %252, !llvm.loop !20 - -285: ; preds = %242 - %286 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 - %287 = icmp eq i32 %286, 0 - br i1 %287, label %.loopexit31, label %288 - -288: ; preds = %285 - %289 = load i32, ptr %3, align 4, !tbaa !3 - %290 = icmp sgt i32 %289, 1 - br i1 %290, label %291, label %.loopexit31 - -291: ; preds = %288 - %292 = sext i32 %13 to i64 - %293 = zext nneg i32 %289 to i64 - %294 = getelementptr double, ptr %16, i64 %293 - br label %295 - -295: ; preds = %.loopexit42, %291 - %296 = phi i64 [ %293, %291 ], [ %297, %.loopexit42 ] - %297 = add nsw i64 %296, -1 - %298 = getelementptr inbounds double, ptr %11, i64 %297 - %299 = load double, ptr %298, align 8, !tbaa !7 - %300 = getelementptr inbounds double, ptr %12, i64 %297 - %301 = load double, ptr %300, align 8, !tbaa !7 - %302 = fcmp une double %299, 1.000000e+00 - %303 = fcmp une double %301, 0.000000e+00 - %304 = select i1 %302, i1 true, i1 %303 - br i1 %304, label %305, label %.loopexit42 - -305: ; preds = %295 - %306 = load i32, ptr %4, align 4, !tbaa !3 - %307 = icmp slt i32 %306, 1 - br i1 %307, label %.loopexit42, label %308 - -308: ; preds = %305 - %309 = fneg double %301 - %310 = add nuw i32 %306, 1 - %311 = zext i32 %310 to i64 - %312 = getelementptr double, ptr %16, i64 %297 - br label %313 - -313: ; preds = %313, %308 - %314 = phi i64 [ 1, %308 ], [ %325, %313 ] - %315 = mul nsw i64 %314, %292 - %316 = getelementptr double, ptr %312, i64 %315 - %317 = load double, ptr %316, align 8, !tbaa !7 - %318 = getelementptr double, ptr %294, i64 %315 - %319 = load double, ptr %318, align 8, !tbaa !7 - %320 = fmul double %299, %317 - %321 = tail call double @llvm.fmuladd.f64(double %301, double %319, double %320) - store double %321, ptr %316, align 8, !tbaa !7 - %322 = load double, ptr %318, align 8, !tbaa !7 - %323 = fmul double %317, %309 - %324 = tail call double @llvm.fmuladd.f64(double %299, double %322, double %323) - store double %324, ptr %318, align 8, !tbaa !7 - %325 = add nuw nsw i64 %314, 1 - %326 = icmp eq i64 %325, %311 - br i1 %326, label %.loopexit42, label %313, !llvm.loop !21 - -.loopexit42: ; preds = %313, %305, %295 - %327 = icmp sgt i64 %296, 2 - br i1 %327, label %295, label %.loopexit31, !llvm.loop !22 - -328: ; preds = %57 - %329 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5 - %330 = icmp eq i32 %329, 0 - br i1 %330, label %.loopexit31, label %331 - -331: ; preds = %328 - %332 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.2) #5 - %333 = icmp eq i32 %332, 0 - br i1 %333, label %423, label %334 - -334: ; preds = %331 - %335 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 - %336 = icmp eq i32 %335, 0 - br i1 %336, label %379, label %337 - -337: ; preds = %334 - %338 = load i32, ptr %4, align 4, !tbaa !3 - %339 = icmp sgt i32 %338, 1 - br i1 %339, label %340, label %.loopexit31 - -340: ; preds = %337 - %341 = sext i32 %13 to i64 - %342 = zext nneg i32 %338 to i64 - br label %343 - -343: ; preds = %.loopexit40, %340 - %344 = phi i64 [ 1, %340 ], [ %377, %.loopexit40 ] - %345 = getelementptr inbounds double, ptr %11, i64 %344 - %346 = load double, ptr %345, align 8, !tbaa !7 - %347 = getelementptr inbounds double, ptr %12, i64 %344 - %348 = load double, ptr %347, align 8, !tbaa !7 - %349 = fcmp une double %346, 1.000000e+00 - %350 = fcmp une double %348, 0.000000e+00 - %351 = select i1 %349, i1 true, i1 %350 - br i1 %351, label %352, label %.loopexit40 - -352: ; preds = %343 - %353 = load i32, ptr %3, align 4, !tbaa !3 - %354 = icmp slt i32 %353, 1 - br i1 %354, label %.loopexit40, label %355 - -355: ; preds = %352 - %356 = add nuw nsw i64 %344, 1 - %357 = mul nsw i64 %356, %341 - %358 = mul nsw i64 %344, %341 - %359 = fneg double %348 - %360 = add nuw i32 %353, 1 - %361 = zext i32 %360 to i64 - %362 = getelementptr double, ptr %16, i64 %357 - %363 = getelementptr double, ptr %16, i64 %358 - br label %364 - -364: ; preds = %364, %355 - %365 = phi i64 [ 1, %355 ], [ %375, %364 ] - %366 = getelementptr double, ptr %362, i64 %365 - %367 = load double, ptr %366, align 8, !tbaa !7 - %368 = getelementptr double, ptr %363, i64 %365 - %369 = load double, ptr %368, align 8, !tbaa !7 - %370 = fmul double %369, %359 - %371 = tail call double @llvm.fmuladd.f64(double %346, double %367, double %370) - store double %371, ptr %366, align 8, !tbaa !7 - %372 = load double, ptr %368, align 8, !tbaa !7 - %373 = fmul double %346, %372 - %374 = tail call double @llvm.fmuladd.f64(double %348, double %367, double %373) - store double %374, ptr %368, align 8, !tbaa !7 - %375 = add nuw nsw i64 %365, 1 - %376 = icmp eq i64 %375, %361 - br i1 %376, label %.loopexit40, label %364, !llvm.loop !23 - -.loopexit40: ; preds = %364, %352, %343 - %377 = add nuw nsw i64 %344, 1 - %378 = icmp eq i64 %377, %342 - br i1 %378, label %.loopexit31, label %343, !llvm.loop !24 - -379: ; preds = %334 - %380 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 - %381 = icmp eq i32 %380, 0 - br i1 %381, label %.loopexit31, label %382 - -382: ; preds = %379 - %383 = load i32, ptr %4, align 4, !tbaa !3 - %384 = icmp sgt i32 %383, 1 - br i1 %384, label %385, label %.loopexit31 - -385: ; preds = %382 - %386 = zext nneg i32 %383 to i64 - %387 = sext i32 %13 to i64 - br label %388 - -388: ; preds = %.loopexit38, %385 - %389 = phi i64 [ %386, %385 ], [ %390, %.loopexit38 ] - %390 = add nsw i64 %389, -1 - %391 = getelementptr inbounds double, ptr %11, i64 %390 + %256 = fmul double %255, %245 + %257 = tail call double @llvm.fmuladd.f64(double %235, double %253, double %256) + store double %257, ptr %252, align 8, !tbaa !7 + %258 = load double, ptr %254, align 8, !tbaa !7 + %259 = fmul double %235, %258 + %260 = tail call double @llvm.fmuladd.f64(double %237, double %253, double %259) + store double %260, ptr %254, align 8, !tbaa !7 + %261 = add nuw nsw i64 %250, 1 + %262 = icmp eq i64 %261, %247 + br i1 %262, label %.loopexit46, label %249, !llvm.loop !17 + +.loopexit46: ; preds = %249, %241, %231 + %263 = icmp sgt i64 %232, 2 + br i1 %263, label %231, label %.loopexit31, !llvm.loop !18 + +264: ; preds = %173 + %265 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #5 + %266 = icmp eq i32 %265, 0 + br i1 %266, label %.loopexit31, label %267 + +267: ; preds = %264 + %268 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 + %269 = icmp eq i32 %268, 0 + br i1 %269, label %310, label %270 + +270: ; preds = %267 + %271 = load i32, ptr %3, align 4, !tbaa !3 + %272 = icmp sgt i32 %271, 1 + br i1 %272, label %273, label %.loopexit31 + +273: ; preds = %270 + %274 = sext i32 %13 to i64 + %275 = zext nneg i32 %271 to i64 + %276 = getelementptr double, ptr %16, i64 %275 + br label %277 + +277: ; preds = %.loopexit44, %273 + %278 = phi i64 [ 1, %273 ], [ %308, %.loopexit44 ] + %279 = getelementptr inbounds double, ptr %11, i64 %278 + %280 = load double, ptr %279, align 8, !tbaa !7 + %281 = getelementptr inbounds double, ptr %12, i64 %278 + %282 = load double, ptr %281, align 8, !tbaa !7 + %283 = fcmp une double %280, 1.000000e+00 + %284 = fcmp une double %282, 0.000000e+00 + %285 = select i1 %283, i1 true, i1 %284 + br i1 %285, label %286, label %.loopexit44 + +286: ; preds = %277 + %287 = load i32, ptr %4, align 4, !tbaa !3 + %288 = icmp slt i32 %287, 1 + br i1 %288, label %.loopexit44, label %289 + +289: ; preds = %286 + %290 = fneg double %282 + %291 = add nuw i32 %287, 1 + %292 = zext i32 %291 to i64 + %293 = getelementptr double, ptr %16, i64 %278 + br label %294 + +294: ; preds = %294, %289 + %295 = phi i64 [ 1, %289 ], [ %306, %294 ] + %296 = mul nsw i64 %295, %274 + %297 = getelementptr double, ptr %293, i64 %296 + %298 = load double, ptr %297, align 8, !tbaa !7 + %299 = getelementptr double, ptr %276, i64 %296 + %300 = load double, ptr %299, align 8, !tbaa !7 + %301 = fmul double %280, %298 + %302 = tail call double @llvm.fmuladd.f64(double %282, double %300, double %301) + store double %302, ptr %297, align 8, !tbaa !7 + %303 = load double, ptr %299, align 8, !tbaa !7 + %304 = fmul double %298, %290 + %305 = tail call double @llvm.fmuladd.f64(double %280, double %303, double %304) + store double %305, ptr %299, align 8, !tbaa !7 + %306 = add nuw nsw i64 %295, 1 + %307 = icmp eq i64 %306, %292 + br i1 %307, label %.loopexit44, label %294, !llvm.loop !19 + +.loopexit44: ; preds = %294, %286, %277 + %308 = add nuw nsw i64 %278, 1 + %309 = icmp eq i64 %308, %275 + br i1 %309, label %.loopexit31, label %277, !llvm.loop !20 + +310: ; preds = %267 + %311 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 + %312 = icmp eq i32 %311, 0 + br i1 %312, label %.loopexit31, label %313 + +313: ; preds = %310 + %314 = load i32, ptr %3, align 4, !tbaa !3 + %315 = icmp sgt i32 %314, 1 + br i1 %315, label %316, label %.loopexit31 + +316: ; preds = %313 + %317 = sext i32 %13 to i64 + %318 = zext nneg i32 %314 to i64 + %319 = getelementptr double, ptr %16, i64 %318 + br label %320 + +320: ; preds = %.loopexit42, %316 + %321 = phi i64 [ %318, %316 ], [ %322, %.loopexit42 ] + %322 = add nsw i64 %321, -1 + %323 = getelementptr inbounds double, ptr %11, i64 %322 + %324 = load double, ptr %323, align 8, !tbaa !7 + %325 = getelementptr inbounds double, ptr %12, i64 %322 + %326 = load double, ptr %325, align 8, !tbaa !7 + %327 = fcmp une double %324, 1.000000e+00 + %328 = fcmp une double %326, 0.000000e+00 + %329 = select i1 %327, i1 true, i1 %328 + br i1 %329, label %330, label %.loopexit42 + +330: ; preds = %320 + %331 = load i32, ptr %4, align 4, !tbaa !3 + %332 = icmp slt i32 %331, 1 + br i1 %332, label %.loopexit42, label %333 + +333: ; preds = %330 + %334 = fneg double %326 + %335 = add nuw i32 %331, 1 + %336 = zext i32 %335 to i64 + %337 = getelementptr double, ptr %16, i64 %322 + br label %338 + +338: ; preds = %338, %333 + %339 = phi i64 [ 1, %333 ], [ %350, %338 ] + %340 = mul nsw i64 %339, %317 + %341 = getelementptr double, ptr %337, i64 %340 + %342 = load double, ptr %341, align 8, !tbaa !7 + %343 = getelementptr double, ptr %319, i64 %340 + %344 = load double, ptr %343, align 8, !tbaa !7 + %345 = fmul double %324, %342 + %346 = tail call double @llvm.fmuladd.f64(double %326, double %344, double %345) + store double %346, ptr %341, align 8, !tbaa !7 + %347 = load double, ptr %343, align 8, !tbaa !7 + %348 = fmul double %342, %334 + %349 = tail call double @llvm.fmuladd.f64(double %324, double %347, double %348) + store double %349, ptr %343, align 8, !tbaa !7 + %350 = add nuw nsw i64 %339, 1 + %351 = icmp eq i64 %350, %336 + br i1 %351, label %.loopexit42, label %338, !llvm.loop !21 + +.loopexit42: ; preds = %338, %330, %320 + %352 = icmp sgt i64 %321, 2 + br i1 %352, label %320, label %.loopexit31, !llvm.loop !22 + +353: ; preds = %57 + %354 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #5 + %355 = icmp eq i32 %354, 0 + br i1 %355, label %.loopexit31, label %356 + +356: ; preds = %353 + %357 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.2) #5 + %358 = icmp eq i32 %357, 0 + br i1 %358, label %448, label %359 + +359: ; preds = %356 + %360 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 + %361 = icmp eq i32 %360, 0 + br i1 %361, label %404, label %362 + +362: ; preds = %359 + %363 = load i32, ptr %4, align 4, !tbaa !3 + %364 = icmp sgt i32 %363, 1 + br i1 %364, label %365, label %.loopexit31 + +365: ; preds = %362 + %366 = sext i32 %13 to i64 + %367 = zext nneg i32 %363 to i64 + br label %368 + +368: ; preds = %.loopexit40, %365 + %369 = phi i64 [ 1, %365 ], [ %402, %.loopexit40 ] + %370 = getelementptr inbounds double, ptr %11, i64 %369 + %371 = load double, ptr %370, align 8, !tbaa !7 + %372 = getelementptr inbounds double, ptr %12, i64 %369 + %373 = load double, ptr %372, align 8, !tbaa !7 + %374 = fcmp une double %371, 1.000000e+00 + %375 = fcmp une double %373, 0.000000e+00 + %376 = select i1 %374, i1 true, i1 %375 + br i1 %376, label %377, label %.loopexit40 + +377: ; preds = %368 + %378 = load i32, ptr %3, align 4, !tbaa !3 + %379 = icmp slt i32 %378, 1 + br i1 %379, label %.loopexit40, label %380 + +380: ; preds = %377 + %381 = add nuw nsw i64 %369, 1 + %382 = mul nsw i64 %381, %366 + %383 = mul nsw i64 %369, %366 + %384 = fneg double %373 + %385 = add nuw i32 %378, 1 + %386 = zext i32 %385 to i64 + %387 = getelementptr double, ptr %16, i64 %382 + %388 = getelementptr double, ptr %16, i64 %383 + br label %389 + +389: ; preds = %389, %380 + %390 = phi i64 [ 1, %380 ], [ %400, %389 ] + %391 = getelementptr double, ptr %387, i64 %390 %392 = load double, ptr %391, align 8, !tbaa !7 - %393 = getelementptr inbounds double, ptr %12, i64 %390 + %393 = getelementptr double, ptr %388, i64 %390 %394 = load double, ptr %393, align 8, !tbaa !7 - %395 = fcmp une double %392, 1.000000e+00 - %396 = fcmp une double %394, 0.000000e+00 - %397 = select i1 %395, i1 true, i1 %396 - br i1 %397, label %398, label %.loopexit38 - -398: ; preds = %388 - %399 = load i32, ptr %3, align 4, !tbaa !3 - %400 = icmp slt i32 %399, 1 - br i1 %400, label %.loopexit38, label %401 - -401: ; preds = %398 - %402 = mul nsw i64 %389, %387 - %403 = mul nsw i64 %390, %387 - %404 = fneg double %394 - %405 = add nuw i32 %399, 1 - %406 = zext i32 %405 to i64 - %407 = getelementptr double, ptr %16, i64 %402 - %408 = getelementptr double, ptr %16, i64 %403 - br label %409 - -409: ; preds = %409, %401 - %410 = phi i64 [ 1, %401 ], [ %420, %409 ] - %411 = getelementptr double, ptr %407, i64 %410 - %412 = load double, ptr %411, align 8, !tbaa !7 - %413 = getelementptr double, ptr %408, i64 %410 - %414 = load double, ptr %413, align 8, !tbaa !7 - %415 = fmul double %414, %404 - %416 = tail call double @llvm.fmuladd.f64(double %392, double %412, double %415) - store double %416, ptr %411, align 8, !tbaa !7 - %417 = load double, ptr %413, align 8, !tbaa !7 - %418 = fmul double %392, %417 - %419 = tail call double @llvm.fmuladd.f64(double %394, double %412, double %418) - store double %419, ptr %413, align 8, !tbaa !7 - %420 = add nuw nsw i64 %410, 1 - %421 = icmp eq i64 %420, %406 - br i1 %421, label %.loopexit38, label %409, !llvm.loop !25 - -.loopexit38: ; preds = %409, %398, %388 - %422 = icmp sgt i64 %389, 2 - br i1 %422, label %388, label %.loopexit31, !llvm.loop !26 - -423: ; preds = %331 - %424 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5 - %425 = icmp eq i32 %424, 0 - br i1 %425, label %514, label %426 + %395 = fmul double %394, %384 + %396 = tail call double @llvm.fmuladd.f64(double %371, double %392, double %395) + store double %396, ptr %391, align 8, !tbaa !7 + %397 = load double, ptr %393, align 8, !tbaa !7 + %398 = fmul double %371, %397 + %399 = tail call double @llvm.fmuladd.f64(double %373, double %392, double %398) + store double %399, ptr %393, align 8, !tbaa !7 + %400 = add nuw nsw i64 %390, 1 + %401 = icmp eq i64 %400, %386 + br i1 %401, label %.loopexit40, label %389, !llvm.loop !23 + +.loopexit40: ; preds = %389, %377, %368 + %402 = add nuw nsw i64 %369, 1 + %403 = icmp eq i64 %402, %367 + br i1 %403, label %.loopexit31, label %368, !llvm.loop !24 + +404: ; preds = %359 + %405 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 + %406 = icmp eq i32 %405, 0 + br i1 %406, label %.loopexit31, label %407 + +407: ; preds = %404 + %408 = load i32, ptr %4, align 4, !tbaa !3 + %409 = icmp sgt i32 %408, 1 + br i1 %409, label %410, label %.loopexit31 + +410: ; preds = %407 + %411 = zext nneg i32 %408 to i64 + %412 = sext i32 %13 to i64 + br label %413 + +413: ; preds = %.loopexit38, %410 + %414 = phi i64 [ %411, %410 ], [ %415, %.loopexit38 ] + %415 = add nsw i64 %414, -1 + %416 = getelementptr inbounds double, ptr %11, i64 %415 + %417 = load double, ptr %416, align 8, !tbaa !7 + %418 = getelementptr inbounds double, ptr %12, i64 %415 + %419 = load double, ptr %418, align 8, !tbaa !7 + %420 = fcmp une double %417, 1.000000e+00 + %421 = fcmp une double %419, 0.000000e+00 + %422 = select i1 %420, i1 true, i1 %421 + br i1 %422, label %423, label %.loopexit38 + +423: ; preds = %413 + %424 = load i32, ptr %3, align 4, !tbaa !3 + %425 = icmp slt i32 %424, 1 + br i1 %425, label %.loopexit38, label %426 426: ; preds = %423 - %427 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 - %428 = icmp eq i32 %427, 0 - br i1 %428, label %471, label %429 - -429: ; preds = %426 - %430 = load i32, ptr %4, align 4, !tbaa !3 - %431 = icmp slt i32 %430, 2 - br i1 %431, label %.loopexit31, label %432 - -432: ; preds = %429 - %433 = sext i32 %13 to i64 - %434 = add nuw i32 %430, 1 - %435 = zext i32 %434 to i64 - %436 = getelementptr double, ptr %16, i64 %433 - br label %437 - -437: ; preds = %.loopexit36, %432 - %438 = phi i64 [ 2, %432 ], [ %469, %.loopexit36 ] - %439 = add nsw i64 %438, -1 - %440 = getelementptr inbounds double, ptr %11, i64 %439 - %441 = load double, ptr %440, align 8, !tbaa !7 - %442 = getelementptr inbounds double, ptr %12, i64 %439 - %443 = load double, ptr %442, align 8, !tbaa !7 - %444 = fcmp une double %441, 1.000000e+00 - %445 = fcmp une double %443, 0.000000e+00 - %446 = select i1 %444, i1 true, i1 %445 - br i1 %446, label %447, label %.loopexit36 - -447: ; preds = %437 - %448 = load i32, ptr %3, align 4, !tbaa !3 - %449 = icmp slt i32 %448, 1 - br i1 %449, label %.loopexit36, label %450 - -450: ; preds = %447 - %451 = mul nsw i64 %438, %433 - %452 = fneg double %443 - %453 = add nuw i32 %448, 1 - %454 = zext i32 %453 to i64 - %455 = getelementptr double, ptr %16, i64 %451 - br label %456 - -456: ; preds = %456, %450 - %457 = phi i64 [ 1, %450 ], [ %467, %456 ] - %458 = getelementptr double, ptr %455, i64 %457 - %459 = load double, ptr %458, align 8, !tbaa !7 - %460 = getelementptr double, ptr %436, i64 %457 - %461 = load double, ptr %460, align 8, !tbaa !7 - %462 = fmul double %461, %452 - %463 = tail call double @llvm.fmuladd.f64(double %441, double %459, double %462) - store double %463, ptr %458, align 8, !tbaa !7 - %464 = load double, ptr %460, align 8, !tbaa !7 - %465 = fmul double %441, %464 - %466 = tail call double @llvm.fmuladd.f64(double %443, double %459, double %465) - store double %466, ptr %460, align 8, !tbaa !7 - %467 = add nuw nsw i64 %457, 1 - %468 = icmp eq i64 %467, %454 - br i1 %468, label %.loopexit36, label %456, !llvm.loop !27 - -.loopexit36: ; preds = %456, %447, %437 - %469 = add nuw nsw i64 %438, 1 - %470 = icmp eq i64 %469, %435 - br i1 %470, label %.loopexit31, label %437, !llvm.loop !28 - -471: ; preds = %426 - %472 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 - %473 = icmp eq i32 %472, 0 - br i1 %473, label %.loopexit31, label %474 - -474: ; preds = %471 - %475 = load i32, ptr %4, align 4, !tbaa !3 - %476 = icmp sgt i32 %475, 1 - br i1 %476, label %477, label %.loopexit31 - -477: ; preds = %474 - %478 = sext i32 %13 to i64 - %479 = zext nneg i32 %475 to i64 - %480 = getelementptr double, ptr %16, i64 %478 + %427 = mul nsw i64 %414, %412 + %428 = mul nsw i64 %415, %412 + %429 = fneg double %419 + %430 = add nuw i32 %424, 1 + %431 = zext i32 %430 to i64 + %432 = getelementptr double, ptr %16, i64 %427 + %433 = getelementptr double, ptr %16, i64 %428 + br label %434 + +434: ; preds = %434, %426 + %435 = phi i64 [ 1, %426 ], [ %445, %434 ] + %436 = getelementptr double, ptr %432, i64 %435 + %437 = load double, ptr %436, align 8, !tbaa !7 + %438 = getelementptr double, ptr %433, i64 %435 + %439 = load double, ptr %438, align 8, !tbaa !7 + %440 = fmul double %439, %429 + %441 = tail call double @llvm.fmuladd.f64(double %417, double %437, double %440) + store double %441, ptr %436, align 8, !tbaa !7 + %442 = load double, ptr %438, align 8, !tbaa !7 + %443 = fmul double %417, %442 + %444 = tail call double @llvm.fmuladd.f64(double %419, double %437, double %443) + store double %444, ptr %438, align 8, !tbaa !7 + %445 = add nuw nsw i64 %435, 1 + %446 = icmp eq i64 %445, %431 + br i1 %446, label %.loopexit38, label %434, !llvm.loop !25 + +.loopexit38: ; preds = %434, %423, %413 + %447 = icmp sgt i64 %414, 2 + br i1 %447, label %413, label %.loopexit31, !llvm.loop !26 + +448: ; preds = %356 + %449 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #5 + %450 = icmp eq i32 %449, 0 + br i1 %450, label %539, label %451 + +451: ; preds = %448 + %452 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 + %453 = icmp eq i32 %452, 0 + br i1 %453, label %496, label %454 + +454: ; preds = %451 + %455 = load i32, ptr %4, align 4, !tbaa !3 + %456 = icmp slt i32 %455, 2 + br i1 %456, label %.loopexit31, label %457 + +457: ; preds = %454 + %458 = sext i32 %13 to i64 + %459 = add nuw i32 %455, 1 + %460 = zext i32 %459 to i64 + %461 = getelementptr double, ptr %16, i64 %458 + br label %462 + +462: ; preds = %.loopexit36, %457 + %463 = phi i64 [ 2, %457 ], [ %494, %.loopexit36 ] + %464 = add nsw i64 %463, -1 + %465 = getelementptr inbounds double, ptr %11, i64 %464 + %466 = load double, ptr %465, align 8, !tbaa !7 + %467 = getelementptr inbounds double, ptr %12, i64 %464 + %468 = load double, ptr %467, align 8, !tbaa !7 + %469 = fcmp une double %466, 1.000000e+00 + %470 = fcmp une double %468, 0.000000e+00 + %471 = select i1 %469, i1 true, i1 %470 + br i1 %471, label %472, label %.loopexit36 + +472: ; preds = %462 + %473 = load i32, ptr %3, align 4, !tbaa !3 + %474 = icmp slt i32 %473, 1 + br i1 %474, label %.loopexit36, label %475 + +475: ; preds = %472 + %476 = mul nsw i64 %463, %458 + %477 = fneg double %468 + %478 = add nuw i32 %473, 1 + %479 = zext i32 %478 to i64 + %480 = getelementptr double, ptr %16, i64 %476 br label %481 -481: ; preds = %.loopexit34, %477 - %482 = phi i64 [ %479, %477 ], [ %483, %.loopexit34 ] - %483 = add nsw i64 %482, -1 - %484 = getelementptr inbounds double, ptr %11, i64 %483 - %485 = load double, ptr %484, align 8, !tbaa !7 - %486 = getelementptr inbounds double, ptr %12, i64 %483 - %487 = load double, ptr %486, align 8, !tbaa !7 - %488 = fcmp une double %485, 1.000000e+00 - %489 = fcmp une double %487, 0.000000e+00 - %490 = select i1 %488, i1 true, i1 %489 - br i1 %490, label %491, label %.loopexit34 - -491: ; preds = %481 - %492 = load i32, ptr %3, align 4, !tbaa !3 - %493 = icmp slt i32 %492, 1 - br i1 %493, label %.loopexit34, label %494 - -494: ; preds = %491 - %495 = mul nsw i64 %482, %478 - %496 = fneg double %487 - %497 = add nuw i32 %492, 1 - %498 = zext i32 %497 to i64 - %499 = getelementptr double, ptr %16, i64 %495 - br label %500 - -500: ; preds = %500, %494 - %501 = phi i64 [ 1, %494 ], [ %511, %500 ] - %502 = getelementptr double, ptr %499, i64 %501 - %503 = load double, ptr %502, align 8, !tbaa !7 - %504 = getelementptr double, ptr %480, i64 %501 - %505 = load double, ptr %504, align 8, !tbaa !7 - %506 = fmul double %505, %496 - %507 = tail call double @llvm.fmuladd.f64(double %485, double %503, double %506) - store double %507, ptr %502, align 8, !tbaa !7 - %508 = load double, ptr %504, align 8, !tbaa !7 - %509 = fmul double %485, %508 - %510 = tail call double @llvm.fmuladd.f64(double %487, double %503, double %509) - store double %510, ptr %504, align 8, !tbaa !7 - %511 = add nuw nsw i64 %501, 1 - %512 = icmp eq i64 %511, %498 - br i1 %512, label %.loopexit34, label %500, !llvm.loop !29 - -.loopexit34: ; preds = %500, %491, %481 - %513 = icmp sgt i64 %482, 2 - br i1 %513, label %481, label %.loopexit31, !llvm.loop !30 - -514: ; preds = %423 - %515 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #5 - %516 = icmp eq i32 %515, 0 - br i1 %516, label %.loopexit31, label %517 - -517: ; preds = %514 - %518 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 - %519 = icmp eq i32 %518, 0 - br i1 %519, label %562, label %520 - -520: ; preds = %517 - %521 = load i32, ptr %4, align 4, !tbaa !3 - %522 = icmp sgt i32 %521, 1 - br i1 %522, label %523, label %.loopexit31 - -523: ; preds = %520 - %524 = mul nsw i32 %521, %13 - %525 = sext i32 %524 to i64 - %526 = sext i32 %13 to i64 - %527 = zext nneg i32 %521 to i64 - %528 = getelementptr double, ptr %16, i64 %525 - br label %529 - -529: ; preds = %.loopexit32, %523 - %530 = phi i64 [ 1, %523 ], [ %560, %.loopexit32 ] - %531 = getelementptr inbounds double, ptr %11, i64 %530 - %532 = load double, ptr %531, align 8, !tbaa !7 - %533 = getelementptr inbounds double, ptr %12, i64 %530 - %534 = load double, ptr %533, align 8, !tbaa !7 - %535 = fcmp une double %532, 1.000000e+00 - %536 = fcmp une double %534, 0.000000e+00 - %537 = select i1 %535, i1 true, i1 %536 - br i1 %537, label %538, label %.loopexit32 - -538: ; preds = %529 - %539 = load i32, ptr %3, align 4, !tbaa !3 - %540 = icmp slt i32 %539, 1 - br i1 %540, label %.loopexit32, label %541 - -541: ; preds = %538 - %542 = mul nsw i64 %530, %526 - %543 = fneg double %534 - %544 = add nuw i32 %539, 1 - %545 = zext i32 %544 to i64 - %546 = getelementptr double, ptr %16, i64 %542 - br label %547 - -547: ; preds = %547, %541 - %548 = phi i64 [ 1, %541 ], [ %558, %547 ] - %549 = getelementptr double, ptr %546, i64 %548 - %550 = load double, ptr %549, align 8, !tbaa !7 - %551 = getelementptr double, ptr %528, i64 %548 - %552 = load double, ptr %551, align 8, !tbaa !7 - %553 = fmul double %532, %550 - %554 = tail call double @llvm.fmuladd.f64(double %534, double %552, double %553) - store double %554, ptr %549, align 8, !tbaa !7 - %555 = load double, ptr %551, align 8, !tbaa !7 - %556 = fmul double %550, %543 - %557 = tail call double @llvm.fmuladd.f64(double %532, double %555, double %556) - store double %557, ptr %551, align 8, !tbaa !7 - %558 = add nuw nsw i64 %548, 1 - %559 = icmp eq i64 %558, %545 - br i1 %559, label %.loopexit32, label %547, !llvm.loop !31 - -.loopexit32: ; preds = %547, %538, %529 - %560 = add nuw nsw i64 %530, 1 - %561 = icmp eq i64 %560, %527 - br i1 %561, label %.loopexit31, label %529, !llvm.loop !32 - -562: ; preds = %517 - %563 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 - %564 = icmp eq i32 %563, 0 - br i1 %564, label %.loopexit31, label %565 - -565: ; preds = %562 - %566 = load i32, ptr %4, align 4, !tbaa !3 - %567 = icmp sgt i32 %566, 1 - br i1 %567, label %568, label %.loopexit31 - -568: ; preds = %565 - %569 = mul nsw i32 %566, %13 - %570 = sext i32 %569 to i64 - %571 = zext nneg i32 %566 to i64 - %572 = sext i32 %13 to i64 - %573 = getelementptr double, ptr %16, i64 %570 - br label %574 - -574: ; preds = %.loopexit, %568 - %575 = phi i64 [ %571, %568 ], [ %576, %.loopexit ] - %576 = add nsw i64 %575, -1 - %577 = getelementptr inbounds double, ptr %11, i64 %576 - %578 = load double, ptr %577, align 8, !tbaa !7 - %579 = getelementptr inbounds double, ptr %12, i64 %576 - %580 = load double, ptr %579, align 8, !tbaa !7 - %581 = fcmp une double %578, 1.000000e+00 - %582 = fcmp une double %580, 0.000000e+00 - %583 = select i1 %581, i1 true, i1 %582 - br i1 %583, label %584, label %.loopexit - -584: ; preds = %574 - %585 = load i32, ptr %3, align 4, !tbaa !3 - %586 = icmp slt i32 %585, 1 - br i1 %586, label %.loopexit, label %587 - -587: ; preds = %584 - %588 = mul nsw i64 %576, %572 - %589 = fneg double %580 - %590 = add nuw i32 %585, 1 - %591 = zext i32 %590 to i64 - %592 = getelementptr double, ptr %16, i64 %588 - br label %593 - -593: ; preds = %593, %587 - %594 = phi i64 [ 1, %587 ], [ %604, %593 ] - %595 = getelementptr double, ptr %592, i64 %594 - %596 = load double, ptr %595, align 8, !tbaa !7 - %597 = getelementptr double, ptr %573, i64 %594 - %598 = load double, ptr %597, align 8, !tbaa !7 - %599 = fmul double %578, %596 - %600 = tail call double @llvm.fmuladd.f64(double %580, double %598, double %599) - store double %600, ptr %595, align 8, !tbaa !7 - %601 = load double, ptr %597, align 8, !tbaa !7 - %602 = fmul double %596, %589 - %603 = tail call double @llvm.fmuladd.f64(double %578, double %601, double %602) - store double %603, ptr %597, align 8, !tbaa !7 - %604 = add nuw nsw i64 %594, 1 - %605 = icmp eq i64 %604, %591 - br i1 %605, label %.loopexit, label %593, !llvm.loop !33 - -.loopexit: ; preds = %593, %584, %574 - %606 = icmp sgt i64 %575, 2 - br i1 %606, label %574, label %.loopexit31, !llvm.loop !34 - -.loopexit31: ; preds = %.loopexit52, %.loopexit50, %.loopexit48, %.loopexit46, %.loopexit44, %.loopexit42, %.loopexit40, %.loopexit38, %.loopexit36, %.loopexit34, %.loopexit32, %.loopexit, %565, %562, %520, %514, %474, %471, %429, %382, %379, %337, %328, %288, %285, %245, %239, %199, %196, %154, %109, %106, %66, %54, %.thread +481: ; preds = %481, %475 + %482 = phi i64 [ 1, %475 ], [ %492, %481 ] + %483 = getelementptr double, ptr %480, i64 %482 + %484 = load double, ptr %483, align 8, !tbaa !7 + %485 = getelementptr double, ptr %461, i64 %482 + %486 = load double, ptr %485, align 8, !tbaa !7 + %487 = fmul double %486, %477 + %488 = tail call double @llvm.fmuladd.f64(double %466, double %484, double %487) + store double %488, ptr %483, align 8, !tbaa !7 + %489 = load double, ptr %485, align 8, !tbaa !7 + %490 = fmul double %466, %489 + %491 = tail call double @llvm.fmuladd.f64(double %468, double %484, double %490) + store double %491, ptr %485, align 8, !tbaa !7 + %492 = add nuw nsw i64 %482, 1 + %493 = icmp eq i64 %492, %479 + br i1 %493, label %.loopexit36, label %481, !llvm.loop !27 + +.loopexit36: ; preds = %481, %472, %462 + %494 = add nuw nsw i64 %463, 1 + %495 = icmp eq i64 %494, %460 + br i1 %495, label %.loopexit31, label %462, !llvm.loop !28 + +496: ; preds = %451 + %497 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 + %498 = icmp eq i32 %497, 0 + br i1 %498, label %.loopexit31, label %499 + +499: ; preds = %496 + %500 = load i32, ptr %4, align 4, !tbaa !3 + %501 = icmp sgt i32 %500, 1 + br i1 %501, label %502, label %.loopexit31 + +502: ; preds = %499 + %503 = sext i32 %13 to i64 + %504 = zext nneg i32 %500 to i64 + %505 = getelementptr double, ptr %16, i64 %503 + br label %506 + +506: ; preds = %.loopexit34, %502 + %507 = phi i64 [ %504, %502 ], [ %508, %.loopexit34 ] + %508 = add nsw i64 %507, -1 + %509 = getelementptr inbounds double, ptr %11, i64 %508 + %510 = load double, ptr %509, align 8, !tbaa !7 + %511 = getelementptr inbounds double, ptr %12, i64 %508 + %512 = load double, ptr %511, align 8, !tbaa !7 + %513 = fcmp une double %510, 1.000000e+00 + %514 = fcmp une double %512, 0.000000e+00 + %515 = select i1 %513, i1 true, i1 %514 + br i1 %515, label %516, label %.loopexit34 + +516: ; preds = %506 + %517 = load i32, ptr %3, align 4, !tbaa !3 + %518 = icmp slt i32 %517, 1 + br i1 %518, label %.loopexit34, label %519 + +519: ; preds = %516 + %520 = mul nsw i64 %507, %503 + %521 = fneg double %512 + %522 = add nuw i32 %517, 1 + %523 = zext i32 %522 to i64 + %524 = getelementptr double, ptr %16, i64 %520 + br label %525 + +525: ; preds = %525, %519 + %526 = phi i64 [ 1, %519 ], [ %536, %525 ] + %527 = getelementptr double, ptr %524, i64 %526 + %528 = load double, ptr %527, align 8, !tbaa !7 + %529 = getelementptr double, ptr %505, i64 %526 + %530 = load double, ptr %529, align 8, !tbaa !7 + %531 = fmul double %530, %521 + %532 = tail call double @llvm.fmuladd.f64(double %510, double %528, double %531) + store double %532, ptr %527, align 8, !tbaa !7 + %533 = load double, ptr %529, align 8, !tbaa !7 + %534 = fmul double %510, %533 + %535 = tail call double @llvm.fmuladd.f64(double %512, double %528, double %534) + store double %535, ptr %529, align 8, !tbaa !7 + %536 = add nuw nsw i64 %526, 1 + %537 = icmp eq i64 %536, %523 + br i1 %537, label %.loopexit34, label %525, !llvm.loop !29 + +.loopexit34: ; preds = %525, %516, %506 + %538 = icmp sgt i64 %507, 2 + br i1 %538, label %506, label %.loopexit31, !llvm.loop !30 + +539: ; preds = %448 + %540 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #5 + %541 = icmp eq i32 %540, 0 + br i1 %541, label %.loopexit31, label %542 + +542: ; preds = %539 + %543 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.5) #5 + %544 = icmp eq i32 %543, 0 + br i1 %544, label %587, label %545 + +545: ; preds = %542 + %546 = load i32, ptr %4, align 4, !tbaa !3 + %547 = icmp sgt i32 %546, 1 + br i1 %547, label %548, label %.loopexit31 + +548: ; preds = %545 + %549 = mul nsw i32 %546, %13 + %550 = sext i32 %549 to i64 + %551 = sext i32 %13 to i64 + %552 = zext nneg i32 %546 to i64 + %553 = getelementptr double, ptr %16, i64 %550 + br label %554 + +554: ; preds = %.loopexit32, %548 + %555 = phi i64 [ 1, %548 ], [ %585, %.loopexit32 ] + %556 = getelementptr inbounds double, ptr %11, i64 %555 + %557 = load double, ptr %556, align 8, !tbaa !7 + %558 = getelementptr inbounds double, ptr %12, i64 %555 + %559 = load double, ptr %558, align 8, !tbaa !7 + %560 = fcmp une double %557, 1.000000e+00 + %561 = fcmp une double %559, 0.000000e+00 + %562 = select i1 %560, i1 true, i1 %561 + br i1 %562, label %563, label %.loopexit32 + +563: ; preds = %554 + %564 = load i32, ptr %3, align 4, !tbaa !3 + %565 = icmp slt i32 %564, 1 + br i1 %565, label %.loopexit32, label %566 + +566: ; preds = %563 + %567 = mul nsw i64 %555, %551 + %568 = fneg double %559 + %569 = add nuw i32 %564, 1 + %570 = zext i32 %569 to i64 + %571 = getelementptr double, ptr %16, i64 %567 + br label %572 + +572: ; preds = %572, %566 + %573 = phi i64 [ 1, %566 ], [ %583, %572 ] + %574 = getelementptr double, ptr %571, i64 %573 + %575 = load double, ptr %574, align 8, !tbaa !7 + %576 = getelementptr double, ptr %553, i64 %573 + %577 = load double, ptr %576, align 8, !tbaa !7 + %578 = fmul double %557, %575 + %579 = tail call double @llvm.fmuladd.f64(double %559, double %577, double %578) + store double %579, ptr %574, align 8, !tbaa !7 + %580 = load double, ptr %576, align 8, !tbaa !7 + %581 = fmul double %575, %568 + %582 = tail call double @llvm.fmuladd.f64(double %557, double %580, double %581) + store double %582, ptr %576, align 8, !tbaa !7 + %583 = add nuw nsw i64 %573, 1 + %584 = icmp eq i64 %583, %570 + br i1 %584, label %.loopexit32, label %572, !llvm.loop !31 + +.loopexit32: ; preds = %572, %563, %554 + %585 = add nuw nsw i64 %555, 1 + %586 = icmp eq i64 %585, %552 + br i1 %586, label %.loopexit31, label %554, !llvm.loop !32 + +587: ; preds = %542 + %588 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.4) #5 + %589 = icmp eq i32 %588, 0 + br i1 %589, label %.loopexit31, label %590 + +590: ; preds = %587 + %591 = load i32, ptr %4, align 4, !tbaa !3 + %592 = icmp sgt i32 %591, 1 + br i1 %592, label %593, label %.loopexit31 + +593: ; preds = %590 + %594 = mul nsw i32 %591, %13 + %595 = sext i32 %594 to i64 + %596 = zext nneg i32 %591 to i64 + %597 = sext i32 %13 to i64 + %598 = getelementptr double, ptr %16, i64 %595 + br label %599 + +599: ; preds = %.loopexit, %593 + %600 = phi i64 [ %596, %593 ], [ %601, %.loopexit ] + %601 = add nsw i64 %600, -1 + %602 = getelementptr inbounds double, ptr %11, i64 %601 + %603 = load double, ptr %602, align 8, !tbaa !7 + %604 = getelementptr inbounds double, ptr %12, i64 %601 + %605 = load double, ptr %604, align 8, !tbaa !7 + %606 = fcmp une double %603, 1.000000e+00 + %607 = fcmp une double %605, 0.000000e+00 + %608 = select i1 %606, i1 true, i1 %607 + br i1 %608, label %609, label %.loopexit + +609: ; preds = %599 + %610 = load i32, ptr %3, align 4, !tbaa !3 + %611 = icmp slt i32 %610, 1 + br i1 %611, label %.loopexit, label %612 + +612: ; preds = %609 + %613 = mul nsw i64 %601, %597 + %614 = fneg double %605 + %615 = add nuw i32 %610, 1 + %616 = zext i32 %615 to i64 + %617 = getelementptr double, ptr %16, i64 %613 + br label %618 + +618: ; preds = %618, %612 + %619 = phi i64 [ 1, %612 ], [ %629, %618 ] + %620 = getelementptr double, ptr %617, i64 %619 + %621 = load double, ptr %620, align 8, !tbaa !7 + %622 = getelementptr double, ptr %598, i64 %619 + %623 = load double, ptr %622, align 8, !tbaa !7 + %624 = fmul double %603, %621 + %625 = tail call double @llvm.fmuladd.f64(double %605, double %623, double %624) + store double %625, ptr %620, align 8, !tbaa !7 + %626 = load double, ptr %622, align 8, !tbaa !7 + %627 = fmul double %621, %614 + %628 = tail call double @llvm.fmuladd.f64(double %603, double %626, double %627) + store double %628, ptr %622, align 8, !tbaa !7 + %629 = add nuw nsw i64 %619, 1 + %630 = icmp eq i64 %629, %616 + br i1 %630, label %.loopexit, label %618, !llvm.loop !33 + +.loopexit: ; preds = %618, %609, %599 + %631 = icmp sgt i64 %600, 2 + br i1 %631, label %599, label %.loopexit31, !llvm.loop !34 + +.loopexit31: ; preds = %.loopexit52, %.loopexit50, %.loopexit48, %.loopexit46, %.loopexit44, %.loopexit42, %.loopexit40, %.loopexit38, %.loopexit36, %.loopexit34, %.loopexit32, %.loopexit, %590, %587, %545, %539, %499, %496, %454, %407, %404, %362, %353, %313, %310, %270, %264, %224, %221, %179, %120, %117, %66, %54, %.thread call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #5 ret void } diff --git a/bench/openblas/optimized/dsptrs.c.ll b/bench/openblas/optimized/dsptrs.c.ll index 706d26635d8..69909d29c49 100644 --- a/bench/openblas/optimized/dsptrs.c.ll +++ b/bench/openblas/optimized/dsptrs.c.ll @@ -80,6 +80,8 @@ define void @dsptrs_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noun %45 = add i32 %13, 2 %46 = add i32 %13, 1 %47 = sext i32 %13 to i64 + %scevgep = getelementptr i8, ptr %5, i64 -8 + %ident.check.not = icmp eq i32 %13, 1 br label %187 48: ; preds = %42 @@ -294,11 +296,11 @@ define void @dsptrs_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noun %186 = icmp sgt i32 %184, %185 br i1 %186, label %.thread25, label %141 -187: ; preds = %302, %43 - %188 = phi i32 [ %23, %43 ], [ %303, %302 ] - %189 = phi i32 [ -1, %43 ], [ %308, %302 ] - %190 = phi i32 [ 1, %43 ], [ %307, %302 ] - %191 = phi i32 [ 1, %43 ], [ %306, %302 ] +187: ; preds = %321, %43 + %188 = phi i32 [ %23, %43 ], [ %322, %321 ] + %189 = phi i32 [ -1, %43 ], [ %327, %321 ] + %190 = phi i32 [ 1, %43 ], [ %326, %321 ] + %191 = phi i32 [ 1, %43 ], [ %325, %321 ] %192 = zext nneg i32 %191 to i64 %193 = getelementptr inbounds i32, ptr %12, i64 %192 %194 = load i32, ptr %193, align 4, !tbaa !3 @@ -357,7 +359,7 @@ define void @dsptrs_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noun %223 = load i32, ptr %1, align 4, !tbaa !3 %224 = add i32 %190, %189 %225 = add i32 %224, %223 - br label %302 + br label %321 226: ; preds = %187 %227 = sub nsw i32 0, %194 @@ -431,24 +433,29 @@ define void @dsptrs_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noun %273 = insertelement <2 x double> poison, double %265, i64 0 %274 = shufflevector <2 x double> %273, <2 x double> poison, <2 x i32> zeroinitializer %275 = fdiv <2 x double> %272, %274 - %276 = load i32, ptr %2, align 4, !tbaa !3 - store i32 %276, ptr %9, align 4, !tbaa !3 - %277 = icmp slt i32 %276, 1 - br i1 %277, label %.loopexit, label %278 - -278: ; preds = %261 - %279 = extractelement <2 x double> %275, i64 1 - %280 = extractelement <2 x double> %275, i64 0 - %281 = call double @llvm.fmuladd.f64(double %279, double %280, double -1.000000e+00) - %282 = add nuw i32 %276, 1 + %276 = extractelement <2 x double> %275, i64 0 + %277 = extractelement <2 x double> %275, i64 1 + %278 = call double @llvm.fmuladd.f64(double %277, double %276, double -1.000000e+00) + %279 = load i32, ptr %2, align 4, !tbaa !3 + store i32 %279, ptr %9, align 4, !tbaa !3 + %280 = icmp slt i32 %279, 1 + br i1 %280, label %.loopexit, label %.lver.check + +.lver.check: ; preds = %261 + %281 = zext nneg i32 %228 to i64 + %282 = add nuw i32 %279, 1 %283 = zext i32 %282 to i64 %284 = getelementptr double, ptr %16, i64 %192 - %285 = insertelement <2 x double> poison, double %281, i64 0 - %286 = shufflevector <2 x double> %285, <2 x double> poison, <2 x i32> zeroinitializer - br label %287 + %285 = getelementptr double, ptr %16, i64 %281 + br i1 %ident.check.not, label %.ph, label %.ph.lver.orig.preheader + +.ph.lver.orig.preheader: ; preds = %.lver.check + %286 = insertelement <2 x double> poison, double %278, i64 0 + %287 = shufflevector <2 x double> %286, <2 x double> poison, <2 x i32> zeroinitializer + br label %.ph.lver.orig -287: ; preds = %287, %278 - %288 = phi i64 [ 1, %278 ], [ %297, %287 ] +.ph.lver.orig: ; preds = %.ph.lver.orig.preheader, %.ph.lver.orig + %288 = phi i64 [ %297, %.ph.lver.orig ], [ 1, %.ph.lver.orig.preheader ] %289 = mul nsw i64 %288, %47 %290 = getelementptr double, ptr %284, i64 %289 %291 = load <2 x double>, ptr %290, align 8, !tbaa !7 @@ -456,147 +463,175 @@ define void @dsptrs_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noun %293 = shufflevector <2 x double> %292, <2 x double> poison, <2 x i32> %294 = fneg <2 x double> %293 %295 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %275, <2 x double> %292, <2 x double> %294) - %296 = fdiv <2 x double> %295, %286 + %296 = fdiv <2 x double> %295, %287 store <2 x double> %296, ptr %290, align 8, !tbaa !7 %297 = add nuw nsw i64 %288, 1 %298 = icmp eq i64 %297, %283 - br i1 %298, label %.loopexit, label %287, !llvm.loop !12 - -.loopexit: ; preds = %287, %261 - %299 = sub nsw i32 %262, %191 - %300 = shl i32 %299, 1 - %301 = add nsw i32 %300, %190 + br i1 %298, label %.loopexit, label %.ph.lver.orig, !llvm.loop !12 + +.ph: ; preds = %.lver.check + %299 = shl nuw nsw i64 %192, 3 + %scevgep60 = getelementptr i8, ptr %scevgep, i64 %299 + %load_initial = load double, ptr %scevgep60, align 8 + %300 = insertelement <2 x double> poison, double %278, i64 0 + %301 = shufflevector <2 x double> %300, <2 x double> poison, <2 x i32> zeroinitializer br label %302 -302: ; preds = %.loopexit, %218 - %303 = phi i32 [ %262, %.loopexit ], [ %223, %218 ] - %304 = phi i32 [ 2, %.loopexit ], [ 1, %218 ] - %305 = phi i32 [ %301, %.loopexit ], [ %225, %218 ] - %306 = add nuw nsw i32 %304, %191 - %307 = add nsw i32 %305, 1 - %308 = sub nsw i32 0, %306 - %309 = icmp sgt i32 %306, %303 - br i1 %309, label %310, label %187 - -310: ; preds = %302 - %311 = icmp slt i32 %303, 1 - br i1 %311, label %.thread25, label %312 - -312: ; preds = %310 - %313 = add nuw nsw i32 %303, 1 - %314 = mul nuw nsw i32 %313, %303 - %315 = lshr i32 %314, 1 - %316 = add nuw nsw i32 %315, 1 - %317 = add i32 %13, -1 - br label %318 - -318: ; preds = %387, %312 - %319 = phi i32 [ %316, %312 ], [ %389, %387 ] - %320 = phi i32 [ %303, %312 ], [ %390, %387 ] - %321 = load i32, ptr %1, align 4, !tbaa !3 - %322 = sub nsw i32 %321, %320 - %323 = xor i32 %322, -1 - %324 = add i32 %319, %323 - %325 = zext nneg i32 %320 to i64 - %326 = getelementptr inbounds i32, ptr %12, i64 %325 - %327 = load i32, ptr %326, align 4, !tbaa !3 - %328 = icmp sgt i32 %327, 0 - %329 = icmp slt i32 %320, %321 - br i1 %328, label %330, label %351 - -330: ; preds = %318 - br i1 %329, label %331, label %341 - -331: ; preds = %330 - store i32 %322, ptr %9, align 4, !tbaa !3 - %332 = add i32 %320, %46 - %333 = sext i32 %332 to i64 - %334 = getelementptr inbounds double, ptr %16, i64 %333 - %335 = sub i32 %319, %322 - %336 = sext i32 %335 to i64 - %337 = getelementptr inbounds double, ptr %11, i64 %336 - %338 = add nsw i32 %320, %13 - %339 = sext i32 %338 to i64 - %340 = getelementptr inbounds double, ptr %16, i64 %339 - call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %9, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %334, ptr noundef nonnull %6, ptr noundef nonnull %337, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %340, ptr noundef nonnull %6) #5 - %.pre36 = load i32, ptr %326, align 4, !tbaa !3 - br label %341 - -341: ; preds = %331, %330 - %342 = phi i32 [ %.pre36, %331 ], [ %327, %330 ] - %343 = icmp eq i32 %342, %320 - br i1 %343, label %387, label %344 - -344: ; preds = %341 - %345 = add nsw i32 %320, %13 - %346 = sext i32 %345 to i64 - %347 = getelementptr inbounds double, ptr %16, i64 %346 - %348 = add nsw i32 %342, %13 - %349 = sext i32 %348 to i64 - %350 = getelementptr inbounds double, ptr %16, i64 %349 - call void @dswap_(ptr noundef nonnull %2, ptr noundef %347, ptr noundef nonnull %6, ptr noundef %350, ptr noundef nonnull %6) #5 - br label %387 - -351: ; preds = %318 - br i1 %329, label %352, label %371 - -352: ; preds = %351 - store i32 %322, ptr %9, align 4, !tbaa !3 - %353 = add i32 %320, %46 - %354 = sext i32 %353 to i64 - %355 = getelementptr inbounds double, ptr %16, i64 %354 - %356 = sub i32 %319, %322 - %357 = sext i32 %356 to i64 - %358 = getelementptr inbounds double, ptr %11, i64 %357 - %359 = add nsw i32 %320, %13 - %360 = sext i32 %359 to i64 - %361 = getelementptr inbounds double, ptr %16, i64 %360 - call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %9, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %355, ptr noundef nonnull %6, ptr noundef nonnull %358, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %361, ptr noundef nonnull %6) #5 - %362 = load i32, ptr %1, align 4, !tbaa !3 - %363 = sub nsw i32 %362, %320 - store i32 %363, ptr %9, align 4, !tbaa !3 - %364 = add i32 %324, %320 - %365 = sub i32 %364, %362 - %366 = sext i32 %365 to i64 - %367 = getelementptr inbounds double, ptr %11, i64 %366 - %368 = add i32 %317, %320 - %369 = sext i32 %368 to i64 - %370 = getelementptr inbounds double, ptr %16, i64 %369 - call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %9, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %355, ptr noundef nonnull %6, ptr noundef nonnull %367, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %370, ptr noundef nonnull %6) #5 - %.pre35 = load i32, ptr %326, align 4, !tbaa !3 - br label %371 - -371: ; preds = %352, %351 - %372 = phi i32 [ %.pre35, %352 ], [ %327, %351 ] - %373 = sub nsw i32 0, %372 - %374 = icmp eq i32 %320, %373 - br i1 %374, label %382, label %375 - -375: ; preds = %371 - %376 = add nsw i32 %320, %13 - %377 = sext i32 %376 to i64 - %378 = getelementptr inbounds double, ptr %16, i64 %377 - %379 = sub i32 %13, %372 - %380 = sext i32 %379 to i64 - %381 = getelementptr inbounds double, ptr %16, i64 %380 - call void @dswap_(ptr noundef nonnull %2, ptr noundef %378, ptr noundef nonnull %6, ptr noundef %381, ptr noundef nonnull %6) #5 - br label %382 - -382: ; preds = %375, %371 - %383 = load i32, ptr %1, align 4, !tbaa !3 - %384 = add i32 %324, %320 - %385 = add i32 %384, -2 - %386 = sub i32 %385, %383 - br label %387 - -387: ; preds = %382, %344, %341 - %388 = phi i32 [ -2, %382 ], [ -1, %344 ], [ -1, %341 ] - %389 = phi i32 [ %386, %382 ], [ %324, %344 ], [ %324, %341 ] - %390 = add nsw i32 %388, %320 - %391 = icmp slt i32 %390, 1 - br i1 %391, label %.thread25, label %318 - -.thread25: ; preds = %181, %387, %310, %.loopexit30, %39, %35 +302: ; preds = %302, %.ph + %store_forwarded = phi double [ %load_initial, %.ph ], [ %317, %302 ] + %303 = phi i64 [ 1, %.ph ], [ %315, %302 ] + %304 = mul nuw nsw i64 %303, %47 + %305 = getelementptr double, ptr %284, i64 %304 + %306 = getelementptr double, ptr %285, i64 %304 + %307 = load double, ptr %306, align 8, !tbaa !7 + %308 = insertelement <2 x double> poison, double %store_forwarded, i64 0 + %309 = insertelement <2 x double> %308, double %307, i64 1 + %310 = fdiv <2 x double> %309, %274 + %311 = shufflevector <2 x double> %310, <2 x double> poison, <2 x i32> + %312 = fneg <2 x double> %311 + %313 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %275, <2 x double> %310, <2 x double> %312) + %314 = fdiv <2 x double> %313, %301 + store <2 x double> %314, ptr %305, align 8, !tbaa !7 + %315 = add nuw nsw i64 %303, 1 + %316 = icmp eq i64 %315, %283 + %317 = extractelement <2 x double> %314, i64 1 + br i1 %316, label %.loopexit, label %302, !llvm.loop !12 + +.loopexit: ; preds = %.ph.lver.orig, %302, %261 + %318 = sub nsw i32 %262, %191 + %319 = shl i32 %318, 1 + %320 = add nsw i32 %319, %190 + br label %321 + +321: ; preds = %.loopexit, %218 + %322 = phi i32 [ %262, %.loopexit ], [ %223, %218 ] + %323 = phi i32 [ 2, %.loopexit ], [ 1, %218 ] + %324 = phi i32 [ %320, %.loopexit ], [ %225, %218 ] + %325 = add nuw nsw i32 %323, %191 + %326 = add nsw i32 %324, 1 + %327 = sub nsw i32 0, %325 + %328 = icmp sgt i32 %325, %322 + br i1 %328, label %329, label %187 + +329: ; preds = %321 + %330 = icmp slt i32 %322, 1 + br i1 %330, label %.thread25, label %331 + +331: ; preds = %329 + %332 = add nuw nsw i32 %322, 1 + %333 = mul nuw nsw i32 %332, %322 + %334 = lshr i32 %333, 1 + %335 = add nuw nsw i32 %334, 1 + %336 = add i32 %13, -1 + br label %337 + +337: ; preds = %406, %331 + %338 = phi i32 [ %335, %331 ], [ %408, %406 ] + %339 = phi i32 [ %322, %331 ], [ %409, %406 ] + %340 = load i32, ptr %1, align 4, !tbaa !3 + %341 = sub nsw i32 %340, %339 + %342 = xor i32 %341, -1 + %343 = add i32 %338, %342 + %344 = zext nneg i32 %339 to i64 + %345 = getelementptr inbounds i32, ptr %12, i64 %344 + %346 = load i32, ptr %345, align 4, !tbaa !3 + %347 = icmp sgt i32 %346, 0 + %348 = icmp slt i32 %339, %340 + br i1 %347, label %349, label %370 + +349: ; preds = %337 + br i1 %348, label %350, label %360 + +350: ; preds = %349 + store i32 %341, ptr %9, align 4, !tbaa !3 + %351 = add i32 %339, %46 + %352 = sext i32 %351 to i64 + %353 = getelementptr inbounds double, ptr %16, i64 %352 + %354 = sub i32 %338, %341 + %355 = sext i32 %354 to i64 + %356 = getelementptr inbounds double, ptr %11, i64 %355 + %357 = add nsw i32 %339, %13 + %358 = sext i32 %357 to i64 + %359 = getelementptr inbounds double, ptr %16, i64 %358 + call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %9, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %353, ptr noundef nonnull %6, ptr noundef nonnull %356, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %359, ptr noundef nonnull %6) #5 + %.pre36 = load i32, ptr %345, align 4, !tbaa !3 + br label %360 + +360: ; preds = %350, %349 + %361 = phi i32 [ %.pre36, %350 ], [ %346, %349 ] + %362 = icmp eq i32 %361, %339 + br i1 %362, label %406, label %363 + +363: ; preds = %360 + %364 = add nsw i32 %339, %13 + %365 = sext i32 %364 to i64 + %366 = getelementptr inbounds double, ptr %16, i64 %365 + %367 = add nsw i32 %361, %13 + %368 = sext i32 %367 to i64 + %369 = getelementptr inbounds double, ptr %16, i64 %368 + call void @dswap_(ptr noundef nonnull %2, ptr noundef %366, ptr noundef nonnull %6, ptr noundef %369, ptr noundef nonnull %6) #5 + br label %406 + +370: ; preds = %337 + br i1 %348, label %371, label %390 + +371: ; preds = %370 + store i32 %341, ptr %9, align 4, !tbaa !3 + %372 = add i32 %339, %46 + %373 = sext i32 %372 to i64 + %374 = getelementptr inbounds double, ptr %16, i64 %373 + %375 = sub i32 %338, %341 + %376 = sext i32 %375 to i64 + %377 = getelementptr inbounds double, ptr %11, i64 %376 + %378 = add nsw i32 %339, %13 + %379 = sext i32 %378 to i64 + %380 = getelementptr inbounds double, ptr %16, i64 %379 + call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %9, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %374, ptr noundef nonnull %6, ptr noundef nonnull %377, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %380, ptr noundef nonnull %6) #5 + %381 = load i32, ptr %1, align 4, !tbaa !3 + %382 = sub nsw i32 %381, %339 + store i32 %382, ptr %9, align 4, !tbaa !3 + %383 = add i32 %343, %339 + %384 = sub i32 %383, %381 + %385 = sext i32 %384 to i64 + %386 = getelementptr inbounds double, ptr %11, i64 %385 + %387 = add i32 %336, %339 + %388 = sext i32 %387 to i64 + %389 = getelementptr inbounds double, ptr %16, i64 %388 + call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %9, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %374, ptr noundef nonnull %6, ptr noundef nonnull %386, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %389, ptr noundef nonnull %6) #5 + %.pre35 = load i32, ptr %345, align 4, !tbaa !3 + br label %390 + +390: ; preds = %371, %370 + %391 = phi i32 [ %.pre35, %371 ], [ %346, %370 ] + %392 = sub nsw i32 0, %391 + %393 = icmp eq i32 %339, %392 + br i1 %393, label %401, label %394 + +394: ; preds = %390 + %395 = add nsw i32 %339, %13 + %396 = sext i32 %395 to i64 + %397 = getelementptr inbounds double, ptr %16, i64 %396 + %398 = sub i32 %13, %391 + %399 = sext i32 %398 to i64 + %400 = getelementptr inbounds double, ptr %16, i64 %399 + call void @dswap_(ptr noundef nonnull %2, ptr noundef %397, ptr noundef nonnull %6, ptr noundef %400, ptr noundef nonnull %6) #5 + br label %401 + +401: ; preds = %394, %390 + %402 = load i32, ptr %1, align 4, !tbaa !3 + %403 = add i32 %343, %339 + %404 = add i32 %403, -2 + %405 = sub i32 %404, %402 + br label %406 + +406: ; preds = %401, %363, %360 + %407 = phi i32 [ -2, %401 ], [ -1, %363 ], [ -1, %360 ] + %408 = phi i32 [ %405, %401 ], [ %343, %363 ], [ %343, %360 ] + %409 = add nsw i32 %407, %339 + %410 = icmp slt i32 %409, 1 + br i1 %410, label %.thread25, label %337 + +.thread25: ; preds = %181, %406, %329, %.loopexit30, %39, %35 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #5 ret void diff --git a/bench/openblas/optimized/dsytrs_rook.c.ll b/bench/openblas/optimized/dsytrs_rook.c.ll index 3f66d8b92ab..40a5369e6a2 100644 --- a/bench/openblas/optimized/dsytrs_rook.c.ll +++ b/bench/openblas/optimized/dsytrs_rook.c.ll @@ -92,6 +92,8 @@ define void @dsytrs_rook_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr 54: ; preds = %49 %55 = add i32 %12, 1 %56 = sext i32 %17 to i64 + %scevgep = getelementptr i8, ptr %6, i64 -8 + %ident.check.not = icmp eq i32 %17, 1 br label %237 .loopexit41: ; preds = %162 @@ -367,12 +369,12 @@ define void @dsytrs_rook_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr br i1 %234, label %.thread37, label %.preheader38 235: ; preds = %.loopexit - %236 = icmp slt i32 %370, 1 + %236 = icmp slt i32 %388, 1 br i1 %236, label %.thread37, label %.preheader 237: ; preds = %.loopexit, %54 - %238 = phi i32 [ %27, %54 ], [ %370, %.loopexit ] - %239 = phi i32 [ 1, %54 ], [ %369, %.loopexit ] + %238 = phi i32 [ %27, %54 ], [ %388, %.loopexit ] + %239 = phi i32 [ 1, %54 ], [ %387, %.loopexit ] %240 = zext nneg i32 %239 to i64 %241 = getelementptr inbounds i32, ptr %16, i64 %240 %242 = load i32, ptr %241, align 4, !tbaa !3 @@ -525,165 +527,197 @@ define void @dsytrs_rook_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr %342 = insertelement <2 x double> poison, double %331, i64 0 %343 = shufflevector <2 x double> %342, <2 x double> poison, <2 x i32> zeroinitializer %344 = fdiv <2 x double> %341, %343 - %345 = load i32, ptr %2, align 4, !tbaa !3 - store i32 %345, ptr %10, align 4, !tbaa !3 - %346 = icmp slt i32 %345, 1 - br i1 %346, label %.loopexit, label %347 - -347: ; preds = %327 - %348 = extractelement <2 x double> %344, i64 1 - %349 = extractelement <2 x double> %344, i64 0 - %350 = call double @llvm.fmuladd.f64(double %348, double %349, double -1.000000e+00) - %351 = add nuw i32 %345, 1 - %352 = zext i32 %351 to i64 - %353 = getelementptr double, ptr %20, i64 %240 - %354 = insertelement <2 x double> poison, double %350, i64 0 + %345 = extractelement <2 x double> %344, i64 0 + %346 = extractelement <2 x double> %344, i64 1 + %347 = call double @llvm.fmuladd.f64(double %346, double %345, double -1.000000e+00) + %348 = load i32, ptr %2, align 4, !tbaa !3 + store i32 %348, ptr %10, align 4, !tbaa !3 + %349 = icmp slt i32 %348, 1 + br i1 %349, label %.loopexit, label %.lver.check + +.lver.check: ; preds = %327 + %350 = add nuw i32 %348, 1 + %351 = zext i32 %350 to i64 + %352 = getelementptr double, ptr %20, i64 %240 + %353 = getelementptr double, ptr %20, i64 %288 + br i1 %ident.check.not, label %.ph, label %.ph.lver.orig.preheader + +.ph.lver.orig.preheader: ; preds = %.lver.check + %354 = insertelement <2 x double> poison, double %347, i64 0 %355 = shufflevector <2 x double> %354, <2 x double> poison, <2 x i32> zeroinitializer - br label %356 - -356: ; preds = %356, %347 - %357 = phi i64 [ 1, %347 ], [ %366, %356 ] - %358 = mul nsw i64 %357, %56 - %359 = getelementptr double, ptr %353, i64 %358 - %360 = load <2 x double>, ptr %359, align 8, !tbaa !7 - %361 = fdiv <2 x double> %360, %343 - %362 = shufflevector <2 x double> %361, <2 x double> poison, <2 x i32> - %363 = fneg <2 x double> %362 - %364 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %344, <2 x double> %361, <2 x double> %363) - %365 = fdiv <2 x double> %364, %355 - store <2 x double> %365, ptr %359, align 8, !tbaa !7 - %366 = add nuw nsw i64 %357, 1 - %367 = icmp eq i64 %366, %352 - br i1 %367, label %.loopexit, label %356, !llvm.loop !12 - -.loopexit: ; preds = %356, %327, %269 - %368 = phi i32 [ 1, %269 ], [ 2, %327 ], [ 2, %356 ] - %369 = add nuw nsw i32 %368, %239 - %370 = load i32, ptr %1, align 4, !tbaa !3 - %371 = icmp sgt i32 %369, %370 - br i1 %371, label %235, label %237 - -.preheader: ; preds = %235, %451 - %372 = phi i32 [ %453, %451 ], [ %370, %235 ] - %373 = zext nneg i32 %372 to i64 - %374 = getelementptr inbounds i32, ptr %16, i64 %373 - %375 = load i32, ptr %374, align 4, !tbaa !3 - %376 = icmp sgt i32 %375, 0 - %377 = load i32, ptr %1, align 4, !tbaa !3 - %378 = icmp slt i32 %372, %377 - br i1 %376, label %379, label %398 - -379: ; preds = %.preheader - br i1 %378, label %380, label %393 - -380: ; preds = %379 - %381 = sub nsw i32 %377, %372 - store i32 %381, ptr %10, align 4, !tbaa !3 - %382 = add nuw nsw i32 %372, 1 - %383 = add nsw i32 %382, %17 - %384 = sext i32 %383 to i64 - %385 = getelementptr inbounds double, ptr %20, i64 %384 - %386 = mul nsw i32 %372, %12 - %387 = add nsw i32 %382, %386 - %388 = sext i32 %387 to i64 - %389 = getelementptr inbounds double, ptr %15, i64 %388 - %390 = add nsw i32 %372, %17 - %391 = sext i32 %390 to i64 - %392 = getelementptr inbounds double, ptr %20, i64 %391 - call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %385, ptr noundef nonnull %7, ptr noundef %389, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %392, ptr noundef nonnull %7) #5 - %.pre47 = load i32, ptr %374, align 4, !tbaa !3 - br label %393 - -393: ; preds = %380, %379 - %394 = phi i32 [ %.pre47, %380 ], [ %375, %379 ] - %395 = icmp eq i32 %394, %372 - br i1 %395, label %451, label %396 - -396: ; preds = %393 - %397 = add nsw i32 %394, %17 - br label %442 - -398: ; preds = %.preheader - br i1 %378, label %399, label %422 - -399: ; preds = %398 - %400 = sub nsw i32 %377, %372 - store i32 %400, ptr %10, align 4, !tbaa !3 - %401 = add nuw nsw i32 %372, 1 - %402 = add nsw i32 %401, %17 - %403 = sext i32 %402 to i64 - %404 = getelementptr inbounds double, ptr %20, i64 %403 - %405 = mul nsw i32 %372, %12 - %406 = add nsw i32 %401, %405 - %407 = sext i32 %406 to i64 - %408 = getelementptr inbounds double, ptr %15, i64 %407 - %409 = add nsw i32 %372, %17 - %410 = sext i32 %409 to i64 - %411 = getelementptr inbounds double, ptr %20, i64 %410 - call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %404, ptr noundef nonnull %7, ptr noundef %408, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %411, ptr noundef nonnull %7) #5 - %412 = load i32, ptr %1, align 4, !tbaa !3 - %413 = sub nsw i32 %412, %372 - store i32 %413, ptr %10, align 4, !tbaa !3 - %414 = add nsw i32 %372, -1 - %415 = mul nsw i32 %414, %12 - %416 = add nsw i32 %415, %401 - %417 = sext i32 %416 to i64 - %418 = getelementptr inbounds double, ptr %15, i64 %417 - %419 = add nsw i32 %414, %17 - %420 = sext i32 %419 to i64 - %421 = getelementptr inbounds double, ptr %20, i64 %420 - call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %404, ptr noundef nonnull %7, ptr noundef %418, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %421, ptr noundef nonnull %7) #5 - %.pre46 = load i32, ptr %374, align 4, !tbaa !3 - br label %422 - -422: ; preds = %399, %398 - %423 = phi i32 [ %.pre46, %399 ], [ %375, %398 ] - %424 = sub nsw i32 0, %423 - %425 = icmp eq i32 %372, %424 - br i1 %425, label %433, label %426 - -426: ; preds = %422 - %427 = add nsw i32 %372, %17 + br label %.ph.lver.orig + +.ph.lver.orig: ; preds = %.ph.lver.orig.preheader, %.ph.lver.orig + %356 = phi i64 [ %365, %.ph.lver.orig ], [ 1, %.ph.lver.orig.preheader ] + %357 = mul nsw i64 %356, %56 + %358 = getelementptr double, ptr %352, i64 %357 + %359 = load <2 x double>, ptr %358, align 8, !tbaa !7 + %360 = fdiv <2 x double> %359, %343 + %361 = shufflevector <2 x double> %360, <2 x double> poison, <2 x i32> + %362 = fneg <2 x double> %361 + %363 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %344, <2 x double> %360, <2 x double> %362) + %364 = fdiv <2 x double> %363, %355 + store <2 x double> %364, ptr %358, align 8, !tbaa !7 + %365 = add nuw nsw i64 %356, 1 + %366 = icmp eq i64 %365, %351 + br i1 %366, label %.loopexit, label %.ph.lver.orig, !llvm.loop !12 + +.ph: ; preds = %.lver.check + %367 = shl nuw nsw i64 %240, 3 + %scevgep65 = getelementptr i8, ptr %scevgep, i64 %367 + %load_initial = load double, ptr %scevgep65, align 8 + %368 = insertelement <2 x double> poison, double %347, i64 0 + %369 = shufflevector <2 x double> %368, <2 x double> poison, <2 x i32> zeroinitializer + br label %370 + +370: ; preds = %370, %.ph + %store_forwarded = phi double [ %load_initial, %.ph ], [ %385, %370 ] + %371 = phi i64 [ 1, %.ph ], [ %383, %370 ] + %372 = mul nuw nsw i64 %371, %56 + %373 = getelementptr double, ptr %352, i64 %372 + %374 = getelementptr double, ptr %353, i64 %372 + %375 = load double, ptr %374, align 8, !tbaa !7 + %376 = insertelement <2 x double> poison, double %store_forwarded, i64 0 + %377 = insertelement <2 x double> %376, double %375, i64 1 + %378 = fdiv <2 x double> %377, %343 + %379 = shufflevector <2 x double> %378, <2 x double> poison, <2 x i32> + %380 = fneg <2 x double> %379 + %381 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %344, <2 x double> %378, <2 x double> %380) + %382 = fdiv <2 x double> %381, %369 + store <2 x double> %382, ptr %373, align 8, !tbaa !7 + %383 = add nuw nsw i64 %371, 1 + %384 = icmp eq i64 %383, %351 + %385 = extractelement <2 x double> %382, i64 1 + br i1 %384, label %.loopexit, label %370, !llvm.loop !12 + +.loopexit: ; preds = %.ph.lver.orig, %370, %327, %269 + %386 = phi i32 [ 1, %269 ], [ 2, %327 ], [ 2, %370 ], [ 2, %.ph.lver.orig ] + %387 = add nuw nsw i32 %386, %239 + %388 = load i32, ptr %1, align 4, !tbaa !3 + %389 = icmp sgt i32 %387, %388 + br i1 %389, label %235, label %237 + +.preheader: ; preds = %235, %469 + %390 = phi i32 [ %471, %469 ], [ %388, %235 ] + %391 = zext nneg i32 %390 to i64 + %392 = getelementptr inbounds i32, ptr %16, i64 %391 + %393 = load i32, ptr %392, align 4, !tbaa !3 + %394 = icmp sgt i32 %393, 0 + %395 = load i32, ptr %1, align 4, !tbaa !3 + %396 = icmp slt i32 %390, %395 + br i1 %394, label %397, label %416 + +397: ; preds = %.preheader + br i1 %396, label %398, label %411 + +398: ; preds = %397 + %399 = sub nsw i32 %395, %390 + store i32 %399, ptr %10, align 4, !tbaa !3 + %400 = add nuw nsw i32 %390, 1 + %401 = add nsw i32 %400, %17 + %402 = sext i32 %401 to i64 + %403 = getelementptr inbounds double, ptr %20, i64 %402 + %404 = mul nsw i32 %390, %12 + %405 = add nsw i32 %400, %404 + %406 = sext i32 %405 to i64 + %407 = getelementptr inbounds double, ptr %15, i64 %406 + %408 = add nsw i32 %390, %17 + %409 = sext i32 %408 to i64 + %410 = getelementptr inbounds double, ptr %20, i64 %409 + call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %403, ptr noundef nonnull %7, ptr noundef %407, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %410, ptr noundef nonnull %7) #5 + %.pre47 = load i32, ptr %392, align 4, !tbaa !3 + br label %411 + +411: ; preds = %398, %397 + %412 = phi i32 [ %.pre47, %398 ], [ %393, %397 ] + %413 = icmp eq i32 %412, %390 + br i1 %413, label %469, label %414 + +414: ; preds = %411 + %415 = add nsw i32 %412, %17 + br label %460 + +416: ; preds = %.preheader + br i1 %396, label %417, label %440 + +417: ; preds = %416 + %418 = sub nsw i32 %395, %390 + store i32 %418, ptr %10, align 4, !tbaa !3 + %419 = add nuw nsw i32 %390, 1 + %420 = add nsw i32 %419, %17 + %421 = sext i32 %420 to i64 + %422 = getelementptr inbounds double, ptr %20, i64 %421 + %423 = mul nsw i32 %390, %12 + %424 = add nsw i32 %419, %423 + %425 = sext i32 %424 to i64 + %426 = getelementptr inbounds double, ptr %15, i64 %425 + %427 = add nsw i32 %390, %17 %428 = sext i32 %427 to i64 %429 = getelementptr inbounds double, ptr %20, i64 %428 - %430 = sub i32 %17, %423 - %431 = sext i32 %430 to i64 - %432 = getelementptr inbounds double, ptr %20, i64 %431 - call void @dswap_(ptr noundef nonnull %2, ptr noundef %429, ptr noundef nonnull %7, ptr noundef %432, ptr noundef nonnull %7) #5 - br label %433 - -433: ; preds = %426, %422 - %434 = add nsw i32 %372, -1 - %435 = zext nneg i32 %434 to i64 - %436 = getelementptr inbounds i32, ptr %16, i64 %435 - %437 = load i32, ptr %436, align 4, !tbaa !3 - %438 = sub nsw i32 0, %437 - %439 = icmp eq i32 %434, %438 - br i1 %439, label %451, label %440 - -440: ; preds = %433 - %441 = sub i32 %17, %437 - br label %442 - -442: ; preds = %440, %396 - %443 = phi i32 [ %441, %440 ], [ %397, %396 ] - %444 = phi i32 [ %434, %440 ], [ %372, %396 ] - %445 = phi i32 [ -2, %440 ], [ -1, %396 ] - %446 = add nsw i32 %444, %17 - %447 = sext i32 %446 to i64 - %448 = getelementptr inbounds double, ptr %20, i64 %447 - %449 = sext i32 %443 to i64 + call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %422, ptr noundef nonnull %7, ptr noundef %426, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %429, ptr noundef nonnull %7) #5 + %430 = load i32, ptr %1, align 4, !tbaa !3 + %431 = sub nsw i32 %430, %390 + store i32 %431, ptr %10, align 4, !tbaa !3 + %432 = add nsw i32 %390, -1 + %433 = mul nsw i32 %432, %12 + %434 = add nsw i32 %433, %419 + %435 = sext i32 %434 to i64 + %436 = getelementptr inbounds double, ptr %15, i64 %435 + %437 = add nsw i32 %432, %17 + %438 = sext i32 %437 to i64 + %439 = getelementptr inbounds double, ptr %20, i64 %438 + call void @dgemv_(ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %2, ptr noundef nonnull @c_b7, ptr noundef %422, ptr noundef nonnull %7, ptr noundef %436, ptr noundef nonnull @c__1, ptr noundef nonnull @c_b19, ptr noundef %439, ptr noundef nonnull %7) #5 + %.pre46 = load i32, ptr %392, align 4, !tbaa !3 + br label %440 + +440: ; preds = %417, %416 + %441 = phi i32 [ %.pre46, %417 ], [ %393, %416 ] + %442 = sub nsw i32 0, %441 + %443 = icmp eq i32 %390, %442 + br i1 %443, label %451, label %444 + +444: ; preds = %440 + %445 = add nsw i32 %390, %17 + %446 = sext i32 %445 to i64 + %447 = getelementptr inbounds double, ptr %20, i64 %446 + %448 = sub i32 %17, %441 + %449 = sext i32 %448 to i64 %450 = getelementptr inbounds double, ptr %20, i64 %449 - call void @dswap_(ptr noundef nonnull %2, ptr noundef %448, ptr noundef nonnull %7, ptr noundef %450, ptr noundef nonnull %7) #5 + call void @dswap_(ptr noundef nonnull %2, ptr noundef %447, ptr noundef nonnull %7, ptr noundef %450, ptr noundef nonnull %7) #5 br label %451 -451: ; preds = %442, %433, %393 - %452 = phi i32 [ -1, %393 ], [ -2, %433 ], [ %445, %442 ] - %453 = add nsw i32 %452, %372 - %454 = icmp slt i32 %453, 1 - br i1 %454, label %.thread37, label %.preheader - -.thread37: ; preds = %230, %451, %235, %.loopexit41, %46, %42 +451: ; preds = %444, %440 + %452 = add nsw i32 %390, -1 + %453 = zext nneg i32 %452 to i64 + %454 = getelementptr inbounds i32, ptr %16, i64 %453 + %455 = load i32, ptr %454, align 4, !tbaa !3 + %456 = sub nsw i32 0, %455 + %457 = icmp eq i32 %452, %456 + br i1 %457, label %469, label %458 + +458: ; preds = %451 + %459 = sub i32 %17, %455 + br label %460 + +460: ; preds = %458, %414 + %461 = phi i32 [ %459, %458 ], [ %415, %414 ] + %462 = phi i32 [ %452, %458 ], [ %390, %414 ] + %463 = phi i32 [ -2, %458 ], [ -1, %414 ] + %464 = add nsw i32 %462, %17 + %465 = sext i32 %464 to i64 + %466 = getelementptr inbounds double, ptr %20, i64 %465 + %467 = sext i32 %461 to i64 + %468 = getelementptr inbounds double, ptr %20, i64 %467 + call void @dswap_(ptr noundef nonnull %2, ptr noundef %466, ptr noundef nonnull %7, ptr noundef %468, ptr noundef nonnull %7) #5 + br label %469 + +469: ; preds = %460, %451, %411 + %470 = phi i32 [ -1, %411 ], [ -2, %451 ], [ %463, %460 ] + %471 = add nsw i32 %470, %390 + %472 = icmp slt i32 %471, 1 + br i1 %472, label %.thread37, label %.preheader + +.thread37: ; preds = %230, %469, %235, %.loopexit41, %46, %42 call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #5 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #5 ret void diff --git a/llvm/llvm-project b/llvm/llvm-project index 5413a2bb843..16903ace180 160000 --- a/llvm/llvm-project +++ b/llvm/llvm-project @@ -1 +1 @@ -Subproject commit 5413a2bb843a3c71e0891aa5984afd63cd580dea +Subproject commit 16903ace180755b7558234ff2b2e8d89b00dcb88