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

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

%"struct.alglib_impl::ae_frame" = type { %"struct.alglib_impl::ae_dyn_block" }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%union.anon.0 = type { ptr }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%union.anon.1 = type { ptr }
%"struct.alglib_impl::spline1dinterpolant" = type { i8, i64, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::sparsematrix" = type { %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64, i64, i64, i64 }
%"struct.alglib_impl::spline2dxdesignmatrix" = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix" }
%"struct.alglib_impl::spline2dblockllsbuf" = type { %"struct.alglib_impl::linlsqrstate", %"struct.alglib_impl::linlsqrreport", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::linlsqrstate" = type { %"struct.alglib_impl::normestimatorstate", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, double, double, double, double, double, double, double, double, double, double, double, double, double, %"struct.alglib_impl::ae_vector", double, double, double, double, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, double, double, i64, i8, i8, i8, i8, i8, i8, i8, i64, i64, i64, i8, i8, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::rcommstate" }
%"struct.alglib_impl::normestimatorstate" = type { i64, i64, i64, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::hqrndstate", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i8, i8, double, %"struct.alglib_impl::rcommstate" }
%"struct.alglib_impl::hqrndstate" = type { i64, i64, i64 }
%"struct.alglib_impl::rcommstate" = type { i32, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::linlsqrreport" = type { i64, i64, i64 }
%"struct.alglib_impl::spline2dbuilder" = type { i64, double, i64, double, double, double, double, i64, i64, i64, double, i64, i64, double, %"struct.alglib_impl::ae_vector", i64, i64, double, double, i8, i64, i64, i64 }
%"struct.alglib_impl::spline2dinterpolant" = type { i64, i8, i64, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::spline2dfitreport" = type { double, double, double, double }

@.str.663 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.921 = external hidden unnamed_addr constant [29 x i8], align 1
@_ZN11alglib_implL26spline2d_lambdaregblockllsE = external hidden global double, align 8

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl25_spline1dinterpolant_initEPvPNS_8ae_stateEb(ptr noundef, ptr noundef, i1 noundef zeroext) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl18spline1dbuildcubicEPKNS_9ae_vectorES2_lldldPNS_19spline1dinterpolantEPNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, i64 noundef, double noundef, i64 noundef, double noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl11spline2dfitEPNS_15spline2dbuilderEPNS_19spline2dinterpolantEPNS_17spline2dfitreportEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) #3 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca %"struct.alglib_impl::ae_frame", align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca double, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca double, align 8
  %43 = alloca %"struct.alglib_impl::ae_vector", align 8
  %44 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %45 = alloca %"struct.alglib_impl::ae_vector", align 8
  %46 = alloca %"struct.alglib_impl::ae_vector", align 8
  %47 = alloca %"struct.alglib_impl::ae_vector", align 8
  %48 = alloca %"struct.alglib_impl::ae_vector", align 8
  %49 = alloca %"struct.alglib_impl::ae_vector", align 8
  %50 = alloca %"struct.alglib_impl::ae_vector", align 8
  %51 = alloca %"struct.alglib_impl::ae_vector", align 8
  %52 = alloca %"struct.alglib_impl::spline1dinterpolant", align 8
  %53 = alloca %"struct.alglib_impl::sparsematrix", align 8
  %54 = alloca %"struct.alglib_impl::sparsematrix", align 8
  %55 = alloca %"struct.alglib_impl::spline2dxdesignmatrix", align 8
  %56 = alloca %"struct.alglib_impl::ae_vector", align 8
  %57 = alloca %"struct.alglib_impl::spline2dblockllsbuf", align 8
  %58 = alloca i64, align 8
  %59 = alloca i64, align 8
  %60 = alloca i64, align 8
  %61 = alloca double, align 8
  %62 = alloca i64, align 8
  %63 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 80, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %47) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %48) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %49) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %50) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %51) #5
  call void @llvm.lifetime.start.p0(i64 160, ptr %52) #5
  call void @llvm.lifetime.start.p0(i64 368, ptr %53) #5
  call void @llvm.lifetime.start.p0(i64 368, ptr %54) #5
  call void @llvm.lifetime.start.p0(i64 496, ptr %55) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %56) #5
  call void @llvm.lifetime.start.p0(i64 2648, ptr %57) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #5
  %64 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %64, ptr noundef %9)
  call void @llvm.memset.p0.i64(ptr align 8 %43, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %44, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %45, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %46, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %47, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %48, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %49, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %50, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %51, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %52, i8 0, i64 160, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %53, i8 0, i64 368, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %54, i8 0, i64 368, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %55, i8 0, i64 496, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %56, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %57, i8 0, i64 2648, i1 false)
  %65 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl26_spline2dinterpolant_clearEPv(ptr noundef %65)
  %66 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl24_spline2dfitreport_clearEPv(ptr noundef %66)
  %67 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %43, i64 noundef 0, i64 noundef 3, ptr noundef %67, i1 noundef zeroext true)
  %68 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef %44, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %68, i1 noundef zeroext true)
  %69 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %45, i64 noundef 0, i64 noundef 3, ptr noundef %69, i1 noundef zeroext true)
  %70 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %46, i64 noundef 0, i64 noundef 3, ptr noundef %70, i1 noundef zeroext true)
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %47, i64 noundef 0, i64 noundef 3, ptr noundef %71, i1 noundef zeroext true)
  %72 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %48, i64 noundef 0, i64 noundef 3, ptr noundef %72, i1 noundef zeroext true)
  %73 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %49, i64 noundef 0, i64 noundef 3, ptr noundef %73, i1 noundef zeroext true)
  %74 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %50, i64 noundef 0, i64 noundef 2, ptr noundef %74, i1 noundef zeroext true)
  %75 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %51, i64 noundef 0, i64 noundef 2, ptr noundef %75, i1 noundef zeroext true)
  %76 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl25_spline1dinterpolant_initEPvPNS_8ae_stateEb(ptr noundef %52, ptr noundef %76, i1 noundef zeroext true)
  %77 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl18_sparsematrix_initEPvPNS_8ae_stateEb(ptr noundef %53, ptr noundef %77, i1 noundef zeroext true)
  %78 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl18_sparsematrix_initEPvPNS_8ae_stateEb(ptr noundef %54, ptr noundef %78, i1 noundef zeroext true)
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl27_spline2dxdesignmatrix_initEPvPNS_8ae_stateEb(ptr noundef %55, ptr noundef %79, i1 noundef zeroext true)
  %80 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %56, i64 noundef 0, i64 noundef 3, ptr noundef %80, i1 noundef zeroext true)
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl25_spline2dblockllsbuf_initEPvPNS_8ae_stateEb(ptr noundef %57, ptr noundef %81, i1 noundef zeroext true)
  store i64 4, ptr %25, align 8, !tbaa !9
  store i64 2, ptr %26, align 8, !tbaa !9
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %82, i32 0, i32 15
  %84 = load i64, ptr %83, align 8, !tbaa !11
  store i64 %84, ptr %27, align 8, !tbaa !9
  %85 = load ptr, ptr %5, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %85, i32 0, i32 16
  %87 = load i64, ptr %86, align 8, !tbaa !17
  store i64 %87, ptr %28, align 8, !tbaa !9
  %88 = load i64, ptr %28, align 8, !tbaa !9
  %89 = add nsw i64 2, %88
  store i64 %89, ptr %29, align 8, !tbaa !9
  %90 = load ptr, ptr %5, align 8, !tbaa !5
  %91 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %90, i32 0, i32 17
  %92 = load double, ptr %91, align 8, !tbaa !18
  %93 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %92, double noundef 1.000000e+00)
  %94 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %93, ptr noundef @.str.921, ptr noundef %94)
  %95 = load ptr, ptr %5, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %95, i32 0, i32 18
  %97 = load double, ptr %96, align 8, !tbaa !19
  %98 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %97, double noundef 1.000000e+00)
  %99 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %98, ptr noundef @.str.921, ptr noundef %99)
  store double 0.000000e+00, ptr %10, align 8, !tbaa !20
  store double 0.000000e+00, ptr %11, align 8, !tbaa !20
  store double 0.000000e+00, ptr %12, align 8, !tbaa !20
  store double 0.000000e+00, ptr %13, align 8, !tbaa !20
  %100 = load ptr, ptr %5, align 8, !tbaa !5
  %101 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %100, i32 0, i32 2
  %102 = load i64, ptr %101, align 8, !tbaa !21
  %103 = icmp eq i64 %102, 0
  br i1 %103, label %104, label %196

104:                                              ; preds = %4
  %105 = load i64, ptr %27, align 8, !tbaa !9
  %106 = icmp sgt i64 %105, 0
  br i1 %106, label %107, label %194

107:                                              ; preds = %104
  %108 = load ptr, ptr %5, align 8, !tbaa !5
  %109 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %108, i32 0, i32 14
  %110 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %109, i32 0, i32 4
  %111 = load ptr, ptr %110, align 8, !tbaa !22
  %112 = getelementptr inbounds double, ptr %111, i64 0
  %113 = load double, ptr %112, align 8, !tbaa !20
  store double %113, ptr %10, align 8, !tbaa !20
  %114 = load ptr, ptr %5, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %114, i32 0, i32 14
  %116 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %115, i32 0, i32 4
  %117 = load ptr, ptr %116, align 8, !tbaa !22
  %118 = getelementptr inbounds double, ptr %117, i64 0
  %119 = load double, ptr %118, align 8, !tbaa !20
  store double %119, ptr %11, align 8, !tbaa !20
  %120 = load ptr, ptr %5, align 8, !tbaa !5
  %121 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %120, i32 0, i32 14
  %122 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %121, i32 0, i32 4
  %123 = load ptr, ptr %122, align 8, !tbaa !22
  %124 = getelementptr inbounds double, ptr %123, i64 1
  %125 = load double, ptr %124, align 8, !tbaa !20
  store double %125, ptr %12, align 8, !tbaa !20
  %126 = load ptr, ptr %5, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %126, i32 0, i32 14
  %128 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %127, i32 0, i32 4
  %129 = load ptr, ptr %128, align 8, !tbaa !22
  %130 = getelementptr inbounds double, ptr %129, i64 1
  %131 = load double, ptr %130, align 8, !tbaa !20
  store double %131, ptr %13, align 8, !tbaa !20
  store i64 1, ptr %30, align 8, !tbaa !9
  br label %132

132:                                              ; preds = %190, %107
  %133 = load i64, ptr %30, align 8, !tbaa !9
  %134 = load i64, ptr %27, align 8, !tbaa !9
  %135 = sub nsw i64 %134, 1
  %136 = icmp sle i64 %133, %135
  br i1 %136, label %137, label %193

137:                                              ; preds = %132
  %138 = load double, ptr %10, align 8, !tbaa !20
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %139, i32 0, i32 14
  %141 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %140, i32 0, i32 4
  %142 = load ptr, ptr %141, align 8, !tbaa !22
  %143 = load i64, ptr %30, align 8, !tbaa !9
  %144 = load i64, ptr %29, align 8, !tbaa !9
  %145 = mul nsw i64 %143, %144
  %146 = add nsw i64 %145, 0
  %147 = getelementptr inbounds double, ptr %142, i64 %146
  %148 = load double, ptr %147, align 8, !tbaa !20
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %138, double noundef %148, ptr noundef %149)
  store double %150, ptr %10, align 8, !tbaa !20
  %151 = load double, ptr %11, align 8, !tbaa !20
  %152 = load ptr, ptr %5, align 8, !tbaa !5
  %153 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %152, i32 0, i32 14
  %154 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %153, i32 0, i32 4
  %155 = load ptr, ptr %154, align 8, !tbaa !22
  %156 = load i64, ptr %30, align 8, !tbaa !9
  %157 = load i64, ptr %29, align 8, !tbaa !9
  %158 = mul nsw i64 %156, %157
  %159 = add nsw i64 %158, 0
  %160 = getelementptr inbounds double, ptr %155, i64 %159
  %161 = load double, ptr %160, align 8, !tbaa !20
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %151, double noundef %161, ptr noundef %162)
  store double %163, ptr %11, align 8, !tbaa !20
  %164 = load double, ptr %12, align 8, !tbaa !20
  %165 = load ptr, ptr %5, align 8, !tbaa !5
  %166 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %165, i32 0, i32 14
  %167 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %166, i32 0, i32 4
  %168 = load ptr, ptr %167, align 8, !tbaa !22
  %169 = load i64, ptr %30, align 8, !tbaa !9
  %170 = load i64, ptr %29, align 8, !tbaa !9
  %171 = mul nsw i64 %169, %170
  %172 = add nsw i64 %171, 1
  %173 = getelementptr inbounds double, ptr %168, i64 %172
  %174 = load double, ptr %173, align 8, !tbaa !20
  %175 = load ptr, ptr %8, align 8, !tbaa !5
  %176 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %164, double noundef %174, ptr noundef %175)
  store double %176, ptr %12, align 8, !tbaa !20
  %177 = load double, ptr %13, align 8, !tbaa !20
  %178 = load ptr, ptr %5, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %178, i32 0, i32 14
  %180 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %179, i32 0, i32 4
  %181 = load ptr, ptr %180, align 8, !tbaa !22
  %182 = load i64, ptr %30, align 8, !tbaa !9
  %183 = load i64, ptr %29, align 8, !tbaa !9
  %184 = mul nsw i64 %182, %183
  %185 = add nsw i64 %184, 1
  %186 = getelementptr inbounds double, ptr %181, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !20
  %188 = load ptr, ptr %8, align 8, !tbaa !5
  %189 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %177, double noundef %187, ptr noundef %188)
  store double %189, ptr %13, align 8, !tbaa !20
  br label %190

190:                                              ; preds = %137
  %191 = load i64, ptr %30, align 8, !tbaa !9
  %192 = add nsw i64 %191, 1
  store i64 %192, ptr %30, align 8, !tbaa !9
  br label %132, !llvm.loop !23

193:                                              ; preds = %132
  br label %195

194:                                              ; preds = %104
  store double -1.000000e+00, ptr %10, align 8, !tbaa !20
  store double 1.000000e+00, ptr %11, align 8, !tbaa !20
  store double -1.000000e+00, ptr %12, align 8, !tbaa !20
  store double 1.000000e+00, ptr %13, align 8, !tbaa !20
  br label %195

195:                                              ; preds = %194, %193
  br label %217

196:                                              ; preds = %4
  %197 = load ptr, ptr %5, align 8, !tbaa !5
  %198 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %197, i32 0, i32 2
  %199 = load i64, ptr %198, align 8, !tbaa !21
  %200 = icmp eq i64 %199, 1
  br i1 %200, label %201, label %214

201:                                              ; preds = %196
  %202 = load ptr, ptr %5, align 8, !tbaa !5
  %203 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %202, i32 0, i32 3
  %204 = load double, ptr %203, align 8, !tbaa !25
  store double %204, ptr %10, align 8, !tbaa !20
  %205 = load ptr, ptr %5, align 8, !tbaa !5
  %206 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %205, i32 0, i32 4
  %207 = load double, ptr %206, align 8, !tbaa !26
  store double %207, ptr %11, align 8, !tbaa !20
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %208, i32 0, i32 5
  %210 = load double, ptr %209, align 8, !tbaa !27
  store double %210, ptr %12, align 8, !tbaa !20
  %211 = load ptr, ptr %5, align 8, !tbaa !5
  %212 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %211, i32 0, i32 6
  %213 = load double, ptr %212, align 8, !tbaa !28
  store double %213, ptr %13, align 8, !tbaa !20
  br label %216

214:                                              ; preds = %196
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.663, ptr noundef %215)
  br label %216

216:                                              ; preds = %214, %201
  br label %217

217:                                              ; preds = %216, %195
  %218 = load double, ptr %10, align 8, !tbaa !20
  %219 = load double, ptr %11, align 8, !tbaa !20
  %220 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %218, double noundef %219)
  br i1 %220, label %221, label %238

221:                                              ; preds = %217
  %222 = load double, ptr %10, align 8, !tbaa !20
  store double %222, ptr %33, align 8, !tbaa !20
  %223 = load double, ptr %33, align 8, !tbaa !20
  %224 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %223, double noundef 0.000000e+00)
  br i1 %224, label %225, label %231

225:                                              ; preds = %221
  %226 = load double, ptr %33, align 8, !tbaa !20
  %227 = fdiv double %226, 2.000000e+00
  %228 = fsub double %227, 1.000000e+00
  store double %228, ptr %10, align 8, !tbaa !20
  %229 = load double, ptr %33, align 8, !tbaa !20
  %230 = call double @llvm.fmuladd.f64(double %229, double 2.000000e+00, double 1.000000e+00)
  store double %230, ptr %11, align 8, !tbaa !20
  br label %237

231:                                              ; preds = %221
  %232 = load double, ptr %33, align 8, !tbaa !20
  %233 = call double @llvm.fmuladd.f64(double %232, double 2.000000e+00, double -1.000000e+00)
  store double %233, ptr %10, align 8, !tbaa !20
  %234 = load double, ptr %33, align 8, !tbaa !20
  %235 = fdiv double %234, 2.000000e+00
  %236 = fadd double %235, 1.000000e+00
  store double %236, ptr %11, align 8, !tbaa !20
  br label %237

237:                                              ; preds = %231, %225
  br label %238

238:                                              ; preds = %237, %217
  %239 = load double, ptr %12, align 8, !tbaa !20
  %240 = load double, ptr %13, align 8, !tbaa !20
  %241 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %239, double noundef %240)
  br i1 %241, label %242, label %259

242:                                              ; preds = %238
  %243 = load double, ptr %12, align 8, !tbaa !20
  store double %243, ptr %33, align 8, !tbaa !20
  %244 = load double, ptr %33, align 8, !tbaa !20
  %245 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %244, double noundef 0.000000e+00)
  br i1 %245, label %246, label %252

246:                                              ; preds = %242
  %247 = load double, ptr %33, align 8, !tbaa !20
  %248 = fdiv double %247, 2.000000e+00
  %249 = fsub double %248, 1.000000e+00
  store double %249, ptr %12, align 8, !tbaa !20
  %250 = load double, ptr %33, align 8, !tbaa !20
  %251 = call double @llvm.fmuladd.f64(double %250, double 2.000000e+00, double 1.000000e+00)
  store double %251, ptr %13, align 8, !tbaa !20
  br label %258

252:                                              ; preds = %242
  %253 = load double, ptr %33, align 8, !tbaa !20
  %254 = call double @llvm.fmuladd.f64(double %253, double 2.000000e+00, double -1.000000e+00)
  store double %254, ptr %12, align 8, !tbaa !20
  %255 = load double, ptr %33, align 8, !tbaa !20
  %256 = fdiv double %255, 2.000000e+00
  %257 = fadd double %256, 1.000000e+00
  store double %257, ptr %13, align 8, !tbaa !20
  br label %258

258:                                              ; preds = %252, %246
  br label %259

259:                                              ; preds = %258, %238
  %260 = load double, ptr %10, align 8, !tbaa !20
  %261 = load double, ptr %11, align 8, !tbaa !20
  %262 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %260, double noundef %261)
  %263 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %262, ptr noundef @.str.921, ptr noundef %263)
  %264 = load double, ptr %12, align 8, !tbaa !20
  %265 = load double, ptr %13, align 8, !tbaa !20
  %266 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %264, double noundef %265)
  %267 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %266, ptr noundef @.str.921, ptr noundef %267)
  store i64 0, ptr %18, align 8, !tbaa !9
  store i64 0, ptr %19, align 8, !tbaa !9
  %268 = load ptr, ptr %5, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %268, i32 0, i32 7
  %270 = load i64, ptr %269, align 8, !tbaa !29
  %271 = icmp eq i64 %270, 0
  br i1 %271, label %272, label %273

272:                                              ; preds = %259
  store i64 4, ptr %18, align 8, !tbaa !9
  store i64 4, ptr %19, align 8, !tbaa !9
  br label %288

273:                                              ; preds = %259
  %274 = load ptr, ptr %5, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %274, i32 0, i32 7
  %276 = load i64, ptr %275, align 8, !tbaa !29
  %277 = icmp eq i64 %276, 1
  br i1 %277, label %278, label %285

278:                                              ; preds = %273
  %279 = load ptr, ptr %5, align 8, !tbaa !5
  %280 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %279, i32 0, i32 8
  %281 = load i64, ptr %280, align 8, !tbaa !30
  store i64 %281, ptr %18, align 8, !tbaa !9
  %282 = load ptr, ptr %5, align 8, !tbaa !5
  %283 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %282, i32 0, i32 9
  %284 = load i64, ptr %283, align 8, !tbaa !31
  store i64 %284, ptr %19, align 8, !tbaa !9
  br label %287

285:                                              ; preds = %273
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.663, ptr noundef %286)
  br label %287

287:                                              ; preds = %285, %278
  br label %288

288:                                              ; preds = %287, %272
  %289 = load i64, ptr %18, align 8, !tbaa !9
  %290 = icmp sgt i64 %289, 0
  %291 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %290, ptr noundef @.str.921, ptr noundef %291)
  %292 = load i64, ptr %19, align 8, !tbaa !9
  %293 = icmp sgt i64 %292, 0
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %293, ptr noundef @.str.921, ptr noundef %294)
  store i64 -1, ptr %40, align 8, !tbaa !9
  store i64 -1, ptr %41, align 8, !tbaa !9
  %295 = load ptr, ptr %5, align 8, !tbaa !5
  %296 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %295, i32 0, i32 12
  %297 = load i64, ptr %296, align 8, !tbaa !32
  %298 = icmp eq i64 %297, 3
  br i1 %298, label %299, label %407

299:                                              ; preds = %288
  %300 = load i64, ptr %18, align 8, !tbaa !9
  %301 = load i64, ptr %25, align 8, !tbaa !9
  %302 = load ptr, ptr %8, align 8, !tbaa !5
  %303 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %300, i64 noundef %301, ptr noundef %302)
  store i64 %303, ptr %18, align 8, !tbaa !9
  %304 = load i64, ptr %19, align 8, !tbaa !9
  %305 = load i64, ptr %25, align 8, !tbaa !9
  %306 = load ptr, ptr %8, align 8, !tbaa !5
  %307 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %304, i64 noundef %305, ptr noundef %306)
  store i64 %307, ptr %19, align 8, !tbaa !9
  store i64 1, ptr %32, align 8, !tbaa !9
  br label %308

308:                                              ; preds = %318, %299
  %309 = load i64, ptr %18, align 8, !tbaa !9
  %310 = load i64, ptr %19, align 8, !tbaa !9
  %311 = load ptr, ptr %8, align 8, !tbaa !5
  %312 = call noundef i64 @_ZN11alglib_impl5imin2EllPNS_8ae_stateE(i64 noundef %309, i64 noundef %310, ptr noundef %311)
  %313 = load ptr, ptr %5, align 8, !tbaa !5
  %314 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %313, i32 0, i32 22
  %315 = load i64, ptr %314, align 8, !tbaa !33
  %316 = add nsw i64 %315, 1
  %317 = icmp sgt i64 %312, %316
  br i1 %317, label %318, label %331

318:                                              ; preds = %308
  %319 = load i64, ptr %18, align 8, !tbaa !9
  %320 = sub nsw i64 %319, 1
  %321 = load ptr, ptr %8, align 8, !tbaa !5
  %322 = call noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef %320, i64 noundef 2, ptr noundef %321)
  %323 = add nsw i64 %322, 1
  store i64 %323, ptr %18, align 8, !tbaa !9
  %324 = load i64, ptr %19, align 8, !tbaa !9
  %325 = sub nsw i64 %324, 1
  %326 = load ptr, ptr %8, align 8, !tbaa !5
  %327 = call noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef %325, i64 noundef 2, ptr noundef %326)
  %328 = add nsw i64 %327, 1
  store i64 %328, ptr %19, align 8, !tbaa !9
  %329 = load i64, ptr %32, align 8, !tbaa !9
  %330 = add nsw i64 %329, 1
  store i64 %330, ptr %32, align 8, !tbaa !9
  br label %308, !llvm.loop !34

331:                                              ; preds = %308
  %332 = load i64, ptr %18, align 8, !tbaa !9
  %333 = sub nsw i64 %332, 1
  store i64 %333, ptr %40, align 8, !tbaa !9
  store i64 1, ptr %34, align 8, !tbaa !9
  br label %334

334:                                              ; preds = %341, %331
  %335 = load i64, ptr %18, align 8, !tbaa !9
  %336 = load ptr, ptr %5, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %336, i32 0, i32 22
  %338 = load i64, ptr %337, align 8, !tbaa !33
  %339 = add nsw i64 %338, 1
  %340 = icmp sgt i64 %335, %339
  br i1 %340, label %341, label %350

341:                                              ; preds = %334
  %342 = load i64, ptr %18, align 8, !tbaa !9
  %343 = sub nsw i64 %342, 1
  %344 = load ptr, ptr %8, align 8, !tbaa !5
  %345 = call noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef %343, i64 noundef 2, ptr noundef %344)
  store i64 %345, ptr %40, align 8, !tbaa !9
  %346 = load i64, ptr %40, align 8, !tbaa !9
  %347 = add nsw i64 %346, 1
  store i64 %347, ptr %18, align 8, !tbaa !9
  %348 = load i64, ptr %34, align 8, !tbaa !9
  %349 = add nsw i64 %348, 1
  store i64 %349, ptr %34, align 8, !tbaa !9
  br label %334, !llvm.loop !35

350:                                              ; preds = %334
  br label %351

351:                                              ; preds = %354, %350
  %352 = load i64, ptr %34, align 8, !tbaa !9
  %353 = icmp sgt i64 %352, 1
  br i1 %353, label %354, label %361

354:                                              ; preds = %351
  %355 = load i64, ptr %18, align 8, !tbaa !9
  %356 = sub nsw i64 %355, 1
  %357 = mul nsw i64 %356, 2
  %358 = add nsw i64 %357, 1
  store i64 %358, ptr %18, align 8, !tbaa !9
  %359 = load i64, ptr %34, align 8, !tbaa !9
  %360 = sub nsw i64 %359, 1
  store i64 %360, ptr %34, align 8, !tbaa !9
  br label %351, !llvm.loop !36

361:                                              ; preds = %351
  %362 = load i64, ptr %19, align 8, !tbaa !9
  %363 = sub nsw i64 %362, 1
  store i64 %363, ptr %41, align 8, !tbaa !9
  store i64 1, ptr %35, align 8, !tbaa !9
  br label %364

