; LLVM IR from venumb/ZSPACE :: cpp/depends/alglib/cpp/src (alglibinternal)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%union.anon.0 = type { ptr }

@.str.32 = external hidden unnamed_addr constant [44 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

declare noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef, double noundef) #1

declare void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext, ptr noundef, ptr noundef) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #2

declare noundef i64 @_ZN11alglib_impl9ae_minintEllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) #1

declare noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef, i64 noundef) #1

declare noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef, double noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl17rmatrixgemmk44v10EllldPNS_9ae_matrixEllS1_lldS1_llPNS_8ae_stateE(i64 noundef %0, i64 noundef %1, i64 noundef %2, double noundef %3, ptr noundef %4, i64 noundef %5, i64 noundef %6, ptr noundef %7, i64 noundef %8, i64 noundef %9, double noundef %10, ptr noundef %11, i64 noundef %12, i64 noundef %13, ptr noundef %14) #3 {
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca double, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca double, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca double, align 8
  %53 = alloca double, align 8
  %54 = alloca double, align 8
  %55 = alloca double, align 8
  %56 = alloca double, align 8
  %57 = alloca double, align 8
  %58 = alloca i64, align 8
  %59 = alloca i64, align 8
  %60 = alloca i64, align 8
  %61 = alloca i64, align 8
  %62 = alloca i64, align 8
  %63 = alloca i64, align 8
  %64 = alloca i64, align 8
  %65 = alloca i64, align 8
  %66 = alloca i64, align 8
  %67 = alloca i64, align 8
  %68 = alloca i64, align 8
  %69 = alloca i64, align 8
  %70 = alloca i64, align 8
  %71 = alloca i64, align 8
  %72 = alloca i64, align 8
  %73 = alloca i64, align 8
  %74 = alloca i64, align 8
  %75 = alloca i32, align 4
  store i64 %0, ptr %16, align 8, !tbaa !5
  store i64 %1, ptr %17, align 8, !tbaa !5
  store i64 %2, ptr %18, align 8, !tbaa !5
  store double %3, ptr %19, align 8, !tbaa !9
  store ptr %4, ptr %20, align 8, !tbaa !11
  store i64 %5, ptr %21, align 8, !tbaa !5
  store i64 %6, ptr %22, align 8, !tbaa !5
  store ptr %7, ptr %23, align 8, !tbaa !11
  store i64 %8, ptr %24, align 8, !tbaa !5
  store i64 %9, ptr %25, align 8, !tbaa !5
  store double %10, ptr %26, align 8, !tbaa !9
  store ptr %11, ptr %27, align 8, !tbaa !11
  store i64 %12, ptr %28, align 8, !tbaa !5
  store i64 %13, ptr %29, align 8, !tbaa !5
  store ptr %14, ptr %30, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %73) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #4
  %76 = load double, ptr %19, align 8, !tbaa !9
  %77 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %76, double noundef 0.000000e+00)
  %78 = load ptr, ptr %30, align 8, !tbaa !11
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %77, ptr noundef @.str.32, ptr noundef %78)
  %79 = load i64, ptr %16, align 8, !tbaa !5
  %80 = icmp eq i64 %79, 0
  br i1 %80, label %84, label %81

81:                                               ; preds = %15
  %82 = load i64, ptr %17, align 8, !tbaa !5
  %83 = icmp eq i64 %82, 0
  br i1 %83, label %84, label %85

84:                                               ; preds = %81, %15
  store i32 1, ptr %75, align 4
  br label %1244

85:                                               ; preds = %81
  store i64 0, ptr %31, align 8, !tbaa !5
  br label %86

86:                                               ; preds = %1240, %85
  %87 = load i64, ptr %31, align 8, !tbaa !5
  %88 = load i64, ptr %16, align 8, !tbaa !5
  %89 = icmp slt i64 %87, %88
  br i1 %89, label %90, label %1243

90:                                               ; preds = %86
  store i64 0, ptr %32, align 8, !tbaa !5
  br label %91

91:                                               ; preds = %1237, %90
  %92 = load i64, ptr %32, align 8, !tbaa !5
  %93 = load i64, ptr %17, align 8, !tbaa !5
  %94 = icmp slt i64 %92, %93
  br i1 %94, label %95, label %1240

95:                                               ; preds = %91
  %96 = load i64, ptr %31, align 8, !tbaa !5
  %97 = add nsw i64 %96, 4
  %98 = load i64, ptr %16, align 8, !tbaa !5
  %99 = icmp sle i64 %97, %98
  br i1 %99, label %100, label %1111

100:                                              ; preds = %95
  %101 = load i64, ptr %32, align 8, !tbaa !5
  %102 = add nsw i64 %101, 4
  %103 = load i64, ptr %17, align 8, !tbaa !5
  %104 = icmp sle i64 %102, %103
  br i1 %104, label %105, label %1111

105:                                              ; preds = %100
  %106 = load i64, ptr %22, align 8, !tbaa !5
  %107 = load i64, ptr %31, align 8, !tbaa !5
  %108 = add nsw i64 %106, %107
  %109 = add nsw i64 %108, 0
  store i64 %109, ptr %58, align 8, !tbaa !5
  %110 = load i64, ptr %22, align 8, !tbaa !5
  %111 = load i64, ptr %31, align 8, !tbaa !5
  %112 = add nsw i64 %110, %111
  %113 = add nsw i64 %112, 1
  store i64 %113, ptr %59, align 8, !tbaa !5
  %114 = load i64, ptr %22, align 8, !tbaa !5
  %115 = load i64, ptr %31, align 8, !tbaa !5
  %116 = add nsw i64 %114, %115
  %117 = add nsw i64 %116, 2
  store i64 %117, ptr %60, align 8, !tbaa !5
  %118 = load i64, ptr %22, align 8, !tbaa !5
  %119 = load i64, ptr %31, align 8, !tbaa !5
  %120 = add nsw i64 %118, %119
  %121 = add nsw i64 %120, 3
  store i64 %121, ptr %61, align 8, !tbaa !5
  %122 = load i64, ptr %21, align 8, !tbaa !5
  store i64 %122, ptr %73, align 8, !tbaa !5
  %123 = load i64, ptr %25, align 8, !tbaa !5
  %124 = load i64, ptr %32, align 8, !tbaa !5
  %125 = add nsw i64 %123, %124
  %126 = add nsw i64 %125, 0
  store i64 %126, ptr %62, align 8, !tbaa !5
  %127 = load i64, ptr %25, align 8, !tbaa !5
  %128 = load i64, ptr %32, align 8, !tbaa !5
  %129 = add nsw i64 %127, %128
  %130 = add nsw i64 %129, 1
  store i64 %130, ptr %63, align 8, !tbaa !5
  %131 = load i64, ptr %25, align 8, !tbaa !5
  %132 = load i64, ptr %32, align 8, !tbaa !5
  %133 = add nsw i64 %131, %132
  %134 = add nsw i64 %133, 2
  store i64 %134, ptr %64, align 8, !tbaa !5
  %135 = load i64, ptr %25, align 8, !tbaa !5
  %136 = load i64, ptr %32, align 8, !tbaa !5
  %137 = add nsw i64 %135, %136
  %138 = add nsw i64 %137, 3
  store i64 %138, ptr %65, align 8, !tbaa !5
  %139 = load i64, ptr %24, align 8, !tbaa !5
  store i64 %139, ptr %74, align 8, !tbaa !5
  store double 0.000000e+00, ptr %34, align 8, !tbaa !9
  store double 0.000000e+00, ptr %35, align 8, !tbaa !9
  store double 0.000000e+00, ptr %36, align 8, !tbaa !9
  store double 0.000000e+00, ptr %37, align 8, !tbaa !9
  store double 0.000000e+00, ptr %38, align 8, !tbaa !9
  store double 0.000000e+00, ptr %39, align 8, !tbaa !9
  store double 0.000000e+00, ptr %40, align 8, !tbaa !9
  store double 0.000000e+00, ptr %41, align 8, !tbaa !9
  store double 0.000000e+00, ptr %42, align 8, !tbaa !9
  store double 0.000000e+00, ptr %43, align 8, !tbaa !9
  store double 0.000000e+00, ptr %44, align 8, !tbaa !9
  store double 0.000000e+00, ptr %45, align 8, !tbaa !9
  store double 0.000000e+00, ptr %46, align 8, !tbaa !9
  store double 0.000000e+00, ptr %47, align 8, !tbaa !9
  store double 0.000000e+00, ptr %48, align 8, !tbaa !9
  store double 0.000000e+00, ptr %49, align 8, !tbaa !9
  store i64 0, ptr %72, align 8, !tbaa !5
  br label %140

140:                                              ; preds = %286, %105
  %141 = load i64, ptr %72, align 8, !tbaa !5
  %142 = load i64, ptr %18, align 8, !tbaa !5
  %143 = sub nsw i64 %142, 1
  %144 = icmp sle i64 %141, %143
  br i1 %144, label %145, label %289

