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

; 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_frame" = type { %"struct.alglib_impl::ae_dyn_block" }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%union.anon.1 = type { ptr }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%union.anon.0 = type { ptr }

@.str.157 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.158 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.159 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.160 = external hidden unnamed_addr constant [38 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 nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

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

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

declare void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #2

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

declare noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef, double noundef, ptr noundef) #2

declare void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i1 noundef zeroext) #2

declare void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i1 noundef zeroext) #2

declare void @_ZN11alglib_impl15ae_matrix_clearEPNS_9ae_matrixE(ptr noundef) #2

declare void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef, ptr noundef) #2

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) #2

declare void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl14buildpriortermEPNS_9ae_matrixElllldS1_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, double noundef %5, ptr noundef %6, ptr noundef %7) #4 {
  %9 = alloca ptr, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca double, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %"struct.alglib_impl::ae_frame", align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca double, align 8
  %23 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %24 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %25 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %26 = alloca %"struct.alglib_impl::ae_vector", align 8
  %27 = alloca double, align 8
  %28 = alloca i64, align 8
  %29 = alloca i32, align 4
  store ptr %0, ptr %9, align 8, !tbaa !5
  store i64 %1, ptr %10, align 8, !tbaa !9
  store i64 %2, ptr %11, align 8, !tbaa !9
  store i64 %3, ptr %12, align 8, !tbaa !9
  store i64 %4, ptr %13, align 8, !tbaa !9
  store double %5, ptr %14, align 8, !tbaa !11
  store ptr %6, ptr %15, align 8, !tbaa !5
  store ptr %7, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 80, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 80, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 80, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  %30 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %30, ptr noundef %17)
  call void @llvm.memset.p0.i64(ptr align 8 %23, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %24, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %25, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %26, i8 0, i64 64, i1 false)
  %31 = load ptr, ptr %15, align 8, !tbaa !5
  call void @_ZN11alglib_impl15ae_matrix_clearEPNS_9ae_matrixE(ptr noundef %31)
  %32 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef %23, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %32, i1 noundef zeroext true)
  %33 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef %24, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %33, i1 noundef zeroext true)
  %34 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef %25, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %34, i1 noundef zeroext true)
  %35 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %26, i64 noundef 0, i64 noundef 3, ptr noundef %35, i1 noundef zeroext true)
  %36 = load i64, ptr %10, align 8, !tbaa !9
  %37 = icmp sge i64 %36, 0
  %38 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %37, ptr noundef @.str.157, ptr noundef %38)
  %39 = load i64, ptr %11, align 8, !tbaa !9
  %40 = icmp sgt i64 %39, 0
  %41 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %40, ptr noundef @.str.158, ptr noundef %41)
  %42 = load i64, ptr %12, align 8, !tbaa !9
  %43 = icmp sgt i64 %42, 0
  %44 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %43, ptr noundef @.str.159, ptr noundef %44)
  %45 = load ptr, ptr %15, align 8, !tbaa !5
  %46 = load i64, ptr %12, align 8, !tbaa !9
  %47 = load i64, ptr %11, align 8, !tbaa !9
  %48 = add nsw i64 %47, 1
  %49 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %45, i64 noundef %46, i64 noundef %48, ptr noundef %49)
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %50

50:                                               ; preds = %78, %8
  %51 = load i64, ptr %18, align 8, !tbaa !9
  %52 = load ptr, ptr %15, align 8, !tbaa !5
  %53 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %52, i32 0, i32 0
  %54 = load i64, ptr %53, align 8, !tbaa !13
  %55 = sub nsw i64 %54, 1
  %56 = icmp sle i64 %51, %55
  br i1 %56, label %57, label %81

57:                                               ; preds = %50
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %58

58:                                               ; preds = %74, %57
  %59 = load i64, ptr %19, align 8, !tbaa !9
  %60 = load ptr, ptr %15, align 8, !tbaa !5
  %61 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %60, i32 0, i32 1
  %62 = load i64, ptr %61, align 8, !tbaa !17
  %63 = sub nsw i64 %62, 1
  %64 = icmp sle i64 %59, %63
  br i1 %64, label %65, label %77

65:                                               ; preds = %58
  %66 = load ptr, ptr %15, align 8, !tbaa !5
  %67 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %66, i32 0, i32 6
  %68 = load ptr, ptr %67, align 8, !tbaa !18
  %69 = load i64, ptr %18, align 8, !tbaa !9
  %70 = getelementptr inbounds ptr, ptr %68, i64 %69
  %71 = load ptr, ptr %70, align 8, !tbaa !5
  %72 = load i64, ptr %19, align 8, !tbaa !9
  %73 = getelementptr inbounds double, ptr %71, i64 %72
  store double 0.000000e+00, ptr %73, align 8, !tbaa !11
  br label %74

74:                                               ; preds = %65
  %75 = load i64, ptr %19, align 8, !tbaa !9
  %76 = add nsw i64 %75, 1
  store i64 %76, ptr %19, align 8, !tbaa !9
  br label %58, !llvm.loop !19

77:                                               ; preds = %58
  br label %78

78:                                               ; preds = %77
  %79 = load i64, ptr %18, align 8, !tbaa !9
  %80 = add nsw i64 %79, 1
  store i64 %80, ptr %18, align 8, !tbaa !9
  br label %50, !llvm.loop !21

81:                                               ; preds = %50
  %82 = load i64, ptr %10, align 8, !tbaa !9
  %83 = icmp eq i64 %82, 0
  br i1 %83, label %84, label %125

84:                                               ; preds = %81
  %85 = load i64, ptr %13, align 8, !tbaa !9
  %86 = icmp eq i64 %85, 0
  br i1 %86, label %87, label %108

87:                                               ; preds = %84
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %88

88:                                               ; preds = %103, %87
  %89 = load i64, ptr %18, align 8, !tbaa !9
  %90 = load i64, ptr %12, align 8, !tbaa !9
  %91 = sub nsw i64 %90, 1
  %92 = icmp sle i64 %89, %91
  br i1 %92, label %93, label %106

93:                                               ; preds = %88
  %94 = load double, ptr %14, align 8, !tbaa !11
  %95 = load ptr, ptr %15, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %95, i32 0, i32 6
  %97 = load ptr, ptr %96, align 8, !tbaa !18
  %98 = load i64, ptr %18, align 8, !tbaa !9
  %99 = getelementptr inbounds ptr, ptr %97, i64 %98
  %100 = load ptr, ptr %99, align 8, !tbaa !5
  %101 = load i64, ptr %11, align 8, !tbaa !9
  %102 = getelementptr inbounds double, ptr %100, i64 %101
  store double %94, ptr %102, align 8, !tbaa !11
  br label %103

103:                                              ; preds = %93
  %104 = load i64, ptr %18, align 8, !tbaa !9
  %105 = add nsw i64 %104, 1
  store i64 %105, ptr %18, align 8, !tbaa !9
  br label %88, !llvm.loop !22

106:                                              ; preds = %88
  %107 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %107)
  store i32 1, ptr %29, align 4
  br label %831

108:                                              ; preds = %84
  %109 = load i64, ptr %13, align 8, !tbaa !9
  %110 = icmp eq i64 %109, 1
  br i1 %110, label %111, label %113

111:                                              ; preds = %108
  %112 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %112)
  store i32 1, ptr %29, align 4
  br label %831

113:                                              ; preds = %108
  %114 = load i64, ptr %13, align 8, !tbaa !9
  %115 = icmp eq i64 %114, 2
  br i1 %115, label %116, label %118

116:                                              ; preds = %113
  %117 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %117)
  store i32 1, ptr %29, align 4
  br label %831

118:                                              ; preds = %113
  %119 = load i64, ptr %13, align 8, !tbaa !9
  %120 = icmp eq i64 %119, 3
  br i1 %120, label %121, label %123

121:                                              ; preds = %118
  %122 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %122)
  store i32 1, ptr %29, align 4
  br label %831

123:                                              ; preds = %118
  %124 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.160, ptr noundef %124)
  br label %125

125:                                              ; preds = %123, %81
  %126 = load i64, ptr %13, align 8, !tbaa !9
  %127 = icmp eq i64 %126, 0
  br i1 %127, label %128, label %192

128:                                              ; preds = %125
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %129

129:                                              ; preds = %144, %128
  %130 = load i64, ptr %18, align 8, !tbaa !9
  %131 = load i64, ptr %12, align 8, !tbaa !9
  %132 = sub nsw i64 %131, 1
  %133 = icmp sle i64 %130, %132
  br i1 %133, label %134, label %147

134:                                              ; preds = %129
  %135 = load double, ptr %14, align 8, !tbaa !11
  %136 = load ptr, ptr %15, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %136, i32 0, i32 6
  %138 = load ptr, ptr %137, align 8, !tbaa !18
  %139 = load i64, ptr %18, align 8, !tbaa !9
  %140 = getelementptr inbounds ptr, ptr %138, i64 %139
  %141 = load ptr, ptr %140, align 8, !tbaa !5
  %142 = load i64, ptr %11, align 8, !tbaa !9
  %143 = getelementptr inbounds double, ptr %141, i64 %142
  store double %135, ptr %143, align 8, !tbaa !11
  br label %144

144:                                              ; preds = %134
  %145 = load i64, ptr %18, align 8, !tbaa !9
  %146 = add nsw i64 %145, 1
  store i64 %146, ptr %18, align 8, !tbaa !9
  br label %129, !llvm.loop !23

147:                                              ; preds = %129
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %148

148:                                              ; preds = %187, %147
  %149 = load i64, ptr %18, align 8, !tbaa !9
  %150 = load i64, ptr %10, align 8, !tbaa !9
  %151 = sub nsw i64 %150, 1
  %152 = icmp sle i64 %149, %151
  br i1 %152, label %153, label %190

153:                                              ; preds = %148
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %154

154:                                              ; preds = %183, %153
  %155 = load i64, ptr %19, align 8, !tbaa !9
  %156 = load i64, ptr %12, align 8, !tbaa !9
  %157 = sub nsw i64 %156, 1
  %158 = icmp sle i64 %155, %157
  br i1 %158, label %159, label %186

159:                                              ; preds = %154
  %160 = load ptr, ptr %9, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %160, i32 0, i32 6
  %162 = load ptr, ptr %161, align 8, !tbaa !18
  %163 = load i64, ptr %18, align 8, !tbaa !9
  %164 = getelementptr inbounds ptr, ptr %162, i64 %163
  %165 = load ptr, ptr %164, align 8, !tbaa !5
  %166 = load i64, ptr %11, align 8, !tbaa !9
  %167 = load i64, ptr %19, align 8, !tbaa !9
  %168 = add nsw i64 %166, %167
  %169 = getelementptr inbounds double, ptr %165, i64 %168
  %170 = load double, ptr %169, align 8, !tbaa !11
  %171 = load double, ptr %14, align 8, !tbaa !11
  %172 = fsub double %170, %171
  %173 = load ptr, ptr %9, align 8, !tbaa !5
  %174 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %173, i32 0, i32 6
  %175 = load ptr, ptr %174, align 8, !tbaa !18
  %176 = load i64, ptr %18, align 8, !tbaa !9
  %177 = getelementptr inbounds ptr, ptr %175, i64 %176
  %178 = load ptr, ptr %177, align 8, !tbaa !5
  %179 = load i64, ptr %11, align 8, !tbaa !9
  %180 = load i64, ptr %19, align 8, !tbaa !9
  %181 = add nsw i64 %179, %180
  %182 = getelementptr inbounds double, ptr %178, i64 %181
  store double %172, ptr %182, align 8, !tbaa !11
  br label %183

183:                                              ; preds = %159
  %184 = load i64, ptr %19, align 8, !tbaa !9
  %185 = add nsw i64 %184, 1
  store i64 %185, ptr %19, align 8, !tbaa !9
  br label %154, !llvm.loop !24

186:                                              ; preds = %154
  br label %187

187:                                              ; preds = %186
  %188 = load i64, ptr %18, align 8, !tbaa !9
  %189 = add nsw i64 %188, 1
  store i64 %189, ptr %18, align 8, !tbaa !9
  br label %148, !llvm.loop !25

190:                                              ; preds = %148
  %191 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %191)
  store i32 1, ptr %29, align 4
  br label %831

192:                                              ; preds = %125
  %193 = load i64, ptr %13, align 8, !tbaa !9
  %194 = icmp eq i64 %193, 2
  br i1 %194, label %195, label %329

195:                                              ; preds = %192
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %196

196:                                              ; preds = %241, %195
  %197 = load i64, ptr %18, align 8, !tbaa !9
  %198 = load i64, ptr %10, align 8, !tbaa !9
  %199 = sub nsw i64 %198, 1
  %200 = icmp sle i64 %197, %199
  br i1 %200, label %201, label %244

201:                                              ; preds = %196
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %202

202:                                              ; preds = %237, %201
  %203 = load i64, ptr %19, align 8, !tbaa !9
  %204 = load i64, ptr %12, align 8, !tbaa !9
  %205 = sub nsw i64 %204, 1
  %206 = icmp sle i64 %203, %205
  br i1 %206, label %207, label %240

207:                                              ; preds = %202
  %208 = load ptr, ptr %15, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %208, i32 0, i32 6
  %210 = load ptr, ptr %209, align 8, !tbaa !18
  %211 = load i64, ptr %19, align 8, !tbaa !9
  %212 = getelementptr inbounds ptr, ptr %210, i64 %211
  %213 = load ptr, ptr %212, align 8, !tbaa !5
  %214 = load i64, ptr %11, align 8, !tbaa !9
  %215 = getelementptr inbounds double, ptr %213, i64 %214
  %216 = load double, ptr %215, align 8, !tbaa !11
  %217 = load ptr, ptr %9, align 8, !tbaa !5
  %218 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %217, i32 0, i32 6
  %219 = load ptr, ptr %218, align 8, !tbaa !18
  %220 = load i64, ptr %18, align 8, !tbaa !9
  %221 = getelementptr inbounds ptr, ptr %219, i64 %220
  %222 = load ptr, ptr %221, align 8, !tbaa !5
  %223 = load i64, ptr %11, align 8, !tbaa !9
  %224 = load i64, ptr %19, align 8, !tbaa !9
  %225 = add nsw i64 %223, %224
  %226 = getelementptr inbounds double, ptr %222, i64 %225
  %227 = load double, ptr %226, align 8, !tbaa !11
  %228 = fadd double %216, %227
  %229 = load ptr, ptr %15, align 8, !tbaa !5
  %230 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %229, i32 0, i32 6
  %231 = load ptr, ptr %230, align 8, !tbaa !18
  %232 = load i64, ptr %19, align 8, !tbaa !9
  %233 = getelementptr inbounds ptr, ptr %231, i64 %232
  %234 = load ptr, ptr %233, align 8, !tbaa !5
  %235 = load i64, ptr %11, align 8, !tbaa !9
  %236 = getelementptr inbounds double, ptr %234, i64 %235
  store double %228, ptr %236, align 8, !tbaa !11
  br label %237

237:                                              ; preds = %207
  %238 = load i64, ptr %19, align 8, !tbaa !9
  %239 = add nsw i64 %238, 1
  store i64 %239, ptr %19, align 8, !tbaa !9
  br label %202, !llvm.loop !26

240:                                              ; preds = %202
  br label %241

241:                                              ; preds = %240
  %242 = load i64, ptr %18, align 8, !tbaa !9
  %243 = add nsw i64 %242, 1
  store i64 %243, ptr %18, align 8, !tbaa !9
  br label %196, !llvm.loop !27

244:                                              ; preds = %196
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %245

245:                                              ; preds = %273, %244
  %246 = load i64, ptr %19, align 8, !tbaa !9
  %247 = load i64, ptr %12, align 8, !tbaa !9
  %248 = sub nsw i64 %247, 1
  %249 = icmp sle i64 %246, %248
  br i1 %249, label %250, label %276

250:                                              ; preds = %245
  %251 = load ptr, ptr %15, align 8, !tbaa !5
  %252 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %251, i32 0, i32 6
  %253 = load ptr, ptr %252, align 8, !tbaa !18
  %254 = load i64, ptr %19, align 8, !tbaa !9
  %255 = getelementptr inbounds ptr, ptr %253, i64 %254
  %256 = load ptr, ptr %255, align 8, !tbaa !5
  %257 = load i64, ptr %11, align 8, !tbaa !9
  %258 = getelementptr inbounds double, ptr %256, i64 %257
  %259 = load double, ptr %258, align 8, !tbaa !11
  %260 = load i64, ptr %10, align 8, !tbaa !9
  %261 = sitofp i64 %260 to double
  %262 = load ptr, ptr %16, align 8, !tbaa !5
  %263 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %261, double noundef 1.000000e+00, ptr noundef %262)
  %264 = fdiv double %259, %263
  %265 = load ptr, ptr %15, align 8, !tbaa !5
  %266 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %265, i32 0, i32 6
  %267 = load ptr, ptr %266, align 8, !tbaa !18
  %268 = load i64, ptr %19, align 8, !tbaa !9
  %269 = getelementptr inbounds ptr, ptr %267, i64 %268
  %270 = load ptr, ptr %269, align 8, !tbaa !5
  %271 = load i64, ptr %11, align 8, !tbaa !9
  %272 = getelementptr inbounds double, ptr %270, i64 %271
  store double %264, ptr %272, align 8, !tbaa !11
  br label %273

273:                                              ; preds = %250
  %274 = load i64, ptr %19, align 8, !tbaa !9
  %275 = add nsw i64 %274, 1
  store i64 %275, ptr %19, align 8, !tbaa !9
  br label %245, !llvm.loop !28

276:                                              ; preds = %245
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %277

277:                                              ; preds = %324, %276
  %278 = load i64, ptr %18, align 8, !tbaa !9
  %279 = load i64, ptr %10, align 8, !tbaa !9
  %280 = sub nsw i64 %279, 1
  %281 = icmp sle i64 %278, %280
  br i1 %281, label %282, label %327

282:                                              ; preds = %277
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %283

283:                                              ; preds = %320, %282
  %284 = load i64, ptr %19, align 8, !tbaa !9
  %285 = load i64, ptr %12, align 8, !tbaa !9
  %286 = sub nsw i64 %285, 1
  %287 = icmp sle i64 %284, %286
  br i1 %287, label %288, label %323