364:                                              ; preds = %371, %361
  %365 = load i64, ptr %19, align 8, !tbaa !9
  %366 = load ptr, ptr %5, align 8, !tbaa !5
  %367 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %366, i32 0, i32 22
  %368 = load i64, ptr %367, align 8, !tbaa !33
  %369 = add nsw i64 %368, 1
  %370 = icmp sgt i64 %365, %369
  br i1 %370, label %371, label %380

371:                                              ; preds = %364
  %372 = load i64, ptr %19, align 8, !tbaa !9
  %373 = sub nsw i64 %372, 1
  %374 = load ptr, ptr %8, align 8, !tbaa !5
  %375 = call noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef %373, i64 noundef 2, ptr noundef %374)
  store i64 %375, ptr %41, align 8, !tbaa !9
  %376 = load i64, ptr %41, align 8, !tbaa !9
  %377 = add nsw i64 %376, 1
  store i64 %377, ptr %19, align 8, !tbaa !9
  %378 = load i64, ptr %35, align 8, !tbaa !9
  %379 = add nsw i64 %378, 1
  store i64 %379, ptr %35, align 8, !tbaa !9
  br label %364, !llvm.loop !37

380:                                              ; preds = %364
  br label %381

381:                                              ; preds = %384, %380
  %382 = load i64, ptr %35, align 8, !tbaa !9
  %383 = icmp sgt i64 %382, 1
  br i1 %383, label %384, label %391

384:                                              ; preds = %381
  %385 = load i64, ptr %19, align 8, !tbaa !9
  %386 = sub nsw i64 %385, 1
  %387 = mul nsw i64 %386, 2
  %388 = add nsw i64 %387, 1
  store i64 %388, ptr %19, align 8, !tbaa !9
  %389 = load i64, ptr %35, align 8, !tbaa !9
  %390 = sub nsw i64 %389, 1
  store i64 %390, ptr %35, align 8, !tbaa !9
  br label %381, !llvm.loop !38

391:                                              ; preds = %381
  br label %392

392:                                              ; preds = %395, %391
  %393 = load i64, ptr %32, align 8, !tbaa !9
  %394 = icmp sgt i64 %393, 1
  br i1 %394, label %395, label %406

395:                                              ; preds = %392
  %396 = load i64, ptr %18, align 8, !tbaa !9
  %397 = sub nsw i64 %396, 1
  %398 = mul nsw i64 %397, 2
  %399 = add nsw i64 %398, 1
  store i64 %399, ptr %18, align 8, !tbaa !9
  %400 = load i64, ptr %19, align 8, !tbaa !9
  %401 = sub nsw i64 %400, 1
  %402 = mul nsw i64 %401, 2
  %403 = add nsw i64 %402, 1
  store i64 %403, ptr %19, align 8, !tbaa !9
  %404 = load i64, ptr %32, align 8, !tbaa !9
  %405 = sub nsw i64 %404, 1
  store i64 %405, ptr %32, align 8, !tbaa !9
  br label %392, !llvm.loop !39

406:                                              ; preds = %392
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %423

407:                                              ; preds = %288
  %408 = load i64, ptr %18, align 8, !tbaa !9
  %409 = load i64, ptr %25, align 8, !tbaa !9
  %410 = load ptr, ptr %8, align 8, !tbaa !5
  %411 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %408, i64 noundef %409, ptr noundef %410)
  store i64 %411, ptr %18, align 8, !tbaa !9
  %412 = load i64, ptr %19, align 8, !tbaa !9
  %413 = load i64, ptr %25, align 8, !tbaa !9
  %414 = load ptr, ptr %8, align 8, !tbaa !5
  %415 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %412, i64 noundef %413, ptr noundef %414)
  store i64 %415, ptr %19, align 8, !tbaa !9
  %416 = load ptr, ptr %5, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %416, i32 0, i32 19
  %418 = load i8, ptr %417, align 8, !tbaa !40, !range !41, !noundef !42
  %419 = trunc i8 %418 to i1
  br i1 %419, label %420, label %421

420:                                              ; preds = %407
  store i64 1, ptr %24, align 8, !tbaa !9
  br label %422

421:                                              ; preds = %407
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %422

422:                                              ; preds = %421, %420
  br label %423

423:                                              ; preds = %422, %406
  %424 = load double, ptr %11, align 8, !tbaa !20
  %425 = load double, ptr %10, align 8, !tbaa !20
  %426 = fsub double %424, %425
  %427 = load ptr, ptr %8, align 8, !tbaa !5
  %428 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %426, double noundef 1.000000e+00, ptr noundef %427)
  %429 = load i64, ptr %18, align 8, !tbaa !9
  %430 = sub nsw i64 %429, 1
  %431 = sitofp i64 %430 to double
  %432 = fdiv double %428, %431
  store double %432, ptr %20, align 8, !tbaa !20
  %433 = load double, ptr %13, align 8, !tbaa !20
  %434 = load double, ptr %12, align 8, !tbaa !20
  %435 = fsub double %433, %434
  %436 = load ptr, ptr %8, align 8, !tbaa !5
  %437 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %435, double noundef 1.000000e+00, ptr noundef %436)
  %438 = load i64, ptr %19, align 8, !tbaa !9
  %439 = sub nsw i64 %438, 1
  %440 = sitofp i64 %439 to double
  %441 = fdiv double %437, %440
  store double %441, ptr %21, align 8, !tbaa !20
  %442 = load double, ptr %20, align 8, !tbaa !20
  %443 = fdiv double 1.000000e+00, %442
  store double %443, ptr %22, align 8, !tbaa !20
  %444 = load double, ptr %21, align 8, !tbaa !20
  %445 = fdiv double 1.000000e+00, %444
  store double %445, ptr %23, align 8, !tbaa !20
  %446 = load double, ptr %10, align 8, !tbaa !20
  store double %446, ptr %14, align 8, !tbaa !20
  %447 = load double, ptr %12, align 8, !tbaa !20
  store double %447, ptr %16, align 8, !tbaa !20
  %448 = load double, ptr %11, align 8, !tbaa !20
  store double %448, ptr %15, align 8, !tbaa !20
  %449 = load double, ptr %13, align 8, !tbaa !20
  store double %449, ptr %17, align 8, !tbaa !20
  %450 = load double, ptr %10, align 8, !tbaa !20
  %451 = load double, ptr %20, align 8, !tbaa !20
  %452 = load i64, ptr %24, align 8, !tbaa !9
  %453 = sitofp i64 %452 to double
  %454 = fneg double %451
  %455 = call double @llvm.fmuladd.f64(double %454, double %453, double %450)
  store double %455, ptr %10, align 8, !tbaa !20
  %456 = load double, ptr %12, align 8, !tbaa !20
  %457 = load double, ptr %21, align 8, !tbaa !20
  %458 = load i64, ptr %24, align 8, !tbaa !9
  %459 = sitofp i64 %458 to double
  %460 = fneg double %457
  %461 = call double @llvm.fmuladd.f64(double %460, double %459, double %456)
  store double %461, ptr %12, align 8, !tbaa !20
  %462 = load double, ptr %11, align 8, !tbaa !20
  %463 = load double, ptr %20, align 8, !tbaa !20
  %464 = load i64, ptr %24, align 8, !tbaa !9
  %465 = sitofp i64 %464 to double
  %466 = call double @llvm.fmuladd.f64(double %463, double %465, double %462)
  store double %466, ptr %11, align 8, !tbaa !20
  %467 = load double, ptr %13, align 8, !tbaa !20
  %468 = load double, ptr %21, align 8, !tbaa !20
  %469 = load i64, ptr %24, align 8, !tbaa !9
  %470 = sitofp i64 %469 to double
  %471 = call double @llvm.fmuladd.f64(double %468, double %470, double %467)
  store double %471, ptr %13, align 8, !tbaa !20
  %472 = load i64, ptr %18, align 8, !tbaa !9
  %473 = load i64, ptr %24, align 8, !tbaa !9
  %474 = mul nsw i64 2, %473
  %475 = add nsw i64 %472, %474
  store i64 %475, ptr %18, align 8, !tbaa !9
  %476 = load i64, ptr %19, align 8, !tbaa !9
  %477 = load i64, ptr %24, align 8, !tbaa !9
  %478 = mul nsw i64 2, %477
  %479 = add nsw i64 %476, %478
  store i64 %479, ptr %19, align 8, !tbaa !9
  %480 = load i64, ptr %28, align 8, !tbaa !9
  %481 = load ptr, ptr %6, align 8, !tbaa !5
  %482 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %481, i32 0, i32 4
  store i64 %480, ptr %482, align 8, !tbaa !43
  %483 = load i64, ptr %18, align 8, !tbaa !9
  %484 = load ptr, ptr %6, align 8, !tbaa !5
  %485 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %484, i32 0, i32 2
  store i64 %483, ptr %485, align 8, !tbaa !45
  %486 = load i64, ptr %19, align 8, !tbaa !9
  %487 = load ptr, ptr %6, align 8, !tbaa !5
  %488 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %487, i32 0, i32 3
  store i64 %486, ptr %488, align 8, !tbaa !46
  %489 = load ptr, ptr %6, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %489, i32 0, i32 0
  store i64 -3, ptr %490, align 8, !tbaa !47
  %491 = load ptr, ptr %6, align 8, !tbaa !5
  %492 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %491, i32 0, i32 1
  store i8 0, ptr %492, align 8, !tbaa !48
  %493 = load ptr, ptr %6, align 8, !tbaa !5
  %494 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %493, i32 0, i32 2
  %495 = load i64, ptr %494, align 8, !tbaa !45
  %496 = load ptr, ptr %6, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %496, i32 0, i32 3
  %498 = load i64, ptr %497, align 8, !tbaa !46
  %499 = mul nsw i64 %495, %498
  %500 = load i64, ptr %28, align 8, !tbaa !9
  %501 = mul nsw i64 %499, %500
  store i64 %501, ptr %58, align 8, !tbaa !9
  %502 = load ptr, ptr %6, align 8, !tbaa !5
  %503 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %502, i32 0, i32 2
  %504 = load i64, ptr %503, align 8, !tbaa !45
  %505 = mul nsw i64 2, %504
  %506 = load ptr, ptr %6, align 8, !tbaa !5
  %507 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %506, i32 0, i32 3
  %508 = load i64, ptr %507, align 8, !tbaa !46
  %509 = mul nsw i64 %505, %508
  %510 = load i64, ptr %28, align 8, !tbaa !9
  %511 = mul nsw i64 %509, %510
  store i64 %511, ptr %59, align 8, !tbaa !9
  %512 = load ptr, ptr %6, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %512, i32 0, i32 2
  %514 = load i64, ptr %513, align 8, !tbaa !45
  %515 = mul nsw i64 3, %514
  %516 = load ptr, ptr %6, align 8, !tbaa !5
  %517 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %516, i32 0, i32 3
  %518 = load i64, ptr %517, align 8, !tbaa !46
  %519 = mul nsw i64 %515, %518
  %520 = load i64, ptr %28, align 8, !tbaa !9
  %521 = mul nsw i64 %519, %520
  store i64 %521, ptr %60, align 8, !tbaa !9
  %522 = load ptr, ptr %6, align 8, !tbaa !5
  %523 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %522, i32 0, i32 5
  %524 = load ptr, ptr %6, align 8, !tbaa !5
  %525 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %524, i32 0, i32 2
  %526 = load i64, ptr %525, align 8, !tbaa !45
  %527 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %523, i64 noundef %526, ptr noundef %527)
  %528 = load ptr, ptr %6, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %528, i32 0, i32 6
  %530 = load ptr, ptr %6, align 8, !tbaa !5
  %531 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %530, i32 0, i32 3
  %532 = load i64, ptr %531, align 8, !tbaa !46
  %533 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %529, i64 noundef %532, ptr noundef %533)
  %534 = load ptr, ptr %6, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %534, i32 0, i32 7
  %536 = load ptr, ptr %6, align 8, !tbaa !5
  %537 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %536, i32 0, i32 2
  %538 = load i64, ptr %537, align 8, !tbaa !45
  %539 = mul nsw i64 4, %538
  %540 = load ptr, ptr %6, align 8, !tbaa !5
  %541 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %540, i32 0, i32 3
  %542 = load i64, ptr %541, align 8, !tbaa !46
  %543 = mul nsw i64 %539, %542
  %544 = load i64, ptr %28, align 8, !tbaa !9
  %545 = mul nsw i64 %543, %544
  %546 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %535, i64 noundef %545, ptr noundef %546)
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %547

547:                                              ; preds = %563, %423
  %548 = load i64, ptr %30, align 8, !tbaa !9
  %549 = load ptr, ptr %6, align 8, !tbaa !5
  %550 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %549, i32 0, i32 2
  %551 = load i64, ptr %550, align 8, !tbaa !45
  %552 = sub nsw i64 %551, 1
  %553 = icmp sle i64 %548, %552
  br i1 %553, label %554, label %566

554:                                              ; preds = %547
  %555 = load i64, ptr %30, align 8, !tbaa !9
  %556 = sitofp i64 %555 to double
  %557 = load ptr, ptr %6, align 8, !tbaa !5
  %558 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %557, i32 0, i32 5
  %559 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %558, i32 0, i32 4
  %560 = load ptr, ptr %559, align 8, !tbaa !22
  %561 = load i64, ptr %30, align 8, !tbaa !9
  %562 = getelementptr inbounds double, ptr %560, i64 %561
  store double %556, ptr %562, align 8, !tbaa !20
  br label %563

563:                                              ; preds = %554
  %564 = load i64, ptr %30, align 8, !tbaa !9
  %565 = add nsw i64 %564, 1
  store i64 %565, ptr %30, align 8, !tbaa !9
  br label %547, !llvm.loop !49

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

567:                                              ; preds = %583, %566
  %568 = load i64, ptr %30, align 8, !tbaa !9
  %569 = load ptr, ptr %6, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %569, i32 0, i32 3
  %571 = load i64, ptr %570, align 8, !tbaa !46
  %572 = sub nsw i64 %571, 1
  %573 = icmp sle i64 %568, %572
  br i1 %573, label %574, label %586

574:                                              ; preds = %567
  %575 = load i64, ptr %30, align 8, !tbaa !9
  %576 = sitofp i64 %575 to double
  %577 = load ptr, ptr %6, align 8, !tbaa !5
  %578 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %577, i32 0, i32 6
  %579 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %578, i32 0, i32 4
  %580 = load ptr, ptr %579, align 8, !tbaa !22
  %581 = load i64, ptr %30, align 8, !tbaa !9
  %582 = getelementptr inbounds double, ptr %580, i64 %581
  store double %576, ptr %582, align 8, !tbaa !20
  br label %583

583:                                              ; preds = %574
  %584 = load i64, ptr %30, align 8, !tbaa !9
  %585 = add nsw i64 %584, 1
  store i64 %585, ptr %30, align 8, !tbaa !9
  br label %567, !llvm.loop !50

586:                                              ; preds = %567
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %587

587:                                              ; preds = %608, %586
  %588 = load i64, ptr %30, align 8, !tbaa !9
  %589 = load ptr, ptr %6, align 8, !tbaa !5
  %590 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %589, i32 0, i32 2
  %591 = load i64, ptr %590, align 8, !tbaa !45
  %592 = mul nsw i64 4, %591
  %593 = load ptr, ptr %6, align 8, !tbaa !5
  %594 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %593, i32 0, i32 3
  %595 = load i64, ptr %594, align 8, !tbaa !46
  %596 = mul nsw i64 %592, %595
  %597 = load i64, ptr %28, align 8, !tbaa !9
  %598 = mul nsw i64 %596, %597
  %599 = sub nsw i64 %598, 1
  %600 = icmp sle i64 %588, %599
  br i1 %600, label %601, label %611

601:                                              ; preds = %587
  %602 = load ptr, ptr %6, align 8, !tbaa !5
  %603 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %602, i32 0, i32 7
  %604 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %603, i32 0, i32 4
  %605 = load ptr, ptr %604, align 8, !tbaa !22
  %606 = load i64, ptr %30, align 8, !tbaa !9
  %607 = getelementptr inbounds double, ptr %605, i64 %606
  store double 0.000000e+00, ptr %607, align 8, !tbaa !20
  br label %608

608:                                              ; preds = %601
  %609 = load i64, ptr %30, align 8, !tbaa !9
  %610 = add nsw i64 %609, 1
  store i64 %610, ptr %30, align 8, !tbaa !9
  br label %587, !llvm.loop !51

611:                                              ; preds = %587
  %612 = load i64, ptr %28, align 8, !tbaa !9
  %613 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %49, i64 noundef %612, ptr noundef %613)
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %614

614:                                              ; preds = %624, %611
  %615 = load i64, ptr %31, align 8, !tbaa !9
  %616 = load i64, ptr %28, align 8, !tbaa !9
  %617 = sub nsw i64 %616, 1
  %618 = icmp sle i64 %615, %617
  br i1 %618, label %619, label %627

619:                                              ; preds = %614
  %620 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %49, i32 0, i32 4
  %621 = load ptr, ptr %620, align 8, !tbaa !22
  %622 = load i64, ptr %31, align 8, !tbaa !9
  %623 = getelementptr inbounds double, ptr %621, i64 %622
  store double 0.000000e+00, ptr %623, align 8, !tbaa !20
  br label %624

624:                                              ; preds = %619
  %625 = load i64, ptr %31, align 8, !tbaa !9
  %626 = add nsw i64 %625, 1
  store i64 %626, ptr %31, align 8, !tbaa !9
  br label %614, !llvm.loop !52

627:                                              ; preds = %614
  %628 = load i64, ptr %27, align 8, !tbaa !9
  %629 = load i64, ptr %29, align 8, !tbaa !9
  %630 = mul nsw i64 %628, %629
  %631 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %43, i64 noundef %630, ptr noundef %631)
  store i64 0, ptr %39, align 8, !tbaa !9
  store double 0x3EB0C6F7A0B5ED8D, ptr %42, align 8, !tbaa !20
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %632

632:                                              ; preds = %758, %627
  %633 = load i64, ptr %30, align 8, !tbaa !9
  %634 = load i64, ptr %27, align 8, !tbaa !9
  %635 = sub nsw i64 %634, 1
  %636 = icmp sle i64 %633, %635
  br i1 %636, label %637, label %761

637:                                              ; preds = %632
  %638 = load ptr, ptr %5, align 8, !tbaa !5
  %639 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %638, i32 0, i32 14
  %640 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %639, i32 0, i32 4
  %641 = load ptr, ptr %640, align 8, !tbaa !22
  %642 = load i64, ptr %30, align 8, !tbaa !9
  %643 = load i64, ptr %29, align 8, !tbaa !9
  %644 = mul nsw i64 %642, %643
  %645 = add nsw i64 %644, 0
  %646 = getelementptr inbounds double, ptr %641, i64 %645
  %647 = load double, ptr %646, align 8, !tbaa !20
  store double %647, ptr %36, align 8, !tbaa !20
  %648 = load ptr, ptr %5, align 8, !tbaa !5
  %649 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %648, i32 0, i32 14
  %650 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %649, i32 0, i32 4
  %651 = load ptr, ptr %650, align 8, !tbaa !22
  %652 = load i64, ptr %30, align 8, !tbaa !9
  %653 = load i64, ptr %29, align 8, !tbaa !9
  %654 = mul nsw i64 %652, %653
  %655 = add nsw i64 %654, 1
  %656 = getelementptr inbounds double, ptr %651, i64 %655
  %657 = load double, ptr %656, align 8, !tbaa !20
  store double %657, ptr %37, align 8, !tbaa !20
  %658 = load double, ptr %14, align 8, !tbaa !20
  %659 = load double, ptr %42, align 8, !tbaa !20
  %660 = load double, ptr %20, align 8, !tbaa !20
  %661 = fneg double %659
  %662 = call double @llvm.fmuladd.f64(double %661, double %660, double %658)
  %663 = load double, ptr %36, align 8, !tbaa !20
  %664 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %662, double noundef %663)
  br i1 %664, label %665, label %757

665:                                              ; preds = %637
  %666 = load double, ptr %36, align 8, !tbaa !20
  %667 = load double, ptr %15, align 8, !tbaa !20
  %668 = load double, ptr %42, align 8, !tbaa !20
  %669 = load double, ptr %20, align 8, !tbaa !20
  %670 = call double @llvm.fmuladd.f64(double %668, double %669, double %667)
  %671 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %666, double noundef %670)
  br i1 %671, label %672, label %757

672:                                              ; preds = %665
  %673 = load double, ptr %16, align 8, !tbaa !20
  %674 = load double, ptr %42, align 8, !tbaa !20
  %675 = load double, ptr %21, align 8, !tbaa !20
  %676 = fneg double %674
  %677 = call double @llvm.fmuladd.f64(double %676, double %675, double %673)
  %678 = load double, ptr %37, align 8, !tbaa !20
  %679 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %677, double noundef %678)
  br i1 %679, label %680, label %757

680:                                              ; preds = %672
  %681 = load double, ptr %37, align 8, !tbaa !20
  %682 = load double, ptr %17, align 8, !tbaa !20
  %683 = load double, ptr %42, align 8, !tbaa !20
  %684 = load double, ptr %21, align 8, !tbaa !20
  %685 = call double @llvm.fmuladd.f64(double %683, double %684, double %682)
  %686 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %681, double noundef %685)
  br i1 %686, label %687, label %757

687:                                              ; preds = %680
  %688 = load double, ptr %36, align 8, !tbaa !20
  %689 = load double, ptr %10, align 8, !tbaa !20
  %690 = fsub double %688, %689
  %691 = load double, ptr %22, align 8, !tbaa !20
  %692 = fmul double %690, %691
  %693 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %43, i32 0, i32 4
  %694 = load ptr, ptr %693, align 8, !tbaa !22
  %695 = load i64, ptr %39, align 8, !tbaa !9
  %696 = load i64, ptr %29, align 8, !tbaa !9
  %697 = mul nsw i64 %695, %696
  %698 = add nsw i64 %697, 0
  %699 = getelementptr inbounds double, ptr %694, i64 %698
  store double %692, ptr %699, align 8, !tbaa !20
  %700 = load double, ptr %37, align 8, !tbaa !20
  %701 = load double, ptr %12, align 8, !tbaa !20
  %702 = fsub double %700, %701
  %703 = load double, ptr %23, align 8, !tbaa !20
  %704 = fmul double %702, %703
  %705 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %43, i32 0, i32 4
  %706 = load ptr, ptr %705, align 8, !tbaa !22
  %707 = load i64, ptr %39, align 8, !tbaa !9
  %708 = load i64, ptr %29, align 8, !tbaa !9
  %709 = mul nsw i64 %707, %708
  %710 = add nsw i64 %709, 1
  %711 = getelementptr inbounds double, ptr %706, i64 %710
  store double %704, ptr %711, align 8, !tbaa !20
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %712

712:                                              ; preds = %751, %687
  %713 = load i64, ptr %31, align 8, !tbaa !9
  %714 = load i64, ptr %28, align 8, !tbaa !9
  %715 = sub nsw i64 %714, 1
  %716 = icmp sle i64 %713, %715
  br i1 %716, label %717, label %754

717:                                              ; preds = %712
  %718 = load ptr, ptr %5, align 8, !tbaa !5
  %719 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %718, i32 0, i32 14
  %720 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %719, i32 0, i32 4
  %721 = load ptr, ptr %720, align 8, !tbaa !22
  %722 = load i64, ptr %30, align 8, !tbaa !9
  %723 = load i64, ptr %29, align 8, !tbaa !9
  %724 = mul nsw i64 %722, %723
  %725 = add nsw i64 %724, 2
  %726 = load i64, ptr %31, align 8, !tbaa !9
  %727 = add nsw i64 %725, %726
  %728 = getelementptr inbounds double, ptr %721, i64 %727
  %729 = load double, ptr %728, align 8, !tbaa !20
  store double %729, ptr %33, align 8, !tbaa !20
  %730 = load double, ptr %33, align 8, !tbaa !20
  %731 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %43, i32 0, i32 4
  %732 = load ptr, ptr %731, align 8, !tbaa !22
  %733 = load i64, ptr %39, align 8, !tbaa !9
  %734 = load i64, ptr %29, align 8, !tbaa !9
  %735 = mul nsw i64 %733, %734
  %736 = add nsw i64 %735, 2
  %737 = load i64, ptr %31, align 8, !tbaa !9
  %738 = add nsw i64 %736, %737
  %739 = getelementptr inbounds double, ptr %732, i64 %738
  store double %730, ptr %739, align 8, !tbaa !20
  %740 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %49, i32 0, i32 4
  %741 = load ptr, ptr %740, align 8, !tbaa !22
  %742 = load i64, ptr %31, align 8, !tbaa !9
  %743 = getelementptr inbounds double, ptr %741, i64 %742
  %744 = load double, ptr %743, align 8, !tbaa !20
  %745 = load double, ptr %33, align 8, !tbaa !20
  %746 = fadd double %744, %745
  %747 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %49, i32 0, i32 4
  %748 = load ptr, ptr %747, align 8, !tbaa !22
  %749 = load i64, ptr %31, align 8, !tbaa !9
  %750 = getelementptr inbounds double, ptr %748, i64 %749
  store double %746, ptr %750, align 8, !tbaa !20
  br label %751

751:                                              ; preds = %717
  %752 = load i64, ptr %31, align 8, !tbaa !9
  %753 = add nsw i64 %752, 1
  store i64 %753, ptr %31, align 8, !tbaa !9
  br label %712, !llvm.loop !53

754:                                              ; preds = %712
  %755 = load i64, ptr %39, align 8, !tbaa !9
  %756 = add nsw i64 %755, 1
  store i64 %756, ptr %39, align 8, !tbaa !9
  br label %757

757:                                              ; preds = %754, %680, %672, %665, %637
  br label %758

758:                                              ; preds = %757
  %759 = load i64, ptr %30, align 8, !tbaa !9
  %760 = add nsw i64 %759, 1
  store i64 %760, ptr %30, align 8, !tbaa !9
  br label %632, !llvm.loop !54

761:                                              ; preds = %632
  %762 = load i64, ptr %39, align 8, !tbaa !9
  store i64 %762, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %763

763:                                              ; preds = %783, %761
  %764 = load i64, ptr %31, align 8, !tbaa !9
  %765 = load i64, ptr %28, align 8, !tbaa !9
  %766 = sub nsw i64 %765, 1
  %767 = icmp sle i64 %764, %766
  br i1 %767, label %768, label %786