145:                                              ; preds = %140
  %146 = load ptr, ptr %20, align 8, !tbaa !11
  %147 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %146, i32 0, i32 6
  %148 = load ptr, ptr %147, align 8, !tbaa !13
  %149 = load i64, ptr %73, align 8, !tbaa !5
  %150 = getelementptr inbounds ptr, ptr %148, i64 %149
  %151 = load ptr, ptr %150, align 8, !tbaa !11
  %152 = load i64, ptr %58, align 8, !tbaa !5
  %153 = getelementptr inbounds double, ptr %151, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !9
  store double %154, ptr %50, align 8, !tbaa !9
  %155 = load ptr, ptr %20, align 8, !tbaa !11
  %156 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %155, i32 0, i32 6
  %157 = load ptr, ptr %156, align 8, !tbaa !13
  %158 = load i64, ptr %73, align 8, !tbaa !5
  %159 = getelementptr inbounds ptr, ptr %157, i64 %158
  %160 = load ptr, ptr %159, align 8, !tbaa !11
  %161 = load i64, ptr %59, align 8, !tbaa !5
  %162 = getelementptr inbounds double, ptr %160, i64 %161
  %163 = load double, ptr %162, align 8, !tbaa !9
  store double %163, ptr %51, align 8, !tbaa !9
  %164 = load ptr, ptr %23, align 8, !tbaa !11
  %165 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %164, i32 0, i32 6
  %166 = load ptr, ptr %165, align 8, !tbaa !13
  %167 = load i64, ptr %74, align 8, !tbaa !5
  %168 = getelementptr inbounds ptr, ptr %166, i64 %167
  %169 = load ptr, ptr %168, align 8, !tbaa !11
  %170 = load i64, ptr %62, align 8, !tbaa !5
  %171 = getelementptr inbounds double, ptr %169, i64 %170
  %172 = load double, ptr %171, align 8, !tbaa !9
  store double %172, ptr %54, align 8, !tbaa !9
  %173 = load ptr, ptr %23, align 8, !tbaa !11
  %174 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %173, i32 0, i32 6
  %175 = load ptr, ptr %174, align 8, !tbaa !13
  %176 = load i64, ptr %74, align 8, !tbaa !5
  %177 = getelementptr inbounds ptr, ptr %175, i64 %176
  %178 = load ptr, ptr %177, align 8, !tbaa !11
  %179 = load i64, ptr %63, align 8, !tbaa !5
  %180 = getelementptr inbounds double, ptr %178, i64 %179
  %181 = load double, ptr %180, align 8, !tbaa !9
  store double %181, ptr %55, align 8, !tbaa !9
  %182 = load double, ptr %34, align 8, !tbaa !9
  %183 = load double, ptr %50, align 8, !tbaa !9
  %184 = load double, ptr %54, align 8, !tbaa !9
  %185 = call double @llvm.fmuladd.f64(double %183, double %184, double %182)
  store double %185, ptr %34, align 8, !tbaa !9
  %186 = load double, ptr %35, align 8, !tbaa !9
  %187 = load double, ptr %50, align 8, !tbaa !9
  %188 = load double, ptr %55, align 8, !tbaa !9
  %189 = call double @llvm.fmuladd.f64(double %187, double %188, double %186)
  store double %189, ptr %35, align 8, !tbaa !9
  %190 = load double, ptr %38, align 8, !tbaa !9
  %191 = load double, ptr %51, align 8, !tbaa !9
  %192 = load double, ptr %54, align 8, !tbaa !9
  %193 = call double @llvm.fmuladd.f64(double %191, double %192, double %190)
  store double %193, ptr %38, align 8, !tbaa !9
  %194 = load double, ptr %39, align 8, !tbaa !9
  %195 = load double, ptr %51, align 8, !tbaa !9
  %196 = load double, ptr %55, align 8, !tbaa !9
  %197 = call double @llvm.fmuladd.f64(double %195, double %196, double %194)
  store double %197, ptr %39, align 8, !tbaa !9
  %198 = load ptr, ptr %20, align 8, !tbaa !11
  %199 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %198, i32 0, i32 6
  %200 = load ptr, ptr %199, align 8, !tbaa !13
  %201 = load i64, ptr %73, align 8, !tbaa !5
  %202 = getelementptr inbounds ptr, ptr %200, i64 %201
  %203 = load ptr, ptr %202, align 8, !tbaa !11
  %204 = load i64, ptr %60, align 8, !tbaa !5
  %205 = getelementptr inbounds double, ptr %203, i64 %204
  %206 = load double, ptr %205, align 8, !tbaa !9
  store double %206, ptr %52, align 8, !tbaa !9
  %207 = load ptr, ptr %20, align 8, !tbaa !11
  %208 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %207, i32 0, i32 6
  %209 = load ptr, ptr %208, align 8, !tbaa !13
  %210 = load i64, ptr %73, align 8, !tbaa !5
  %211 = getelementptr inbounds ptr, ptr %209, i64 %210
  %212 = load ptr, ptr %211, align 8, !tbaa !11
  %213 = load i64, ptr %61, align 8, !tbaa !5
  %214 = getelementptr inbounds double, ptr %212, i64 %213
  %215 = load double, ptr %214, align 8, !tbaa !9
  store double %215, ptr %53, align 8, !tbaa !9
  %216 = load double, ptr %42, align 8, !tbaa !9
  %217 = load double, ptr %52, align 8, !tbaa !9
  %218 = load double, ptr %54, align 8, !tbaa !9
  %219 = call double @llvm.fmuladd.f64(double %217, double %218, double %216)
  store double %219, ptr %42, align 8, !tbaa !9
  %220 = load double, ptr %43, align 8, !tbaa !9
  %221 = load double, ptr %52, align 8, !tbaa !9
  %222 = load double, ptr %55, align 8, !tbaa !9
  %223 = call double @llvm.fmuladd.f64(double %221, double %222, double %220)
  store double %223, ptr %43, align 8, !tbaa !9
  %224 = load double, ptr %46, align 8, !tbaa !9
  %225 = load double, ptr %53, align 8, !tbaa !9
  %226 = load double, ptr %54, align 8, !tbaa !9
  %227 = call double @llvm.fmuladd.f64(double %225, double %226, double %224)
  store double %227, ptr %46, align 8, !tbaa !9
  %228 = load double, ptr %47, align 8, !tbaa !9
  %229 = load double, ptr %53, align 8, !tbaa !9
  %230 = load double, ptr %55, align 8, !tbaa !9
  %231 = call double @llvm.fmuladd.f64(double %229, double %230, double %228)
  store double %231, ptr %47, align 8, !tbaa !9
  %232 = load ptr, ptr %23, align 8, !tbaa !11
  %233 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %232, i32 0, i32 6
  %234 = load ptr, ptr %233, align 8, !tbaa !13
  %235 = load i64, ptr %74, align 8, !tbaa !5
  %236 = getelementptr inbounds ptr, ptr %234, i64 %235
  %237 = load ptr, ptr %236, align 8, !tbaa !11
  %238 = load i64, ptr %64, align 8, !tbaa !5
  %239 = getelementptr inbounds double, ptr %237, i64 %238
  %240 = load double, ptr %239, align 8, !tbaa !9
  store double %240, ptr %56, align 8, !tbaa !9
  %241 = load ptr, ptr %23, align 8, !tbaa !11
  %242 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %241, i32 0, i32 6
  %243 = load ptr, ptr %242, align 8, !tbaa !13
  %244 = load i64, ptr %74, align 8, !tbaa !5
  %245 = getelementptr inbounds ptr, ptr %243, i64 %244
  %246 = load ptr, ptr %245, align 8, !tbaa !11
  %247 = load i64, ptr %65, align 8, !tbaa !5
  %248 = getelementptr inbounds double, ptr %246, i64 %247
  %249 = load double, ptr %248, align 8, !tbaa !9
  store double %249, ptr %57, align 8, !tbaa !9
  %250 = load double, ptr %44, align 8, !tbaa !9
  %251 = load double, ptr %52, align 8, !tbaa !9
  %252 = load double, ptr %56, align 8, !tbaa !9
  %253 = call double @llvm.fmuladd.f64(double %251, double %252, double %250)
  store double %253, ptr %44, align 8, !tbaa !9
  %254 = load double, ptr %45, align 8, !tbaa !9
  %255 = load double, ptr %52, align 8, !tbaa !9
  %256 = load double, ptr %57, align 8, !tbaa !9
  %257 = call double @llvm.fmuladd.f64(double %255, double %256, double %254)
  store double %257, ptr %45, align 8, !tbaa !9
  %258 = load double, ptr %48, align 8, !tbaa !9
  %259 = load double, ptr %53, align 8, !tbaa !9
  %260 = load double, ptr %56, align 8, !tbaa !9
  %261 = call double @llvm.fmuladd.f64(double %259, double %260, double %258)
  store double %261, ptr %48, align 8, !tbaa !9
  %262 = load double, ptr %49, align 8, !tbaa !9
  %263 = load double, ptr %53, align 8, !tbaa !9
  %264 = load double, ptr %57, align 8, !tbaa !9
  %265 = call double @llvm.fmuladd.f64(double %263, double %264, double %262)
  store double %265, ptr %49, align 8, !tbaa !9
  %266 = load double, ptr %36, align 8, !tbaa !9
  %267 = load double, ptr %50, align 8, !tbaa !9
  %268 = load double, ptr %56, align 8, !tbaa !9
  %269 = call double @llvm.fmuladd.f64(double %267, double %268, double %266)
  store double %269, ptr %36, align 8, !tbaa !9
  %270 = load double, ptr %37, align 8, !tbaa !9
  %271 = load double, ptr %50, align 8, !tbaa !9
  %272 = load double, ptr %57, align 8, !tbaa !9
  %273 = call double @llvm.fmuladd.f64(double %271, double %272, double %270)
  store double %273, ptr %37, align 8, !tbaa !9
  %274 = load double, ptr %40, align 8, !tbaa !9
  %275 = load double, ptr %51, align 8, !tbaa !9
  %276 = load double, ptr %56, align 8, !tbaa !9
  %277 = call double @llvm.fmuladd.f64(double %275, double %276, double %274)
  store double %277, ptr %40, align 8, !tbaa !9
  %278 = load double, ptr %41, align 8, !tbaa !9
  %279 = load double, ptr %51, align 8, !tbaa !9
  %280 = load double, ptr %57, align 8, !tbaa !9
  %281 = call double @llvm.fmuladd.f64(double %279, double %280, double %278)
  store double %281, ptr %41, align 8, !tbaa !9
  %282 = load i64, ptr %73, align 8, !tbaa !5
  %283 = add nsw i64 %282, 1
  store i64 %283, ptr %73, align 8, !tbaa !5
  %284 = load i64, ptr %74, align 8, !tbaa !5
  %285 = add nsw i64 %284, 1
  store i64 %285, ptr %74, align 8, !tbaa !5
  br label %286

286:                                              ; preds = %145
  %287 = load i64, ptr %72, align 8, !tbaa !5
  %288 = add nsw i64 %287, 1
  store i64 %288, ptr %72, align 8, !tbaa !5
  br label %140, !llvm.loop !14

289:                                              ; preds = %140
  %290 = load double, ptr %26, align 8, !tbaa !9
  %291 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %290, double noundef 0.000000e+00)
  br i1 %291, label %292, label %565

