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

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

%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%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.244 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.245 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.246 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.247 = external hidden unnamed_addr constant [45 x i8], align 1

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl29spdmatrixcholeskyupdatefixbufEPNS_9ae_matrixElbPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i1 noundef zeroext %2, ptr noundef %3, ptr noundef %4, ptr noundef %5) #2 {
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i8, align 1
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca i32, align 4
  store ptr %0, ptr %7, align 8, !tbaa !5
  store i64 %1, ptr %8, align 8, !tbaa !9
  %23 = zext i1 %2 to i8
  store i8 %23, ptr %9, align 1, !tbaa !11
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  %24 = load i64, ptr %8, align 8, !tbaa !9
  %25 = icmp sgt i64 %24, 0
  %26 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %25, ptr noundef @.str.244, ptr noundef %26)
  %27 = load ptr, ptr %7, align 8, !tbaa !5
  %28 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %27, i32 0, i32 0
  %29 = load i64, ptr %28, align 8, !tbaa !13
  %30 = load i64, ptr %8, align 8, !tbaa !9
  %31 = icmp sge i64 %29, %30
  %32 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %31, ptr noundef @.str.245, ptr noundef %32)
  %33 = load ptr, ptr %7, align 8, !tbaa !5
  %34 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %33, i32 0, i32 1
  %35 = load i64, ptr %34, align 8, !tbaa !16
  %36 = load i64, ptr %8, align 8, !tbaa !9
  %37 = icmp sge i64 %35, %36
  %38 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %37, ptr noundef @.str.246, ptr noundef %38)
  %39 = load ptr, ptr %10, align 8, !tbaa !5
  %40 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %39, i32 0, i32 0
  %41 = load i64, ptr %40, align 8, !tbaa !17
  %42 = load i64, ptr %8, align 8, !tbaa !9
  %43 = icmp sge i64 %41, %42
  %44 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %43, ptr noundef @.str.247, ptr noundef %44)
  store i64 0, ptr %16, align 8, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %45

45:                                               ; preds = %61, %6
  %46 = load i64, ptr %13, align 8, !tbaa !9
  %47 = load i64, ptr %8, align 8, !tbaa !9
  %48 = sub nsw i64 %47, 1
  %49 = icmp sle i64 %46, %48
  br i1 %49, label %50, label %64

50:                                               ; preds = %45
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %51, i32 0, i32 4
  %53 = load ptr, ptr %52, align 8, !tbaa !19
  %54 = load i64, ptr %13, align 8, !tbaa !9
  %55 = getelementptr inbounds i8, ptr %53, i64 %54
  %56 = load i8, ptr %55, align 1, !tbaa !11, !range !20, !noundef !21
  %57 = trunc i8 %56 to i1
  br i1 %57, label %58, label %60

58:                                               ; preds = %50
  %59 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef %16, ptr noundef %59)
  br label %60

60:                                               ; preds = %58, %50
  br label %61

61:                                               ; preds = %60
  %62 = load i64, ptr %13, align 8, !tbaa !9
  %63 = add nsw i64 %62, 1
  store i64 %63, ptr %13, align 8, !tbaa !9
  br label %45, !llvm.loop !22

64:                                               ; preds = %45
  %65 = load i64, ptr %16, align 8, !tbaa !9
  %66 = icmp eq i64 %65, 0
  br i1 %66, label %67, label %68

67:                                               ; preds = %64
  store i32 1, ptr %22, align 4
  br label %637

68:                                               ; preds = %64
  %69 = load i64, ptr %16, align 8, !tbaa !9
  %70 = load i64, ptr %8, align 8, !tbaa !9
  %71 = icmp eq i64 %69, %70
  br i1 %71, label %72, label %152

72:                                               ; preds = %68
  %73 = load i8, ptr %9, align 1, !tbaa !11, !range !20, !noundef !21
  %74 = trunc i8 %73 to i1
  br i1 %74, label %75, label %114

75:                                               ; preds = %72
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %76

76:                                               ; preds = %110, %75
  %77 = load i64, ptr %13, align 8, !tbaa !9
  %78 = load i64, ptr %8, align 8, !tbaa !9
  %79 = sub nsw i64 %78, 1
  %80 = icmp sle i64 %77, %79
  br i1 %80, label %81, label %113

81:                                               ; preds = %76
  %82 = load ptr, ptr %7, align 8, !tbaa !5
  %83 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %82, i32 0, i32 6
  %84 = load ptr, ptr %83, align 8, !tbaa !19
  %85 = load i64, ptr %13, align 8, !tbaa !9
  %86 = getelementptr inbounds ptr, ptr %84, i64 %85
  %87 = load ptr, ptr %86, align 8, !tbaa !5
  %88 = load i64, ptr %13, align 8, !tbaa !9
  %89 = getelementptr inbounds double, ptr %87, i64 %88
  store double 1.000000e+00, ptr %89, align 8, !tbaa !24
  %90 = load i64, ptr %13, align 8, !tbaa !9
  %91 = add nsw i64 %90, 1
  store i64 %91, ptr %14, align 8, !tbaa !9
  br label %92

92:                                               ; preds = %106, %81
  %93 = load i64, ptr %14, align 8, !tbaa !9
  %94 = load i64, ptr %8, align 8, !tbaa !9
  %95 = sub nsw i64 %94, 1
  %96 = icmp sle i64 %93, %95
  br i1 %96, label %97, label %109

97:                                               ; preds = %92
  %98 = load ptr, ptr %7, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %98, i32 0, i32 6
  %100 = load ptr, ptr %99, align 8, !tbaa !19
  %101 = load i64, ptr %13, align 8, !tbaa !9
  %102 = getelementptr inbounds ptr, ptr %100, i64 %101
  %103 = load ptr, ptr %102, align 8, !tbaa !5
  %104 = load i64, ptr %14, align 8, !tbaa !9
  %105 = getelementptr inbounds double, ptr %103, i64 %104
  store double 0.000000e+00, ptr %105, align 8, !tbaa !24
  br label %106

106:                                              ; preds = %97
  %107 = load i64, ptr %14, align 8, !tbaa !9
  %108 = add nsw i64 %107, 1
  store i64 %108, ptr %14, align 8, !tbaa !9
  br label %92, !llvm.loop !26

109:                                              ; preds = %92
  br label %110

110:                                              ; preds = %109
  %111 = load i64, ptr %13, align 8, !tbaa !9
  %112 = add nsw i64 %111, 1
  store i64 %112, ptr %13, align 8, !tbaa !9
  br label %76, !llvm.loop !27

113:                                              ; preds = %76
  br label %151

114:                                              ; preds = %72
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %115

115:                                              ; preds = %147, %114
  %116 = load i64, ptr %13, align 8, !tbaa !9
  %117 = load i64, ptr %8, align 8, !tbaa !9
  %118 = sub nsw i64 %117, 1
  %119 = icmp sle i64 %116, %118
  br i1 %119, label %120, label %150

120:                                              ; preds = %115
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %121

121:                                              ; preds = %135, %120
  %122 = load i64, ptr %14, align 8, !tbaa !9
  %123 = load i64, ptr %13, align 8, !tbaa !9
  %124 = sub nsw i64 %123, 1
  %125 = icmp sle i64 %122, %124
  br i1 %125, label %126, label %138

126:                                              ; preds = %121
  %127 = load ptr, ptr %7, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %127, i32 0, i32 6
  %129 = load ptr, ptr %128, align 8, !tbaa !19
  %130 = load i64, ptr %13, align 8, !tbaa !9
  %131 = getelementptr inbounds ptr, ptr %129, i64 %130
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  %133 = load i64, ptr %14, align 8, !tbaa !9
  %134 = getelementptr inbounds double, ptr %132, i64 %133
  store double 0.000000e+00, ptr %134, align 8, !tbaa !24
  br label %135

135:                                              ; preds = %126
  %136 = load i64, ptr %14, align 8, !tbaa !9
  %137 = add nsw i64 %136, 1
  store i64 %137, ptr %14, align 8, !tbaa !9
  br label %121, !llvm.loop !28

138:                                              ; preds = %121
  %139 = load ptr, ptr %7, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %139, i32 0, i32 6
  %141 = load ptr, ptr %140, align 8, !tbaa !19
  %142 = load i64, ptr %13, align 8, !tbaa !9
  %143 = getelementptr inbounds ptr, ptr %141, i64 %142
  %144 = load ptr, ptr %143, align 8, !tbaa !5
  %145 = load i64, ptr %13, align 8, !tbaa !9
  %146 = getelementptr inbounds double, ptr %144, i64 %145
  store double 1.000000e+00, ptr %146, align 8, !tbaa !24
  br label %147

147:                                              ; preds = %138
  %148 = load i64, ptr %13, align 8, !tbaa !9
  %149 = add nsw i64 %148, 1
  store i64 %149, ptr %13, align 8, !tbaa !9
  br label %115, !llvm.loop !29

150:                                              ; preds = %115
  br label %151

151:                                              ; preds = %150, %113
  store i32 1, ptr %22, align 4
  br label %637

152:                                              ; preds = %68
  %153 = load i8, ptr %9, align 1, !tbaa !11, !range !20, !noundef !21
  %154 = trunc i8 %153 to i1
  br i1 %154, label %155, label %387

155:                                              ; preds = %152
  %156 = load ptr, ptr %11, align 8, !tbaa !5
  %157 = load i64, ptr %8, align 8, !tbaa !9
  %158 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %156, i64 noundef %157, ptr noundef %158)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %159

159:                                              ; preds = %383, %155
  %160 = load i64, ptr %15, align 8, !tbaa !9
  %161 = load i64, ptr %8, align 8, !tbaa !9
  %162 = sub nsw i64 %161, 1
  %163 = icmp sle i64 %160, %162
  br i1 %163, label %164, label %386

164:                                              ; preds = %159
  %165 = load ptr, ptr %10, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %165, i32 0, i32 4
  %167 = load ptr, ptr %166, align 8, !tbaa !19
  %168 = load i64, ptr %15, align 8, !tbaa !9
  %169 = getelementptr inbounds i8, ptr %167, i64 %168
  %170 = load i8, ptr %169, align 1, !tbaa !11, !range !20, !noundef !21
  %171 = trunc i8 %170 to i1
  br i1 %171, label %172, label %382

172:                                              ; preds = %164
  %173 = load i64, ptr %15, align 8, !tbaa !9
  store i64 %173, ptr %17, align 8, !tbaa !9
  %174 = load i64, ptr %17, align 8, !tbaa !9
  %175 = load i64, ptr %8, align 8, !tbaa !9
  %176 = sub nsw i64 %175, 1
  %177 = icmp eq i64 %174, %176
  br i1 %177, label %178, label %205

178:                                              ; preds = %172
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %179

179:                                              ; preds = %193, %178
  %180 = load i64, ptr %13, align 8, !tbaa !9
  %181 = load i64, ptr %17, align 8, !tbaa !9
  %182 = sub nsw i64 %181, 1
  %183 = icmp sle i64 %180, %182
  br i1 %183, label %184, label %196

184:                                              ; preds = %179
  %185 = load ptr, ptr %7, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %185, i32 0, i32 6
  %187 = load ptr, ptr %186, align 8, !tbaa !19
  %188 = load i64, ptr %13, align 8, !tbaa !9
  %189 = getelementptr inbounds ptr, ptr %187, i64 %188
  %190 = load ptr, ptr %189, align 8, !tbaa !5
  %191 = load i64, ptr %17, align 8, !tbaa !9
  %192 = getelementptr inbounds double, ptr %190, i64 %191
  store double 0.000000e+00, ptr %192, align 8, !tbaa !24
  br label %193

