; 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_impl17rmatrixgemmk44v00EllldPNS_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 %1241

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

86:                                               ; preds = %1237, %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 %1240

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

91:                                               ; preds = %1234, %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 %1237

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 %21, 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 %21, 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 %21, 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 %21, 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 %22, 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 %58, 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 %73, 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 %59, 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 %73, 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 %60, 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 %73, 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 %61, 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 %73, 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 %1234

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 = %1230, %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 %1233

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 = %1226, %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 %1229

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 %1175

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

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

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

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

1225:                                             ; preds = %1194, %1178
  br label %1226

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

1229:                                             ; preds = %1133
  br label %1230

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

1233:                                             ; preds = %1127
  br label %1234

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

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

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

1241:                                             ; preds = %1240, %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
  %1242 = load i32, ptr %75, align 4
  switch i32 %1242, label %1244 [
    i32 0, label %1243
    i32 1, label %1243
  ]

1243:                                             ; preds = %1241, %1241
  ret void

1244:                                             ; preds = %1241
  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_impl17rmatrixgemmk44v00EllldPNS_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.cond572 = and i1 %18, %17
  br i1 %or.cond572, label %.preheader513.lr.ph, label %.loopexit515

.preheader513.lr.ph:                              ; preds = %15
  %19 = icmp sgt i64 %1, 0
  %.not510.not516 = 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 %7, i64 16
  %27 = add i64 %2, -1
  %28 = add i64 %27, %6
  %29 = fmul double %3, 0.000000e+00
  br i1 %19, label %.preheader513.us, label %.loopexit515

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

36:                                               ; preds = %.preheader513.us, %.loopexit.us
  %.0485561.us = phi i64 [ 0, %.preheader513.us ], [ %37, %.loopexit.us ]
  %37 = add nuw nsw i64 %.0485561.us, 4
  %.not507.us = icmp sgt i64 %37, %1
  %or.cond511.us = select i1 %.not.us, i1 true, i1 %.not507.us
  br i1 %or.cond511.us, label %299, label %.preheader512.us

._crit_edge.us:                                   ; preds = %274, %.preheader512.us
  %38 = phi <16 x double> [ zeroinitializer, %.preheader512.us ], [ %295, %274 ]
  %39 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %10, double noundef 0.000000e+00)
  br i1 %39, label %173, label %40

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

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

274:                                              ; preds = %.lr.ph.us, %274
  %.0535.us = phi i64 [ %8, %.lr.ph.us ], [ %297, %274 ]
  %.0481534.us = phi i64 [ %6, %.lr.ph.us ], [ %296, %274 ]
  %.0482533.us = phi i64 [ 0, %.lr.ph.us ], [ %298, %274 ]
  %275 = phi <16 x double> [ zeroinitializer, %.lr.ph.us ], [ %295, %274 ]
  %276 = getelementptr inbounds double, ptr %345, i64 %.0481534.us
  %277 = load double, ptr %276, align 8, !tbaa !10
  %278 = getelementptr inbounds double, ptr %347, i64 %.0481534.us
  %279 = load double, ptr %278, align 8, !tbaa !10
  %280 = getelementptr inbounds ptr, ptr %348, i64 %.0535.us
  %281 = load ptr, ptr %280, align 8, !tbaa !8
  %282 = getelementptr double, ptr %281, i64 %.0485561.us
  %283 = getelementptr double, ptr %282, i64 %9
  %284 = getelementptr inbounds double, ptr %350, i64 %.0481534.us
  %285 = load double, ptr %284, align 8, !tbaa !10
  %286 = getelementptr inbounds double, ptr %352, i64 %.0481534.us
  %287 = load double, ptr %286, align 8, !tbaa !10
  %288 = load <4 x double>, ptr %283, align 8, !tbaa !10
  %289 = shufflevector <4 x double> %288, <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>
  %290 = insertelement <16 x double> poison, double %287, i64 0
  %291 = insertelement <16 x double> %290, double %285, i64 1
  %292 = insertelement <16 x double> %291, double %279, i64 2
  %293 = insertelement <16 x double> %292, double %277, i64 3
  %294 = shufflevector <16 x double> %293, <16 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>
  %295 = tail call <16 x double> @llvm.fmuladd.v16f64(<16 x double> %294, <16 x double> %289, <16 x double> %275)
  %296 = add nsw i64 %.0481534.us, 1
  %297 = add nsw i64 %.0535.us, 1
  %298 = add nuw nsw i64 %.0482533.us, 1
  %exitcond.not = icmp eq i64 %298, %2
  br i1 %exitcond.not, label %._crit_edge.us, label %274, !llvm.loop !12