292:                                              ; preds = %289
  %293 = load double, ptr %19, align 8, !tbaa !9
  %294 = load double, ptr %34, align 8, !tbaa !9
  %295 = fmul double %293, %294
  %296 = load ptr, ptr %27, align 8, !tbaa !11
  %297 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %296, i32 0, i32 6
  %298 = load ptr, ptr %297, align 8, !tbaa !13
  %299 = load i64, ptr %28, align 8, !tbaa !5
  %300 = load i64, ptr %31, align 8, !tbaa !5
  %301 = add nsw i64 %299, %300
  %302 = add nsw i64 %301, 0
  %303 = getelementptr inbounds ptr, ptr %298, i64 %302
  %304 = load ptr, ptr %303, align 8, !tbaa !11
  %305 = load i64, ptr %29, align 8, !tbaa !5
  %306 = load i64, ptr %32, align 8, !tbaa !5
  %307 = add nsw i64 %305, %306
  %308 = add nsw i64 %307, 0
  %309 = getelementptr inbounds double, ptr %304, i64 %308
  store double %295, ptr %309, align 8, !tbaa !9
  %310 = load double, ptr %19, align 8, !tbaa !9
  %311 = load double, ptr %35, align 8, !tbaa !9
  %312 = fmul double %310, %311
  %313 = load ptr, ptr %27, align 8, !tbaa !11
  %314 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %313, i32 0, i32 6
  %315 = load ptr, ptr %314, align 8, !tbaa !13
  %316 = load i64, ptr %28, align 8, !tbaa !5
  %317 = load i64, ptr %31, align 8, !tbaa !5
  %318 = add nsw i64 %316, %317
  %319 = add nsw i64 %318, 0
  %320 = getelementptr inbounds ptr, ptr %315, i64 %319
  %321 = load ptr, ptr %320, align 8, !tbaa !11
  %322 = load i64, ptr %29, align 8, !tbaa !5
  %323 = load i64, ptr %32, align 8, !tbaa !5
  %324 = add nsw i64 %322, %323
  %325 = add nsw i64 %324, 1
  %326 = getelementptr inbounds double, ptr %321, i64 %325
  store double %312, ptr %326, align 8, !tbaa !9
  %327 = load double, ptr %19, align 8, !tbaa !9
  %328 = load double, ptr %36, align 8, !tbaa !9
  %329 = fmul double %327, %328
  %330 = load ptr, ptr %27, align 8, !tbaa !11
  %331 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %330, i32 0, i32 6
  %332 = load ptr, ptr %331, align 8, !tbaa !13
  %333 = load i64, ptr %28, align 8, !tbaa !5
  %334 = load i64, ptr %31, align 8, !tbaa !5
  %335 = add nsw i64 %333, %334
  %336 = add nsw i64 %335, 0
  %337 = getelementptr inbounds ptr, ptr %332, i64 %336
  %338 = load ptr, ptr %337, align 8, !tbaa !11
  %339 = load i64, ptr %29, align 8, !tbaa !5
  %340 = load i64, ptr %32, align 8, !tbaa !5
  %341 = add nsw i64 %339, %340
  %342 = add nsw i64 %341, 2
  %343 = getelementptr inbounds double, ptr %338, i64 %342
  store double %329, ptr %343, align 8, !tbaa !9
  %344 = load double, ptr %19, align 8, !tbaa !9
  %345 = load double, ptr %37, align 8, !tbaa !9
  %346 = fmul double %344, %345
  %347 = load ptr, ptr %27, align 8, !tbaa !11
  %348 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %347, i32 0, i32 6
  %349 = load ptr, ptr %348, align 8, !tbaa !13
  %350 = load i64, ptr %28, align 8, !tbaa !5
  %351 = load i64, ptr %31, align 8, !tbaa !5
  %352 = add nsw i64 %350, %351
  %353 = add nsw i64 %352, 0
  %354 = getelementptr inbounds ptr, ptr %349, i64 %353
  %355 = load ptr, ptr %354, align 8, !tbaa !11
  %356 = load i64, ptr %29, align 8, !tbaa !5
  %357 = load i64, ptr %32, align 8, !tbaa !5
  %358 = add nsw i64 %356, %357
  %359 = add nsw i64 %358, 3
  %360 = getelementptr inbounds double, ptr %355, i64 %359
  store double %346, ptr %360, align 8, !tbaa !9
  %361 = load double, ptr %19, align 8, !tbaa !9
  %362 = load double, ptr %38, align 8, !tbaa !9
  %363 = fmul double %361, %362
  %364 = load ptr, ptr %27, align 8, !tbaa !11
  %365 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %364, i32 0, i32 6
  %366 = load ptr, ptr %365, align 8, !tbaa !13
  %367 = load i64, ptr %28, align 8, !tbaa !5
  %368 = load i64, ptr %31, align 8, !tbaa !5
  %369 = add nsw i64 %367, %368
  %370 = add nsw i64 %369, 1
  %371 = getelementptr inbounds ptr, ptr %366, i64 %370
  %372 = load ptr, ptr %371, align 8, !tbaa !11
  %373 = load i64, ptr %29, align 8, !tbaa !5
  %374 = load i64, ptr %32, align 8, !tbaa !5
  %375 = add nsw i64 %373, %374
  %376 = add nsw i64 %375, 0
  %377 = getelementptr inbounds double, ptr %372, i64 %376
  store double %363, ptr %377, align 8, !tbaa !9
  %378 = load double, ptr %19, align 8, !tbaa !9
  %379 = load double, ptr %39, align 8, !tbaa !9
  %380 = fmul double %378, %379
  %381 = load ptr, ptr %27, align 8, !tbaa !11
  %382 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %381, i32 0, i32 6
  %383 = load ptr, ptr %382, align 8, !tbaa !13
  %384 = load i64, ptr %28, align 8, !tbaa !5
  %385 = load i64, ptr %31, align 8, !tbaa !5
  %386 = add nsw i64 %384, %385
  %387 = add nsw i64 %386, 1
  %388 = getelementptr inbounds ptr, ptr %383, i64 %387
  %389 = load ptr, ptr %388, align 8, !tbaa !11
  %390 = load i64, ptr %29, align 8, !tbaa !5
  %391 = load i64, ptr %32, align 8, !tbaa !5
  %392 = add nsw i64 %390, %391
  %393 = add nsw i64 %392, 1
  %394 = getelementptr inbounds double, ptr %389, i64 %393
  store double %380, ptr %394, align 8, !tbaa !9
  %395 = load double, ptr %19, align 8, !tbaa !9
  %396 = load double, ptr %40, align 8, !tbaa !9
  %397 = fmul double %395, %396
  %398 = load ptr, ptr %27, align 8, !tbaa !11
  %399 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %398, i32 0, i32 6
  %400 = load ptr, ptr %399, align 8, !tbaa !13
  %401 = load i64, ptr %28, align 8, !tbaa !5
  %402 = load i64, ptr %31, align 8, !tbaa !5
  %403 = add nsw i64 %401, %402
  %404 = add nsw i64 %403, 1
  %405 = getelementptr inbounds ptr, ptr %400, i64 %404
  %406 = load ptr, ptr %405, align 8, !tbaa !11
  %407 = load i64, ptr %29, align 8, !tbaa !5
  %408 = load i64, ptr %32, align 8, !tbaa !5
  %409 = add nsw i64 %407, %408
  %410 = add nsw i64 %409, 2
  %411 = getelementptr inbounds double, ptr %406, i64 %410
  store double %397, ptr %411, align 8, !tbaa !9
  %412 = load double, ptr %19, align 8, !tbaa !9
  %413 = load double, ptr %41, align 8, !tbaa !9
  %414 = fmul double %412, %413
  %415 = load ptr, ptr %27, align 8, !tbaa !11
  %416 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %415, i32 0, i32 6
  %417 = load ptr, ptr %416, align 8, !tbaa !13
  %418 = load i64, ptr %28, align 8, !tbaa !5
  %419 = load i64, ptr %31, align 8, !tbaa !5
  %420 = add nsw i64 %418, %419
  %421 = add nsw i64 %420, 1
  %422 = getelementptr inbounds ptr, ptr %417, i64 %421
  %423 = load ptr, ptr %422, align 8, !tbaa !11
  %424 = load i64, ptr %29, align 8, !tbaa !5
  %425 = load i64, ptr %32, align 8, !tbaa !5
  %426 = add nsw i64 %424, %425
  %427 = add nsw i64 %426, 3
  %428 = getelementptr inbounds double, ptr %423, i64 %427
  store double %414, ptr %428, align 8, !tbaa !9
  %429 = load double, ptr %19, align 8, !tbaa !9
  %430 = load double, ptr %42, align 8, !tbaa !9
  %431 = fmul double %429, %430
  %432 = load ptr, ptr %27, align 8, !tbaa !11
  %433 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %432, i32 0, i32 6
  %434 = load ptr, ptr %433, align 8, !tbaa !13
  %435 = load i64, ptr %28, align 8, !tbaa !5
  %436 = load i64, ptr %31, align 8, !tbaa !5
  %437 = add nsw i64 %435, %436
  %438 = add nsw i64 %437, 2
  %439 = getelementptr inbounds ptr, ptr %434, i64 %438
  %440 = load ptr, ptr %439, align 8, !tbaa !11
  %441 = load i64, ptr %29, align 8, !tbaa !5
  %442 = load i64, ptr %32, align 8, !tbaa !5
  %443 = add nsw i64 %441, %442
  %444 = add nsw i64 %443, 0
  %445 = getelementptr inbounds double, ptr %440, i64 %444
  store double %431, ptr %445, align 8, !tbaa !9
  %446 = load double, ptr %19, align 8, !tbaa !9
  %447 = load double, ptr %43, align 8, !tbaa !9
  %448 = fmul double %446, %447
  %449 = load ptr, ptr %27, align 8, !tbaa !11
  %450 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %449, i32 0, i32 6
  %451 = load ptr, ptr %450, align 8, !tbaa !13
  %452 = load i64, ptr %28, align 8, !tbaa !5
  %453 = load i64, ptr %31, align 8, !tbaa !5
  %454 = add nsw i64 %452, %453
  %455 = add nsw i64 %454, 2
  %456 = getelementptr inbounds ptr, ptr %451, i64 %455
  %457 = load ptr, ptr %456, align 8, !tbaa !11
  %458 = load i64, ptr %29, align 8, !tbaa !5
  %459 = load i64, ptr %32, align 8, !tbaa !5
  %460 = add nsw i64 %458, %459
  %461 = add nsw i64 %460, 1
  %462 = getelementptr inbounds double, ptr %457, i64 %461
  store double %448, ptr %462, align 8, !tbaa !9
  %463 = load double, ptr %19, align 8, !tbaa !9
  %464 = load double, ptr %44, align 8, !tbaa !9
  %465 = fmul double %463, %464
  %466 = load ptr, ptr %27, align 8, !tbaa !11
  %467 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %466, i32 0, i32 6
  %468 = load ptr, ptr %467, align 8, !tbaa !13
  %469 = load i64, ptr %28, align 8, !tbaa !5
  %470 = load i64, ptr %31, align 8, !tbaa !5
  %471 = add nsw i64 %469, %470
  %472 = add nsw i64 %471, 2
  %473 = getelementptr inbounds ptr, ptr %468, i64 %472
  %474 = load ptr, ptr %473, align 8, !tbaa !11
  %475 = load i64, ptr %29, align 8, !tbaa !5
  %476 = load i64, ptr %32, align 8, !tbaa !5
  %477 = add nsw i64 %475, %476
  %478 = add nsw i64 %477, 2
  %479 = getelementptr inbounds double, ptr %474, i64 %478
  store double %465, ptr %479, align 8, !tbaa !9
  %480 = load double, ptr %19, align 8, !tbaa !9
  %481 = load double, ptr %45, align 8, !tbaa !9
  %482 = fmul double %480, %481
  %483 = load ptr, ptr %27, align 8, !tbaa !11
  %484 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %483, i32 0, i32 6
  %485 = load ptr, ptr %484, align 8, !tbaa !13
  %486 = load i64, ptr %28, align 8, !tbaa !5
  %487 = load i64, ptr %31, align 8, !tbaa !5
  %488 = add nsw i64 %486, %487
  %489 = add nsw i64 %488, 2
  %490 = getelementptr inbounds ptr, ptr %485, i64 %489
  %491 = load ptr, ptr %490, align 8, !tbaa !11
  %492 = load i64, ptr %29, align 8, !tbaa !5
  %493 = load i64, ptr %32, align 8, !tbaa !5
  %494 = add nsw i64 %492, %493
  %495 = add nsw i64 %494, 3
  %496 = getelementptr inbounds double, ptr %491, i64 %495
  store double %482, ptr %496, align 8, !tbaa !9
  %497 = load double, ptr %19, align 8, !tbaa !9
  %498 = load double, ptr %46, align 8, !tbaa !9
  %499 = fmul double %497, %498
  %500 = load ptr, ptr %27, align 8, !tbaa !11
  %501 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %500, i32 0, i32 6
  %502 = load ptr, ptr %501, align 8, !tbaa !13
  %503 = load i64, ptr %28, align 8, !tbaa !5
  %504 = load i64, ptr %31, align 8, !tbaa !5
  %505 = add nsw i64 %503, %504
  %506 = add nsw i64 %505, 3
  %507 = getelementptr inbounds ptr, ptr %502, i64 %506
  %508 = load ptr, ptr %507, align 8, !tbaa !11
  %509 = load i64, ptr %29, align 8, !tbaa !5
  %510 = load i64, ptr %32, align 8, !tbaa !5
  %511 = add nsw i64 %509, %510
  %512 = add nsw i64 %511, 0
  %513 = getelementptr inbounds double, ptr %508, i64 %512
  store double %499, ptr %513, align 8, !tbaa !9
  %514 = load double, ptr %19, align 8, !tbaa !9
  %515 = load double, ptr %47, align 8, !tbaa !9
  %516 = fmul double %514, %515
  %517 = load ptr, ptr %27, align 8, !tbaa !11
  %518 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %517, i32 0, i32 6
  %519 = load ptr, ptr %518, align 8, !tbaa !13
  %520 = load i64, ptr %28, align 8, !tbaa !5
  %521 = load i64, ptr %31, align 8, !tbaa !5
  %522 = add nsw i64 %520, %521
  %523 = add nsw i64 %522, 3
  %524 = getelementptr inbounds ptr, ptr %519, i64 %523
  %525 = load ptr, ptr %524, align 8, !tbaa !11
  %526 = load i64, ptr %29, align 8, !tbaa !5
  %527 = load i64, ptr %32, align 8, !tbaa !5
  %528 = add nsw i64 %526, %527
  %529 = add nsw i64 %528, 1
  %530 = getelementptr inbounds double, ptr %525, i64 %529
  store double %516, ptr %530, align 8, !tbaa !9
  %531 = load double, ptr %19, align 8, !tbaa !9
  %532 = load double, ptr %48, align 8, !tbaa !9
  %533 = fmul double %531, %532
  %534 = load ptr, ptr %27, align 8, !tbaa !11
  %535 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %534, i32 0, i32 6
  %536 = load ptr, ptr %535, align 8, !tbaa !13
  %537 = load i64, ptr %28, align 8, !tbaa !5
  %538 = load i64, ptr %31, align 8, !tbaa !5
  %539 = add nsw i64 %537, %538
  %540 = add nsw i64 %539, 3
  %541 = getelementptr inbounds ptr, ptr %536, i64 %540
  %542 = load ptr, ptr %541, align 8, !tbaa !11
  %543 = load i64, ptr %29, align 8, !tbaa !5
  %544 = load i64, ptr %32, align 8, !tbaa !5
  %545 = add nsw i64 %543, %544
  %546 = add nsw i64 %545, 2
  %547 = getelementptr inbounds double, ptr %542, i64 %546
  store double %533, ptr %547, align 8, !tbaa !9
  %548 = load double, ptr %19, align 8, !tbaa !9
  %549 = load double, ptr %49, align 8, !tbaa !9
  %550 = fmul double %548, %549
  %551 = load ptr, ptr %27, align 8, !tbaa !11
  %552 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %551, i32 0, i32 6
  %553 = load ptr, ptr %552, align 8, !tbaa !13
  %554 = load i64, ptr %28, align 8, !tbaa !5
  %555 = load i64, ptr %31, align 8, !tbaa !5
  %556 = add nsw i64 %554, %555
  %557 = add nsw i64 %556, 3
  %558 = getelementptr inbounds ptr, ptr %553, i64 %557
  %559 = load ptr, ptr %558, align 8, !tbaa !11
  %560 = load i64, ptr %29, align 8, !tbaa !5
  %561 = load i64, ptr %32, align 8, !tbaa !5
  %562 = add nsw i64 %560, %561
  %563 = add nsw i64 %562, 3
  %564 = getelementptr inbounds double, ptr %559, i64 %563
  store double %550, ptr %564, align 8, !tbaa !9
  br label %1110