288:                                              ; preds = %283
  %289 = load ptr, ptr %9, align 8, !tbaa !5
  %290 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %289, i32 0, i32 6
  %291 = load ptr, ptr %290, align 8, !tbaa !18
  %292 = load i64, ptr %18, align 8, !tbaa !9
  %293 = getelementptr inbounds ptr, ptr %291, i64 %292
  %294 = load ptr, ptr %293, align 8, !tbaa !5
  %295 = load i64, ptr %11, align 8, !tbaa !9
  %296 = load i64, ptr %19, align 8, !tbaa !9
  %297 = add nsw i64 %295, %296
  %298 = getelementptr inbounds double, ptr %294, i64 %297
  %299 = load double, ptr %298, align 8, !tbaa !11
  %300 = load ptr, ptr %15, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %300, i32 0, i32 6
  %302 = load ptr, ptr %301, align 8, !tbaa !18
  %303 = load i64, ptr %19, align 8, !tbaa !9
  %304 = getelementptr inbounds ptr, ptr %302, i64 %303
  %305 = load ptr, ptr %304, align 8, !tbaa !5
  %306 = load i64, ptr %11, align 8, !tbaa !9
  %307 = getelementptr inbounds double, ptr %305, i64 %306
  %308 = load double, ptr %307, align 8, !tbaa !11
  %309 = fsub double %299, %308
  %310 = load ptr, ptr %9, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %310, i32 0, i32 6
  %312 = load ptr, ptr %311, align 8, !tbaa !18
  %313 = load i64, ptr %18, align 8, !tbaa !9
  %314 = getelementptr inbounds ptr, ptr %312, i64 %313
  %315 = load ptr, ptr %314, align 8, !tbaa !5
  %316 = load i64, ptr %11, align 8, !tbaa !9
  %317 = load i64, ptr %19, align 8, !tbaa !9
  %318 = add nsw i64 %316, %317
  %319 = getelementptr inbounds double, ptr %315, i64 %318
  store double %309, ptr %319, align 8, !tbaa !11
  br label %320

320:                                              ; preds = %288
  %321 = load i64, ptr %19, align 8, !tbaa !9
  %322 = add nsw i64 %321, 1
  store i64 %322, ptr %19, align 8, !tbaa !9
  br label %283, !llvm.loop !29

323:                                              ; preds = %283
  br label %324

324:                                              ; preds = %323
  %325 = load i64, ptr %18, align 8, !tbaa !9
  %326 = add nsw i64 %325, 1
  store i64 %326, ptr %18, align 8, !tbaa !9
  br label %277, !llvm.loop !30

327:                                              ; preds = %277
  %328 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %328)
  store i32 1, ptr %29, align 4
  br label %831

329:                                              ; preds = %192
  %330 = load i64, ptr %13, align 8, !tbaa !9
  %331 = icmp eq i64 %330, 3
  br i1 %331, label %332, label %334

332:                                              ; preds = %329
  %333 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %333)
  store i32 1, ptr %29, align 4
  br label %831

334:                                              ; preds = %329
  %335 = load i64, ptr %13, align 8, !tbaa !9
  %336 = icmp eq i64 %335, 1
  %337 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %336, ptr noundef @.str.160, ptr noundef %337)
  store double 0.000000e+00, ptr %27, align 8, !tbaa !11
  %338 = load i64, ptr %11, align 8, !tbaa !9
  %339 = add nsw i64 %338, 1
  %340 = load i64, ptr %11, align 8, !tbaa !9
  %341 = add nsw i64 %340, 1
  %342 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %23, i64 noundef %339, i64 noundef %341, ptr noundef %342)
  %343 = load i64, ptr %11, align 8, !tbaa !9
  %344 = add nsw i64 %343, 1
  %345 = load i64, ptr %12, align 8, !tbaa !9
  %346 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %25, i64 noundef %344, i64 noundef %345, ptr noundef %346)
  %347 = load i64, ptr %11, align 8, !tbaa !9
  %348 = add nsw i64 %347, 1
  %349 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %26, i64 noundef %348, ptr noundef %349)
  %350 = load i64, ptr %11, align 8, !tbaa !9
  %351 = add nsw i64 %350, 1
  %352 = load i64, ptr %11, align 8, !tbaa !9
  %353 = add nsw i64 %352, 1
  %354 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %24, i64 noundef %351, i64 noundef %353, ptr noundef %354)
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %355

355:                                              ; preds = %376, %334
  %356 = load i64, ptr %18, align 8, !tbaa !9
  %357 = load i64, ptr %11, align 8, !tbaa !9
  %358 = icmp sle i64 %356, %357
  br i1 %358, label %359, label %379

359:                                              ; preds = %355
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %360

360:                                              ; preds = %372, %359
  %361 = load i64, ptr %19, align 8, !tbaa !9
  %362 = load i64, ptr %11, align 8, !tbaa !9
  %363 = icmp sle i64 %361, %362
  br i1 %363, label %364, label %375

364:                                              ; preds = %360
  %365 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %23, i32 0, i32 6
  %366 = load ptr, ptr %365, align 8, !tbaa !18
  %367 = load i64, ptr %18, align 8, !tbaa !9
  %368 = getelementptr inbounds ptr, ptr %366, i64 %367
  %369 = load ptr, ptr %368, align 8, !tbaa !5
  %370 = load i64, ptr %19, align 8, !tbaa !9
  %371 = getelementptr inbounds double, ptr %369, i64 %370
  store double 0.000000e+00, ptr %371, align 8, !tbaa !11
  br label %372

372:                                              ; preds = %364
  %373 = load i64, ptr %19, align 8, !tbaa !9
  %374 = add nsw i64 %373, 1
  store i64 %374, ptr %19, align 8, !tbaa !9
  br label %360, !llvm.loop !31

375:                                              ; preds = %360
  br label %376

376:                                              ; preds = %375
  %377 = load i64, ptr %18, align 8, !tbaa !9
  %378 = add nsw i64 %377, 1
  store i64 %378, ptr %18, align 8, !tbaa !9
  br label %355, !llvm.loop !32

379:                                              ; preds = %355
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %380

380:                                              ; preds = %457, %379
  %381 = load i64, ptr %18, align 8, !tbaa !9
  %382 = load i64, ptr %10, align 8, !tbaa !9
  %383 = sub nsw i64 %382, 1
  %384 = icmp sle i64 %381, %383
  br i1 %384, label %385, label %460

385:                                              ; preds = %380
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %386

386:                                              ; preds = %405, %385
  %387 = load i64, ptr %19, align 8, !tbaa !9
  %388 = load i64, ptr %11, align 8, !tbaa !9
  %389 = sub nsw i64 %388, 1
  %390 = icmp sle i64 %387, %389
  br i1 %390, label %391, label %408

391:                                              ; preds = %386
  %392 = load ptr, ptr %9, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %392, i32 0, i32 6
  %394 = load ptr, ptr %393, align 8, !tbaa !18
  %395 = load i64, ptr %18, align 8, !tbaa !9
  %396 = getelementptr inbounds ptr, ptr %394, i64 %395
  %397 = load ptr, ptr %396, align 8, !tbaa !5
  %398 = load i64, ptr %19, align 8, !tbaa !9
  %399 = getelementptr inbounds double, ptr %397, i64 %398
  %400 = load double, ptr %399, align 8, !tbaa !11
  %401 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %402 = load ptr, ptr %401, align 8, !tbaa !18
  %403 = load i64, ptr %19, align 8, !tbaa !9
  %404 = getelementptr inbounds double, ptr %402, i64 %403
  store double %400, ptr %404, align 8, !tbaa !11
  br label %405

405:                                              ; preds = %391
  %406 = load i64, ptr %19, align 8, !tbaa !9
  %407 = add nsw i64 %406, 1
  store i64 %407, ptr %19, align 8, !tbaa !9
  br label %386, !llvm.loop !33

408:                                              ; preds = %386
  %409 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %410 = load ptr, ptr %409, align 8, !tbaa !18
  %411 = load i64, ptr %11, align 8, !tbaa !9
  %412 = getelementptr inbounds double, ptr %410, i64 %411
  store double 1.000000e+00, ptr %412, align 8, !tbaa !11
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %413

413:                                              ; preds = %453, %408
  %414 = load i64, ptr %20, align 8, !tbaa !9
  %415 = load i64, ptr %11, align 8, !tbaa !9
  %416 = icmp sle i64 %414, %415
  br i1 %416, label %417, label %456

417:                                              ; preds = %413
  store i64 0, ptr %21, align 8, !tbaa !9
  br label %418

418:                                              ; preds = %449, %417
  %419 = load i64, ptr %21, align 8, !tbaa !9
  %420 = load i64, ptr %11, align 8, !tbaa !9
  %421 = icmp sle i64 %419, %420
  br i1 %421, label %422, label %452

422:                                              ; preds = %418
  %423 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %23, i32 0, i32 6
  %424 = load ptr, ptr %423, align 8, !tbaa !18
  %425 = load i64, ptr %20, align 8, !tbaa !9
  %426 = getelementptr inbounds ptr, ptr %424, i64 %425
  %427 = load ptr, ptr %426, align 8, !tbaa !5
  %428 = load i64, ptr %21, align 8, !tbaa !9
  %429 = getelementptr inbounds double, ptr %427, i64 %428
  %430 = load double, ptr %429, align 8, !tbaa !11
  %431 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %432 = load ptr, ptr %431, align 8, !tbaa !18
  %433 = load i64, ptr %20, align 8, !tbaa !9
  %434 = getelementptr inbounds double, ptr %432, i64 %433
  %435 = load double, ptr %434, align 8, !tbaa !11
  %436 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %437 = load ptr, ptr %436, align 8, !tbaa !18
  %438 = load i64, ptr %21, align 8, !tbaa !9
  %439 = getelementptr inbounds double, ptr %437, i64 %438
  %440 = load double, ptr %439, align 8, !tbaa !11
  %441 = call double @llvm.fmuladd.f64(double %435, double %440, double %430)
  %442 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %23, i32 0, i32 6
  %443 = load ptr, ptr %442, align 8, !tbaa !18
  %444 = load i64, ptr %20, align 8, !tbaa !9
  %445 = getelementptr inbounds ptr, ptr %443, i64 %444
  %446 = load ptr, ptr %445, align 8, !tbaa !5
  %447 = load i64, ptr %21, align 8, !tbaa !9
  %448 = getelementptr inbounds double, ptr %446, i64 %447
  store double %441, ptr %448, align 8, !tbaa !11
  br label %449

449:                                              ; preds = %422
  %450 = load i64, ptr %21, align 8, !tbaa !9
  %451 = add nsw i64 %450, 1
  store i64 %451, ptr %21, align 8, !tbaa !9
  br label %418, !llvm.loop !34

452:                                              ; preds = %418
  br label %453

453:                                              ; preds = %452
  %454 = load i64, ptr %20, align 8, !tbaa !9
  %455 = add nsw i64 %454, 1
  store i64 %455, ptr %20, align 8, !tbaa !9
  br label %413, !llvm.loop !35

456:                                              ; preds = %413
  br label %457

457:                                              ; preds = %456
  %458 = load i64, ptr %18, align 8, !tbaa !9
  %459 = add nsw i64 %458, 1
  store i64 %459, ptr %18, align 8, !tbaa !9
  br label %380, !llvm.loop !36

460:                                              ; preds = %380
  store i64 1, ptr %28, align 8, !tbaa !9
  br label %461

461:                                              ; preds = %731, %460
  %462 = load i64, ptr %28, align 8, !tbaa !9
  %463 = icmp sle i64 %462, 3
  br i1 %463, label %464, label %734

464:                                              ; preds = %461
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %465

465:                                              ; preds = %487, %464
  %466 = load i64, ptr %18, align 8, !tbaa !9
  %467 = load i64, ptr %11, align 8, !tbaa !9
  %468 = icmp sle i64 %466, %467
  br i1 %468, label %469, label %490

469:                                              ; preds = %465
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %470

470:                                              ; preds = %483, %469
  %471 = load i64, ptr %19, align 8, !tbaa !9
  %472 = load i64, ptr %12, align 8, !tbaa !9
  %473 = sub nsw i64 %472, 1
  %474 = icmp sle i64 %471, %473
  br i1 %474, label %475, label %486

475:                                              ; preds = %470
  %476 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %25, i32 0, i32 6
  %477 = load ptr, ptr %476, align 8, !tbaa !18
  %478 = load i64, ptr %18, align 8, !tbaa !9
  %479 = getelementptr inbounds ptr, ptr %477, i64 %478
  %480 = load ptr, ptr %479, align 8, !tbaa !5
  %481 = load i64, ptr %19, align 8, !tbaa !9
  %482 = getelementptr inbounds double, ptr %480, i64 %481
  store double 0.000000e+00, ptr %482, align 8, !tbaa !11
  br label %483

483:                                              ; preds = %475
  %484 = load i64, ptr %19, align 8, !tbaa !9
  %485 = add nsw i64 %484, 1
  store i64 %485, ptr %19, align 8, !tbaa !9
  br label %470, !llvm.loop !37

486:                                              ; preds = %470
  br label %487

487:                                              ; preds = %486
  %488 = load i64, ptr %18, align 8, !tbaa !9
  %489 = add nsw i64 %488, 1
  store i64 %489, ptr %18, align 8, !tbaa !9
  br label %465, !llvm.loop !38

490:                                              ; preds = %465
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %491

491:                                              ; preds = %602, %490
  %492 = load i64, ptr %18, align 8, !tbaa !9
  %493 = load i64, ptr %10, align 8, !tbaa !9
  %494 = sub nsw i64 %493, 1
  %495 = icmp sle i64 %492, %494
  br i1 %495, label %496, label %605

496:                                              ; preds = %491
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %497

497:                                              ; preds = %516, %496
  %498 = load i64, ptr %19, align 8, !tbaa !9
  %499 = load i64, ptr %11, align 8, !tbaa !9
  %500 = sub nsw i64 %499, 1
  %501 = icmp sle i64 %498, %500
  br i1 %501, label %502, label %519

502:                                              ; preds = %497
  %503 = load ptr, ptr %9, align 8, !tbaa !5
  %504 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %503, i32 0, i32 6
  %505 = load ptr, ptr %504, align 8, !tbaa !18
  %506 = load i64, ptr %18, align 8, !tbaa !9
  %507 = getelementptr inbounds ptr, ptr %505, i64 %506
  %508 = load ptr, ptr %507, align 8, !tbaa !5
  %509 = load i64, ptr %19, align 8, !tbaa !9
  %510 = getelementptr inbounds double, ptr %508, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !11
  %512 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %513 = load ptr, ptr %512, align 8, !tbaa !18
  %514 = load i64, ptr %19, align 8, !tbaa !9
  %515 = getelementptr inbounds double, ptr %513, i64 %514
  store double %511, ptr %515, align 8, !tbaa !11
  br label %516

516:                                              ; preds = %502
  %517 = load i64, ptr %19, align 8, !tbaa !9
  %518 = add nsw i64 %517, 1
  store i64 %518, ptr %19, align 8, !tbaa !9
  br label %497, !llvm.loop !39

519:                                              ; preds = %497
  %520 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %521 = load ptr, ptr %520, align 8, !tbaa !18
  %522 = load i64, ptr %11, align 8, !tbaa !9
  %523 = getelementptr inbounds double, ptr %521, i64 %522
  store double 1.000000e+00, ptr %523, align 8, !tbaa !11
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %524

524:                                              ; preds = %598, %519
  %525 = load i64, ptr %19, align 8, !tbaa !9
  %526 = load i64, ptr %12, align 8, !tbaa !9
  %527 = sub nsw i64 %526, 1
  %528 = icmp sle i64 %525, %527
  br i1 %528, label %529, label %601

529:                                              ; preds = %524
  %530 = load ptr, ptr %9, align 8, !tbaa !5
  %531 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %530, i32 0, i32 6
  %532 = load ptr, ptr %531, align 8, !tbaa !18
  %533 = load i64, ptr %18, align 8, !tbaa !9
  %534 = getelementptr inbounds ptr, ptr %532, i64 %533
  %535 = load ptr, ptr %534, align 8, !tbaa !5
  %536 = load i64, ptr %11, align 8, !tbaa !9
  %537 = load i64, ptr %19, align 8, !tbaa !9
  %538 = add nsw i64 %536, %537
  %539 = getelementptr inbounds double, ptr %535, i64 %538
  %540 = load double, ptr %539, align 8, !tbaa !11
  store double %540, ptr %22, align 8, !tbaa !11
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %541

541:                                              ; preds = %563, %529
  %542 = load i64, ptr %20, align 8, !tbaa !9
  %543 = load i64, ptr %11, align 8, !tbaa !9
  %544 = icmp sle i64 %542, %543
  br i1 %544, label %545, label %566

545:                                              ; preds = %541
  %546 = load double, ptr %22, align 8, !tbaa !11
  %547 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %548 = load ptr, ptr %547, align 8, !tbaa !18
  %549 = load i64, ptr %20, align 8, !tbaa !9
  %550 = getelementptr inbounds double, ptr %548, i64 %549
  %551 = load double, ptr %550, align 8, !tbaa !11
  %552 = load ptr, ptr %15, align 8, !tbaa !5
  %553 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %552, i32 0, i32 6
  %554 = load ptr, ptr %553, align 8, !tbaa !18
  %555 = load i64, ptr %19, align 8, !tbaa !9
  %556 = getelementptr inbounds ptr, ptr %554, i64 %555
  %557 = load ptr, ptr %556, align 8, !tbaa !5
  %558 = load i64, ptr %20, align 8, !tbaa !9
  %559 = getelementptr inbounds double, ptr %557, i64 %558
  %560 = load double, ptr %559, align 8, !tbaa !11
  %561 = fneg double %551
  %562 = call double @llvm.fmuladd.f64(double %561, double %560, double %546)
  store double %562, ptr %22, align 8, !tbaa !11
  br label %563

563:                                              ; preds = %545
  %564 = load i64, ptr %20, align 8, !tbaa !9
  %565 = add nsw i64 %564, 1
  store i64 %565, ptr %20, align 8, !tbaa !9
  br label %541, !llvm.loop !40

566:                                              ; preds = %541
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %567

