; LLVM IR from Dimandragon/non-parametric-dsp :: alglib-cpp/src (ap)

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

; 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

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef zeroext i1 @_ZN11alglib_impl23spchol_updatekernel4444EPNS_9ae_vectorEllllPKS0_lS3_S3_lPNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, ptr noundef %5, i64 noundef %6, ptr noundef %7, ptr noundef %8, i64 noundef %9, ptr noundef %10) #2 {
  %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 ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca double, align 8
  %46 = alloca double, align 8
  %47 = alloca double, align 8
  %48 = alloca double, align 8
  %49 = alloca double, align 8
  %50 = alloca i8, align 1
  store ptr %0, ptr %12, align 8, !tbaa !5
  store i64 %1, ptr %13, align 8, !tbaa !9
  store i64 %2, ptr %14, align 8, !tbaa !9
  store i64 %3, ptr %15, align 8, !tbaa !9
  store i64 %4, ptr %16, align 8, !tbaa !9
  store ptr %5, ptr %17, align 8, !tbaa !5
  store i64 %6, ptr %18, align 8, !tbaa !9
  store ptr %7, ptr %19, align 8, !tbaa !5
  store ptr %8, ptr %20, align 8, !tbaa !5
  store i64 %9, ptr %21, align 8, !tbaa !9
  store ptr %10, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #3
  %51 = load ptr, ptr %17, 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 !11
  %54 = load i64, ptr %18, align 8, !tbaa !9
  %55 = add nsw i64 %54, 0
  %56 = getelementptr inbounds double, ptr %53, i64 %55
  %57 = load double, ptr %56, align 8, !tbaa !12
  store double %57, ptr %26, align 8, !tbaa !12
  %58 = load ptr, ptr %17, align 8, !tbaa !5
  %59 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %58, i32 0, i32 4
  %60 = load ptr, ptr %59, align 8, !tbaa !11
  %61 = load i64, ptr %18, align 8, !tbaa !9
  %62 = add nsw i64 %61, 1
  %63 = getelementptr inbounds double, ptr %60, i64 %62
  %64 = load double, ptr %63, align 8, !tbaa !12
  store double %64, ptr %27, align 8, !tbaa !12
  %65 = load ptr, ptr %17, align 8, !tbaa !5
  %66 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %65, i32 0, i32 4
  %67 = load ptr, ptr %66, align 8, !tbaa !11
  %68 = load i64, ptr %18, align 8, !tbaa !9
  %69 = add nsw i64 %68, 2
  %70 = getelementptr inbounds double, ptr %67, i64 %69
  %71 = load double, ptr %70, align 8, !tbaa !12
  store double %71, ptr %28, align 8, !tbaa !12
  %72 = load ptr, ptr %17, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %72, i32 0, i32 4
  %74 = load ptr, ptr %73, align 8, !tbaa !11
  %75 = load i64, ptr %18, align 8, !tbaa !9
  %76 = add nsw i64 %75, 3
  %77 = getelementptr inbounds double, ptr %74, i64 %76
  %78 = load double, ptr %77, align 8, !tbaa !12
  store double %78, ptr %29, align 8, !tbaa !12
  %79 = load double, ptr %26, align 8, !tbaa !12
  %80 = load ptr, ptr %12, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %80, i32 0, i32 4
  %82 = load ptr, ptr %81, align 8, !tbaa !11
  %83 = load i64, ptr %15, align 8, !tbaa !9
  %84 = add nsw i64 %83, 0
  %85 = add nsw i64 %84, 0
  %86 = getelementptr inbounds double, ptr %82, i64 %85
  %87 = load double, ptr %86, align 8, !tbaa !12
  %88 = fmul double %79, %87
  store double %88, ptr %30, align 8, !tbaa !12
  %89 = load double, ptr %27, align 8, !tbaa !12
  %90 = load ptr, ptr %12, align 8, !tbaa !5
  %91 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %90, i32 0, i32 4
  %92 = load ptr, ptr %91, align 8, !tbaa !11
  %93 = load i64, ptr %15, align 8, !tbaa !9
  %94 = add nsw i64 %93, 0
  %95 = add nsw i64 %94, 1
  %96 = getelementptr inbounds double, ptr %92, i64 %95
  %97 = load double, ptr %96, align 8, !tbaa !12
  %98 = fmul double %89, %97
  store double %98, ptr %31, align 8, !tbaa !12
  %99 = load double, ptr %28, align 8, !tbaa !12
  %100 = load ptr, ptr %12, align 8, !tbaa !5
  %101 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %100, i32 0, i32 4
  %102 = load ptr, ptr %101, align 8, !tbaa !11
  %103 = load i64, ptr %15, align 8, !tbaa !9
  %104 = add nsw i64 %103, 0
  %105 = add nsw i64 %104, 2
  %106 = getelementptr inbounds double, ptr %102, i64 %105
  %107 = load double, ptr %106, align 8, !tbaa !12
  %108 = fmul double %99, %107
  store double %108, ptr %32, align 8, !tbaa !12
  %109 = load double, ptr %29, align 8, !tbaa !12
  %110 = load ptr, ptr %12, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %110, i32 0, i32 4
  %112 = load ptr, ptr %111, align 8, !tbaa !11
  %113 = load i64, ptr %15, align 8, !tbaa !9
  %114 = add nsw i64 %113, 0
  %115 = add nsw i64 %114, 3
  %116 = getelementptr inbounds double, ptr %112, i64 %115
  %117 = load double, ptr %116, align 8, !tbaa !12
  %118 = fmul double %109, %117
  store double %118, ptr %33, align 8, !tbaa !12
  %119 = load double, ptr %26, align 8, !tbaa !12
  %120 = load ptr, ptr %12, align 8, !tbaa !5
  %121 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %120, i32 0, i32 4
  %122 = load ptr, ptr %121, align 8, !tbaa !11
  %123 = load i64, ptr %15, align 8, !tbaa !9
  %124 = add nsw i64 %123, 4
  %125 = add nsw i64 %124, 0
  %126 = getelementptr inbounds double, ptr %122, i64 %125
  %127 = load double, ptr %126, align 8, !tbaa !12
  %128 = fmul double %119, %127
  store double %128, ptr %34, align 8, !tbaa !12
  %129 = load double, ptr %27, align 8, !tbaa !12
  %130 = load ptr, ptr %12, align 8, !tbaa !5
  %131 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %130, i32 0, i32 4
  %132 = load ptr, ptr %131, align 8, !tbaa !11
  %133 = load i64, ptr %15, align 8, !tbaa !9
  %134 = add nsw i64 %133, 4
  %135 = add nsw i64 %134, 1
  %136 = getelementptr inbounds double, ptr %132, i64 %135
  %137 = load double, ptr %136, align 8, !tbaa !12
  %138 = fmul double %129, %137
  store double %138, ptr %35, align 8, !tbaa !12
  %139 = load double, ptr %28, align 8, !tbaa !12
  %140 = load ptr, ptr %12, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %140, i32 0, i32 4
  %142 = load ptr, ptr %141, align 8, !tbaa !11
  %143 = load i64, ptr %15, align 8, !tbaa !9
  %144 = add nsw i64 %143, 4
  %145 = add nsw i64 %144, 2
  %146 = getelementptr inbounds double, ptr %142, i64 %145
  %147 = load double, ptr %146, align 8, !tbaa !12
  %148 = fmul double %139, %147
  store double %148, ptr %36, align 8, !tbaa !12
  %149 = load double, ptr %29, align 8, !tbaa !12
  %150 = load ptr, ptr %12, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %150, i32 0, i32 4
  %152 = load ptr, ptr %151, align 8, !tbaa !11
  %153 = load i64, ptr %15, align 8, !tbaa !9
  %154 = add nsw i64 %153, 4
  %155 = add nsw i64 %154, 3
  %156 = getelementptr inbounds double, ptr %152, i64 %155
  %157 = load double, ptr %156, align 8, !tbaa !12
  %158 = fmul double %149, %157
  store double %158, ptr %37, align 8, !tbaa !12
  %159 = load double, ptr %26, align 8, !tbaa !12
  %160 = load ptr, ptr %12, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %160, i32 0, i32 4
  %162 = load ptr, ptr %161, align 8, !tbaa !11
  %163 = load i64, ptr %15, align 8, !tbaa !9
  %164 = add nsw i64 %163, 8
  %165 = add nsw i64 %164, 0
  %166 = getelementptr inbounds double, ptr %162, i64 %165
  %167 = load double, ptr %166, align 8, !tbaa !12
  %168 = fmul double %159, %167
  store double %168, ptr %38, align 8, !tbaa !12
  %169 = load double, ptr %27, align 8, !tbaa !12
  %170 = load ptr, ptr %12, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %170, i32 0, i32 4
  %172 = load ptr, ptr %171, align 8, !tbaa !11
  %173 = load i64, ptr %15, align 8, !tbaa !9
  %174 = add nsw i64 %173, 8
  %175 = add nsw i64 %174, 1
  %176 = getelementptr inbounds double, ptr %172, i64 %175
  %177 = load double, ptr %176, align 8, !tbaa !12
  %178 = fmul double %169, %177
  store double %178, ptr %39, align 8, !tbaa !12
  %179 = load double, ptr %28, align 8, !tbaa !12
  %180 = load ptr, ptr %12, align 8, !tbaa !5
  %181 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %180, i32 0, i32 4
  %182 = load ptr, ptr %181, align 8, !tbaa !11
  %183 = load i64, ptr %15, align 8, !tbaa !9
  %184 = add nsw i64 %183, 8
  %185 = add nsw i64 %184, 2
  %186 = getelementptr inbounds double, ptr %182, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !12
  %188 = fmul double %179, %187
  store double %188, ptr %40, align 8, !tbaa !12
  %189 = load double, ptr %29, align 8, !tbaa !12
  %190 = load ptr, ptr %12, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %190, i32 0, i32 4
  %192 = load ptr, ptr %191, align 8, !tbaa !11
  %193 = load i64, ptr %15, align 8, !tbaa !9
  %194 = add nsw i64 %193, 8
  %195 = add nsw i64 %194, 3
  %196 = getelementptr inbounds double, ptr %192, i64 %195
  %197 = load double, ptr %196, align 8, !tbaa !12
  %198 = fmul double %189, %197
  store double %198, ptr %41, align 8, !tbaa !12
  %199 = load double, ptr %26, align 8, !tbaa !12
  %200 = load ptr, ptr %12, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %200, i32 0, i32 4
  %202 = load ptr, ptr %201, align 8, !tbaa !11
  %203 = load i64, ptr %15, align 8, !tbaa !9
  %204 = add nsw i64 %203, 12
  %205 = add nsw i64 %204, 0
  %206 = getelementptr inbounds double, ptr %202, i64 %205
  %207 = load double, ptr %206, align 8, !tbaa !12
  %208 = fmul double %199, %207
  store double %208, ptr %42, align 8, !tbaa !12
  %209 = load double, ptr %27, align 8, !tbaa !12
  %210 = load ptr, ptr %12, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %210, i32 0, i32 4
  %212 = load ptr, ptr %211, align 8, !tbaa !11
  %213 = load i64, ptr %15, align 8, !tbaa !9
  %214 = add nsw i64 %213, 12
  %215 = add nsw i64 %214, 1
  %216 = getelementptr inbounds double, ptr %212, i64 %215
  %217 = load double, ptr %216, align 8, !tbaa !12
  %218 = fmul double %209, %217
  store double %218, ptr %43, align 8, !tbaa !12
  %219 = load double, ptr %28, align 8, !tbaa !12
  %220 = load ptr, ptr %12, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %220, i32 0, i32 4
  %222 = load ptr, ptr %221, align 8, !tbaa !11
  %223 = load i64, ptr %15, align 8, !tbaa !9
  %224 = add nsw i64 %223, 12
  %225 = add nsw i64 %224, 2
  %226 = getelementptr inbounds double, ptr %222, i64 %225
  %227 = load double, ptr %226, align 8, !tbaa !12
  %228 = fmul double %219, %227
  store double %228, ptr %44, align 8, !tbaa !12
  %229 = load double, ptr %29, align 8, !tbaa !12
  %230 = load ptr, ptr %12, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %230, i32 0, i32 4
  %232 = load ptr, ptr %231, align 8, !tbaa !11
  %233 = load i64, ptr %15, align 8, !tbaa !9
  %234 = add nsw i64 %233, 12
  %235 = add nsw i64 %234, 3
  %236 = getelementptr inbounds double, ptr %232, i64 %235
  %237 = load double, ptr %236, align 8, !tbaa !12
  %238 = fmul double %229, %237
  store double %238, ptr %45, align 8, !tbaa !12
  %239 = load i64, ptr %14, align 8, !tbaa !9
  %240 = load i64, ptr %16, align 8, !tbaa !9
  %241 = icmp eq i64 %239, %240
  br i1 %241, label %242, label %405