565:                                              ; preds = %289
  %566 = load double, ptr %26, align 8, !tbaa !9
  %567 = load ptr, ptr %27, align 8, !tbaa !11
  %568 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %567, i32 0, i32 6
  %569 = load ptr, ptr %568, align 8, !tbaa !13
  %570 = load i64, ptr %28, align 8, !tbaa !5
  %571 = load i64, ptr %31, align 8, !tbaa !5
  %572 = add nsw i64 %570, %571
  %573 = add nsw i64 %572, 0
  %574 = getelementptr inbounds ptr, ptr %569, i64 %573
  %575 = load ptr, ptr %574, align 8, !tbaa !11
  %576 = load i64, ptr %29, align 8, !tbaa !5
  %577 = load i64, ptr %32, align 8, !tbaa !5
  %578 = add nsw i64 %576, %577
  %579 = add nsw i64 %578, 0
  %580 = getelementptr inbounds double, ptr %575, i64 %579
  %581 = load double, ptr %580, align 8, !tbaa !9
  %582 = load double, ptr %19, align 8, !tbaa !9
  %583 = load double, ptr %34, align 8, !tbaa !9
  %584 = fmul double %582, %583
  %585 = call double @llvm.fmuladd.f64(double %566, double %581, double %584)
  %586 = load ptr, ptr %27, align 8, !tbaa !11
  %587 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %586, i32 0, i32 6
  %588 = load ptr, ptr %587, align 8, !tbaa !13
  %589 = load i64, ptr %28, align 8, !tbaa !5
  %590 = load i64, ptr %31, align 8, !tbaa !5
  %591 = add nsw i64 %589, %590
  %592 = add nsw i64 %591, 0
  %593 = getelementptr inbounds ptr, ptr %588, i64 %592
  %594 = load ptr, ptr %593, align 8, !tbaa !11
  %595 = load i64, ptr %29, align 8, !tbaa !5
  %596 = load i64, ptr %32, align 8, !tbaa !5
  %597 = add nsw i64 %595, %596
  %598 = add nsw i64 %597, 0
  %599 = getelementptr inbounds double, ptr %594, i64 %598
  store double %585, ptr %599, align 8, !tbaa !9
  %600 = load double, ptr %26, align 8, !tbaa !9
  %601 = load ptr, ptr %27, align 8, !tbaa !11
  %602 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %601, i32 0, i32 6
  %603 = load ptr, ptr %602, align 8, !tbaa !13
  %604 = load i64, ptr %28, align 8, !tbaa !5
  %605 = load i64, ptr %31, align 8, !tbaa !5
  %606 = add nsw i64 %604, %605
  %607 = add nsw i64 %606, 0
  %608 = getelementptr inbounds ptr, ptr %603, i64 %607
  %609 = load ptr, ptr %608, align 8, !tbaa !11
  %610 = load i64, ptr %29, align 8, !tbaa !5
  %611 = load i64, ptr %32, align 8, !tbaa !5
  %612 = add nsw i64 %610, %611
  %613 = add nsw i64 %612, 1
  %614 = getelementptr inbounds double, ptr %609, i64 %613
  %615 = load double, ptr %614, align 8, !tbaa !9
  %616 = load double, ptr %19, align 8, !tbaa !9
  %617 = load double, ptr %35, align 8, !tbaa !9
  %618 = fmul double %616, %617
  %619 = call double @llvm.fmuladd.f64(double %600, double %615, double %618)
  %620 = load ptr, ptr %27, align 8, !tbaa !11
  %621 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %620, i32 0, i32 6
  %622 = load ptr, ptr %621, align 8, !tbaa !13
  %623 = load i64, ptr %28, align 8, !tbaa !5
  %624 = load i64, ptr %31, align 8, !tbaa !5
  %625 = add nsw i64 %623, %624
  %626 = add nsw i64 %625, 0
  %627 = getelementptr inbounds ptr, ptr %622, i64 %626
  %628 = load ptr, ptr %627, align 8, !tbaa !11
  %629 = load i64, ptr %29, align 8, !tbaa !5
  %630 = load i64, ptr %32, align 8, !tbaa !5
  %631 = add nsw i64 %629, %630
  %632 = add nsw i64 %631, 1
  %633 = getelementptr inbounds double, ptr %628, i64 %632
  store double %619, ptr %633, align 8, !tbaa !9
  %634 = load double, ptr %26, align 8, !tbaa !9
  %635 = load ptr, ptr %27, align 8, !tbaa !11
  %636 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %635, i32 0, i32 6
  %637 = load ptr, ptr %636, align 8, !tbaa !13
  %638 = load i64, ptr %28, align 8, !tbaa !5
  %639 = load i64, ptr %31, align 8, !tbaa !5
  %640 = add nsw i64 %638, %639
  %641 = add nsw i64 %640, 0
  %642 = getelementptr inbounds ptr, ptr %637, i64 %641
  %643 = load ptr, ptr %642, align 8, !tbaa !11
  %644 = load i64, ptr %29, align 8, !tbaa !5
  %645 = load i64, ptr %32, align 8, !tbaa !5
  %646 = add nsw i64 %644, %645
  %647 = add nsw i64 %646, 2
  %648 = getelementptr inbounds double, ptr %643, i64 %647
  %649 = load double, ptr %648, align 8, !tbaa !9
  %650 = load double, ptr %19, align 8, !tbaa !9
  %651 = load double, ptr %36, align 8, !tbaa !9
  %652 = fmul double %650, %651
  %653 = call double @llvm.fmuladd.f64(double %634, double %649, double %652)
  %654 = load ptr, ptr %27, align 8, !tbaa !11
  %655 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %654, i32 0, i32 6
  %656 = load ptr, ptr %655, align 8, !tbaa !13
  %657 = load i64, ptr %28, align 8, !tbaa !5
  %658 = load i64, ptr %31, align 8, !tbaa !5
  %659 = add nsw i64 %657, %658
  %660 = add nsw i64 %659, 0
  %661 = getelementptr inbounds ptr, ptr %656, i64 %660
  %662 = load ptr, ptr %661, align 8, !tbaa !11
  %663 = load i64, ptr %29, align 8, !tbaa !5
  %664 = load i64, ptr %32, align 8, !tbaa !5
  %665 = add nsw i64 %663, %664
  %666 = add nsw i64 %665, 2
  %667 = getelementptr inbounds double, ptr %662, i64 %666
  store double %653, ptr %667, align 8, !tbaa !9
  %668 = load double, ptr %26, align 8, !tbaa !9
  %669 = load ptr, ptr %27, align 8, !tbaa !11
  %670 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %669, i32 0, i32 6
  %671 = load ptr, ptr %670, align 8, !tbaa !13
  %672 = load i64, ptr %28, align 8, !tbaa !5
  %673 = load i64, ptr %31, align 8, !tbaa !5
  %674 = add nsw i64 %672, %673
  %675 = add nsw i64 %674, 0
  %676 = getelementptr inbounds ptr, ptr %671, i64 %675
  %677 = load ptr, ptr %676, align 8, !tbaa !11
  %678 = load i64, ptr %29, align 8, !tbaa !5
  %679 = load i64, ptr %32, align 8, !tbaa !5
  %680 = add nsw i64 %678, %679
  %681 = add nsw i64 %680, 3
  %682 = getelementptr inbounds double, ptr %677, i64 %681
  %683 = load double, ptr %682, align 8, !tbaa !9
  %684 = load double, ptr %19, align 8, !tbaa !9
  %685 = load double, ptr %37, align 8, !tbaa !9
  %686 = fmul double %684, %685
  %687 = call double @llvm.fmuladd.f64(double %668, double %683, double %686)
  %688 = load ptr, ptr %27, align 8, !tbaa !11
  %689 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %688, i32 0, i32 6
  %690 = load ptr, ptr %689, align 8, !tbaa !13
  %691 = load i64, ptr %28, align 8, !tbaa !5
  %692 = load i64, ptr %31, align 8, !tbaa !5
  %693 = add nsw i64 %691, %692
  %694 = add nsw i64 %693, 0
  %695 = getelementptr inbounds ptr, ptr %690, i64 %694
  %696 = load ptr, ptr %695, align 8, !tbaa !11
  %697 = load i64, ptr %29, align 8, !tbaa !5
  %698 = load i64, ptr %32, align 8, !tbaa !5
  %699 = add nsw i64 %697, %698
  %700 = add nsw i64 %699, 3
  %701 = getelementptr inbounds double, ptr %696, i64 %700
  store double %687, ptr %701, align 8, !tbaa !9
  %702 = load double, ptr %26, align 8, !tbaa !9
  %703 = load ptr, ptr %27, align 8, !tbaa !11
  %704 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %703, i32 0, i32 6
  %705 = load ptr, ptr %704, align 8, !tbaa !13
  %706 = load i64, ptr %28, align 8, !tbaa !5
  %707 = load i64, ptr %31, align 8, !tbaa !5
  %708 = add nsw i64 %706, %707
  %709 = add nsw i64 %708, 1
  %710 = getelementptr inbounds ptr, ptr %705, i64 %709
  %711 = load ptr, ptr %710, align 8, !tbaa !11
  %712 = load i64, ptr %29, align 8, !tbaa !5
  %713 = load i64, ptr %32, align 8, !tbaa !5
  %714 = add nsw i64 %712, %713
  %715 = add nsw i64 %714, 0
  %716 = getelementptr inbounds double, ptr %711, i64 %715
  %717 = load double, ptr %716, align 8, !tbaa !9
  %718 = load double, ptr %19, align 8, !tbaa !9
  %719 = load double, ptr %38, align 8, !tbaa !9
  %720 = fmul double %718, %719
  %721 = call double @llvm.fmuladd.f64(double %702, double %717, double %720)
  %722 = load ptr, ptr %27, align 8, !tbaa !11
  %723 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %722, i32 0, i32 6
  %724 = load ptr, ptr %723, align 8, !tbaa !13
  %725 = load i64, ptr %28, align 8, !tbaa !5
  %726 = load i64, ptr %31, align 8, !tbaa !5
  %727 = add nsw i64 %725, %726
  %728 = add nsw i64 %727, 1
  %729 = getelementptr inbounds ptr, ptr %724, i64 %728
  %730 = load ptr, ptr %729, align 8, !tbaa !11
  %731 = load i64, ptr %29, align 8, !tbaa !5
  %732 = load i64, ptr %32, align 8, !tbaa !5
  %733 = add nsw i64 %731, %732
  %734 = add nsw i64 %733, 0
  %735 = getelementptr inbounds double, ptr %730, i64 %734
  store double %721, ptr %735, align 8, !tbaa !9
  %736 = load double, ptr %26, align 8, !tbaa !9
  %737 = load ptr, ptr %27, align 8, !tbaa !11
  %738 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %737, i32 0, i32 6
  %739 = load ptr, ptr %738, align 8, !tbaa !13
  %740 = load i64, ptr %28, align 8, !tbaa !5
  %741 = load i64, ptr %31, align 8, !tbaa !5
  %742 = add nsw i64 %740, %741
  %743 = add nsw i64 %742, 1
  %744 = getelementptr inbounds ptr, ptr %739, i64 %743
  %745 = load ptr, ptr %744, align 8, !tbaa !11
  %746 = load i64, ptr %29, align 8, !tbaa !5
  %747 = load i64, ptr %32, align 8, !tbaa !5
  %748 = add nsw i64 %746, %747
  %749 = add nsw i64 %748, 1
  %750 = getelementptr inbounds double, ptr %745, i64 %749
  %751 = load double, ptr %750, align 8, !tbaa !9
  %752 = load double, ptr %19, align 8, !tbaa !9
  %753 = load double, ptr %39, align 8, !tbaa !9
  %754 = fmul double %752, %753
  %755 = call double @llvm.fmuladd.f64(double %736, double %751, double %754)
  %756 = load ptr, ptr %27, align 8, !tbaa !11
  %757 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %756, i32 0, i32 6
  %758 = load ptr, ptr %757, align 8, !tbaa !13
  %759 = load i64, ptr %28, align 8, !tbaa !5
  %760 = load i64, ptr %31, align 8, !tbaa !5
  %761 = add nsw i64 %759, %760
  %762 = add nsw i64 %761, 1
  %763 = getelementptr inbounds ptr, ptr %758, i64 %762
  %764 = load ptr, ptr %763, align 8, !tbaa !11
  %765 = load i64, ptr %29, align 8, !tbaa !5
  %766 = load i64, ptr %32, align 8, !tbaa !5
  %767 = add nsw i64 %765, %766
  %768 = add nsw i64 %767, 1
  %769 = getelementptr inbounds double, ptr %764, i64 %768
  store double %755, ptr %769, align 8, !tbaa !9
  %770 = load double, ptr %26, align 8, !tbaa !9
  %771 = load ptr, ptr %27, align 8, !tbaa !11
  %772 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %771, i32 0, i32 6
  %773 = load ptr, ptr %772, align 8, !tbaa !13
  %774 = load i64, ptr %28, align 8, !tbaa !5
  %775 = load i64, ptr %31, align 8, !tbaa !5
  %776 = add nsw i64 %774, %775
  %777 = add nsw i64 %776, 1
  %778 = getelementptr inbounds ptr, ptr %773, i64 %777
  %779 = load ptr, ptr %778, align 8, !tbaa !11
  %780 = load i64, ptr %29, align 8, !tbaa !5
  %781 = load i64, ptr %32, align 8, !tbaa !5
  %782 = add nsw i64 %780, %781
  %783 = add nsw i64 %782, 2
  %784 = getelementptr inbounds double, ptr %779, i64 %783
  %785 = load double, ptr %784, align 8, !tbaa !9
  %786 = load double, ptr %19, align 8, !tbaa !9
  %787 = load double, ptr %40, align 8, !tbaa !9
  %788 = fmul double %786, %787
  %789 = call double @llvm.fmuladd.f64(double %770, double %785, double %788)
  %790 = load ptr, ptr %27, align 8, !tbaa !11
  %791 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %790, i32 0, i32 6
  %792 = load ptr, ptr %791, align 8, !tbaa !13
  %793 = load i64, ptr %28, align 8, !tbaa !5
  %794 = load i64, ptr %31, align 8, !tbaa !5
  %795 = add nsw i64 %793, %794
  %796 = add nsw i64 %795, 1
  %797 = getelementptr inbounds ptr, ptr %792, i64 %796
  %798 = load ptr, ptr %797, align 8, !tbaa !11
  %799 = load i64, ptr %29, align 8, !tbaa !5
  %800 = load i64, ptr %32, align 8, !tbaa !5
  %801 = add nsw i64 %799, %800
  %802 = add nsw i64 %801, 2
  %803 = getelementptr inbounds double, ptr %798, i64 %802
  store double %789, ptr %803, align 8, !tbaa !9
  %804 = load double, ptr %26, align 8, !tbaa !9
  %805 = load ptr, ptr %27, align 8, !tbaa !11
  %806 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %805, i32 0, i32 6
  %807 = load ptr, ptr %806, align 8, !tbaa !13
  %808 = load i64, ptr %28, align 8, !tbaa !5
  %809 = load i64, ptr %31, align 8, !tbaa !5
  %810 = add nsw i64 %808, %809
  %811 = add nsw i64 %810, 1
  %812 = getelementptr inbounds ptr, ptr %807, i64 %811
  %813 = load ptr, ptr %812, align 8, !tbaa !11
  %814 = load i64, ptr %29, align 8, !tbaa !5
  %815 = load i64, ptr %32, align 8, !tbaa !5
  %816 = add nsw i64 %814, %815
  %817 = add nsw i64 %816, 3
  %818 = getelementptr inbounds double, ptr %813, i64 %817
  %819 = load double, ptr %818, align 8, !tbaa !9
  %820 = load double, ptr %19, align 8, !tbaa !9
  %821 = load double, ptr %41, align 8, !tbaa !9
  %822 = fmul double %820, %821
  %823 = call double @llvm.fmuladd.f64(double %804, double %819, double %822)
  %824 = load ptr, ptr %27, align 8, !tbaa !11
  %825 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %824, i32 0, i32 6
  %826 = load ptr, ptr %825, align 8, !tbaa !13
  %827 = load i64, ptr %28, align 8, !tbaa !5
  %828 = load i64, ptr %31, align 8, !tbaa !5
  %829 = add nsw i64 %827, %828
  %830 = add nsw i64 %829, 1
  %831 = getelementptr inbounds ptr, ptr %826, i64 %830
  %832 = load ptr, ptr %831, align 8, !tbaa !11
  %833 = load i64, ptr %29, align 8, !tbaa !5
  %834 = load i64, ptr %32, align 8, !tbaa !5
  %835 = add nsw i64 %833, %834
  %836 = add nsw i64 %835, 3
  %837 = getelementptr inbounds double, ptr %832, i64 %836
  store double %823, ptr %837, align 8, !tbaa !9
  %838 = load double, ptr %26, align 8, !tbaa !9
  %839 = load ptr, ptr %27, align 8, !tbaa !11
  %840 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %839, i32 0, i32 6
  %841 = load ptr, ptr %840, align 8, !tbaa !13
  %842 = load i64, ptr %28, align 8, !tbaa !5
  %843 = load i64, ptr %31, align 8, !tbaa !5
  %844 = add nsw i64 %842, %843
  %845 = add nsw i64 %844, 2
  %846 = getelementptr inbounds ptr, ptr %841, i64 %845
  %847 = load ptr, ptr %846, align 8, !tbaa !11
  %848 = load i64, ptr %29, align 8, !tbaa !5
  %849 = load i64, ptr %32, align 8, !tbaa !5
  %850 = add nsw i64 %848, %849
  %851 = add nsw i64 %850, 0
  %852 = getelementptr inbounds double, ptr %847, i64 %851
  %853 = load double, ptr %852, align 8, !tbaa !9
  %854 = load double, ptr %19, align 8, !tbaa !9
  %855 = load double, ptr %42, align 8, !tbaa !9
  %856 = fmul double %854, %855
  %857 = call double @llvm.fmuladd.f64(double %838, double %853, double %856)
  %858 = load ptr, ptr %27, align 8, !tbaa !11
  %859 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %858, i32 0, i32 6
  %860 = load ptr, ptr %859, align 8, !tbaa !13
  %861 = load i64, ptr %28, align 8, !tbaa !5
  %862 = load i64, ptr %31, align 8, !tbaa !5
  %863 = add nsw i64 %861, %862
  %864 = add nsw i64 %863, 2
  %865 = getelementptr inbounds ptr, ptr %860, i64 %864
  %866 = load ptr, ptr %865, align 8, !tbaa !11
  %867 = load i64, ptr %29, align 8, !tbaa !5
  %868 = load i64, ptr %32, align 8, !tbaa !5
  %869 = add nsw i64 %867, %868
  %870 = add nsw i64 %869, 0
  %871 = getelementptr inbounds double, ptr %866, i64 %870
  store double %857, ptr %871, align 8, !tbaa !9
  %872 = load double, ptr %26, align 8, !tbaa !9
  %873 = load ptr, ptr %27, align 8, !tbaa !11
  %874 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %873, i32 0, i32 6
  %875 = load ptr, ptr %874, align 8, !tbaa !13
  %876 = load i64, ptr %28, align 8, !tbaa !5
  %877 = load i64, ptr %31, align 8, !tbaa !5
  %878 = add nsw i64 %876, %877
  %879 = add nsw i64 %878, 2
  %880 = getelementptr inbounds ptr, ptr %875, i64 %879
  %881 = load ptr, ptr %880, align 8, !tbaa !11
  %882 = load i64, ptr %29, align 8, !tbaa !5
  %883 = load i64, ptr %32, align 8, !tbaa !5
  %884 = add nsw i64 %882, %883
  %885 = add nsw i64 %884, 1
  %886 = getelementptr inbounds double, ptr %881, i64 %885
  %887 = load double, ptr %886, align 8, !tbaa !9
  %888 = load double, ptr %19, align 8, !tbaa !9
  %889 = load double, ptr %43, align 8, !tbaa !9
  %890 = fmul double %888, %889
  %891 = call double @llvm.fmuladd.f64(double %872, double %887, double %890)
  %892 = load ptr, ptr %27, align 8, !tbaa !11
  %893 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %892, i32 0, i32 6
  %894 = load ptr, ptr %893, align 8, !tbaa !13
  %895 = load i64, ptr %28, align 8, !tbaa !5
  %896 = load i64, ptr %31, align 8, !tbaa !5
  %897 = add nsw i64 %895, %896
  %898 = add nsw i64 %897, 2
  %899 = getelementptr inbounds ptr, ptr %894, i64 %898
  %900 = load ptr, ptr %899, align 8, !tbaa !11
  %901 = load i64, ptr %29, align 8, !tbaa !5
  %902 = load i64, ptr %32, align 8, !tbaa !5
  %903 = add nsw i64 %901, %902
  %904 = add nsw i64 %903, 1
  %905 = getelementptr inbounds double, ptr %900, i64 %904
  store double %891, ptr %905, align 8, !tbaa !9
  %906 = load double, ptr %26, align 8, !tbaa !9
  %907 = load ptr, ptr %27, align 8, !tbaa !11
  %908 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %907, i32 0, i32 6
  %909 = load ptr, ptr %908, align 8, !tbaa !13
  %910 = load i64, ptr %28, align 8, !tbaa !5
  %911 = load i64, ptr %31, align 8, !tbaa !5
  %912 = add nsw i64 %910, %911
  %913 = add nsw i64 %912, 2
  %914 = getelementptr inbounds ptr, ptr %909, i64 %913
  %915 = load ptr, ptr %914, align 8, !tbaa !11
  %916 = load i64, ptr %29, align 8, !tbaa !5
  %917 = load i64, ptr %32, align 8, !tbaa !5
  %918 = add nsw i64 %916, %917
  %919 = add nsw i64 %918, 2
  %920 = getelementptr inbounds double, ptr %915, i64 %919
  %921 = load double, ptr %920, align 8, !tbaa !9
  %922 = load double, ptr %19, align 8, !tbaa !9
  %923 = load double, ptr %44, align 8, !tbaa !9
  %924 = fmul double %922, %923
  %925 = call double @llvm.fmuladd.f64(double %906, double %921, double %924)
  %926 = load ptr, ptr %27, align 8, !tbaa !11
  %927 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %926, i32 0, i32 6
  %928 = load ptr, ptr %927, align 8, !tbaa !13
  %929 = load i64, ptr %28, align 8, !tbaa !5
  %930 = load i64, ptr %31, align 8, !tbaa !5
  %931 = add nsw i64 %929, %930
  %932 = add nsw i64 %931, 2
  %933 = getelementptr inbounds ptr, ptr %928, i64 %932
  %934 = load ptr, ptr %933, align 8, !tbaa !11
  %935 = load i64, ptr %29, align 8, !tbaa !5
  %936 = load i64, ptr %32, align 8, !tbaa !5
  %937 = add nsw i64 %935, %936
  %938 = add nsw i64 %937, 2
  %939 = getelementptr inbounds double, ptr %934, i64 %938
  store double %925, ptr %939, align 8, !tbaa !9
  %940 = load double, ptr %26, align 8, !tbaa !9
  %941 = load ptr, ptr %27, align 8, !tbaa !11
  %942 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %941, i32 0, i32 6
  %943 = load ptr, ptr %942, align 8, !tbaa !13
  %944 = load i64, ptr %28, align 8, !tbaa !5
  %945 = load i64, ptr %31, align 8, !tbaa !5
  %946 = add nsw i64 %944, %945
  %947 = add nsw i64 %946, 2
  %948 = getelementptr inbounds ptr, ptr %943, i64 %947
  %949 = load ptr, ptr %948, align 8, !tbaa !11
  %950 = load i64, ptr %29, align 8, !tbaa !5
  %951 = load i64, ptr %32, align 8, !tbaa !5
  %952 = add nsw i64 %950, %951
  %953 = add nsw i64 %952, 3
  %954 = getelementptr inbounds double, ptr %949, i64 %953
  %955 = load double, ptr %954, align 8, !tbaa !9
  %956 = load double, ptr %19, align 8, !tbaa !9
  %957 = load double, ptr %45, align 8, !tbaa !9
  %958 = fmul double %956, %957
  %959 = call double @llvm.fmuladd.f64(double %940, double %955, double %958)
  %960 = load ptr, ptr %27, align 8, !tbaa !11
  %961 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %960, i32 0, i32 6
  %962 = load ptr, ptr %961, align 8, !tbaa !13
  %963 = load i64, ptr %28, align 8, !tbaa !5
  %964 = load i64, ptr %31, align 8, !tbaa !5
  %965 = add nsw i64 %963, %964
  %966 = add nsw i64 %965, 2
  %967 = getelementptr inbounds ptr, ptr %962, i64 %966
  %968 = load ptr, ptr %967, align 8, !tbaa !11
  %969 = load i64, ptr %29, align 8, !tbaa !5
  %970 = load i64, ptr %32, align 8, !tbaa !5
  %971 = add nsw i64 %969, %970
  %972 = add nsw i64 %971, 3
  %973 = getelementptr inbounds double, ptr %968, i64 %972
  store double %959, ptr %973, align 8, !tbaa !9
  %974 = load double, ptr %26, align 8, !tbaa !9
  %975 = load ptr, ptr %27, align 8, !tbaa !11
  %976 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %975, i32 0, i32 6
  %977 = load ptr, ptr %976, align 8, !tbaa !13
  %978 = load i64, ptr %28, align 8, !tbaa !5
  %979 = load i64, ptr %31, align 8, !tbaa !5
  %980 = add nsw i64 %978, %979
  %981 = add nsw i64 %980, 3
  %982 = getelementptr inbounds ptr, ptr %977, i64 %981
  %983 = load ptr, ptr %982, align 8, !tbaa !11
  %984 = load i64, ptr %29, align 8, !tbaa !5
  %985 = load i64, ptr %32, align 8, !tbaa !5
  %986 = add nsw i64 %984, %985
  %987 = add nsw i64 %986, 0
  %988 = getelementptr inbounds double, ptr %983, i64 %987
  %989 = load double, ptr %988, align 8, !tbaa !9
  %990 = load double, ptr %19, align 8, !tbaa !9
  %991 = load double, ptr %46, align 8, !tbaa !9
  %992 = fmul double %990, %991
  %993 = call double @llvm.fmuladd.f64(double %974, double %989, double %992)
  %994 = load ptr, ptr %27, align 8, !tbaa !11
  %995 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %994, i32 0, i32 6
  %996 = load ptr, ptr %995, align 8, !tbaa !13
  %997 = load i64, ptr %28, align 8, !tbaa !5
  %998 = load i64, ptr %31, align 8, !tbaa !5
  %999 = add nsw i64 %997, %998
  %1000 = add nsw i64 %999, 3
  %1001 = getelementptr inbounds ptr, ptr %996, i64 %1000
  %1002 = load ptr, ptr %1001, align 8, !tbaa !11
  %1003 = load i64, ptr %29, align 8, !tbaa !5
  %1004 = load i64, ptr %32, align 8, !tbaa !5
  %1005 = add nsw i64 %1003, %1004
  %1006 = add nsw i64 %1005, 0
  %1007 = getelementptr inbounds double, ptr %1002, i64 %1006
  store double %993, ptr %1007, align 8, !tbaa !9
  %1008 = load double, ptr %26, align 8, !tbaa !9
  %1009 = load ptr, ptr %27, align 8, !tbaa !11
  %1010 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1009, i32 0, i32 6
  %1011 = load ptr, ptr %1010, align 8, !tbaa !13
  %1012 = load i64, ptr %28, align 8, !tbaa !5
  %1013 = load i64, ptr %31, align 8, !tbaa !5
  %1014 = add nsw i64 %1012, %1013
  %1015 = add nsw i64 %1014, 3
  %1016 = getelementptr inbounds ptr, ptr %1011, i64 %1015
  %1017 = load ptr, ptr %1016, align 8, !tbaa !11
  %1018 = load i64, ptr %29, align 8, !tbaa !5
  %1019 = load i64, ptr %32, align 8, !tbaa !5
  %1020 = add nsw i64 %1018, %1019
  %1021 = add nsw i64 %1020, 1
  %1022 = getelementptr inbounds double, ptr %1017, i64 %1021
  %1023 = load double, ptr %1022, align 8, !tbaa !9
  %1024 = load double, ptr %19, align 8, !tbaa !9
  %1025 = load double, ptr %47, align 8, !tbaa !9
  %1026 = fmul double %1024, %1025
  %1027 = call double @llvm.fmuladd.f64(double %1008, double %1023, double %1026)
  %1028 = load ptr, ptr %27, align 8, !tbaa !11
  %1029 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1028, i32 0, i32 6
  %1030 = load ptr, ptr %1029, align 8, !tbaa !13
  %1031 = load i64, ptr %28, align 8, !tbaa !5
  %1032 = load i64, ptr %31, align 8, !tbaa !5
  %1033 = add nsw i64 %1031, %1032
  %1034 = add nsw i64 %1033, 3
  %1035 = getelementptr inbounds ptr, ptr %1030, i64 %1034
  %1036 = load ptr, ptr %1035, align 8, !tbaa !11
  %1037 = load i64, ptr %29, align 8, !tbaa !5
  %1038 = load i64, ptr %32, align 8, !tbaa !5
  %1039 = add nsw i64 %1037, %1038
  %1040 = add nsw i64 %1039, 1
  %1041 = getelementptr inbounds double, ptr %1036, i64 %1040
  store double %1027, ptr %1041, align 8, !tbaa !9
  %1042 = load double, ptr %26, align 8, !tbaa !9
  %1043 = load ptr, ptr %27, align 8, !tbaa !11
  %1044 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1043, i32 0, i32 6
  %1045 = load ptr, ptr %1044, align 8, !tbaa !13
  %1046 = load i64, ptr %28, align 8, !tbaa !5
  %1047 = load i64, ptr %31, align 8, !tbaa !5
  %1048 = add nsw i64 %1046, %1047
  %1049 = add nsw i64 %1048, 3
  %1050 = getelementptr inbounds ptr, ptr %1045, i64 %1049
  %1051 = load ptr, ptr %1050, align 8, !tbaa !11
  %1052 = load i64, ptr %29, align 8, !tbaa !5
  %1053 = load i64, ptr %32, align 8, !tbaa !5
  %1054 = add nsw i64 %1052, %1053
  %1055 = add nsw i64 %1054, 2
  %1056 = getelementptr inbounds double, ptr %1051, i64 %1055
  %1057 = load double, ptr %1056, align 8, !tbaa !9
  %1058 = load double, ptr %19, align 8, !tbaa !9
  %1059 = load double, ptr %48, align 8, !tbaa !9
  %1060 = fmul double %1058, %1059
  %1061 = call double @llvm.fmuladd.f64(double %1042, double %1057, double %1060)
  %1062 = load ptr, ptr %27, align 8, !tbaa !11
  %1063 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1062, i32 0, i32 6
  %1064 = load ptr, ptr %1063, align 8, !tbaa !13
  %1065 = load i64, ptr %28, align 8, !tbaa !5
  %1066 = load i64, ptr %31, align 8, !tbaa !5
  %1067 = add nsw i64 %1065, %1066
  %1068 = add nsw i64 %1067, 3
  %1069 = getelementptr inbounds ptr, ptr %1064, i64 %1068
  %1070 = load ptr, ptr %1069, align 8, !tbaa !11
  %1071 = load i64, ptr %29, align 8, !tbaa !5
  %1072 = load i64, ptr %32, align 8, !tbaa !5
  %1073 = add nsw i64 %1071, %1072
  %1074 = add nsw i64 %1073, 2
  %1075 = getelementptr inbounds double, ptr %1070, i64 %1074
  store double %1061, ptr %1075, align 8, !tbaa !9
  %1076 = load double, ptr %26, align 8, !tbaa !9
  %1077 = load ptr, ptr %27, align 8, !tbaa !11
  %1078 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1077, i32 0, i32 6
  %1079 = load ptr, ptr %1078, align 8, !tbaa !13
  %1080 = load i64, ptr %28, align 8, !tbaa !5
  %1081 = load i64, ptr %31, align 8, !tbaa !5
  %1082 = add nsw i64 %1080, %1081
  %1083 = add nsw i64 %1082, 3
  %1084 = getelementptr inbounds ptr, ptr %1079, i64 %1083
  %1085 = load ptr, ptr %1084, align 8, !tbaa !11
  %1086 = load i64, ptr %29, align 8, !tbaa !5
  %1087 = load i64, ptr %32, align 8, !tbaa !5
  %1088 = add nsw i64 %1086, %1087
  %1089 = add nsw i64 %1088, 3
  %1090 = getelementptr inbounds double, ptr %1085, i64 %1089
  %1091 = load double, ptr %1090, align 8, !tbaa !9
  %1092 = load double, ptr %19, align 8, !tbaa !9
  %1093 = load double, ptr %49, align 8, !tbaa !9
  %1094 = fmul double %1092, %1093
  %1095 = call double @llvm.fmuladd.f64(double %1076, double %1091, double %1094)
  %1096 = load ptr, ptr %27, align 8, !tbaa !11
  %1097 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1096, i32 0, i32 6
  %1098 = load ptr, ptr %1097, align 8, !tbaa !13
  %1099 = load i64, ptr %28, align 8, !tbaa !5
  %1100 = load i64, ptr %31, align 8, !tbaa !5
  %1101 = add nsw i64 %1099, %1100
  %1102 = add nsw i64 %1101, 3
  %1103 = getelementptr inbounds ptr, ptr %1098, i64 %1102
  %1104 = load ptr, ptr %1103, align 8, !tbaa !11
  %1105 = load i64, ptr %29, align 8, !tbaa !5
  %1106 = load i64, ptr %32, align 8, !tbaa !5
  %1107 = add nsw i64 %1105, %1106
  %1108 = add nsw i64 %1107, 3
  %1109 = getelementptr inbounds double, ptr %1104, i64 %1108
  store double %1095, ptr %1109, align 8, !tbaa !9
  br label %1110