768:                                              ; preds = %763
  %769 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %49, i32 0, i32 4
  %770 = load ptr, ptr %769, align 8, !tbaa !22
  %771 = load i64, ptr %31, align 8, !tbaa !9
  %772 = getelementptr inbounds double, ptr %770, i64 %771
  %773 = load double, ptr %772, align 8, !tbaa !20
  %774 = load i64, ptr %27, align 8, !tbaa !9
  %775 = sitofp i64 %774 to double
  %776 = load ptr, ptr %8, align 8, !tbaa !5
  %777 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %775, double noundef 1.000000e+00, ptr noundef %776)
  %778 = fdiv double %773, %777
  %779 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %49, i32 0, i32 4
  %780 = load ptr, ptr %779, align 8, !tbaa !22
  %781 = load i64, ptr %31, align 8, !tbaa !9
  %782 = getelementptr inbounds double, ptr %780, i64 %781
  store double %778, ptr %782, align 8, !tbaa !20
  br label %783

783:                                              ; preds = %768
  %784 = load i64, ptr %31, align 8, !tbaa !9
  %785 = add nsw i64 %784, 1
  store i64 %785, ptr %31, align 8, !tbaa !9
  br label %763, !llvm.loop !55

786:                                              ; preds = %763
  store double 0.000000e+00, ptr %61, align 8, !tbaa !20
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %787

787:                                              ; preds = %823, %786
  %788 = load i64, ptr %30, align 8, !tbaa !9
  %789 = load i64, ptr %27, align 8, !tbaa !9
  %790 = sub nsw i64 %789, 1
  %791 = icmp sle i64 %788, %790
  br i1 %791, label %792, label %826

792:                                              ; preds = %787
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %793

793:                                              ; preds = %819, %792
  %794 = load i64, ptr %31, align 8, !tbaa !9
  %795 = load i64, ptr %28, align 8, !tbaa !9
  %796 = sub nsw i64 %795, 1
  %797 = icmp sle i64 %794, %796
  br i1 %797, label %798, label %822

798:                                              ; preds = %793
  %799 = load double, ptr %61, align 8, !tbaa !20
  %800 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %43, i32 0, i32 4
  %801 = load ptr, ptr %800, align 8, !tbaa !22
  %802 = load i64, ptr %30, align 8, !tbaa !9
  %803 = load i64, ptr %29, align 8, !tbaa !9
  %804 = mul nsw i64 %802, %803
  %805 = add nsw i64 %804, 2
  %806 = load i64, ptr %31, align 8, !tbaa !9
  %807 = add nsw i64 %805, %806
  %808 = getelementptr inbounds double, ptr %801, i64 %807
  %809 = load double, ptr %808, align 8, !tbaa !20
  %810 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %49, i32 0, i32 4
  %811 = load ptr, ptr %810, align 8, !tbaa !22
  %812 = load i64, ptr %31, align 8, !tbaa !9
  %813 = getelementptr inbounds double, ptr %811, i64 %812
  %814 = load double, ptr %813, align 8, !tbaa !20
  %815 = fsub double %809, %814
  %816 = load ptr, ptr %8, align 8, !tbaa !5
  %817 = call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef %815, ptr noundef %816)
  %818 = fadd double %799, %817
  store double %818, ptr %61, align 8, !tbaa !20
  br label %819

819:                                              ; preds = %798
  %820 = load i64, ptr %31, align 8, !tbaa !9
  %821 = add nsw i64 %820, 1
  store i64 %821, ptr %31, align 8, !tbaa !9
  br label %793, !llvm.loop !56

822:                                              ; preds = %793
  br label %823

823:                                              ; preds = %822
  %824 = load i64, ptr %30, align 8, !tbaa !9
  %825 = add nsw i64 %824, 1
  store i64 %825, ptr %30, align 8, !tbaa !9
  br label %787, !llvm.loop !57

826:                                              ; preds = %787
  %827 = load double, ptr %61, align 8, !tbaa !20
  %828 = load ptr, ptr %8, align 8, !tbaa !5
  %829 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %827, double noundef 1.000000e+00, ptr noundef %828)
  store double %829, ptr %61, align 8, !tbaa !20
  %830 = load i64, ptr %27, align 8, !tbaa !9
  %831 = load i64, ptr %28, align 8, !tbaa !9
  %832 = load ptr, ptr %5, align 8, !tbaa !5
  %833 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %832, i32 0, i32 0
  %834 = load i64, ptr %833, align 8, !tbaa !58
  %835 = load ptr, ptr %5, align 8, !tbaa !5
  %836 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %835, i32 0, i32 1
  %837 = load double, ptr %836, align 8, !tbaa !59
  %838 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl15buildpriorterm1EPNS_9ae_vectorElllldPNS_9ae_matrixEPNS_8ae_stateE(ptr noundef %43, i64 noundef %830, i64 noundef 2, i64 noundef %831, i64 noundef %834, double noundef %837, ptr noundef %44, ptr noundef %838)
  %839 = load i64, ptr %27, align 8, !tbaa !9
  %840 = icmp eq i64 %839, 0
  br i1 %840, label %841, label %1132

841:                                              ; preds = %826
  store i64 0, ptr %32, align 8, !tbaa !9
  br label %842

842:                                              ; preds = %986, %841
  %843 = load i64, ptr %32, align 8, !tbaa !9
  %844 = load ptr, ptr %6, align 8, !tbaa !5
  %845 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %844, i32 0, i32 2
  %846 = load i64, ptr %845, align 8, !tbaa !45
  %847 = load ptr, ptr %6, align 8, !tbaa !5
  %848 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %847, i32 0, i32 3
  %849 = load i64, ptr %848, align 8, !tbaa !46
  %850 = mul nsw i64 %846, %849
  %851 = sub nsw i64 %850, 1
  %852 = icmp sle i64 %843, %851
  br i1 %852, label %853, label %989

853:                                              ; preds = %842
  %854 = load i64, ptr %32, align 8, !tbaa !9
  %855 = load ptr, ptr %6, align 8, !tbaa !5
  %856 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %855, i32 0, i32 2
  %857 = load i64, ptr %856, align 8, !tbaa !45
  %858 = srem i64 %854, %857
  store i64 %858, ptr %34, align 8, !tbaa !9
  %859 = load i64, ptr %32, align 8, !tbaa !9
  %860 = load ptr, ptr %6, align 8, !tbaa !5
  %861 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %860, i32 0, i32 2
  %862 = load i64, ptr %861, align 8, !tbaa !45
  %863 = sdiv i64 %859, %862
  store i64 %863, ptr %35, align 8, !tbaa !9
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %864

864:                                              ; preds = %982, %853
  %865 = load i64, ptr %31, align 8, !tbaa !9
  %866 = load i64, ptr %28, align 8, !tbaa !9
  %867 = sub nsw i64 %866, 1
  %868 = icmp sle i64 %865, %867
  br i1 %868, label %869, label %985

869:                                              ; preds = %864
  %870 = load i64, ptr %28, align 8, !tbaa !9
  %871 = load i64, ptr %35, align 8, !tbaa !9
  %872 = load ptr, ptr %6, align 8, !tbaa !5
  %873 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %872, i32 0, i32 2
  %874 = load i64, ptr %873, align 8, !tbaa !45
  %875 = mul nsw i64 %871, %874
  %876 = load i64, ptr %34, align 8, !tbaa !9
  %877 = add nsw i64 %875, %876
  %878 = mul nsw i64 %870, %877
  %879 = load i64, ptr %31, align 8, !tbaa !9
  %880 = add nsw i64 %878, %879
  store i64 %880, ptr %62, align 8, !tbaa !9
  %881 = load ptr, ptr %6, align 8, !tbaa !5
  %882 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %881, i32 0, i32 7
  %883 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %882, i32 0, i32 4
  %884 = load ptr, ptr %883, align 8, !tbaa !22
  %885 = load i64, ptr %62, align 8, !tbaa !9
  %886 = getelementptr inbounds double, ptr %884, i64 %885
  %887 = load double, ptr %886, align 8, !tbaa !20
  %888 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %889 = load ptr, ptr %888, align 8, !tbaa !22
  %890 = load i64, ptr %31, align 8, !tbaa !9
  %891 = getelementptr inbounds ptr, ptr %889, i64 %890
  %892 = load ptr, ptr %891, align 8, !tbaa !5
  %893 = getelementptr inbounds double, ptr %892, i64 0
  %894 = load double, ptr %893, align 8, !tbaa !20
  %895 = load ptr, ptr %6, align 8, !tbaa !5
  %896 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %895, i32 0, i32 5
  %897 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %896, i32 0, i32 4
  %898 = load ptr, ptr %897, align 8, !tbaa !22
  %899 = load i64, ptr %34, align 8, !tbaa !9
  %900 = getelementptr inbounds double, ptr %898, i64 %899
  %901 = load double, ptr %900, align 8, !tbaa !20
  %902 = call double @llvm.fmuladd.f64(double %894, double %901, double %887)
  %903 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %904 = load ptr, ptr %903, align 8, !tbaa !22
  %905 = load i64, ptr %31, align 8, !tbaa !9
  %906 = getelementptr inbounds ptr, ptr %904, i64 %905
  %907 = load ptr, ptr %906, align 8, !tbaa !5
  %908 = getelementptr inbounds double, ptr %907, i64 1
  %909 = load double, ptr %908, align 8, !tbaa !20
  %910 = load ptr, ptr %6, align 8, !tbaa !5
  %911 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %910, i32 0, i32 6
  %912 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %911, i32 0, i32 4
  %913 = load ptr, ptr %912, align 8, !tbaa !22
  %914 = load i64, ptr %35, align 8, !tbaa !9
  %915 = getelementptr inbounds double, ptr %913, i64 %914
  %916 = load double, ptr %915, align 8, !tbaa !20
  %917 = call double @llvm.fmuladd.f64(double %909, double %916, double %902)
  %918 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %919 = load ptr, ptr %918, align 8, !tbaa !22
  %920 = load i64, ptr %31, align 8, !tbaa !9
  %921 = getelementptr inbounds ptr, ptr %919, i64 %920
  %922 = load ptr, ptr %921, align 8, !tbaa !5
  %923 = getelementptr inbounds double, ptr %922, i64 2
  %924 = load double, ptr %923, align 8, !tbaa !20
  %925 = fadd double %917, %924
  %926 = load ptr, ptr %6, align 8, !tbaa !5
  %927 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %926, i32 0, i32 7
  %928 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %927, i32 0, i32 4
  %929 = load ptr, ptr %928, align 8, !tbaa !22
  %930 = load i64, ptr %62, align 8, !tbaa !9
  %931 = getelementptr inbounds double, ptr %929, i64 %930
  store double %925, ptr %931, align 8, !tbaa !20
  %932 = load ptr, ptr %6, align 8, !tbaa !5
  %933 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %932, i32 0, i32 7
  %934 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %933, i32 0, i32 4
  %935 = load ptr, ptr %934, align 8, !tbaa !22
  %936 = load i64, ptr %58, align 8, !tbaa !9
  %937 = load i64, ptr %62, align 8, !tbaa !9
  %938 = add nsw i64 %936, %937
  %939 = getelementptr inbounds double, ptr %935, i64 %938
  %940 = load double, ptr %939, align 8, !tbaa !20
  %941 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %942 = load ptr, ptr %941, align 8, !tbaa !22
  %943 = load i64, ptr %31, align 8, !tbaa !9
  %944 = getelementptr inbounds ptr, ptr %942, i64 %943
  %945 = load ptr, ptr %944, align 8, !tbaa !5
  %946 = getelementptr inbounds double, ptr %945, i64 0
  %947 = load double, ptr %946, align 8, !tbaa !20
  %948 = fadd double %940, %947
  %949 = load ptr, ptr %6, align 8, !tbaa !5
  %950 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %949, i32 0, i32 7
  %951 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %950, i32 0, i32 4
  %952 = load ptr, ptr %951, align 8, !tbaa !22
  %953 = load i64, ptr %58, align 8, !tbaa !9
  %954 = load i64, ptr %62, align 8, !tbaa !9
  %955 = add nsw i64 %953, %954
  %956 = getelementptr inbounds double, ptr %952, i64 %955
  store double %948, ptr %956, align 8, !tbaa !20
  %957 = load ptr, ptr %6, align 8, !tbaa !5
  %958 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %957, i32 0, i32 7
  %959 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %958, i32 0, i32 4
  %960 = load ptr, ptr %959, align 8, !tbaa !22
  %961 = load i64, ptr %59, align 8, !tbaa !9
  %962 = load i64, ptr %62, align 8, !tbaa !9
  %963 = add nsw i64 %961, %962
  %964 = getelementptr inbounds double, ptr %960, i64 %963
  %965 = load double, ptr %964, align 8, !tbaa !20
  %966 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %967 = load ptr, ptr %966, align 8, !tbaa !22
  %968 = load i64, ptr %31, align 8, !tbaa !9
  %969 = getelementptr inbounds ptr, ptr %967, i64 %968
  %970 = load ptr, ptr %969, align 8, !tbaa !5
  %971 = getelementptr inbounds double, ptr %970, i64 1
  %972 = load double, ptr %971, align 8, !tbaa !20
  %973 = fadd double %965, %972
  %974 = load ptr, ptr %6, align 8, !tbaa !5
  %975 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %974, i32 0, i32 7
  %976 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %975, i32 0, i32 4
  %977 = load ptr, ptr %976, align 8, !tbaa !22
  %978 = load i64, ptr %59, align 8, !tbaa !9
  %979 = load i64, ptr %62, align 8, !tbaa !9
  %980 = add nsw i64 %978, %979
  %981 = getelementptr inbounds double, ptr %977, i64 %980
  store double %973, ptr %981, align 8, !tbaa !20
  br label %982

982:                                              ; preds = %869
  %983 = load i64, ptr %31, align 8, !tbaa !9
  %984 = add nsw i64 %983, 1
  store i64 %984, ptr %31, align 8, !tbaa !9
  br label %864, !llvm.loop !60

985:                                              ; preds = %864
  br label %986

986:                                              ; preds = %985
  %987 = load i64, ptr %32, align 8, !tbaa !9
  %988 = add nsw i64 %987, 1
  store i64 %988, ptr %32, align 8, !tbaa !9
  br label %842, !llvm.loop !61

989:                                              ; preds = %842
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %990

990:                                              ; preds = %1014, %989
  %991 = load i64, ptr %30, align 8, !tbaa !9
  %992 = load ptr, ptr %6, align 8, !tbaa !5
  %993 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %992, i32 0, i32 2
  %994 = load i64, ptr %993, align 8, !tbaa !45
  %995 = sub nsw i64 %994, 1
  %996 = icmp sle i64 %991, %995
  br i1 %996, label %997, label %1017

997:                                              ; preds = %990
  %998 = load ptr, ptr %6, align 8, !tbaa !5
  %999 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %998, i32 0, i32 5
  %1000 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %999, i32 0, i32 4
  %1001 = load ptr, ptr %1000, align 8, !tbaa !22
  %1002 = load i64, ptr %30, align 8, !tbaa !9
  %1003 = getelementptr inbounds double, ptr %1001, i64 %1002
  %1004 = load double, ptr %1003, align 8, !tbaa !20
  %1005 = load double, ptr %20, align 8, !tbaa !20
  %1006 = load double, ptr %10, align 8, !tbaa !20
  %1007 = call double @llvm.fmuladd.f64(double %1004, double %1005, double %1006)
  %1008 = load ptr, ptr %6, align 8, !tbaa !5
  %1009 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1008, i32 0, i32 5
  %1010 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1009, i32 0, i32 4
  %1011 = load ptr, ptr %1010, align 8, !tbaa !22
  %1012 = load i64, ptr %30, align 8, !tbaa !9
  %1013 = getelementptr inbounds double, ptr %1011, i64 %1012
  store double %1007, ptr %1013, align 8, !tbaa !20
  br label %1014

1014:                                             ; preds = %997
  %1015 = load i64, ptr %30, align 8, !tbaa !9
  %1016 = add nsw i64 %1015, 1
  store i64 %1016, ptr %30, align 8, !tbaa !9
  br label %990, !llvm.loop !62

1017:                                             ; preds = %990
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %1018

1018:                                             ; preds = %1042, %1017
  %1019 = load i64, ptr %30, align 8, !tbaa !9
  %1020 = load ptr, ptr %6, align 8, !tbaa !5
  %1021 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1020, i32 0, i32 3
  %1022 = load i64, ptr %1021, align 8, !tbaa !46
  %1023 = sub nsw i64 %1022, 1
  %1024 = icmp sle i64 %1019, %1023
  br i1 %1024, label %1025, label %1045

1025:                                             ; preds = %1018
  %1026 = load ptr, ptr %6, align 8, !tbaa !5
  %1027 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1026, i32 0, i32 6
  %1028 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1027, i32 0, i32 4
  %1029 = load ptr, ptr %1028, align 8, !tbaa !22
  %1030 = load i64, ptr %30, align 8, !tbaa !9
  %1031 = getelementptr inbounds double, ptr %1029, i64 %1030
  %1032 = load double, ptr %1031, align 8, !tbaa !20
  %1033 = load double, ptr %21, align 8, !tbaa !20
  %1034 = load double, ptr %12, align 8, !tbaa !20
  %1035 = call double @llvm.fmuladd.f64(double %1032, double %1033, double %1034)
  %1036 = load ptr, ptr %6, align 8, !tbaa !5
  %1037 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1036, i32 0, i32 6
  %1038 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1037, i32 0, i32 4
  %1039 = load ptr, ptr %1038, align 8, !tbaa !22
  %1040 = load i64, ptr %30, align 8, !tbaa !9
  %1041 = getelementptr inbounds double, ptr %1039, i64 %1040
  store double %1035, ptr %1041, align 8, !tbaa !20
  br label %1042

1042:                                             ; preds = %1025
  %1043 = load i64, ptr %30, align 8, !tbaa !9
  %1044 = add nsw i64 %1043, 1
  store i64 %1044, ptr %30, align 8, !tbaa !9
  br label %1018, !llvm.loop !63

1045:                                             ; preds = %1018
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %1046

1046:                                             ; preds = %1119, %1045
  %1047 = load i64, ptr %30, align 8, !tbaa !9
  %1048 = load ptr, ptr %6, align 8, !tbaa !5
  %1049 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1048, i32 0, i32 2
  %1050 = load i64, ptr %1049, align 8, !tbaa !45
  %1051 = load ptr, ptr %6, align 8, !tbaa !5
  %1052 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1051, i32 0, i32 3
  %1053 = load i64, ptr %1052, align 8, !tbaa !46
  %1054 = mul nsw i64 %1050, %1053
  %1055 = load i64, ptr %28, align 8, !tbaa !9
  %1056 = mul nsw i64 %1054, %1055
  %1057 = sub nsw i64 %1056, 1
  %1058 = icmp sle i64 %1047, %1057
  br i1 %1058, label %1059, label %1122

1059:                                             ; preds = %1046
  %1060 = load ptr, ptr %6, align 8, !tbaa !5
  %1061 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1060, i32 0, i32 7
  %1062 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1061, i32 0, i32 4
  %1063 = load ptr, ptr %1062, align 8, !tbaa !22
  %1064 = load i64, ptr %58, align 8, !tbaa !9
  %1065 = load i64, ptr %30, align 8, !tbaa !9
  %1066 = add nsw i64 %1064, %1065
  %1067 = getelementptr inbounds double, ptr %1063, i64 %1066
  %1068 = load double, ptr %1067, align 8, !tbaa !20
  %1069 = load double, ptr %22, align 8, !tbaa !20
  %1070 = fmul double %1068, %1069
  %1071 = load ptr, ptr %6, align 8, !tbaa !5
  %1072 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1071, i32 0, i32 7
  %1073 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1072, i32 0, i32 4
  %1074 = load ptr, ptr %1073, align 8, !tbaa !22
  %1075 = load i64, ptr %58, align 8, !tbaa !9
  %1076 = load i64, ptr %30, align 8, !tbaa !9
  %1077 = add nsw i64 %1075, %1076
  %1078 = getelementptr inbounds double, ptr %1074, i64 %1077
  store double %1070, ptr %1078, align 8, !tbaa !20
  %1079 = load ptr, ptr %6, align 8, !tbaa !5
  %1080 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1079, i32 0, i32 7
  %1081 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1080, i32 0, i32 4
  %1082 = load ptr, ptr %1081, align 8, !tbaa !22
  %1083 = load i64, ptr %59, align 8, !tbaa !9
  %1084 = load i64, ptr %30, align 8, !tbaa !9
  %1085 = add nsw i64 %1083, %1084
  %1086 = getelementptr inbounds double, ptr %1082, i64 %1085
  %1087 = load double, ptr %1086, align 8, !tbaa !20
  %1088 = load double, ptr %23, align 8, !tbaa !20
  %1089 = fmul double %1087, %1088
  %1090 = load ptr, ptr %6, align 8, !tbaa !5
  %1091 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1090, i32 0, i32 7
  %1092 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1091, i32 0, i32 4
  %1093 = load ptr, ptr %1092, align 8, !tbaa !22
  %1094 = load i64, ptr %59, align 8, !tbaa !9
  %1095 = load i64, ptr %30, align 8, !tbaa !9
  %1096 = add nsw i64 %1094, %1095
  %1097 = getelementptr inbounds double, ptr %1093, i64 %1096
  store double %1089, ptr %1097, align 8, !tbaa !20
  %1098 = load ptr, ptr %6, align 8, !tbaa !5
  %1099 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1098, i32 0, i32 7
  %1100 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1099, i32 0, i32 4
  %1101 = load ptr, ptr %1100, align 8, !tbaa !22
  %1102 = load i64, ptr %60, align 8, !tbaa !9
  %1103 = load i64, ptr %30, align 8, !tbaa !9
  %1104 = add nsw i64 %1102, %1103
  %1105 = getelementptr inbounds double, ptr %1101, i64 %1104
  %1106 = load double, ptr %1105, align 8, !tbaa !20
  %1107 = load double, ptr %22, align 8, !tbaa !20
  %1108 = fmul double %1106, %1107
  %1109 = load double, ptr %23, align 8, !tbaa !20
  %1110 = fmul double %1108, %1109
  %1111 = load ptr, ptr %6, align 8, !tbaa !5
  %1112 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1111, i32 0, i32 7
  %1113 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1112, i32 0, i32 4
  %1114 = load ptr, ptr %1113, align 8, !tbaa !22
  %1115 = load i64, ptr %60, align 8, !tbaa !9
  %1116 = load i64, ptr %30, align 8, !tbaa !9
  %1117 = add nsw i64 %1115, %1116
  %1118 = getelementptr inbounds double, ptr %1114, i64 %1117
  store double %1110, ptr %1118, align 8, !tbaa !20
  br label %1119

1119:                                             ; preds = %1059
  %1120 = load i64, ptr %30, align 8, !tbaa !9
  %1121 = add nsw i64 %1120, 1
  store i64 %1121, ptr %30, align 8, !tbaa !9
  br label %1046, !llvm.loop !64

1122:                                             ; preds = %1046
  %1123 = load ptr, ptr %7, align 8, !tbaa !5
  %1124 = getelementptr inbounds %"struct.alglib_impl::spline2dfitreport", ptr %1123, i32 0, i32 0
  store double 0.000000e+00, ptr %1124, align 8, !tbaa !65
  %1125 = load ptr, ptr %7, align 8, !tbaa !5
  %1126 = getelementptr inbounds %"struct.alglib_impl::spline2dfitreport", ptr %1125, i32 0, i32 1
  store double 0.000000e+00, ptr %1126, align 8, !tbaa !67
  %1127 = load ptr, ptr %7, align 8, !tbaa !5
  %1128 = getelementptr inbounds %"struct.alglib_impl::spline2dfitreport", ptr %1127, i32 0, i32 2
  store double 0.000000e+00, ptr %1128, align 8, !tbaa !68
  %1129 = load ptr, ptr %7, align 8, !tbaa !5
  %1130 = getelementptr inbounds %"struct.alglib_impl::spline2dfitreport", ptr %1129, i32 0, i32 3
  store double 1.000000e+00, ptr %1130, align 8, !tbaa !69
  %1131 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %1131)
  store i32 1, ptr %63, align 4
  br label %1582

1132:                                             ; preds = %826
  %1133 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %45, i64 noundef 7, ptr noundef %1133)
  %1134 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %46, i64 noundef 7, ptr noundef %1134)
  %1135 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %1136 = load ptr, ptr %1135, align 8, !tbaa !22
  %1137 = getelementptr inbounds double, ptr %1136, i64 0
  store double -3.000000e+00, ptr %1137, align 8, !tbaa !20
  %1138 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %1139 = load ptr, ptr %1138, align 8, !tbaa !22
  %1140 = getelementptr inbounds double, ptr %1139, i64 1
  store double -2.000000e+00, ptr %1140, align 8, !tbaa !20
  %1141 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %1142 = load ptr, ptr %1141, align 8, !tbaa !22
  %1143 = getelementptr inbounds double, ptr %1142, i64 2
  store double -1.000000e+00, ptr %1143, align 8, !tbaa !20
  %1144 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %1145 = load ptr, ptr %1144, align 8, !tbaa !22
  %1146 = getelementptr inbounds double, ptr %1145, i64 3
  store double 0.000000e+00, ptr %1146, align 8, !tbaa !20
  %1147 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %1148 = load ptr, ptr %1147, align 8, !tbaa !22
  %1149 = getelementptr inbounds double, ptr %1148, i64 4
  store double 1.000000e+00, ptr %1149, align 8, !tbaa !20
  %1150 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %1151 = load ptr, ptr %1150, align 8, !tbaa !22
  %1152 = getelementptr inbounds double, ptr %1151, i64 5
  store double 2.000000e+00, ptr %1152, align 8, !tbaa !20
  %1153 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %1154 = load ptr, ptr %1153, align 8, !tbaa !22
  %1155 = getelementptr inbounds double, ptr %1154, i64 6
  store double 3.000000e+00, ptr %1155, align 8, !tbaa !20
  %1156 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %1157 = load ptr, ptr %1156, align 8, !tbaa !22
  %1158 = getelementptr inbounds double, ptr %1157, i64 0
  store double 0.000000e+00, ptr %1158, align 8, !tbaa !20
  %1159 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %1160 = load ptr, ptr %1159, align 8, !tbaa !22
  %1161 = getelementptr inbounds double, ptr %1160, i64 1
  store double 0.000000e+00, ptr %1161, align 8, !tbaa !20
  %1162 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %1163 = load ptr, ptr %1162, align 8, !tbaa !22
  %1164 = getelementptr inbounds double, ptr %1163, i64 2
  store double 0x3FB5555555555555, ptr %1164, align 8, !tbaa !20
  %1165 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %1166 = load ptr, ptr %1165, align 8, !tbaa !22
  %1167 = getelementptr inbounds double, ptr %1166, i64 3
  store double 0x3FD5555555555555, ptr %1167, align 8, !tbaa !20
  %1168 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %1169 = load ptr, ptr %1168, align 8, !tbaa !22
  %1170 = getelementptr inbounds double, ptr %1169, i64 4
  store double 0x3FB5555555555555, ptr %1170, align 8, !tbaa !20
  %1171 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %1172 = load ptr, ptr %1171, align 8, !tbaa !22
  %1173 = getelementptr inbounds double, ptr %1172, i64 5
  store double 0.000000e+00, ptr %1173, align 8, !tbaa !20
  %1174 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %1175 = load ptr, ptr %1174, align 8, !tbaa !22
  %1176 = getelementptr inbounds double, ptr %1175, i64 6
  store double 0.000000e+00, ptr %1176, align 8, !tbaa !20
  %1177 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 0
  %1178 = load i64, ptr %1177, align 8, !tbaa !70
  %1179 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl18spline1dbuildcubicEPKNS_9ae_vectorES2_lldldPNS_19spline1dinterpolantEPNS_8ae_stateE(ptr noundef %45, ptr noundef %46, i64 noundef %1178, i64 noundef 2, double noundef 0.000000e+00, i64 noundef 2, double noundef 0.000000e+00, ptr noundef %52, ptr noundef %1179)
  %1180 = load ptr, ptr %5, align 8, !tbaa !5
  %1181 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1180, i32 0, i32 12
  %1182 = load i64, ptr %1181, align 8, !tbaa !32
  %1183 = icmp eq i64 %1182, 1
  br i1 %1183, label %1184, label %1219

1184:                                             ; preds = %1132
  %1185 = load i64, ptr %27, align 8, !tbaa !9
  %1186 = load i64, ptr %28, align 8, !tbaa !9
  %1187 = load i64, ptr %18, align 8, !tbaa !9
  %1188 = load i64, ptr %19, align 8, !tbaa !9
  %1189 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL36spline2d_reorderdatasetandbuildindexEPNS_9ae_vectorEllS1_lllS1_S1_PNS_8ae_stateE(ptr noundef %43, i64 noundef %1185, i64 noundef %1186, ptr noundef %47, i64 noundef 0, i64 noundef %1187, i64 noundef %1188, ptr noundef %50, ptr noundef %51, ptr noundef %1189)
  %1190 = load i64, ptr %18, align 8, !tbaa !9
  %1191 = load i64, ptr %18, align 8, !tbaa !9
  %1192 = load i64, ptr %19, align 8, !tbaa !9
  %1193 = load i64, ptr %19, align 8, !tbaa !9
  %1194 = load i64, ptr %28, align 8, !tbaa !9
  %1195 = load double, ptr @_ZN11alglib_implL26spline2d_lambdaregblockllsE, align 8, !tbaa !20
  %1196 = load ptr, ptr %5, align 8, !tbaa !5
  %1197 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1196, i32 0, i32 10
  %1198 = load double, ptr %1197, align 8, !tbaa !71
  %1199 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL24spline2d_xdesigngenerateEPKNS_9ae_vectorES2_lllllllddPKNS_19spline1dinterpolantEPNS_21spline2dxdesignmatrixEPNS_8ae_stateE(ptr noundef %43, ptr noundef %50, i64 noundef 0, i64 noundef %1190, i64 noundef %1191, i64 noundef 0, i64 noundef %1192, i64 noundef %1193, i64 noundef %1194, double noundef %1195, double noundef %1198, ptr noundef %52, ptr noundef %55, ptr noundef %1199)
  %1200 = load ptr, ptr %5, align 8, !tbaa !5
  %1201 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1200, i32 0, i32 21
  %1202 = load i64, ptr %1201, align 8, !tbaa !72
  %1203 = load ptr, ptr %7, align 8, !tbaa !5
  %1204 = load double, ptr %61, align 8, !tbaa !20
  %1205 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL20spline2d_blockllsfitEPNS_21spline2dxdesignmatrixElPNS_9ae_vectorEPNS_17spline2dfitreportEdPNS_19spline2dblockllsbufEPNS_8ae_stateE(ptr noundef %55, i64 noundef %1202, ptr noundef %56, ptr noundef %1203, double noundef %1204, ptr noundef %57, ptr noundef %1205)
  %1206 = load i64, ptr %18, align 8, !tbaa !9
  %1207 = load i64, ptr %19, align 8, !tbaa !9
  %1208 = load i64, ptr %28, align 8, !tbaa !9
  %1209 = load i64, ptr %26, align 8, !tbaa !9
  %1210 = load ptr, ptr %6, align 8, !tbaa !5
  %1211 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1210, i32 0, i32 7
  %1212 = load ptr, ptr %6, align 8, !tbaa !5
  %1213 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1212, i32 0, i32 3
  %1214 = load i64, ptr %1213, align 8, !tbaa !46
  %1215 = load ptr, ptr %6, align 8, !tbaa !5
  %1216 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1215, i32 0, i32 2
  %1217 = load i64, ptr %1216, align 8, !tbaa !45
  %1218 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL26spline2d_updatesplinetableEPKNS_9ae_vectorElllPKNS_19spline1dinterpolantElPS0_lllPNS_8ae_stateE(ptr noundef %56, i64 noundef %1206, i64 noundef %1207, i64 noundef %1208, ptr noundef %52, i64 noundef %1209, ptr noundef %1211, i64 noundef %1214, i64 noundef %1217, i64 noundef 1, ptr noundef %1218)
  br label %1299

1219:                                             ; preds = %1132
  %1220 = load ptr, ptr %5, align 8, !tbaa !5
  %1221 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1220, i32 0, i32 12
  %1222 = load i64, ptr %1221, align 8, !tbaa !32
  %1223 = icmp eq i64 %1222, 2
  br i1 %1223, label %1224, label %1258

1224:                                             ; preds = %1219
  %1225 = load i64, ptr %27, align 8, !tbaa !9
  %1226 = load i64, ptr %28, align 8, !tbaa !9
  %1227 = load i64, ptr %18, align 8, !tbaa !9
  %1228 = load i64, ptr %19, align 8, !tbaa !9
  %1229 = load ptr, ptr %5, align 8, !tbaa !5
  %1230 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1229, i32 0, i32 10
  %1231 = load double, ptr %1230, align 8, !tbaa !71
  %1232 = load double, ptr @_ZN11alglib_implL26spline2d_lambdaregblockllsE, align 8, !tbaa !20
  %1233 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL29spline2d_generatedesignmatrixEPKNS_9ae_vectorEllllddPKNS_19spline1dinterpolantEPNS_12sparsematrixES7_PlPNS_8ae_stateE(ptr noundef %43, i64 noundef %1225, i64 noundef %1226, i64 noundef %1227, i64 noundef %1228, double noundef %1231, double noundef %1232, ptr noundef %52, ptr noundef %53, ptr noundef %54, ptr noundef %38, ptr noundef %1233)
  %1234 = load i64, ptr %38, align 8, !tbaa !9
  %1235 = load i64, ptr %18, align 8, !tbaa !9
  %1236 = load i64, ptr %19, align 8, !tbaa !9
  %1237 = load i64, ptr %27, align 8, !tbaa !9
  %1238 = load i64, ptr %28, align 8, !tbaa !9
  %1239 = load ptr, ptr %5, align 8, !tbaa !5
  %1240 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1239, i32 0, i32 21
  %1241 = load i64, ptr %1240, align 8, !tbaa !72
  %1242 = load ptr, ptr %7, align 8, !tbaa !5
  %1243 = load double, ptr %61, align 8, !tbaa !20
  %1244 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL20spline2d_naivellsfitEPKNS_12sparsematrixES2_lPNS_9ae_vectorElllllS4_PNS_17spline2dfitreportEdPNS_8ae_stateE(ptr noundef %53, ptr noundef %54, i64 noundef %1234, ptr noundef %43, i64 noundef %1235, i64 noundef %1236, i64 noundef %1237, i64 noundef %1238, i64 noundef %1241, ptr noundef %56, ptr noundef %1242, double noundef %1243, ptr noundef %1244)
  %1245 = load i64, ptr %18, align 8, !tbaa !9
  %1246 = load i64, ptr %19, align 8, !tbaa !9
  %1247 = load i64, ptr %28, align 8, !tbaa !9
  %1248 = load i64, ptr %26, align 8, !tbaa !9
  %1249 = load ptr, ptr %6, align 8, !tbaa !5
  %1250 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1249, i32 0, i32 7
  %1251 = load ptr, ptr %6, align 8, !tbaa !5
  %1252 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1251, i32 0, i32 3
  %1253 = load i64, ptr %1252, align 8, !tbaa !46
  %1254 = load ptr, ptr %6, align 8, !tbaa !5
  %1255 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1254, i32 0, i32 2
  %1256 = load i64, ptr %1255, align 8, !tbaa !45
  %1257 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL26spline2d_updatesplinetableEPKNS_9ae_vectorElllPKNS_19spline1dinterpolantElPS0_lllPNS_8ae_stateE(ptr noundef %56, i64 noundef %1245, i64 noundef %1246, i64 noundef %1247, ptr noundef %52, i64 noundef %1248, ptr noundef %1250, i64 noundef %1253, i64 noundef %1256, i64 noundef 1, ptr noundef %1257)
  br label %1298

1258:                                             ; preds = %1219
  %1259 = load ptr, ptr %5, align 8, !tbaa !5
  %1260 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1259, i32 0, i32 12
  %1261 = load i64, ptr %1260, align 8, !tbaa !32
  %1262 = icmp eq i64 %1261, 3
  br i1 %1262, label %1263, label %1295

1263:                                             ; preds = %1258
  %1264 = load i64, ptr %40, align 8, !tbaa !9
  %1265 = icmp sgt i64 %1264, 0
  %1266 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %1265, ptr noundef @.str.921, ptr noundef %1266)
  %1267 = load i64, ptr %41, align 8, !tbaa !9
  %1268 = icmp sgt i64 %1267, 0
  %1269 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %1268, ptr noundef @.str.921, ptr noundef %1269)
  %1270 = load i64, ptr %27, align 8, !tbaa !9
  %1271 = load i64, ptr %28, align 8, !tbaa !9
  %1272 = load i64, ptr %18, align 8, !tbaa !9
  %1273 = load i64, ptr %19, align 8, !tbaa !9
  %1274 = load i64, ptr %40, align 8, !tbaa !9
  %1275 = load i64, ptr %41, align 8, !tbaa !9
  %1276 = load ptr, ptr %5, align 8, !tbaa !5
  %1277 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1276, i32 0, i32 22
  %1278 = load i64, ptr %1277, align 8, !tbaa !33
  %1279 = load ptr, ptr %5, align 8, !tbaa !5
  %1280 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1279, i32 0, i32 20
  %1281 = load i64, ptr %1280, align 8, !tbaa !73
  %1282 = load ptr, ptr %5, align 8, !tbaa !5
  %1283 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1282, i32 0, i32 11
  %1284 = load i64, ptr %1283, align 8, !tbaa !74
  %1285 = load ptr, ptr %5, align 8, !tbaa !5
  %1286 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1285, i32 0, i32 10
  %1287 = load double, ptr %1286, align 8, !tbaa !71
  %1288 = load ptr, ptr %5, align 8, !tbaa !5
  %1289 = getelementptr inbounds %"struct.alglib_impl::spline2dbuilder", ptr %1288, i32 0, i32 21
  %1290 = load i64, ptr %1289, align 8, !tbaa !72
  %1291 = load ptr, ptr %6, align 8, !tbaa !5
  %1292 = load ptr, ptr %7, align 8, !tbaa !5
  %1293 = load double, ptr %61, align 8, !tbaa !20
  %1294 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL19spline2d_fastddmfitEPNS_9ae_vectorEllllllllldlPKNS_19spline1dinterpolantEPNS_19spline2dinterpolantEPNS_17spline2dfitreportEdPNS_8ae_stateE(ptr noundef %43, i64 noundef %1270, i64 noundef %1271, i64 noundef %1272, i64 noundef %1273, i64 noundef %1274, i64 noundef %1275, i64 noundef %1278, i64 noundef %1281, i64 noundef %1284, double noundef %1287, i64 noundef %1290, ptr noundef %52, ptr noundef %1291, ptr noundef %1292, double noundef %1293, ptr noundef %1294)
  br label %1297

1295:                                             ; preds = %1258
  %1296 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.921, ptr noundef %1296)
  br label %1297

1297:                                             ; preds = %1295, %1263
  br label %1298

1298:                                             ; preds = %1297, %1224
  br label %1299

1299:                                             ; preds = %1298, %1184
  store i64 0, ptr %32, align 8, !tbaa !9
  br label %1300

1300:                                             ; preds = %1444, %1299
  %1301 = load i64, ptr %32, align 8, !tbaa !9
  %1302 = load ptr, ptr %6, align 8, !tbaa !5
  %1303 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1302, i32 0, i32 2
  %1304 = load i64, ptr %1303, align 8, !tbaa !45
  %1305 = load ptr, ptr %6, align 8, !tbaa !5
  %1306 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1305, i32 0, i32 3
  %1307 = load i64, ptr %1306, align 8, !tbaa !46
  %1308 = mul nsw i64 %1304, %1307
  %1309 = sub nsw i64 %1308, 1
  %1310 = icmp sle i64 %1301, %1309
  br i1 %1310, label %1311, label %1447

1311:                                             ; preds = %1300
  %1312 = load i64, ptr %32, align 8, !tbaa !9
  %1313 = load ptr, ptr %6, align 8, !tbaa !5
  %1314 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1313, i32 0, i32 2
  %1315 = load i64, ptr %1314, align 8, !tbaa !45
  %1316 = srem i64 %1312, %1315
  store i64 %1316, ptr %34, align 8, !tbaa !9
  %1317 = load i64, ptr %32, align 8, !tbaa !9
  %1318 = load ptr, ptr %6, align 8, !tbaa !5
  %1319 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1318, i32 0, i32 2
  %1320 = load i64, ptr %1319, align 8, !tbaa !45
  %1321 = sdiv i64 %1317, %1320
  store i64 %1321, ptr %35, align 8, !tbaa !9
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %1322

1322:                                             ; preds = %1440, %1311
  %1323 = load i64, ptr %31, align 8, !tbaa !9
  %1324 = load i64, ptr %28, align 8, !tbaa !9
  %1325 = sub nsw i64 %1324, 1
  %1326 = icmp sle i64 %1323, %1325
  br i1 %1326, label %1327, label %1443

1327:                                             ; preds = %1322
  %1328 = load i64, ptr %28, align 8, !tbaa !9
  %1329 = load i64, ptr %35, align 8, !tbaa !9
  %1330 = load ptr, ptr %6, align 8, !tbaa !5
  %1331 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1330, i32 0, i32 2
  %1332 = load i64, ptr %1331, align 8, !tbaa !45
  %1333 = mul nsw i64 %1329, %1332
  %1334 = load i64, ptr %34, align 8, !tbaa !9
  %1335 = add nsw i64 %1333, %1334
  %1336 = mul nsw i64 %1328, %1335
  %1337 = load i64, ptr %31, align 8, !tbaa !9
  %1338 = add nsw i64 %1336, %1337
  store i64 %1338, ptr %62, align 8, !tbaa !9
  %1339 = load ptr, ptr %6, align 8, !tbaa !5
  %1340 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1339, i32 0, i32 7
  %1341 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1340, i32 0, i32 4
  %1342 = load ptr, ptr %1341, align 8, !tbaa !22
  %1343 = load i64, ptr %62, align 8, !tbaa !9
  %1344 = getelementptr inbounds double, ptr %1342, i64 %1343
  %1345 = load double, ptr %1344, align 8, !tbaa !20
  %1346 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %1347 = load ptr, ptr %1346, align 8, !tbaa !22
  %1348 = load i64, ptr %31, align 8, !tbaa !9
  %1349 = getelementptr inbounds ptr, ptr %1347, i64 %1348
  %1350 = load ptr, ptr %1349, align 8, !tbaa !5
  %1351 = getelementptr inbounds double, ptr %1350, i64 0
  %1352 = load double, ptr %1351, align 8, !tbaa !20
  %1353 = load ptr, ptr %6, align 8, !tbaa !5
  %1354 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1353, i32 0, i32 5
  %1355 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1354, i32 0, i32 4
  %1356 = load ptr, ptr %1355, align 8, !tbaa !22
  %1357 = load i64, ptr %34, align 8, !tbaa !9
  %1358 = getelementptr inbounds double, ptr %1356, i64 %1357
  %1359 = load double, ptr %1358, align 8, !tbaa !20
  %1360 = call double @llvm.fmuladd.f64(double %1352, double %1359, double %1345)
  %1361 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %1362 = load ptr, ptr %1361, align 8, !tbaa !22
  %1363 = load i64, ptr %31, align 8, !tbaa !9
  %1364 = getelementptr inbounds ptr, ptr %1362, i64 %1363
  %1365 = load ptr, ptr %1364, align 8, !tbaa !5
  %1366 = getelementptr inbounds double, ptr %1365, i64 1
  %1367 = load double, ptr %1366, align 8, !tbaa !20
  %1368 = load ptr, ptr %6, align 8, !tbaa !5
  %1369 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1368, i32 0, i32 6
  %1370 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1369, i32 0, i32 4
  %1371 = load ptr, ptr %1370, align 8, !tbaa !22
  %1372 = load i64, ptr %35, align 8, !tbaa !9
  %1373 = getelementptr inbounds double, ptr %1371, i64 %1372
  %1374 = load double, ptr %1373, align 8, !tbaa !20
  %1375 = call double @llvm.fmuladd.f64(double %1367, double %1374, double %1360)
  %1376 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %1377 = load ptr, ptr %1376, align 8, !tbaa !22
  %1378 = load i64, ptr %31, align 8, !tbaa !9
  %1379 = getelementptr inbounds ptr, ptr %1377, i64 %1378
  %1380 = load ptr, ptr %1379, align 8, !tbaa !5
  %1381 = getelementptr inbounds double, ptr %1380, i64 2
  %1382 = load double, ptr %1381, align 8, !tbaa !20
  %1383 = fadd double %1375, %1382
  %1384 = load ptr, ptr %6, align 8, !tbaa !5
  %1385 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1384, i32 0, i32 7
  %1386 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1385, i32 0, i32 4
  %1387 = load ptr, ptr %1386, align 8, !tbaa !22
  %1388 = load i64, ptr %62, align 8, !tbaa !9
  %1389 = getelementptr inbounds double, ptr %1387, i64 %1388
  store double %1383, ptr %1389, align 8, !tbaa !20
  %1390 = load ptr, ptr %6, align 8, !tbaa !5
  %1391 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1390, i32 0, i32 7
  %1392 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1391, i32 0, i32 4
  %1393 = load ptr, ptr %1392, align 8, !tbaa !22
  %1394 = load i64, ptr %58, align 8, !tbaa !9
  %1395 = load i64, ptr %62, align 8, !tbaa !9
  %1396 = add nsw i64 %1394, %1395
  %1397 = getelementptr inbounds double, ptr %1393, i64 %1396
  %1398 = load double, ptr %1397, align 8, !tbaa !20
  %1399 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %1400 = load ptr, ptr %1399, align 8, !tbaa !22
  %1401 = load i64, ptr %31, align 8, !tbaa !9
  %1402 = getelementptr inbounds ptr, ptr %1400, i64 %1401
  %1403 = load ptr, ptr %1402, align 8, !tbaa !5
  %1404 = getelementptr inbounds double, ptr %1403, i64 0
  %1405 = load double, ptr %1404, align 8, !tbaa !20
  %1406 = fadd double %1398, %1405
  %1407 = load ptr, ptr %6, align 8, !tbaa !5
  %1408 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1407, i32 0, i32 7
  %1409 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1408, i32 0, i32 4
  %1410 = load ptr, ptr %1409, align 8, !tbaa !22
  %1411 = load i64, ptr %58, align 8, !tbaa !9
  %1412 = load i64, ptr %62, align 8, !tbaa !9
  %1413 = add nsw i64 %1411, %1412
  %1414 = getelementptr inbounds double, ptr %1410, i64 %1413
  store double %1406, ptr %1414, align 8, !tbaa !20
  %1415 = load ptr, ptr %6, align 8, !tbaa !5
  %1416 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1415, i32 0, i32 7
  %1417 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1416, i32 0, i32 4
  %1418 = load ptr, ptr %1417, align 8, !tbaa !22
  %1419 = load i64, ptr %59, align 8, !tbaa !9
  %1420 = load i64, ptr %62, align 8, !tbaa !9
  %1421 = add nsw i64 %1419, %1420
  %1422 = getelementptr inbounds double, ptr %1418, i64 %1421
  %1423 = load double, ptr %1422, align 8, !tbaa !20
  %1424 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %1425 = load ptr, ptr %1424, align 8, !tbaa !22
  %1426 = load i64, ptr %31, align 8, !tbaa !9
  %1427 = getelementptr inbounds ptr, ptr %1425, i64 %1426
  %1428 = load ptr, ptr %1427, align 8, !tbaa !5
  %1429 = getelementptr inbounds double, ptr %1428, i64 1
  %1430 = load double, ptr %1429, align 8, !tbaa !20
  %1431 = fadd double %1423, %1430
  %1432 = load ptr, ptr %6, align 8, !tbaa !5
  %1433 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1432, i32 0, i32 7
  %1434 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1433, i32 0, i32 4
  %1435 = load ptr, ptr %1434, align 8, !tbaa !22
  %1436 = load i64, ptr %59, align 8, !tbaa !9
  %1437 = load i64, ptr %62, align 8, !tbaa !9
  %1438 = add nsw i64 %1436, %1437
  %1439 = getelementptr inbounds double, ptr %1435, i64 %1438
  store double %1431, ptr %1439, align 8, !tbaa !20
  br label %1440

1440:                                             ; preds = %1327
  %1441 = load i64, ptr %31, align 8, !tbaa !9
  %1442 = add nsw i64 %1441, 1
  store i64 %1442, ptr %31, align 8, !tbaa !9
  br label %1322, !llvm.loop !75

1443:                                             ; preds = %1322
  br label %1444

1444:                                             ; preds = %1443
  %1445 = load i64, ptr %32, align 8, !tbaa !9
  %1446 = add nsw i64 %1445, 1
  store i64 %1446, ptr %32, align 8, !tbaa !9
  br label %1300, !llvm.loop !76

1447:                                             ; preds = %1300
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %1448

1448:                                             ; preds = %1472, %1447
  %1449 = load i64, ptr %30, align 8, !tbaa !9
  %1450 = load ptr, ptr %6, align 8, !tbaa !5
  %1451 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1450, i32 0, i32 2
  %1452 = load i64, ptr %1451, align 8, !tbaa !45
  %1453 = sub nsw i64 %1452, 1
  %1454 = icmp sle i64 %1449, %1453
  br i1 %1454, label %1455, label %1475

1455:                                             ; preds = %1448
  %1456 = load ptr, ptr %6, align 8, !tbaa !5
  %1457 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1456, i32 0, i32 5
  %1458 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1457, i32 0, i32 4
  %1459 = load ptr, ptr %1458, align 8, !tbaa !22
  %1460 = load i64, ptr %30, align 8, !tbaa !9
  %1461 = getelementptr inbounds double, ptr %1459, i64 %1460
  %1462 = load double, ptr %1461, align 8, !tbaa !20
  %1463 = load double, ptr %20, align 8, !tbaa !20
  %1464 = load double, ptr %10, align 8, !tbaa !20
  %1465 = call double @llvm.fmuladd.f64(double %1462, double %1463, double %1464)
  %1466 = load ptr, ptr %6, align 8, !tbaa !5
  %1467 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1466, i32 0, i32 5
  %1468 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1467, i32 0, i32 4
  %1469 = load ptr, ptr %1468, align 8, !tbaa !22
  %1470 = load i64, ptr %30, align 8, !tbaa !9
  %1471 = getelementptr inbounds double, ptr %1469, i64 %1470
  store double %1465, ptr %1471, align 8, !tbaa !20
  br label %1472

1472:                                             ; preds = %1455
  %1473 = load i64, ptr %30, align 8, !tbaa !9
  %1474 = add nsw i64 %1473, 1
  store i64 %1474, ptr %30, align 8, !tbaa !9
  br label %1448, !llvm.loop !77

1475:                                             ; preds = %1448
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %1476

1476:                                             ; preds = %1500, %1475
  %1477 = load i64, ptr %30, align 8, !tbaa !9
  %1478 = load ptr, ptr %6, align 8, !tbaa !5
  %1479 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1478, i32 0, i32 3
  %1480 = load i64, ptr %1479, align 8, !tbaa !46
  %1481 = sub nsw i64 %1480, 1
  %1482 = icmp sle i64 %1477, %1481
  br i1 %1482, label %1483, label %1503

1483:                                             ; preds = %1476
  %1484 = load ptr, ptr %6, align 8, !tbaa !5
  %1485 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1484, i32 0, i32 6
  %1486 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1485, i32 0, i32 4
  %1487 = load ptr, ptr %1486, align 8, !tbaa !22
  %1488 = load i64, ptr %30, align 8, !tbaa !9
  %1489 = getelementptr inbounds double, ptr %1487, i64 %1488
  %1490 = load double, ptr %1489, align 8, !tbaa !20
  %1491 = load double, ptr %21, align 8, !tbaa !20
  %1492 = load double, ptr %12, align 8, !tbaa !20
  %1493 = call double @llvm.fmuladd.f64(double %1490, double %1491, double %1492)
  %1494 = load ptr, ptr %6, align 8, !tbaa !5
  %1495 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1494, i32 0, i32 6
  %1496 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1495, i32 0, i32 4
  %1497 = load ptr, ptr %1496, align 8, !tbaa !22
  %1498 = load i64, ptr %30, align 8, !tbaa !9
  %1499 = getelementptr inbounds double, ptr %1497, i64 %1498
  store double %1493, ptr %1499, align 8, !tbaa !20
  br label %1500