299:                                              ; preds = %36
  %300 = tail call noundef i64 @_ZN11alglib_impl9ae_minintEllPNS_8ae_stateE(i64 noundef %35, i64 noundef %23, ptr noundef %14)
  %301 = or disjoint i64 %.0485561.us, 3
  %302 = tail call noundef i64 @_ZN11alglib_impl9ae_minintEllPNS_8ae_stateE(i64 noundef %301, i64 noundef %24, ptr noundef %14)
  %.not508555.us = icmp sgt i64 %.0484564.us, %300
  %.not509551.us = icmp sgt i64 %.0485561.us, %302
  %or.cond = select i1 %.not508555.us, i1 true, i1 %.not509551.us
  br i1 %or.cond, label %.loopexit.us, label %.preheader.lr.ph.split.us569

303:                                              ; preds = %.preheader.us565, %339
  %.0483552.us = phi i64 [ %.0485561.us, %.preheader.us565 ], [ %340, %339 ]
  %304 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %3, double noundef 0.000000e+00)
  br i1 %304, label %319, label %305

305:                                              ; preds = %303
  %306 = load ptr, ptr %20, align 8, !tbaa !5
  %307 = getelementptr ptr, ptr %306, i64 %.0486556.us566
  %308 = getelementptr ptr, ptr %307, i64 %5
  %309 = load ptr, ptr %308, align 8, !tbaa !8
  %310 = getelementptr inbounds double, ptr %309, i64 %6
  %311 = load ptr, ptr %21, align 8, !tbaa !5
  %312 = getelementptr inbounds ptr, ptr %311, i64 %8
  %313 = load ptr, ptr %312, align 8, !tbaa !8
  %314 = getelementptr double, ptr %313, i64 %.0483552.us
  %315 = getelementptr double, ptr %314, i64 %9
  %316 = load i64, ptr %26, align 8, !tbaa !14
  %317 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %6, i64 noundef %28)
  %318 = tail call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %310, i64 noundef 1, ptr noundef %315, i64 noundef %316, i64 noundef %317)
  br label %319

319:                                              ; preds = %305, %303
  %.0487.us = phi double [ %318, %305 ], [ 0.000000e+00, %303 ]
  %320 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %10, double noundef 0.000000e+00)
  br i1 %320, label %331, label %321

321:                                              ; preds = %319
  %322 = load ptr, ptr %22, align 8, !tbaa !5
  %323 = getelementptr ptr, ptr %322, i64 %.0486556.us566
  %324 = getelementptr ptr, ptr %323, i64 %12
  %325 = load ptr, ptr %324, align 8, !tbaa !8
  %326 = getelementptr double, ptr %325, i64 %.0483552.us
  %327 = getelementptr double, ptr %326, i64 %13
  %328 = load double, ptr %327, align 8, !tbaa !10
  %329 = fmul double %.0487.us, %3
  %330 = tail call double @llvm.fmuladd.f64(double %10, double %328, double %329)
  store double %330, ptr %327, align 8, !tbaa !10
  br label %339

331:                                              ; preds = %319
  %332 = fmul double %.0487.us, %3
  %333 = load ptr, ptr %22, align 8, !tbaa !5
  %334 = getelementptr ptr, ptr %333, i64 %.0486556.us566
  %335 = getelementptr ptr, ptr %334, i64 %12
  %336 = load ptr, ptr %335, align 8, !tbaa !8
  %337 = getelementptr double, ptr %336, i64 %.0483552.us
  %338 = getelementptr double, ptr %337, i64 %13
  store double %332, ptr %338, align 8, !tbaa !10
  br label %339

339:                                              ; preds = %331, %321
  %340 = add nuw i64 %.0483552.us, 1
  %exitcond593.not = icmp eq i64 %.0483552.us, %302
  br i1 %exitcond593.not, label %._crit_edge554.split.us, label %303, !llvm.loop !19

.loopexit.us:                                     ; preds = %._crit_edge554.split.us, %._crit_edge554.split.us.us.us, %299, %173, %40
  %341 = icmp slt i64 %37, %1
  br i1 %341, label %36, label %._crit_edge563.us, !llvm.loop !20

.preheader.us565:                                 ; preds = %.preheader.lr.ph.split.us569, %._crit_edge554.split.us
  %.0486556.us566 = phi i64 [ %353, %._crit_edge554.split.us ], [ %.0484564.us, %.preheader.lr.ph.split.us569 ]
  br label %303

.preheader512.us:                                 ; preds = %36
  br i1 %.not510.not516, label %.lr.ph.us, label %._crit_edge.us

.lr.ph.us:                                        ; preds = %.preheader512.us
  %342 = load ptr, ptr %20, align 8, !tbaa !5
  %343 = getelementptr ptr, ptr %342, i64 %.0484564.us
  %344 = getelementptr ptr, ptr %343, i64 %5
  %345 = load ptr, ptr %344, align 8, !tbaa !8
  %346 = getelementptr i8, ptr %344, i64 8
  %347 = load ptr, ptr %346, align 8, !tbaa !8
  %348 = load ptr, ptr %21, align 8, !tbaa !5
  %349 = getelementptr i8, ptr %344, i64 16
  %350 = load ptr, ptr %349, align 8, !tbaa !8
  %351 = getelementptr i8, ptr %344, i64 24
  %352 = load ptr, ptr %351, align 8, !tbaa !8
  br label %274

._crit_edge554.split.us:                          ; preds = %339
  %353 = add nuw i64 %.0486556.us566, 1
  %exitcond594.not = icmp eq i64 %.0486556.us566, %300
  br i1 %exitcond594.not, label %.loopexit.us, label %.preheader.us565, !llvm.loop !21

.preheader.lr.ph.split.us569:                     ; preds = %299
  br i1 %25, label %.preheader.us558.us, label %.preheader.us565

.preheader.us558.us:                              ; preds = %.preheader.lr.ph.split.us569, %._crit_edge554.split.us.us.us
  %.0486556.us559.us = phi i64 [ %367, %._crit_edge554.split.us.us.us ], [ %.0484564.us, %.preheader.lr.ph.split.us569 ]
  br label %354

354:                                              ; preds = %365, %.preheader.us558.us
  %.0483552.us.us.us = phi i64 [ %.0485561.us, %.preheader.us558.us ], [ %366, %365 ]
  %355 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %10, double noundef 0.000000e+00)
  %356 = load ptr, ptr %22, align 8, !tbaa !5
  %357 = getelementptr ptr, ptr %356, i64 %.0486556.us559.us
  %358 = getelementptr ptr, ptr %357, i64 %12
  %359 = load ptr, ptr %358, align 8, !tbaa !8
  %360 = getelementptr double, ptr %359, i64 %.0483552.us.us.us
  %361 = getelementptr double, ptr %360, i64 %13
  br i1 %355, label %365, label %362

362:                                              ; preds = %354
  %363 = load double, ptr %361, align 8, !tbaa !10
  %364 = tail call double @llvm.fmuladd.f64(double %10, double %363, double %29)
  br label %365

365:                                              ; preds = %354, %362
  %.sink = phi double [ %364, %362 ], [ %29, %354 ]
  store double %.sink, ptr %361, align 8, !tbaa !10
  %366 = add nuw i64 %.0483552.us.us.us, 1
  %exitcond595.not = icmp eq i64 %.0483552.us.us.us, %302
  br i1 %exitcond595.not, label %._crit_edge554.split.us.us.us, label %354, !llvm.loop !19

._crit_edge554.split.us.us.us:                    ; preds = %365
  %367 = add nuw i64 %.0486556.us559.us, 1
  %exitcond596.not = icmp eq i64 %.0486556.us559.us, %300
  br i1 %exitcond596.not, label %.loopexit.us, label %.preheader.us558.us, !llvm.loop !21

._crit_edge563.us:                                ; preds = %.loopexit.us
  %368 = icmp slt i64 %30, %0
  br i1 %368, label %.preheader513.us, label %.loopexit515, !llvm.loop !22

.loopexit515:                                     ; preds = %._crit_edge563.us, %.preheader513.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