1110:                                             ; preds = %565, %292
  br label %1237

1111:                                             ; preds = %100, %95
  %1112 = load i64, ptr %31, align 8, !tbaa !5
  store i64 %1112, ptr %66, align 8, !tbaa !5
  %1113 = load i64, ptr %31, align 8, !tbaa !5
  %1114 = add nsw i64 %1113, 3
  %1115 = load i64, ptr %16, align 8, !tbaa !5
  %1116 = sub nsw i64 %1115, 1
  %1117 = load ptr, ptr %30, align 8, !tbaa !11
  %1118 = call noundef i64 @_ZN11alglib_impl9ae_minintEllPNS_8ae_stateE(i64 noundef %1114, i64 noundef %1116, ptr noundef %1117)
  store i64 %1118, ptr %67, align 8, !tbaa !5
  %1119 = load i64, ptr %32, align 8, !tbaa !5
  store i64 %1119, ptr %69, align 8, !tbaa !5
  %1120 = load i64, ptr %32, align 8, !tbaa !5
  %1121 = add nsw i64 %1120, 3
  %1122 = load i64, ptr %17, align 8, !tbaa !5
  %1123 = sub nsw i64 %1122, 1
  %1124 = load ptr, ptr %30, align 8, !tbaa !11
  %1125 = call noundef i64 @_ZN11alglib_impl9ae_minintEllPNS_8ae_stateE(i64 noundef %1121, i64 noundef %1123, ptr noundef %1124)
  store i64 %1125, ptr %70, align 8, !tbaa !5
  %1126 = load i64, ptr %66, align 8, !tbaa !5
  store i64 %1126, ptr %68, align 8, !tbaa !5
  br label %1127