1500:                                             ; preds = %1483
  %1501 = load i64, ptr %30, align 8, !tbaa !9
  %1502 = add nsw i64 %1501, 1
  store i64 %1502, ptr %30, align 8, !tbaa !9
  br label %1476, !llvm.loop !78

1503:                                             ; preds = %1476
  store i64 0, ptr %30, align 8, !tbaa !9
  br label %1504

1504:                                             ; preds = %1577, %1503
  %1505 = load i64, ptr %30, align 8, !tbaa !9
  %1506 = load ptr, ptr %6, align 8, !tbaa !5
  %1507 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1506, i32 0, i32 2
  %1508 = load i64, ptr %1507, align 8, !tbaa !45
  %1509 = load ptr, ptr %6, align 8, !tbaa !5
  %1510 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1509, i32 0, i32 3
  %1511 = load i64, ptr %1510, align 8, !tbaa !46
  %1512 = mul nsw i64 %1508, %1511
  %1513 = load i64, ptr %28, align 8, !tbaa !9
  %1514 = mul nsw i64 %1512, %1513
  %1515 = sub nsw i64 %1514, 1
  %1516 = icmp sle i64 %1505, %1515
  br i1 %1516, label %1517, label %1580

1517:                                             ; preds = %1504
  %1518 = load ptr, ptr %6, align 8, !tbaa !5
  %1519 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1518, i32 0, i32 7
  %1520 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1519, i32 0, i32 4
  %1521 = load ptr, ptr %1520, align 8, !tbaa !22
  %1522 = load i64, ptr %58, align 8, !tbaa !9
  %1523 = load i64, ptr %30, align 8, !tbaa !9
  %1524 = add nsw i64 %1522, %1523
  %1525 = getelementptr inbounds double, ptr %1521, i64 %1524
  %1526 = load double, ptr %1525, align 8, !tbaa !20
  %1527 = load double, ptr %22, align 8, !tbaa !20
  %1528 = fmul double %1526, %1527
  %1529 = load ptr, ptr %6, align 8, !tbaa !5
  %1530 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1529, i32 0, i32 7
  %1531 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1530, i32 0, i32 4
  %1532 = load ptr, ptr %1531, align 8, !tbaa !22
  %1533 = load i64, ptr %58, align 8, !tbaa !9
  %1534 = load i64, ptr %30, align 8, !tbaa !9
  %1535 = add nsw i64 %1533, %1534
  %1536 = getelementptr inbounds double, ptr %1532, i64 %1535
  store double %1528, ptr %1536, align 8, !tbaa !20
  %1537 = load ptr, ptr %6, align 8, !tbaa !5
  %1538 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1537, i32 0, i32 7
  %1539 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1538, i32 0, i32 4
  %1540 = load ptr, ptr %1539, align 8, !tbaa !22
  %1541 = load i64, ptr %59, align 8, !tbaa !9
  %1542 = load i64, ptr %30, align 8, !tbaa !9
  %1543 = add nsw i64 %1541, %1542
  %1544 = getelementptr inbounds double, ptr %1540, i64 %1543
  %1545 = load double, ptr %1544, align 8, !tbaa !20
  %1546 = load double, ptr %23, align 8, !tbaa !20
  %1547 = fmul double %1545, %1546
  %1548 = load ptr, ptr %6, align 8, !tbaa !5
  %1549 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1548, i32 0, i32 7
  %1550 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1549, i32 0, i32 4
  %1551 = load ptr, ptr %1550, align 8, !tbaa !22
  %1552 = load i64, ptr %59, align 8, !tbaa !9
  %1553 = load i64, ptr %30, align 8, !tbaa !9
  %1554 = add nsw i64 %1552, %1553
  %1555 = getelementptr inbounds double, ptr %1551, i64 %1554
  store double %1547, ptr %1555, align 8, !tbaa !20
  %1556 = load ptr, ptr %6, align 8, !tbaa !5
  %1557 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1556, i32 0, i32 7
  %1558 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1557, i32 0, i32 4
  %1559 = load ptr, ptr %1558, align 8, !tbaa !22
  %1560 = load i64, ptr %60, align 8, !tbaa !9
  %1561 = load i64, ptr %30, align 8, !tbaa !9
  %1562 = add nsw i64 %1560, %1561
  %1563 = getelementptr inbounds double, ptr %1559, i64 %1562
  %1564 = load double, ptr %1563, align 8, !tbaa !20
  %1565 = load double, ptr %22, align 8, !tbaa !20
  %1566 = fmul double %1564, %1565
  %1567 = load double, ptr %23, align 8, !tbaa !20
  %1568 = fmul double %1566, %1567
  %1569 = load ptr, ptr %6, align 8, !tbaa !5
  %1570 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %1569, i32 0, i32 7
  %1571 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1570, i32 0, i32 4
  %1572 = load ptr, ptr %1571, align 8, !tbaa !22
  %1573 = load i64, ptr %60, align 8, !tbaa !9
  %1574 = load i64, ptr %30, align 8, !tbaa !9
  %1575 = add nsw i64 %1573, %1574
  %1576 = getelementptr inbounds double, ptr %1572, i64 %1575
  store double %1568, ptr %1576, align 8, !tbaa !20
  br label %1577

1577:                                             ; preds = %1517
  %1578 = load i64, ptr %30, align 8, !tbaa !9
  %1579 = add nsw i64 %1578, 1
  store i64 %1579, ptr %30, align 8, !tbaa !9
  br label %1504, !llvm.loop !79

1580:                                             ; preds = %1504
  %1581 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %1581)
  store i32 0, ptr %63, align 4
  br label %1582

1582:                                             ; preds = %1580, %1122
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 2648, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 496, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 368, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 368, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 160, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %9) #5
  %1583 = load i32, ptr %63, align 4
  switch i32 %1583, label %1585 [
    i32 0, label %1584
    i32 1, label %1584
  ]

1584:                                             ; preds = %1582, %1582
  ret void

1585:                                             ; preds = %1582
  unreachable
}

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

declare noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef, double noundef) #2

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

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

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

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

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

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

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) #2

declare noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) #2

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

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

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef, double noundef) #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl15buildpriorterm1EPNS_9ae_vectorElllldPNS_9ae_matrixEPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, ptr noundef, ptr noundef) #3

declare noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef, double noundef) #2

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

declare noundef i64 @_ZN11alglib_impl5imin2EllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) #2

declare noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl26_spline2dinterpolant_clearEPv(ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl24_spline2dfitreport_clearEPv(ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl27_spline2dxdesignmatrix_initEPvPNS_8ae_stateEb(ptr noundef, ptr noundef, i1 noundef zeroext) #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl25_spline2dblockllsbuf_initEPvPNS_8ae_stateEb(ptr noundef, ptr noundef, i1 noundef zeroext) #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL36spline2d_reorderdatasetandbuildindexEPNS_9ae_vectorEllS1_lllS1_S1_PNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL24spline2d_xdesigngenerateEPKNS_9ae_vectorES2_lllllllddPKNS_19spline1dinterpolantEPNS_21spline2dxdesignmatrixEPNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL20spline2d_blockllsfitEPNS_21spline2dxdesignmatrixElPNS_9ae_vectorEPNS_17spline2dfitreportEdPNS_19spline2dblockllsbufEPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef, ptr noundef, double noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL26spline2d_updatesplinetableEPKNS_9ae_vectorElllPKNS_19spline1dinterpolantElPS0_lllPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL29spline2d_generatedesignmatrixEPKNS_9ae_vectorEllllddPKNS_19spline1dinterpolantEPNS_12sparsematrixES7_PlPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL20spline2d_naivellsfitEPKNS_12sparsematrixES2_lPNS_9ae_vectorElllllS4_PNS_17spline2dfitreportEdPNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef, double noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL19spline2d_fastddmfitEPNS_9ae_vectorEllllllllldlPKNS_19spline1dinterpolantEPNS_19spline2dinterpolantEPNS_17spline2dfitreportEdPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, ptr noundef) #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 176}
!12 = !{!"_ZTSN11alglib_impl15spline2dbuilderE", !10, i64 0, !13, i64 8, !10, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !13, i64 80, !10, i64 88, !10, i64 96, !13, i64 104, !14, i64 112, !10, i64 176, !10, i64 184, !13, i64 192, !13, i64 200, !15, i64 208, !10, i64 216, !10, i64 224, !10, i64 232}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_ZTSN11alglib_impl9ae_vectorE", !10, i64 0, !10, i64 8, !15, i64 16, !16, i64 24, !7, i64 56}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!17 = !{!12, !10, i64 184}
!18 = !{!12, !13, i64 192}
!19 = !{!12, !13, i64 200}
!20 = !{!13, !13, i64 0}
!21 = !{!12, !10, i64 16}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!12, !13, i64 24}
!26 = !{!12, !13, i64 32}
!27 = !{!12, !13, i64 40}
!28 = !{!12, !13, i64 48}
!29 = !{!12, !10, i64 56}
!30 = !{!12, !10, i64 64}
!31 = !{!12, !10, i64 72}
!32 = !{!12, !10, i64 96}
!33 = !{!12, !10, i64 232}
!34 = distinct !{!34, !24}
!35 = distinct !{!35, !24}
!36 = distinct !{!36, !24}
!37 = distinct !{!37, !24}
!38 = distinct !{!38, !24}
!39 = distinct !{!39, !24}
!40 = !{!12, !15, i64 208}
!41 = !{i8 0, i8 2}
!42 = !{}
!43 = !{!44, !10, i64 32}
!44 = !{!"_ZTSN11alglib_impl19spline2dinterpolantE", !10, i64 0, !15, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !14, i64 40, !14, i64 104, !14, i64 168, !14, i64 232, !14, i64 296}
!45 = !{!44, !10, i64 16}
!46 = !{!44, !10, i64 24}
!47 = !{!44, !10, i64 0}
!48 = !{!44, !15, i64 8}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !24}
!52 = distinct !{!52, !24}
!53 = distinct !{!53, !24}
!54 = distinct !{!54, !24}
!55 = distinct !{!55, !24}
!56 = distinct !{!56, !24}
!57 = distinct !{!57, !24}
!58 = !{!12, !10, i64 0}
!59 = !{!12, !13, i64 8}
!60 = distinct !{!60, !24}
!61 = distinct !{!61, !24}
!62 = distinct !{!62, !24}
!63 = distinct !{!63, !24}
!64 = distinct !{!64, !24}
!65 = !{!66, !13, i64 0}
!66 = !{!"_ZTSN11alglib_impl17spline2dfitreportE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!67 = !{!66, !13, i64 8}
!68 = !{!66, !13, i64 16}
!69 = !{!66, !13, i64 24}
!70 = !{!14, !10, i64 0}
!71 = !{!12, !13, i64 80}
!72 = !{!12, !10, i64 224}
!73 = !{!12, !10, i64 216}
!74 = !{!12, !10, i64 88}
!75 = distinct !{!75, !24}
!76 = distinct !{!76, !24}
!77 = distinct !{!77, !24}
!78 = distinct !{!78, !24}
!79 = distinct !{!79, !24}


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

%"struct.alglib_impl::ae_frame" = type { %"struct.alglib_impl::ae_dyn_block" }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%union.anon.0 = type { ptr }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%union.anon.1 = type { ptr }
%"struct.alglib_impl::spline1dinterpolant" = type { i8, i64, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::sparsematrix" = type { %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64, i64, i64, i64 }
%"struct.alglib_impl::spline2dxdesignmatrix" = type { i64, i64, i64, i64, i64, i64, i64, i64, i64, %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix" }
%"struct.alglib_impl::spline2dblockllsbuf" = type { %"struct.alglib_impl::linlsqrstate", %"struct.alglib_impl::linlsqrreport", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::linlsqrstate" = type { %"struct.alglib_impl::normestimatorstate", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, double, double, double, double, double, double, double, double, double, double, double, double, double, %"struct.alglib_impl::ae_vector", double, double, double, double, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, double, double, i64, i8, i8, i8, i8, i8, i8, i8, i64, i64, i64, i8, i8, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::rcommstate" }
%"struct.alglib_impl::normestimatorstate" = type { i64, i64, i64, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::hqrndstate", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i8, i8, double, %"struct.alglib_impl::rcommstate" }
%"struct.alglib_impl::hqrndstate" = type { i64, i64, i64 }
%"struct.alglib_impl::rcommstate" = type { i32, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::linlsqrreport" = type { i64, i64, i64 }

@.str.663 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.921 = external hidden unnamed_addr constant [29 x i8], align 1
@_ZN11alglib_implL26spline2d_lambdaregblockllsE = external hidden local_unnamed_addr global double, align 8

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl25_spline1dinterpolant_initEPvPNS_8ae_stateEb(ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl18spline1dbuildcubicEPKNS_9ae_vectorES2_lldldPNS_19spline1dinterpolantEPNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, i64 noundef, double noundef, i64 noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl11spline2dfitEPNS_15spline2dbuilderEPNS_19spline2dinterpolantEPNS_17spline2dfitreportEPNS_8ae_stateE(ptr nocapture noundef readonly %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #3 {
  %5 = alloca %"struct.alglib_impl::ae_frame", align 8
  %6 = alloca i64, align 8
  %7 = alloca %"struct.alglib_impl::ae_vector", align 8
  %8 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %9 = alloca %"struct.alglib_impl::ae_vector", align 8
  %10 = alloca %"struct.alglib_impl::ae_vector", align 8
  %11 = alloca %"struct.alglib_impl::ae_vector", align 8
  %12 = alloca %"struct.alglib_impl::ae_vector", align 8
  %13 = alloca %"struct.alglib_impl::ae_vector", align 8
  %14 = alloca %"struct.alglib_impl::ae_vector", align 8
  %15 = alloca %"struct.alglib_impl::ae_vector", align 8
  %16 = alloca %"struct.alglib_impl::spline1dinterpolant", align 8
  %17 = alloca %"struct.alglib_impl::sparsematrix", align 8
  %18 = alloca %"struct.alglib_impl::sparsematrix", align 8
  %19 = alloca %"struct.alglib_impl::spline2dxdesignmatrix", align 8
  %20 = alloca %"struct.alglib_impl::ae_vector", align 8
  %21 = alloca %"struct.alglib_impl::spline2dblockllsbuf", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #5
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %8) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %9) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %15) #5
  call void @llvm.lifetime.start.p0(i64 160, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 368, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 368, ptr nonnull %18) #5
  call void @llvm.lifetime.start.p0(i64 496, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 2648, ptr nonnull %21) #5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %3, ptr noundef nonnull %5)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %7, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %8, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %9, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %10, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %11, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %12, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %13, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %14, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %15, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(160) %16, i8 0, i64 160, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(368) %17, i8 0, i64 368, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(368) %18, i8 0, i64 368, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(496) %19, i8 0, i64 496, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %20, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(2648) %21, i8 0, i64 2648, i1 false)
  call void @_ZN11alglib_impl26_spline2dinterpolant_clearEPv(ptr noundef %1)
  call void @_ZN11alglib_impl24_spline2dfitreport_clearEPv(ptr noundef %2)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %7, i64 noundef 0, i64 noundef 3, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef nonnull %8, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %9, i64 noundef 0, i64 noundef 3, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %10, i64 noundef 0, i64 noundef 3, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %11, i64 noundef 0, i64 noundef 3, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %12, i64 noundef 0, i64 noundef 3, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %13, i64 noundef 0, i64 noundef 3, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %14, i64 noundef 0, i64 noundef 2, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %15, i64 noundef 0, i64 noundef 2, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl25_spline1dinterpolant_initEPvPNS_8ae_stateEb(ptr noundef nonnull %16, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl18_sparsematrix_initEPvPNS_8ae_stateEb(ptr noundef nonnull %17, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl18_sparsematrix_initEPvPNS_8ae_stateEb(ptr noundef nonnull %18, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl27_spline2dxdesignmatrix_initEPvPNS_8ae_stateEb(ptr noundef nonnull %19, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %20, i64 noundef 0, i64 noundef 3, ptr noundef %3, i1 noundef zeroext true)
  call void @_ZN11alglib_impl25_spline2dblockllsbuf_initEPvPNS_8ae_stateEb(ptr noundef nonnull %21, ptr noundef %3, i1 noundef zeroext true)
  %22 = getelementptr inbounds i8, ptr %0, i64 176
  %23 = load i64, ptr %22, align 8, !tbaa !5
  %24 = getelementptr inbounds i8, ptr %0, i64 184
  %25 = load i64, ptr %24, align 8, !tbaa !15
  %26 = add nsw i64 %25, 2
  %27 = getelementptr inbounds i8, ptr %0, i64 192
  %28 = load double, ptr %27, align 8, !tbaa !16
  %29 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %28, double noundef 1.000000e+00)
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %29, ptr noundef nonnull @.str.921, ptr noundef %3)
  %30 = getelementptr inbounds i8, ptr %0, i64 200
  %31 = load double, ptr %30, align 8, !tbaa !17
  %32 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %31, double noundef 1.000000e+00)
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %32, ptr noundef nonnull @.str.921, ptr noundef %3)
  %33 = getelementptr inbounds i8, ptr %0, i64 16
  %34 = load i64, ptr %33, align 8, !tbaa !18
  switch i64 %34, label %71 [
    i64 0, label %35
    i64 1, label %62
  ]

35:                                               ; preds = %4
  %36 = icmp sgt i64 %23, 0
  br i1 %36, label %37, label %.loopexit636

37:                                               ; preds = %35
  %38 = getelementptr inbounds i8, ptr %0, i64 168
  %39 = load ptr, ptr %38, align 8, !tbaa !19
  %40 = load double, ptr %39, align 8, !tbaa !20
  %41 = getelementptr inbounds i8, ptr %39, i64 8
  %42 = load double, ptr %41, align 8, !tbaa !20
  %.not.not645.not = icmp eq i64 %23, 1
  br i1 %.not.not645.not, label %.loopexit636, label %.lr.ph

.lr.ph:                                           ; preds = %37, %.lr.ph
  %.0551650 = phi double [ %47, %.lr.ph ], [ %40, %37 ]
  %.0553649 = phi double [ %51, %.lr.ph ], [ %40, %37 ]
  %.0556648 = phi double [ %56, %.lr.ph ], [ %42, %37 ]
  %.0559647 = phi double [ %60, %.lr.ph ], [ %42, %37 ]
  %.0591646 = phi i64 [ %61, %.lr.ph ], [ 1, %37 ]
  %43 = load ptr, ptr %38, align 8, !tbaa !19
  %44 = mul nsw i64 %.0591646, %26
  %45 = getelementptr inbounds double, ptr %43, i64 %44
  %46 = load double, ptr %45, align 8, !tbaa !20
  %47 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %.0551650, double noundef %46, ptr noundef %3)
  %48 = load ptr, ptr %38, align 8, !tbaa !19
  %49 = getelementptr inbounds double, ptr %48, i64 %44
  %50 = load double, ptr %49, align 8, !tbaa !20
  %51 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %.0553649, double noundef %50, ptr noundef %3)
  %52 = load ptr, ptr %38, align 8, !tbaa !19
  %53 = add nsw i64 %44, 1
  %54 = getelementptr inbounds double, ptr %52, i64 %53
  %55 = load double, ptr %54, align 8, !tbaa !20
  %56 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %.0556648, double noundef %55, ptr noundef %3)
  %57 = load ptr, ptr %38, align 8, !tbaa !19
  %58 = getelementptr inbounds double, ptr %57, i64 %53
  %59 = load double, ptr %58, align 8, !tbaa !20
  %60 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %.0559647, double noundef %59, ptr noundef %3)
  %61 = add nuw nsw i64 %.0591646, 1
  %exitcond.not = icmp eq i64 %61, %23
  br i1 %exitcond.not, label %.loopexit636, label %.lr.ph, !llvm.loop !21

62:                                               ; preds = %4
  %63 = getelementptr inbounds i8, ptr %0, i64 24
  %64 = load double, ptr %63, align 8, !tbaa !23
  %65 = getelementptr inbounds i8, ptr %0, i64 32
  %66 = load double, ptr %65, align 8, !tbaa !24
  %67 = getelementptr inbounds i8, ptr %0, i64 40
  %68 = load double, ptr %67, align 8, !tbaa !25
  %69 = getelementptr inbounds i8, ptr %0, i64 48
  %70 = load double, ptr %69, align 8, !tbaa !26
  br label %.loopexit636

71:                                               ; preds = %4
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.663, ptr noundef %3)
  br label %.loopexit636

.loopexit636:                                     ; preds = %.lr.ph, %37, %35, %62, %71
  %.1560 = phi double [ %70, %62 ], [ 0.000000e+00, %71 ], [ 1.000000e+00, %35 ], [ %42, %37 ], [ %60, %.lr.ph ]
  %.1557 = phi double [ %68, %62 ], [ 0.000000e+00, %71 ], [ -1.000000e+00, %35 ], [ %42, %37 ], [ %56, %.lr.ph ]
  %.1554 = phi double [ %66, %62 ], [ 0.000000e+00, %71 ], [ 1.000000e+00, %35 ], [ %40, %37 ], [ %51, %.lr.ph ]
  %.1552 = phi double [ %64, %62 ], [ 0.000000e+00, %71 ], [ -1.000000e+00, %35 ], [ %40, %37 ], [ %47, %.lr.ph ]
  %72 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.1552, double noundef %.1554)
  br i1 %72, label %73, label %83

73:                                               ; preds = %.loopexit636
  %74 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %.1552, double noundef 0.000000e+00)
  br i1 %74, label %75, label %79

75:                                               ; preds = %73
  %76 = fmul double %.1552, 5.000000e-01
  %77 = fadd double %76, -1.000000e+00
  %78 = call double @llvm.fmuladd.f64(double %.1552, double 2.000000e+00, double 1.000000e+00)
  br label %83

79:                                               ; preds = %73
  %80 = call double @llvm.fmuladd.f64(double %.1552, double 2.000000e+00, double -1.000000e+00)
  %81 = fmul double %.1552, 5.000000e-01
  %82 = fadd double %81, 1.000000e+00
  br label %83

83:                                               ; preds = %75, %79, %.loopexit636
  %.2555 = phi double [ %78, %75 ], [ %82, %79 ], [ %.1554, %.loopexit636 ]
  %.2 = phi double [ %77, %75 ], [ %80, %79 ], [ %.1552, %.loopexit636 ]
  %84 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.1557, double noundef %.1560)
  br i1 %84, label %85, label %95

85:                                               ; preds = %83
  %86 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %.1557, double noundef 0.000000e+00)
  br i1 %86, label %87, label %91

87:                                               ; preds = %85
  %88 = fmul double %.1557, 5.000000e-01
  %89 = fadd double %88, -1.000000e+00
  %90 = call double @llvm.fmuladd.f64(double %.1557, double 2.000000e+00, double 1.000000e+00)
  br label %95

91:                                               ; preds = %85
  %92 = call double @llvm.fmuladd.f64(double %.1557, double 2.000000e+00, double -1.000000e+00)
  %93 = fmul double %.1557, 5.000000e-01
  %94 = fadd double %93, 1.000000e+00
  br label %95

95:                                               ; preds = %87, %91, %83
  %.2561 = phi double [ %90, %87 ], [ %94, %91 ], [ %.1560, %83 ]
  %.2558 = phi double [ %89, %87 ], [ %92, %91 ], [ %.1557, %83 ]
  %96 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %.2, double noundef %.2555)
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %96, ptr noundef nonnull @.str.921, ptr noundef %3)
  %97 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %.2558, double noundef %.2561)
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %97, ptr noundef nonnull @.str.921, ptr noundef %3)
  %98 = getelementptr inbounds i8, ptr %0, i64 56
  %99 = load i64, ptr %98, align 8, !tbaa !27
  switch i64 %99, label %105 [
    i64 0, label %106
    i64 1, label %100
  ]

100:                                              ; preds = %95
  %101 = getelementptr inbounds i8, ptr %0, i64 64
  %102 = load i64, ptr %101, align 8, !tbaa !28
  %103 = getelementptr inbounds i8, ptr %0, i64 72
  %104 = load i64, ptr %103, align 8, !tbaa !29
  br label %106

105:                                              ; preds = %95
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.663, ptr noundef %3)
  br label %106

106:                                              ; preds = %95, %100, %105
  %.0571 = phi i64 [ %104, %100 ], [ 0, %105 ], [ 4, %95 ]
  %.0568 = phi i64 [ %102, %100 ], [ 0, %105 ], [ 4, %95 ]
  %107 = icmp sgt i64 %.0568, 0
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %107, ptr noundef nonnull @.str.921, ptr noundef %3)
  %108 = icmp sgt i64 %.0571, 0
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %108, ptr noundef nonnull @.str.921, ptr noundef %3)
  %109 = getelementptr inbounds i8, ptr %0, i64 96
  %110 = load i64, ptr %109, align 8, !tbaa !30
  %111 = icmp eq i64 %110, 3
  %112 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %.0568, i64 noundef 4, ptr noundef %3)
  %113 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %.0571, i64 noundef 4, ptr noundef %3)
  br i1 %111, label %114, label %174

114:                                              ; preds = %106
  %115 = call noundef i64 @_ZN11alglib_impl5imin2EllPNS_8ae_stateE(i64 noundef %112, i64 noundef %113, ptr noundef %3)
  %116 = getelementptr inbounds i8, ptr %0, i64 232
  %117 = load i64, ptr %116, align 8, !tbaa !31
  %118 = add nsw i64 %117, 1
  %119 = icmp sgt i64 %115, %118
  br i1 %119, label %.lr.ph657, label %._crit_edge

.lr.ph657:                                        ; preds = %114, %.lr.ph657
  %.1569656 = phi i64 [ %122, %.lr.ph657 ], [ %112, %114 ]
  %.1572655 = phi i64 [ %125, %.lr.ph657 ], [ %113, %114 ]
  %.0581654 = phi i64 [ %126, %.lr.ph657 ], [ 1, %114 ]
  %120 = add nsw i64 %.1569656, -1
  %121 = call noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef %120, i64 noundef 2, ptr noundef %3)
  %122 = add nsw i64 %121, 1
  %123 = add nsw i64 %.1572655, -1
  %124 = call noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef %123, i64 noundef 2, ptr noundef %3)
  %125 = add nsw i64 %124, 1
  %126 = add nuw nsw i64 %.0581654, 1
  %127 = call noundef i64 @_ZN11alglib_impl5imin2EllPNS_8ae_stateE(i64 noundef %122, i64 noundef %125, ptr noundef %3)
  %128 = load i64, ptr %116, align 8, !tbaa !31
  %129 = add nsw i64 %128, 1
  %130 = icmp sgt i64 %127, %129
  br i1 %130, label %.lr.ph657, label %._crit_edge, !llvm.loop !32