242:                                              ; preds = %11
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %243

243:                                              ; preds = %401, %242
  %244 = load i64, ptr %23, align 8, !tbaa !9
  %245 = load i64, ptr %16, align 8, !tbaa !9
  %246 = sub nsw i64 %245, 1
  %247 = icmp sle i64 %244, %246
  br i1 %247, label %248, label %404

248:                                              ; preds = %243
  %249 = load i64, ptr %13, align 8, !tbaa !9
  %250 = load i64, ptr %23, align 8, !tbaa !9
  %251 = mul nsw i64 %250, 4
  %252 = add nsw i64 %249, %251
  store i64 %252, ptr %24, align 8, !tbaa !9
  %253 = load i64, ptr %15, align 8, !tbaa !9
  %254 = load i64, ptr %23, align 8, !tbaa !9
  %255 = mul nsw i64 %254, 4
  %256 = add nsw i64 %253, %255
  store i64 %256, ptr %25, align 8, !tbaa !9
  %257 = load ptr, ptr %12, align 8, !tbaa !5
  %258 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %257, i32 0, i32 4
  %259 = load ptr, ptr %258, align 8, !tbaa !11
  %260 = load i64, ptr %25, align 8, !tbaa !9
  %261 = add nsw i64 %260, 0
  %262 = getelementptr inbounds double, ptr %259, i64 %261
  %263 = load double, ptr %262, align 8, !tbaa !12
  store double %263, ptr %46, align 8, !tbaa !12
  %264 = load ptr, ptr %12, align 8, !tbaa !5
  %265 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %264, i32 0, i32 4
  %266 = load ptr, ptr %265, align 8, !tbaa !11
  %267 = load i64, ptr %25, align 8, !tbaa !9
  %268 = add nsw i64 %267, 1
  %269 = getelementptr inbounds double, ptr %266, i64 %268
  %270 = load double, ptr %269, align 8, !tbaa !12
  store double %270, ptr %47, align 8, !tbaa !12
  %271 = load ptr, ptr %12, align 8, !tbaa !5
  %272 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %271, i32 0, i32 4
  %273 = load ptr, ptr %272, align 8, !tbaa !11
  %274 = load i64, ptr %25, align 8, !tbaa !9
  %275 = add nsw i64 %274, 2
  %276 = getelementptr inbounds double, ptr %273, i64 %275
  %277 = load double, ptr %276, align 8, !tbaa !12
  store double %277, ptr %48, align 8, !tbaa !12
  %278 = load ptr, ptr %12, align 8, !tbaa !5
  %279 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %278, i32 0, i32 4
  %280 = load ptr, ptr %279, align 8, !tbaa !11
  %281 = load i64, ptr %25, align 8, !tbaa !9
  %282 = add nsw i64 %281, 3
  %283 = getelementptr inbounds double, ptr %280, i64 %282
  %284 = load double, ptr %283, align 8, !tbaa !12
  store double %284, ptr %49, align 8, !tbaa !12
  %285 = load ptr, ptr %12, align 8, !tbaa !5
  %286 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %285, i32 0, i32 4
  %287 = load ptr, ptr %286, align 8, !tbaa !11
  %288 = load i64, ptr %24, align 8, !tbaa !9
  %289 = add nsw i64 %288, 0
  %290 = getelementptr inbounds double, ptr %287, i64 %289
  %291 = load double, ptr %290, align 8, !tbaa !12
  %292 = load double, ptr %30, align 8, !tbaa !12
  %293 = load double, ptr %46, align 8, !tbaa !12
  %294 = fneg double %292
  %295 = call double @llvm.fmuladd.f64(double %294, double %293, double %291)
  %296 = load double, ptr %31, align 8, !tbaa !12
  %297 = load double, ptr %47, align 8, !tbaa !12
  %298 = fneg double %296
  %299 = call double @llvm.fmuladd.f64(double %298, double %297, double %295)
  %300 = load double, ptr %32, align 8, !tbaa !12
  %301 = load double, ptr %48, align 8, !tbaa !12
  %302 = fneg double %300
  %303 = call double @llvm.fmuladd.f64(double %302, double %301, double %299)
  %304 = load double, ptr %33, align 8, !tbaa !12
  %305 = load double, ptr %49, align 8, !tbaa !12
  %306 = fneg double %304
  %307 = call double @llvm.fmuladd.f64(double %306, double %305, double %303)
  %308 = load ptr, ptr %12, align 8, !tbaa !5
  %309 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %308, i32 0, i32 4
  %310 = load ptr, ptr %309, align 8, !tbaa !11
  %311 = load i64, ptr %24, align 8, !tbaa !9
  %312 = add nsw i64 %311, 0
  %313 = getelementptr inbounds double, ptr %310, i64 %312
  store double %307, ptr %313, align 8, !tbaa !12
  %314 = load ptr, ptr %12, align 8, !tbaa !5
  %315 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %314, i32 0, i32 4
  %316 = load ptr, ptr %315, align 8, !tbaa !11
  %317 = load i64, ptr %24, align 8, !tbaa !9
  %318 = add nsw i64 %317, 1
  %319 = getelementptr inbounds double, ptr %316, i64 %318
  %320 = load double, ptr %319, align 8, !tbaa !12
  %321 = load double, ptr %34, align 8, !tbaa !12
  %322 = load double, ptr %46, align 8, !tbaa !12
  %323 = fneg double %321
  %324 = call double @llvm.fmuladd.f64(double %323, double %322, double %320)
  %325 = load double, ptr %35, align 8, !tbaa !12
  %326 = load double, ptr %47, align 8, !tbaa !12
  %327 = fneg double %325
  %328 = call double @llvm.fmuladd.f64(double %327, double %326, double %324)
  %329 = load double, ptr %36, align 8, !tbaa !12
  %330 = load double, ptr %48, align 8, !tbaa !12
  %331 = fneg double %329
  %332 = call double @llvm.fmuladd.f64(double %331, double %330, double %328)
  %333 = load double, ptr %37, align 8, !tbaa !12
  %334 = load double, ptr %49, align 8, !tbaa !12
  %335 = fneg double %333
  %336 = call double @llvm.fmuladd.f64(double %335, double %334, double %332)
  %337 = load ptr, ptr %12, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %337, i32 0, i32 4
  %339 = load ptr, ptr %338, align 8, !tbaa !11
  %340 = load i64, ptr %24, align 8, !tbaa !9
  %341 = add nsw i64 %340, 1
  %342 = getelementptr inbounds double, ptr %339, i64 %341
  store double %336, ptr %342, align 8, !tbaa !12
  %343 = load ptr, ptr %12, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %343, i32 0, i32 4
  %345 = load ptr, ptr %344, align 8, !tbaa !11
  %346 = load i64, ptr %24, align 8, !tbaa !9
  %347 = add nsw i64 %346, 2
  %348 = getelementptr inbounds double, ptr %345, i64 %347
  %349 = load double, ptr %348, align 8, !tbaa !12
  %350 = load double, ptr %38, align 8, !tbaa !12
  %351 = load double, ptr %46, align 8, !tbaa !12
  %352 = fneg double %350
  %353 = call double @llvm.fmuladd.f64(double %352, double %351, double %349)
  %354 = load double, ptr %39, align 8, !tbaa !12
  %355 = load double, ptr %47, align 8, !tbaa !12
  %356 = fneg double %354
  %357 = call double @llvm.fmuladd.f64(double %356, double %355, double %353)
  %358 = load double, ptr %40, align 8, !tbaa !12
  %359 = load double, ptr %48, align 8, !tbaa !12
  %360 = fneg double %358
  %361 = call double @llvm.fmuladd.f64(double %360, double %359, double %357)
  %362 = load double, ptr %41, align 8, !tbaa !12
  %363 = load double, ptr %49, align 8, !tbaa !12
  %364 = fneg double %362
  %365 = call double @llvm.fmuladd.f64(double %364, double %363, double %361)
  %366 = load ptr, ptr %12, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %366, i32 0, i32 4
  %368 = load ptr, ptr %367, align 8, !tbaa !11
  %369 = load i64, ptr %24, align 8, !tbaa !9
  %370 = add nsw i64 %369, 2
  %371 = getelementptr inbounds double, ptr %368, i64 %370
  store double %365, ptr %371, align 8, !tbaa !12
  %372 = load ptr, ptr %12, align 8, !tbaa !5
  %373 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %372, i32 0, i32 4
  %374 = load ptr, ptr %373, align 8, !tbaa !11
  %375 = load i64, ptr %24, align 8, !tbaa !9
  %376 = add nsw i64 %375, 3
  %377 = getelementptr inbounds double, ptr %374, i64 %376
  %378 = load double, ptr %377, align 8, !tbaa !12
  %379 = load double, ptr %42, align 8, !tbaa !12
  %380 = load double, ptr %46, align 8, !tbaa !12
  %381 = fneg double %379
  %382 = call double @llvm.fmuladd.f64(double %381, double %380, double %378)
  %383 = load double, ptr %43, align 8, !tbaa !12
  %384 = load double, ptr %47, align 8, !tbaa !12
  %385 = fneg double %383
  %386 = call double @llvm.fmuladd.f64(double %385, double %384, double %382)
  %387 = load double, ptr %44, align 8, !tbaa !12
  %388 = load double, ptr %48, align 8, !tbaa !12
  %389 = fneg double %387
  %390 = call double @llvm.fmuladd.f64(double %389, double %388, double %386)
  %391 = load double, ptr %45, align 8, !tbaa !12
  %392 = load double, ptr %49, align 8, !tbaa !12
  %393 = fneg double %391
  %394 = call double @llvm.fmuladd.f64(double %393, double %392, double %390)
  %395 = load ptr, ptr %12, align 8, !tbaa !5
  %396 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %395, i32 0, i32 4
  %397 = load ptr, ptr %396, align 8, !tbaa !11
  %398 = load i64, ptr %24, align 8, !tbaa !9
  %399 = add nsw i64 %398, 3
  %400 = getelementptr inbounds double, ptr %397, i64 %399
  store double %394, ptr %400, align 8, !tbaa !12
  br label %401

401:                                              ; preds = %248
  %402 = load i64, ptr %23, align 8, !tbaa !9
  %403 = add nsw i64 %402, 1
  store i64 %403, ptr %23, align 8, !tbaa !9
  br label %243, !llvm.loop !14

404:                                              ; preds = %243
  br label %580

405:                                              ; preds = %11
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %406

406:                                              ; preds = %576, %405
  %407 = load i64, ptr %23, align 8, !tbaa !9
  %408 = load i64, ptr %16, align 8, !tbaa !9
  %409 = sub nsw i64 %408, 1
  %410 = icmp sle i64 %407, %409
  br i1 %410, label %411, label %579

411:                                              ; preds = %406
  %412 = load i64, ptr %13, align 8, !tbaa !9
  %413 = load ptr, ptr %19, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %413, i32 0, i32 4
  %415 = load ptr, ptr %414, align 8, !tbaa !11
  %416 = load ptr, ptr %20, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %416, i32 0, i32 4
  %418 = load ptr, ptr %417, align 8, !tbaa !11
  %419 = load i64, ptr %21, align 8, !tbaa !9
  %420 = load i64, ptr %23, align 8, !tbaa !9
  %421 = add nsw i64 %419, %420
  %422 = getelementptr inbounds i64, ptr %418, i64 %421
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = getelementptr inbounds i64, ptr %415, i64 %423
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = mul nsw i64 %425, 4
  %427 = add nsw i64 %412, %426
  store i64 %427, ptr %24, align 8, !tbaa !9
  %428 = load i64, ptr %15, align 8, !tbaa !9
  %429 = load i64, ptr %23, align 8, !tbaa !9
  %430 = mul nsw i64 %429, 4
  %431 = add nsw i64 %428, %430
  store i64 %431, ptr %25, align 8, !tbaa !9
  %432 = load ptr, ptr %12, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %432, i32 0, i32 4
  %434 = load ptr, ptr %433, align 8, !tbaa !11
  %435 = load i64, ptr %25, align 8, !tbaa !9
  %436 = add nsw i64 %435, 0
  %437 = getelementptr inbounds double, ptr %434, i64 %436
  %438 = load double, ptr %437, align 8, !tbaa !12
  store double %438, ptr %46, align 8, !tbaa !12
  %439 = load ptr, ptr %12, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %439, i32 0, i32 4
  %441 = load ptr, ptr %440, align 8, !tbaa !11
  %442 = load i64, ptr %25, align 8, !tbaa !9
  %443 = add nsw i64 %442, 1
  %444 = getelementptr inbounds double, ptr %441, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !12
  store double %445, ptr %47, align 8, !tbaa !12
  %446 = load ptr, ptr %12, align 8, !tbaa !5
  %447 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %446, i32 0, i32 4
  %448 = load ptr, ptr %447, align 8, !tbaa !11
  %449 = load i64, ptr %25, align 8, !tbaa !9
  %450 = add nsw i64 %449, 2
  %451 = getelementptr inbounds double, ptr %448, i64 %450
  %452 = load double, ptr %451, align 8, !tbaa !12
  store double %452, ptr %48, align 8, !tbaa !12
  %453 = load ptr, ptr %12, align 8, !tbaa !5
  %454 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %453, i32 0, i32 4
  %455 = load ptr, ptr %454, align 8, !tbaa !11
  %456 = load i64, ptr %25, align 8, !tbaa !9
  %457 = add nsw i64 %456, 3
  %458 = getelementptr inbounds double, ptr %455, i64 %457
  %459 = load double, ptr %458, align 8, !tbaa !12
  store double %459, ptr %49, align 8, !tbaa !12
  %460 = load ptr, ptr %12, align 8, !tbaa !5
  %461 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %460, i32 0, i32 4
  %462 = load ptr, ptr %461, align 8, !tbaa !11
  %463 = load i64, ptr %24, align 8, !tbaa !9
  %464 = add nsw i64 %463, 0
  %465 = getelementptr inbounds double, ptr %462, i64 %464
  %466 = load double, ptr %465, align 8, !tbaa !12
  %467 = load double, ptr %30, align 8, !tbaa !12
  %468 = load double, ptr %46, align 8, !tbaa !12
  %469 = fneg double %467
  %470 = call double @llvm.fmuladd.f64(double %469, double %468, double %466)
  %471 = load double, ptr %31, align 8, !tbaa !12
  %472 = load double, ptr %47, align 8, !tbaa !12
  %473 = fneg double %471
  %474 = call double @llvm.fmuladd.f64(double %473, double %472, double %470)
  %475 = load double, ptr %32, align 8, !tbaa !12
  %476 = load double, ptr %48, align 8, !tbaa !12
  %477 = fneg double %475
  %478 = call double @llvm.fmuladd.f64(double %477, double %476, double %474)
  %479 = load double, ptr %33, align 8, !tbaa !12
  %480 = load double, ptr %49, align 8, !tbaa !12
  %481 = fneg double %479
  %482 = call double @llvm.fmuladd.f64(double %481, double %480, double %478)
  %483 = load ptr, ptr %12, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %483, i32 0, i32 4
  %485 = load ptr, ptr %484, align 8, !tbaa !11
  %486 = load i64, ptr %24, align 8, !tbaa !9
  %487 = add nsw i64 %486, 0
  %488 = getelementptr inbounds double, ptr %485, i64 %487
  store double %482, ptr %488, align 8, !tbaa !12
  %489 = load ptr, ptr %12, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %489, i32 0, i32 4
  %491 = load ptr, ptr %490, align 8, !tbaa !11
  %492 = load i64, ptr %24, align 8, !tbaa !9
  %493 = add nsw i64 %492, 1
  %494 = getelementptr inbounds double, ptr %491, i64 %493
  %495 = load double, ptr %494, align 8, !tbaa !12
  %496 = load double, ptr %34, align 8, !tbaa !12
  %497 = load double, ptr %46, align 8, !tbaa !12
  %498 = fneg double %496
  %499 = call double @llvm.fmuladd.f64(double %498, double %497, double %495)
  %500 = load double, ptr %35, align 8, !tbaa !12
  %501 = load double, ptr %47, align 8, !tbaa !12
  %502 = fneg double %500
  %503 = call double @llvm.fmuladd.f64(double %502, double %501, double %499)
  %504 = load double, ptr %36, align 8, !tbaa !12
  %505 = load double, ptr %48, align 8, !tbaa !12
  %506 = fneg double %504
  %507 = call double @llvm.fmuladd.f64(double %506, double %505, double %503)
  %508 = load double, ptr %37, align 8, !tbaa !12
  %509 = load double, ptr %49, align 8, !tbaa !12
  %510 = fneg double %508
  %511 = call double @llvm.fmuladd.f64(double %510, double %509, double %507)
  %512 = load ptr, ptr %12, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %512, i32 0, i32 4
  %514 = load ptr, ptr %513, align 8, !tbaa !11
  %515 = load i64, ptr %24, align 8, !tbaa !9
  %516 = add nsw i64 %515, 1
  %517 = getelementptr inbounds double, ptr %514, i64 %516
  store double %511, ptr %517, align 8, !tbaa !12
  %518 = load ptr, ptr %12, align 8, !tbaa !5
  %519 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %518, i32 0, i32 4
  %520 = load ptr, ptr %519, align 8, !tbaa !11
  %521 = load i64, ptr %24, align 8, !tbaa !9
  %522 = add nsw i64 %521, 2
  %523 = getelementptr inbounds double, ptr %520, i64 %522
  %524 = load double, ptr %523, align 8, !tbaa !12
  %525 = load double, ptr %38, align 8, !tbaa !12
  %526 = load double, ptr %46, align 8, !tbaa !12
  %527 = fneg double %525
  %528 = call double @llvm.fmuladd.f64(double %527, double %526, double %524)
  %529 = load double, ptr %39, align 8, !tbaa !12
  %530 = load double, ptr %47, align 8, !tbaa !12
  %531 = fneg double %529
  %532 = call double @llvm.fmuladd.f64(double %531, double %530, double %528)
  %533 = load double, ptr %40, align 8, !tbaa !12
  %534 = load double, ptr %48, align 8, !tbaa !12
  %535 = fneg double %533
  %536 = call double @llvm.fmuladd.f64(double %535, double %534, double %532)
  %537 = load double, ptr %41, align 8, !tbaa !12
  %538 = load double, ptr %49, align 8, !tbaa !12
  %539 = fneg double %537
  %540 = call double @llvm.fmuladd.f64(double %539, double %538, double %536)
  %541 = load ptr, ptr %12, align 8, !tbaa !5
  %542 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %541, i32 0, i32 4
  %543 = load ptr, ptr %542, align 8, !tbaa !11
  %544 = load i64, ptr %24, align 8, !tbaa !9
  %545 = add nsw i64 %544, 2
  %546 = getelementptr inbounds double, ptr %543, i64 %545
  store double %540, ptr %546, align 8, !tbaa !12
  %547 = load ptr, ptr %12, align 8, !tbaa !5
  %548 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %547, i32 0, i32 4
  %549 = load ptr, ptr %548, align 8, !tbaa !11
  %550 = load i64, ptr %24, align 8, !tbaa !9
  %551 = add nsw i64 %550, 3
  %552 = getelementptr inbounds double, ptr %549, i64 %551
  %553 = load double, ptr %552, align 8, !tbaa !12
  %554 = load double, ptr %42, align 8, !tbaa !12
  %555 = load double, ptr %46, align 8, !tbaa !12
  %556 = fneg double %554
  %557 = call double @llvm.fmuladd.f64(double %556, double %555, double %553)
  %558 = load double, ptr %43, align 8, !tbaa !12
  %559 = load double, ptr %47, align 8, !tbaa !12
  %560 = fneg double %558
  %561 = call double @llvm.fmuladd.f64(double %560, double %559, double %557)
  %562 = load double, ptr %44, align 8, !tbaa !12
  %563 = load double, ptr %48, align 8, !tbaa !12
  %564 = fneg double %562
  %565 = call double @llvm.fmuladd.f64(double %564, double %563, double %561)
  %566 = load double, ptr %45, align 8, !tbaa !12
  %567 = load double, ptr %49, align 8, !tbaa !12
  %568 = fneg double %566
  %569 = call double @llvm.fmuladd.f64(double %568, double %567, double %565)
  %570 = load ptr, ptr %12, align 8, !tbaa !5
  %571 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %570, i32 0, i32 4
  %572 = load ptr, ptr %571, align 8, !tbaa !11
  %573 = load i64, ptr %24, align 8, !tbaa !9
  %574 = add nsw i64 %573, 3
  %575 = getelementptr inbounds double, ptr %572, i64 %574
  store double %569, ptr %575, align 8, !tbaa !12
  br label %576

576:                                              ; preds = %411
  %577 = load i64, ptr %23, align 8, !tbaa !9
  %578 = add nsw i64 %577, 1
  store i64 %578, ptr %23, align 8, !tbaa !9
  br label %406, !llvm.loop !16

579:                                              ; preds = %406
  br label %580

580:                                              ; preds = %579, %404
  store i8 1, ptr %50, align 1, !tbaa !17
  %581 = load i8, ptr %50, align 1, !tbaa !17, !range !19, !noundef !20
  %582 = trunc i8 %581 to i1
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  ret i1 %582
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { mustprogress nounwind 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 = { 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 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}
!17 = !{!18, !18, i64 0}
!18 = !{!"bool", !7, i64 0}
!19 = !{i8 0, i8 2}
!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"

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

; Function Attrs: mustprogress nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local noundef zeroext i1 @_ZN11alglib_impl23spchol_updatekernel4444EPNS_9ae_vectorEllllPKS0_lS3_S3_lPNS_8ae_stateE(ptr nocapture noundef readonly %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, i64 noundef %4, ptr nocapture noundef readonly %5, i64 noundef %6, ptr nocapture noundef readonly %7, ptr nocapture noundef readonly %8, i64 noundef %9, ptr nocapture noundef readnone %10) local_unnamed_addr #1 {
  %12 = getelementptr inbounds i8, ptr %5, i64 56
  %13 = load ptr, ptr %12, align 8, !tbaa !5
  %14 = getelementptr inbounds double, ptr %13, i64 %6
  %15 = load double, ptr %14, align 8, !tbaa !8
  %16 = getelementptr i8, ptr %14, i64 8
  %17 = load double, ptr %16, align 8, !tbaa !8
  %18 = getelementptr i8, ptr %14, i64 16
  %19 = load double, ptr %18, align 8, !tbaa !8
  %20 = getelementptr i8, ptr %14, i64 24
  %21 = load double, ptr %20, align 8, !tbaa !8
  %22 = getelementptr inbounds i8, ptr %0, i64 56
  %23 = load ptr, ptr %22, align 8, !tbaa !5
  %24 = getelementptr inbounds double, ptr %23, i64 %3
  %25 = load double, ptr %24, align 8, !tbaa !8
  %26 = fmul double %15, %25
  %27 = getelementptr i8, ptr %24, i64 8
  %28 = load double, ptr %27, align 8, !tbaa !8
  %29 = fmul double %17, %28
  %30 = getelementptr i8, ptr %24, i64 16
  %31 = load double, ptr %30, align 8, !tbaa !8
  %32 = fmul double %19, %31
  %33 = getelementptr i8, ptr %24, i64 24
  %34 = load double, ptr %33, align 8, !tbaa !8
  %35 = fmul double %21, %34
  %36 = getelementptr i8, ptr %24, i64 32
  %37 = load double, ptr %36, align 8, !tbaa !8
  %38 = fmul double %15, %37
  %39 = getelementptr i8, ptr %24, i64 40
  %40 = load double, ptr %39, align 8, !tbaa !8
  %41 = fmul double %17, %40
  %42 = getelementptr i8, ptr %24, i64 48
  %43 = load double, ptr %42, align 8, !tbaa !8
  %44 = fmul double %19, %43
  %45 = getelementptr i8, ptr %24, i64 56
  %46 = load double, ptr %45, align 8, !tbaa !8
  %47 = fmul double %21, %46
  %48 = getelementptr i8, ptr %24, i64 64
  %49 = load double, ptr %48, align 8, !tbaa !8
  %50 = fmul double %15, %49
  %51 = getelementptr i8, ptr %24, i64 72
  %52 = load double, ptr %51, align 8, !tbaa !8
  %53 = fmul double %17, %52
  %54 = getelementptr i8, ptr %24, i64 80
  %55 = load double, ptr %54, align 8, !tbaa !8
  %56 = fmul double %19, %55
  %57 = getelementptr i8, ptr %24, i64 88
  %58 = load double, ptr %57, align 8, !tbaa !8
  %59 = fmul double %21, %58
  %60 = getelementptr i8, ptr %24, i64 96
  %61 = load double, ptr %60, align 8, !tbaa !8
  %62 = fmul double %15, %61
  %63 = getelementptr i8, ptr %24, i64 104
  %64 = load double, ptr %63, align 8, !tbaa !8
  %65 = fmul double %17, %64
  %66 = getelementptr i8, ptr %24, i64 112
  %67 = load double, ptr %66, align 8, !tbaa !8
  %68 = fmul double %19, %67
  %69 = getelementptr i8, ptr %24, i64 120
  %70 = load double, ptr %69, align 8, !tbaa !8
  %71 = fmul double %21, %70
  %72 = icmp eq i64 %2, %4
  br i1 %72, label %.preheader, label %.preheader190

.preheader190:                                    ; preds = %11
  %.not.not192 = icmp sgt i64 %4, 0
  br i1 %.not.not192, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %.preheader190
  %73 = getelementptr inbounds i8, ptr %7, i64 56
  %74 = getelementptr inbounds i8, ptr %8, i64 56
  %75 = fneg double %26
  %76 = fneg double %29
  %77 = fneg double %32
  %78 = fneg double %35
  %79 = fneg double %38
  %80 = fneg double %41
  %81 = fneg double %44
  %82 = fneg double %47
  %83 = fneg double %50
  %84 = fneg double %53
  %85 = fneg double %56
  %86 = fneg double %59
  %87 = fneg double %62
  %88 = fneg double %65
  %89 = fneg double %68
  %90 = fneg double %71
  br label %151

.preheader:                                       ; preds = %11
  %.not.not189194 = icmp sgt i64 %2, 0
  br i1 %.not.not189194, label %.lr.ph196, label %.loopexit

.lr.ph196:                                        ; preds = %.preheader
  %91 = fneg double %26
  %92 = fneg double %29
  %93 = fneg double %32
  %94 = fneg double %35
  %95 = fneg double %38
  %96 = fneg double %41
  %97 = fneg double %44
  %98 = fneg double %47
  %99 = fneg double %50
  %100 = fneg double %53
  %101 = fneg double %56
  %102 = fneg double %59
  %103 = fneg double %62
  %104 = fneg double %65
  %105 = fneg double %68
  %106 = fneg double %71
  br label %107

107:                                              ; preds = %.lr.ph196, %107
  %.0195 = phi i64 [ 0, %.lr.ph196 ], [ %150, %107 ]
  %108 = shl nsw i64 %.0195, 2
  %109 = add nsw i64 %108, %1
  %110 = load ptr, ptr %22, align 8, !tbaa !5
  %111 = getelementptr double, ptr %110, i64 %108
  %112 = getelementptr double, ptr %111, i64 %3
  %113 = load double, ptr %112, align 8, !tbaa !8
  %114 = getelementptr i8, ptr %112, i64 8
  %115 = load double, ptr %114, align 8, !tbaa !8
  %116 = getelementptr i8, ptr %112, i64 16
  %117 = load double, ptr %116, align 8, !tbaa !8
  %118 = getelementptr i8, ptr %112, i64 24
  %119 = load double, ptr %118, align 8, !tbaa !8
  %120 = getelementptr inbounds double, ptr %110, i64 %109
  %121 = load double, ptr %120, align 8, !tbaa !8
  %122 = tail call double @llvm.fmuladd.f64(double %91, double %113, double %121)
  %123 = tail call double @llvm.fmuladd.f64(double %92, double %115, double %122)
  %124 = tail call double @llvm.fmuladd.f64(double %93, double %117, double %123)
  %125 = tail call double @llvm.fmuladd.f64(double %94, double %119, double %124)
  store double %125, ptr %120, align 8, !tbaa !8
  %126 = load ptr, ptr %22, align 8, !tbaa !5
  %127 = getelementptr double, ptr %126, i64 %109
  %128 = getelementptr i8, ptr %127, i64 8
  %129 = load double, ptr %128, align 8, !tbaa !8
  %130 = tail call double @llvm.fmuladd.f64(double %95, double %113, double %129)
  %131 = tail call double @llvm.fmuladd.f64(double %96, double %115, double %130)
  %132 = tail call double @llvm.fmuladd.f64(double %97, double %117, double %131)
  %133 = tail call double @llvm.fmuladd.f64(double %98, double %119, double %132)
  store double %133, ptr %128, align 8, !tbaa !8
  %134 = load ptr, ptr %22, align 8, !tbaa !5
  %135 = getelementptr double, ptr %134, i64 %109
  %136 = getelementptr i8, ptr %135, i64 16
  %137 = load double, ptr %136, align 8, !tbaa !8
  %138 = tail call double @llvm.fmuladd.f64(double %99, double %113, double %137)
  %139 = tail call double @llvm.fmuladd.f64(double %100, double %115, double %138)
  %140 = tail call double @llvm.fmuladd.f64(double %101, double %117, double %139)
  %141 = tail call double @llvm.fmuladd.f64(double %102, double %119, double %140)
  store double %141, ptr %136, align 8, !tbaa !8
  %142 = load ptr, ptr %22, align 8, !tbaa !5
  %143 = getelementptr double, ptr %142, i64 %109
  %144 = getelementptr i8, ptr %143, i64 24
  %145 = load double, ptr %144, align 8, !tbaa !8
  %146 = tail call double @llvm.fmuladd.f64(double %103, double %113, double %145)
  %147 = tail call double @llvm.fmuladd.f64(double %104, double %115, double %146)
  %148 = tail call double @llvm.fmuladd.f64(double %105, double %117, double %147)
  %149 = tail call double @llvm.fmuladd.f64(double %106, double %119, double %148)
  store double %149, ptr %144, align 8, !tbaa !8
  %150 = add nuw nsw i64 %.0195, 1
  %exitcond198.not = icmp eq i64 %150, %2
  br i1 %exitcond198.not, label %.loopexit, label %107, !llvm.loop !10

151:                                              ; preds = %.lr.ph, %151
  %.1193 = phi i64 [ 0, %.lr.ph ], [ %201, %151 ]
  %152 = load ptr, ptr %73, align 8, !tbaa !5
  %153 = load ptr, ptr %74, align 8, !tbaa !5
  %154 = getelementptr i64, ptr %153, i64 %.1193
  %155 = getelementptr i64, ptr %154, i64 %9
  %156 = load i64, ptr %155, align 8, !tbaa !12
  %157 = getelementptr inbounds i64, ptr %152, i64 %156
  %158 = load i64, ptr %157, align 8, !tbaa !12
  %159 = shl nsw i64 %158, 2
  %160 = add nsw i64 %159, %1
  %161 = load ptr, ptr %22, align 8, !tbaa !5
  %.idx = shl i64 %.1193, 5
  %162 = getelementptr i8, ptr %161, i64 %.idx
  %163 = getelementptr double, ptr %162, i64 %3
  %164 = load double, ptr %163, align 8, !tbaa !8
  %165 = getelementptr i8, ptr %163, i64 8
  %166 = load double, ptr %165, align 8, !tbaa !8
  %167 = getelementptr i8, ptr %163, i64 16
  %168 = load double, ptr %167, align 8, !tbaa !8
  %169 = getelementptr i8, ptr %163, i64 24
  %170 = load double, ptr %169, align 8, !tbaa !8
  %171 = getelementptr inbounds double, ptr %161, i64 %160
  %172 = load double, ptr %171, align 8, !tbaa !8
  %173 = tail call double @llvm.fmuladd.f64(double %75, double %164, double %172)
  %174 = tail call double @llvm.fmuladd.f64(double %76, double %166, double %173)
  %175 = tail call double @llvm.fmuladd.f64(double %77, double %168, double %174)
  %176 = tail call double @llvm.fmuladd.f64(double %78, double %170, double %175)
  store double %176, ptr %171, align 8, !tbaa !8
  %177 = load ptr, ptr %22, align 8, !tbaa !5
  %178 = getelementptr double, ptr %177, i64 %160
  %179 = getelementptr i8, ptr %178, i64 8
  %180 = load double, ptr %179, align 8, !tbaa !8
  %181 = tail call double @llvm.fmuladd.f64(double %79, double %164, double %180)
  %182 = tail call double @llvm.fmuladd.f64(double %80, double %166, double %181)
  %183 = tail call double @llvm.fmuladd.f64(double %81, double %168, double %182)
  %184 = tail call double @llvm.fmuladd.f64(double %82, double %170, double %183)
  store double %184, ptr %179, align 8, !tbaa !8
  %185 = load ptr, ptr %22, align 8, !tbaa !5
  %186 = getelementptr double, ptr %185, i64 %160
  %187 = getelementptr i8, ptr %186, i64 16
  %188 = load double, ptr %187, align 8, !tbaa !8
  %189 = tail call double @llvm.fmuladd.f64(double %83, double %164, double %188)
  %190 = tail call double @llvm.fmuladd.f64(double %84, double %166, double %189)
  %191 = tail call double @llvm.fmuladd.f64(double %85, double %168, double %190)
  %192 = tail call double @llvm.fmuladd.f64(double %86, double %170, double %191)
  store double %192, ptr %187, align 8, !tbaa !8
  %193 = load ptr, ptr %22, align 8, !tbaa !5
  %194 = getelementptr double, ptr %193, i64 %160
  %195 = getelementptr i8, ptr %194, i64 24
  %196 = load double, ptr %195, align 8, !tbaa !8
  %197 = tail call double @llvm.fmuladd.f64(double %87, double %164, double %196)
  %198 = tail call double @llvm.fmuladd.f64(double %88, double %166, double %197)
  %199 = tail call double @llvm.fmuladd.f64(double %89, double %168, double %198)
  %200 = tail call double @llvm.fmuladd.f64(double %90, double %170, double %199)
  store double %200, ptr %195, align 8, !tbaa !8
  %201 = add nuw nsw i64 %.1193, 1
  %exitcond.not = icmp eq i64 %201, %4
  br i1 %exitcond.not, label %.loopexit, label %151, !llvm.loop !14

.loopexit:                                        ; preds = %151, %107, %.preheader190, %.preheader
  ret i1 true
}

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { mustprogress nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) 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" }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"double", !6, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!13, !13, i64 0}
!13 = !{!"long", !6, i64 0}
!14 = distinct !{!14, !11}


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