1127:                                             ; preds = %1233, %1111
  %1128 = load i64, ptr %68, align 8, !tbaa !5
  %1129 = load i64, ptr %67, align 8, !tbaa !5
  %1130 = icmp sle i64 %1128, %1129
  br i1 %1130, label %1131, label %1236

1131:                                             ; preds = %1127
  %1132 = load i64, ptr %69, align 8, !tbaa !5
  store i64 %1132, ptr %71, align 8, !tbaa !5
  br label %1133

1133:                                             ; preds = %1229, %1131
  %1134 = load i64, ptr %71, align 8, !tbaa !5
  %1135 = load i64, ptr %70, align 8, !tbaa !5
  %1136 = icmp sle i64 %1134, %1135
  br i1 %1136, label %1137, label %1232

1137:                                             ; preds = %1133
  %1138 = load i64, ptr %18, align 8, !tbaa !5
  %1139 = icmp eq i64 %1138, 0
  br i1 %1139, label %1143, label %1140

1140:                                             ; preds = %1137
  %1141 = load double, ptr %19, align 8, !tbaa !9
  %1142 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %1141, double noundef 0.000000e+00)
  br i1 %1142, label %1143, label %1144

1143:                                             ; preds = %1140, %1137
  store double 0.000000e+00, ptr %33, align 8, !tbaa !9
  br label %1178

1144:                                             ; preds = %1140
  store double 0.000000e+00, ptr %33, align 8, !tbaa !9
  %1145 = load ptr, ptr %20, align 8, !tbaa !11
  %1146 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1145, i32 0, i32 6
  %1147 = load ptr, ptr %1146, align 8, !tbaa !13
  %1148 = load i64, ptr %21, align 8, !tbaa !5
  %1149 = getelementptr inbounds ptr, ptr %1147, i64 %1148
  %1150 = load ptr, ptr %1149, align 8, !tbaa !11
  %1151 = load i64, ptr %22, align 8, !tbaa !5
  %1152 = load i64, ptr %68, align 8, !tbaa !5
  %1153 = add nsw i64 %1151, %1152
  %1154 = getelementptr inbounds double, ptr %1150, i64 %1153
  %1155 = load ptr, ptr %20, align 8, !tbaa !11
  %1156 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1155, i32 0, i32 2
  %1157 = load i64, ptr %1156, align 8, !tbaa !16
  %1158 = load ptr, ptr %23, align 8, !tbaa !11
  %1159 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1158, i32 0, i32 6
  %1160 = load ptr, ptr %1159, align 8, !tbaa !13
  %1161 = load i64, ptr %24, align 8, !tbaa !5
  %1162 = getelementptr inbounds ptr, ptr %1160, i64 %1161
  %1163 = load ptr, ptr %1162, align 8, !tbaa !11
  %1164 = load i64, ptr %25, align 8, !tbaa !5
  %1165 = load i64, ptr %71, align 8, !tbaa !5
  %1166 = add nsw i64 %1164, %1165
  %1167 = getelementptr inbounds double, ptr %1163, i64 %1166
  %1168 = load ptr, ptr %23, align 8, !tbaa !11
  %1169 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1168, i32 0, i32 2
  %1170 = load i64, ptr %1169, align 8, !tbaa !16
  %1171 = load i64, ptr %21, align 8, !tbaa !5
  %1172 = load i64, ptr %21, align 8, !tbaa !5
  %1173 = load i64, ptr %18, align 8, !tbaa !5
  %1174 = add nsw i64 %1172, %1173
  %1175 = sub nsw i64 %1174, 1
  %1176 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %1171, i64 noundef %1175)
  %1177 = call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %1154, i64 noundef %1157, ptr noundef %1167, i64 noundef %1170, i64 noundef %1176)
  store double %1177, ptr %33, align 8, !tbaa !9
  br label %1178

1178:                                             ; preds = %1144, %1143
  %1179 = load double, ptr %26, align 8, !tbaa !9
  %1180 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %1179, double noundef 0.000000e+00)
  br i1 %1180, label %1181, label %1197

1181:                                             ; preds = %1178
  %1182 = load double, ptr %19, align 8, !tbaa !9
  %1183 = load double, ptr %33, align 8, !tbaa !9
  %1184 = fmul double %1182, %1183
  %1185 = load ptr, ptr %27, align 8, !tbaa !11
  %1186 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1185, i32 0, i32 6
  %1187 = load ptr, ptr %1186, align 8, !tbaa !13
  %1188 = load i64, ptr %28, align 8, !tbaa !5
  %1189 = load i64, ptr %68, align 8, !tbaa !5
  %1190 = add nsw i64 %1188, %1189
  %1191 = getelementptr inbounds ptr, ptr %1187, i64 %1190
  %1192 = load ptr, ptr %1191, align 8, !tbaa !11
  %1193 = load i64, ptr %29, align 8, !tbaa !5
  %1194 = load i64, ptr %71, align 8, !tbaa !5
  %1195 = add nsw i64 %1193, %1194
  %1196 = getelementptr inbounds double, ptr %1192, i64 %1195
  store double %1184, ptr %1196, align 8, !tbaa !9
  br label %1228

1197:                                             ; preds = %1178
  %1198 = load double, ptr %26, align 8, !tbaa !9
  %1199 = load ptr, ptr %27, align 8, !tbaa !11
  %1200 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1199, i32 0, i32 6
  %1201 = load ptr, ptr %1200, align 8, !tbaa !13
  %1202 = load i64, ptr %28, align 8, !tbaa !5
  %1203 = load i64, ptr %68, align 8, !tbaa !5
  %1204 = add nsw i64 %1202, %1203
  %1205 = getelementptr inbounds ptr, ptr %1201, i64 %1204
  %1206 = load ptr, ptr %1205, align 8, !tbaa !11
  %1207 = load i64, ptr %29, align 8, !tbaa !5
  %1208 = load i64, ptr %71, align 8, !tbaa !5
  %1209 = add nsw i64 %1207, %1208
  %1210 = getelementptr inbounds double, ptr %1206, i64 %1209
  %1211 = load double, ptr %1210, align 8, !tbaa !9
  %1212 = load double, ptr %19, align 8, !tbaa !9
  %1213 = load double, ptr %33, align 8, !tbaa !9
  %1214 = fmul double %1212, %1213
  %1215 = call double @llvm.fmuladd.f64(double %1198, double %1211, double %1214)
  %1216 = load ptr, ptr %27, align 8, !tbaa !11
  %1217 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1216, i32 0, i32 6
  %1218 = load ptr, ptr %1217, align 8, !tbaa !13
  %1219 = load i64, ptr %28, align 8, !tbaa !5
  %1220 = load i64, ptr %68, align 8, !tbaa !5
  %1221 = add nsw i64 %1219, %1220
  %1222 = getelementptr inbounds ptr, ptr %1218, i64 %1221
  %1223 = load ptr, ptr %1222, align 8, !tbaa !11
  %1224 = load i64, ptr %29, align 8, !tbaa !5
  %1225 = load i64, ptr %71, align 8, !tbaa !5
  %1226 = add nsw i64 %1224, %1225
  %1227 = getelementptr inbounds double, ptr %1223, i64 %1226
  store double %1215, ptr %1227, align 8, !tbaa !9
  br label %1228

1228:                                             ; preds = %1197, %1181
  br label %1229

1229:                                             ; preds = %1228
  %1230 = load i64, ptr %71, align 8, !tbaa !5
  %1231 = add nsw i64 %1230, 1
  store i64 %1231, ptr %71, align 8, !tbaa !5
  br label %1133, !llvm.loop !20

1232:                                             ; preds = %1133
  br label %1233

1233:                                             ; preds = %1232
  %1234 = load i64, ptr %68, align 8, !tbaa !5
  %1235 = add nsw i64 %1234, 1
  store i64 %1235, ptr %68, align 8, !tbaa !5
  br label %1127, !llvm.loop !21

1236:                                             ; preds = %1127
  br label %1237

1237:                                             ; preds = %1236, %1110
  %1238 = load i64, ptr %32, align 8, !tbaa !5
  %1239 = add nsw i64 %1238, 4
  store i64 %1239, ptr %32, align 8, !tbaa !5
  br label %91, !llvm.loop !22

1240:                                             ; preds = %91
  %1241 = load i64, ptr %31, align 8, !tbaa !5
  %1242 = add nsw i64 %1241, 4
  store i64 %1242, ptr %31, align 8, !tbaa !5
  br label %86, !llvm.loop !23

1243:                                             ; preds = %86
  store i32 0, ptr %75, align 4
  br label %1244

1244:                                             ; preds = %1243, %84
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %73) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  %1245 = load i32, ptr %75, align 4
  switch i32 %1245, label %1247 [
    i32 0, label %1246
    i32 1, label %1246
  ]

1246:                                             ; preds = %1244, %1244
  ret void

1247:                                             ; preds = %1244
  unreachable
}

declare noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"any pointer", !7, i64 0}
!13 = !{!7, !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = !{!17, !6, i64 16}
!17 = !{!"_ZTSN11alglib_impl9ae_matrixE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !18, i64 32, !19, i64 40, !7, i64 72}
!18 = !{!"bool", !7, i64 0}
!19 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!20 = distinct !{!20, !15}
!21 = distinct !{!21, !15}
!22 = distinct !{!22, !15}
!23 = distinct !{!23, !15}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str.32 = external hidden unnamed_addr constant [44 x i8], align 1

declare noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef, double noundef) local_unnamed_addr #0

declare void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext, ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

declare noundef i64 @_ZN11alglib_impl9ae_minintEllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

declare noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef, i64 noundef) local_unnamed_addr #0

declare noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef, double noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl17rmatrixgemmk44v10EllldPNS_9ae_matrixEllS1_lldS1_llPNS_8ae_stateE(i64 noundef %0, i64 noundef %1, i64 noundef %2, double noundef %3, ptr nocapture noundef readonly %4, i64 noundef %5, i64 noundef %6, ptr nocapture noundef readonly %7, i64 noundef %8, i64 noundef %9, double noundef %10, ptr nocapture noundef readonly %11, i64 noundef %12, i64 noundef %13, ptr noundef %14) local_unnamed_addr #2 {
  %16 = tail call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %3, double noundef 0.000000e+00)
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %16, ptr noundef nonnull @.str.32, ptr noundef %14)
  %17 = icmp ne i64 %1, 0
  %18 = icmp sgt i64 %0, 0
  %or.cond573 = and i1 %18, %17
  br i1 %or.cond573, label %.preheader514.lr.ph, label %.loopexit516

.preheader514.lr.ph:                              ; preds = %15
  %19 = icmp sgt i64 %1, 0
  %.not511.not517 = icmp sgt i64 %2, 0
  %20 = getelementptr inbounds i8, ptr %4, i64 72
  %21 = getelementptr inbounds i8, ptr %7, i64 72
  %22 = getelementptr inbounds i8, ptr %11, i64 72
  %23 = add nsw i64 %0, -1
  %24 = add nsw i64 %1, -1
  %25 = icmp eq i64 %2, 0
  %26 = getelementptr inbounds i8, ptr %4, i64 16
  %27 = getelementptr inbounds i8, ptr %7, i64 16
  %28 = add i64 %2, -1
  %29 = add i64 %28, %5
  %30 = fmul double %3, 0.000000e+00
  br i1 %19, label %.preheader514.us, label %.loopexit516