._crit_edge:                                      ; preds = %.lr.ph657, %114
  %.pre-phi = phi i64 [ %118, %114 ], [ %129, %.lr.ph657 ]
  %131 = phi i64 [ %117, %114 ], [ %128, %.lr.ph657 ]
  %.0581.lcssa = phi i64 [ 1, %114 ], [ %126, %.lr.ph657 ]
  %.1572.lcssa = phi i64 [ %113, %114 ], [ %125, %.lr.ph657 ]
  %.1569.lcssa = phi i64 [ %112, %114 ], [ %122, %.lr.ph657 ]
  %132 = add nsw i64 %.1569.lcssa, -1
  %133 = icmp sgt i64 %.1569.lcssa, %.pre-phi
  br i1 %133, label %.lr.ph664, label %._crit_edge671

.lr.ph664:                                        ; preds = %._crit_edge, %.lr.ph664
  %.2570662 = phi i64 [ %136, %.lr.ph664 ], [ %.1569.lcssa, %._crit_edge ]
  %.0579661 = phi i64 [ %137, %.lr.ph664 ], [ 1, %._crit_edge ]
  %134 = add nsw i64 %.2570662, -1
  %135 = call noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef %134, i64 noundef 2, ptr noundef %3)
  %136 = add nsw i64 %135, 1
  %137 = add nuw nsw i64 %.0579661, 1
  %138 = load i64, ptr %116, align 8, !tbaa !31
  %139 = icmp sgt i64 %135, %138
  br i1 %139, label %.lr.ph664, label %.lr.ph670, !llvm.loop !33

.lr.ph670:                                        ; preds = %.lr.ph664, %.lr.ph670
  %.3669 = phi i64 [ %141, %.lr.ph670 ], [ %136, %.lr.ph664 ]
  %.1580668 = phi i64 [ %142, %.lr.ph670 ], [ %137, %.lr.ph664 ]
  %140 = shl i64 %.3669, 1
  %141 = add i64 %140, -1
  %142 = add nsw i64 %.1580668, -1
  %143 = icmp sgt i64 %.1580668, 2
  br i1 %143, label %.lr.ph670, label %._crit_edge671, !llvm.loop !34

._crit_edge671:                                   ; preds = %.lr.ph670, %._crit_edge
  %.0564.lcssa818 = phi i64 [ %132, %._crit_edge ], [ %135, %.lr.ph670 ]
  %144 = phi i64 [ %131, %._crit_edge ], [ %138, %.lr.ph670 ]
  %.3.lcssa = phi i64 [ %.1569.lcssa, %._crit_edge ], [ %141, %.lr.ph670 ]
  %145 = add nsw i64 %.1572.lcssa, -1
  %146 = add nsw i64 %144, 1
  %147 = icmp sgt i64 %.1572.lcssa, %146
  br i1 %147, label %.lr.ph676, label %.preheader633

.lr.ph676:                                        ; preds = %._crit_edge671, %.lr.ph676
  %.2573674 = phi i64 [ %150, %.lr.ph676 ], [ %.1572.lcssa, %._crit_edge671 ]
  %.0577673 = phi i64 [ %151, %.lr.ph676 ], [ 1, %._crit_edge671 ]
  %148 = add nsw i64 %.2573674, -1
  %149 = call noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef %148, i64 noundef 2, ptr noundef %3)
  %150 = add nsw i64 %149, 1
  %151 = add nuw nsw i64 %.0577673, 1
  %152 = load i64, ptr %116, align 8, !tbaa !31
  %153 = icmp sgt i64 %149, %152
  br i1 %153, label %.lr.ph676, label %.lr.ph682, !llvm.loop !35

.preheader633:                                    ; preds = %.lr.ph682, %._crit_edge671
  %.0562.lcssa825 = phi i64 [ %145, %._crit_edge671 ], [ %149, %.lr.ph682 ]
  %.3574.lcssa = phi i64 [ %.1572.lcssa, %._crit_edge671 ], [ %164, %.lr.ph682 ]
  %154 = icmp sgt i64 %.0581.lcssa, 1
  br i1 %154, label %.lr.ph687.preheader, label %.loopexit

.lr.ph687.preheader:                              ; preds = %.preheader633
  %155 = add nuw i64 %.0581.lcssa, 3
  %156 = add nsw i64 %.0581.lcssa, -2
  %xtraiter = and i64 %155, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph687.prol.loopexit, label %.lr.ph687.prol

.lr.ph687.prol:                                   ; preds = %.lr.ph687.preheader, %.lr.ph687.prol
  %.4686.prol = phi i64 [ %158, %.lr.ph687.prol ], [ %.3.lcssa, %.lr.ph687.preheader ]
  %.4575685.prol = phi i64 [ %160, %.lr.ph687.prol ], [ %.3574.lcssa, %.lr.ph687.preheader ]
  %.1582684.prol = phi i64 [ %161, %.lr.ph687.prol ], [ %.0581.lcssa, %.lr.ph687.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph687.prol ], [ 0, %.lr.ph687.preheader ]
  %157 = shl i64 %.4686.prol, 1
  %158 = add i64 %157, -1
  %159 = shl i64 %.4575685.prol, 1
  %160 = add i64 %159, -1
  %161 = add nsw i64 %.1582684.prol, -1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.lr.ph687.prol.loopexit, label %.lr.ph687.prol, !llvm.loop !36

.lr.ph687.prol.loopexit:                          ; preds = %.lr.ph687.prol, %.lr.ph687.preheader
  %.4686.unr = phi i64 [ %.3.lcssa, %.lr.ph687.preheader ], [ %158, %.lr.ph687.prol ]
  %.4575685.unr = phi i64 [ %.3574.lcssa, %.lr.ph687.preheader ], [ %160, %.lr.ph687.prol ]
  %.1582684.unr = phi i64 [ %.0581.lcssa, %.lr.ph687.preheader ], [ %161, %.lr.ph687.prol ]
  %.lcssa876.unr = phi i64 [ poison, %.lr.ph687.preheader ], [ %158, %.lr.ph687.prol ]
  %.lcssa875.unr = phi i64 [ poison, %.lr.ph687.preheader ], [ %160, %.lr.ph687.prol ]
  %162 = icmp ult i64 %156, 3
  br i1 %162, label %.loopexit, label %.lr.ph687

.lr.ph682:                                        ; preds = %.lr.ph676, %.lr.ph682
  %.3574681 = phi i64 [ %164, %.lr.ph682 ], [ %150, %.lr.ph676 ]
  %.1578680 = phi i64 [ %165, %.lr.ph682 ], [ %151, %.lr.ph676 ]
  %163 = shl i64 %.3574681, 1
  %164 = add i64 %163, -1
  %165 = add nsw i64 %.1578680, -1
  %166 = icmp sgt i64 %.1578680, 2
  br i1 %166, label %.lr.ph682, label %.preheader633, !llvm.loop !38

.lr.ph687:                                        ; preds = %.lr.ph687.prol.loopexit, %.lr.ph687
  %.4686 = phi i64 [ %169, %.lr.ph687 ], [ %.4686.unr, %.lr.ph687.prol.loopexit ]
  %.4575685 = phi i64 [ %170, %.lr.ph687 ], [ %.4575685.unr, %.lr.ph687.prol.loopexit ]
  %.1582684 = phi i64 [ %171, %.lr.ph687 ], [ %.1582684.unr, %.lr.ph687.prol.loopexit ]
  %167 = shl i64 %.4686, 4
  %168 = shl i64 %.4575685, 4
  %169 = add i64 %167, -15
  %170 = add i64 %168, -15
  %171 = add nsw i64 %.1582684, -4
  %172 = add i64 %.1582684, -6
  %173 = icmp ult i64 %172, -3
  br i1 %173, label %.lr.ph687, label %.loopexit, !llvm.loop !39

174:                                              ; preds = %106
  %175 = getelementptr inbounds i8, ptr %0, i64 208
  %176 = load i8, ptr %175, align 8, !tbaa !40, !range !41, !noundef !42
  %. = zext nneg i8 %176 to i64
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph687.prol.loopexit, %.lr.ph687, %.preheader633, %174
  %.0597 = phi i64 [ %., %174 ], [ 0, %.preheader633 ], [ 0, %.lr.ph687 ], [ 0, %.lr.ph687.prol.loopexit ]
  %.5576 = phi i64 [ %113, %174 ], [ %.3574.lcssa, %.preheader633 ], [ %.lcssa875.unr, %.lr.ph687.prol.loopexit ], [ %170, %.lr.ph687 ]
  %.5 = phi i64 [ %112, %174 ], [ %.3.lcssa, %.preheader633 ], [ %.lcssa876.unr, %.lr.ph687.prol.loopexit ], [ %169, %.lr.ph687 ]
  %.1565 = phi i64 [ -1, %174 ], [ %.0564.lcssa818, %.preheader633 ], [ %.0564.lcssa818, %.lr.ph687 ], [ %.0564.lcssa818, %.lr.ph687.prol.loopexit ]
  %.1563 = phi i64 [ -1, %174 ], [ %.0562.lcssa825, %.preheader633 ], [ %.0562.lcssa825, %.lr.ph687 ], [ %.0562.lcssa825, %.lr.ph687.prol.loopexit ]
  %177 = fsub double %.2555, %.2
  %178 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %177, double noundef 1.000000e+00, ptr noundef %3)
  %179 = add nsw i64 %.5, -1
  %180 = sitofp i64 %179 to double
  %181 = fdiv double %178, %180
  %182 = fsub double %.2561, %.2558
  %183 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %182, double noundef 1.000000e+00, ptr noundef %3)
  %184 = add nsw i64 %.5576, -1
  %185 = sitofp i64 %184 to double
  %186 = fdiv double %183, %185
  %187 = fdiv double 1.000000e+00, %181
  %188 = fdiv double 1.000000e+00, %186
  %189 = uitofp nneg i64 %.0597 to double
  %190 = fneg double %181
  %191 = call double @llvm.fmuladd.f64(double %190, double %189, double %.2)
  %192 = fneg double %186
  %193 = call double @llvm.fmuladd.f64(double %192, double %189, double %.2558)
  %194 = shl nuw nsw i64 %.0597, 1
  %195 = add nsw i64 %.5, %194
  %196 = add nsw i64 %.5576, %194
  %197 = getelementptr inbounds i8, ptr %1, i64 32
  store i64 %25, ptr %197, align 8, !tbaa !43
  %198 = getelementptr inbounds i8, ptr %1, i64 16
  store i64 %195, ptr %198, align 8, !tbaa !45
  %199 = getelementptr inbounds i8, ptr %1, i64 24
  store i64 %196, ptr %199, align 8, !tbaa !46
  store i64 -3, ptr %1, align 8, !tbaa !47
  %200 = getelementptr inbounds i8, ptr %1, i64 8
  store i8 0, ptr %200, align 8, !tbaa !48
  %201 = mul i64 %196, %25
  %202 = mul i64 %201, %195
  %203 = shl i64 %25, 1
  %204 = mul i64 %203, %196
  %205 = mul i64 %204, %195
  %206 = mul i64 %25, 3
  %207 = mul i64 %206, %196
  %208 = mul i64 %207, %195
  %209 = getelementptr inbounds i8, ptr %1, i64 40
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %209, i64 noundef %195, ptr noundef %3)
  %210 = getelementptr inbounds i8, ptr %1, i64 104
  %211 = load i64, ptr %199, align 8, !tbaa !46
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %210, i64 noundef %211, ptr noundef %3)
  %212 = getelementptr inbounds i8, ptr %1, i64 168
  %213 = load i64, ptr %198, align 8, !tbaa !45
  %214 = load i64, ptr %199, align 8, !tbaa !46
  %215 = shl i64 %25, 2
  %216 = mul i64 %215, %213
  %217 = mul i64 %216, %214
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %212, i64 noundef %217, ptr noundef %3)
  %218 = load i64, ptr %198, align 8, !tbaa !45
  %.not.not603690 = icmp sgt i64 %218, 0
  br i1 %.not.not603690, label %.lr.ph693, label %.preheader632

.lr.ph693:                                        ; preds = %.loopexit
  %219 = getelementptr inbounds i8, ptr %1, i64 96
  %xtraiter895 = and i64 %218, 3
  %220 = icmp ult i64 %218, 4
  br i1 %220, label %.preheader632.loopexit.unr-lcssa, label %.lr.ph693.new

.lr.ph693.new:                                    ; preds = %.lr.ph693
  %unroll_iter = and i64 %218, 9223372036854775804
  br label %228

.preheader632.loopexit.unr-lcssa:                 ; preds = %228, %.lr.ph693
  %.1592691.unr = phi i64 [ 0, %.lr.ph693 ], [ %244, %228 ]
  %lcmp.mod896.not = icmp eq i64 %xtraiter895, 0
  br i1 %lcmp.mod896.not, label %.preheader632, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader632.loopexit.unr-lcssa, %.epil.preheader
  %.1592691.epil = phi i64 [ %224, %.epil.preheader ], [ %.1592691.unr, %.preheader632.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader632.loopexit.unr-lcssa ]
  %221 = uitofp nneg i64 %.1592691.epil to double
  %222 = load ptr, ptr %219, align 8, !tbaa !19
  %223 = getelementptr inbounds double, ptr %222, i64 %.1592691.epil
  store double %221, ptr %223, align 8, !tbaa !20
  %224 = add nuw nsw i64 %.1592691.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter895
  br i1 %epil.iter.cmp.not, label %.preheader632, label %.epil.preheader, !llvm.loop !49

.preheader632:                                    ; preds = %.preheader632.loopexit.unr-lcssa, %.epil.preheader, %.loopexit
  %225 = load i64, ptr %199, align 8, !tbaa !46
  %.not.not604695 = icmp sgt i64 %225, 0
  br i1 %.not.not604695, label %.lr.ph697, label %.preheader631

.lr.ph697:                                        ; preds = %.preheader632
  %226 = getelementptr inbounds i8, ptr %1, i64 160
  %xtraiter898 = and i64 %225, 3
  %227 = icmp ult i64 %225, 4
  br i1 %227, label %.preheader631.loopexit.unr-lcssa, label %.lr.ph697.new

.lr.ph697.new:                                    ; preds = %.lr.ph697
  %unroll_iter901 = and i64 %225, 9223372036854775804
  br label %252

228:                                              ; preds = %228, %.lr.ph693.new
  %.1592691 = phi i64 [ 0, %.lr.ph693.new ], [ %244, %228 ]
  %niter = phi i64 [ 0, %.lr.ph693.new ], [ %niter.next.3, %228 ]
  %229 = uitofp nneg i64 %.1592691 to double
  %230 = load ptr, ptr %219, align 8, !tbaa !19
  %231 = getelementptr inbounds double, ptr %230, i64 %.1592691
  store double %229, ptr %231, align 8, !tbaa !20
  %232 = or disjoint i64 %.1592691, 1
  %233 = uitofp nneg i64 %232 to double
  %234 = load ptr, ptr %219, align 8, !tbaa !19
  %235 = getelementptr inbounds double, ptr %234, i64 %232
  store double %233, ptr %235, align 8, !tbaa !20
  %236 = or disjoint i64 %.1592691, 2
  %237 = uitofp nneg i64 %236 to double
  %238 = load ptr, ptr %219, align 8, !tbaa !19
  %239 = getelementptr inbounds double, ptr %238, i64 %236
  store double %237, ptr %239, align 8, !tbaa !20
  %240 = or disjoint i64 %.1592691, 3
  %241 = uitofp nneg i64 %240 to double
  %242 = load ptr, ptr %219, align 8, !tbaa !19
  %243 = getelementptr inbounds double, ptr %242, i64 %240
  store double %241, ptr %243, align 8, !tbaa !20
  %244 = add nuw nsw i64 %.1592691, 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 %.preheader632.loopexit.unr-lcssa, label %228, !llvm.loop !50

.preheader631.loopexit.unr-lcssa:                 ; preds = %252, %.lr.ph697
  %.2593696.unr = phi i64 [ 0, %.lr.ph697 ], [ %268, %252 ]
  %lcmp.mod900.not = icmp eq i64 %xtraiter898, 0
  br i1 %lcmp.mod900.not, label %.preheader631, label %.epil.preheader897

.epil.preheader897:                               ; preds = %.preheader631.loopexit.unr-lcssa, %.epil.preheader897
  %.2593696.epil = phi i64 [ %248, %.epil.preheader897 ], [ %.2593696.unr, %.preheader631.loopexit.unr-lcssa ]
  %epil.iter899 = phi i64 [ %epil.iter899.next, %.epil.preheader897 ], [ 0, %.preheader631.loopexit.unr-lcssa ]
  %245 = uitofp nneg i64 %.2593696.epil to double
  %246 = load ptr, ptr %226, align 8, !tbaa !19
  %247 = getelementptr inbounds double, ptr %246, i64 %.2593696.epil
  store double %245, ptr %247, align 8, !tbaa !20
  %248 = add nuw nsw i64 %.2593696.epil, 1
  %epil.iter899.next = add i64 %epil.iter899, 1
  %epil.iter899.cmp.not = icmp eq i64 %epil.iter899.next, %xtraiter898
  br i1 %epil.iter899.cmp.not, label %.preheader631, label %.epil.preheader897, !llvm.loop !51

.preheader631:                                    ; preds = %.preheader631.loopexit.unr-lcssa, %.epil.preheader897, %.preheader632
  %249 = mul i64 %215, %218
  %250 = mul i64 %249, %225
  %.not.not605699 = icmp sgt i64 %250, 0
  br i1 %.not.not605699, label %.lr.ph701, label %._crit_edge702

.lr.ph701:                                        ; preds = %.preheader631
  %251 = getelementptr inbounds i8, ptr %1, i64 224
  br label %269

252:                                              ; preds = %252, %.lr.ph697.new
  %.2593696 = phi i64 [ 0, %.lr.ph697.new ], [ %268, %252 ]
  %niter902 = phi i64 [ 0, %.lr.ph697.new ], [ %niter902.next.3, %252 ]
  %253 = uitofp nneg i64 %.2593696 to double
  %254 = load ptr, ptr %226, align 8, !tbaa !19
  %255 = getelementptr inbounds double, ptr %254, i64 %.2593696
  store double %253, ptr %255, align 8, !tbaa !20
  %256 = or disjoint i64 %.2593696, 1
  %257 = uitofp nneg i64 %256 to double
  %258 = load ptr, ptr %226, align 8, !tbaa !19
  %259 = getelementptr inbounds double, ptr %258, i64 %256
  store double %257, ptr %259, align 8, !tbaa !20
  %260 = or disjoint i64 %.2593696, 2
  %261 = uitofp nneg i64 %260 to double
  %262 = load ptr, ptr %226, align 8, !tbaa !19
  %263 = getelementptr inbounds double, ptr %262, i64 %260
  store double %261, ptr %263, align 8, !tbaa !20
  %264 = or disjoint i64 %.2593696, 3
  %265 = uitofp nneg i64 %264 to double
  %266 = load ptr, ptr %226, align 8, !tbaa !19
  %267 = getelementptr inbounds double, ptr %266, i64 %264
  store double %265, ptr %267, align 8, !tbaa !20
  %268 = add nuw nsw i64 %.2593696, 4
  %niter902.next.3 = add i64 %niter902, 4
  %niter902.ncmp.3 = icmp eq i64 %niter902.next.3, %unroll_iter901
  br i1 %niter902.ncmp.3, label %.preheader631.loopexit.unr-lcssa, label %252, !llvm.loop !52

269:                                              ; preds = %269, %.lr.ph701
  %.3594700 = phi i64 [ 0, %.lr.ph701 ], [ %281, %269 ]
  %270 = load ptr, ptr %251, align 8, !tbaa !19
  %271 = getelementptr inbounds double, ptr %270, i64 %.3594700
  store double 0.000000e+00, ptr %271, align 8, !tbaa !20
  %272 = or disjoint i64 %.3594700, 1
  %273 = load ptr, ptr %251, align 8, !tbaa !19
  %274 = getelementptr inbounds double, ptr %273, i64 %272
  store double 0.000000e+00, ptr %274, align 8, !tbaa !20
  %275 = or disjoint i64 %.3594700, 2
  %276 = load ptr, ptr %251, align 8, !tbaa !19
  %277 = getelementptr inbounds double, ptr %276, i64 %275
  store double 0.000000e+00, ptr %277, align 8, !tbaa !20
  %278 = or disjoint i64 %.3594700, 3
  %279 = load ptr, ptr %251, align 8, !tbaa !19
  %280 = getelementptr inbounds double, ptr %279, i64 %278
  store double 0.000000e+00, ptr %280, align 8, !tbaa !20
  %281 = add nuw nsw i64 %.3594700, 4
  %exitcond796.not.3 = icmp eq i64 %281, %250
  br i1 %exitcond796.not.3, label %._crit_edge702, label %269, !llvm.loop !53

._crit_edge702:                                   ; preds = %269, %.preheader631
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %13, i64 noundef %25, ptr noundef %3)
  %.not.not606703 = icmp sgt i64 %25, 0
  br i1 %.not.not606703, label %.lr.ph706, label %._crit_edge707.thread

.lr.ph706:                                        ; preds = %._crit_edge702
  %282 = getelementptr inbounds i8, ptr %13, i64 56
  %xtraiter904 = and i64 %25, 3
  %283 = icmp ult i64 %25, 4
  br i1 %283, label %._crit_edge707.unr-lcssa, label %.lr.ph706.new

.lr.ph706.new:                                    ; preds = %.lr.ph706
  %unroll_iter907 = and i64 %25, 9223372036854775804
  br label %284

284:                                              ; preds = %284, %.lr.ph706.new
  %.0585704 = phi i64 [ 0, %.lr.ph706.new ], [ %296, %284 ]
  %niter908 = phi i64 [ 0, %.lr.ph706.new ], [ %niter908.next.3, %284 ]
  %285 = load ptr, ptr %282, align 8, !tbaa !19
  %286 = getelementptr inbounds double, ptr %285, i64 %.0585704
  store double 0.000000e+00, ptr %286, align 8, !tbaa !20
  %287 = or disjoint i64 %.0585704, 1
  %288 = load ptr, ptr %282, align 8, !tbaa !19
  %289 = getelementptr inbounds double, ptr %288, i64 %287
  store double 0.000000e+00, ptr %289, align 8, !tbaa !20
  %290 = or disjoint i64 %.0585704, 2
  %291 = load ptr, ptr %282, align 8, !tbaa !19
  %292 = getelementptr inbounds double, ptr %291, i64 %290
  store double 0.000000e+00, ptr %292, align 8, !tbaa !20
  %293 = or disjoint i64 %.0585704, 3
  %294 = load ptr, ptr %282, align 8, !tbaa !19
  %295 = getelementptr inbounds double, ptr %294, i64 %293
  store double 0.000000e+00, ptr %295, align 8, !tbaa !20
  %296 = add nuw nsw i64 %.0585704, 4
  %niter908.next.3 = add i64 %niter908, 4
  %niter908.ncmp.3 = icmp eq i64 %niter908.next.3, %unroll_iter907
  br i1 %niter908.ncmp.3, label %._crit_edge707.unr-lcssa, label %284, !llvm.loop !54

._crit_edge707.unr-lcssa:                         ; preds = %284, %.lr.ph706
  %.0585704.unr = phi i64 [ 0, %.lr.ph706 ], [ %296, %284 ]
  %lcmp.mod906.not = icmp eq i64 %xtraiter904, 0
  br i1 %lcmp.mod906.not, label %._crit_edge707, label %.epil.preheader903

.epil.preheader903:                               ; preds = %._crit_edge707.unr-lcssa, %.epil.preheader903
  %.0585704.epil = phi i64 [ %299, %.epil.preheader903 ], [ %.0585704.unr, %._crit_edge707.unr-lcssa ]
  %epil.iter905 = phi i64 [ %epil.iter905.next, %.epil.preheader903 ], [ 0, %._crit_edge707.unr-lcssa ]
  %297 = load ptr, ptr %282, align 8, !tbaa !19
  %298 = getelementptr inbounds double, ptr %297, i64 %.0585704.epil
  store double 0.000000e+00, ptr %298, align 8, !tbaa !20
  %299 = add nuw nsw i64 %.0585704.epil, 1
  %epil.iter905.next = add i64 %epil.iter905, 1
  %epil.iter905.cmp.not = icmp eq i64 %epil.iter905.next, %xtraiter904
  br i1 %epil.iter905.cmp.not, label %._crit_edge707, label %.epil.preheader903, !llvm.loop !55

._crit_edge707:                                   ; preds = %.epil.preheader903, %._crit_edge707.unr-lcssa
  %300 = mul nsw i64 %26, %23
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %7, i64 noundef %300, ptr noundef %3)
  %.not.not607713 = icmp sgt i64 %23, 0
  br i1 %.not.not607713, label %.lr.ph717, label %.preheader630.thread

._crit_edge707.thread:                            ; preds = %._crit_edge702
  %301 = mul nsw i64 %26, %23
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %7, i64 noundef %301, ptr noundef %3)
  %.not.not607713834 = icmp sgt i64 %23, 0
  br i1 %.not.not607713834, label %.lr.ph717, label %._crit_edge731

.lr.ph717:                                        ; preds = %._crit_edge707.thread, %._crit_edge707
  %302 = getelementptr inbounds i8, ptr %0, i64 168
  %303 = call double @llvm.fmuladd.f64(double %181, double 0xBEB0C6F7A0B5ED8D, double %.2)
  %304 = call double @llvm.fmuladd.f64(double %181, double 0x3EB0C6F7A0B5ED8D, double %.2555)
  %305 = call double @llvm.fmuladd.f64(double %186, double 0xBEB0C6F7A0B5ED8D, double %.2558)
  %306 = call double @llvm.fmuladd.f64(double %186, double 0x3EB0C6F7A0B5ED8D, double %.2561)
  %307 = getelementptr inbounds i8, ptr %7, i64 56
  %308 = getelementptr inbounds i8, ptr %13, i64 56
  %xtraiter909 = and i64 %25, 1
  %309 = icmp eq i64 %25, 1
  %unroll_iter912 = and i64 %25, 9223372036854775806
  %lcmp.mod911.not = icmp eq i64 %xtraiter909, 0
  br label %312