193:                                              ; preds = %184
  %194 = load i64, ptr %13, align 8, !tbaa !9
  %195 = add nsw i64 %194, 1
  store i64 %195, ptr %13, align 8, !tbaa !9
  br label %179, !llvm.loop !30

196:                                              ; preds = %179
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %197, i32 0, i32 6
  %199 = load ptr, ptr %198, align 8, !tbaa !19
  %200 = load i64, ptr %17, align 8, !tbaa !9
  %201 = getelementptr inbounds ptr, ptr %199, i64 %200
  %202 = load ptr, ptr %201, align 8, !tbaa !5
  %203 = load i64, ptr %17, align 8, !tbaa !9
  %204 = getelementptr inbounds double, ptr %202, i64 %203
  store double 1.000000e+00, ptr %204, align 8, !tbaa !24
  br label %383

205:                                              ; preds = %172
  %206 = load i64, ptr %17, align 8, !tbaa !9
  %207 = add nsw i64 %206, 1
  store i64 %207, ptr %14, align 8, !tbaa !9
  br label %208

208:                                              ; preds = %228, %205
  %209 = load i64, ptr %14, align 8, !tbaa !9
  %210 = load i64, ptr %8, align 8, !tbaa !9
  %211 = sub nsw i64 %210, 1
  %212 = icmp sle i64 %209, %211
  br i1 %212, label %213, label %231

213:                                              ; preds = %208
  %214 = load ptr, ptr %7, align 8, !tbaa !5
  %215 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %214, i32 0, i32 6
  %216 = load ptr, ptr %215, align 8, !tbaa !19
  %217 = load i64, ptr %17, align 8, !tbaa !9
  %218 = getelementptr inbounds ptr, ptr %216, i64 %217
  %219 = load ptr, ptr %218, align 8, !tbaa !5
  %220 = load i64, ptr %14, align 8, !tbaa !9
  %221 = getelementptr inbounds double, ptr %219, i64 %220
  %222 = load double, ptr %221, align 8, !tbaa !24
  %223 = load ptr, ptr %11, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %223, i32 0, i32 4
  %225 = load ptr, ptr %224, align 8, !tbaa !19
  %226 = load i64, ptr %14, align 8, !tbaa !9
  %227 = getelementptr inbounds double, ptr %225, i64 %226
  store double %222, ptr %227, align 8, !tbaa !24
  br label %228

228:                                              ; preds = %213
  %229 = load i64, ptr %14, align 8, !tbaa !9
  %230 = add nsw i64 %229, 1
  store i64 %230, ptr %14, align 8, !tbaa !9
  br label %208, !llvm.loop !31

231:                                              ; preds = %208
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %232

232:                                              ; preds = %246, %231
  %233 = load i64, ptr %13, align 8, !tbaa !9
  %234 = load i64, ptr %17, align 8, !tbaa !9
  %235 = sub nsw i64 %234, 1
  %236 = icmp sle i64 %233, %235
  br i1 %236, label %237, label %249

237:                                              ; preds = %232
  %238 = load ptr, ptr %7, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %238, i32 0, i32 6
  %240 = load ptr, ptr %239, align 8, !tbaa !19
  %241 = load i64, ptr %13, align 8, !tbaa !9
  %242 = getelementptr inbounds ptr, ptr %240, i64 %241
  %243 = load ptr, ptr %242, align 8, !tbaa !5
  %244 = load i64, ptr %17, align 8, !tbaa !9
  %245 = getelementptr inbounds double, ptr %243, i64 %244
  store double 0.000000e+00, ptr %245, align 8, !tbaa !24
  br label %246

246:                                              ; preds = %237
  %247 = load i64, ptr %13, align 8, !tbaa !9
  %248 = add nsw i64 %247, 1
  store i64 %248, ptr %13, align 8, !tbaa !9
  br label %232, !llvm.loop !32

249:                                              ; preds = %232
  %250 = load ptr, ptr %7, align 8, !tbaa !5
  %251 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %250, i32 0, i32 6
  %252 = load ptr, ptr %251, align 8, !tbaa !19
  %253 = load i64, ptr %17, align 8, !tbaa !9
  %254 = getelementptr inbounds ptr, ptr %252, i64 %253
  %255 = load ptr, ptr %254, align 8, !tbaa !5
  %256 = load i64, ptr %17, align 8, !tbaa !9
  %257 = getelementptr inbounds double, ptr %255, i64 %256
  store double 1.000000e+00, ptr %257, align 8, !tbaa !24
  %258 = load i64, ptr %17, align 8, !tbaa !9
  %259 = add nsw i64 %258, 1
  store i64 %259, ptr %13, align 8, !tbaa !9
  br label %260

260:                                              ; preds = %274, %249
  %261 = load i64, ptr %13, align 8, !tbaa !9
  %262 = load i64, ptr %8, align 8, !tbaa !9
  %263 = sub nsw i64 %262, 1
  %264 = icmp sle i64 %261, %263
  br i1 %264, label %265, label %277

265:                                              ; preds = %260
  %266 = load ptr, ptr %7, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %266, i32 0, i32 6
  %268 = load ptr, ptr %267, align 8, !tbaa !19
  %269 = load i64, ptr %17, align 8, !tbaa !9
  %270 = getelementptr inbounds ptr, ptr %268, i64 %269
  %271 = load ptr, ptr %270, align 8, !tbaa !5
  %272 = load i64, ptr %13, align 8, !tbaa !9
  %273 = getelementptr inbounds double, ptr %271, i64 %272
  store double 0.000000e+00, ptr %273, align 8, !tbaa !24
  br label %274

274:                                              ; preds = %265
  %275 = load i64, ptr %13, align 8, !tbaa !9
  %276 = add nsw i64 %275, 1
  store i64 %276, ptr %13, align 8, !tbaa !9
  br label %260, !llvm.loop !33

277:                                              ; preds = %260
  %278 = load i64, ptr %17, align 8, !tbaa !9
  %279 = add nsw i64 %278, 1
  store i64 %279, ptr %13, align 8, !tbaa !9
  br label %280

280:                                              ; preds = %378, %277
  %281 = load i64, ptr %13, align 8, !tbaa !9
  %282 = load i64, ptr %8, align 8, !tbaa !9
  %283 = sub nsw i64 %282, 1
  %284 = icmp sle i64 %281, %283
  br i1 %284, label %285, label %381

285:                                              ; preds = %280
  %286 = load ptr, ptr %11, align 8, !tbaa !5
  %287 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %286, i32 0, i32 4
  %288 = load ptr, ptr %287, align 8, !tbaa !19
  %289 = load i64, ptr %13, align 8, !tbaa !9
  %290 = getelementptr inbounds double, ptr %288, i64 %289
  %291 = load double, ptr %290, align 8, !tbaa !24
  %292 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %291, double noundef 0.000000e+00)
  br i1 %292, label %293, label %377

293:                                              ; preds = %285
  %294 = load ptr, ptr %7, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %294, i32 0, i32 6
  %296 = load ptr, ptr %295, align 8, !tbaa !19
  %297 = load i64, ptr %13, align 8, !tbaa !9
  %298 = getelementptr inbounds ptr, ptr %296, i64 %297
  %299 = load ptr, ptr %298, align 8, !tbaa !5
  %300 = load i64, ptr %13, align 8, !tbaa !9
  %301 = getelementptr inbounds double, ptr %299, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !24
  %303 = load ptr, ptr %11, align 8, !tbaa !5
  %304 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %303, i32 0, i32 4
  %305 = load ptr, ptr %304, align 8, !tbaa !19
  %306 = load i64, ptr %13, align 8, !tbaa !9
  %307 = getelementptr inbounds double, ptr %305, i64 %306
  %308 = load double, ptr %307, align 8, !tbaa !24
  %309 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl16generaterotationEddPdS0_S0_PNS_8ae_stateE(double noundef %302, double noundef %308, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %309)
  %310 = load double, ptr %20, align 8, !tbaa !24
  %311 = load ptr, ptr %7, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %311, i32 0, i32 6
  %313 = load ptr, ptr %312, align 8, !tbaa !19
  %314 = load i64, ptr %13, align 8, !tbaa !9
  %315 = getelementptr inbounds ptr, ptr %313, i64 %314
  %316 = load ptr, ptr %315, align 8, !tbaa !5
  %317 = load i64, ptr %13, align 8, !tbaa !9
  %318 = getelementptr inbounds double, ptr %316, i64 %317
  store double %310, ptr %318, align 8, !tbaa !24
  %319 = load ptr, ptr %11, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %319, i32 0, i32 4
  %321 = load ptr, ptr %320, align 8, !tbaa !19
  %322 = load i64, ptr %13, align 8, !tbaa !9
  %323 = getelementptr inbounds double, ptr %321, i64 %322
  store double 0.000000e+00, ptr %323, align 8, !tbaa !24
  %324 = load i64, ptr %13, align 8, !tbaa !9
  %325 = add nsw i64 %324, 1
  store i64 %325, ptr %14, align 8, !tbaa !9
  br label %326

326:                                              ; preds = %373, %293
  %327 = load i64, ptr %14, align 8, !tbaa !9
  %328 = load i64, ptr %8, align 8, !tbaa !9
  %329 = sub nsw i64 %328, 1
  %330 = icmp sle i64 %327, %329
  br i1 %330, label %331, label %376

331:                                              ; preds = %326
  %332 = load ptr, ptr %7, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %332, i32 0, i32 6
  %334 = load ptr, ptr %333, align 8, !tbaa !19
  %335 = load i64, ptr %13, align 8, !tbaa !9
  %336 = getelementptr inbounds ptr, ptr %334, i64 %335
  %337 = load ptr, ptr %336, align 8, !tbaa !5
  %338 = load i64, ptr %14, align 8, !tbaa !9
  %339 = getelementptr inbounds double, ptr %337, i64 %338
  %340 = load double, ptr %339, align 8, !tbaa !24
  store double %340, ptr %20, align 8, !tbaa !24
  %341 = load ptr, ptr %11, align 8, !tbaa !5
  %342 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %341, i32 0, i32 4
  %343 = load ptr, ptr %342, align 8, !tbaa !19
  %344 = load i64, ptr %14, align 8, !tbaa !9
  %345 = getelementptr inbounds double, ptr %343, i64 %344
  %346 = load double, ptr %345, align 8, !tbaa !24
  store double %346, ptr %21, align 8, !tbaa !24
  %347 = load double, ptr %18, align 8, !tbaa !24
  %348 = load double, ptr %20, align 8, !tbaa !24
  %349 = load double, ptr %19, align 8, !tbaa !24
  %350 = load double, ptr %21, align 8, !tbaa !24
  %351 = fmul double %349, %350
  %352 = call double @llvm.fmuladd.f64(double %347, double %348, double %351)
  %353 = load ptr, ptr %7, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %353, i32 0, i32 6
  %355 = load ptr, ptr %354, align 8, !tbaa !19
  %356 = load i64, ptr %13, align 8, !tbaa !9
  %357 = getelementptr inbounds ptr, ptr %355, i64 %356
  %358 = load ptr, ptr %357, align 8, !tbaa !5
  %359 = load i64, ptr %14, align 8, !tbaa !9
  %360 = getelementptr inbounds double, ptr %358, i64 %359
  store double %352, ptr %360, align 8, !tbaa !24
  %361 = load double, ptr %19, align 8, !tbaa !24
  %362 = fneg double %361
  %363 = load double, ptr %20, align 8, !tbaa !24
  %364 = load double, ptr %18, align 8, !tbaa !24
  %365 = load double, ptr %21, align 8, !tbaa !24
  %366 = fmul double %364, %365
  %367 = call double @llvm.fmuladd.f64(double %362, double %363, double %366)
  %368 = load ptr, ptr %11, align 8, !tbaa !5
  %369 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %368, i32 0, i32 4
  %370 = load ptr, ptr %369, align 8, !tbaa !19
  %371 = load i64, ptr %14, align 8, !tbaa !9
  %372 = getelementptr inbounds double, ptr %370, i64 %371
  store double %367, ptr %372, align 8, !tbaa !24
  br label %373

373:                                              ; preds = %331
  %374 = load i64, ptr %14, align 8, !tbaa !9
  %375 = add nsw i64 %374, 1
  store i64 %375, ptr %14, align 8, !tbaa !9
  br label %326, !llvm.loop !34

376:                                              ; preds = %326
  br label %377

377:                                              ; preds = %376, %285
  br label %378

378:                                              ; preds = %377
  %379 = load i64, ptr %13, align 8, !tbaa !9
  %380 = add nsw i64 %379, 1
  store i64 %380, ptr %13, align 8, !tbaa !9
  br label %280, !llvm.loop !35

381:                                              ; preds = %280
  br label %382

382:                                              ; preds = %381, %164
  br label %383

383:                                              ; preds = %382, %196
  %384 = load i64, ptr %15, align 8, !tbaa !9
  %385 = add nsw i64 %384, 1
  store i64 %385, ptr %15, align 8, !tbaa !9
  br label %159, !llvm.loop !36

386:                                              ; preds = %159
  br label %636

387:                                              ; preds = %152
  %388 = load ptr, ptr %11, align 8, !tbaa !5
  %389 = load i64, ptr %8, align 8, !tbaa !9
  %390 = mul nsw i64 3, %389
  %391 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %388, i64 noundef %390, ptr noundef %391)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %392

392:                                              ; preds = %632, %387
  %393 = load i64, ptr %15, align 8, !tbaa !9
  %394 = load i64, ptr %8, align 8, !tbaa !9
  %395 = sub nsw i64 %394, 1
  %396 = icmp sle i64 %393, %395
  br i1 %396, label %397, label %635

397:                                              ; preds = %392
  %398 = load ptr, ptr %10, align 8, !tbaa !5
  %399 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %398, i32 0, i32 4
  %400 = load ptr, ptr %399, align 8, !tbaa !19
  %401 = load i64, ptr %15, align 8, !tbaa !9
  %402 = getelementptr inbounds i8, ptr %400, i64 %401
  %403 = load i8, ptr %402, align 1, !tbaa !11, !range !20, !noundef !21
  %404 = trunc i8 %403 to i1
  br i1 %404, label %405, label %631

405:                                              ; preds = %397
  %406 = load i64, ptr %15, align 8, !tbaa !9
  store i64 %406, ptr %17, align 8, !tbaa !9
  %407 = load i64, ptr %17, align 8, !tbaa !9
  %408 = load i64, ptr %8, align 8, !tbaa !9
  %409 = sub nsw i64 %408, 1
  %410 = icmp eq i64 %407, %409
  br i1 %410, label %411, label %438

411:                                              ; preds = %405
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %412

412:                                              ; preds = %426, %411
  %413 = load i64, ptr %13, align 8, !tbaa !9
  %414 = load i64, ptr %17, align 8, !tbaa !9
  %415 = sub nsw i64 %414, 1
  %416 = icmp sle i64 %413, %415
  br i1 %416, label %417, label %429

417:                                              ; preds = %412
  %418 = load ptr, ptr %7, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %418, i32 0, i32 6
  %420 = load ptr, ptr %419, align 8, !tbaa !19
  %421 = load i64, ptr %17, align 8, !tbaa !9
  %422 = getelementptr inbounds ptr, ptr %420, i64 %421
  %423 = load ptr, ptr %422, align 8, !tbaa !5
  %424 = load i64, ptr %13, align 8, !tbaa !9
  %425 = getelementptr inbounds double, ptr %423, i64 %424
  store double 0.000000e+00, ptr %425, align 8, !tbaa !24
  br label %426

426:                                              ; preds = %417
  %427 = load i64, ptr %13, align 8, !tbaa !9
  %428 = add nsw i64 %427, 1
  store i64 %428, ptr %13, align 8, !tbaa !9
  br label %412, !llvm.loop !37

429:                                              ; preds = %412
  %430 = load ptr, ptr %7, align 8, !tbaa !5
  %431 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %430, i32 0, i32 6
  %432 = load ptr, ptr %431, align 8, !tbaa !19
  %433 = load i64, ptr %17, align 8, !tbaa !9
  %434 = getelementptr inbounds ptr, ptr %432, i64 %433
  %435 = load ptr, ptr %434, align 8, !tbaa !5
  %436 = load i64, ptr %17, align 8, !tbaa !9
  %437 = getelementptr inbounds double, ptr %435, i64 %436
  store double 1.000000e+00, ptr %437, align 8, !tbaa !24
  br label %632

438:                                              ; preds = %405
  %439 = load i64, ptr %17, align 8, !tbaa !9
  %440 = add nsw i64 %439, 1
  store i64 %440, ptr %14, align 8, !tbaa !9
  br label %441

441:                                              ; preds = %461, %438
  %442 = load i64, ptr %14, align 8, !tbaa !9
  %443 = load i64, ptr %8, align 8, !tbaa !9
  %444 = sub nsw i64 %443, 1
  %445 = icmp sle i64 %442, %444
  br i1 %445, label %446, label %464

446:                                              ; preds = %441
  %447 = load ptr, ptr %7, align 8, !tbaa !5
  %448 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %447, i32 0, i32 6
  %449 = load ptr, ptr %448, align 8, !tbaa !19
  %450 = load i64, ptr %14, align 8, !tbaa !9
  %451 = getelementptr inbounds ptr, ptr %449, i64 %450
  %452 = load ptr, ptr %451, align 8, !tbaa !5
  %453 = load i64, ptr %17, align 8, !tbaa !9
  %454 = getelementptr inbounds double, ptr %452, i64 %453
  %455 = load double, ptr %454, align 8, !tbaa !24
  %456 = load ptr, ptr %11, align 8, !tbaa !5
  %457 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %456, i32 0, i32 4
  %458 = load ptr, ptr %457, align 8, !tbaa !19
  %459 = load i64, ptr %14, align 8, !tbaa !9
  %460 = getelementptr inbounds double, ptr %458, i64 %459
  store double %455, ptr %460, align 8, !tbaa !24
  br label %461

461:                                              ; preds = %446
  %462 = load i64, ptr %14, align 8, !tbaa !9
  %463 = add nsw i64 %462, 1
  store i64 %463, ptr %14, align 8, !tbaa !9
  br label %441, !llvm.loop !38

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

465:                                              ; preds = %479, %464
  %466 = load i64, ptr %13, align 8, !tbaa !9
  %467 = load i64, ptr %17, align 8, !tbaa !9
  %468 = sub nsw i64 %467, 1
  %469 = icmp sle i64 %466, %468
  br i1 %469, label %470, label %482

470:                                              ; preds = %465
  %471 = load ptr, ptr %7, align 8, !tbaa !5
  %472 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %471, i32 0, i32 6
  %473 = load ptr, ptr %472, align 8, !tbaa !19
  %474 = load i64, ptr %17, align 8, !tbaa !9
  %475 = getelementptr inbounds ptr, ptr %473, i64 %474
  %476 = load ptr, ptr %475, align 8, !tbaa !5
  %477 = load i64, ptr %13, align 8, !tbaa !9
  %478 = getelementptr inbounds double, ptr %476, i64 %477
  store double 0.000000e+00, ptr %478, align 8, !tbaa !24
  br label %479

479:                                              ; preds = %470
  %480 = load i64, ptr %13, align 8, !tbaa !9
  %481 = add nsw i64 %480, 1
  store i64 %481, ptr %13, align 8, !tbaa !9
  br label %465, !llvm.loop !39

482:                                              ; preds = %465
  %483 = load ptr, ptr %7, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %483, i32 0, i32 6
  %485 = load ptr, ptr %484, align 8, !tbaa !19
  %486 = load i64, ptr %17, align 8, !tbaa !9
  %487 = getelementptr inbounds ptr, ptr %485, i64 %486
  %488 = load ptr, ptr %487, align 8, !tbaa !5
  %489 = load i64, ptr %17, align 8, !tbaa !9
  %490 = getelementptr inbounds double, ptr %488, i64 %489
  store double 1.000000e+00, ptr %490, align 8, !tbaa !24
  %491 = load i64, ptr %17, align 8, !tbaa !9
  %492 = add nsw i64 %491, 1
  store i64 %492, ptr %13, align 8, !tbaa !9
  br label %493

493:                                              ; preds = %507, %482
  %494 = load i64, ptr %13, align 8, !tbaa !9
  %495 = load i64, ptr %8, align 8, !tbaa !9
  %496 = sub nsw i64 %495, 1
  %497 = icmp sle i64 %494, %496
  br i1 %497, label %498, label %510

498:                                              ; preds = %493
  %499 = load ptr, ptr %7, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %499, i32 0, i32 6
  %501 = load ptr, ptr %500, align 8, !tbaa !19
  %502 = load i64, ptr %13, align 8, !tbaa !9
  %503 = getelementptr inbounds ptr, ptr %501, i64 %502
  %504 = load ptr, ptr %503, align 8, !tbaa !5
  %505 = load i64, ptr %17, align 8, !tbaa !9
  %506 = getelementptr inbounds double, ptr %504, i64 %505
  store double 0.000000e+00, ptr %506, align 8, !tbaa !24
  br label %507

507:                                              ; preds = %498
  %508 = load i64, ptr %13, align 8, !tbaa !9
  %509 = add nsw i64 %508, 1
  store i64 %509, ptr %13, align 8, !tbaa !9
  br label %493, !llvm.loop !40

510:                                              ; preds = %493
  %511 = load i64, ptr %17, align 8, !tbaa !9
  %512 = add nsw i64 %511, 1
  store i64 %512, ptr %13, align 8, !tbaa !9
  br label %513

513:                                              ; preds = %627, %510
  %514 = load i64, ptr %13, align 8, !tbaa !9
  %515 = load i64, ptr %8, align 8, !tbaa !9
  %516 = sub nsw i64 %515, 1
  %517 = icmp sle i64 %514, %516
  br i1 %517, label %518, label %630

518:                                              ; preds = %513
  %519 = load ptr, ptr %11, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %519, i32 0, i32 4
  %521 = load ptr, ptr %520, align 8, !tbaa !19
  %522 = load i64, ptr %13, align 8, !tbaa !9
  %523 = getelementptr inbounds double, ptr %521, i64 %522
  %524 = load double, ptr %523, align 8, !tbaa !24
  store double %524, ptr %21, align 8, !tbaa !24
  %525 = load i64, ptr %17, align 8, !tbaa !9
  %526 = add nsw i64 %525, 1
  store i64 %526, ptr %14, align 8, !tbaa !9
  br label %527

527:                                              ; preds = %583, %518
  %528 = load i64, ptr %14, align 8, !tbaa !9
  %529 = load i64, ptr %13, align 8, !tbaa !9
  %530 = sub nsw i64 %529, 1
  %531 = icmp sle i64 %528, %530
  br i1 %531, label %532, label %586

532:                                              ; preds = %527
  %533 = load ptr, ptr %11, align 8, !tbaa !5
  %534 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %533, i32 0, i32 4
  %535 = load ptr, ptr %534, align 8, !tbaa !19
  %536 = load i64, ptr %8, align 8, !tbaa !9
  %537 = load i64, ptr %14, align 8, !tbaa !9
  %538 = mul nsw i64 2, %537
  %539 = add nsw i64 %536, %538
  %540 = add nsw i64 %539, 0
  %541 = getelementptr inbounds double, ptr %535, i64 %540
  %542 = load double, ptr %541, align 8, !tbaa !24
  store double %542, ptr %18, align 8, !tbaa !24
  %543 = load ptr, ptr %11, align 8, !tbaa !5
  %544 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %543, i32 0, i32 4
  %545 = load ptr, ptr %544, align 8, !tbaa !19
  %546 = load i64, ptr %8, align 8, !tbaa !9
  %547 = load i64, ptr %14, align 8, !tbaa !9
  %548 = mul nsw i64 2, %547
  %549 = add nsw i64 %546, %548
  %550 = add nsw i64 %549, 1
  %551 = getelementptr inbounds double, ptr %545, i64 %550
  %552 = load double, ptr %551, align 8, !tbaa !24
  store double %552, ptr %19, align 8, !tbaa !24
  %553 = load ptr, ptr %7, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %553, i32 0, i32 6
  %555 = load ptr, ptr %554, align 8, !tbaa !19
  %556 = load i64, ptr %13, align 8, !tbaa !9
  %557 = getelementptr inbounds ptr, ptr %555, i64 %556
  %558 = load ptr, ptr %557, align 8, !tbaa !5
  %559 = load i64, ptr %14, align 8, !tbaa !9
  %560 = getelementptr inbounds double, ptr %558, i64 %559
  %561 = load double, ptr %560, align 8, !tbaa !24
  store double %561, ptr %20, align 8, !tbaa !24
  %562 = load double, ptr %18, align 8, !tbaa !24
  %563 = load double, ptr %20, align 8, !tbaa !24
  %564 = load double, ptr %19, align 8, !tbaa !24
  %565 = load double, ptr %21, align 8, !tbaa !24
  %566 = fmul double %564, %565
  %567 = call double @llvm.fmuladd.f64(double %562, double %563, double %566)
  %568 = load ptr, ptr %7, align 8, !tbaa !5
  %569 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %568, i32 0, i32 6
  %570 = load ptr, ptr %569, align 8, !tbaa !19
  %571 = load i64, ptr %13, align 8, !tbaa !9
  %572 = getelementptr inbounds ptr, ptr %570, i64 %571
  %573 = load ptr, ptr %572, align 8, !tbaa !5
  %574 = load i64, ptr %14, align 8, !tbaa !9
  %575 = getelementptr inbounds double, ptr %573, i64 %574
  store double %567, ptr %575, align 8, !tbaa !24
  %576 = load double, ptr %19, align 8, !tbaa !24
  %577 = fneg double %576
  %578 = load double, ptr %20, align 8, !tbaa !24
  %579 = load double, ptr %18, align 8, !tbaa !24
  %580 = load double, ptr %21, align 8, !tbaa !24
  %581 = fmul double %579, %580
  %582 = call double @llvm.fmuladd.f64(double %577, double %578, double %581)
  store double %582, ptr %21, align 8, !tbaa !24
  br label %583

583:                                              ; preds = %532
  %584 = load i64, ptr %14, align 8, !tbaa !9
  %585 = add nsw i64 %584, 1
  store i64 %585, ptr %14, align 8, !tbaa !9
  br label %527, !llvm.loop !41

586:                                              ; preds = %527
  %587 = load ptr, ptr %7, align 8, !tbaa !5
  %588 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %587, i32 0, i32 6
  %589 = load ptr, ptr %588, align 8, !tbaa !19
  %590 = load i64, ptr %13, align 8, !tbaa !9
  %591 = getelementptr inbounds ptr, ptr %589, i64 %590
  %592 = load ptr, ptr %591, align 8, !tbaa !5
  %593 = load i64, ptr %13, align 8, !tbaa !9
  %594 = getelementptr inbounds double, ptr %592, i64 %593
  %595 = load double, ptr %594, align 8, !tbaa !24
  %596 = load double, ptr %21, align 8, !tbaa !24
  %597 = load ptr, ptr %12, align 8, !tbaa !5
  call void @_ZN11alglib_impl16generaterotationEddPdS0_S0_PNS_8ae_stateE(double noundef %595, double noundef %596, ptr noundef %18, ptr noundef %19, ptr noundef %20, ptr noundef %597)
  %598 = load double, ptr %20, align 8, !tbaa !24
  %599 = load ptr, ptr %7, align 8, !tbaa !5
  %600 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %599, i32 0, i32 6
  %601 = load ptr, ptr %600, align 8, !tbaa !19
  %602 = load i64, ptr %13, align 8, !tbaa !9
  %603 = getelementptr inbounds ptr, ptr %601, i64 %602
  %604 = load ptr, ptr %603, align 8, !tbaa !5
  %605 = load i64, ptr %13, align 8, !tbaa !9
  %606 = getelementptr inbounds double, ptr %604, i64 %605
  store double %598, ptr %606, align 8, !tbaa !24
  %607 = load double, ptr %18, align 8, !tbaa !24
  %608 = load ptr, ptr %11, align 8, !tbaa !5
  %609 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %608, i32 0, i32 4
  %610 = load ptr, ptr %609, align 8, !tbaa !19
  %611 = load i64, ptr %8, align 8, !tbaa !9
  %612 = load i64, ptr %13, align 8, !tbaa !9
  %613 = mul nsw i64 2, %612
  %614 = add nsw i64 %611, %613
  %615 = add nsw i64 %614, 0
  %616 = getelementptr inbounds double, ptr %610, i64 %615
  store double %607, ptr %616, align 8, !tbaa !24
  %617 = load double, ptr %19, align 8, !tbaa !24
  %618 = load ptr, ptr %11, align 8, !tbaa !5
  %619 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %618, i32 0, i32 4
  %620 = load ptr, ptr %619, align 8, !tbaa !19
  %621 = load i64, ptr %8, align 8, !tbaa !9
  %622 = load i64, ptr %13, align 8, !tbaa !9
  %623 = mul nsw i64 2, %622
  %624 = add nsw i64 %621, %623
  %625 = add nsw i64 %624, 1
  %626 = getelementptr inbounds double, ptr %620, i64 %625
  store double %617, ptr %626, align 8, !tbaa !24
  br label %627

627:                                              ; preds = %586
  %628 = load i64, ptr %13, align 8, !tbaa !9
  %629 = add nsw i64 %628, 1
  store i64 %629, ptr %13, align 8, !tbaa !9
  br label %513, !llvm.loop !42

630:                                              ; preds = %513
  br label %631

631:                                              ; preds = %630, %397
  br label %632

632:                                              ; preds = %631, %429
  %633 = load i64, ptr %15, align 8, !tbaa !9
  %634 = add nsw i64 %633, 1
  store i64 %634, ptr %15, align 8, !tbaa !9
  br label %392, !llvm.loop !43

635:                                              ; preds = %392
  br label %636

636:                                              ; preds = %635, %386
  store i32 0, ptr %22, align 4
  br label %637

637:                                              ; preds = %636, %151, %67
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  %638 = load i32, ptr %22, align 4
  switch i32 %638, label %640 [
    i32 0, label %639
    i32 1, label %639
  ]

639:                                              ; preds = %637, %637
  ret void

640:                                              ; preds = %637
  unreachable
}

declare void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #1

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

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

declare void @_ZN11alglib_impl16generaterotationEddPdS0_S0_PNS_8ae_stateE(double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef, ptr noundef) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = !{!"bool", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTSN11alglib_impl9ae_matrixE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !12, i64 32, !15, i64 40, !7, i64 72}
!15 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!16 = !{!14, !10, i64 8}
!17 = !{!18, !10, i64 0}
!18 = !{!"_ZTSN11alglib_impl9ae_vectorE", !10, i64 0, !10, i64 8, !12, i64 16, !15, i64 24, !7, i64 56}
!19 = !{!7, !7, i64 0}
!20 = !{i8 0, i8 2}
!21 = !{}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!25, !25, i64 0}
!25 = !{!"double", !7, i64 0}
!26 = distinct !{!26, !23}
!27 = distinct !{!27, !23}
!28 = distinct !{!28, !23}
!29 = distinct !{!29, !23}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !23}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}
!36 = distinct !{!36, !23}
!37 = distinct !{!37, !23}
!38 = distinct !{!38, !23}
!39 = distinct !{!39, !23}
!40 = distinct !{!40, !23}
!41 = distinct !{!41, !23}
!42 = distinct !{!42, !23}
!43 = distinct !{!43, !23}


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

@.str.244 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.245 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.246 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.247 = external hidden unnamed_addr constant [45 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 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 #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl29spdmatrixcholeskyupdatefixbufEPNS_9ae_matrixElbPNS_9ae_vectorES3_PNS_8ae_stateE(ptr nocapture noundef readonly %0, i64 noundef %1, i1 noundef zeroext %2, ptr nocapture noundef readonly %3, ptr noundef %4, ptr noundef %5) local_unnamed_addr #2 {
  %7 = alloca i64, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #4
  %11 = icmp sgt i64 %1, 0
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %11, ptr noundef nonnull @.str.244, ptr noundef %5)
  %12 = load i64, ptr %0, align 8, !tbaa !5
  %13 = icmp sge i64 %12, %1
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %13, ptr noundef nonnull @.str.245, ptr noundef %5)
  %14 = getelementptr inbounds i8, ptr %0, i64 8
  %15 = load i64, ptr %14, align 8, !tbaa !13
  %16 = icmp sge i64 %15, %1
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %16, ptr noundef nonnull @.str.246, ptr noundef %5)
  %17 = load i64, ptr %3, align 8, !tbaa !14
  %18 = icmp sge i64 %17, %1
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %18, ptr noundef nonnull @.str.247, ptr noundef %5)
  store i64 0, ptr %7, align 8, !tbaa !16
  br i1 %11, label %.lr.ph, label %.loopexit235

.lr.ph:                                           ; preds = %6
  %19 = getelementptr inbounds i8, ptr %3, i64 56
  br label %20

20:                                               ; preds = %.lr.ph, %26
  %.0208251 = phi i64 [ 0, %.lr.ph ], [ %27, %26 ]
  %21 = load ptr, ptr %19, align 8, !tbaa !17
  %22 = getelementptr inbounds i8, ptr %21, i64 %.0208251
  %23 = load i8, ptr %22, align 1, !tbaa !18, !range !19, !noundef !20
  %24 = trunc nuw i8 %23 to i1
  br i1 %24, label %25, label %26

25:                                               ; preds = %20
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef nonnull %7, ptr noundef %5)
  br label %26

26:                                               ; preds = %20, %25
  %27 = add nuw nsw i64 %.0208251, 1
  %exitcond.not = icmp eq i64 %27, %1
  br i1 %exitcond.not, label %._crit_edge, label %20, !llvm.loop !21

._crit_edge:                                      ; preds = %26
  %.pre = load i64, ptr %7, align 8, !tbaa !16
  %28 = add nsw i64 %1, -1
  %29 = icmp eq i64 %.pre, 0
  br i1 %29, label %.loopexit235, label %30

30:                                               ; preds = %._crit_edge
  %31 = icmp eq i64 %.pre, %1
  br i1 %31, label %32, label %77

32:                                               ; preds = %30
  br i1 %2, label %.preheader, label %.preheader237

.preheader237:                                    ; preds = %32
  br i1 %11, label %.preheader236.lr.ph, label %.loopexit235

.preheader236.lr.ph:                              ; preds = %.preheader237
  %33 = getelementptr inbounds i8, ptr %0, i64 72
  br label %.preheader236

.preheader:                                       ; preds = %32
  br i1 %11, label %.lr.ph323, label %.loopexit235

.lr.ph323:                                        ; preds = %.preheader
  %34 = getelementptr inbounds i8, ptr %0, i64 72
  br label %35

.loopexit:                                        ; preds = %.lr.ph320, %35
  %exitcond336.not = icmp eq i64 %40, %1
  br i1 %exitcond336.not, label %.loopexit235, label %35, !llvm.loop !23

35:                                               ; preds = %.lr.ph323, %.loopexit
  %.1209322 = phi i64 [ 0, %.lr.ph323 ], [ %40, %.loopexit ]
  %36 = load ptr, ptr %34, align 8, !tbaa !17
  %37 = getelementptr inbounds ptr, ptr %36, i64 %.1209322
  %38 = load ptr, ptr %37, align 8, !tbaa !24
  %39 = getelementptr inbounds double, ptr %38, i64 %.1209322
  store double 1.000000e+00, ptr %39, align 8, !tbaa !25
  %40 = add nuw nsw i64 %.1209322, 1
  %.not.not234317 = icmp slt i64 %40, %1
  br i1 %.not.not234317, label %.lr.ph320, label %.loopexit

.lr.ph320:                                        ; preds = %35, %.lr.ph320
  %.0206318 = phi i64 [ %45, %.lr.ph320 ], [ %40, %35 ]
  %41 = load ptr, ptr %34, align 8, !tbaa !17
  %42 = getelementptr inbounds ptr, ptr %41, i64 %.1209322
  %43 = load ptr, ptr %42, align 8, !tbaa !24
  %44 = getelementptr inbounds double, ptr %43, i64 %.0206318
  store double 0.000000e+00, ptr %44, align 8, !tbaa !25
  %45 = add nuw nsw i64 %.0206318, 1
  %.not.not234 = icmp slt i64 %45, %1
  br i1 %.not.not234, label %.lr.ph320, label %.loopexit, !llvm.loop !27

.preheader236:                                    ; preds = %.preheader236.lr.ph, %._crit_edge314
  %.2210316 = phi i64 [ 0, %.preheader236.lr.ph ], [ %76, %._crit_edge314 ]
  %.not.not232311.not = icmp eq i64 %.2210316, 0
  br i1 %.not.not232311.not, label %._crit_edge314, label %.lr.ph313.preheader

.lr.ph313.preheader:                              ; preds = %.preheader236
  %xtraiter361 = and i64 %.2210316, 3
  %46 = icmp ult i64 %.2210316, 4
  br i1 %46, label %._crit_edge314.loopexit.unr-lcssa, label %.lr.ph313.preheader.new

.lr.ph313.preheader.new:                          ; preds = %.lr.ph313.preheader
  %unroll_iter364 = and i64 %.2210316, 9223372036854775804
  br label %.lr.ph313

.lr.ph313:                                        ; preds = %.lr.ph313, %.lr.ph313.preheader.new
  %.1207312 = phi i64 [ 0, %.lr.ph313.preheader.new ], [ %66, %.lr.ph313 ]
  %niter365 = phi i64 [ 0, %.lr.ph313.preheader.new ], [ %niter365.next.3, %.lr.ph313 ]
  %47 = load ptr, ptr %33, align 8, !tbaa !17
  %48 = getelementptr inbounds ptr, ptr %47, i64 %.2210316
  %49 = load ptr, ptr %48, align 8, !tbaa !24
  %50 = getelementptr inbounds double, ptr %49, i64 %.1207312
  store double 0.000000e+00, ptr %50, align 8, !tbaa !25
  %51 = or disjoint i64 %.1207312, 1
  %52 = load ptr, ptr %33, align 8, !tbaa !17
  %53 = getelementptr inbounds ptr, ptr %52, i64 %.2210316
  %54 = load ptr, ptr %53, align 8, !tbaa !24
  %55 = getelementptr inbounds double, ptr %54, i64 %51
  store double 0.000000e+00, ptr %55, align 8, !tbaa !25
  %56 = or disjoint i64 %.1207312, 2
  %57 = load ptr, ptr %33, align 8, !tbaa !17
  %58 = getelementptr inbounds ptr, ptr %57, i64 %.2210316
  %59 = load ptr, ptr %58, align 8, !tbaa !24
  %60 = getelementptr inbounds double, ptr %59, i64 %56
  store double 0.000000e+00, ptr %60, align 8, !tbaa !25
  %61 = or disjoint i64 %.1207312, 3
  %62 = load ptr, ptr %33, align 8, !tbaa !17
  %63 = getelementptr inbounds ptr, ptr %62, i64 %.2210316
  %64 = load ptr, ptr %63, align 8, !tbaa !24
  %65 = getelementptr inbounds double, ptr %64, i64 %61
  store double 0.000000e+00, ptr %65, align 8, !tbaa !25
  %66 = add nuw nsw i64 %.1207312, 4
  %niter365.next.3 = add i64 %niter365, 4
  %niter365.ncmp.3 = icmp eq i64 %niter365.next.3, %unroll_iter364
  br i1 %niter365.ncmp.3, label %._crit_edge314.loopexit.unr-lcssa, label %.lr.ph313, !llvm.loop !28

._crit_edge314.loopexit.unr-lcssa:                ; preds = %.lr.ph313, %.lr.ph313.preheader
  %.1207312.unr = phi i64 [ 0, %.lr.ph313.preheader ], [ %66, %.lr.ph313 ]
  %lcmp.mod363.not = icmp eq i64 %xtraiter361, 0
  br i1 %lcmp.mod363.not, label %._crit_edge314, label %.lr.ph313.epil

.lr.ph313.epil:                                   ; preds = %._crit_edge314.loopexit.unr-lcssa, %.lr.ph313.epil
  %.1207312.epil = phi i64 [ %71, %.lr.ph313.epil ], [ %.1207312.unr, %._crit_edge314.loopexit.unr-lcssa ]
  %epil.iter362 = phi i64 [ %epil.iter362.next, %.lr.ph313.epil ], [ 0, %._crit_edge314.loopexit.unr-lcssa ]
  %67 = load ptr, ptr %33, align 8, !tbaa !17
  %68 = getelementptr inbounds ptr, ptr %67, i64 %.2210316
  %69 = load ptr, ptr %68, align 8, !tbaa !24
  %70 = getelementptr inbounds double, ptr %69, i64 %.1207312.epil
  store double 0.000000e+00, ptr %70, align 8, !tbaa !25
  %71 = add nuw nsw i64 %.1207312.epil, 1
  %epil.iter362.next = add i64 %epil.iter362, 1
  %epil.iter362.cmp.not = icmp eq i64 %epil.iter362.next, %xtraiter361
  br i1 %epil.iter362.cmp.not, label %._crit_edge314, label %.lr.ph313.epil, !llvm.loop !29

._crit_edge314:                                   ; preds = %._crit_edge314.loopexit.unr-lcssa, %.lr.ph313.epil, %.preheader236
  %72 = load ptr, ptr %33, align 8, !tbaa !17
  %73 = getelementptr inbounds ptr, ptr %72, i64 %.2210316
  %74 = load ptr, ptr %73, align 8, !tbaa !24
  %75 = getelementptr inbounds double, ptr %74, i64 %.2210316
  store double 1.000000e+00, ptr %75, align 8, !tbaa !25
  %76 = add nuw nsw i64 %.2210316, 1
  %exitcond335.not = icmp eq i64 %76, %1
  br i1 %exitcond335.not, label %.loopexit235, label %.preheader236, !llvm.loop !31

77:                                               ; preds = %30
  br i1 %2, label %78, label %207

78:                                               ; preds = %77
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %4, i64 noundef %1, ptr noundef %5)
  br i1 %11, label %.lr.ph310, label %.loopexit235

.lr.ph310:                                        ; preds = %78
  %79 = getelementptr inbounds i8, ptr %3, i64 56
  %80 = getelementptr inbounds i8, ptr %0, i64 72
  %81 = getelementptr inbounds i8, ptr %4, i64 56
  %.not.not230302.not = icmp eq i64 %28, 0
  %82 = add nsw i64 %1, -2
  %xtraiter356 = and i64 %28, 3
  %83 = icmp ult i64 %82, 3
  %unroll_iter359 = and i64 %28, -4
  %lcmp.mod358.not = icmp eq i64 %xtraiter356, 0
  br label %84

84:                                               ; preds = %.lr.ph310, %.loopexit242
  %.0205307 = phi i64 [ 0, %.lr.ph310 ], [ %206, %.loopexit242 ]
  %85 = load ptr, ptr %79, align 8, !tbaa !17
  %86 = getelementptr inbounds i8, ptr %85, i64 %.0205307
  %87 = load i8, ptr %86, align 1, !tbaa !18, !range !19, !noundef !20
  %88 = trunc nuw i8 %87 to i1
  br i1 %88, label %89, label %.loopexit242

89:                                               ; preds = %84
  %90 = icmp eq i64 %.0205307, %28
  br i1 %90, label %.preheader240, label %120

.preheader240:                                    ; preds = %89
  br i1 %.not.not230302.not, label %._crit_edge305, label %.lr.ph304.preheader

.lr.ph304.preheader:                              ; preds = %.preheader240
  br i1 %83, label %._crit_edge305.loopexit.unr-lcssa, label %.lr.ph304

.lr.ph304:                                        ; preds = %.lr.ph304.preheader, %.lr.ph304
  %.3211303 = phi i64 [ %110, %.lr.ph304 ], [ 0, %.lr.ph304.preheader ]
  %niter360 = phi i64 [ %niter360.next.3, %.lr.ph304 ], [ 0, %.lr.ph304.preheader ]
  %91 = load ptr, ptr %80, align 8, !tbaa !17
  %92 = getelementptr inbounds ptr, ptr %91, i64 %.3211303
  %93 = load ptr, ptr %92, align 8, !tbaa !24
  %94 = getelementptr inbounds double, ptr %93, i64 %28
  store double 0.000000e+00, ptr %94, align 8, !tbaa !25
  %95 = or disjoint i64 %.3211303, 1
  %96 = load ptr, ptr %80, align 8, !tbaa !17
  %97 = getelementptr inbounds ptr, ptr %96, i64 %95
  %98 = load ptr, ptr %97, align 8, !tbaa !24
  %99 = getelementptr inbounds double, ptr %98, i64 %28
  store double 0.000000e+00, ptr %99, align 8, !tbaa !25
  %100 = or disjoint i64 %.3211303, 2
  %101 = load ptr, ptr %80, align 8, !tbaa !17
  %102 = getelementptr inbounds ptr, ptr %101, i64 %100
  %103 = load ptr, ptr %102, align 8, !tbaa !24
  %104 = getelementptr inbounds double, ptr %103, i64 %28
  store double 0.000000e+00, ptr %104, align 8, !tbaa !25
  %105 = or disjoint i64 %.3211303, 3
  %106 = load ptr, ptr %80, align 8, !tbaa !17
  %107 = getelementptr inbounds ptr, ptr %106, i64 %105
  %108 = load ptr, ptr %107, align 8, !tbaa !24
  %109 = getelementptr inbounds double, ptr %108, i64 %28
  store double 0.000000e+00, ptr %109, align 8, !tbaa !25
  %110 = add nuw nsw i64 %.3211303, 4
  %niter360.next.3 = add i64 %niter360, 4
  %niter360.ncmp.3 = icmp eq i64 %niter360.next.3, %unroll_iter359
  br i1 %niter360.ncmp.3, label %._crit_edge305.loopexit.unr-lcssa, label %.lr.ph304, !llvm.loop !32

._crit_edge305.loopexit.unr-lcssa:                ; preds = %.lr.ph304, %.lr.ph304.preheader
  %.3211303.unr = phi i64 [ 0, %.lr.ph304.preheader ], [ %110, %.lr.ph304 ]
  br i1 %lcmp.mod358.not, label %._crit_edge305, label %.lr.ph304.epil

.lr.ph304.epil:                                   ; preds = %._crit_edge305.loopexit.unr-lcssa, %.lr.ph304.epil
  %.3211303.epil = phi i64 [ %115, %.lr.ph304.epil ], [ %.3211303.unr, %._crit_edge305.loopexit.unr-lcssa ]
  %epil.iter357 = phi i64 [ %epil.iter357.next, %.lr.ph304.epil ], [ 0, %._crit_edge305.loopexit.unr-lcssa ]
  %111 = load ptr, ptr %80, align 8, !tbaa !17
  %112 = getelementptr inbounds ptr, ptr %111, i64 %.3211303.epil
  %113 = load ptr, ptr %112, align 8, !tbaa !24
  %114 = getelementptr inbounds double, ptr %113, i64 %28
  store double 0.000000e+00, ptr %114, align 8, !tbaa !25
  %115 = add nuw nsw i64 %.3211303.epil, 1
  %epil.iter357.next = add i64 %epil.iter357, 1
  %epil.iter357.cmp.not = icmp eq i64 %epil.iter357.next, %xtraiter356
  br i1 %epil.iter357.cmp.not, label %._crit_edge305, label %.lr.ph304.epil, !llvm.loop !33

._crit_edge305:                                   ; preds = %._crit_edge305.loopexit.unr-lcssa, %.lr.ph304.epil, %.preheader240
  %116 = load ptr, ptr %80, align 8, !tbaa !17
  %117 = getelementptr inbounds ptr, ptr %116, i64 %28
  %118 = load ptr, ptr %117, align 8, !tbaa !24
  %119 = getelementptr inbounds double, ptr %118, i64 %28
  store double 1.000000e+00, ptr %119, align 8, !tbaa !25
  br label %.loopexit242

120:                                              ; preds = %89
  %121 = add nuw nsw i64 %.0205307, 1
  %.not.not225282 = icmp slt i64 %121, %1
  br i1 %.not.not225282, label %.lr.ph285, label %.preheader243

.preheader243:                                    ; preds = %.lr.ph285, %120
  %.not.not226286.not = icmp eq i64 %.0205307, 0
  br i1 %.not.not226286.not, label %._crit_edge289, label %.lr.ph288.preheader

.lr.ph288.preheader:                              ; preds = %.preheader243
  %xtraiter351 = and i64 %.0205307, 3
  %122 = icmp ult i64 %.0205307, 4
  br i1 %122, label %._crit_edge289.loopexit.unr-lcssa, label %.lr.ph288.preheader.new

.lr.ph288.preheader.new:                          ; preds = %.lr.ph288.preheader
  %unroll_iter354 = and i64 %.0205307, 9223372036854775804
  br label %.lr.ph288

.lr.ph285:                                        ; preds = %120, %.lr.ph285
  %.2283 = phi i64 [ %130, %.lr.ph285 ], [ %121, %120 ]
  %123 = load ptr, ptr %80, align 8, !tbaa !17
  %124 = getelementptr inbounds ptr, ptr %123, i64 %.0205307
  %125 = load ptr, ptr %124, align 8, !tbaa !24
  %126 = getelementptr inbounds double, ptr %125, i64 %.2283
  %127 = load double, ptr %126, align 8, !tbaa !25
  %128 = load ptr, ptr %81, align 8, !tbaa !17
  %129 = getelementptr inbounds double, ptr %128, i64 %.2283
  store double %127, ptr %129, align 8, !tbaa !25
  %130 = add nuw nsw i64 %.2283, 1
  %.not.not225 = icmp slt i64 %130, %1
  br i1 %.not.not225, label %.lr.ph285, label %.preheader243, !llvm.loop !34

.lr.ph288:                                        ; preds = %.lr.ph288, %.lr.ph288.preheader.new
  %.4212287 = phi i64 [ 0, %.lr.ph288.preheader.new ], [ %150, %.lr.ph288 ]
  %niter355 = phi i64 [ 0, %.lr.ph288.preheader.new ], [ %niter355.next.3, %.lr.ph288 ]
  %131 = load ptr, ptr %80, align 8, !tbaa !17
  %132 = getelementptr inbounds ptr, ptr %131, i64 %.4212287
  %133 = load ptr, ptr %132, align 8, !tbaa !24
  %134 = getelementptr inbounds double, ptr %133, i64 %.0205307
  store double 0.000000e+00, ptr %134, align 8, !tbaa !25
  %135 = or disjoint i64 %.4212287, 1
  %136 = load ptr, ptr %80, align 8, !tbaa !17
  %137 = getelementptr inbounds ptr, ptr %136, i64 %135
  %138 = load ptr, ptr %137, align 8, !tbaa !24
  %139 = getelementptr inbounds double, ptr %138, i64 %.0205307
  store double 0.000000e+00, ptr %139, align 8, !tbaa !25
  %140 = or disjoint i64 %.4212287, 2
  %141 = load ptr, ptr %80, align 8, !tbaa !17
  %142 = getelementptr inbounds ptr, ptr %141, i64 %140
  %143 = load ptr, ptr %142, align 8, !tbaa !24
  %144 = getelementptr inbounds double, ptr %143, i64 %.0205307
  store double 0.000000e+00, ptr %144, align 8, !tbaa !25
  %145 = or disjoint i64 %.4212287, 3
  %146 = load ptr, ptr %80, align 8, !tbaa !17
  %147 = getelementptr inbounds ptr, ptr %146, i64 %145
  %148 = load ptr, ptr %147, align 8, !tbaa !24
  %149 = getelementptr inbounds double, ptr %148, i64 %.0205307
  store double 0.000000e+00, ptr %149, align 8, !tbaa !25
  %150 = add nuw nsw i64 %.4212287, 4
  %niter355.next.3 = add i64 %niter355, 4
  %niter355.ncmp.3 = icmp eq i64 %niter355.next.3, %unroll_iter354
  br i1 %niter355.ncmp.3, label %._crit_edge289.loopexit.unr-lcssa, label %.lr.ph288, !llvm.loop !35

._crit_edge289.loopexit.unr-lcssa:                ; preds = %.lr.ph288, %.lr.ph288.preheader
  %.4212287.unr = phi i64 [ 0, %.lr.ph288.preheader ], [ %150, %.lr.ph288 ]
  %lcmp.mod353.not = icmp eq i64 %xtraiter351, 0
  br i1 %lcmp.mod353.not, label %._crit_edge289, label %.lr.ph288.epil

.lr.ph288.epil:                                   ; preds = %._crit_edge289.loopexit.unr-lcssa, %.lr.ph288.epil
  %.4212287.epil = phi i64 [ %155, %.lr.ph288.epil ], [ %.4212287.unr, %._crit_edge289.loopexit.unr-lcssa ]
  %epil.iter352 = phi i64 [ %epil.iter352.next, %.lr.ph288.epil ], [ 0, %._crit_edge289.loopexit.unr-lcssa ]
  %151 = load ptr, ptr %80, align 8, !tbaa !17
  %152 = getelementptr inbounds ptr, ptr %151, i64 %.4212287.epil
  %153 = load ptr, ptr %152, align 8, !tbaa !24
  %154 = getelementptr inbounds double, ptr %153, i64 %.0205307
  store double 0.000000e+00, ptr %154, align 8, !tbaa !25
  %155 = add nuw nsw i64 %.4212287.epil, 1
  %epil.iter352.next = add i64 %epil.iter352, 1
  %epil.iter352.cmp.not = icmp eq i64 %epil.iter352.next, %xtraiter351
  br i1 %epil.iter352.cmp.not, label %._crit_edge289, label %.lr.ph288.epil, !llvm.loop !36

._crit_edge289:                                   ; preds = %._crit_edge289.loopexit.unr-lcssa, %.lr.ph288.epil, %.preheader243
  %156 = load ptr, ptr %80, align 8, !tbaa !17
  %157 = getelementptr inbounds ptr, ptr %156, i64 %.0205307
  %158 = load ptr, ptr %157, align 8, !tbaa !24
  %159 = getelementptr inbounds double, ptr %158, i64 %.0205307
  store double 1.000000e+00, ptr %159, align 8, !tbaa !25
  br i1 %.not.not225282, label %.lr.ph293, label %.loopexit242

.preheader241:                                    ; preds = %.lr.ph293
  br i1 %.not.not225282, label %.lr.ph301, label %.loopexit242

.lr.ph293:                                        ; preds = %._crit_edge289, %.lr.ph293
  %.5213291 = phi i64 [ %164, %.lr.ph293 ], [ %121, %._crit_edge289 ]
  %160 = load ptr, ptr %80, align 8, !tbaa !17
  %161 = getelementptr inbounds ptr, ptr %160, i64 %.0205307
  %162 = load ptr, ptr %161, align 8, !tbaa !24
  %163 = getelementptr inbounds double, ptr %162, i64 %.5213291
  store double 0.000000e+00, ptr %163, align 8, !tbaa !25
  %164 = add nuw nsw i64 %.5213291, 1
  %.not.not227 = icmp slt i64 %164, %1
  br i1 %.not.not227, label %.lr.ph293, label %.preheader241, !llvm.loop !37

.lr.ph301:                                        ; preds = %.preheader241, %.loopexit239
  %.6299 = phi i64 [ %205, %.loopexit239 ], [ %121, %.preheader241 ]
  %165 = load ptr, ptr %81, align 8, !tbaa !17
  %166 = getelementptr inbounds double, ptr %165, i64 %.6299
  %167 = load double, ptr %166, align 8, !tbaa !25
  %168 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %167, double noundef 0.000000e+00)
  br i1 %168, label %169, label %.loopexit239

169:                                              ; preds = %.lr.ph301
  %170 = load ptr, ptr %80, align 8, !tbaa !17
  %171 = getelementptr inbounds ptr, ptr %170, i64 %.6299
  %172 = load ptr, ptr %171, align 8, !tbaa !24
  %173 = getelementptr inbounds double, ptr %172, i64 %.6299
  %174 = load double, ptr %173, align 8, !tbaa !25
  %175 = load ptr, ptr %81, align 8, !tbaa !17
  %176 = getelementptr inbounds double, ptr %175, i64 %.6299
  %177 = load double, ptr %176, align 8, !tbaa !25
  call void @_ZN11alglib_impl16generaterotationEddPdS0_S0_PNS_8ae_stateE(double noundef %174, double noundef %177, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %5)
  %178 = load double, ptr %10, align 8, !tbaa !25
  %179 = load ptr, ptr %80, align 8, !tbaa !17
  %180 = getelementptr inbounds ptr, ptr %179, i64 %.6299
  %181 = load ptr, ptr %180, align 8, !tbaa !24
  %182 = getelementptr inbounds double, ptr %181, i64 %.6299
  store double %178, ptr %182, align 8, !tbaa !25
  %183 = load ptr, ptr %81, align 8, !tbaa !17
  %184 = getelementptr inbounds double, ptr %183, i64 %.6299
  store double 0.000000e+00, ptr %184, align 8, !tbaa !25
  %.not.not229294 = icmp slt i64 %.6299, %28
  br i1 %.not.not229294, label %.lr.ph297, label %.loopexit239

.lr.ph297:                                        ; preds = %169, %.lr.ph297
  %.3.in295 = phi i64 [ %.3, %.lr.ph297 ], [ %.6299, %169 ]
  %.3 = add nuw nsw i64 %.3.in295, 1
  %185 = load ptr, ptr %80, align 8, !tbaa !17
  %186 = getelementptr inbounds ptr, ptr %185, i64 %.6299
  %187 = load ptr, ptr %186, align 8, !tbaa !24
  %188 = getelementptr inbounds double, ptr %187, i64 %.3
  %189 = load double, ptr %188, align 8, !tbaa !25
  store double %189, ptr %10, align 8, !tbaa !25
  %190 = load ptr, ptr %81, align 8, !tbaa !17
  %191 = getelementptr inbounds double, ptr %190, i64 %.3
  %192 = load double, ptr %191, align 8, !tbaa !25
  %193 = load double, ptr %8, align 8, !tbaa !25
  %194 = load double, ptr %9, align 8, !tbaa !25
  %195 = fmul double %192, %194
  %196 = call double @llvm.fmuladd.f64(double %193, double %189, double %195)
  store double %196, ptr %188, align 8, !tbaa !25
  %197 = load double, ptr %9, align 8, !tbaa !25
  %198 = fneg double %197
  %199 = load double, ptr %10, align 8, !tbaa !25
  %200 = load double, ptr %8, align 8, !tbaa !25
  %201 = fmul double %192, %200
  %202 = call double @llvm.fmuladd.f64(double %198, double %199, double %201)
  %203 = load ptr, ptr %81, align 8, !tbaa !17
  %204 = getelementptr inbounds double, ptr %203, i64 %.3
  store double %202, ptr %204, align 8, !tbaa !25
  %.not.not229 = icmp slt i64 %.3, %28
  br i1 %.not.not229, label %.lr.ph297, label %.loopexit239, !llvm.loop !38

.loopexit239:                                     ; preds = %.lr.ph297, %169, %.lr.ph301
  %205 = add nuw nsw i64 %.6299, 1
  %.not.not228 = icmp slt i64 %205, %1
  br i1 %.not.not228, label %.lr.ph301, label %.loopexit242, !llvm.loop !39

.loopexit242:                                     ; preds = %.loopexit239, %._crit_edge289, %.preheader241, %84, %._crit_edge305
  %206 = add nuw nsw i64 %.0205307, 1
  %exitcond333.not = icmp eq i64 %206, %1
  br i1 %exitcond333.not, label %.loopexit235, label %84, !llvm.loop !40

207:                                              ; preds = %77
  %208 = mul nuw nsw i64 %1, 3
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %4, i64 noundef %208, ptr noundef %5)
  br i1 %11, label %.lr.ph281, label %.loopexit235

.lr.ph281:                                        ; preds = %207
  %209 = getelementptr inbounds i8, ptr %3, i64 56
  %210 = getelementptr inbounds i8, ptr %0, i64 72
  %211 = getelementptr inbounds i8, ptr %4, i64 56
  %.not.not223273.not = icmp eq i64 %28, 0
  %212 = add nsw i64 %1, -2
  %xtraiter346 = and i64 %28, 3
  %213 = icmp ult i64 %212, 3
  %unroll_iter349 = and i64 %28, -4
  %lcmp.mod348.not = icmp eq i64 %xtraiter346, 0
  br label %214

214:                                              ; preds = %.lr.ph281, %.loopexit247
  %.1278 = phi i64 [ 0, %.lr.ph281 ], [ %338, %.loopexit247 ]
  %215 = load ptr, ptr %209, align 8, !tbaa !17
  %216 = getelementptr inbounds i8, ptr %215, i64 %.1278
  %217 = load i8, ptr %216, align 1, !tbaa !18, !range !19, !noundef !20
  %218 = trunc nuw i8 %217 to i1
  br i1 %218, label %219, label %.loopexit247

219:                                              ; preds = %214
  %220 = icmp eq i64 %.1278, %28
  br i1 %220, label %.preheader245, label %250

.preheader245:                                    ; preds = %219
  br i1 %.not.not223273.not, label %._crit_edge276, label %.lr.ph275.preheader

.lr.ph275.preheader:                              ; preds = %.preheader245
  br i1 %213, label %._crit_edge276.loopexit.unr-lcssa, label %.lr.ph275

.lr.ph275:                                        ; preds = %.lr.ph275.preheader, %.lr.ph275
  %.7274 = phi i64 [ %240, %.lr.ph275 ], [ 0, %.lr.ph275.preheader ]
  %niter350 = phi i64 [ %niter350.next.3, %.lr.ph275 ], [ 0, %.lr.ph275.preheader ]
  %221 = load ptr, ptr %210, align 8, !tbaa !17
  %222 = getelementptr inbounds ptr, ptr %221, i64 %28
  %223 = load ptr, ptr %222, align 8, !tbaa !24
  %224 = getelementptr inbounds double, ptr %223, i64 %.7274
  store double 0.000000e+00, ptr %224, align 8, !tbaa !25
  %225 = or disjoint i64 %.7274, 1
  %226 = load ptr, ptr %210, align 8, !tbaa !17
  %227 = getelementptr inbounds ptr, ptr %226, i64 %28
  %228 = load ptr, ptr %227, align 8, !tbaa !24
  %229 = getelementptr inbounds double, ptr %228, i64 %225
  store double 0.000000e+00, ptr %229, align 8, !tbaa !25
  %230 = or disjoint i64 %.7274, 2
  %231 = load ptr, ptr %210, align 8, !tbaa !17
  %232 = getelementptr inbounds ptr, ptr %231, i64 %28
  %233 = load ptr, ptr %232, align 8, !tbaa !24
  %234 = getelementptr inbounds double, ptr %233, i64 %230
  store double 0.000000e+00, ptr %234, align 8, !tbaa !25
  %235 = or disjoint i64 %.7274, 3
  %236 = load ptr, ptr %210, align 8, !tbaa !17
  %237 = getelementptr inbounds ptr, ptr %236, i64 %28
  %238 = load ptr, ptr %237, align 8, !tbaa !24
  %239 = getelementptr inbounds double, ptr %238, i64 %235
  store double 0.000000e+00, ptr %239, align 8, !tbaa !25
  %240 = add nuw nsw i64 %.7274, 4
  %niter350.next.3 = add i64 %niter350, 4
  %niter350.ncmp.3 = icmp eq i64 %niter350.next.3, %unroll_iter349
  br i1 %niter350.ncmp.3, label %._crit_edge276.loopexit.unr-lcssa, label %.lr.ph275, !llvm.loop !41

._crit_edge276.loopexit.unr-lcssa:                ; preds = %.lr.ph275, %.lr.ph275.preheader
  %.7274.unr = phi i64 [ 0, %.lr.ph275.preheader ], [ %240, %.lr.ph275 ]
  br i1 %lcmp.mod348.not, label %._crit_edge276, label %.lr.ph275.epil

.lr.ph275.epil:                                   ; preds = %._crit_edge276.loopexit.unr-lcssa, %.lr.ph275.epil
  %.7274.epil = phi i64 [ %245, %.lr.ph275.epil ], [ %.7274.unr, %._crit_edge276.loopexit.unr-lcssa ]
  %epil.iter347 = phi i64 [ %epil.iter347.next, %.lr.ph275.epil ], [ 0, %._crit_edge276.loopexit.unr-lcssa ]
  %241 = load ptr, ptr %210, align 8, !tbaa !17
  %242 = getelementptr inbounds ptr, ptr %241, i64 %28
  %243 = load ptr, ptr %242, align 8, !tbaa !24
  %244 = getelementptr inbounds double, ptr %243, i64 %.7274.epil
  store double 0.000000e+00, ptr %244, align 8, !tbaa !25
  %245 = add nuw nsw i64 %.7274.epil, 1
  %epil.iter347.next = add i64 %epil.iter347, 1
  %epil.iter347.cmp.not = icmp eq i64 %epil.iter347.next, %xtraiter346
  br i1 %epil.iter347.cmp.not, label %._crit_edge276, label %.lr.ph275.epil, !llvm.loop !42

._crit_edge276:                                   ; preds = %._crit_edge276.loopexit.unr-lcssa, %.lr.ph275.epil, %.preheader245
  %246 = load ptr, ptr %210, align 8, !tbaa !17
  %247 = getelementptr inbounds ptr, ptr %246, i64 %28
  %248 = load ptr, ptr %247, align 8, !tbaa !24
  %249 = getelementptr inbounds double, ptr %248, i64 %28
  store double 1.000000e+00, ptr %249, align 8, !tbaa !25
  br label %.loopexit247

250:                                              ; preds = %219
  %251 = add nuw nsw i64 %.1278, 1
  %.not.not218252 = icmp slt i64 %251, %1
  br i1 %.not.not218252, label %.lr.ph255, label %.preheader248

.preheader248:                                    ; preds = %.lr.ph255, %250
  %.not.not219256.not = icmp eq i64 %.1278, 0
  br i1 %.not.not219256.not, label %._crit_edge259, label %.lr.ph258.preheader

.lr.ph258.preheader:                              ; preds = %.preheader248
  %xtraiter = and i64 %.1278, 3
  %252 = icmp ult i64 %.1278, 4
  br i1 %252, label %._crit_edge259.loopexit.unr-lcssa, label %.lr.ph258.preheader.new

.lr.ph258.preheader.new:                          ; preds = %.lr.ph258.preheader
  %unroll_iter = and i64 %.1278, 9223372036854775804
  br label %.lr.ph258

.lr.ph255:                                        ; preds = %250, %.lr.ph255
  %.4253 = phi i64 [ %260, %.lr.ph255 ], [ %251, %250 ]
  %253 = load ptr, ptr %210, align 8, !tbaa !17
  %254 = getelementptr inbounds ptr, ptr %253, i64 %.4253
  %255 = load ptr, ptr %254, align 8, !tbaa !24
  %256 = getelementptr inbounds double, ptr %255, i64 %.1278
  %257 = load double, ptr %256, align 8, !tbaa !25
  %258 = load ptr, ptr %211, align 8, !tbaa !17
  %259 = getelementptr inbounds double, ptr %258, i64 %.4253
  store double %257, ptr %259, align 8, !tbaa !25
  %260 = add nuw nsw i64 %.4253, 1
  %.not.not218 = icmp slt i64 %260, %1
  br i1 %.not.not218, label %.lr.ph255, label %.preheader248, !llvm.loop !43

.lr.ph258:                                        ; preds = %.lr.ph258, %.lr.ph258.preheader.new
  %.8257 = phi i64 [ 0, %.lr.ph258.preheader.new ], [ %280, %.lr.ph258 ]
  %niter = phi i64 [ 0, %.lr.ph258.preheader.new ], [ %niter.next.3, %.lr.ph258 ]
  %261 = load ptr, ptr %210, align 8, !tbaa !17
  %262 = getelementptr inbounds ptr, ptr %261, i64 %.1278
  %263 = load ptr, ptr %262, align 8, !tbaa !24
  %264 = getelementptr inbounds double, ptr %263, i64 %.8257
  store double 0.000000e+00, ptr %264, align 8, !tbaa !25
  %265 = or disjoint i64 %.8257, 1
  %266 = load ptr, ptr %210, align 8, !tbaa !17
  %267 = getelementptr inbounds ptr, ptr %266, i64 %.1278
  %268 = load ptr, ptr %267, align 8, !tbaa !24
  %269 = getelementptr inbounds double, ptr %268, i64 %265
  store double 0.000000e+00, ptr %269, align 8, !tbaa !25
  %270 = or disjoint i64 %.8257, 2
  %271 = load ptr, ptr %210, align 8, !tbaa !17
  %272 = getelementptr inbounds ptr, ptr %271, i64 %.1278
  %273 = load ptr, ptr %272, align 8, !tbaa !24
  %274 = getelementptr inbounds double, ptr %273, i64 %270
  store double 0.000000e+00, ptr %274, align 8, !tbaa !25
  %275 = or disjoint i64 %.8257, 3
  %276 = load ptr, ptr %210, align 8, !tbaa !17
  %277 = getelementptr inbounds ptr, ptr %276, i64 %.1278
  %278 = load ptr, ptr %277, align 8, !tbaa !24
  %279 = getelementptr inbounds double, ptr %278, i64 %275
  store double 0.000000e+00, ptr %279, align 8, !tbaa !25
  %280 = add nuw nsw i64 %.8257, 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_edge259.loopexit.unr-lcssa, label %.lr.ph258, !llvm.loop !44

._crit_edge259.loopexit.unr-lcssa:                ; preds = %.lr.ph258, %.lr.ph258.preheader
  %.8257.unr = phi i64 [ 0, %.lr.ph258.preheader ], [ %280, %.lr.ph258 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge259, label %.lr.ph258.epil

.lr.ph258.epil:                                   ; preds = %._crit_edge259.loopexit.unr-lcssa, %.lr.ph258.epil
  %.8257.epil = phi i64 [ %285, %.lr.ph258.epil ], [ %.8257.unr, %._crit_edge259.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph258.epil ], [ 0, %._crit_edge259.loopexit.unr-lcssa ]
  %281 = load ptr, ptr %210, align 8, !tbaa !17
  %282 = getelementptr inbounds ptr, ptr %281, i64 %.1278
  %283 = load ptr, ptr %282, align 8, !tbaa !24
  %284 = getelementptr inbounds double, ptr %283, i64 %.8257.epil
  store double 0.000000e+00, ptr %284, align 8, !tbaa !25
  %285 = add nuw nsw i64 %.8257.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_edge259, label %.lr.ph258.epil, !llvm.loop !45

._crit_edge259:                                   ; preds = %._crit_edge259.loopexit.unr-lcssa, %.lr.ph258.epil, %.preheader248
  %286 = load ptr, ptr %210, align 8, !tbaa !17
  %287 = getelementptr inbounds ptr, ptr %286, i64 %.1278
  %288 = load ptr, ptr %287, align 8, !tbaa !24
  %289 = getelementptr inbounds double, ptr %288, i64 %.1278
  store double 1.000000e+00, ptr %289, align 8, !tbaa !25
  br i1 %.not.not218252, label %.lr.ph263, label %.loopexit247

.preheader246:                                    ; preds = %.lr.ph263
  br i1 %.not.not218252, label %.lr.ph272, label %.loopexit247

.lr.ph263:                                        ; preds = %._crit_edge259, %.lr.ph263
  %.9261 = phi i64 [ %294, %.lr.ph263 ], [ %251, %._crit_edge259 ]
  %290 = load ptr, ptr %210, align 8, !tbaa !17
  %291 = getelementptr inbounds ptr, ptr %290, i64 %.9261
  %292 = load ptr, ptr %291, align 8, !tbaa !24
  %293 = getelementptr inbounds double, ptr %292, i64 %.1278
  store double 0.000000e+00, ptr %293, align 8, !tbaa !25
  %294 = add nuw nsw i64 %.9261, 1
  %.not.not220 = icmp slt i64 %294, %1
  br i1 %.not.not220, label %.lr.ph263, label %.preheader246, !llvm.loop !46

.lr.ph272:                                        ; preds = %.preheader246, %._crit_edge269
  %.10271 = phi i64 [ %337, %._crit_edge269 ], [ %251, %.preheader246 ]
  %295 = load ptr, ptr %211, align 8, !tbaa !17
  %296 = getelementptr inbounds double, ptr %295, i64 %.10271
  %297 = load double, ptr %296, align 8, !tbaa !25
  %.not.not222264 = icmp ult i64 %251, %.10271
  br i1 %.not.not222264, label %.lr.ph268, label %._crit_edge269

.lr.ph268:                                        ; preds = %.lr.ph272, %.lr.ph268
  %.0266 = phi double [ %316, %.lr.ph268 ], [ %297, %.lr.ph272 ]
  %.5265 = phi i64 [ %317, %.lr.ph268 ], [ %251, %.lr.ph272 ]
  %298 = load ptr, ptr %211, align 8, !tbaa !17
  %.idx = shl i64 %.5265, 4
  %299 = getelementptr i8, ptr %298, i64 %.idx
  %300 = getelementptr double, ptr %299, i64 %1
  %301 = load double, ptr %300, align 8, !tbaa !25
  store double %301, ptr %8, align 8, !tbaa !25
  %302 = getelementptr i8, ptr %300, i64 8
  %303 = load double, ptr %302, align 8, !tbaa !25
  store double %303, ptr %9, align 8, !tbaa !25
  %304 = load ptr, ptr %210, align 8, !tbaa !17
  %305 = getelementptr inbounds ptr, ptr %304, i64 %.10271
  %306 = load ptr, ptr %305, align 8, !tbaa !24
  %307 = getelementptr inbounds double, ptr %306, i64 %.5265
  %308 = load double, ptr %307, align 8, !tbaa !25
  store double %308, ptr %10, align 8, !tbaa !25
  %309 = fmul double %.0266, %303
  %310 = call double @llvm.fmuladd.f64(double %301, double %308, double %309)
  store double %310, ptr %307, align 8, !tbaa !25
  %311 = load double, ptr %9, align 8, !tbaa !25
  %312 = fneg double %311
  %313 = load double, ptr %10, align 8, !tbaa !25
  %314 = load double, ptr %8, align 8, !tbaa !25
  %315 = fmul double %.0266, %314
  %316 = call double @llvm.fmuladd.f64(double %312, double %313, double %315)
  %317 = add nuw nsw i64 %.5265, 1
  %exitcond328.not = icmp eq i64 %317, %.10271
  br i1 %exitcond328.not, label %._crit_edge269, label %.lr.ph268, !llvm.loop !47

._crit_edge269:                                   ; preds = %.lr.ph268, %.lr.ph272
  %.0.lcssa = phi double [ %297, %.lr.ph272 ], [ %316, %.lr.ph268 ]
  %318 = load ptr, ptr %210, align 8, !tbaa !17
  %319 = getelementptr inbounds ptr, ptr %318, i64 %.10271
  %320 = load ptr, ptr %319, align 8, !tbaa !24
  %321 = getelementptr inbounds double, ptr %320, i64 %.10271
  %322 = load double, ptr %321, align 8, !tbaa !25
  call void @_ZN11alglib_impl16generaterotationEddPdS0_S0_PNS_8ae_stateE(double noundef %322, double noundef %.0.lcssa, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef nonnull %10, ptr noundef %5)
  %323 = load double, ptr %10, align 8, !tbaa !25
  %324 = load ptr, ptr %210, align 8, !tbaa !17
  %325 = getelementptr inbounds ptr, ptr %324, i64 %.10271
  %326 = load ptr, ptr %325, align 8, !tbaa !24
  %327 = getelementptr inbounds double, ptr %326, i64 %.10271
  store double %323, ptr %327, align 8, !tbaa !25
  %328 = load double, ptr %8, align 8, !tbaa !25
  %329 = load ptr, ptr %211, align 8, !tbaa !17
  %330 = shl nuw nsw i64 %.10271, 1
  %331 = add nuw nsw i64 %330, %1
  %332 = getelementptr inbounds double, ptr %329, i64 %331
  store double %328, ptr %332, align 8, !tbaa !25
  %333 = load double, ptr %9, align 8, !tbaa !25
  %334 = load ptr, ptr %211, align 8, !tbaa !17
  %335 = getelementptr double, ptr %334, i64 %331
  %336 = getelementptr i8, ptr %335, i64 8
  store double %333, ptr %336, align 8, !tbaa !25
  %337 = add nuw nsw i64 %.10271, 1
  %.not.not221 = icmp slt i64 %337, %1
  br i1 %.not.not221, label %.lr.ph272, label %.loopexit247, !llvm.loop !48

.loopexit247:                                     ; preds = %._crit_edge269, %._crit_edge259, %.preheader246, %214, %._crit_edge276
  %338 = add nuw nsw i64 %.1278, 1
  %exitcond330.not = icmp eq i64 %338, %1
  br i1 %exitcond330.not, label %.loopexit235, label %214, !llvm.loop !49

.loopexit235:                                     ; preds = %.loopexit247, %.loopexit242, %._crit_edge314, %.loopexit, %6, %207, %78, %.preheader237, %.preheader, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #4
  ret void
}

declare void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

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

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

declare void @_ZN11alglib_impl16generaterotationEddPdS0_S0_PNS_8ae_stateE(double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 = !{!15, !7, i64 0}
!15 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !10, i64 16, !11, i64 24, !8, i64 56}
!16 = !{!7, !7, i64 0}
!17 = !{!8, !8, i64 0}
!18 = !{!10, !10, i64 0}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = !{!12, !12, i64 0}
!25 = !{!26, !26, i64 0}
!26 = !{!"double", !8, i64 0}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.unroll.disable"}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !30}
!34 = distinct !{!34, !22}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !22}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !22}
!40 = distinct !{!40, !22}
!41 = distinct !{!41, !22}
!42 = distinct !{!42, !30}
!43 = distinct !{!43, !22}
!44 = distinct !{!44, !22}
!45 = distinct !{!45, !30}
!46 = distinct !{!46, !22}
!47 = distinct !{!47, !22}
!48 = distinct !{!48, !22}
!49 = distinct !{!49, !22}


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