.preheader514.us:                                 ; preds = %.preheader514.lr.ph, %._crit_edge564.us
  %.0485565.us = phi i64 [ %31, %._crit_edge564.us ], [ 0, %.preheader514.lr.ph ]
  %31 = add nuw nsw i64 %.0485565.us, 4
  %.not.us = icmp sgt i64 %31, %0
  %32 = add nsw i64 %.0485565.us, %12
  %33 = add nsw i64 %32, 1
  %34 = add nsw i64 %32, 2
  %35 = add nsw i64 %32, 3
  %36 = or disjoint i64 %.0485565.us, 3
  br label %37

37:                                               ; preds = %.preheader514.us, %.loopexit.us
  %.0486562.us = phi i64 [ 0, %.preheader514.us ], [ %38, %.loopexit.us ]
  %38 = add nuw nsw i64 %.0486562.us, 4
  %.not508.us = icmp sgt i64 %38, %1
  %or.cond512.us = select i1 %.not.us, i1 true, i1 %.not508.us
  br i1 %or.cond512.us, label %293, label %.preheader513.us

._crit_edge.us:                                   ; preds = %275, %.preheader513.us
  %39 = phi <16 x double> [ zeroinitializer, %.preheader513.us ], [ %289, %275 ]
  %40 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %10, double noundef 0.000000e+00)
  br i1 %40, label %174, label %41

41:                                               ; preds = %._crit_edge.us
  %42 = load ptr, ptr %22, align 8, !tbaa !5
  %43 = getelementptr inbounds ptr, ptr %42, i64 %32
  %44 = load ptr, ptr %43, align 8, !tbaa !8
  %45 = add nsw i64 %.0486562.us, %13
  %46 = getelementptr inbounds double, ptr %44, i64 %45
  %47 = load double, ptr %46, align 8, !tbaa !10
  %48 = extractelement <16 x double> %39, i64 12
  %49 = fmul double %48, %3
  %50 = tail call double @llvm.fmuladd.f64(double %10, double %47, double %49)
  store double %50, ptr %46, align 8, !tbaa !10
  %51 = load ptr, ptr %22, align 8, !tbaa !5
  %52 = getelementptr inbounds ptr, ptr %51, i64 %32
  %53 = load ptr, ptr %52, align 8, !tbaa !8
  %54 = add nsw i64 %45, 1
  %55 = getelementptr inbounds double, ptr %53, i64 %54
  %56 = load double, ptr %55, align 8, !tbaa !10
  %57 = extractelement <16 x double> %39, i64 8
  %58 = fmul double %57, %3
  %59 = tail call double @llvm.fmuladd.f64(double %10, double %56, double %58)
  store double %59, ptr %55, align 8, !tbaa !10
  %60 = load ptr, ptr %22, align 8, !tbaa !5
  %61 = getelementptr inbounds ptr, ptr %60, i64 %32
  %62 = load ptr, ptr %61, align 8, !tbaa !8
  %63 = add nsw i64 %45, 2
  %64 = getelementptr inbounds double, ptr %62, i64 %63
  %65 = load double, ptr %64, align 8, !tbaa !10
  %66 = extractelement <16 x double> %39, i64 4
  %67 = fmul double %66, %3
  %68 = tail call double @llvm.fmuladd.f64(double %10, double %65, double %67)
  store double %68, ptr %64, align 8, !tbaa !10
  %69 = load ptr, ptr %22, align 8, !tbaa !5
  %70 = getelementptr inbounds ptr, ptr %69, i64 %32
  %71 = load ptr, ptr %70, align 8, !tbaa !8
  %72 = add nsw i64 %45, 3
  %73 = getelementptr inbounds double, ptr %71, i64 %72
  %74 = load double, ptr %73, align 8, !tbaa !10
  %75 = extractelement <16 x double> %39, i64 0
  %76 = fmul double %75, %3
  %77 = tail call double @llvm.fmuladd.f64(double %10, double %74, double %76)
  store double %77, ptr %73, align 8, !tbaa !10
  %78 = load ptr, ptr %22, align 8, !tbaa !5
  %79 = getelementptr inbounds ptr, ptr %78, i64 %33
  %80 = load ptr, ptr %79, align 8, !tbaa !8
  %81 = getelementptr inbounds double, ptr %80, i64 %45
  %82 = load double, ptr %81, align 8, !tbaa !10
  %83 = extractelement <16 x double> %39, i64 13
  %84 = fmul double %83, %3
  %85 = tail call double @llvm.fmuladd.f64(double %10, double %82, double %84)
  store double %85, ptr %81, align 8, !tbaa !10
  %86 = load ptr, ptr %22, align 8, !tbaa !5
  %87 = getelementptr inbounds ptr, ptr %86, i64 %33
  %88 = load ptr, ptr %87, align 8, !tbaa !8
  %89 = getelementptr inbounds double, ptr %88, i64 %54
  %90 = load double, ptr %89, align 8, !tbaa !10
  %91 = extractelement <16 x double> %39, i64 9
  %92 = fmul double %91, %3
  %93 = tail call double @llvm.fmuladd.f64(double %10, double %90, double %92)
  store double %93, ptr %89, align 8, !tbaa !10
  %94 = load ptr, ptr %22, align 8, !tbaa !5
  %95 = getelementptr inbounds ptr, ptr %94, i64 %33
  %96 = load ptr, ptr %95, align 8, !tbaa !8
  %97 = getelementptr inbounds double, ptr %96, i64 %63
  %98 = load double, ptr %97, align 8, !tbaa !10
  %99 = extractelement <16 x double> %39, i64 5
  %100 = fmul double %99, %3
  %101 = tail call double @llvm.fmuladd.f64(double %10, double %98, double %100)
  store double %101, ptr %97, align 8, !tbaa !10
  %102 = load ptr, ptr %22, align 8, !tbaa !5
  %103 = getelementptr inbounds ptr, ptr %102, i64 %33
  %104 = load ptr, ptr %103, align 8, !tbaa !8
  %105 = getelementptr inbounds double, ptr %104, i64 %72
  %106 = load double, ptr %105, align 8, !tbaa !10
  %107 = extractelement <16 x double> %39, i64 1
  %108 = fmul double %107, %3
  %109 = tail call double @llvm.fmuladd.f64(double %10, double %106, double %108)
  store double %109, ptr %105, align 8, !tbaa !10
  %110 = load ptr, ptr %22, align 8, !tbaa !5
  %111 = getelementptr inbounds ptr, ptr %110, i64 %34
  %112 = load ptr, ptr %111, align 8, !tbaa !8
  %113 = getelementptr inbounds double, ptr %112, i64 %45
  %114 = load double, ptr %113, align 8, !tbaa !10
  %115 = extractelement <16 x double> %39, i64 14
  %116 = fmul double %115, %3
  %117 = tail call double @llvm.fmuladd.f64(double %10, double %114, double %116)
  store double %117, ptr %113, align 8, !tbaa !10
  %118 = load ptr, ptr %22, align 8, !tbaa !5
  %119 = getelementptr inbounds ptr, ptr %118, i64 %34
  %120 = load ptr, ptr %119, align 8, !tbaa !8
  %121 = getelementptr inbounds double, ptr %120, i64 %54
  %122 = load double, ptr %121, align 8, !tbaa !10
  %123 = extractelement <16 x double> %39, i64 10
  %124 = fmul double %123, %3
  %125 = tail call double @llvm.fmuladd.f64(double %10, double %122, double %124)
  store double %125, ptr %121, align 8, !tbaa !10
  %126 = load ptr, ptr %22, align 8, !tbaa !5
  %127 = getelementptr inbounds ptr, ptr %126, i64 %34
  %128 = load ptr, ptr %127, align 8, !tbaa !8
  %129 = getelementptr inbounds double, ptr %128, i64 %63
  %130 = load double, ptr %129, align 8, !tbaa !10
  %131 = extractelement <16 x double> %39, i64 6
  %132 = fmul double %131, %3
  %133 = tail call double @llvm.fmuladd.f64(double %10, double %130, double %132)
  store double %133, ptr %129, align 8, !tbaa !10
  %134 = load ptr, ptr %22, align 8, !tbaa !5
  %135 = getelementptr inbounds ptr, ptr %134, i64 %34
  %136 = load ptr, ptr %135, align 8, !tbaa !8
  %137 = getelementptr inbounds double, ptr %136, i64 %72
  %138 = load double, ptr %137, align 8, !tbaa !10
  %139 = extractelement <16 x double> %39, i64 2
  %140 = fmul double %139, %3
  %141 = tail call double @llvm.fmuladd.f64(double %10, double %138, double %140)
  store double %141, ptr %137, align 8, !tbaa !10
  %142 = load ptr, ptr %22, align 8, !tbaa !5
  %143 = getelementptr inbounds ptr, ptr %142, i64 %35
  %144 = load ptr, ptr %143, align 8, !tbaa !8
  %145 = getelementptr inbounds double, ptr %144, i64 %45
  %146 = load double, ptr %145, align 8, !tbaa !10
  %147 = extractelement <16 x double> %39, i64 15
  %148 = fmul double %147, %3
  %149 = tail call double @llvm.fmuladd.f64(double %10, double %146, double %148)
  store double %149, ptr %145, align 8, !tbaa !10
  %150 = load ptr, ptr %22, align 8, !tbaa !5
  %151 = getelementptr inbounds ptr, ptr %150, i64 %35
  %152 = load ptr, ptr %151, align 8, !tbaa !8
  %153 = getelementptr inbounds double, ptr %152, i64 %54
  %154 = load double, ptr %153, align 8, !tbaa !10
  %155 = extractelement <16 x double> %39, i64 11
  %156 = fmul double %155, %3
  %157 = tail call double @llvm.fmuladd.f64(double %10, double %154, double %156)
  store double %157, ptr %153, align 8, !tbaa !10
  %158 = load ptr, ptr %22, align 8, !tbaa !5
  %159 = getelementptr inbounds ptr, ptr %158, i64 %35
  %160 = load ptr, ptr %159, align 8, !tbaa !8
  %161 = getelementptr inbounds double, ptr %160, i64 %63
  %162 = load double, ptr %161, align 8, !tbaa !10
  %163 = extractelement <16 x double> %39, i64 7
  %164 = fmul double %163, %3
  %165 = tail call double @llvm.fmuladd.f64(double %10, double %162, double %164)
  store double %165, ptr %161, align 8, !tbaa !10
  %166 = load ptr, ptr %22, align 8, !tbaa !5
  %167 = getelementptr inbounds ptr, ptr %166, i64 %35
  %168 = load ptr, ptr %167, align 8, !tbaa !8
  %169 = getelementptr inbounds double, ptr %168, i64 %72
  %170 = load double, ptr %169, align 8, !tbaa !10
  %171 = extractelement <16 x double> %39, i64 3
  %172 = fmul double %171, %3
  %173 = tail call double @llvm.fmuladd.f64(double %10, double %170, double %172)
  store double %173, ptr %169, align 8, !tbaa !10
  br label %.loopexit.us