.preheader630:                                    ; preds = %379
  br i1 %.not.not606703, label %.lr.ph721, label %._crit_edge731

.preheader630.thread:                             ; preds = %._crit_edge707
  br i1 %.not.not606703, label %.lr.ph721, label %._crit_edge731

.lr.ph721:                                        ; preds = %.preheader630.thread, %.preheader630
  %.0566.lcssa831 = phi i64 [ 0, %.preheader630.thread ], [ %.1567, %.preheader630 ]
  %310 = getelementptr inbounds i8, ptr %13, i64 56
  %311 = sitofp i64 %.0566.lcssa831 to double
  br label %398

312:                                              ; preds = %.lr.ph717, %379
  %.0566715 = phi i64 [ 0, %.lr.ph717 ], [ %.1567, %379 ]
  %.4595714 = phi i64 [ 0, %.lr.ph717 ], [ %380, %379 ]
  %313 = load ptr, ptr %302, align 8, !tbaa !19
  %314 = mul nsw i64 %.4595714, %26
  %315 = getelementptr inbounds double, ptr %313, i64 %314
  %316 = load double, ptr %315, align 8, !tbaa !20
  %317 = getelementptr i8, ptr %315, i64 8
  %318 = load double, ptr %317, align 8, !tbaa !20
  %319 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %303, double noundef %316)
  br i1 %319, label %320, label %379

320:                                              ; preds = %312
  %321 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %316, double noundef %304)
  br i1 %321, label %322, label %379

322:                                              ; preds = %320
  %323 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %305, double noundef %318)
  br i1 %323, label %324, label %379

324:                                              ; preds = %322
  %325 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %318, double noundef %306)
  br i1 %325, label %326, label %379

326:                                              ; preds = %324
  %327 = fsub double %316, %191
  %328 = fmul double %187, %327
  %329 = load ptr, ptr %307, align 8, !tbaa !19
  %330 = mul nsw i64 %.0566715, %26
  %331 = getelementptr inbounds double, ptr %329, i64 %330
  store double %328, ptr %331, align 8, !tbaa !20
  %332 = fsub double %318, %193
  %333 = fmul double %188, %332
  %334 = load ptr, ptr %307, align 8, !tbaa !19
  %335 = getelementptr double, ptr %334, i64 %330
  %336 = getelementptr i8, ptr %335, i64 8
  store double %333, ptr %336, align 8, !tbaa !20
  br i1 %.not.not606703, label %.lr.ph711.preheader, label %._crit_edge712

.lr.ph711.preheader:                              ; preds = %326
  br i1 %309, label %._crit_edge712.loopexit.unr-lcssa, label %.lr.ph711

.lr.ph711:                                        ; preds = %.lr.ph711.preheader, %.lr.ph711
  %.1586709 = phi i64 [ %364, %.lr.ph711 ], [ 0, %.lr.ph711.preheader ]
  %niter913 = phi i64 [ %niter913.next.1, %.lr.ph711 ], [ 0, %.lr.ph711.preheader ]
  %337 = load ptr, ptr %302, align 8, !tbaa !19
  %338 = getelementptr double, ptr %337, i64 %314
  %339 = getelementptr i8, ptr %338, i64 16
  %340 = getelementptr double, ptr %339, i64 %.1586709
  %341 = load double, ptr %340, align 8, !tbaa !20
  %342 = load ptr, ptr %307, align 8, !tbaa !19
  %343 = getelementptr double, ptr %342, i64 %330
  %344 = getelementptr i8, ptr %343, i64 16
  %345 = getelementptr double, ptr %344, i64 %.1586709
  store double %341, ptr %345, align 8, !tbaa !20
  %346 = load ptr, ptr %308, align 8, !tbaa !19
  %347 = getelementptr inbounds double, ptr %346, i64 %.1586709
  %348 = load double, ptr %347, align 8, !tbaa !20
  %349 = fadd double %341, %348
  store double %349, ptr %347, align 8, !tbaa !20
  %350 = or disjoint i64 %.1586709, 1
  %351 = load ptr, ptr %302, align 8, !tbaa !19
  %352 = getelementptr double, ptr %351, i64 %314
  %353 = getelementptr i8, ptr %352, i64 16
  %354 = getelementptr double, ptr %353, i64 %350
  %355 = load double, ptr %354, align 8, !tbaa !20
  %356 = load ptr, ptr %307, align 8, !tbaa !19
  %357 = getelementptr double, ptr %356, i64 %330
  %358 = getelementptr i8, ptr %357, i64 16
  %359 = getelementptr double, ptr %358, i64 %350
  store double %355, ptr %359, align 8, !tbaa !20
  %360 = load ptr, ptr %308, align 8, !tbaa !19
  %361 = getelementptr inbounds double, ptr %360, i64 %350
  %362 = load double, ptr %361, align 8, !tbaa !20
  %363 = fadd double %355, %362
  store double %363, ptr %361, align 8, !tbaa !20
  %364 = add nuw nsw i64 %.1586709, 2
  %niter913.next.1 = add i64 %niter913, 2
  %niter913.ncmp.1 = icmp eq i64 %niter913.next.1, %unroll_iter912
  br i1 %niter913.ncmp.1, label %._crit_edge712.loopexit.unr-lcssa, label %.lr.ph711, !llvm.loop !56

._crit_edge712.loopexit.unr-lcssa:                ; preds = %.lr.ph711, %.lr.ph711.preheader
  %.1586709.unr = phi i64 [ 0, %.lr.ph711.preheader ], [ %364, %.lr.ph711 ]
  br i1 %lcmp.mod911.not, label %._crit_edge712, label %.lr.ph711.epil

.lr.ph711.epil:                                   ; preds = %._crit_edge712.loopexit.unr-lcssa
  %365 = load ptr, ptr %302, align 8, !tbaa !19
  %366 = getelementptr double, ptr %365, i64 %314
  %367 = getelementptr i8, ptr %366, i64 16
  %368 = getelementptr double, ptr %367, i64 %.1586709.unr
  %369 = load double, ptr %368, align 8, !tbaa !20
  %370 = load ptr, ptr %307, align 8, !tbaa !19
  %371 = getelementptr double, ptr %370, i64 %330
  %372 = getelementptr i8, ptr %371, i64 16
  %373 = getelementptr double, ptr %372, i64 %.1586709.unr
  store double %369, ptr %373, align 8, !tbaa !20
  %374 = load ptr, ptr %308, align 8, !tbaa !19
  %375 = getelementptr inbounds double, ptr %374, i64 %.1586709.unr
  %376 = load double, ptr %375, align 8, !tbaa !20
  %377 = fadd double %369, %376
  store double %377, ptr %375, align 8, !tbaa !20
  br label %._crit_edge712

._crit_edge712:                                   ; preds = %.lr.ph711.epil, %._crit_edge712.loopexit.unr-lcssa, %326
  %378 = add nsw i64 %.0566715, 1
  br label %379

379:                                              ; preds = %312, %320, %322, %324, %._crit_edge712
  %.1567 = phi i64 [ %378, %._crit_edge712 ], [ %.0566715, %324 ], [ %.0566715, %322 ], [ %.0566715, %320 ], [ %.0566715, %312 ]
  %380 = add nuw nsw i64 %.4595714, 1
  %exitcond799.not = icmp eq i64 %380, %23
  br i1 %exitcond799.not, label %.preheader630, label %312, !llvm.loop !57

.preheader629:                                    ; preds = %398
  %.not.not609728 = icmp sgt i64 %.0566.lcssa831, 0
  br i1 %.not.not609728, label %.preheader628.lr.ph, label %._crit_edge731

.preheader628.lr.ph:                              ; preds = %.preheader629
  %381 = getelementptr inbounds i8, ptr %7, i64 56
  %382 = getelementptr inbounds i8, ptr %13, i64 56
  br i1 %.not.not606703, label %.preheader628.us, label %._crit_edge731

.preheader628.us:                                 ; preds = %.preheader628.lr.ph, %._crit_edge726.us
  %.0730.us = phi double [ %395, %._crit_edge726.us ], [ 0.000000e+00, %.preheader628.lr.ph ]
  %.5596729.us = phi i64 [ %397, %._crit_edge726.us ], [ 0, %.preheader628.lr.ph ]
  %383 = mul nuw nsw i64 %.5596729.us, %26
  br label %384

384:                                              ; preds = %.preheader628.us, %384
  %.1724.us = phi double [ %.0730.us, %.preheader628.us ], [ %395, %384 ]
  %.3588723.us = phi i64 [ 0, %.preheader628.us ], [ %396, %384 ]
  %385 = load ptr, ptr %381, align 8, !tbaa !19
  %386 = getelementptr double, ptr %385, i64 %383
  %387 = getelementptr i8, ptr %386, i64 16
  %388 = getelementptr double, ptr %387, i64 %.3588723.us
  %389 = load double, ptr %388, align 8, !tbaa !20
  %390 = load ptr, ptr %382, align 8, !tbaa !19
  %391 = getelementptr inbounds double, ptr %390, i64 %.3588723.us
  %392 = load double, ptr %391, align 8, !tbaa !20
  %393 = fsub double %389, %392
  %394 = call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef %393, ptr noundef %3)
  %395 = fadd double %.1724.us, %394
  %396 = add nuw nsw i64 %.3588723.us, 1
  %exitcond801.not = icmp eq i64 %396, %25
  br i1 %exitcond801.not, label %._crit_edge726.us, label %384, !llvm.loop !58

._crit_edge726.us:                                ; preds = %384
  %397 = add nuw nsw i64 %.5596729.us, 1
  %exitcond802.not = icmp eq i64 %397, %.0566.lcssa831
  br i1 %exitcond802.not, label %._crit_edge731, label %.preheader628.us, !llvm.loop !59

398:                                              ; preds = %.lr.ph721, %398
  %.2587720 = phi i64 [ 0, %.lr.ph721 ], [ %406, %398 ]
  %399 = load ptr, ptr %310, align 8, !tbaa !19
  %400 = getelementptr inbounds double, ptr %399, i64 %.2587720
  %401 = load double, ptr %400, align 8, !tbaa !20
  %402 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %311, double noundef 1.000000e+00, ptr noundef %3)
  %403 = fdiv double %401, %402
  %404 = load ptr, ptr %310, align 8, !tbaa !19
  %405 = getelementptr inbounds double, ptr %404, i64 %.2587720
  store double %403, ptr %405, align 8, !tbaa !20
  %406 = add nuw nsw i64 %.2587720, 1
  %exitcond800.not = icmp eq i64 %406, %25
  br i1 %exitcond800.not, label %.preheader629, label %398, !llvm.loop !60

._crit_edge731:                                   ; preds = %._crit_edge726.us, %.preheader630, %._crit_edge707.thread, %.preheader630.thread, %.preheader628.lr.ph, %.preheader629
  %.0566.lcssa829 = phi i64 [ %.0566.lcssa831, %.preheader629 ], [ %.0566.lcssa831, %.preheader628.lr.ph ], [ 0, %.preheader630.thread ], [ 0, %._crit_edge707.thread ], [ %.1567, %.preheader630 ], [ %.0566.lcssa831, %._crit_edge726.us ]
  %.0.lcssa = phi double [ 0.000000e+00, %.preheader629 ], [ 0.000000e+00, %.preheader628.lr.ph ], [ 0.000000e+00, %.preheader630.thread ], [ 0.000000e+00, %._crit_edge707.thread ], [ 0.000000e+00, %.preheader630 ], [ %395, %._crit_edge726.us ]
  %407 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %.0.lcssa, double noundef 1.000000e+00, ptr noundef %3)
  %408 = load i64, ptr %0, align 8, !tbaa !61
  %409 = getelementptr inbounds i8, ptr %0, i64 8
  %410 = load double, ptr %409, align 8, !tbaa !62
  call void @_ZN11alglib_impl15buildpriorterm1EPNS_9ae_vectorElllldPNS_9ae_matrixEPNS_8ae_stateE(ptr noundef nonnull %7, i64 noundef %.0566.lcssa829, i64 noundef 2, i64 noundef %25, i64 noundef %408, double noundef %410, ptr noundef nonnull %8, ptr noundef %3)
  %411 = icmp eq i64 %.0566.lcssa829, 0
  br i1 %411, label %.preheader624, label %523

.preheader624:                                    ; preds = %._crit_edge731
  %412 = load i64, ptr %198, align 8, !tbaa !45
  %413 = load i64, ptr %199, align 8, !tbaa !46
  %414 = mul nsw i64 %413, %412
  %.not.not615760 = icmp sgt i64 %414, 0
  br i1 %.not.not615760, label %.lr.ph762, label %.preheader623

.lr.ph762:                                        ; preds = %.preheader624
  %415 = getelementptr inbounds i8, ptr %1, i64 224
  %416 = getelementptr inbounds i8, ptr %8, i64 72
  %417 = getelementptr inbounds i8, ptr %1, i64 96
  %418 = getelementptr inbounds i8, ptr %1, i64 160
  br label %421

.preheader623:                                    ; preds = %._crit_edge759, %.preheader624
  %.not.not616766 = icmp sgt i64 %412, 0
  br i1 %.not.not616766, label %.lr.ph768, label %.preheader622

.lr.ph768:                                        ; preds = %.preheader623
  %419 = getelementptr inbounds i8, ptr %1, i64 96
  %xtraiter927 = and i64 %412, 1
  %420 = icmp eq i64 %412, 1
  br i1 %420, label %.preheader622.loopexit.unr-lcssa, label %.lr.ph768.new

.lr.ph768.new:                                    ; preds = %.lr.ph768
  %unroll_iter930 = and i64 %412, 9223372036854775806
  br label %476

421:                                              ; preds = %.lr.ph762, %._crit_edge759
  %.2583761 = phi i64 [ 0, %.lr.ph762 ], [ %469, %._crit_edge759 ]
  %422 = srem i64 %.2583761, %412
  %423 = sdiv i64 %.2583761, %412
  br i1 %.not.not606703, label %.lr.ph758, label %._crit_edge759

.lr.ph758:                                        ; preds = %421
  %424 = mul nsw i64 %423, %412
  %425 = add nsw i64 %424, %422
  %426 = mul nsw i64 %425, %25
  br label %427

427:                                              ; preds = %.lr.ph758, %427
  %.4589756 = phi i64 [ 0, %.lr.ph758 ], [ %468, %427 ]
  %428 = add nsw i64 %.4589756, %426
  %429 = load ptr, ptr %415, align 8, !tbaa !19
  %430 = getelementptr inbounds double, ptr %429, i64 %428
  %431 = load double, ptr %430, align 8, !tbaa !20
  %432 = load ptr, ptr %416, align 8, !tbaa !19
  %433 = getelementptr inbounds ptr, ptr %432, i64 %.4589756
  %434 = load ptr, ptr %433, align 8, !tbaa !63
  %435 = load double, ptr %434, align 8, !tbaa !20
  %436 = load ptr, ptr %417, align 8, !tbaa !19
  %437 = getelementptr inbounds double, ptr %436, i64 %422
  %438 = load double, ptr %437, align 8, !tbaa !20
  %439 = call double @llvm.fmuladd.f64(double %435, double %438, double %431)
  %440 = getelementptr inbounds i8, ptr %434, i64 8
  %441 = load double, ptr %440, align 8, !tbaa !20
  %442 = load ptr, ptr %418, align 8, !tbaa !19
  %443 = getelementptr inbounds double, ptr %442, i64 %423
  %444 = load double, ptr %443, align 8, !tbaa !20
  %445 = call double @llvm.fmuladd.f64(double %441, double %444, double %439)
  %446 = getelementptr inbounds i8, ptr %434, i64 16
  %447 = load double, ptr %446, align 8, !tbaa !20
  %448 = fadd double %445, %447
  store double %448, ptr %430, align 8, !tbaa !20
  %449 = load ptr, ptr %415, align 8, !tbaa !19
  %450 = getelementptr double, ptr %449, i64 %202
  %451 = getelementptr double, ptr %450, i64 %428
  %452 = load double, ptr %451, align 8, !tbaa !20
  %453 = load ptr, ptr %416, align 8, !tbaa !19
  %454 = getelementptr inbounds ptr, ptr %453, i64 %.4589756
  %455 = load ptr, ptr %454, align 8, !tbaa !63
  %456 = load double, ptr %455, align 8, !tbaa !20
  %457 = fadd double %452, %456
  store double %457, ptr %451, align 8, !tbaa !20
  %458 = load ptr, ptr %415, align 8, !tbaa !19
  %459 = getelementptr double, ptr %458, i64 %205
  %460 = getelementptr double, ptr %459, i64 %428
  %461 = load double, ptr %460, align 8, !tbaa !20
  %462 = load ptr, ptr %416, align 8, !tbaa !19
  %463 = getelementptr inbounds ptr, ptr %462, i64 %.4589756
  %464 = load ptr, ptr %463, align 8, !tbaa !63
  %465 = getelementptr inbounds i8, ptr %464, i64 8
  %466 = load double, ptr %465, align 8, !tbaa !20
  %467 = fadd double %461, %466
  store double %467, ptr %460, align 8, !tbaa !20
  %468 = add nuw nsw i64 %.4589756, 1
  %exitcond808.not = icmp eq i64 %468, %25
  br i1 %exitcond808.not, label %._crit_edge759, label %427, !llvm.loop !64

._crit_edge759:                                   ; preds = %427, %421
  %469 = add nuw nsw i64 %.2583761, 1
  %exitcond809.not = icmp eq i64 %469, %414
  br i1 %exitcond809.not, label %.preheader623, label %421, !llvm.loop !65

.preheader622.loopexit.unr-lcssa:                 ; preds = %476, %.lr.ph768
  %.6767.unr = phi i64 [ 0, %.lr.ph768 ], [ %486, %476 ]
  %lcmp.mod929.not = icmp eq i64 %xtraiter927, 0
  br i1 %lcmp.mod929.not, label %.preheader622, label %.preheader622.loopexit.epilog-lcssa

.preheader622.loopexit.epilog-lcssa:              ; preds = %.preheader622.loopexit.unr-lcssa
  %470 = load ptr, ptr %419, align 8, !tbaa !19
  %471 = getelementptr inbounds double, ptr %470, i64 %.6767.unr
  %472 = load double, ptr %471, align 8, !tbaa !20
  %473 = call double @llvm.fmuladd.f64(double %472, double %181, double %191)
  store double %473, ptr %471, align 8, !tbaa !20
  br label %.preheader622

.preheader622:                                    ; preds = %.preheader622.loopexit.epilog-lcssa, %.preheader622.loopexit.unr-lcssa, %.preheader623
  %.not.not617769 = icmp sgt i64 %413, 0
  br i1 %.not.not617769, label %.lr.ph771, label %.preheader

.lr.ph771:                                        ; preds = %.preheader622
  %474 = getelementptr inbounds i8, ptr %1, i64 160
  %xtraiter933 = and i64 %413, 1
  %475 = icmp eq i64 %413, 1
  br i1 %475, label %.preheader.loopexit.unr-lcssa, label %.lr.ph771.new

.lr.ph771.new:                                    ; preds = %.lr.ph771
  %unroll_iter936 = and i64 %413, 9223372036854775806
  br label %493

476:                                              ; preds = %476, %.lr.ph768.new
  %.6767 = phi i64 [ 0, %.lr.ph768.new ], [ %486, %476 ]
  %niter931 = phi i64 [ 0, %.lr.ph768.new ], [ %niter931.next.1, %476 ]
  %477 = load ptr, ptr %419, align 8, !tbaa !19
  %478 = getelementptr inbounds double, ptr %477, i64 %.6767
  %479 = load double, ptr %478, align 8, !tbaa !20
  %480 = call double @llvm.fmuladd.f64(double %479, double %181, double %191)
  store double %480, ptr %478, align 8, !tbaa !20
  %481 = or disjoint i64 %.6767, 1
  %482 = load ptr, ptr %419, align 8, !tbaa !19
  %483 = getelementptr inbounds double, ptr %482, i64 %481
  %484 = load double, ptr %483, align 8, !tbaa !20
  %485 = call double @llvm.fmuladd.f64(double %484, double %181, double %191)
  store double %485, ptr %483, align 8, !tbaa !20
  %486 = add nuw nsw i64 %.6767, 2
  %niter931.next.1 = add i64 %niter931, 2
  %niter931.ncmp.1 = icmp eq i64 %niter931.next.1, %unroll_iter930
  br i1 %niter931.ncmp.1, label %.preheader622.loopexit.unr-lcssa, label %476, !llvm.loop !66

.preheader.loopexit.unr-lcssa:                    ; preds = %493, %.lr.ph771
  %.7770.unr = phi i64 [ 0, %.lr.ph771 ], [ %503, %493 ]
  %lcmp.mod935.not = icmp eq i64 %xtraiter933, 0
  br i1 %lcmp.mod935.not, label %.preheader, label %.preheader.loopexit.epilog-lcssa

.preheader.loopexit.epilog-lcssa:                 ; preds = %.preheader.loopexit.unr-lcssa
  %487 = load ptr, ptr %474, align 8, !tbaa !19
  %488 = getelementptr inbounds double, ptr %487, i64 %.7770.unr
  %489 = load double, ptr %488, align 8, !tbaa !20
  %490 = call double @llvm.fmuladd.f64(double %489, double %186, double %193)
  store double %490, ptr %488, align 8, !tbaa !20
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.epilog-lcssa, %.preheader.loopexit.unr-lcssa, %.preheader622
  %491 = mul nsw i64 %414, %25
  %.not.not618772 = icmp sgt i64 %491, 0
  br i1 %.not.not618772, label %.lr.ph774, label %._crit_edge775

.lr.ph774:                                        ; preds = %.preheader
  %492 = getelementptr inbounds i8, ptr %1, i64 224
  br label %504

493:                                              ; preds = %493, %.lr.ph771.new
  %.7770 = phi i64 [ 0, %.lr.ph771.new ], [ %503, %493 ]
  %niter937 = phi i64 [ 0, %.lr.ph771.new ], [ %niter937.next.1, %493 ]
  %494 = load ptr, ptr %474, align 8, !tbaa !19
  %495 = getelementptr inbounds double, ptr %494, i64 %.7770
  %496 = load double, ptr %495, align 8, !tbaa !20
  %497 = call double @llvm.fmuladd.f64(double %496, double %186, double %193)
  store double %497, ptr %495, align 8, !tbaa !20
  %498 = or disjoint i64 %.7770, 1
  %499 = load ptr, ptr %474, align 8, !tbaa !19
  %500 = getelementptr inbounds double, ptr %499, i64 %498
  %501 = load double, ptr %500, align 8, !tbaa !20
  %502 = call double @llvm.fmuladd.f64(double %501, double %186, double %193)
  store double %502, ptr %500, align 8, !tbaa !20
  %503 = add nuw nsw i64 %.7770, 2
  %niter937.next.1 = add i64 %niter937, 2
  %niter937.ncmp.1 = icmp eq i64 %niter937.next.1, %unroll_iter936
  br i1 %niter937.ncmp.1, label %.preheader.loopexit.unr-lcssa, label %493, !llvm.loop !67

504:                                              ; preds = %.lr.ph774, %504
  %.8773 = phi i64 [ 0, %.lr.ph774 ], [ %521, %504 ]
  %505 = load ptr, ptr %492, align 8, !tbaa !19
  %506 = getelementptr double, ptr %505, i64 %202
  %507 = getelementptr double, ptr %506, i64 %.8773
  %508 = load double, ptr %507, align 8, !tbaa !20
  %509 = fmul double %187, %508
  store double %509, ptr %507, align 8, !tbaa !20
  %510 = load ptr, ptr %492, align 8, !tbaa !19
  %511 = getelementptr double, ptr %510, i64 %205
  %512 = getelementptr double, ptr %511, i64 %.8773
  %513 = load double, ptr %512, align 8, !tbaa !20
  %514 = fmul double %188, %513
  store double %514, ptr %512, align 8, !tbaa !20
  %515 = load ptr, ptr %492, align 8, !tbaa !19
  %516 = getelementptr double, ptr %515, i64 %208
  %517 = getelementptr double, ptr %516, i64 %.8773
  %518 = load double, ptr %517, align 8, !tbaa !20
  %519 = fmul double %187, %518
  %520 = fmul double %188, %519
  store double %520, ptr %517, align 8, !tbaa !20
  %521 = add nuw nsw i64 %.8773, 1
  %exitcond812.not = icmp eq i64 %521, %491
  br i1 %exitcond812.not, label %._crit_edge775, label %504, !llvm.loop !68

._crit_edge775:                                   ; preds = %504, %.preheader
  %522 = getelementptr inbounds i8, ptr %2, i64 24
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %2, i8 0, i64 24, i1 false)
  store double 1.000000e+00, ptr %522, align 8, !tbaa !69
  br label %._crit_edge754

523:                                              ; preds = %._crit_edge731
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %9, i64 noundef 7, ptr noundef %3)
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %10, i64 noundef 7, ptr noundef %3)
  %524 = getelementptr inbounds i8, ptr %9, i64 56
  %525 = load ptr, ptr %524, align 8, !tbaa !19
  store double -3.000000e+00, ptr %525, align 8, !tbaa !20
  %526 = load ptr, ptr %524, align 8, !tbaa !19
  %527 = getelementptr inbounds i8, ptr %526, i64 8
  store double -2.000000e+00, ptr %527, align 8, !tbaa !20
  %528 = load ptr, ptr %524, align 8, !tbaa !19
  %529 = getelementptr inbounds i8, ptr %528, i64 16
  store double -1.000000e+00, ptr %529, align 8, !tbaa !20
  %530 = load ptr, ptr %524, align 8, !tbaa !19
  %531 = getelementptr inbounds i8, ptr %530, i64 24
  store double 0.000000e+00, ptr %531, align 8, !tbaa !20
  %532 = load ptr, ptr %524, align 8, !tbaa !19
  %533 = getelementptr inbounds i8, ptr %532, i64 32
  store double 1.000000e+00, ptr %533, align 8, !tbaa !20
  %534 = load ptr, ptr %524, align 8, !tbaa !19
  %535 = getelementptr inbounds i8, ptr %534, i64 40
  store double 2.000000e+00, ptr %535, align 8, !tbaa !20
  %536 = load ptr, ptr %524, align 8, !tbaa !19
  %537 = getelementptr inbounds i8, ptr %536, i64 48
  store double 3.000000e+00, ptr %537, align 8, !tbaa !20
  %538 = getelementptr inbounds i8, ptr %10, i64 56
  %539 = load ptr, ptr %538, align 8, !tbaa !19
  store double 0.000000e+00, ptr %539, align 8, !tbaa !20
  %540 = load ptr, ptr %538, align 8, !tbaa !19
  %541 = getelementptr inbounds i8, ptr %540, i64 8
  store double 0.000000e+00, ptr %541, align 8, !tbaa !20
  %542 = load ptr, ptr %538, align 8, !tbaa !19
  %543 = getelementptr inbounds i8, ptr %542, i64 16
  store double 0x3FB5555555555555, ptr %543, align 8, !tbaa !20
  %544 = load ptr, ptr %538, align 8, !tbaa !19
  %545 = getelementptr inbounds i8, ptr %544, i64 24
  store double 0x3FD5555555555555, ptr %545, align 8, !tbaa !20
  %546 = load ptr, ptr %538, align 8, !tbaa !19
  %547 = getelementptr inbounds i8, ptr %546, i64 32
  store double 0x3FB5555555555555, ptr %547, align 8, !tbaa !20
  %548 = load ptr, ptr %538, align 8, !tbaa !19
  %549 = getelementptr inbounds i8, ptr %548, i64 40
  store double 0.000000e+00, ptr %549, align 8, !tbaa !20
  %550 = load ptr, ptr %538, align 8, !tbaa !19
  %551 = getelementptr inbounds i8, ptr %550, i64 48
  store double 0.000000e+00, ptr %551, align 8, !tbaa !20
  %552 = load i64, ptr %9, align 8, !tbaa !71
  call void @_ZN11alglib_impl18spline1dbuildcubicEPKNS_9ae_vectorES2_lldldPNS_19spline1dinterpolantEPNS_8ae_stateE(ptr noundef nonnull %9, ptr noundef nonnull %10, i64 noundef %552, i64 noundef 2, double noundef 0.000000e+00, i64 noundef 2, double noundef 0.000000e+00, ptr noundef nonnull %16, ptr noundef %3)
  %553 = load i64, ptr %109, align 8, !tbaa !30
  switch i64 %553, label %584 [
    i64 1, label %554
    i64 2, label %562
    i64 3, label %571
  ]

554:                                              ; preds = %523
  call void @_ZN11alglib_implL36spline2d_reorderdatasetandbuildindexEPNS_9ae_vectorEllS1_lllS1_S1_PNS_8ae_stateE(ptr noundef nonnull %7, i64 noundef %.0566.lcssa829, i64 noundef %25, ptr noundef nonnull %11, i64 noundef 0, i64 noundef %195, i64 noundef %196, ptr noundef nonnull %14, ptr noundef nonnull %15, ptr noundef %3)
  %555 = load double, ptr @_ZN11alglib_implL26spline2d_lambdaregblockllsE, align 8, !tbaa !20
  %556 = getelementptr inbounds i8, ptr %0, i64 80
  %557 = load double, ptr %556, align 8, !tbaa !72
  call void @_ZN11alglib_implL24spline2d_xdesigngenerateEPKNS_9ae_vectorES2_lllllllddPKNS_19spline1dinterpolantEPNS_21spline2dxdesignmatrixEPNS_8ae_stateE(ptr noundef nonnull %7, ptr noundef nonnull %14, i64 noundef 0, i64 noundef %195, i64 noundef %195, i64 noundef 0, i64 noundef %196, i64 noundef %196, i64 noundef %25, double noundef %555, double noundef %557, ptr noundef nonnull %16, ptr noundef nonnull %19, ptr noundef %3)
  %558 = getelementptr inbounds i8, ptr %0, i64 224
  %559 = load i64, ptr %558, align 8, !tbaa !73
  call void @_ZN11alglib_implL20spline2d_blockllsfitEPNS_21spline2dxdesignmatrixElPNS_9ae_vectorEPNS_17spline2dfitreportEdPNS_19spline2dblockllsbufEPNS_8ae_stateE(ptr noundef nonnull %19, i64 noundef %559, ptr noundef nonnull %20, ptr noundef %2, double noundef %407, ptr noundef nonnull %21, ptr noundef %3)
  %560 = load i64, ptr %199, align 8, !tbaa !46
  %561 = load i64, ptr %198, align 8, !tbaa !45
  call void @_ZN11alglib_implL26spline2d_updatesplinetableEPKNS_9ae_vectorElllPKNS_19spline1dinterpolantElPS0_lllPNS_8ae_stateE(ptr noundef nonnull %20, i64 noundef %195, i64 noundef %196, i64 noundef %25, ptr noundef nonnull %16, i64 noundef 2, ptr noundef nonnull %212, i64 noundef %560, i64 noundef %561, i64 noundef 1, ptr noundef %3)
  br label %585

562:                                              ; preds = %523
  %563 = getelementptr inbounds i8, ptr %0, i64 80
  %564 = load double, ptr %563, align 8, !tbaa !72
  %565 = load double, ptr @_ZN11alglib_implL26spline2d_lambdaregblockllsE, align 8, !tbaa !20
  call void @_ZN11alglib_implL29spline2d_generatedesignmatrixEPKNS_9ae_vectorEllllddPKNS_19spline1dinterpolantEPNS_12sparsematrixES7_PlPNS_8ae_stateE(ptr noundef nonnull %7, i64 noundef %.0566.lcssa829, i64 noundef %25, i64 noundef %195, i64 noundef %196, double noundef %564, double noundef %565, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %6, ptr noundef %3)
  %566 = load i64, ptr %6, align 8, !tbaa !74
  %567 = getelementptr inbounds i8, ptr %0, i64 224
  %568 = load i64, ptr %567, align 8, !tbaa !73
  call void @_ZN11alglib_implL20spline2d_naivellsfitEPKNS_12sparsematrixES2_lPNS_9ae_vectorElllllS4_PNS_17spline2dfitreportEdPNS_8ae_stateE(ptr noundef nonnull %17, ptr noundef nonnull %18, i64 noundef %566, ptr noundef nonnull %7, i64 noundef %195, i64 noundef %196, i64 noundef %.0566.lcssa829, i64 noundef %25, i64 noundef %568, ptr noundef nonnull %20, ptr noundef %2, double noundef %407, ptr noundef %3)
  %569 = load i64, ptr %199, align 8, !tbaa !46
  %570 = load i64, ptr %198, align 8, !tbaa !45
  call void @_ZN11alglib_implL26spline2d_updatesplinetableEPKNS_9ae_vectorElllPKNS_19spline1dinterpolantElPS0_lllPNS_8ae_stateE(ptr noundef nonnull %20, i64 noundef %195, i64 noundef %196, i64 noundef %25, ptr noundef nonnull %16, i64 noundef 2, ptr noundef nonnull %212, i64 noundef %569, i64 noundef %570, i64 noundef 1, ptr noundef %3)
  br label %585

571:                                              ; preds = %523
  %572 = icmp sgt i64 %.1565, 0
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %572, ptr noundef nonnull @.str.921, ptr noundef %3)
  %573 = icmp sgt i64 %.1563, 0
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %573, ptr noundef nonnull @.str.921, ptr noundef %3)
  %574 = getelementptr inbounds i8, ptr %0, i64 232
  %575 = load i64, ptr %574, align 8, !tbaa !31
  %576 = getelementptr inbounds i8, ptr %0, i64 216
  %577 = load i64, ptr %576, align 8, !tbaa !75
  %578 = getelementptr inbounds i8, ptr %0, i64 88
  %579 = load i64, ptr %578, align 8, !tbaa !76
  %580 = getelementptr inbounds i8, ptr %0, i64 80
  %581 = load double, ptr %580, align 8, !tbaa !72
  %582 = getelementptr inbounds i8, ptr %0, i64 224
  %583 = load i64, ptr %582, align 8, !tbaa !73
  call void @_ZN11alglib_implL19spline2d_fastddmfitEPNS_9ae_vectorEllllllllldlPKNS_19spline1dinterpolantEPNS_19spline2dinterpolantEPNS_17spline2dfitreportEdPNS_8ae_stateE(ptr noundef nonnull %7, i64 noundef %.0566.lcssa829, i64 noundef %25, i64 noundef %195, i64 noundef %196, i64 noundef %.1565, i64 noundef %.1563, i64 noundef %575, i64 noundef %577, i64 noundef %579, double noundef %581, i64 noundef %583, ptr noundef nonnull %16, ptr noundef nonnull %1, ptr noundef %2, double noundef %407, ptr noundef %3)
  br label %585

584:                                              ; preds = %523
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.921, ptr noundef %3)
  br label %585

585:                                              ; preds = %562, %584, %571, %554
  %586 = load i64, ptr %198, align 8, !tbaa !45
  %587 = load i64, ptr %199, align 8, !tbaa !46
  %588 = mul nsw i64 %587, %586
  %.not.not610738 = icmp sgt i64 %588, 0
  br i1 %.not.not610738, label %.lr.ph741, label %.preheader627

.lr.ph741:                                        ; preds = %585
  %589 = getelementptr inbounds i8, ptr %1, i64 224
  %590 = getelementptr inbounds i8, ptr %8, i64 72
  %591 = getelementptr inbounds i8, ptr %1, i64 96
  %592 = getelementptr inbounds i8, ptr %1, i64 160
  br label %595

.preheader627:                                    ; preds = %._crit_edge737, %585
  %.not.not611745 = icmp sgt i64 %586, 0
  br i1 %.not.not611745, label %.lr.ph747, label %.preheader626

.lr.ph747:                                        ; preds = %.preheader627
  %593 = getelementptr inbounds i8, ptr %1, i64 96
  %xtraiter915 = and i64 %586, 1
  %594 = icmp eq i64 %586, 1
  br i1 %594, label %.preheader626.loopexit.unr-lcssa, label %.lr.ph747.new

.lr.ph747.new:                                    ; preds = %.lr.ph747
  %unroll_iter918 = and i64 %586, 9223372036854775806
  br label %650

595:                                              ; preds = %.lr.ph741, %._crit_edge737
  %.3584739 = phi i64 [ 0, %.lr.ph741 ], [ %643, %._crit_edge737 ]
  %596 = srem i64 %.3584739, %586
  %597 = sdiv i64 %.3584739, %586
  br i1 %.not.not606703, label %.lr.ph736, label %._crit_edge737

.lr.ph736:                                        ; preds = %595
  %598 = mul nsw i64 %597, %586
  %599 = add nsw i64 %598, %596
  %600 = mul nsw i64 %599, %25
  br label %601

601:                                              ; preds = %.lr.ph736, %601
  %.5590734 = phi i64 [ 0, %.lr.ph736 ], [ %642, %601 ]
  %602 = add nsw i64 %.5590734, %600
  %603 = load ptr, ptr %589, align 8, !tbaa !19
  %604 = getelementptr inbounds double, ptr %603, i64 %602
  %605 = load double, ptr %604, align 8, !tbaa !20
  %606 = load ptr, ptr %590, align 8, !tbaa !19
  %607 = getelementptr inbounds ptr, ptr %606, i64 %.5590734
  %608 = load ptr, ptr %607, align 8, !tbaa !63
  %609 = load double, ptr %608, align 8, !tbaa !20
  %610 = load ptr, ptr %591, align 8, !tbaa !19
  %611 = getelementptr inbounds double, ptr %610, i64 %596
  %612 = load double, ptr %611, align 8, !tbaa !20
  %613 = call double @llvm.fmuladd.f64(double %609, double %612, double %605)
  %614 = getelementptr inbounds i8, ptr %608, i64 8
  %615 = load double, ptr %614, align 8, !tbaa !20
  %616 = load ptr, ptr %592, align 8, !tbaa !19
  %617 = getelementptr inbounds double, ptr %616, i64 %597
  %618 = load double, ptr %617, align 8, !tbaa !20
  %619 = call double @llvm.fmuladd.f64(double %615, double %618, double %613)
  %620 = getelementptr inbounds i8, ptr %608, i64 16
  %621 = load double, ptr %620, align 8, !tbaa !20
  %622 = fadd double %619, %621
  store double %622, ptr %604, align 8, !tbaa !20
  %623 = load ptr, ptr %589, align 8, !tbaa !19
  %624 = getelementptr double, ptr %623, i64 %202
  %625 = getelementptr double, ptr %624, i64 %602
  %626 = load double, ptr %625, align 8, !tbaa !20
  %627 = load ptr, ptr %590, align 8, !tbaa !19
  %628 = getelementptr inbounds ptr, ptr %627, i64 %.5590734
  %629 = load ptr, ptr %628, align 8, !tbaa !63
  %630 = load double, ptr %629, align 8, !tbaa !20
  %631 = fadd double %626, %630
  store double %631, ptr %625, align 8, !tbaa !20
  %632 = load ptr, ptr %589, align 8, !tbaa !19
  %633 = getelementptr double, ptr %632, i64 %205
  %634 = getelementptr double, ptr %633, i64 %602
  %635 = load double, ptr %634, align 8, !tbaa !20
  %636 = load ptr, ptr %590, align 8, !tbaa !19
  %637 = getelementptr inbounds ptr, ptr %636, i64 %.5590734
  %638 = load ptr, ptr %637, align 8, !tbaa !63
  %639 = getelementptr inbounds i8, ptr %638, i64 8
  %640 = load double, ptr %639, align 8, !tbaa !20
  %641 = fadd double %635, %640
  store double %641, ptr %634, align 8, !tbaa !20
  %642 = add nuw nsw i64 %.5590734, 1
  %exitcond803.not = icmp eq i64 %642, %25
  br i1 %exitcond803.not, label %._crit_edge737, label %601, !llvm.loop !77

._crit_edge737:                                   ; preds = %601, %595
  %643 = add nuw nsw i64 %.3584739, 1
  %exitcond804.not = icmp eq i64 %643, %588
  br i1 %exitcond804.not, label %.preheader627, label %595, !llvm.loop !78

.preheader626.loopexit.unr-lcssa:                 ; preds = %650, %.lr.ph747
  %.9746.unr = phi i64 [ 0, %.lr.ph747 ], [ %660, %650 ]
  %lcmp.mod917.not = icmp eq i64 %xtraiter915, 0
  br i1 %lcmp.mod917.not, label %.preheader626, label %.preheader626.loopexit.epilog-lcssa

.preheader626.loopexit.epilog-lcssa:              ; preds = %.preheader626.loopexit.unr-lcssa
  %644 = load ptr, ptr %593, align 8, !tbaa !19
  %645 = getelementptr inbounds double, ptr %644, i64 %.9746.unr
  %646 = load double, ptr %645, align 8, !tbaa !20
  %647 = call double @llvm.fmuladd.f64(double %646, double %181, double %191)
  store double %647, ptr %645, align 8, !tbaa !20
  br label %.preheader626

.preheader626:                                    ; preds = %.preheader626.loopexit.epilog-lcssa, %.preheader626.loopexit.unr-lcssa, %.preheader627
  %.not.not612748 = icmp sgt i64 %587, 0
  br i1 %.not.not612748, label %.lr.ph750, label %.preheader625

.lr.ph750:                                        ; preds = %.preheader626
  %648 = getelementptr inbounds i8, ptr %1, i64 160
  %xtraiter921 = and i64 %587, 1
  %649 = icmp eq i64 %587, 1
  br i1 %649, label %.preheader625.loopexit.unr-lcssa, label %.lr.ph750.new

.lr.ph750.new:                                    ; preds = %.lr.ph750
  %unroll_iter924 = and i64 %587, 9223372036854775806
  br label %667

650:                                              ; preds = %650, %.lr.ph747.new
  %.9746 = phi i64 [ 0, %.lr.ph747.new ], [ %660, %650 ]
  %niter919 = phi i64 [ 0, %.lr.ph747.new ], [ %niter919.next.1, %650 ]
  %651 = load ptr, ptr %593, align 8, !tbaa !19
  %652 = getelementptr inbounds double, ptr %651, i64 %.9746
  %653 = load double, ptr %652, align 8, !tbaa !20
  %654 = call double @llvm.fmuladd.f64(double %653, double %181, double %191)
  store double %654, ptr %652, align 8, !tbaa !20
  %655 = or disjoint i64 %.9746, 1
  %656 = load ptr, ptr %593, align 8, !tbaa !19
  %657 = getelementptr inbounds double, ptr %656, i64 %655
  %658 = load double, ptr %657, align 8, !tbaa !20
  %659 = call double @llvm.fmuladd.f64(double %658, double %181, double %191)
  store double %659, ptr %657, align 8, !tbaa !20
  %660 = add nuw nsw i64 %.9746, 2
  %niter919.next.1 = add i64 %niter919, 2
  %niter919.ncmp.1 = icmp eq i64 %niter919.next.1, %unroll_iter918
  br i1 %niter919.ncmp.1, label %.preheader626.loopexit.unr-lcssa, label %650, !llvm.loop !79

.preheader625.loopexit.unr-lcssa:                 ; preds = %667, %.lr.ph750
  %.10749.unr = phi i64 [ 0, %.lr.ph750 ], [ %677, %667 ]
  %lcmp.mod923.not = icmp eq i64 %xtraiter921, 0
  br i1 %lcmp.mod923.not, label %.preheader625, label %.preheader625.loopexit.epilog-lcssa

.preheader625.loopexit.epilog-lcssa:              ; preds = %.preheader625.loopexit.unr-lcssa
  %661 = load ptr, ptr %648, align 8, !tbaa !19
  %662 = getelementptr inbounds double, ptr %661, i64 %.10749.unr
  %663 = load double, ptr %662, align 8, !tbaa !20
  %664 = call double @llvm.fmuladd.f64(double %663, double %186, double %193)
  store double %664, ptr %662, align 8, !tbaa !20
  br label %.preheader625

.preheader625:                                    ; preds = %.preheader625.loopexit.epilog-lcssa, %.preheader625.loopexit.unr-lcssa, %.preheader626
  %665 = mul nsw i64 %588, %25
  %.not.not613751 = icmp sgt i64 %665, 0
  br i1 %.not.not613751, label %.lr.ph753, label %._crit_edge754

.lr.ph753:                                        ; preds = %.preheader625
  %666 = getelementptr inbounds i8, ptr %1, i64 224
  br label %678

667:                                              ; preds = %667, %.lr.ph750.new
  %.10749 = phi i64 [ 0, %.lr.ph750.new ], [ %677, %667 ]
  %niter925 = phi i64 [ 0, %.lr.ph750.new ], [ %niter925.next.1, %667 ]
  %668 = load ptr, ptr %648, align 8, !tbaa !19
  %669 = getelementptr inbounds double, ptr %668, i64 %.10749
  %670 = load double, ptr %669, align 8, !tbaa !20
  %671 = call double @llvm.fmuladd.f64(double %670, double %186, double %193)
  store double %671, ptr %669, align 8, !tbaa !20
  %672 = or disjoint i64 %.10749, 1
  %673 = load ptr, ptr %648, align 8, !tbaa !19
  %674 = getelementptr inbounds double, ptr %673, i64 %672
  %675 = load double, ptr %674, align 8, !tbaa !20
  %676 = call double @llvm.fmuladd.f64(double %675, double %186, double %193)
  store double %676, ptr %674, align 8, !tbaa !20
  %677 = add nuw nsw i64 %.10749, 2
  %niter925.next.1 = add i64 %niter925, 2
  %niter925.ncmp.1 = icmp eq i64 %niter925.next.1, %unroll_iter924
  br i1 %niter925.ncmp.1, label %.preheader625.loopexit.unr-lcssa, label %667, !llvm.loop !80

678:                                              ; preds = %.lr.ph753, %678
  %.11752 = phi i64 [ 0, %.lr.ph753 ], [ %695, %678 ]
  %679 = load ptr, ptr %666, align 8, !tbaa !19
  %680 = getelementptr double, ptr %679, i64 %202
  %681 = getelementptr double, ptr %680, i64 %.11752
  %682 = load double, ptr %681, align 8, !tbaa !20
  %683 = fmul double %187, %682
  store double %683, ptr %681, align 8, !tbaa !20
  %684 = load ptr, ptr %666, align 8, !tbaa !19
  %685 = getelementptr double, ptr %684, i64 %205
  %686 = getelementptr double, ptr %685, i64 %.11752
  %687 = load double, ptr %686, align 8, !tbaa !20
  %688 = fmul double %188, %687
  store double %688, ptr %686, align 8, !tbaa !20
  %689 = load ptr, ptr %666, align 8, !tbaa !19
  %690 = getelementptr double, ptr %689, i64 %208
  %691 = getelementptr double, ptr %690, i64 %.11752
  %692 = load double, ptr %691, align 8, !tbaa !20
  %693 = fmul double %187, %692
  %694 = fmul double %188, %693
  store double %694, ptr %691, align 8, !tbaa !20
  %695 = add nuw nsw i64 %.11752, 1
  %exitcond807.not = icmp eq i64 %695, %665
  br i1 %exitcond807.not, label %._crit_edge754, label %678, !llvm.loop !81

._crit_edge754:                                   ; preds = %678, %.preheader625, %._crit_edge775
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %3)
  call void @llvm.lifetime.end.p0(i64 2648, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 496, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 368, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 368, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 160, ptr nonnull %16) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %9) #5
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %8) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %5) #5
  ret void
}

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

declare noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef, double noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

declare noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

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

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef, double noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl15buildpriorterm1EPNS_9ae_vectorElllldPNS_9ae_matrixEPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

declare noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef, double noundef) local_unnamed_addr #2

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

declare noundef i64 @_ZN11alglib_impl5imin2EllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare noundef i64 @_ZN11alglib_impl6idivupEllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl26_spline2dinterpolant_clearEPv(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl24_spline2dfitreport_clearEPv(ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl27_spline2dxdesignmatrix_initEPvPNS_8ae_stateEb(ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl25_spline2dblockllsbuf_initEPvPNS_8ae_stateEb(ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL36spline2d_reorderdatasetandbuildindexEPNS_9ae_vectorEllS1_lllS1_S1_PNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL24spline2d_xdesigngenerateEPKNS_9ae_vectorES2_lllllllddPKNS_19spline1dinterpolantEPNS_21spline2dxdesignmatrixEPNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL20spline2d_blockllsfitEPNS_21spline2dxdesignmatrixElPNS_9ae_vectorEPNS_17spline2dfitreportEdPNS_19spline2dblockllsbufEPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef, ptr noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL26spline2d_updatesplinetableEPKNS_9ae_vectorElllPKNS_19spline1dinterpolantElPS0_lllPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL29spline2d_generatedesignmatrixEPKNS_9ae_vectorEllllddPKNS_19spline1dinterpolantEPNS_12sparsematrixES7_PlPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL20spline2d_naivellsfitEPKNS_12sparsematrixES2_lPNS_9ae_vectorElllllS4_PNS_17spline2dfitreportEdPNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef, double noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL19spline2d_fastddmfitEPNS_9ae_vectorEllllllllldlPKNS_19spline1dinterpolantEPNS_19spline2dinterpolantEPNS_17spline2dfitreportEdPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, ptr noundef) local_unnamed_addr #3

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 176}
!6 = !{!"_ZTSN11alglib_impl15spline2dbuilderE", !7, i64 0, !10, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !10, i64 80, !7, i64 88, !7, i64 96, !10, i64 104, !11, i64 112, !7, i64 176, !7, i64 184, !10, i64 192, !10, i64 200, !12, i64 208, !7, i64 216, !7, i64 224, !7, i64 232}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !12, i64 16, !13, i64 24, !8, i64 56}
!12 = !{!"bool", !8, i64 0}
!13 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!14 = !{!"any pointer", !8, i64 0}
!15 = !{!6, !7, i64 184}
!16 = !{!6, !10, i64 192}
!17 = !{!6, !10, i64 200}
!18 = !{!6, !7, i64 16}
!19 = !{!8, !8, i64 0}
!20 = !{!10, !10, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!6, !10, i64 24}
!24 = !{!6, !10, i64 32}
!25 = !{!6, !10, i64 40}
!26 = !{!6, !10, i64 48}
!27 = !{!6, !7, i64 56}
!28 = !{!6, !7, i64 64}
!29 = !{!6, !7, i64 72}
!30 = !{!6, !7, i64 96}
!31 = !{!6, !7, i64 232}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.unroll.disable"}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !22}
!40 = !{!6, !12, i64 208}
!41 = !{i8 0, i8 2}
!42 = !{}
!43 = !{!44, !7, i64 32}
!44 = !{!"_ZTSN11alglib_impl19spline2dinterpolantE", !7, i64 0, !12, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !11, i64 40, !11, i64 104, !11, i64 168, !11, i64 232, !11, i64 296}
!45 = !{!44, !7, i64 16}
!46 = !{!44, !7, i64 24}
!47 = !{!44, !7, i64 0}
!48 = !{!44, !12, i64 8}
!49 = distinct !{!49, !37}
!50 = distinct !{!50, !22}
!51 = distinct !{!51, !37}
!52 = distinct !{!52, !22}
!53 = distinct !{!53, !22}
!54 = distinct !{!54, !22}
!55 = distinct !{!55, !37}
!56 = distinct !{!56, !22}
!57 = distinct !{!57, !22}
!58 = distinct !{!58, !22}
!59 = distinct !{!59, !22}
!60 = distinct !{!60, !22}
!61 = !{!6, !7, i64 0}
!62 = !{!6, !10, i64 8}
!63 = !{!14, !14, i64 0}
!64 = distinct !{!64, !22}
!65 = distinct !{!65, !22}
!66 = distinct !{!66, !22}
!67 = distinct !{!67, !22}
!68 = distinct !{!68, !22}
!69 = !{!70, !10, i64 24}
!70 = !{!"_ZTSN11alglib_impl17spline2dfitreportE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24}
!71 = !{!11, !7, i64 0}
!72 = !{!6, !10, i64 80}
!73 = !{!6, !7, i64 224}
!74 = !{!7, !7, i64 0}
!75 = !{!6, !7, i64 216}
!76 = !{!6, !7, i64 88}
!77 = distinct !{!77, !22}
!78 = distinct !{!78, !22}
!79 = distinct !{!79, !22}
!80 = distinct !{!80, !22}
!81 = distinct !{!81, !22}


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