567:                                              ; preds = %594, %566
  %568 = load i64, ptr %20, align 8, !tbaa !9
  %569 = load i64, ptr %11, align 8, !tbaa !9
  %570 = icmp sle i64 %568, %569
  br i1 %570, label %571, label %597

571:                                              ; preds = %567
  %572 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %25, i32 0, i32 6
  %573 = load ptr, ptr %572, align 8, !tbaa !18
  %574 = load i64, ptr %20, align 8, !tbaa !9
  %575 = getelementptr inbounds ptr, ptr %573, i64 %574
  %576 = load ptr, ptr %575, align 8, !tbaa !5
  %577 = load i64, ptr %19, align 8, !tbaa !9
  %578 = getelementptr inbounds double, ptr %576, i64 %577
  %579 = load double, ptr %578, align 8, !tbaa !11
  %580 = load double, ptr %22, align 8, !tbaa !11
  %581 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %582 = load ptr, ptr %581, align 8, !tbaa !18
  %583 = load i64, ptr %20, align 8, !tbaa !9
  %584 = getelementptr inbounds double, ptr %582, i64 %583
  %585 = load double, ptr %584, align 8, !tbaa !11
  %586 = call double @llvm.fmuladd.f64(double %580, double %585, double %579)
  %587 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %25, i32 0, i32 6
  %588 = load ptr, ptr %587, align 8, !tbaa !18
  %589 = load i64, ptr %20, align 8, !tbaa !9
  %590 = getelementptr inbounds ptr, ptr %588, i64 %589
  %591 = load ptr, ptr %590, align 8, !tbaa !5
  %592 = load i64, ptr %19, align 8, !tbaa !9
  %593 = getelementptr inbounds double, ptr %591, i64 %592
  store double %586, ptr %593, align 8, !tbaa !11
  br label %594

594:                                              ; preds = %571
  %595 = load i64, ptr %20, align 8, !tbaa !9
  %596 = add nsw i64 %595, 1
  store i64 %596, ptr %20, align 8, !tbaa !9
  br label %567, !llvm.loop !41

597:                                              ; preds = %567
  br label %598

598:                                              ; preds = %597
  %599 = load i64, ptr %19, align 8, !tbaa !9
  %600 = add nsw i64 %599, 1
  store i64 %600, ptr %19, align 8, !tbaa !9
  br label %524, !llvm.loop !42

601:                                              ; preds = %524
  br label %602

602:                                              ; preds = %601
  %603 = load i64, ptr %18, align 8, !tbaa !9
  %604 = add nsw i64 %603, 1
  store i64 %604, ptr %18, align 8, !tbaa !9
  br label %491, !llvm.loop !43

605:                                              ; preds = %491
  br label %606

606:                                              ; preds = %672, %605
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %607

607:                                              ; preds = %663, %606
  %608 = load i64, ptr %18, align 8, !tbaa !9
  %609 = load i64, ptr %11, align 8, !tbaa !9
  %610 = icmp sle i64 %608, %609
  br i1 %610, label %611, label %666

611:                                              ; preds = %607
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %612

612:                                              ; preds = %632, %611
  %613 = load i64, ptr %19, align 8, !tbaa !9
  %614 = load i64, ptr %11, align 8, !tbaa !9
  %615 = icmp sle i64 %613, %614
  br i1 %615, label %616, label %635

616:                                              ; preds = %612
  %617 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %23, i32 0, i32 6
  %618 = load ptr, ptr %617, align 8, !tbaa !18
  %619 = load i64, ptr %18, align 8, !tbaa !9
  %620 = getelementptr inbounds ptr, ptr %618, i64 %619
  %621 = load ptr, ptr %620, align 8, !tbaa !5
  %622 = load i64, ptr %19, align 8, !tbaa !9
  %623 = getelementptr inbounds double, ptr %621, i64 %622
  %624 = load double, ptr %623, align 8, !tbaa !11
  %625 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %24, i32 0, i32 6
  %626 = load ptr, ptr %625, align 8, !tbaa !18
  %627 = load i64, ptr %18, align 8, !tbaa !9
  %628 = getelementptr inbounds ptr, ptr %626, i64 %627
  %629 = load ptr, ptr %628, align 8, !tbaa !5
  %630 = load i64, ptr %19, align 8, !tbaa !9
  %631 = getelementptr inbounds double, ptr %629, i64 %630
  store double %624, ptr %631, align 8, !tbaa !11
  br label %632

632:                                              ; preds = %616
  %633 = load i64, ptr %19, align 8, !tbaa !9
  %634 = add nsw i64 %633, 1
  store i64 %634, ptr %19, align 8, !tbaa !9
  br label %612, !llvm.loop !44

635:                                              ; preds = %612
  %636 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %24, i32 0, i32 6
  %637 = load ptr, ptr %636, align 8, !tbaa !18
  %638 = load i64, ptr %18, align 8, !tbaa !9
  %639 = getelementptr inbounds ptr, ptr %637, i64 %638
  %640 = load ptr, ptr %639, align 8, !tbaa !5
  %641 = load i64, ptr %18, align 8, !tbaa !9
  %642 = getelementptr inbounds double, ptr %640, i64 %641
  %643 = load double, ptr %642, align 8, !tbaa !11
  %644 = load double, ptr %27, align 8, !tbaa !11
  %645 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %24, i32 0, i32 6
  %646 = load ptr, ptr %645, align 8, !tbaa !18
  %647 = load i64, ptr %18, align 8, !tbaa !9
  %648 = getelementptr inbounds ptr, ptr %646, i64 %647
  %649 = load ptr, ptr %648, align 8, !tbaa !5
  %650 = load i64, ptr %18, align 8, !tbaa !9
  %651 = getelementptr inbounds double, ptr %649, i64 %650
  %652 = load double, ptr %651, align 8, !tbaa !11
  %653 = load ptr, ptr %16, align 8, !tbaa !5
  %654 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %652, double noundef 1.000000e+00, ptr noundef %653)
  %655 = call double @llvm.fmuladd.f64(double %644, double %654, double %643)
  %656 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %24, i32 0, i32 6
  %657 = load ptr, ptr %656, align 8, !tbaa !18
  %658 = load i64, ptr %18, align 8, !tbaa !9
  %659 = getelementptr inbounds ptr, ptr %657, i64 %658
  %660 = load ptr, ptr %659, align 8, !tbaa !5
  %661 = load i64, ptr %18, align 8, !tbaa !9
  %662 = getelementptr inbounds double, ptr %660, i64 %661
  store double %655, ptr %662, align 8, !tbaa !11
  br label %663

663:                                              ; preds = %635
  %664 = load i64, ptr %18, align 8, !tbaa !9
  %665 = add nsw i64 %664, 1
  store i64 %665, ptr %18, align 8, !tbaa !9
  br label %607, !llvm.loop !45

666:                                              ; preds = %607
  %667 = load i64, ptr %11, align 8, !tbaa !9
  %668 = add nsw i64 %667, 1
  %669 = load ptr, ptr %16, align 8, !tbaa !5
  %670 = call noundef zeroext i1 @_ZN11alglib_impl17spdmatrixcholeskyEPNS_9ae_matrixElbPNS_8ae_stateE(ptr noundef %24, i64 noundef %668, i1 noundef zeroext true, ptr noundef %669)
  br i1 %670, label %671, label %672

671:                                              ; preds = %666
  br label %677

672:                                              ; preds = %666
  %673 = load double, ptr %27, align 8, !tbaa !11
  %674 = fmul double 1.000000e+01, %673
  %675 = load ptr, ptr %16, align 8, !tbaa !5
  %676 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %674, double noundef 0x3D719799812DEA11, ptr noundef %675)
  store double %676, ptr %27, align 8, !tbaa !11
  br label %606, !llvm.loop !46

677:                                              ; preds = %671
  %678 = load i64, ptr %11, align 8, !tbaa !9
  %679 = add nsw i64 %678, 1
  %680 = load i64, ptr %12, align 8, !tbaa !9
  %681 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef %679, i64 noundef %680, ptr noundef %24, i64 noundef 0, i64 noundef 0, i1 noundef zeroext true, i1 noundef zeroext false, i64 noundef 1, ptr noundef %25, i64 noundef 0, i64 noundef 0, ptr noundef %681)
  %682 = load i64, ptr %11, align 8, !tbaa !9
  %683 = add nsw i64 %682, 1
  %684 = load i64, ptr %12, align 8, !tbaa !9
  %685 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef %683, i64 noundef %684, ptr noundef %24, i64 noundef 0, i64 noundef 0, i1 noundef zeroext true, i1 noundef zeroext false, i64 noundef 0, ptr noundef %25, i64 noundef 0, i64 noundef 0, ptr noundef %685)
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %686

686:                                              ; preds = %727, %677
  %687 = load i64, ptr %18, align 8, !tbaa !9
  %688 = load i64, ptr %11, align 8, !tbaa !9
  %689 = icmp sle i64 %687, %688
  br i1 %689, label %690, label %730

690:                                              ; preds = %686
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %691

691:                                              ; preds = %723, %690
  %692 = load i64, ptr %19, align 8, !tbaa !9
  %693 = load i64, ptr %12, align 8, !tbaa !9
  %694 = sub nsw i64 %693, 1
  %695 = icmp sle i64 %692, %694
  br i1 %695, label %696, label %726

696:                                              ; preds = %691
  %697 = load ptr, ptr %15, align 8, !tbaa !5
  %698 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %697, i32 0, i32 6
  %699 = load ptr, ptr %698, align 8, !tbaa !18
  %700 = load i64, ptr %19, align 8, !tbaa !9
  %701 = getelementptr inbounds ptr, ptr %699, i64 %700
  %702 = load ptr, ptr %701, align 8, !tbaa !5
  %703 = load i64, ptr %18, align 8, !tbaa !9
  %704 = getelementptr inbounds double, ptr %702, i64 %703
  %705 = load double, ptr %704, align 8, !tbaa !11
  %706 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %25, i32 0, i32 6
  %707 = load ptr, ptr %706, align 8, !tbaa !18
  %708 = load i64, ptr %18, align 8, !tbaa !9
  %709 = getelementptr inbounds ptr, ptr %707, i64 %708
  %710 = load ptr, ptr %709, align 8, !tbaa !5
  %711 = load i64, ptr %19, align 8, !tbaa !9
  %712 = getelementptr inbounds double, ptr %710, i64 %711
  %713 = load double, ptr %712, align 8, !tbaa !11
  %714 = fadd double %705, %713
  %715 = load ptr, ptr %15, align 8, !tbaa !5
  %716 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %715, i32 0, i32 6
  %717 = load ptr, ptr %716, align 8, !tbaa !18
  %718 = load i64, ptr %19, align 8, !tbaa !9
  %719 = getelementptr inbounds ptr, ptr %717, i64 %718
  %720 = load ptr, ptr %719, align 8, !tbaa !5
  %721 = load i64, ptr %18, align 8, !tbaa !9
  %722 = getelementptr inbounds double, ptr %720, i64 %721
  store double %714, ptr %722, align 8, !tbaa !11
  br label %723

723:                                              ; preds = %696
  %724 = load i64, ptr %19, align 8, !tbaa !9
  %725 = add nsw i64 %724, 1
  store i64 %725, ptr %19, align 8, !tbaa !9
  br label %691, !llvm.loop !47

726:                                              ; preds = %691
  br label %727

727:                                              ; preds = %726
  %728 = load i64, ptr %18, align 8, !tbaa !9
  %729 = add nsw i64 %728, 1
  store i64 %729, ptr %18, align 8, !tbaa !9
  br label %686, !llvm.loop !48

730:                                              ; preds = %686
  br label %731

731:                                              ; preds = %730
  %732 = load i64, ptr %28, align 8, !tbaa !9
  %733 = add nsw i64 %732, 1
  store i64 %733, ptr %28, align 8, !tbaa !9
  br label %461, !llvm.loop !49

734:                                              ; preds = %461
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %735

735:                                              ; preds = %826, %734
  %736 = load i64, ptr %18, align 8, !tbaa !9
  %737 = load i64, ptr %10, align 8, !tbaa !9
  %738 = sub nsw i64 %737, 1
  %739 = icmp sle i64 %736, %738
  br i1 %739, label %740, label %829

740:                                              ; preds = %735
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %741

741:                                              ; preds = %760, %740
  %742 = load i64, ptr %19, align 8, !tbaa !9
  %743 = load i64, ptr %11, align 8, !tbaa !9
  %744 = sub nsw i64 %743, 1
  %745 = icmp sle i64 %742, %744
  br i1 %745, label %746, label %763

746:                                              ; preds = %741
  %747 = load ptr, ptr %9, align 8, !tbaa !5
  %748 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %747, i32 0, i32 6
  %749 = load ptr, ptr %748, align 8, !tbaa !18
  %750 = load i64, ptr %18, align 8, !tbaa !9
  %751 = getelementptr inbounds ptr, ptr %749, i64 %750
  %752 = load ptr, ptr %751, align 8, !tbaa !5
  %753 = load i64, ptr %19, align 8, !tbaa !9
  %754 = getelementptr inbounds double, ptr %752, i64 %753
  %755 = load double, ptr %754, align 8, !tbaa !11
  %756 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %757 = load ptr, ptr %756, align 8, !tbaa !18
  %758 = load i64, ptr %19, align 8, !tbaa !9
  %759 = getelementptr inbounds double, ptr %757, i64 %758
  store double %755, ptr %759, align 8, !tbaa !11
  br label %760

760:                                              ; preds = %746
  %761 = load i64, ptr %19, align 8, !tbaa !9
  %762 = add nsw i64 %761, 1
  store i64 %762, ptr %19, align 8, !tbaa !9
  br label %741, !llvm.loop !50

763:                                              ; preds = %741
  %764 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %765 = load ptr, ptr %764, align 8, !tbaa !18
  %766 = load i64, ptr %11, align 8, !tbaa !9
  %767 = getelementptr inbounds double, ptr %765, i64 %766
  store double 1.000000e+00, ptr %767, align 8, !tbaa !11
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %768

768:                                              ; preds = %822, %763
  %769 = load i64, ptr %19, align 8, !tbaa !9
  %770 = load i64, ptr %12, align 8, !tbaa !9
  %771 = sub nsw i64 %770, 1
  %772 = icmp sle i64 %769, %771
  br i1 %772, label %773, label %825

773:                                              ; preds = %768
  store double 0.000000e+00, ptr %22, align 8, !tbaa !11
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %774

774:                                              ; preds = %795, %773
  %775 = load i64, ptr %20, align 8, !tbaa !9
  %776 = load i64, ptr %11, align 8, !tbaa !9
  %777 = icmp sle i64 %775, %776
  br i1 %777, label %778, label %798

778:                                              ; preds = %774
  %779 = load double, ptr %22, align 8, !tbaa !11
  %780 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %781 = load ptr, ptr %780, align 8, !tbaa !18
  %782 = load i64, ptr %20, align 8, !tbaa !9
  %783 = getelementptr inbounds double, ptr %781, i64 %782
  %784 = load double, ptr %783, align 8, !tbaa !11
  %785 = load ptr, ptr %15, align 8, !tbaa !5
  %786 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %785, i32 0, i32 6
  %787 = load ptr, ptr %786, align 8, !tbaa !18
  %788 = load i64, ptr %19, align 8, !tbaa !9
  %789 = getelementptr inbounds ptr, ptr %787, i64 %788
  %790 = load ptr, ptr %789, align 8, !tbaa !5
  %791 = load i64, ptr %20, align 8, !tbaa !9
  %792 = getelementptr inbounds double, ptr %790, i64 %791
  %793 = load double, ptr %792, align 8, !tbaa !11
  %794 = call double @llvm.fmuladd.f64(double %784, double %793, double %779)
  store double %794, ptr %22, align 8, !tbaa !11
  br label %795

795:                                              ; preds = %778
  %796 = load i64, ptr %20, align 8, !tbaa !9
  %797 = add nsw i64 %796, 1
  store i64 %797, ptr %20, align 8, !tbaa !9
  br label %774, !llvm.loop !51

798:                                              ; preds = %774
  %799 = load ptr, ptr %9, align 8, !tbaa !5
  %800 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %799, i32 0, i32 6
  %801 = load ptr, ptr %800, align 8, !tbaa !18
  %802 = load i64, ptr %18, align 8, !tbaa !9
  %803 = getelementptr inbounds ptr, ptr %801, i64 %802
  %804 = load ptr, ptr %803, align 8, !tbaa !5
  %805 = load i64, ptr %11, align 8, !tbaa !9
  %806 = load i64, ptr %19, align 8, !tbaa !9
  %807 = add nsw i64 %805, %806
  %808 = getelementptr inbounds double, ptr %804, i64 %807
  %809 = load double, ptr %808, align 8, !tbaa !11
  %810 = load double, ptr %22, align 8, !tbaa !11
  %811 = fsub double %809, %810
  %812 = load ptr, ptr %9, align 8, !tbaa !5
  %813 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %812, i32 0, i32 6
  %814 = load ptr, ptr %813, align 8, !tbaa !18
  %815 = load i64, ptr %18, align 8, !tbaa !9
  %816 = getelementptr inbounds ptr, ptr %814, i64 %815
  %817 = load ptr, ptr %816, align 8, !tbaa !5
  %818 = load i64, ptr %11, align 8, !tbaa !9
  %819 = load i64, ptr %19, align 8, !tbaa !9
  %820 = add nsw i64 %818, %819
  %821 = getelementptr inbounds double, ptr %817, i64 %820
  store double %811, ptr %821, align 8, !tbaa !11
  br label %822

822:                                              ; preds = %798
  %823 = load i64, ptr %19, align 8, !tbaa !9
  %824 = add nsw i64 %823, 1
  store i64 %824, ptr %19, align 8, !tbaa !9
  br label %768, !llvm.loop !52

825:                                              ; preds = %768
  br label %826

826:                                              ; preds = %825
  %827 = load i64, ptr %18, align 8, !tbaa !9
  %828 = add nsw i64 %827, 1
  store i64 %828, ptr %18, align 8, !tbaa !9
  br label %735, !llvm.loop !53

829:                                              ; preds = %735
  %830 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %830)
  store i32 0, ptr %29, align 4
  br label %831

831:                                              ; preds = %829, %332, %327, %190, %121, %116, %111, %106
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %17) #5
  %832 = load i32, ptr %29, align 4
  switch i32 %832, label %834 [
    i32 0, label %833
    i32 1, label %833
  ]

833:                                              ; preds = %831, %831
  ret void

834:                                              ; preds = %831
  unreachable
}

declare noundef zeroext i1 @_ZN11alglib_impl17spdmatrixcholeskyEPNS_9ae_matrixElbPNS_8ae_stateE(ptr noundef, i64 noundef, i1 noundef zeroext, ptr noundef) #2

declare void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i1 noundef zeroext, i1 noundef zeroext, i64 noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { "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) }
attributes #4 = { 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 #5 = { 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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTSN11alglib_impl9ae_matrixE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !15, i64 32, !16, i64 40, !7, i64 72}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!17 = !{!14, !10, i64 8}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = distinct !{!25, !20}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}
!45 = distinct !{!45, !20}
!46 = distinct !{!46, !20}
!47 = distinct !{!47, !20}
!48 = distinct !{!48, !20}
!49 = distinct !{!49, !20}
!50 = distinct !{!50, !20}
!51 = distinct !{!51, !20}
!52 = distinct !{!52, !20}
!53 = distinct !{!53, !20}


; 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"

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

@.str.157 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.158 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.159 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.160 = external hidden unnamed_addr constant [38 x i8], align 1

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

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

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

declare void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

declare noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef, double noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #2

declare void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #2

declare void @_ZN11alglib_impl15ae_matrix_clearEPNS_9ae_matrixE(ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl14buildpriortermEPNS_9ae_matrixElllldS1_PNS_8ae_stateE(ptr nocapture noundef readonly %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, double noundef %5, ptr noundef %6, ptr noundef %7) local_unnamed_addr #4 {
  %9 = alloca %"struct.alglib_impl::ae_frame", align 8
  %10 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %11 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %12 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %13 = alloca %"struct.alglib_impl::ae_vector", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %13) #5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %7, ptr noundef nonnull %9)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %10, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %11, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %12, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %13, i8 0, i64 64, i1 false)
  call void @_ZN11alglib_impl15ae_matrix_clearEPNS_9ae_matrixE(ptr noundef %6)
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef nonnull %10, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef nonnull %11, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef nonnull %12, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %13, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  %14 = icmp sgt i64 %1, -1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %14, ptr noundef nonnull @.str.157, ptr noundef %7)
  %15 = icmp sgt i64 %2, 0
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %15, ptr noundef nonnull @.str.158, ptr noundef %7)
  %16 = icmp sgt i64 %3, 0
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %16, ptr noundef nonnull @.str.159, ptr noundef %7)
  %17 = add i64 %2, 1
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %6, i64 noundef %3, i64 noundef %17, ptr noundef %7)
  %18 = load i64, ptr %6, align 8, !tbaa !5
  %.not.not364 = icmp sgt i64 %18, 0
  br i1 %.not.not364, label %.preheader361.lr.ph, label %._crit_edge366

.preheader361.lr.ph:                              ; preds = %8
  %19 = getelementptr inbounds i8, ptr %6, i64 8
  %20 = load i64, ptr %19, align 8, !tbaa !13
  %.not336.not362 = icmp sgt i64 %20, 0
  %21 = getelementptr inbounds i8, ptr %6, i64 72
  br i1 %.not336.not362, label %.preheader361.us.preheader, label %._crit_edge366

.preheader361.us.preheader:                       ; preds = %.preheader361.lr.ph
  %xtraiter = and i64 %20, 3
  %22 = icmp ult i64 %20, 4
  %unroll_iter = and i64 %20, 9223372036854775804
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader361.us

.preheader361.us:                                 ; preds = %.preheader361.us.preheader, %._crit_edge.us
  %.0286365.us = phi i64 [ %48, %._crit_edge.us ], [ 0, %.preheader361.us.preheader ]
  br i1 %22, label %._crit_edge.us.unr-lcssa, label %.preheader361.us.new

.preheader361.us.new:                             ; preds = %.preheader361.us, %.preheader361.us.new
  %.0282363.us = phi i64 [ %42, %.preheader361.us.new ], [ 0, %.preheader361.us ]
  %niter = phi i64 [ %niter.next.3, %.preheader361.us.new ], [ 0, %.preheader361.us ]
  %23 = load ptr, ptr %21, align 8, !tbaa !14
  %24 = getelementptr inbounds ptr, ptr %23, i64 %.0286365.us
  %25 = load ptr, ptr %24, align 8, !tbaa !15
  %26 = getelementptr inbounds double, ptr %25, i64 %.0282363.us
  store double 0.000000e+00, ptr %26, align 8, !tbaa !16
  %27 = or disjoint i64 %.0282363.us, 1
  %28 = load ptr, ptr %21, align 8, !tbaa !14
  %29 = getelementptr inbounds ptr, ptr %28, i64 %.0286365.us
  %30 = load ptr, ptr %29, align 8, !tbaa !15
  %31 = getelementptr inbounds double, ptr %30, i64 %27
  store double 0.000000e+00, ptr %31, align 8, !tbaa !16
  %32 = or disjoint i64 %.0282363.us, 2
  %33 = load ptr, ptr %21, align 8, !tbaa !14
  %34 = getelementptr inbounds ptr, ptr %33, i64 %.0286365.us
  %35 = load ptr, ptr %34, align 8, !tbaa !15
  %36 = getelementptr inbounds double, ptr %35, i64 %32
  store double 0.000000e+00, ptr %36, align 8, !tbaa !16
  %37 = or disjoint i64 %.0282363.us, 3
  %38 = load ptr, ptr %21, align 8, !tbaa !14
  %39 = getelementptr inbounds ptr, ptr %38, i64 %.0286365.us
  %40 = load ptr, ptr %39, align 8, !tbaa !15
  %41 = getelementptr inbounds double, ptr %40, i64 %37
  store double 0.000000e+00, ptr %41, align 8, !tbaa !16
  %42 = add nuw nsw i64 %.0282363.us, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.us.unr-lcssa, label %.preheader361.us.new, !llvm.loop !18

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader361.us.new, %.preheader361.us
  %.0282363.us.unr = phi i64 [ 0, %.preheader361.us ], [ %42, %.preheader361.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.us.unr-lcssa, %.epil.preheader
  %.0282363.us.epil = phi i64 [ %47, %.epil.preheader ], [ %.0282363.us.unr, %._crit_edge.us.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.us.unr-lcssa ]
  %43 = load ptr, ptr %21, align 8, !tbaa !14
  %44 = getelementptr inbounds ptr, ptr %43, i64 %.0286365.us
  %45 = load ptr, ptr %44, align 8, !tbaa !15
  %46 = getelementptr inbounds double, ptr %45, i64 %.0282363.us.epil
  store double 0.000000e+00, ptr %46, align 8, !tbaa !16
  %47 = add nuw nsw i64 %.0282363.us.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge.us, label %.epil.preheader, !llvm.loop !20

._crit_edge.us:                                   ; preds = %.epil.preheader, %._crit_edge.us.unr-lcssa
  %48 = add nuw nsw i64 %.0286365.us, 1
  %exitcond484.not = icmp eq i64 %48, %18
  br i1 %exitcond484.not, label %._crit_edge366, label %.preheader361.us, !llvm.loop !22

._crit_edge366:                                   ; preds = %._crit_edge.us, %.preheader361.lr.ph, %8
  %49 = icmp eq i64 %1, 0
  br i1 %49, label %50, label %76

50:                                               ; preds = %._crit_edge366
  switch i64 %4, label %75 [
    i64 0, label %.preheader360
    i64 1, label %._crit_edge
    i64 2, label %._crit_edge
    i64 3, label %._crit_edge
  ]

.preheader360:                                    ; preds = %50
  br i1 %16, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader360
  %51 = getelementptr inbounds i8, ptr %6, i64 72
  %52 = add nsw i64 %3, -1
  %xtraiter536 = and i64 %3, 3
  %53 = icmp ult i64 %52, 3
  br i1 %53, label %._crit_edge.loopexit534.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter539 = and i64 %3, 9223372036854775804
  br label %54

54:                                               ; preds = %54, %.lr.ph.new
  %.1287368 = phi i64 [ 0, %.lr.ph.new ], [ %74, %54 ]
  %niter540 = phi i64 [ 0, %.lr.ph.new ], [ %niter540.next.3, %54 ]
  %55 = load ptr, ptr %51, align 8, !tbaa !14
  %56 = getelementptr inbounds ptr, ptr %55, i64 %.1287368
  %57 = load ptr, ptr %56, align 8, !tbaa !15
  %58 = getelementptr inbounds double, ptr %57, i64 %2
  store double %5, ptr %58, align 8, !tbaa !16
  %59 = or disjoint i64 %.1287368, 1
  %60 = load ptr, ptr %51, align 8, !tbaa !14
  %61 = getelementptr inbounds ptr, ptr %60, i64 %59
  %62 = load ptr, ptr %61, align 8, !tbaa !15
  %63 = getelementptr inbounds double, ptr %62, i64 %2
  store double %5, ptr %63, align 8, !tbaa !16
  %64 = or disjoint i64 %.1287368, 2
  %65 = load ptr, ptr %51, align 8, !tbaa !14
  %66 = getelementptr inbounds ptr, ptr %65, i64 %64
  %67 = load ptr, ptr %66, align 8, !tbaa !15
  %68 = getelementptr inbounds double, ptr %67, i64 %2
  store double %5, ptr %68, align 8, !tbaa !16
  %69 = or disjoint i64 %.1287368, 3
  %70 = load ptr, ptr %51, align 8, !tbaa !14
  %71 = getelementptr inbounds ptr, ptr %70, i64 %69
  %72 = load ptr, ptr %71, align 8, !tbaa !15
  %73 = getelementptr inbounds double, ptr %72, i64 %2
  store double %5, ptr %73, align 8, !tbaa !16
  %74 = add nuw nsw i64 %.1287368, 4
  %niter540.next.3 = add i64 %niter540, 4
  %niter540.ncmp.3 = icmp eq i64 %niter540.next.3, %unroll_iter539
  br i1 %niter540.ncmp.3, label %._crit_edge.loopexit534.unr-lcssa, label %54, !llvm.loop !23

75:                                               ; preds = %50
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.160, ptr noundef %7)
  br label %76

76:                                               ; preds = %75, %._crit_edge366
  switch i64 %4, label %231 [
    i64 0, label %.preheader354
    i64 2, label %.preheader359
    i64 3, label %._crit_edge
  ]

.preheader359:                                    ; preds = %76
  %.not327.not373 = icmp sgt i64 %1, 0
  br i1 %.not327.not373, label %.preheader358.lr.ph, label %.preheader357.thread519

.preheader358.lr.ph:                              ; preds = %.preheader359
  %77 = getelementptr inbounds i8, ptr %6, i64 72
  %78 = getelementptr inbounds i8, ptr %0, i64 72
  br i1 %16, label %.preheader358.us.preheader, label %._crit_edge

.preheader358.us.preheader:                       ; preds = %.preheader358.lr.ph
  %xtraiter542 = and i64 %3, 1
  %79 = icmp eq i64 %3, 1
  %unroll_iter545 = and i64 %3, 9223372036854775806
  %lcmp.mod544.not = icmp eq i64 %xtraiter542, 0
  br label %.preheader358.us

.preheader358.us:                                 ; preds = %.preheader358.us.preheader, %._crit_edge372.us
  %.4290374.us = phi i64 [ %118, %._crit_edge372.us ], [ 0, %.preheader358.us.preheader ]
  br i1 %79, label %._crit_edge372.us.unr-lcssa, label %.preheader358.us.new

.preheader358.us.new:                             ; preds = %.preheader358.us, %.preheader358.us.new
  %.2284370.us = phi i64 [ %105, %.preheader358.us.new ], [ 0, %.preheader358.us ]
  %niter546 = phi i64 [ %niter546.next.1, %.preheader358.us.new ], [ 0, %.preheader358.us ]
  %80 = load ptr, ptr %77, align 8, !tbaa !14
  %81 = getelementptr inbounds ptr, ptr %80, i64 %.2284370.us
  %82 = load ptr, ptr %81, align 8, !tbaa !15
  %83 = getelementptr inbounds double, ptr %82, i64 %2
  %84 = load double, ptr %83, align 8, !tbaa !16
  %85 = load ptr, ptr %78, align 8, !tbaa !14
  %86 = getelementptr inbounds ptr, ptr %85, i64 %.4290374.us
  %87 = load ptr, ptr %86, align 8, !tbaa !15
  %88 = getelementptr double, ptr %87, i64 %.2284370.us
  %89 = getelementptr double, ptr %88, i64 %2
  %90 = load double, ptr %89, align 8, !tbaa !16
  %91 = fadd double %84, %90
  store double %91, ptr %83, align 8, !tbaa !16
  %92 = or disjoint i64 %.2284370.us, 1
  %93 = load ptr, ptr %77, align 8, !tbaa !14
  %94 = getelementptr inbounds ptr, ptr %93, i64 %92
  %95 = load ptr, ptr %94, align 8, !tbaa !15
  %96 = getelementptr inbounds double, ptr %95, i64 %2
  %97 = load double, ptr %96, align 8, !tbaa !16
  %98 = load ptr, ptr %78, align 8, !tbaa !14
  %99 = getelementptr inbounds ptr, ptr %98, i64 %.4290374.us
  %100 = load ptr, ptr %99, align 8, !tbaa !15
  %101 = getelementptr double, ptr %100, i64 %92
  %102 = getelementptr double, ptr %101, i64 %2
  %103 = load double, ptr %102, align 8, !tbaa !16
  %104 = fadd double %97, %103
  store double %104, ptr %96, align 8, !tbaa !16
  %105 = add nuw nsw i64 %.2284370.us, 2
  %niter546.next.1 = add i64 %niter546, 2
  %niter546.ncmp.1 = icmp eq i64 %niter546.next.1, %unroll_iter545
  br i1 %niter546.ncmp.1, label %._crit_edge372.us.unr-lcssa, label %.preheader358.us.new, !llvm.loop !24

._crit_edge372.us.unr-lcssa:                      ; preds = %.preheader358.us.new, %.preheader358.us
  %.2284370.us.unr = phi i64 [ 0, %.preheader358.us ], [ %105, %.preheader358.us.new ]
  br i1 %lcmp.mod544.not, label %._crit_edge372.us, label %._crit_edge372.us.epilog-lcssa

._crit_edge372.us.epilog-lcssa:                   ; preds = %._crit_edge372.us.unr-lcssa
  %106 = load ptr, ptr %77, align 8, !tbaa !14
  %107 = getelementptr inbounds ptr, ptr %106, i64 %.2284370.us.unr
  %108 = load ptr, ptr %107, align 8, !tbaa !15
  %109 = getelementptr inbounds double, ptr %108, i64 %2
  %110 = load double, ptr %109, align 8, !tbaa !16
  %111 = load ptr, ptr %78, align 8, !tbaa !14
  %112 = getelementptr inbounds ptr, ptr %111, i64 %.4290374.us
  %113 = load ptr, ptr %112, align 8, !tbaa !15
  %114 = getelementptr double, ptr %113, i64 %.2284370.us.unr
  %115 = getelementptr double, ptr %114, i64 %2
  %116 = load double, ptr %115, align 8, !tbaa !16
  %117 = fadd double %110, %116
  store double %117, ptr %109, align 8, !tbaa !16
  br label %._crit_edge372.us

._crit_edge372.us:                                ; preds = %._crit_edge372.us.unr-lcssa, %._crit_edge372.us.epilog-lcssa
  %118 = add nuw nsw i64 %.4290374.us, 1
  %exitcond487.not = icmp eq i64 %118, %1
  br i1 %exitcond487.not, label %.preheader357, label %.preheader358.us, !llvm.loop !25

.preheader354:                                    ; preds = %76
  br i1 %16, label %.lr.ph387, label %._crit_edge

.lr.ph387:                                        ; preds = %.preheader354
  %119 = getelementptr inbounds i8, ptr %6, i64 72
  %120 = add nsw i64 %3, -1
  %xtraiter554 = and i64 %3, 3
  %121 = icmp ult i64 %120, 3
  br i1 %121, label %.preheader353.unr-lcssa, label %.lr.ph387.new

.lr.ph387.new:                                    ; preds = %.lr.ph387
  %unroll_iter557 = and i64 %3, 9223372036854775804
  br label %153

.preheader353.unr-lcssa:                          ; preds = %153, %.lr.ph387
  %.2288386.unr = phi i64 [ 0, %.lr.ph387 ], [ %173, %153 ]
  %lcmp.mod556.not = icmp eq i64 %xtraiter554, 0
  br i1 %lcmp.mod556.not, label %.preheader353, label %.epil.preheader553

.epil.preheader553:                               ; preds = %.preheader353.unr-lcssa, %.epil.preheader553
  %.2288386.epil = phi i64 [ %126, %.epil.preheader553 ], [ %.2288386.unr, %.preheader353.unr-lcssa ]
  %epil.iter555 = phi i64 [ %epil.iter555.next, %.epil.preheader553 ], [ 0, %.preheader353.unr-lcssa ]
  %122 = load ptr, ptr %119, align 8, !tbaa !14
  %123 = getelementptr inbounds ptr, ptr %122, i64 %.2288386.epil
  %124 = load ptr, ptr %123, align 8, !tbaa !15
  %125 = getelementptr inbounds double, ptr %124, i64 %2
  store double %5, ptr %125, align 8, !tbaa !16
  %126 = add nuw nsw i64 %.2288386.epil, 1
  %epil.iter555.next = add i64 %epil.iter555, 1
  %epil.iter555.cmp.not = icmp eq i64 %epil.iter555.next, %xtraiter554
  br i1 %epil.iter555.cmp.not, label %.preheader353, label %.epil.preheader553, !llvm.loop !26

.preheader353:                                    ; preds = %.epil.preheader553, %.preheader353.unr-lcssa
  %.not333.not392 = icmp sgt i64 %1, 0
  br i1 %.not333.not392, label %.preheader352.lr.ph, label %._crit_edge

.preheader352.lr.ph:                              ; preds = %.preheader353
  %127 = getelementptr inbounds i8, ptr %0, i64 72
  br i1 %16, label %.preheader352.us.preheader, label %._crit_edge

.preheader352.us.preheader:                       ; preds = %.preheader352.lr.ph
  %xtraiter560 = and i64 %3, 1
  %128 = icmp eq i64 %120, 0
  %unroll_iter563 = and i64 %3, 9223372036854775806
  %lcmp.mod562.not = icmp eq i64 %xtraiter560, 0
  br label %.preheader352.us

.preheader352.us:                                 ; preds = %.preheader352.us.preheader, %._crit_edge391.us
  %.3289393.us = phi i64 [ %152, %._crit_edge391.us ], [ 0, %.preheader352.us.preheader ]
  br i1 %128, label %._crit_edge391.us.unr-lcssa, label %.preheader352.us.new

.preheader352.us.new:                             ; preds = %.preheader352.us, %.preheader352.us.new
  %.1283389.us = phi i64 [ %144, %.preheader352.us.new ], [ 0, %.preheader352.us ]
  %niter564 = phi i64 [ %niter564.next.1, %.preheader352.us.new ], [ 0, %.preheader352.us ]
  %129 = load ptr, ptr %127, align 8, !tbaa !14
  %130 = getelementptr inbounds ptr, ptr %129, i64 %.3289393.us
  %131 = load ptr, ptr %130, align 8, !tbaa !15
  %132 = getelementptr double, ptr %131, i64 %.1283389.us
  %133 = getelementptr double, ptr %132, i64 %2
  %134 = load double, ptr %133, align 8, !tbaa !16
  %135 = fsub double %134, %5
  store double %135, ptr %133, align 8, !tbaa !16
  %136 = or disjoint i64 %.1283389.us, 1
  %137 = load ptr, ptr %127, align 8, !tbaa !14
  %138 = getelementptr inbounds ptr, ptr %137, i64 %.3289393.us
  %139 = load ptr, ptr %138, align 8, !tbaa !15
  %140 = getelementptr double, ptr %139, i64 %136
  %141 = getelementptr double, ptr %140, i64 %2
  %142 = load double, ptr %141, align 8, !tbaa !16
  %143 = fsub double %142, %5
  store double %143, ptr %141, align 8, !tbaa !16
  %144 = add nuw nsw i64 %.1283389.us, 2
  %niter564.next.1 = add i64 %niter564, 2
  %niter564.ncmp.1 = icmp eq i64 %niter564.next.1, %unroll_iter563
  br i1 %niter564.ncmp.1, label %._crit_edge391.us.unr-lcssa, label %.preheader352.us.new, !llvm.loop !27

._crit_edge391.us.unr-lcssa:                      ; preds = %.preheader352.us.new, %.preheader352.us
  %.1283389.us.unr = phi i64 [ 0, %.preheader352.us ], [ %144, %.preheader352.us.new ]
  br i1 %lcmp.mod562.not, label %._crit_edge391.us, label %._crit_edge391.us.epilog-lcssa

._crit_edge391.us.epilog-lcssa:                   ; preds = %._crit_edge391.us.unr-lcssa
  %145 = load ptr, ptr %127, align 8, !tbaa !14
  %146 = getelementptr inbounds ptr, ptr %145, i64 %.3289393.us
  %147 = load ptr, ptr %146, align 8, !tbaa !15
  %148 = getelementptr double, ptr %147, i64 %.1283389.us.unr
  %149 = getelementptr double, ptr %148, i64 %2
  %150 = load double, ptr %149, align 8, !tbaa !16
  %151 = fsub double %150, %5
  store double %151, ptr %149, align 8, !tbaa !16
  br label %._crit_edge391.us

._crit_edge391.us:                                ; preds = %._crit_edge391.us.unr-lcssa, %._crit_edge391.us.epilog-lcssa
  %152 = add nuw nsw i64 %.3289393.us, 1
  %exitcond493.not = icmp eq i64 %152, %1
  br i1 %exitcond493.not, label %._crit_edge, label %.preheader352.us, !llvm.loop !28

153:                                              ; preds = %153, %.lr.ph387.new
  %.2288386 = phi i64 [ 0, %.lr.ph387.new ], [ %173, %153 ]
  %niter558 = phi i64 [ 0, %.lr.ph387.new ], [ %niter558.next.3, %153 ]
  %154 = load ptr, ptr %119, align 8, !tbaa !14
  %155 = getelementptr inbounds ptr, ptr %154, i64 %.2288386
  %156 = load ptr, ptr %155, align 8, !tbaa !15
  %157 = getelementptr inbounds double, ptr %156, i64 %2
  store double %5, ptr %157, align 8, !tbaa !16
  %158 = or disjoint i64 %.2288386, 1
  %159 = load ptr, ptr %119, align 8, !tbaa !14
  %160 = getelementptr inbounds ptr, ptr %159, i64 %158
  %161 = load ptr, ptr %160, align 8, !tbaa !15
  %162 = getelementptr inbounds double, ptr %161, i64 %2
  store double %5, ptr %162, align 8, !tbaa !16
  %163 = or disjoint i64 %.2288386, 2
  %164 = load ptr, ptr %119, align 8, !tbaa !14
  %165 = getelementptr inbounds ptr, ptr %164, i64 %163
  %166 = load ptr, ptr %165, align 8, !tbaa !15
  %167 = getelementptr inbounds double, ptr %166, i64 %2
  store double %5, ptr %167, align 8, !tbaa !16
  %168 = or disjoint i64 %.2288386, 3
  %169 = load ptr, ptr %119, align 8, !tbaa !14
  %170 = getelementptr inbounds ptr, ptr %169, i64 %168
  %171 = load ptr, ptr %170, align 8, !tbaa !15
  %172 = getelementptr inbounds double, ptr %171, i64 %2
  store double %5, ptr %172, align 8, !tbaa !16
  %173 = add nuw nsw i64 %.2288386, 4
  %niter558.next.3 = add i64 %niter558, 4
  %niter558.ncmp.3 = icmp eq i64 %niter558.next.3, %unroll_iter557
  br i1 %niter558.ncmp.3, label %.preheader353.unr-lcssa, label %153, !llvm.loop !29

.preheader357:                                    ; preds = %._crit_edge372.us
  br i1 %16, label %.lr.ph377, label %._crit_edge

.preheader357.thread519:                          ; preds = %.preheader359
  br i1 %16, label %.lr.ph377, label %._crit_edge

.lr.ph377:                                        ; preds = %.preheader357.thread519, %.preheader357
  %174 = getelementptr inbounds i8, ptr %6, i64 72
  %175 = sitofp i64 %1 to double
  br label %218

.preheader356:                                    ; preds = %218
  br i1 %.not327.not373, label %.preheader355.lr.ph, label %._crit_edge

.preheader355.lr.ph:                              ; preds = %.preheader356
  %176 = getelementptr inbounds i8, ptr %0, i64 72
  %177 = getelementptr inbounds i8, ptr %6, i64 72
  br i1 %16, label %.preheader355.us.preheader, label %._crit_edge

.preheader355.us.preheader:                       ; preds = %.preheader355.lr.ph
  %xtraiter548 = and i64 %3, 1
  %178 = icmp eq i64 %3, 1
  %unroll_iter551 = and i64 %3, 9223372036854775806
  %lcmp.mod550.not = icmp eq i64 %xtraiter548, 0
  br label %.preheader355.us

.preheader355.us:                                 ; preds = %.preheader355.us.preheader, %._crit_edge381.us
  %.5291383.us = phi i64 [ %217, %._crit_edge381.us ], [ 0, %.preheader355.us.preheader ]
  br i1 %178, label %._crit_edge381.us.unr-lcssa, label %.preheader355.us.new

.preheader355.us.new:                             ; preds = %.preheader355.us, %.preheader355.us.new
  %.4379.us = phi i64 [ %204, %.preheader355.us.new ], [ 0, %.preheader355.us ]
  %niter552 = phi i64 [ %niter552.next.1, %.preheader355.us.new ], [ 0, %.preheader355.us ]
  %179 = load ptr, ptr %176, align 8, !tbaa !14
  %180 = getelementptr inbounds ptr, ptr %179, i64 %.5291383.us
  %181 = load ptr, ptr %180, align 8, !tbaa !15
  %182 = getelementptr double, ptr %181, i64 %.4379.us
  %183 = getelementptr double, ptr %182, i64 %2
  %184 = load double, ptr %183, align 8, !tbaa !16
  %185 = load ptr, ptr %177, align 8, !tbaa !14
  %186 = getelementptr inbounds ptr, ptr %185, i64 %.4379.us
  %187 = load ptr, ptr %186, align 8, !tbaa !15
  %188 = getelementptr inbounds double, ptr %187, i64 %2
  %189 = load double, ptr %188, align 8, !tbaa !16
  %190 = fsub double %184, %189
  store double %190, ptr %183, align 8, !tbaa !16
  %191 = or disjoint i64 %.4379.us, 1
  %192 = load ptr, ptr %176, align 8, !tbaa !14
  %193 = getelementptr inbounds ptr, ptr %192, i64 %.5291383.us
  %194 = load ptr, ptr %193, align 8, !tbaa !15
  %195 = getelementptr double, ptr %194, i64 %191
  %196 = getelementptr double, ptr %195, i64 %2
  %197 = load double, ptr %196, align 8, !tbaa !16
  %198 = load ptr, ptr %177, align 8, !tbaa !14
  %199 = getelementptr inbounds ptr, ptr %198, i64 %191
  %200 = load ptr, ptr %199, align 8, !tbaa !15
  %201 = getelementptr inbounds double, ptr %200, i64 %2
  %202 = load double, ptr %201, align 8, !tbaa !16
  %203 = fsub double %197, %202
  store double %203, ptr %196, align 8, !tbaa !16
  %204 = add nuw nsw i64 %.4379.us, 2
  %niter552.next.1 = add i64 %niter552, 2
  %niter552.ncmp.1 = icmp eq i64 %niter552.next.1, %unroll_iter551
  br i1 %niter552.ncmp.1, label %._crit_edge381.us.unr-lcssa, label %.preheader355.us.new, !llvm.loop !30

._crit_edge381.us.unr-lcssa:                      ; preds = %.preheader355.us.new, %.preheader355.us
  %.4379.us.unr = phi i64 [ 0, %.preheader355.us ], [ %204, %.preheader355.us.new ]
  br i1 %lcmp.mod550.not, label %._crit_edge381.us, label %._crit_edge381.us.epilog-lcssa

._crit_edge381.us.epilog-lcssa:                   ; preds = %._crit_edge381.us.unr-lcssa
  %205 = load ptr, ptr %176, align 8, !tbaa !14
  %206 = getelementptr inbounds ptr, ptr %205, i64 %.5291383.us
  %207 = load ptr, ptr %206, align 8, !tbaa !15
  %208 = getelementptr double, ptr %207, i64 %.4379.us.unr
  %209 = getelementptr double, ptr %208, i64 %2
  %210 = load double, ptr %209, align 8, !tbaa !16
  %211 = load ptr, ptr %177, align 8, !tbaa !14
  %212 = getelementptr inbounds ptr, ptr %211, i64 %.4379.us.unr
  %213 = load ptr, ptr %212, align 8, !tbaa !15
  %214 = getelementptr inbounds double, ptr %213, i64 %2
  %215 = load double, ptr %214, align 8, !tbaa !16
  %216 = fsub double %210, %215
  store double %216, ptr %209, align 8, !tbaa !16
  br label %._crit_edge381.us

._crit_edge381.us:                                ; preds = %._crit_edge381.us.unr-lcssa, %._crit_edge381.us.epilog-lcssa
  %217 = add nuw nsw i64 %.5291383.us, 1
  %exitcond490.not = icmp eq i64 %217, %1
  br i1 %exitcond490.not, label %._crit_edge, label %.preheader355.us, !llvm.loop !31

218:                                              ; preds = %.lr.ph377, %218
  %.3285376 = phi i64 [ 0, %.lr.ph377 ], [ %230, %218 ]
  %219 = load ptr, ptr %174, align 8, !tbaa !14
  %220 = getelementptr inbounds ptr, ptr %219, i64 %.3285376
  %221 = load ptr, ptr %220, align 8, !tbaa !15
  %222 = getelementptr inbounds double, ptr %221, i64 %2
  %223 = load double, ptr %222, align 8, !tbaa !16
  %224 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %175, double noundef 1.000000e+00, ptr noundef %7)
  %225 = fdiv double %223, %224
  %226 = load ptr, ptr %174, align 8, !tbaa !14
  %227 = getelementptr inbounds ptr, ptr %226, i64 %.3285376
  %228 = load ptr, ptr %227, align 8, !tbaa !15
  %229 = getelementptr inbounds double, ptr %228, i64 %2
  store double %225, ptr %229, align 8, !tbaa !16
  %230 = add nuw nsw i64 %.3285376, 1
  %exitcond488.not = icmp eq i64 %230, %3
  br i1 %exitcond488.not, label %.preheader356, label %218, !llvm.loop !32

231:                                              ; preds = %76
  %232 = icmp eq i64 %4, 1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %232, ptr noundef nonnull @.str.160, ptr noundef %7)
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %10, i64 noundef %17, i64 noundef %17, ptr noundef %7)
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %12, i64 noundef %17, i64 noundef %3, ptr noundef %7)
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %13, i64 noundef %17, ptr noundef %7)
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %11, i64 noundef %17, i64 noundef %17, ptr noundef %7)
  %.not399 = icmp slt i64 %2, 0
  br i1 %.not399, label %.preheader350, label %.preheader351.lr.ph

.preheader351.lr.ph:                              ; preds = %231
  %233 = getelementptr inbounds i8, ptr %10, i64 72
  %234 = add nuw i64 %2, 1
  %xtraiter566 = and i64 %234, 3
  %235 = icmp ult i64 %2, 3
  %unroll_iter569 = and i64 %234, -4
  %lcmp.mod568.not = icmp eq i64 %xtraiter566, 0
  br label %.preheader351

.preheader351:                                    ; preds = %.preheader351.lr.ph, %._crit_edge398
  %.6292400 = phi i64 [ 0, %.preheader351.lr.ph ], [ %268, %._crit_edge398 ]
  br i1 %235, label %._crit_edge398.unr-lcssa, label %.preheader351.new

.preheader350:                                    ; preds = %._crit_edge398, %231
  %.not307.not412 = icmp sgt i64 %1, 0
  br i1 %.not307.not412, label %.preheader349.lr.ph, label %.preheader347

.preheader349.lr.ph:                              ; preds = %.preheader350
  %236 = getelementptr inbounds i8, ptr %0, i64 72
  %237 = getelementptr inbounds i8, ptr %13, i64 56
  %238 = getelementptr inbounds i8, ptr %10, i64 72
  %239 = add i64 %2, 1
  %xtraiter571 = and i64 %2, 1
  %240 = icmp eq i64 %2, 1
  %unroll_iter574 = and i64 %2, 9223372036854775806
  %lcmp.mod573.not = icmp eq i64 %xtraiter571, 0
  %241 = icmp eq i64 %2, 0
  %unroll_iter580 = and i64 %239, -2
  %242 = and i64 %2, 1
  %lcmp.mod579.not.not = icmp eq i64 %242, 0
  br label %.preheader349

.preheader351.new:                                ; preds = %.preheader351, %.preheader351.new
  %.5396 = phi i64 [ %262, %.preheader351.new ], [ 0, %.preheader351 ]
  %niter570 = phi i64 [ %niter570.next.3, %.preheader351.new ], [ 0, %.preheader351 ]
  %243 = load ptr, ptr %233, align 8, !tbaa !14
  %244 = getelementptr inbounds ptr, ptr %243, i64 %.6292400
  %245 = load ptr, ptr %244, align 8, !tbaa !15
  %246 = getelementptr inbounds double, ptr %245, i64 %.5396
  store double 0.000000e+00, ptr %246, align 8, !tbaa !16
  %247 = or disjoint i64 %.5396, 1
  %248 = load ptr, ptr %233, align 8, !tbaa !14
  %249 = getelementptr inbounds ptr, ptr %248, i64 %.6292400
  %250 = load ptr, ptr %249, align 8, !tbaa !15
  %251 = getelementptr inbounds double, ptr %250, i64 %247
  store double 0.000000e+00, ptr %251, align 8, !tbaa !16
  %252 = or disjoint i64 %.5396, 2
  %253 = load ptr, ptr %233, align 8, !tbaa !14
  %254 = getelementptr inbounds ptr, ptr %253, i64 %.6292400
  %255 = load ptr, ptr %254, align 8, !tbaa !15
  %256 = getelementptr inbounds double, ptr %255, i64 %252
  store double 0.000000e+00, ptr %256, align 8, !tbaa !16
  %257 = or disjoint i64 %.5396, 3
  %258 = load ptr, ptr %233, align 8, !tbaa !14
  %259 = getelementptr inbounds ptr, ptr %258, i64 %.6292400
  %260 = load ptr, ptr %259, align 8, !tbaa !15
  %261 = getelementptr inbounds double, ptr %260, i64 %257
  store double 0.000000e+00, ptr %261, align 8, !tbaa !16
  %262 = add nuw i64 %.5396, 4
  %niter570.next.3 = add i64 %niter570, 4
  %niter570.ncmp.3 = icmp eq i64 %niter570.next.3, %unroll_iter569
  br i1 %niter570.ncmp.3, label %._crit_edge398.unr-lcssa, label %.preheader351.new, !llvm.loop !33

._crit_edge398.unr-lcssa:                         ; preds = %.preheader351.new, %.preheader351
  %.5396.unr = phi i64 [ 0, %.preheader351 ], [ %262, %.preheader351.new ]
  br i1 %lcmp.mod568.not, label %._crit_edge398, label %.epil.preheader565

.epil.preheader565:                               ; preds = %._crit_edge398.unr-lcssa, %.epil.preheader565
  %.5396.epil = phi i64 [ %267, %.epil.preheader565 ], [ %.5396.unr, %._crit_edge398.unr-lcssa ]
  %epil.iter567 = phi i64 [ %epil.iter567.next, %.epil.preheader565 ], [ 0, %._crit_edge398.unr-lcssa ]
  %263 = load ptr, ptr %233, align 8, !tbaa !14
  %264 = getelementptr inbounds ptr, ptr %263, i64 %.6292400
  %265 = load ptr, ptr %264, align 8, !tbaa !15
  %266 = getelementptr inbounds double, ptr %265, i64 %.5396.epil
  store double 0.000000e+00, ptr %266, align 8, !tbaa !16
  %267 = add nuw i64 %.5396.epil, 1
  %epil.iter567.next = add i64 %epil.iter567, 1
  %epil.iter567.cmp.not = icmp eq i64 %epil.iter567.next, %xtraiter566
  br i1 %epil.iter567.cmp.not, label %._crit_edge398, label %.epil.preheader565, !llvm.loop !34

._crit_edge398:                                   ; preds = %.epil.preheader565, %._crit_edge398.unr-lcssa
  %268 = add nuw i64 %.6292400, 1
  %exitcond495.not = icmp eq i64 %.6292400, %2
  br i1 %exitcond495.not, label %.preheader350, label %.preheader351, !llvm.loop !35

.preheader349:                                    ; preds = %.preheader349.lr.ph, %._crit_edge411.split
  %.7293413 = phi i64 [ 0, %.preheader349.lr.ph ], [ %347, %._crit_edge411.split ]
  br i1 %15, label %.lr.ph403.preheader, label %._crit_edge404

.lr.ph403.preheader:                              ; preds = %.preheader349
  br i1 %240, label %._crit_edge404.loopexit.unr-lcssa, label %.lr.ph403

.preheader347:                                    ; preds = %._crit_edge411.split, %.preheader350
  %269 = getelementptr inbounds i8, ptr %10, i64 72
  %270 = getelementptr inbounds i8, ptr %11, i64 72
  %271 = getelementptr inbounds i8, ptr %12, i64 72
  %272 = getelementptr inbounds i8, ptr %0, i64 72
  %273 = getelementptr inbounds i8, ptr %13, i64 56
  %274 = getelementptr inbounds i8, ptr %6, i64 72
  %275 = add i64 %3, -1
  %276 = add i64 %2, -1
  %277 = add i64 %2, 1
  %.not = xor i1 %16, true
  %brmerge = or i1 %.not399, %.not
  %xtraiter583 = and i64 %3, 3
  %278 = icmp ult i64 %275, 3
  %unroll_iter586 = and i64 %3, -4
  %lcmp.mod585.not = icmp eq i64 %xtraiter583, 0
  %xtraiter588 = and i64 %2, 1
  %279 = icmp eq i64 %276, 0
  %unroll_iter591 = and i64 %2, 9223372036854775806
  %lcmp.mod590.not = icmp eq i64 %xtraiter588, 0
  %.not521 = xor i1 %16, true
  %brmerge522 = or i1 %.not399, %.not521
  %xtraiter594 = and i64 %277, 3
  %280 = icmp ult i64 %2, 3
  %unroll_iter598 = and i64 %277, -4
  %lcmp.mod596.not = icmp eq i64 %xtraiter594, 0
  %281 = icmp eq i64 %2, 0
  %unroll_iter603 = and i64 %277, -2
  %282 = and i64 %2, 1
  %lcmp.mod602.not.not = icmp eq i64 %282, 0
  %283 = icmp eq i64 %2, 0
  %unroll_iter609 = and i64 %277, -2
  %284 = and i64 %2, 1
  %lcmp.mod608.not.not = icmp eq i64 %284, 0
  %.not523 = xor i1 %16, true
  %brmerge524 = or i1 %.not399, %.not523
  %xtraiter612 = and i64 %3, 1
  %285 = icmp eq i64 %275, 0
  %unroll_iter615 = and i64 %3, -2
  %lcmp.mod614.not = icmp eq i64 %xtraiter612, 0
  br label %.preheader346

.lr.ph403:                                        ; preds = %.lr.ph403.preheader, %.lr.ph403
  %.6402 = phi i64 [ %301, %.lr.ph403 ], [ 0, %.lr.ph403.preheader ]
  %niter575 = phi i64 [ %niter575.next.1, %.lr.ph403 ], [ 0, %.lr.ph403.preheader ]
  %286 = load ptr, ptr %236, align 8, !tbaa !14
  %287 = getelementptr inbounds ptr, ptr %286, i64 %.7293413
  %288 = load ptr, ptr %287, align 8, !tbaa !15
  %289 = getelementptr inbounds double, ptr %288, i64 %.6402
  %290 = load double, ptr %289, align 8, !tbaa !16
  %291 = load ptr, ptr %237, align 8, !tbaa !14
  %292 = getelementptr inbounds double, ptr %291, i64 %.6402
  store double %290, ptr %292, align 8, !tbaa !16
  %293 = or disjoint i64 %.6402, 1
  %294 = load ptr, ptr %236, align 8, !tbaa !14
  %295 = getelementptr inbounds ptr, ptr %294, i64 %.7293413
  %296 = load ptr, ptr %295, align 8, !tbaa !15
  %297 = getelementptr inbounds double, ptr %296, i64 %293
  %298 = load double, ptr %297, align 8, !tbaa !16
  %299 = load ptr, ptr %237, align 8, !tbaa !14
  %300 = getelementptr inbounds double, ptr %299, i64 %293
  store double %298, ptr %300, align 8, !tbaa !16
  %301 = add nuw nsw i64 %.6402, 2
  %niter575.next.1 = add i64 %niter575, 2
  %niter575.ncmp.1 = icmp eq i64 %niter575.next.1, %unroll_iter574
  br i1 %niter575.ncmp.1, label %._crit_edge404.loopexit.unr-lcssa, label %.lr.ph403, !llvm.loop !36

._crit_edge404.loopexit.unr-lcssa:                ; preds = %.lr.ph403, %.lr.ph403.preheader
  %.6402.unr = phi i64 [ 0, %.lr.ph403.preheader ], [ %301, %.lr.ph403 ]
  br i1 %lcmp.mod573.not, label %._crit_edge404, label %.lr.ph403.epil

.lr.ph403.epil:                                   ; preds = %._crit_edge404.loopexit.unr-lcssa
  %302 = load ptr, ptr %236, align 8, !tbaa !14
  %303 = getelementptr inbounds ptr, ptr %302, i64 %.7293413
  %304 = load ptr, ptr %303, align 8, !tbaa !15
  %305 = getelementptr inbounds double, ptr %304, i64 %.6402.unr
  %306 = load double, ptr %305, align 8, !tbaa !16
  %307 = load ptr, ptr %237, align 8, !tbaa !14
  %308 = getelementptr inbounds double, ptr %307, i64 %.6402.unr
  store double %306, ptr %308, align 8, !tbaa !16
  br label %._crit_edge404

._crit_edge404:                                   ; preds = %.lr.ph403.epil, %._crit_edge404.loopexit.unr-lcssa, %.preheader349
  %309 = load ptr, ptr %237, align 8, !tbaa !14
  %310 = getelementptr inbounds double, ptr %309, i64 %2
  store double 1.000000e+00, ptr %310, align 8, !tbaa !16
  br i1 %.not399, label %._crit_edge411.split, label %.preheader348

.preheader348:                                    ; preds = %._crit_edge404, %._crit_edge408
  %.0280410 = phi i64 [ %346, %._crit_edge408 ], [ 0, %._crit_edge404 ]
  br i1 %241, label %._crit_edge408.unr-lcssa, label %.preheader348.new

.preheader348.new:                                ; preds = %.preheader348, %.preheader348.new
  %.0279406 = phi i64 [ %334, %.preheader348.new ], [ 0, %.preheader348 ]
  %niter581 = phi i64 [ %niter581.next.1, %.preheader348.new ], [ 0, %.preheader348 ]
  %311 = load ptr, ptr %238, align 8, !tbaa !14
  %312 = getelementptr inbounds ptr, ptr %311, i64 %.0280410
  %313 = load ptr, ptr %312, align 8, !tbaa !15
  %314 = getelementptr inbounds double, ptr %313, i64 %.0279406
  %315 = load double, ptr %314, align 8, !tbaa !16
  %316 = load ptr, ptr %237, align 8, !tbaa !14
  %317 = getelementptr inbounds double, ptr %316, i64 %.0280410
  %318 = load double, ptr %317, align 8, !tbaa !16
  %319 = getelementptr inbounds double, ptr %316, i64 %.0279406
  %320 = load double, ptr %319, align 8, !tbaa !16
  %321 = call double @llvm.fmuladd.f64(double %318, double %320, double %315)
  store double %321, ptr %314, align 8, !tbaa !16
  %322 = or disjoint i64 %.0279406, 1
  %323 = load ptr, ptr %238, align 8, !tbaa !14
  %324 = getelementptr inbounds ptr, ptr %323, i64 %.0280410
  %325 = load ptr, ptr %324, align 8, !tbaa !15
  %326 = getelementptr inbounds double, ptr %325, i64 %322
  %327 = load double, ptr %326, align 8, !tbaa !16
  %328 = load ptr, ptr %237, align 8, !tbaa !14
  %329 = getelementptr inbounds double, ptr %328, i64 %.0280410
  %330 = load double, ptr %329, align 8, !tbaa !16
  %331 = getelementptr inbounds double, ptr %328, i64 %322
  %332 = load double, ptr %331, align 8, !tbaa !16
  %333 = call double @llvm.fmuladd.f64(double %330, double %332, double %327)
  store double %333, ptr %326, align 8, !tbaa !16
  %334 = add nuw i64 %.0279406, 2
  %niter581.next.1 = add i64 %niter581, 2
  %niter581.ncmp.1 = icmp eq i64 %niter581.next.1, %unroll_iter580
  br i1 %niter581.ncmp.1, label %._crit_edge408.unr-lcssa, label %.preheader348.new, !llvm.loop !37

._crit_edge408.unr-lcssa:                         ; preds = %.preheader348.new, %.preheader348
  %.0279406.unr = phi i64 [ 0, %.preheader348 ], [ %334, %.preheader348.new ]
  br i1 %lcmp.mod579.not.not, label %._crit_edge408.epilog-lcssa, label %._crit_edge408

._crit_edge408.epilog-lcssa:                      ; preds = %._crit_edge408.unr-lcssa
  %335 = load ptr, ptr %238, align 8, !tbaa !14
  %336 = getelementptr inbounds ptr, ptr %335, i64 %.0280410
  %337 = load ptr, ptr %336, align 8, !tbaa !15
  %338 = getelementptr inbounds double, ptr %337, i64 %.0279406.unr
  %339 = load double, ptr %338, align 8, !tbaa !16
  %340 = load ptr, ptr %237, align 8, !tbaa !14
  %341 = getelementptr inbounds double, ptr %340, i64 %.0280410
  %342 = load double, ptr %341, align 8, !tbaa !16
  %343 = getelementptr inbounds double, ptr %340, i64 %.0279406.unr
  %344 = load double, ptr %343, align 8, !tbaa !16
  %345 = call double @llvm.fmuladd.f64(double %342, double %344, double %339)
  store double %345, ptr %338, align 8, !tbaa !16
  br label %._crit_edge408

._crit_edge408:                                   ; preds = %._crit_edge408.unr-lcssa, %._crit_edge408.epilog-lcssa
  %346 = add nuw i64 %.0280410, 1
  %exitcond498.not = icmp eq i64 %.0280410, %2
  br i1 %exitcond498.not, label %._crit_edge411.split, label %.preheader348, !llvm.loop !38

._crit_edge411.split:                             ; preds = %._crit_edge408, %._crit_edge404
  %347 = add nuw nsw i64 %.7293413, 1
  %exitcond499.not = icmp eq i64 %347, %1
  br i1 %exitcond499.not, label %.preheader347, label %.preheader349, !llvm.loop !39

.preheader346:                                    ; preds = %.preheader347, %._crit_edge454
  %.0456 = phi i64 [ 1, %.preheader347 ], [ %559, %._crit_edge454 ]
  %.0276455 = phi double [ 0.000000e+00, %.preheader347 ], [ %.1, %._crit_edge454 ]
  br i1 %brmerge, label %.preheader345, label %.preheader343.us

.preheader343.us:                                 ; preds = %.preheader346, %._crit_edge417.us
  %.8294419.us = phi i64 [ %373, %._crit_edge417.us ], [ 0, %.preheader346 ]
  br i1 %278, label %._crit_edge417.us.unr-lcssa, label %.preheader343.us.new

.preheader343.us.new:                             ; preds = %.preheader343.us, %.preheader343.us.new
  %.7415.us = phi i64 [ %367, %.preheader343.us.new ], [ 0, %.preheader343.us ]
  %niter587 = phi i64 [ %niter587.next.3, %.preheader343.us.new ], [ 0, %.preheader343.us ]
  %348 = load ptr, ptr %271, align 8, !tbaa !14
  %349 = getelementptr inbounds ptr, ptr %348, i64 %.8294419.us
  %350 = load ptr, ptr %349, align 8, !tbaa !15
  %351 = getelementptr inbounds double, ptr %350, i64 %.7415.us
  store double 0.000000e+00, ptr %351, align 8, !tbaa !16
  %352 = or disjoint i64 %.7415.us, 1
  %353 = load ptr, ptr %271, align 8, !tbaa !14
  %354 = getelementptr inbounds ptr, ptr %353, i64 %.8294419.us
  %355 = load ptr, ptr %354, align 8, !tbaa !15
  %356 = getelementptr inbounds double, ptr %355, i64 %352
  store double 0.000000e+00, ptr %356, align 8, !tbaa !16
  %357 = or disjoint i64 %.7415.us, 2
  %358 = load ptr, ptr %271, align 8, !tbaa !14
  %359 = getelementptr inbounds ptr, ptr %358, i64 %.8294419.us
  %360 = load ptr, ptr %359, align 8, !tbaa !15
  %361 = getelementptr inbounds double, ptr %360, i64 %357
  store double 0.000000e+00, ptr %361, align 8, !tbaa !16
  %362 = or disjoint i64 %.7415.us, 3
  %363 = load ptr, ptr %271, align 8, !tbaa !14
  %364 = getelementptr inbounds ptr, ptr %363, i64 %.8294419.us
  %365 = load ptr, ptr %364, align 8, !tbaa !15
  %366 = getelementptr inbounds double, ptr %365, i64 %362
  store double 0.000000e+00, ptr %366, align 8, !tbaa !16
  %367 = add nuw nsw i64 %.7415.us, 4
  %niter587.next.3 = add i64 %niter587, 4
  %niter587.ncmp.3 = icmp eq i64 %niter587.next.3, %unroll_iter586
  br i1 %niter587.ncmp.3, label %._crit_edge417.us.unr-lcssa, label %.preheader343.us.new, !llvm.loop !40

._crit_edge417.us.unr-lcssa:                      ; preds = %.preheader343.us.new, %.preheader343.us
  %.7415.us.unr = phi i64 [ 0, %.preheader343.us ], [ %367, %.preheader343.us.new ]
  br i1 %lcmp.mod585.not, label %._crit_edge417.us, label %.epil.preheader582

.epil.preheader582:                               ; preds = %._crit_edge417.us.unr-lcssa, %.epil.preheader582
  %.7415.us.epil = phi i64 [ %372, %.epil.preheader582 ], [ %.7415.us.unr, %._crit_edge417.us.unr-lcssa ]
  %epil.iter584 = phi i64 [ %epil.iter584.next, %.epil.preheader582 ], [ 0, %._crit_edge417.us.unr-lcssa ]
  %368 = load ptr, ptr %271, align 8, !tbaa !14
  %369 = getelementptr inbounds ptr, ptr %368, i64 %.8294419.us
  %370 = load ptr, ptr %369, align 8, !tbaa !15
  %371 = getelementptr inbounds double, ptr %370, i64 %.7415.us.epil
  store double 0.000000e+00, ptr %371, align 8, !tbaa !16
  %372 = add nuw nsw i64 %.7415.us.epil, 1
  %epil.iter584.next = add i64 %epil.iter584, 1
  %epil.iter584.cmp.not = icmp eq i64 %epil.iter584.next, %xtraiter583
  br i1 %epil.iter584.cmp.not, label %._crit_edge417.us, label %.epil.preheader582, !llvm.loop !41

._crit_edge417.us:                                ; preds = %.epil.preheader582, %._crit_edge417.us.unr-lcssa
  %373 = add nuw i64 %.8294419.us, 1
  %exitcond501.not = icmp eq i64 %.8294419.us, %2
  br i1 %exitcond501.not, label %.preheader345, label %.preheader343.us, !llvm.loop !42

.preheader338:                                    ; preds = %._crit_edge454
  br i1 %.not307.not412, label %.preheader337.preheader, label %._crit_edge

.preheader337.preheader:                          ; preds = %.preheader338
  %xtraiter617 = and i64 %2, 1
  %374 = icmp eq i64 %276, 0
  %unroll_iter620 = and i64 %2, 9223372036854775806
  %lcmp.mod619.not = icmp eq i64 %xtraiter617, 0
  %.not525 = xor i1 %16, true
  %brmerge526 = or i1 %.not399, %.not525
  %xtraiter623 = and i64 %277, 3
  %375 = icmp ult i64 %2, 3
  %unroll_iter627 = and i64 %277, -4
  %lcmp.mod625.not = icmp eq i64 %xtraiter623, 0
  br label %.preheader337

.preheader345:                                    ; preds = %._crit_edge417.us, %.preheader346
  br i1 %.not307.not412, label %.preheader342, label %.preheader344.preheader

.preheader342:                                    ; preds = %.preheader345, %._crit_edge437
  %.9295439 = phi i64 [ %476, %._crit_edge437 ], [ 0, %.preheader345 ]
  br i1 %15, label %.lr.ph422.preheader, label %._crit_edge423

.lr.ph422.preheader:                              ; preds = %.preheader342
  br i1 %279, label %._crit_edge423.loopexit.unr-lcssa, label %.lr.ph422

.lr.ph422:                                        ; preds = %.lr.ph422.preheader, %.lr.ph422
  %.8421 = phi i64 [ %391, %.lr.ph422 ], [ 0, %.lr.ph422.preheader ]
  %niter592 = phi i64 [ %niter592.next.1, %.lr.ph422 ], [ 0, %.lr.ph422.preheader ]
  %376 = load ptr, ptr %272, align 8, !tbaa !14
  %377 = getelementptr inbounds ptr, ptr %376, i64 %.9295439
  %378 = load ptr, ptr %377, align 8, !tbaa !15
  %379 = getelementptr inbounds double, ptr %378, i64 %.8421
  %380 = load double, ptr %379, align 8, !tbaa !16
  %381 = load ptr, ptr %273, align 8, !tbaa !14
  %382 = getelementptr inbounds double, ptr %381, i64 %.8421
  store double %380, ptr %382, align 8, !tbaa !16
  %383 = or disjoint i64 %.8421, 1
  %384 = load ptr, ptr %272, align 8, !tbaa !14
  %385 = getelementptr inbounds ptr, ptr %384, i64 %.9295439
  %386 = load ptr, ptr %385, align 8, !tbaa !15
  %387 = getelementptr inbounds double, ptr %386, i64 %383
  %388 = load double, ptr %387, align 8, !tbaa !16
  %389 = load ptr, ptr %273, align 8, !tbaa !14
  %390 = getelementptr inbounds double, ptr %389, i64 %383
  store double %388, ptr %390, align 8, !tbaa !16
  %391 = add nuw nsw i64 %.8421, 2
  %niter592.next.1 = add i64 %niter592, 2
  %niter592.ncmp.1 = icmp eq i64 %niter592.next.1, %unroll_iter591
  br i1 %niter592.ncmp.1, label %._crit_edge423.loopexit.unr-lcssa, label %.lr.ph422, !llvm.loop !43

._crit_edge423.loopexit.unr-lcssa:                ; preds = %.lr.ph422, %.lr.ph422.preheader
  %.8421.unr = phi i64 [ 0, %.lr.ph422.preheader ], [ %391, %.lr.ph422 ]
  br i1 %lcmp.mod590.not, label %._crit_edge423, label %.lr.ph422.epil

.lr.ph422.epil:                                   ; preds = %._crit_edge423.loopexit.unr-lcssa
  %392 = load ptr, ptr %272, align 8, !tbaa !14
  %393 = getelementptr inbounds ptr, ptr %392, i64 %.9295439
  %394 = load ptr, ptr %393, align 8, !tbaa !15
  %395 = getelementptr inbounds double, ptr %394, i64 %.8421.unr
  %396 = load double, ptr %395, align 8, !tbaa !16
  %397 = load ptr, ptr %273, align 8, !tbaa !14
  %398 = getelementptr inbounds double, ptr %397, i64 %.8421.unr
  store double %396, ptr %398, align 8, !tbaa !16
  br label %._crit_edge423

._crit_edge423:                                   ; preds = %.lr.ph422.epil, %._crit_edge423.loopexit.unr-lcssa, %.preheader342
  %399 = load ptr, ptr %273, align 8, !tbaa !14
  %400 = getelementptr inbounds double, ptr %399, i64 %2
  store double 1.000000e+00, ptr %400, align 8, !tbaa !16
  br i1 %brmerge522, label %._crit_edge437, label %.lr.ph428

.lr.ph428:                                        ; preds = %._crit_edge423, %._crit_edge432
  %.9434 = phi i64 [ %475, %._crit_edge432 ], [ 0, %._crit_edge423 ]
  %401 = load ptr, ptr %272, align 8, !tbaa !14
  %402 = getelementptr inbounds ptr, ptr %401, i64 %.9295439
  %403 = load ptr, ptr %402, align 8, !tbaa !15
  %404 = getelementptr double, ptr %403, i64 %.9434
  %405 = getelementptr double, ptr %404, i64 %2
  %406 = load double, ptr %405, align 8, !tbaa !16
  %407 = load ptr, ptr %273, align 8, !tbaa !14
  %408 = load ptr, ptr %274, align 8, !tbaa !14
  %409 = getelementptr inbounds ptr, ptr %408, i64 %.9434
  %410 = load ptr, ptr %409, align 8, !tbaa !15
  br i1 %280, label %.preheader340.preheader.unr-lcssa, label %.lr.ph428.new

.lr.ph428.new:                                    ; preds = %.lr.ph428, %.lr.ph428.new
  %.0277426 = phi double [ %437, %.lr.ph428.new ], [ %406, %.lr.ph428 ]
  %.1281425 = phi i64 [ %438, %.lr.ph428.new ], [ 0, %.lr.ph428 ]
  %niter599 = phi i64 [ %niter599.next.3, %.lr.ph428.new ], [ 0, %.lr.ph428 ]
  %411 = getelementptr inbounds double, ptr %407, i64 %.1281425
  %412 = load double, ptr %411, align 8, !tbaa !16
  %413 = getelementptr inbounds double, ptr %410, i64 %.1281425
  %414 = load double, ptr %413, align 8, !tbaa !16
  %415 = fneg double %412
  %416 = call double @llvm.fmuladd.f64(double %415, double %414, double %.0277426)
  %417 = or disjoint i64 %.1281425, 1
  %418 = getelementptr inbounds double, ptr %407, i64 %417
  %419 = load double, ptr %418, align 8, !tbaa !16
  %420 = getelementptr inbounds double, ptr %410, i64 %417
  %421 = load double, ptr %420, align 8, !tbaa !16
  %422 = fneg double %419
  %423 = call double @llvm.fmuladd.f64(double %422, double %421, double %416)
  %424 = or disjoint i64 %.1281425, 2
  %425 = getelementptr inbounds double, ptr %407, i64 %424
  %426 = load double, ptr %425, align 8, !tbaa !16
  %427 = getelementptr inbounds double, ptr %410, i64 %424
  %428 = load double, ptr %427, align 8, !tbaa !16
  %429 = fneg double %426
  %430 = call double @llvm.fmuladd.f64(double %429, double %428, double %423)
  %431 = or disjoint i64 %.1281425, 3
  %432 = getelementptr inbounds double, ptr %407, i64 %431
  %433 = load double, ptr %432, align 8, !tbaa !16
  %434 = getelementptr inbounds double, ptr %410, i64 %431
  %435 = load double, ptr %434, align 8, !tbaa !16
  %436 = fneg double %433
  %437 = call double @llvm.fmuladd.f64(double %436, double %435, double %430)
  %438 = add nuw i64 %.1281425, 4
  %niter599.next.3 = add i64 %niter599, 4
  %niter599.ncmp.3 = icmp eq i64 %niter599.next.3, %unroll_iter598
  br i1 %niter599.ncmp.3, label %.preheader340.preheader.unr-lcssa, label %.lr.ph428.new, !llvm.loop !44

.preheader340.preheader.unr-lcssa:                ; preds = %.lr.ph428.new, %.lr.ph428
  %.lcssa531.ph = phi double [ poison, %.lr.ph428 ], [ %437, %.lr.ph428.new ]
  %.0277426.unr = phi double [ %406, %.lr.ph428 ], [ %437, %.lr.ph428.new ]
  %.1281425.unr = phi i64 [ 0, %.lr.ph428 ], [ %438, %.lr.ph428.new ]
  br i1 %lcmp.mod596.not, label %.preheader340.preheader, label %.epil.preheader593

.epil.preheader593:                               ; preds = %.preheader340.preheader.unr-lcssa, %.epil.preheader593
  %.0277426.epil = phi double [ %444, %.epil.preheader593 ], [ %.0277426.unr, %.preheader340.preheader.unr-lcssa ]
  %.1281425.epil = phi i64 [ %445, %.epil.preheader593 ], [ %.1281425.unr, %.preheader340.preheader.unr-lcssa ]
  %epil.iter595 = phi i64 [ %epil.iter595.next, %.epil.preheader593 ], [ 0, %.preheader340.preheader.unr-lcssa ]
  %439 = getelementptr inbounds double, ptr %407, i64 %.1281425.epil
  %440 = load double, ptr %439, align 8, !tbaa !16
  %441 = getelementptr inbounds double, ptr %410, i64 %.1281425.epil
  %442 = load double, ptr %441, align 8, !tbaa !16
  %443 = fneg double %440
  %444 = call double @llvm.fmuladd.f64(double %443, double %442, double %.0277426.epil)
  %445 = add nuw i64 %.1281425.epil, 1
  %epil.iter595.next = add i64 %epil.iter595, 1
  %epil.iter595.cmp.not = icmp eq i64 %epil.iter595.next, %xtraiter594
  br i1 %epil.iter595.cmp.not, label %.preheader340.preheader, label %.epil.preheader593, !llvm.loop !45

.preheader340.preheader:                          ; preds = %.epil.preheader593, %.preheader340.preheader.unr-lcssa
  %.lcssa531 = phi double [ %.lcssa531.ph, %.preheader340.preheader.unr-lcssa ], [ %444, %.epil.preheader593 ]
  br i1 %281, label %._crit_edge432.unr-lcssa, label %.preheader340

.preheader340:                                    ; preds = %.preheader340.preheader, %.preheader340
  %.2430 = phi i64 [ %465, %.preheader340 ], [ 0, %.preheader340.preheader ]
  %niter604 = phi i64 [ %niter604.next.1, %.preheader340 ], [ 0, %.preheader340.preheader ]
  %446 = load ptr, ptr %271, align 8, !tbaa !14
  %447 = getelementptr inbounds ptr, ptr %446, i64 %.2430
  %448 = load ptr, ptr %447, align 8, !tbaa !15
  %449 = getelementptr inbounds double, ptr %448, i64 %.9434
  %450 = load double, ptr %449, align 8, !tbaa !16
  %451 = load ptr, ptr %273, align 8, !tbaa !14
  %452 = getelementptr inbounds double, ptr %451, i64 %.2430
  %453 = load double, ptr %452, align 8, !tbaa !16
  %454 = call double @llvm.fmuladd.f64(double %.lcssa531, double %453, double %450)
  store double %454, ptr %449, align 8, !tbaa !16
  %455 = or disjoint i64 %.2430, 1
  %456 = load ptr, ptr %271, align 8, !tbaa !14
  %457 = getelementptr inbounds ptr, ptr %456, i64 %455
  %458 = load ptr, ptr %457, align 8, !tbaa !15
  %459 = getelementptr inbounds double, ptr %458, i64 %.9434
  %460 = load double, ptr %459, align 8, !tbaa !16
  %461 = load ptr, ptr %273, align 8, !tbaa !14
  %462 = getelementptr inbounds double, ptr %461, i64 %455
  %463 = load double, ptr %462, align 8, !tbaa !16
  %464 = call double @llvm.fmuladd.f64(double %.lcssa531, double %463, double %460)
  store double %464, ptr %459, align 8, !tbaa !16
  %465 = add nuw i64 %.2430, 2
  %niter604.next.1 = add i64 %niter604, 2
  %niter604.ncmp.1 = icmp eq i64 %niter604.next.1, %unroll_iter603
  br i1 %niter604.ncmp.1, label %._crit_edge432.unr-lcssa, label %.preheader340, !llvm.loop !46

._crit_edge432.unr-lcssa:                         ; preds = %.preheader340, %.preheader340.preheader
  %.2430.unr = phi i64 [ 0, %.preheader340.preheader ], [ %465, %.preheader340 ]
  br i1 %lcmp.mod602.not.not, label %.preheader340.epil, label %._crit_edge432

.preheader340.epil:                               ; preds = %._crit_edge432.unr-lcssa
  %466 = load ptr, ptr %271, align 8, !tbaa !14
  %467 = getelementptr inbounds ptr, ptr %466, i64 %.2430.unr
  %468 = load ptr, ptr %467, align 8, !tbaa !15
  %469 = getelementptr inbounds double, ptr %468, i64 %.9434
  %470 = load double, ptr %469, align 8, !tbaa !16
  %471 = load ptr, ptr %273, align 8, !tbaa !14
  %472 = getelementptr inbounds double, ptr %471, i64 %.2430.unr
  %473 = load double, ptr %472, align 8, !tbaa !16
  %474 = call double @llvm.fmuladd.f64(double %.lcssa531, double %473, double %470)
  store double %474, ptr %469, align 8, !tbaa !16
  br label %._crit_edge432

._crit_edge432:                                   ; preds = %._crit_edge432.unr-lcssa, %.preheader340.epil
  %475 = add nuw nsw i64 %.9434, 1
  %exitcond505.not = icmp eq i64 %475, %3
  br i1 %exitcond505.not, label %._crit_edge437, label %.lr.ph428, !llvm.loop !47

._crit_edge437:                                   ; preds = %._crit_edge432, %._crit_edge423
  %476 = add nuw nsw i64 %.9295439, 1
  %exitcond506.not = icmp eq i64 %476, %1
  br i1 %exitcond506.not, label %.preheader344.preheader, label %.preheader342, !llvm.loop !48

.preheader344.preheader:                          ; preds = %._crit_edge437, %.preheader345
  br label %.preheader344

.preheader344:                                    ; preds = %.preheader344.preheader, %519
  %.1 = phi double [ %521, %519 ], [ %.0276455, %.preheader344.preheader ]
  br i1 %.not399, label %._crit_edge447.split, label %.preheader339

.preheader339:                                    ; preds = %.preheader344, %._crit_edge444
  %.10296446 = phi i64 [ %517, %._crit_edge444 ], [ 0, %.preheader344 ]
  br i1 %283, label %._crit_edge444.unr-lcssa, label %.preheader339.new

.preheader339.new:                                ; preds = %.preheader339, %.preheader339.new
  %.10442 = phi i64 [ %496, %.preheader339.new ], [ 0, %.preheader339 ]
  %niter610 = phi i64 [ %niter610.next.1, %.preheader339.new ], [ 0, %.preheader339 ]
  %477 = load ptr, ptr %269, align 8, !tbaa !14
  %478 = getelementptr inbounds ptr, ptr %477, i64 %.10296446
  %479 = load ptr, ptr %478, align 8, !tbaa !15
  %480 = getelementptr inbounds double, ptr %479, i64 %.10442
  %481 = load double, ptr %480, align 8, !tbaa !16
  %482 = load ptr, ptr %270, align 8, !tbaa !14
  %483 = getelementptr inbounds ptr, ptr %482, i64 %.10296446
  %484 = load ptr, ptr %483, align 8, !tbaa !15
  %485 = getelementptr inbounds double, ptr %484, i64 %.10442
  store double %481, ptr %485, align 8, !tbaa !16
  %486 = or disjoint i64 %.10442, 1
  %487 = load ptr, ptr %269, align 8, !tbaa !14
  %488 = getelementptr inbounds ptr, ptr %487, i64 %.10296446
  %489 = load ptr, ptr %488, align 8, !tbaa !15
  %490 = getelementptr inbounds double, ptr %489, i64 %486
  %491 = load double, ptr %490, align 8, !tbaa !16
  %492 = load ptr, ptr %270, align 8, !tbaa !14
  %493 = getelementptr inbounds ptr, ptr %492, i64 %.10296446
  %494 = load ptr, ptr %493, align 8, !tbaa !15
  %495 = getelementptr inbounds double, ptr %494, i64 %486
  store double %491, ptr %495, align 8, !tbaa !16
  %496 = add nuw i64 %.10442, 2
  %niter610.next.1 = add i64 %niter610, 2
  %niter610.ncmp.1 = icmp eq i64 %niter610.next.1, %unroll_iter609
  br i1 %niter610.ncmp.1, label %._crit_edge444.unr-lcssa, label %.preheader339.new, !llvm.loop !49

._crit_edge444.unr-lcssa:                         ; preds = %.preheader339.new, %.preheader339
  %.10442.unr = phi i64 [ 0, %.preheader339 ], [ %496, %.preheader339.new ]
  br i1 %lcmp.mod608.not.not, label %._crit_edge444.epilog-lcssa, label %._crit_edge444

._crit_edge444.epilog-lcssa:                      ; preds = %._crit_edge444.unr-lcssa
  %497 = load ptr, ptr %269, align 8, !tbaa !14
  %498 = getelementptr inbounds ptr, ptr %497, i64 %.10296446
  %499 = load ptr, ptr %498, align 8, !tbaa !15
  %500 = getelementptr inbounds double, ptr %499, i64 %.10442.unr
  %501 = load double, ptr %500, align 8, !tbaa !16
  %502 = load ptr, ptr %270, align 8, !tbaa !14
  %503 = getelementptr inbounds ptr, ptr %502, i64 %.10296446
  %504 = load ptr, ptr %503, align 8, !tbaa !15
  %505 = getelementptr inbounds double, ptr %504, i64 %.10442.unr
  store double %501, ptr %505, align 8, !tbaa !16
  br label %._crit_edge444

._crit_edge444:                                   ; preds = %._crit_edge444.unr-lcssa, %._crit_edge444.epilog-lcssa
  %506 = load ptr, ptr %270, align 8, !tbaa !14
  %507 = getelementptr inbounds ptr, ptr %506, i64 %.10296446
  %508 = load ptr, ptr %507, align 8, !tbaa !15
  %509 = getelementptr inbounds double, ptr %508, i64 %.10296446
  %510 = load double, ptr %509, align 8, !tbaa !16
  %511 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %510, double noundef 1.000000e+00, ptr noundef %7)
  %512 = call double @llvm.fmuladd.f64(double %.1, double %511, double %510)
  %513 = load ptr, ptr %270, align 8, !tbaa !14
  %514 = getelementptr inbounds ptr, ptr %513, i64 %.10296446
  %515 = load ptr, ptr %514, align 8, !tbaa !15
  %516 = getelementptr inbounds double, ptr %515, i64 %.10296446
  store double %512, ptr %516, align 8, !tbaa !16
  %517 = add nuw i64 %.10296446, 1
  %exitcond508.not = icmp eq i64 %.10296446, %2
  br i1 %exitcond508.not, label %._crit_edge447.split, label %.preheader339, !llvm.loop !50

._crit_edge447.split:                             ; preds = %._crit_edge444, %.preheader344
  %518 = call noundef zeroext i1 @_ZN11alglib_impl17spdmatrixcholeskyEPNS_9ae_matrixElbPNS_8ae_stateE(ptr noundef nonnull %11, i64 noundef %17, i1 noundef zeroext true, ptr noundef %7)
  br i1 %518, label %522, label %519

519:                                              ; preds = %._crit_edge447.split
  %520 = fmul double %.1, 1.000000e+01
  %521 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %520, double noundef 0x3D719799812DEA11, ptr noundef %7)
  br label %.preheader344, !llvm.loop !51

522:                                              ; preds = %._crit_edge447.split
  call void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef %17, i64 noundef %3, ptr noundef nonnull %11, i64 noundef 0, i64 noundef 0, i1 noundef zeroext true, i1 noundef zeroext false, i64 noundef 1, ptr noundef nonnull %12, i64 noundef 0, i64 noundef 0, ptr noundef %7)
  call void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef %17, i64 noundef %3, ptr noundef nonnull %11, i64 noundef 0, i64 noundef 0, i1 noundef zeroext true, i1 noundef zeroext false, i64 noundef 0, ptr noundef nonnull %12, i64 noundef 0, i64 noundef 0, ptr noundef %7)
  br i1 %brmerge524, label %._crit_edge454, label %.preheader341.us

.preheader341.us:                                 ; preds = %522, %._crit_edge451.us
  %.11297453.us = phi i64 [ %558, %._crit_edge451.us ], [ 0, %522 ]
  br i1 %285, label %._crit_edge451.us.unr-lcssa, label %.preheader341.us.new

.preheader341.us.new:                             ; preds = %.preheader341.us, %.preheader341.us.new
  %.11449.us = phi i64 [ %546, %.preheader341.us.new ], [ 0, %.preheader341.us ]
  %niter616 = phi i64 [ %niter616.next.1, %.preheader341.us.new ], [ 0, %.preheader341.us ]
  %523 = load ptr, ptr %274, align 8, !tbaa !14
  %524 = getelementptr inbounds ptr, ptr %523, i64 %.11449.us
  %525 = load ptr, ptr %524, align 8, !tbaa !15
  %526 = getelementptr inbounds double, ptr %525, i64 %.11297453.us
  %527 = load double, ptr %526, align 8, !tbaa !16
  %528 = load ptr, ptr %271, align 8, !tbaa !14
  %529 = getelementptr inbounds ptr, ptr %528, i64 %.11297453.us
  %530 = load ptr, ptr %529, align 8, !tbaa !15
  %531 = getelementptr inbounds double, ptr %530, i64 %.11449.us
  %532 = load double, ptr %531, align 8, !tbaa !16
  %533 = fadd double %527, %532
  store double %533, ptr %526, align 8, !tbaa !16
  %534 = or disjoint i64 %.11449.us, 1
  %535 = load ptr, ptr %274, align 8, !tbaa !14
  %536 = getelementptr inbounds ptr, ptr %535, i64 %534
  %537 = load ptr, ptr %536, align 8, !tbaa !15
  %538 = getelementptr inbounds double, ptr %537, i64 %.11297453.us
  %539 = load double, ptr %538, align 8, !tbaa !16
  %540 = load ptr, ptr %271, align 8, !tbaa !14
  %541 = getelementptr inbounds ptr, ptr %540, i64 %.11297453.us
  %542 = load ptr, ptr %541, align 8, !tbaa !15
  %543 = getelementptr inbounds double, ptr %542, i64 %534
  %544 = load double, ptr %543, align 8, !tbaa !16
  %545 = fadd double %539, %544
  store double %545, ptr %538, align 8, !tbaa !16
  %546 = add nuw nsw i64 %.11449.us, 2
  %niter616.next.1 = add i64 %niter616, 2
  %niter616.ncmp.1 = icmp eq i64 %niter616.next.1, %unroll_iter615
  br i1 %niter616.ncmp.1, label %._crit_edge451.us.unr-lcssa, label %.preheader341.us.new, !llvm.loop !52

._crit_edge451.us.unr-lcssa:                      ; preds = %.preheader341.us.new, %.preheader341.us
  %.11449.us.unr = phi i64 [ 0, %.preheader341.us ], [ %546, %.preheader341.us.new ]
  br i1 %lcmp.mod614.not, label %._crit_edge451.us, label %._crit_edge451.us.epilog-lcssa

._crit_edge451.us.epilog-lcssa:                   ; preds = %._crit_edge451.us.unr-lcssa
  %547 = load ptr, ptr %274, align 8, !tbaa !14
  %548 = getelementptr inbounds ptr, ptr %547, i64 %.11449.us.unr
  %549 = load ptr, ptr %548, align 8, !tbaa !15
  %550 = getelementptr inbounds double, ptr %549, i64 %.11297453.us
  %551 = load double, ptr %550, align 8, !tbaa !16
  %552 = load ptr, ptr %271, align 8, !tbaa !14
  %553 = getelementptr inbounds ptr, ptr %552, i64 %.11297453.us
  %554 = load ptr, ptr %553, align 8, !tbaa !15
  %555 = getelementptr inbounds double, ptr %554, i64 %.11449.us.unr
  %556 = load double, ptr %555, align 8, !tbaa !16
  %557 = fadd double %551, %556
  store double %557, ptr %550, align 8, !tbaa !16
  br label %._crit_edge451.us

._crit_edge451.us:                                ; preds = %._crit_edge451.us.unr-lcssa, %._crit_edge451.us.epilog-lcssa
  %558 = add nuw i64 %.11297453.us, 1
  %exitcond510.not = icmp eq i64 %.11297453.us, %2
  br i1 %exitcond510.not, label %._crit_edge454, label %.preheader341.us, !llvm.loop !53

._crit_edge454:                                   ; preds = %._crit_edge451.us, %522
  %559 = add nuw nsw i64 %.0456, 1
  %exitcond511.not = icmp eq i64 %559, 4
  br i1 %exitcond511.not, label %.preheader338, label %.preheader346, !llvm.loop !54

.preheader337:                                    ; preds = %.preheader337.preheader, %._crit_edge469
  %.12298471 = phi i64 [ %627, %._crit_edge469 ], [ 0, %.preheader337.preheader ]
  br i1 %15, label %.lr.ph459.preheader, label %._crit_edge460

.lr.ph459.preheader:                              ; preds = %.preheader337
  br i1 %374, label %._crit_edge460.loopexit.unr-lcssa, label %.lr.ph459

.lr.ph459:                                        ; preds = %.lr.ph459.preheader, %.lr.ph459
  %.12458 = phi i64 [ %575, %.lr.ph459 ], [ 0, %.lr.ph459.preheader ]
  %niter621 = phi i64 [ %niter621.next.1, %.lr.ph459 ], [ 0, %.lr.ph459.preheader ]
  %560 = load ptr, ptr %272, align 8, !tbaa !14
  %561 = getelementptr inbounds ptr, ptr %560, i64 %.12298471
  %562 = load ptr, ptr %561, align 8, !tbaa !15
  %563 = getelementptr inbounds double, ptr %562, i64 %.12458
  %564 = load double, ptr %563, align 8, !tbaa !16
  %565 = load ptr, ptr %273, align 8, !tbaa !14
  %566 = getelementptr inbounds double, ptr %565, i64 %.12458
  store double %564, ptr %566, align 8, !tbaa !16
  %567 = or disjoint i64 %.12458, 1
  %568 = load ptr, ptr %272, align 8, !tbaa !14
  %569 = getelementptr inbounds ptr, ptr %568, i64 %.12298471
  %570 = load ptr, ptr %569, align 8, !tbaa !15
  %571 = getelementptr inbounds double, ptr %570, i64 %567
  %572 = load double, ptr %571, align 8, !tbaa !16
  %573 = load ptr, ptr %273, align 8, !tbaa !14
  %574 = getelementptr inbounds double, ptr %573, i64 %567
  store double %572, ptr %574, align 8, !tbaa !16
  %575 = add nuw nsw i64 %.12458, 2
  %niter621.next.1 = add i64 %niter621, 2
  %niter621.ncmp.1 = icmp eq i64 %niter621.next.1, %unroll_iter620
  br i1 %niter621.ncmp.1, label %._crit_edge460.loopexit.unr-lcssa, label %.lr.ph459, !llvm.loop !55

._crit_edge460.loopexit.unr-lcssa:                ; preds = %.lr.ph459, %.lr.ph459.preheader
  %.12458.unr = phi i64 [ 0, %.lr.ph459.preheader ], [ %575, %.lr.ph459 ]
  br i1 %lcmp.mod619.not, label %._crit_edge460, label %.lr.ph459.epil

.lr.ph459.epil:                                   ; preds = %._crit_edge460.loopexit.unr-lcssa
  %576 = load ptr, ptr %272, align 8, !tbaa !14
  %577 = getelementptr inbounds ptr, ptr %576, i64 %.12298471
  %578 = load ptr, ptr %577, align 8, !tbaa !15
  %579 = getelementptr inbounds double, ptr %578, i64 %.12458.unr
  %580 = load double, ptr %579, align 8, !tbaa !16
  %581 = load ptr, ptr %273, align 8, !tbaa !14
  %582 = getelementptr inbounds double, ptr %581, i64 %.12458.unr
  store double %580, ptr %582, align 8, !tbaa !16
  br label %._crit_edge460

._crit_edge460:                                   ; preds = %.lr.ph459.epil, %._crit_edge460.loopexit.unr-lcssa, %.preheader337
  %583 = load ptr, ptr %273, align 8, !tbaa !14
  %584 = getelementptr inbounds double, ptr %583, i64 %2
  store double 1.000000e+00, ptr %584, align 8, !tbaa !16
  br i1 %brmerge526, label %._crit_edge469, label %.preheader

.preheader:                                       ; preds = %._crit_edge460, %._crit_edge465
  %.13468 = phi i64 [ %626, %._crit_edge465 ], [ 0, %._crit_edge460 ]
  %585 = load ptr, ptr %273, align 8, !tbaa !14
  %586 = load ptr, ptr %274, align 8, !tbaa !14
  %587 = getelementptr inbounds ptr, ptr %586, i64 %.13468
  %588 = load ptr, ptr %587, align 8, !tbaa !15
  br i1 %375, label %._crit_edge465.unr-lcssa, label %.preheader.new

.preheader.new:                                   ; preds = %.preheader, %.preheader.new
  %.1278463 = phi double [ %611, %.preheader.new ], [ 0.000000e+00, %.preheader ]
  %.3462 = phi i64 [ %612, %.preheader.new ], [ 0, %.preheader ]
  %niter628 = phi i64 [ %niter628.next.3, %.preheader.new ], [ 0, %.preheader ]
  %589 = getelementptr inbounds double, ptr %585, i64 %.3462
  %590 = load double, ptr %589, align 8, !tbaa !16
  %591 = getelementptr inbounds double, ptr %588, i64 %.3462
  %592 = load double, ptr %591, align 8, !tbaa !16
  %593 = call double @llvm.fmuladd.f64(double %590, double %592, double %.1278463)
  %594 = or disjoint i64 %.3462, 1
  %595 = getelementptr inbounds double, ptr %585, i64 %594
  %596 = load double, ptr %595, align 8, !tbaa !16
  %597 = getelementptr inbounds double, ptr %588, i64 %594
  %598 = load double, ptr %597, align 8, !tbaa !16
  %599 = call double @llvm.fmuladd.f64(double %596, double %598, double %593)
  %600 = or disjoint i64 %.3462, 2
  %601 = getelementptr inbounds double, ptr %585, i64 %600
  %602 = load double, ptr %601, align 8, !tbaa !16
  %603 = getelementptr inbounds double, ptr %588, i64 %600
  %604 = load double, ptr %603, align 8, !tbaa !16
  %605 = call double @llvm.fmuladd.f64(double %602, double %604, double %599)
  %606 = or disjoint i64 %.3462, 3
  %607 = getelementptr inbounds double, ptr %585, i64 %606
  %608 = load double, ptr %607, align 8, !tbaa !16
  %609 = getelementptr inbounds double, ptr %588, i64 %606
  %610 = load double, ptr %609, align 8, !tbaa !16
  %611 = call double @llvm.fmuladd.f64(double %608, double %610, double %605)
  %612 = add nuw i64 %.3462, 4
  %niter628.next.3 = add i64 %niter628, 4
  %niter628.ncmp.3 = icmp eq i64 %niter628.next.3, %unroll_iter627
  br i1 %niter628.ncmp.3, label %._crit_edge465.unr-lcssa, label %.preheader.new, !llvm.loop !56

._crit_edge465.unr-lcssa:                         ; preds = %.preheader.new, %.preheader
  %.lcssa.ph = phi double [ poison, %.preheader ], [ %611, %.preheader.new ]
  %.1278463.unr = phi double [ 0.000000e+00, %.preheader ], [ %611, %.preheader.new ]
  %.3462.unr = phi i64 [ 0, %.preheader ], [ %612, %.preheader.new ]
  br i1 %lcmp.mod625.not, label %._crit_edge465, label %.epil.preheader622

.epil.preheader622:                               ; preds = %._crit_edge465.unr-lcssa, %.epil.preheader622
  %.1278463.epil = phi double [ %617, %.epil.preheader622 ], [ %.1278463.unr, %._crit_edge465.unr-lcssa ]
  %.3462.epil = phi i64 [ %618, %.epil.preheader622 ], [ %.3462.unr, %._crit_edge465.unr-lcssa ]
  %epil.iter624 = phi i64 [ %epil.iter624.next, %.epil.preheader622 ], [ 0, %._crit_edge465.unr-lcssa ]
  %613 = getelementptr inbounds double, ptr %585, i64 %.3462.epil
  %614 = load double, ptr %613, align 8, !tbaa !16
  %615 = getelementptr inbounds double, ptr %588, i64 %.3462.epil
  %616 = load double, ptr %615, align 8, !tbaa !16
  %617 = call double @llvm.fmuladd.f64(double %614, double %616, double %.1278463.epil)
  %618 = add nuw i64 %.3462.epil, 1
  %epil.iter624.next = add i64 %epil.iter624, 1
  %epil.iter624.cmp.not = icmp eq i64 %epil.iter624.next, %xtraiter623
  br i1 %epil.iter624.cmp.not, label %._crit_edge465, label %.epil.preheader622, !llvm.loop !57

._crit_edge465:                                   ; preds = %.epil.preheader622, %._crit_edge465.unr-lcssa
  %.lcssa = phi double [ %.lcssa.ph, %._crit_edge465.unr-lcssa ], [ %617, %.epil.preheader622 ]
  %619 = load ptr, ptr %272, align 8, !tbaa !14
  %620 = getelementptr inbounds ptr, ptr %619, i64 %.12298471
  %621 = load ptr, ptr %620, align 8, !tbaa !15
  %622 = getelementptr double, ptr %621, i64 %.13468
  %623 = getelementptr double, ptr %622, i64 %2
  %624 = load double, ptr %623, align 8, !tbaa !16
  %625 = fsub double %624, %.lcssa
  store double %625, ptr %623, align 8, !tbaa !16
  %626 = add nuw nsw i64 %.13468, 1
  %exitcond514.not = icmp eq i64 %626, %3
  br i1 %exitcond514.not, label %._crit_edge469, label %.preheader, !llvm.loop !58

._crit_edge469:                                   ; preds = %._crit_edge465, %._crit_edge460
  %627 = add nuw nsw i64 %.12298471, 1
  %exitcond515.not = icmp eq i64 %627, %1
  br i1 %exitcond515.not, label %._crit_edge, label %.preheader337, !llvm.loop !59

._crit_edge.loopexit534.unr-lcssa:                ; preds = %54, %.lr.ph
  %.1287368.unr = phi i64 [ 0, %.lr.ph ], [ %74, %54 ]
  %lcmp.mod538.not = icmp eq i64 %xtraiter536, 0
  br i1 %lcmp.mod538.not, label %._crit_edge, label %.epil.preheader535

.epil.preheader535:                               ; preds = %._crit_edge.loopexit534.unr-lcssa, %.epil.preheader535
  %.1287368.epil = phi i64 [ %632, %.epil.preheader535 ], [ %.1287368.unr, %._crit_edge.loopexit534.unr-lcssa ]
  %epil.iter537 = phi i64 [ %epil.iter537.next, %.epil.preheader535 ], [ 0, %._crit_edge.loopexit534.unr-lcssa ]
  %628 = load ptr, ptr %51, align 8, !tbaa !14
  %629 = getelementptr inbounds ptr, ptr %628, i64 %.1287368.epil
  %630 = load ptr, ptr %629, align 8, !tbaa !15
  %631 = getelementptr inbounds double, ptr %630, i64 %2
  store double %5, ptr %631, align 8, !tbaa !16
  %632 = add nuw nsw i64 %.1287368.epil, 1
  %epil.iter537.next = add i64 %epil.iter537, 1
  %epil.iter537.cmp.not = icmp eq i64 %epil.iter537.next, %xtraiter536
  br i1 %epil.iter537.cmp.not, label %._crit_edge, label %.epil.preheader535, !llvm.loop !60

._crit_edge:                                      ; preds = %._crit_edge.loopexit534.unr-lcssa, %.epil.preheader535, %._crit_edge381.us, %._crit_edge391.us, %._crit_edge469, %.preheader338, %76, %.preheader356, %.preheader355.lr.ph, %.preheader358.lr.ph, %.preheader357.thread519, %.preheader357, %.preheader353, %.preheader352.lr.ph, %.preheader354, %50, %50, %50, %.preheader360
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %7)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #5
  ret void
}

declare noundef zeroext i1 @_ZN11alglib_impl17spdmatrixcholeskyEPNS_9ae_matrixElbPNS_8ae_stateE(ptr noundef, i64 noundef, i1 noundef zeroext, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i1 noundef zeroext, i1 noundef zeroext, i64 noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { "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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { 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 #5 = { 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, !7, i64 0}
!6 = !{!"_ZTSN11alglib_impl9ae_matrixE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !11, i64 40, !8, i64 72}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!6, !7, i64 8}
!14 = !{!8, !8, i64 0}
!15 = !{!12, !12, i64 0}
!16 = !{!17, !17, i64 0}
!17 = !{!"double", !8, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.unroll.disable"}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !21}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}
!30 = distinct !{!30, !19}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !21}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !19}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}
!40 = distinct !{!40, !19}
!41 = distinct !{!41, !21}
!42 = distinct !{!42, !19}
!43 = distinct !{!43, !19}
!44 = distinct !{!44, !19}
!45 = distinct !{!45, !21}
!46 = distinct !{!46, !19}
!47 = distinct !{!47, !19}
!48 = distinct !{!48, !19}
!49 = distinct !{!49, !19}
!50 = distinct !{!50, !19}
!51 = distinct !{!51, !19}
!52 = distinct !{!52, !19}
!53 = distinct !{!53, !19}
!54 = distinct !{!54, !19}
!55 = distinct !{!55, !19}
!56 = distinct !{!56, !19}
!57 = distinct !{!57, !21}
!58 = distinct !{!58, !19}
!59 = distinct !{!59, !19}
!60 = distinct !{!60, !21}


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