174:                                              ; preds = %._crit_edge.us
  %175 = extractelement <16 x double> %39, i64 12
  %176 = fmul double %175, %3
  %177 = load ptr, ptr %22, align 8, !tbaa !5
  %178 = getelementptr inbounds ptr, ptr %177, i64 %32
  %179 = load ptr, ptr %178, align 8, !tbaa !8
  %180 = add nsw i64 %.0486562.us, %13
  %181 = getelementptr inbounds double, ptr %179, i64 %180
  store double %176, ptr %181, align 8, !tbaa !10
  %182 = extractelement <16 x double> %39, i64 8
  %183 = fmul double %182, %3
  %184 = load ptr, ptr %22, align 8, !tbaa !5
  %185 = getelementptr inbounds ptr, ptr %184, i64 %32
  %186 = load ptr, ptr %185, align 8, !tbaa !8
  %187 = add nsw i64 %180, 1
  %188 = getelementptr inbounds double, ptr %186, i64 %187
  store double %183, ptr %188, align 8, !tbaa !10
  %189 = extractelement <16 x double> %39, i64 4
  %190 = fmul double %189, %3
  %191 = load ptr, ptr %22, align 8, !tbaa !5
  %192 = getelementptr inbounds ptr, ptr %191, i64 %32
  %193 = load ptr, ptr %192, align 8, !tbaa !8
  %194 = add nsw i64 %180, 2
  %195 = getelementptr inbounds double, ptr %193, i64 %194
  store double %190, ptr %195, align 8, !tbaa !10
  %196 = extractelement <16 x double> %39, i64 0
  %197 = fmul double %196, %3
  %198 = load ptr, ptr %22, align 8, !tbaa !5
  %199 = getelementptr inbounds ptr, ptr %198, i64 %32
  %200 = load ptr, ptr %199, align 8, !tbaa !8
  %201 = add nsw i64 %180, 3
  %202 = getelementptr inbounds double, ptr %200, i64 %201
  store double %197, ptr %202, align 8, !tbaa !10
  %203 = extractelement <16 x double> %39, i64 13
  %204 = fmul double %203, %3
  %205 = load ptr, ptr %22, align 8, !tbaa !5
  %206 = getelementptr inbounds ptr, ptr %205, i64 %33
  %207 = load ptr, ptr %206, align 8, !tbaa !8
  %208 = getelementptr inbounds double, ptr %207, i64 %180
  store double %204, ptr %208, align 8, !tbaa !10
  %209 = extractelement <16 x double> %39, i64 9
  %210 = fmul double %209, %3
  %211 = load ptr, ptr %22, align 8, !tbaa !5
  %212 = getelementptr inbounds ptr, ptr %211, i64 %33
  %213 = load ptr, ptr %212, align 8, !tbaa !8
  %214 = getelementptr inbounds double, ptr %213, i64 %187
  store double %210, ptr %214, align 8, !tbaa !10
  %215 = extractelement <16 x double> %39, i64 5
  %216 = fmul double %215, %3
  %217 = load ptr, ptr %22, align 8, !tbaa !5
  %218 = getelementptr inbounds ptr, ptr %217, i64 %33
  %219 = load ptr, ptr %218, align 8, !tbaa !8
  %220 = getelementptr inbounds double, ptr %219, i64 %194
  store double %216, ptr %220, align 8, !tbaa !10
  %221 = extractelement <16 x double> %39, i64 1
  %222 = fmul double %221, %3
  %223 = load ptr, ptr %22, align 8, !tbaa !5
  %224 = getelementptr inbounds ptr, ptr %223, i64 %33
  %225 = load ptr, ptr %224, align 8, !tbaa !8
  %226 = getelementptr inbounds double, ptr %225, i64 %201
  store double %222, ptr %226, align 8, !tbaa !10
  %227 = extractelement <16 x double> %39, i64 14
  %228 = fmul double %227, %3
  %229 = load ptr, ptr %22, align 8, !tbaa !5
  %230 = getelementptr inbounds ptr, ptr %229, i64 %34
  %231 = load ptr, ptr %230, align 8, !tbaa !8
  %232 = getelementptr inbounds double, ptr %231, i64 %180
  store double %228, ptr %232, align 8, !tbaa !10
  %233 = extractelement <16 x double> %39, i64 10
  %234 = fmul double %233, %3
  %235 = load ptr, ptr %22, align 8, !tbaa !5
  %236 = getelementptr inbounds ptr, ptr %235, i64 %34
  %237 = load ptr, ptr %236, align 8, !tbaa !8
  %238 = getelementptr inbounds double, ptr %237, i64 %187
  store double %234, ptr %238, align 8, !tbaa !10
  %239 = extractelement <16 x double> %39, i64 6
  %240 = fmul double %239, %3
  %241 = load ptr, ptr %22, align 8, !tbaa !5
  %242 = getelementptr inbounds ptr, ptr %241, i64 %34
  %243 = load ptr, ptr %242, align 8, !tbaa !8
  %244 = getelementptr inbounds double, ptr %243, i64 %194
  store double %240, ptr %244, align 8, !tbaa !10
  %245 = extractelement <16 x double> %39, i64 2
  %246 = fmul double %245, %3
  %247 = load ptr, ptr %22, align 8, !tbaa !5
  %248 = getelementptr inbounds ptr, ptr %247, i64 %34
  %249 = load ptr, ptr %248, align 8, !tbaa !8
  %250 = getelementptr inbounds double, ptr %249, i64 %201
  store double %246, ptr %250, align 8, !tbaa !10
  %251 = extractelement <16 x double> %39, i64 15
  %252 = fmul double %251, %3
  %253 = load ptr, ptr %22, align 8, !tbaa !5
  %254 = getelementptr inbounds ptr, ptr %253, i64 %35
  %255 = load ptr, ptr %254, align 8, !tbaa !8
  %256 = getelementptr inbounds double, ptr %255, i64 %180
  store double %252, ptr %256, align 8, !tbaa !10
  %257 = extractelement <16 x double> %39, i64 11
  %258 = fmul double %257, %3
  %259 = load ptr, ptr %22, align 8, !tbaa !5
  %260 = getelementptr inbounds ptr, ptr %259, i64 %35
  %261 = load ptr, ptr %260, align 8, !tbaa !8
  %262 = getelementptr inbounds double, ptr %261, i64 %187
  store double %258, ptr %262, align 8, !tbaa !10
  %263 = extractelement <16 x double> %39, i64 7
  %264 = fmul double %263, %3
  %265 = load ptr, ptr %22, align 8, !tbaa !5
  %266 = getelementptr inbounds ptr, ptr %265, i64 %35
  %267 = load ptr, ptr %266, align 8, !tbaa !8
  %268 = getelementptr inbounds double, ptr %267, i64 %194
  store double %264, ptr %268, align 8, !tbaa !10
  %269 = extractelement <16 x double> %39, i64 3
  %270 = fmul double %269, %3
  %271 = load ptr, ptr %22, align 8, !tbaa !5
  %272 = getelementptr inbounds ptr, ptr %271, i64 %35
  %273 = load ptr, ptr %272, align 8, !tbaa !8
  %274 = getelementptr inbounds double, ptr %273, i64 %201
  store double %270, ptr %274, align 8, !tbaa !10
  br label %.loopexit.us

275:                                              ; preds = %.lr.ph.us, %275
  %.0536.us = phi i64 [ %8, %.lr.ph.us ], [ %291, %275 ]
  %.0482535.us = phi i64 [ %5, %.lr.ph.us ], [ %290, %275 ]
  %.0483534.us = phi i64 [ 0, %.lr.ph.us ], [ %292, %275 ]
  %276 = phi <16 x double> [ zeroinitializer, %.lr.ph.us ], [ %289, %275 ]
  %277 = getelementptr inbounds ptr, ptr %337, i64 %.0482535.us
  %278 = load ptr, ptr %277, align 8, !tbaa !8
  %279 = getelementptr double, ptr %278, i64 %.0485565.us
  %280 = getelementptr double, ptr %279, i64 %6
  %281 = getelementptr inbounds ptr, ptr %338, i64 %.0536.us
  %282 = load ptr, ptr %281, align 8, !tbaa !8
  %283 = getelementptr double, ptr %282, i64 %.0486562.us
  %284 = getelementptr double, ptr %283, i64 %9
  %285 = load <4 x double>, ptr %280, align 8, !tbaa !10
  %286 = shufflevector <4 x double> %285, <4 x double> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
  %287 = load <4 x double>, ptr %284, align 8, !tbaa !10
  %288 = shufflevector <4 x double> %287, <4 x double> poison, <16 x i32> <i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 2, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 0>
  %289 = tail call <16 x double> @llvm.fmuladd.v16f64(<16 x double> %286, <16 x double> %288, <16 x double> %276)
  %290 = add nsw i64 %.0482535.us, 1
  %291 = add nsw i64 %.0536.us, 1
  %292 = add nuw nsw i64 %.0483534.us, 1
  %exitcond.not = icmp eq i64 %292, %2
  br i1 %exitcond.not, label %._crit_edge.us, label %275, !llvm.loop !12

293:                                              ; preds = %37
  %294 = tail call noundef i64 @_ZN11alglib_impl9ae_minintEllPNS_8ae_stateE(i64 noundef %36, i64 noundef %23, ptr noundef %14)
  %295 = or disjoint i64 %.0486562.us, 3
  %296 = tail call noundef i64 @_ZN11alglib_impl9ae_minintEllPNS_8ae_stateE(i64 noundef %295, i64 noundef %24, ptr noundef %14)
  %.not509556.us = icmp sgt i64 %.0485565.us, %294
  %.not510552.us = icmp sgt i64 %.0486562.us, %296
  %or.cond = select i1 %.not509556.us, i1 true, i1 %.not510552.us
  br i1 %or.cond, label %.loopexit.us, label %.preheader.lr.ph.split.us570

297:                                              ; preds = %.preheader.us566, %334
  %.0484553.us = phi i64 [ %.0486562.us, %.preheader.us566 ], [ %335, %334 ]
  %298 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %3, double noundef 0.000000e+00)
  br i1 %298, label %314, label %299

299:                                              ; preds = %297
  %300 = load ptr, ptr %20, align 8, !tbaa !5
  %301 = getelementptr inbounds ptr, ptr %300, i64 %5
  %302 = load ptr, ptr %301, align 8, !tbaa !8
  %303 = getelementptr double, ptr %302, i64 %.0487557.us567
  %304 = getelementptr double, ptr %303, i64 %6
  %305 = load i64, ptr %26, align 8, !tbaa !14
  %306 = load ptr, ptr %21, align 8, !tbaa !5
  %307 = getelementptr inbounds ptr, ptr %306, i64 %8
  %308 = load ptr, ptr %307, align 8, !tbaa !8
  %309 = getelementptr double, ptr %308, i64 %.0484553.us
  %310 = getelementptr double, ptr %309, i64 %9
  %311 = load i64, ptr %27, align 8, !tbaa !14
  %312 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %5, i64 noundef %29)
  %313 = tail call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %304, i64 noundef %305, ptr noundef %310, i64 noundef %311, i64 noundef %312)
  br label %314

314:                                              ; preds = %299, %297
  %.0488.us = phi double [ %313, %299 ], [ 0.000000e+00, %297 ]
  %315 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %10, double noundef 0.000000e+00)
  br i1 %315, label %326, label %316

316:                                              ; preds = %314
  %317 = load ptr, ptr %22, align 8, !tbaa !5
  %318 = getelementptr ptr, ptr %317, i64 %.0487557.us567
  %319 = getelementptr ptr, ptr %318, i64 %12
  %320 = load ptr, ptr %319, align 8, !tbaa !8
  %321 = getelementptr double, ptr %320, i64 %.0484553.us
  %322 = getelementptr double, ptr %321, i64 %13
  %323 = load double, ptr %322, align 8, !tbaa !10
  %324 = fmul double %.0488.us, %3
  %325 = tail call double @llvm.fmuladd.f64(double %10, double %323, double %324)
  store double %325, ptr %322, align 8, !tbaa !10
  br label %334

326:                                              ; preds = %314
  %327 = fmul double %.0488.us, %3
  %328 = load ptr, ptr %22, align 8, !tbaa !5
  %329 = getelementptr ptr, ptr %328, i64 %.0487557.us567
  %330 = getelementptr ptr, ptr %329, i64 %12
  %331 = load ptr, ptr %330, align 8, !tbaa !8
  %332 = getelementptr double, ptr %331, i64 %.0484553.us
  %333 = getelementptr double, ptr %332, i64 %13
  store double %327, ptr %333, align 8, !tbaa !10
  br label %334

334:                                              ; preds = %326, %316
  %335 = add nuw i64 %.0484553.us, 1
  %exitcond594.not = icmp eq i64 %.0484553.us, %296
  br i1 %exitcond594.not, label %._crit_edge555.split.us, label %297, !llvm.loop !19

.loopexit.us:                                     ; preds = %._crit_edge555.split.us, %._crit_edge555.split.us.us.us, %293, %174, %41
  %336 = icmp slt i64 %38, %1
  br i1 %336, label %37, label %._crit_edge564.us, !llvm.loop !20

.preheader.us566:                                 ; preds = %.preheader.lr.ph.split.us570, %._crit_edge555.split.us
  %.0487557.us567 = phi i64 [ %339, %._crit_edge555.split.us ], [ %.0485565.us, %.preheader.lr.ph.split.us570 ]
  br label %297

.preheader513.us:                                 ; preds = %37
  br i1 %.not511.not517, label %.lr.ph.us, label %._crit_edge.us

.lr.ph.us:                                        ; preds = %.preheader513.us
  %337 = load ptr, ptr %20, align 8, !tbaa !5
  %338 = load ptr, ptr %21, align 8, !tbaa !5
  br label %275

._crit_edge555.split.us:                          ; preds = %334
  %339 = add nuw i64 %.0487557.us567, 1
  %exitcond595.not = icmp eq i64 %.0487557.us567, %294
  br i1 %exitcond595.not, label %.loopexit.us, label %.preheader.us566, !llvm.loop !21

.preheader.lr.ph.split.us570:                     ; preds = %293
  br i1 %25, label %.preheader.us559.us, label %.preheader.us566

.preheader.us559.us:                              ; preds = %.preheader.lr.ph.split.us570, %._crit_edge555.split.us.us.us
  %.0487557.us560.us = phi i64 [ %353, %._crit_edge555.split.us.us.us ], [ %.0485565.us, %.preheader.lr.ph.split.us570 ]
  br label %340

340:                                              ; preds = %351, %.preheader.us559.us
  %.0484553.us.us.us = phi i64 [ %.0486562.us, %.preheader.us559.us ], [ %352, %351 ]
  %341 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %10, double noundef 0.000000e+00)
  %342 = load ptr, ptr %22, align 8, !tbaa !5
  %343 = getelementptr ptr, ptr %342, i64 %.0487557.us560.us
  %344 = getelementptr ptr, ptr %343, i64 %12
  %345 = load ptr, ptr %344, align 8, !tbaa !8
  %346 = getelementptr double, ptr %345, i64 %.0484553.us.us.us
  %347 = getelementptr double, ptr %346, i64 %13
  br i1 %341, label %351, label %348

348:                                              ; preds = %340
  %349 = load double, ptr %347, align 8, !tbaa !10
  %350 = tail call double @llvm.fmuladd.f64(double %10, double %349, double %30)
  br label %351

351:                                              ; preds = %340, %348
  %.sink = phi double [ %350, %348 ], [ %30, %340 ]
  store double %.sink, ptr %347, align 8, !tbaa !10
  %352 = add nuw i64 %.0484553.us.us.us, 1
  %exitcond596.not = icmp eq i64 %.0484553.us.us.us, %296
  br i1 %exitcond596.not, label %._crit_edge555.split.us.us.us, label %340, !llvm.loop !19

._crit_edge555.split.us.us.us:                    ; preds = %351
  %353 = add nuw i64 %.0487557.us560.us, 1
  %exitcond597.not = icmp eq i64 %.0487557.us560.us, %294
  br i1 %exitcond597.not, label %.loopexit.us, label %.preheader.us559.us, !llvm.loop !21

._crit_edge564.us:                                ; preds = %.loopexit.us
  %354 = icmp slt i64 %31, %0
  br i1 %354, label %.preheader514.us, label %.loopexit516, !llvm.loop !22

.loopexit516:                                     ; preds = %._crit_edge564.us, %.preheader514.lr.ph, %15
  ret void
}

declare noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <16 x double> @llvm.fmuladd.v16f64(<16 x double>, <16 x double>, <16 x double>) #3

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"any pointer", !6, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"double", !6, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !16, i64 16}
!15 = !{!"_ZTSN11alglib_impl9ae_matrixE", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !17, i64 32, !18, i64 40, !6, i64 72}
!16 = !{!"long", !6, i64 0}
!17 = !{!"bool", !6, i64 0}
!18 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !9, i64 0, !9, i64 8, !9, i64 16, !9, i64 24}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13}
!21 = distinct !{!21, !13}
!22 = distinct !{!22, !13}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass