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

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

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

@.str.288 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.289 = external hidden unnamed_addr constant [74 x i8], align 1

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

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

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

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

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

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

declare void @_ZN11alglib_impl15ae_vector_clearEPNS_9ae_vectorE(ptr noundef) #2

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

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

declare void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 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 noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef, double noundef) #2

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

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl23spline1drootsandextremaEPNS_19spline1dinterpolantEPNS_9ae_vectorEPlPbS3_S3_S4_S5_PNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) #4 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca %"struct.alglib_impl::ae_frame", align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca %"struct.alglib_impl::ae_vector", align 8
  %26 = alloca %"struct.alglib_impl::ae_vector", align 8
  %27 = alloca %"struct.alglib_impl::ae_vector", align 8
  %28 = alloca %"struct.alglib_impl::ae_vector", align 8
  %29 = alloca %"struct.alglib_impl::ae_vector", align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i8, align 1
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store ptr %2, ptr %12, align 8, !tbaa !5
  store ptr %3, ptr %13, align 8, !tbaa !5
  store ptr %4, ptr %14, align 8, !tbaa !5
  store ptr %5, ptr %15, align 8, !tbaa !5
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, 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 64, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 64, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 64, 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 1, ptr %39) #5
  %40 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %40, ptr noundef %19)
  call void @llvm.memset.p0.i64(ptr align 8 %25, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %26, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %27, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %28, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %29, i8 0, i64 64, i1 false)
  %41 = load ptr, ptr %11, align 8, !tbaa !5
  call void @_ZN11alglib_impl15ae_vector_clearEPNS_9ae_vectorE(ptr noundef %41)
  %42 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 0, ptr %42, align 8, !tbaa !9
  %43 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 0, ptr %43, align 1, !tbaa !11
  %44 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl15ae_vector_clearEPNS_9ae_vectorE(ptr noundef %44)
  %45 = load ptr, ptr %15, align 8, !tbaa !5
  call void @_ZN11alglib_impl15ae_vector_clearEPNS_9ae_vectorE(ptr noundef %45)
  %46 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 0, ptr %46, align 8, !tbaa !9
  %47 = load ptr, ptr %17, align 8, !tbaa !5
  store i8 0, ptr %47, align 1, !tbaa !11
  %48 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %25, i64 noundef 0, i64 noundef 3, ptr noundef %48, i1 noundef zeroext true)
  %49 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %26, i64 noundef 0, i64 noundef 3, ptr noundef %49, i1 noundef zeroext true)
  %50 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %27, i64 noundef 0, i64 noundef 3, ptr noundef %50, i1 noundef zeroext true)
  %51 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %28, i64 noundef 0, i64 noundef 2, ptr noundef %51, i1 noundef zeroext true)
  %52 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %29, i64 noundef 0, i64 noundef 3, ptr noundef %52, i1 noundef zeroext true)
  %53 = load ptr, ptr %10, align 8, !tbaa !5
  %54 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %53, i32 0, i32 2
  %55 = load i64, ptr %54, align 8, !tbaa !13
  %56 = icmp eq i64 %55, 3
  %57 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %56, ptr noundef @.str.288, ptr noundef %57)
  %58 = load ptr, ptr %10, align 8, !tbaa !5
  %59 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %58, i32 0, i32 3
  %60 = load i64, ptr %59, align 8, !tbaa !17
  %61 = icmp sge i64 %60, 0
  %62 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %61, ptr noundef @.str.289, ptr noundef %62)
  %63 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 0, ptr %63, align 8, !tbaa !9
  %64 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 0, ptr %64, align 8, !tbaa !9
  %65 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 0, ptr %65, align 1, !tbaa !11
  %66 = load ptr, ptr %17, align 8, !tbaa !5
  store i8 0, ptr %66, align 1, !tbaa !11
  store i8 1, ptr %39, align 1, !tbaa !11
  %67 = load ptr, ptr %10, align 8, !tbaa !5
  %68 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %67, i32 0, i32 3
  %69 = load i64, ptr %68, align 8, !tbaa !17
  %70 = icmp eq i64 %69, 0
  br i1 %70, label %71, label %483

71:                                               ; preds = %9
  %72 = load ptr, ptr %10, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %72, i32 0, i32 1
  %74 = load i64, ptr %73, align 8, !tbaa !18
  %75 = sub nsw i64 %74, 1
  %76 = mul nsw i64 3, %75
  %77 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %26, i64 noundef %76, ptr noundef %77)
  %78 = load ptr, ptr %10, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %78, i32 0, i32 1
  %80 = load i64, ptr %79, align 8, !tbaa !18
  %81 = sub nsw i64 %80, 1
  %82 = mul nsw i64 2, %81
  %83 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %27, i64 noundef %82, ptr noundef %83)
  %84 = load ptr, ptr %10, align 8, !tbaa !5
  %85 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %84, i32 0, i32 1
  %86 = load i64, ptr %85, align 8, !tbaa !18
  %87 = sub nsw i64 %86, 1
  %88 = mul nsw i64 2, %87
  %89 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %28, i64 noundef %88, ptr noundef %89)
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %90

90:                                               ; preds = %415, %71
  %91 = load i64, ptr %37, align 8, !tbaa !9
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %92, i32 0, i32 1
  %94 = load i64, ptr %93, align 8, !tbaa !18
  %95 = sub nsw i64 %94, 2
  %96 = icmp sle i64 %91, %95
  br i1 %96, label %97, label %418

97:                                               ; preds = %90
  %98 = load ptr, ptr %10, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %98, i32 0, i32 5
  %100 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %99, i32 0, i32 4
  %101 = load ptr, ptr %100, align 8, !tbaa !19
  %102 = load i64, ptr %37, align 8, !tbaa !9
  %103 = mul nsw i64 4, %102
  %104 = getelementptr inbounds double, ptr %101, i64 %103
  %105 = load double, ptr %104, align 8, !tbaa !20
  store double %105, ptr %20, align 8, !tbaa !20
  %106 = load ptr, ptr %10, align 8, !tbaa !5
  %107 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %106, i32 0, i32 5
  %108 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %107, i32 0, i32 4
  %109 = load ptr, ptr %108, align 8, !tbaa !19
  %110 = load i64, ptr %37, align 8, !tbaa !9
  %111 = mul nsw i64 4, %110
  %112 = add nsw i64 %111, 1
  %113 = getelementptr inbounds double, ptr %109, i64 %112
  %114 = load double, ptr %113, align 8, !tbaa !20
  store double %114, ptr %21, align 8, !tbaa !20
  %115 = load ptr, ptr %10, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %115, i32 0, i32 5
  %117 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %116, i32 0, i32 4
  %118 = load ptr, ptr %117, align 8, !tbaa !19
  %119 = load i64, ptr %37, align 8, !tbaa !9
  %120 = add nsw i64 %119, 1
  %121 = mul nsw i64 4, %120
  %122 = getelementptr inbounds double, ptr %118, i64 %121
  %123 = load double, ptr %122, align 8, !tbaa !20
  store double %123, ptr %23, align 8, !tbaa !20
  %124 = load ptr, ptr %10, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %124, i32 0, i32 5
  %126 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %125, i32 0, i32 4
  %127 = load ptr, ptr %126, align 8, !tbaa !19
  %128 = load i64, ptr %37, align 8, !tbaa !9
  %129 = mul nsw i64 4, %128
  %130 = add nsw i64 %129, 1
  %131 = getelementptr inbounds double, ptr %127, i64 %130
  %132 = load double, ptr %131, align 8, !tbaa !20
  %133 = load ptr, ptr %10, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %133, i32 0, i32 5
  %135 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %134, i32 0, i32 4
  %136 = load ptr, ptr %135, align 8, !tbaa !19
  %137 = load i64, ptr %37, align 8, !tbaa !9
  %138 = mul nsw i64 4, %137
  %139 = add nsw i64 %138, 2
  %140 = getelementptr inbounds double, ptr %136, i64 %139
  %141 = load double, ptr %140, align 8, !tbaa !20
  %142 = fmul double 2.000000e+00, %141
  %143 = load ptr, ptr %10, align 8, !tbaa !5
  %144 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %143, i32 0, i32 4
  %145 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %144, i32 0, i32 4
  %146 = load ptr, ptr %145, align 8, !tbaa !19
  %147 = load i64, ptr %37, align 8, !tbaa !9
  %148 = add nsw i64 %147, 1
  %149 = getelementptr inbounds double, ptr %146, i64 %148
  %150 = load double, ptr %149, align 8, !tbaa !20
  %151 = load ptr, ptr %10, align 8, !tbaa !5
  %152 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %151, i32 0, i32 4
  %153 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %152, i32 0, i32 4
  %154 = load ptr, ptr %153, align 8, !tbaa !19
  %155 = load i64, ptr %37, align 8, !tbaa !9
  %156 = getelementptr inbounds double, ptr %154, i64 %155
  %157 = load double, ptr %156, align 8, !tbaa !20
  %158 = fsub double %150, %157
  %159 = call double @llvm.fmuladd.f64(double %142, double %158, double %132)
  %160 = load ptr, ptr %10, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %160, i32 0, i32 5
  %162 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %161, i32 0, i32 4
  %163 = load ptr, ptr %162, align 8, !tbaa !19
  %164 = load i64, ptr %37, align 8, !tbaa !9
  %165 = mul nsw i64 4, %164
  %166 = add nsw i64 %165, 3
  %167 = getelementptr inbounds double, ptr %163, i64 %166
  %168 = load double, ptr %167, align 8, !tbaa !20
  %169 = fmul double 3.000000e+00, %168
  %170 = load ptr, ptr %10, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %170, i32 0, i32 4
  %172 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %171, i32 0, i32 4
  %173 = load ptr, ptr %172, align 8, !tbaa !19
  %174 = load i64, ptr %37, align 8, !tbaa !9
  %175 = add nsw i64 %174, 1
  %176 = getelementptr inbounds double, ptr %173, i64 %175
  %177 = load double, ptr %176, align 8, !tbaa !20
  %178 = load ptr, ptr %10, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %178, i32 0, i32 4
  %180 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %179, i32 0, i32 4
  %181 = load ptr, ptr %180, align 8, !tbaa !19
  %182 = load i64, ptr %37, align 8, !tbaa !9
  %183 = getelementptr inbounds double, ptr %181, i64 %182
  %184 = load double, ptr %183, align 8, !tbaa !20
  %185 = fsub double %177, %184
  %186 = fmul double %169, %185
  %187 = load ptr, ptr %10, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %187, i32 0, i32 4
  %189 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %188, i32 0, i32 4
  %190 = load ptr, ptr %189, align 8, !tbaa !19
  %191 = load i64, ptr %37, align 8, !tbaa !9
  %192 = add nsw i64 %191, 1
  %193 = getelementptr inbounds double, ptr %190, i64 %192
  %194 = load double, ptr %193, align 8, !tbaa !20
  %195 = load ptr, ptr %10, align 8, !tbaa !5
  %196 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %195, i32 0, i32 4
  %197 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %196, i32 0, i32 4
  %198 = load ptr, ptr %197, align 8, !tbaa !19
  %199 = load i64, ptr %37, align 8, !tbaa !9
  %200 = getelementptr inbounds double, ptr %198, i64 %199
  %201 = load double, ptr %200, align 8, !tbaa !20
  %202 = fsub double %194, %201
  %203 = call double @llvm.fmuladd.f64(double %186, double %202, double %159)
  store double %203, ptr %24, align 8, !tbaa !20
  %204 = load double, ptr %20, align 8, !tbaa !20
  %205 = load double, ptr %21, align 8, !tbaa !20
  %206 = load double, ptr %23, align 8, !tbaa !20
  %207 = load double, ptr %24, align 8, !tbaa !20
  %208 = load ptr, ptr %10, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %208, i32 0, i32 4
  %210 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %209, i32 0, i32 4
  %211 = load ptr, ptr %210, align 8, !tbaa !19
  %212 = load i64, ptr %37, align 8, !tbaa !9
  %213 = getelementptr inbounds double, ptr %211, i64 %212
  %214 = load double, ptr %213, align 8, !tbaa !20
  %215 = load ptr, ptr %10, align 8, !tbaa !5
  %216 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %215, i32 0, i32 4
  %217 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %216, i32 0, i32 4
  %218 = load ptr, ptr %217, align 8, !tbaa !19
  %219 = load i64, ptr %37, align 8, !tbaa !9
  %220 = add nsw i64 %219, 1
  %221 = getelementptr inbounds double, ptr %218, i64 %220
  %222 = load double, ptr %221, align 8, !tbaa !20
  %223 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl17solvecubicpolinomEddddddPdS0_S0_S0_S0_PlS1_PNS_9ae_vectorEPNS_8ae_stateE(double noundef %204, double noundef %205, double noundef %206, double noundef %207, double noundef %214, double noundef %222, ptr noundef %30, ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %34, ptr noundef %36, ptr noundef %35, ptr noundef %25, ptr noundef %223)
  %224 = load ptr, ptr %13, align 8, !tbaa !5
  %225 = load i8, ptr %224, align 1, !tbaa !11, !range !22, !noundef !23
  %226 = trunc i8 %225 to i1
  br i1 %226, label %230, label %227

227:                                              ; preds = %97
  %228 = load i64, ptr %36, align 8, !tbaa !9
  %229 = icmp eq i64 %228, -1
  br label %230

230:                                              ; preds = %227, %97
  %231 = phi i1 [ true, %97 ], [ %229, %227 ]
  %232 = load ptr, ptr %13, align 8, !tbaa !5
  %233 = zext i1 %231 to i8
  store i8 %233, ptr %232, align 1, !tbaa !11
  %234 = load ptr, ptr %17, align 8, !tbaa !5
  %235 = load i8, ptr %234, align 1, !tbaa !11, !range !22, !noundef !23
  %236 = trunc i8 %235 to i1
  br i1 %236, label %240, label %237

237:                                              ; preds = %230
  %238 = load i64, ptr %35, align 8, !tbaa !9
  %239 = icmp eq i64 %238, -1
  br label %240

240:                                              ; preds = %237, %230
  %241 = phi i1 [ true, %230 ], [ %239, %237 ]
  %242 = load ptr, ptr %17, align 8, !tbaa !5
  %243 = zext i1 %241 to i8
  store i8 %243, ptr %242, align 1, !tbaa !11
  %244 = load i64, ptr %36, align 8, !tbaa !9
  %245 = icmp eq i64 %244, 1
  br i1 %245, label %246, label %287

246:                                              ; preds = %240
  %247 = load i8, ptr %39, align 1, !tbaa !11, !range !22, !noundef !23
  %248 = trunc i8 %247 to i1
  br i1 %248, label %249, label %287

249:                                              ; preds = %246
  %250 = load ptr, ptr %12, align 8, !tbaa !5
  %251 = load i64, ptr %250, align 8, !tbaa !9
  %252 = icmp sgt i64 %251, 0
  br i1 %252, label %253, label %275

253:                                              ; preds = %249
  %254 = load double, ptr %30, align 8, !tbaa !20
  %255 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %256 = load ptr, ptr %255, align 8, !tbaa !19
  %257 = load ptr, ptr %12, align 8, !tbaa !5
  %258 = load i64, ptr %257, align 8, !tbaa !9
  %259 = sub nsw i64 %258, 1
  %260 = getelementptr inbounds double, ptr %256, i64 %259
  %261 = load double, ptr %260, align 8, !tbaa !20
  %262 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %254, double noundef %261)
  br i1 %262, label %263, label %274

263:                                              ; preds = %253
  %264 = load double, ptr %30, align 8, !tbaa !20
  %265 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %266 = load ptr, ptr %265, align 8, !tbaa !19
  %267 = load ptr, ptr %12, align 8, !tbaa !5
  %268 = load i64, ptr %267, align 8, !tbaa !9
  %269 = getelementptr inbounds double, ptr %266, i64 %268
  store double %264, ptr %269, align 8, !tbaa !20
  %270 = load ptr, ptr %12, align 8, !tbaa !5
  %271 = load i64, ptr %270, align 8, !tbaa !9
  %272 = add nsw i64 %271, 1
  %273 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %272, ptr %273, align 8, !tbaa !9
  br label %274

274:                                              ; preds = %263, %253
  br label %286

275:                                              ; preds = %249
  %276 = load double, ptr %30, align 8, !tbaa !20
  %277 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %278 = load ptr, ptr %277, align 8, !tbaa !19
  %279 = load ptr, ptr %12, align 8, !tbaa !5
  %280 = load i64, ptr %279, align 8, !tbaa !9
  %281 = getelementptr inbounds double, ptr %278, i64 %280
  store double %276, ptr %281, align 8, !tbaa !20
  %282 = load ptr, ptr %12, align 8, !tbaa !5
  %283 = load i64, ptr %282, align 8, !tbaa !9
  %284 = add nsw i64 %283, 1
  %285 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %284, ptr %285, align 8, !tbaa !9
  br label %286

286:                                              ; preds = %275, %274
  br label %329

287:                                              ; preds = %246, %240
  %288 = load i64, ptr %36, align 8, !tbaa !9
  %289 = icmp eq i64 %288, -1
  br i1 %289, label %290, label %327

290:                                              ; preds = %287
  %291 = load i8, ptr %39, align 1, !tbaa !11, !range !22, !noundef !23
  %292 = trunc i8 %291 to i1
  br i1 %292, label %293, label %294

293:                                              ; preds = %290
  store i8 0, ptr %39, align 1, !tbaa !11
  br label %294

294:                                              ; preds = %293, %290
  %295 = load ptr, ptr %12, align 8, !tbaa !5
  %296 = load i64, ptr %295, align 8, !tbaa !9
  %297 = icmp sgt i64 %296, 0
  br i1 %297, label %298, label %320

298:                                              ; preds = %294
  %299 = load ptr, ptr %10, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %299, i32 0, i32 4
  %301 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %300, i32 0, i32 4
  %302 = load ptr, ptr %301, align 8, !tbaa !19
  %303 = load i64, ptr %37, align 8, !tbaa !9
  %304 = getelementptr inbounds double, ptr %302, i64 %303
  %305 = load double, ptr %304, align 8, !tbaa !20
  %306 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %307 = load ptr, ptr %306, align 8, !tbaa !19
  %308 = load ptr, ptr %12, align 8, !tbaa !5
  %309 = load i64, ptr %308, align 8, !tbaa !9
  %310 = sub nsw i64 %309, 1
  %311 = getelementptr inbounds double, ptr %307, i64 %310
  %312 = load double, ptr %311, align 8, !tbaa !20
  %313 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %305, double noundef %312)
  br i1 %313, label %314, label %319

314:                                              ; preds = %298
  %315 = load ptr, ptr %12, align 8, !tbaa !5
  %316 = load i64, ptr %315, align 8, !tbaa !9
  %317 = sub nsw i64 %316, 1
  %318 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %317, ptr %318, align 8, !tbaa !9
  br label %319

319:                                              ; preds = %314, %298
  br label %320

320:                                              ; preds = %319, %294
  %321 = load ptr, ptr %13, align 8, !tbaa !5
  %322 = load i8, ptr %321, align 1, !tbaa !11, !range !22, !noundef !23
  %323 = trunc i8 %322 to i1
  br i1 %323, label %326, label %324

324:                                              ; preds = %320
  %325 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 1, ptr %325, align 1, !tbaa !11
  br label %326

326:                                              ; preds = %324, %320
  br label %328

327:                                              ; preds = %287
  store i8 1, ptr %39, align 1, !tbaa !11
  br label %328

328:                                              ; preds = %327, %326
  br label %329

329:                                              ; preds = %328, %286
  %330 = load i64, ptr %37, align 8, !tbaa !9
  %331 = icmp sgt i64 %330, 0
  br i1 %331, label %332, label %414

332:                                              ; preds = %329
  %333 = load ptr, ptr %10, align 8, !tbaa !5
  %334 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %333, i32 0, i32 5
  %335 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %334, i32 0, i32 4
  %336 = load ptr, ptr %335, align 8, !tbaa !19
  %337 = load i64, ptr %37, align 8, !tbaa !9
  %338 = sub nsw i64 %337, 1
  %339 = mul nsw i64 4, %338
  %340 = getelementptr inbounds double, ptr %336, i64 %339
  %341 = load double, ptr %340, align 8, !tbaa !20
  store double %341, ptr %22, align 8, !tbaa !20
  %342 = load i64, ptr %35, align 8, !tbaa !9
  %343 = icmp eq i64 %342, -1
  br i1 %343, label %344, label %351

344:                                              ; preds = %332
  %345 = load ptr, ptr %17, align 8, !tbaa !5
  %346 = load i8, ptr %345, align 1, !tbaa !11, !range !22, !noundef !23
  %347 = trunc i8 %346 to i1
  br i1 %347, label %350, label %348

348:                                              ; preds = %344
  %349 = load ptr, ptr %17, align 8, !tbaa !5
  store i8 1, ptr %349, align 1, !tbaa !11
  br label %350

350:                                              ; preds = %348, %344
  br label %413

351:                                              ; preds = %332
  %352 = load double, ptr %20, align 8, !tbaa !20
  %353 = load double, ptr %22, align 8, !tbaa !20
  %354 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %352, double noundef %353)
  br i1 %354, label %355, label %381

355:                                              ; preds = %351
  %356 = load double, ptr %20, align 8, !tbaa !20
  %357 = load double, ptr %23, align 8, !tbaa !20
  %358 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %356, double noundef %357)
  br i1 %358, label %359, label %381

359:                                              ; preds = %355
  %360 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %361 = load ptr, ptr %360, align 8, !tbaa !19
  %362 = load ptr, ptr %16, align 8, !tbaa !5
  %363 = load i64, ptr %362, align 8, !tbaa !9
  %364 = getelementptr inbounds i64, ptr %361, i64 %363
  store i64 -1, ptr %364, align 8, !tbaa !9
  %365 = load ptr, ptr %10, align 8, !tbaa !5
  %366 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %365, i32 0, i32 4
  %367 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %366, i32 0, i32 4
  %368 = load ptr, ptr %367, align 8, !tbaa !19
  %369 = load i64, ptr %37, align 8, !tbaa !9
  %370 = getelementptr inbounds double, ptr %368, i64 %369
  %371 = load double, ptr %370, align 8, !tbaa !20
  %372 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %373 = load ptr, ptr %372, align 8, !tbaa !19
  %374 = load ptr, ptr %16, align 8, !tbaa !5
  %375 = load i64, ptr %374, align 8, !tbaa !9
  %376 = getelementptr inbounds double, ptr %373, i64 %375
  store double %371, ptr %376, align 8, !tbaa !20
  %377 = load ptr, ptr %16, align 8, !tbaa !5
  %378 = load i64, ptr %377, align 8, !tbaa !9
  %379 = add nsw i64 %378, 1
  %380 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %379, ptr %380, align 8, !tbaa !9
  br label %412

381:                                              ; preds = %355, %351
  %382 = load double, ptr %20, align 8, !tbaa !20
  %383 = load double, ptr %22, align 8, !tbaa !20
  %384 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %382, double noundef %383)
  br i1 %384, label %385, label %411

385:                                              ; preds = %381
  %386 = load double, ptr %20, align 8, !tbaa !20
  %387 = load double, ptr %23, align 8, !tbaa !20
  %388 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %386, double noundef %387)
  br i1 %388, label %389, label %411

389:                                              ; preds = %385
  %390 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %391 = load ptr, ptr %390, align 8, !tbaa !19
  %392 = load ptr, ptr %16, align 8, !tbaa !5
  %393 = load i64, ptr %392, align 8, !tbaa !9
  %394 = getelementptr inbounds i64, ptr %391, i64 %393
  store i64 1, ptr %394, align 8, !tbaa !9
  %395 = load ptr, ptr %10, align 8, !tbaa !5
  %396 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %395, i32 0, i32 4
  %397 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %396, i32 0, i32 4
  %398 = load ptr, ptr %397, align 8, !tbaa !19
  %399 = load i64, ptr %37, align 8, !tbaa !9
  %400 = getelementptr inbounds double, ptr %398, i64 %399
  %401 = load double, ptr %400, align 8, !tbaa !20
  %402 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %403 = load ptr, ptr %402, align 8, !tbaa !19
  %404 = load ptr, ptr %16, align 8, !tbaa !5
  %405 = load i64, ptr %404, align 8, !tbaa !9
  %406 = getelementptr inbounds double, ptr %403, i64 %405
  store double %401, ptr %406, align 8, !tbaa !20
  %407 = load ptr, ptr %16, align 8, !tbaa !5
  %408 = load i64, ptr %407, align 8, !tbaa !9
  %409 = add nsw i64 %408, 1
  %410 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %409, ptr %410, align 8, !tbaa !9
  br label %411

411:                                              ; preds = %389, %385, %381
  br label %412

412:                                              ; preds = %411, %359
  br label %413

413:                                              ; preds = %412, %350
  br label %414

414:                                              ; preds = %413, %329
  br label %415

415:                                              ; preds = %414
  %416 = load i64, ptr %37, align 8, !tbaa !9
  %417 = add nsw i64 %416, 1
  store i64 %417, ptr %37, align 8, !tbaa !9
  br label %90, !llvm.loop !24

418:                                              ; preds = %90
  %419 = load ptr, ptr %11, align 8, !tbaa !5
  %420 = load ptr, ptr %12, align 8, !tbaa !5
  %421 = load i64, ptr %420, align 8, !tbaa !9
  %422 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %419, i64 noundef %421, ptr noundef %422)
  %423 = load ptr, ptr %14, align 8, !tbaa !5
  %424 = load ptr, ptr %16, align 8, !tbaa !5
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %423, i64 noundef %425, ptr noundef %426)
  %427 = load ptr, ptr %15, align 8, !tbaa !5
  %428 = load ptr, ptr %16, align 8, !tbaa !5
  %429 = load i64, ptr %428, align 8, !tbaa !9
  %430 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %427, i64 noundef %429, ptr noundef %430)
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %448, %418
  %432 = load i64, ptr %37, align 8, !tbaa !9
  %433 = load ptr, ptr %12, align 8, !tbaa !5
  %434 = load i64, ptr %433, align 8, !tbaa !9
  %435 = sub nsw i64 %434, 1
  %436 = icmp sle i64 %432, %435
  br i1 %436, label %437, label %451

437:                                              ; preds = %431
  %438 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %439 = load ptr, ptr %438, align 8, !tbaa !19
  %440 = load i64, ptr %37, align 8, !tbaa !9
  %441 = getelementptr inbounds double, ptr %439, i64 %440
  %442 = load double, ptr %441, align 8, !tbaa !20
  %443 = load ptr, ptr %11, align 8, !tbaa !5
  %444 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %443, i32 0, i32 4
  %445 = load ptr, ptr %444, align 8, !tbaa !19
  %446 = load i64, ptr %37, align 8, !tbaa !9
  %447 = getelementptr inbounds double, ptr %445, i64 %446
  store double %442, ptr %447, align 8, !tbaa !20
  br label %448

448:                                              ; preds = %437
  %449 = load i64, ptr %37, align 8, !tbaa !9
  %450 = add nsw i64 %449, 1
  store i64 %450, ptr %37, align 8, !tbaa !9
  br label %431, !llvm.loop !26

451:                                              ; preds = %431
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %452

452:                                              ; preds = %479, %451
  %453 = load i64, ptr %37, align 8, !tbaa !9
  %454 = load ptr, ptr %16, align 8, !tbaa !5
  %455 = load i64, ptr %454, align 8, !tbaa !9
  %456 = sub nsw i64 %455, 1
  %457 = icmp sle i64 %453, %456
  br i1 %457, label %458, label %482

458:                                              ; preds = %452
  %459 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %460 = load ptr, ptr %459, align 8, !tbaa !19
  %461 = load i64, ptr %37, align 8, !tbaa !9
  %462 = getelementptr inbounds double, ptr %460, i64 %461
  %463 = load double, ptr %462, align 8, !tbaa !20
  %464 = load ptr, ptr %14, align 8, !tbaa !5
  %465 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %464, i32 0, i32 4
  %466 = load ptr, ptr %465, align 8, !tbaa !19
  %467 = load i64, ptr %37, align 8, !tbaa !9
  %468 = getelementptr inbounds double, ptr %466, i64 %467
  store double %463, ptr %468, align 8, !tbaa !20
  %469 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %470 = load ptr, ptr %469, align 8, !tbaa !19
  %471 = load i64, ptr %37, align 8, !tbaa !9
  %472 = getelementptr inbounds i64, ptr %470, i64 %471
  %473 = load i64, ptr %472, align 8, !tbaa !9
  %474 = load ptr, ptr %15, align 8, !tbaa !5
  %475 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %474, i32 0, i32 4
  %476 = load ptr, ptr %475, align 8, !tbaa !19
  %477 = load i64, ptr %37, align 8, !tbaa !9
  %478 = getelementptr inbounds i64, ptr %476, i64 %477
  store i64 %473, ptr %478, align 8, !tbaa !9
  br label %479

479:                                              ; preds = %458
  %480 = load i64, ptr %37, align 8, !tbaa !9
  %481 = add nsw i64 %480, 1
  store i64 %481, ptr %37, align 8, !tbaa !9
  br label %452, !llvm.loop !27

482:                                              ; preds = %452
  br label %1827

483:                                              ; preds = %9
  %484 = load ptr, ptr %10, align 8, !tbaa !5
  %485 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %484, i32 0, i32 1
  %486 = load i64, ptr %485, align 8, !tbaa !18
  %487 = mul nsw i64 2, %486
  %488 = sub nsw i64 %487, 1
  %489 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %26, i64 noundef %488, ptr noundef %489)
  %490 = load ptr, ptr %10, align 8, !tbaa !5
  %491 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %490, i32 0, i32 1
  %492 = load i64, ptr %491, align 8, !tbaa !18
  %493 = mul nsw i64 4, %492
  %494 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %29, i64 noundef %493, ptr noundef %494)
  %495 = load ptr, ptr %10, align 8, !tbaa !5
  %496 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %495, i32 0, i32 1
  %497 = load i64, ptr %496, align 8, !tbaa !18
  %498 = mul nsw i64 2, %497
  %499 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %27, i64 noundef %498, ptr noundef %499)
  %500 = load ptr, ptr %10, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %500, i32 0, i32 1
  %502 = load i64, ptr %501, align 8, !tbaa !18
  %503 = mul nsw i64 2, %502
  %504 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %28, i64 noundef %503, ptr noundef %504)
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %505

505:                                              ; preds = %1368, %483
  %506 = load i64, ptr %37, align 8, !tbaa !9
  %507 = load ptr, ptr %10, align 8, !tbaa !5
  %508 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %507, i32 0, i32 1
  %509 = load i64, ptr %508, align 8, !tbaa !18
  %510 = sub nsw i64 %509, 2
  %511 = icmp sle i64 %506, %510
  br i1 %511, label %512, label %1371

512:                                              ; preds = %505
  %513 = load ptr, ptr %10, align 8, !tbaa !5
  %514 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %513, i32 0, i32 5
  %515 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %514, i32 0, i32 4
  %516 = load ptr, ptr %515, align 8, !tbaa !19
  %517 = load i64, ptr %37, align 8, !tbaa !9
  %518 = mul nsw i64 4, %517
  %519 = getelementptr inbounds double, ptr %516, i64 %518
  %520 = load double, ptr %519, align 8, !tbaa !20
  store double %520, ptr %20, align 8, !tbaa !20
  %521 = load ptr, ptr %10, align 8, !tbaa !5
  %522 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %521, i32 0, i32 5
  %523 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %522, i32 0, i32 4
  %524 = load ptr, ptr %523, align 8, !tbaa !19
  %525 = load i64, ptr %37, align 8, !tbaa !9
  %526 = mul nsw i64 4, %525
  %527 = add nsw i64 %526, 1
  %528 = getelementptr inbounds double, ptr %524, i64 %527
  %529 = load double, ptr %528, align 8, !tbaa !20
  store double %529, ptr %21, align 8, !tbaa !20
  %530 = load ptr, ptr %10, align 8, !tbaa !5
  %531 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %530, i32 0, i32 5
  %532 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %531, i32 0, i32 4
  %533 = load ptr, ptr %532, align 8, !tbaa !19
  %534 = load i64, ptr %37, align 8, !tbaa !9
  %535 = add nsw i64 %534, 1
  %536 = mul nsw i64 4, %535
  %537 = getelementptr inbounds double, ptr %533, i64 %536
  %538 = load double, ptr %537, align 8, !tbaa !20
  store double %538, ptr %23, align 8, !tbaa !20
  %539 = load ptr, ptr %10, align 8, !tbaa !5
  %540 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %539, i32 0, i32 5
  %541 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %540, i32 0, i32 4
  %542 = load ptr, ptr %541, align 8, !tbaa !19
  %543 = load i64, ptr %37, align 8, !tbaa !9
  %544 = add nsw i64 %543, 1
  %545 = mul nsw i64 4, %544
  %546 = add nsw i64 %545, 1
  %547 = getelementptr inbounds double, ptr %542, i64 %546
  %548 = load double, ptr %547, align 8, !tbaa !20
  store double %548, ptr %24, align 8, !tbaa !20
  %549 = load double, ptr %20, align 8, !tbaa !20
  %550 = load double, ptr %21, align 8, !tbaa !20
  %551 = load double, ptr %23, align 8, !tbaa !20
  %552 = load double, ptr %24, align 8, !tbaa !20
  %553 = load ptr, ptr %10, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %553, i32 0, i32 4
  %555 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %554, i32 0, i32 4
  %556 = load ptr, ptr %555, align 8, !tbaa !19
  %557 = load i64, ptr %37, align 8, !tbaa !9
  %558 = getelementptr inbounds double, ptr %556, i64 %557
  %559 = load double, ptr %558, align 8, !tbaa !20
  %560 = load ptr, ptr %10, align 8, !tbaa !5
  %561 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %560, i32 0, i32 4
  %562 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %561, i32 0, i32 4
  %563 = load ptr, ptr %562, align 8, !tbaa !19
  %564 = load i64, ptr %37, align 8, !tbaa !9
  %565 = add nsw i64 %564, 1
  %566 = getelementptr inbounds double, ptr %563, i64 %565
  %567 = load double, ptr %566, align 8, !tbaa !20
  %568 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl17solvecubicpolinomEddddddPdS0_S0_S0_S0_PlS1_PNS_9ae_vectorEPNS_8ae_stateE(double noundef %549, double noundef %550, double noundef %551, double noundef %552, double noundef %559, double noundef %567, ptr noundef %30, ptr noundef %31, ptr noundef %32, ptr noundef %33, ptr noundef %34, ptr noundef %36, ptr noundef %35, ptr noundef %25, ptr noundef %568)
  %569 = load i64, ptr %36, align 8, !tbaa !9
  %570 = icmp sgt i64 %569, 0
  br i1 %570, label %571, label %731

571:                                              ; preds = %512
  %572 = load i64, ptr %36, align 8, !tbaa !9
  %573 = icmp sge i64 %572, 1
  br i1 %573, label %574, label %579

574:                                              ; preds = %571
  %575 = load double, ptr %30, align 8, !tbaa !20
  %576 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %25, i32 0, i32 4
  %577 = load ptr, ptr %576, align 8, !tbaa !19
  %578 = getelementptr inbounds double, ptr %577, i64 0
  store double %575, ptr %578, align 8, !tbaa !20
  br label %579

579:                                              ; preds = %574, %571
  %580 = load i64, ptr %36, align 8, !tbaa !9
  %581 = icmp sge i64 %580, 2
  br i1 %581, label %582, label %587

582:                                              ; preds = %579
  %583 = load double, ptr %31, align 8, !tbaa !20
  %584 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %25, i32 0, i32 4
  %585 = load ptr, ptr %584, align 8, !tbaa !19
  %586 = getelementptr inbounds double, ptr %585, i64 1
  store double %583, ptr %586, align 8, !tbaa !20
  br label %587

587:                                              ; preds = %582, %579
  %588 = load i64, ptr %36, align 8, !tbaa !9
  %589 = icmp eq i64 %588, 3
  br i1 %589, label %590, label %595

590:                                              ; preds = %587
  %591 = load double, ptr %32, align 8, !tbaa !20
  %592 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %25, i32 0, i32 4
  %593 = load ptr, ptr %592, align 8, !tbaa !19
  %594 = getelementptr inbounds double, ptr %593, i64 2
  store double %591, ptr %594, align 8, !tbaa !20
  br label %595

595:                                              ; preds = %590, %587
  %596 = load ptr, ptr %12, align 8, !tbaa !5
  %597 = load i64, ptr %596, align 8, !tbaa !9
  %598 = icmp sgt i64 %597, 0
  br i1 %598, label %599, label %702

599:                                              ; preds = %595
  %600 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %601 = load ptr, ptr %600, align 8, !tbaa !19
  %602 = load ptr, ptr %12, align 8, !tbaa !5
  %603 = load i64, ptr %602, align 8, !tbaa !9
  %604 = sub nsw i64 %603, 1
  %605 = getelementptr inbounds double, ptr %601, i64 %604
  %606 = load double, ptr %605, align 8, !tbaa !20
  %607 = load double, ptr %30, align 8, !tbaa !20
  %608 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %606, double noundef %607)
  br i1 %608, label %609, label %671

609:                                              ; preds = %599
  %610 = load i8, ptr %39, align 1, !tbaa !11, !range !22, !noundef !23
  %611 = trunc i8 %610 to i1
  br i1 %611, label %612, label %640

612:                                              ; preds = %609
  store i64 0, ptr %38, align 8, !tbaa !9
  br label %613

613:                                              ; preds = %631, %612
  %614 = load i64, ptr %38, align 8, !tbaa !9
  %615 = load i64, ptr %36, align 8, !tbaa !9
  %616 = sub nsw i64 %615, 1
  %617 = icmp sle i64 %614, %616
  br i1 %617, label %618, label %634

618:                                              ; preds = %613
  %619 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %25, i32 0, i32 4
  %620 = load ptr, ptr %619, align 8, !tbaa !19
  %621 = load i64, ptr %38, align 8, !tbaa !9
  %622 = getelementptr inbounds double, ptr %620, i64 %621
  %623 = load double, ptr %622, align 8, !tbaa !20
  %624 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %625 = load ptr, ptr %624, align 8, !tbaa !19
  %626 = load ptr, ptr %12, align 8, !tbaa !5
  %627 = load i64, ptr %626, align 8, !tbaa !9
  %628 = load i64, ptr %38, align 8, !tbaa !9
  %629 = add nsw i64 %627, %628
  %630 = getelementptr inbounds double, ptr %625, i64 %629
  store double %623, ptr %630, align 8, !tbaa !20
  br label %631

631:                                              ; preds = %618
  %632 = load i64, ptr %38, align 8, !tbaa !9
  %633 = add nsw i64 %632, 1
  store i64 %633, ptr %38, align 8, !tbaa !9
  br label %613, !llvm.loop !28

634:                                              ; preds = %613
  %635 = load ptr, ptr %12, align 8, !tbaa !5
  %636 = load i64, ptr %635, align 8, !tbaa !9
  %637 = load i64, ptr %36, align 8, !tbaa !9
  %638 = add nsw i64 %636, %637
  %639 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %638, ptr %639, align 8, !tbaa !9
  br label %670

640:                                              ; preds = %609
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %641

641:                                              ; preds = %660, %640
  %642 = load i64, ptr %38, align 8, !tbaa !9
  %643 = load i64, ptr %36, align 8, !tbaa !9
  %644 = sub nsw i64 %643, 1
  %645 = icmp sle i64 %642, %644
  br i1 %645, label %646, label %663

646:                                              ; preds = %641
  %647 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %25, i32 0, i32 4
  %648 = load ptr, ptr %647, align 8, !tbaa !19
  %649 = load i64, ptr %38, align 8, !tbaa !9
  %650 = getelementptr inbounds double, ptr %648, i64 %649
  %651 = load double, ptr %650, align 8, !tbaa !20
  %652 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %653 = load ptr, ptr %652, align 8, !tbaa !19
  %654 = load ptr, ptr %12, align 8, !tbaa !5
  %655 = load i64, ptr %654, align 8, !tbaa !9
  %656 = load i64, ptr %38, align 8, !tbaa !9
  %657 = add nsw i64 %655, %656
  %658 = sub nsw i64 %657, 1
  %659 = getelementptr inbounds double, ptr %653, i64 %658
  store double %651, ptr %659, align 8, !tbaa !20
  br label %660

660:                                              ; preds = %646
  %661 = load i64, ptr %38, align 8, !tbaa !9
  %662 = add nsw i64 %661, 1
  store i64 %662, ptr %38, align 8, !tbaa !9
  br label %641, !llvm.loop !29

663:                                              ; preds = %641
  %664 = load ptr, ptr %12, align 8, !tbaa !5
  %665 = load i64, ptr %664, align 8, !tbaa !9
  %666 = load i64, ptr %36, align 8, !tbaa !9
  %667 = add nsw i64 %665, %666
  %668 = sub nsw i64 %667, 1
  %669 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %668, ptr %669, align 8, !tbaa !9
  store i8 1, ptr %39, align 1, !tbaa !11
  br label %670

670:                                              ; preds = %663, %634
  br label %701

671:                                              ; preds = %599
  store i64 1, ptr %38, align 8, !tbaa !9
  br label %672

672:                                              ; preds = %691, %671
  %673 = load i64, ptr %38, align 8, !tbaa !9
  %674 = load i64, ptr %36, align 8, !tbaa !9
  %675 = sub nsw i64 %674, 1
  %676 = icmp sle i64 %673, %675
  br i1 %676, label %677, label %694

677:                                              ; preds = %672
  %678 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %25, i32 0, i32 4
  %679 = load ptr, ptr %678, align 8, !tbaa !19
  %680 = load i64, ptr %38, align 8, !tbaa !9
  %681 = getelementptr inbounds double, ptr %679, i64 %680
  %682 = load double, ptr %681, align 8, !tbaa !20
  %683 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %684 = load ptr, ptr %683, align 8, !tbaa !19
  %685 = load ptr, ptr %12, align 8, !tbaa !5
  %686 = load i64, ptr %685, align 8, !tbaa !9
  %687 = load i64, ptr %38, align 8, !tbaa !9
  %688 = add nsw i64 %686, %687
  %689 = sub nsw i64 %688, 1
  %690 = getelementptr inbounds double, ptr %684, i64 %689
  store double %682, ptr %690, align 8, !tbaa !20
  br label %691

691:                                              ; preds = %677
  %692 = load i64, ptr %38, align 8, !tbaa !9
  %693 = add nsw i64 %692, 1
  store i64 %693, ptr %38, align 8, !tbaa !9
  br label %672, !llvm.loop !30

694:                                              ; preds = %672
  %695 = load ptr, ptr %12, align 8, !tbaa !5
  %696 = load i64, ptr %695, align 8, !tbaa !9
  %697 = load i64, ptr %36, align 8, !tbaa !9
  %698 = add nsw i64 %696, %697
  %699 = sub nsw i64 %698, 1
  %700 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %699, ptr %700, align 8, !tbaa !9
  br label %701

701:                                              ; preds = %694, %670
  br label %730

702:                                              ; preds = %595
  store i64 0, ptr %38, align 8, !tbaa !9
  br label %703

703:                                              ; preds = %721, %702
  %704 = load i64, ptr %38, align 8, !tbaa !9
  %705 = load i64, ptr %36, align 8, !tbaa !9
  %706 = sub nsw i64 %705, 1
  %707 = icmp sle i64 %704, %706
  br i1 %707, label %708, label %724

708:                                              ; preds = %703
  %709 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %25, i32 0, i32 4
  %710 = load ptr, ptr %709, align 8, !tbaa !19
  %711 = load i64, ptr %38, align 8, !tbaa !9
  %712 = getelementptr inbounds double, ptr %710, i64 %711
  %713 = load double, ptr %712, align 8, !tbaa !20
  %714 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %715 = load ptr, ptr %714, align 8, !tbaa !19
  %716 = load ptr, ptr %12, align 8, !tbaa !5
  %717 = load i64, ptr %716, align 8, !tbaa !9
  %718 = load i64, ptr %38, align 8, !tbaa !9
  %719 = add nsw i64 %717, %718
  %720 = getelementptr inbounds double, ptr %715, i64 %719
  store double %713, ptr %720, align 8, !tbaa !20
  br label %721

721:                                              ; preds = %708
  %722 = load i64, ptr %38, align 8, !tbaa !9
  %723 = add nsw i64 %722, 1
  store i64 %723, ptr %38, align 8, !tbaa !9
  br label %703, !llvm.loop !31

724:                                              ; preds = %703
  %725 = load ptr, ptr %12, align 8, !tbaa !5
  %726 = load i64, ptr %725, align 8, !tbaa !9
  %727 = load i64, ptr %36, align 8, !tbaa !9
  %728 = add nsw i64 %726, %727
  %729 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %728, ptr %729, align 8, !tbaa !9
  br label %730

730:                                              ; preds = %724, %701
  br label %758

731:                                              ; preds = %512
  %732 = load i64, ptr %36, align 8, !tbaa !9
  %733 = icmp eq i64 %732, -1
  br i1 %733, label %734, label %757

734:                                              ; preds = %731
  %735 = load ptr, ptr %12, align 8, !tbaa !5
  %736 = load i64, ptr %735, align 8, !tbaa !9
  %737 = icmp sgt i64 %736, 0
  br i1 %737, label %738, label %746

738:                                              ; preds = %734
  %739 = load i8, ptr %39, align 1, !tbaa !11, !range !22, !noundef !23
  %740 = trunc i8 %739 to i1
  br i1 %740, label %741, label %746

741:                                              ; preds = %738
  %742 = load ptr, ptr %12, align 8, !tbaa !5
  %743 = load i64, ptr %742, align 8, !tbaa !9
  %744 = sub nsw i64 %743, 1
  %745 = load ptr, ptr %12, align 8, !tbaa !5
  store i64 %744, ptr %745, align 8, !tbaa !9
  br label %746

746:                                              ; preds = %741, %738, %734
  %747 = load i8, ptr %39, align 1, !tbaa !11, !range !22, !noundef !23
  %748 = trunc i8 %747 to i1
  br i1 %748, label %749, label %750

749:                                              ; preds = %746
  store i8 0, ptr %39, align 1, !tbaa !11
  br label %750

750:                                              ; preds = %749, %746
  %751 = load ptr, ptr %13, align 8, !tbaa !5
  %752 = load i8, ptr %751, align 1, !tbaa !11, !range !22, !noundef !23
  %753 = trunc i8 %752 to i1
  br i1 %753, label %756, label %754

754:                                              ; preds = %750
  %755 = load ptr, ptr %13, align 8, !tbaa !5
  store i8 1, ptr %755, align 1, !tbaa !11
  br label %756

756:                                              ; preds = %754, %750
  br label %757

757:                                              ; preds = %756, %731
  br label %758

758:                                              ; preds = %757, %730
  %759 = load i64, ptr %35, align 8, !tbaa !9
  %760 = icmp eq i64 %759, 1
  br i1 %760, label %761, label %1001

761:                                              ; preds = %758
  %762 = load ptr, ptr %16, align 8, !tbaa !5
  %763 = load i64, ptr %762, align 8, !tbaa !9
  %764 = icmp sgt i64 %763, 0
  br i1 %764, label %765, label %888

765:                                              ; preds = %761
  %766 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %767 = load ptr, ptr %766, align 8, !tbaa !19
  %768 = load ptr, ptr %16, align 8, !tbaa !5
  %769 = load i64, ptr %768, align 8, !tbaa !9
  %770 = sub nsw i64 %769, 2
  %771 = getelementptr inbounds double, ptr %767, i64 %770
  %772 = load double, ptr %771, align 8, !tbaa !20
  %773 = load double, ptr %33, align 8, !tbaa !20
  %774 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %772, double noundef %773)
  br i1 %774, label %775, label %887

775:                                              ; preds = %765
  %776 = load double, ptr %33, align 8, !tbaa !20
  %777 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %778 = load ptr, ptr %777, align 8, !tbaa !19
  %779 = load ptr, ptr %16, align 8, !tbaa !5
  %780 = load i64, ptr %779, align 8, !tbaa !9
  %781 = getelementptr inbounds double, ptr %778, i64 %780
  store double %776, ptr %781, align 8, !tbaa !20
  %782 = load ptr, ptr %10, align 8, !tbaa !5
  %783 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %782, i32 0, i32 5
  %784 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %783, i32 0, i32 4
  %785 = load ptr, ptr %784, align 8, !tbaa !19
  %786 = load i64, ptr %37, align 8, !tbaa !9
  %787 = mul nsw i64 4, %786
  %788 = getelementptr inbounds double, ptr %785, i64 %787
  %789 = load double, ptr %788, align 8, !tbaa !20
  %790 = load ptr, ptr %10, align 8, !tbaa !5
  %791 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %790, i32 0, i32 5
  %792 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %791, i32 0, i32 4
  %793 = load ptr, ptr %792, align 8, !tbaa !19
  %794 = load i64, ptr %37, align 8, !tbaa !9
  %795 = mul nsw i64 4, %794
  %796 = add nsw i64 %795, 1
  %797 = getelementptr inbounds double, ptr %793, i64 %796
  %798 = load double, ptr %797, align 8, !tbaa !20
  %799 = load double, ptr %33, align 8, !tbaa !20
  %800 = load ptr, ptr %10, align 8, !tbaa !5
  %801 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %800, i32 0, i32 4
  %802 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %801, i32 0, i32 4
  %803 = load ptr, ptr %802, align 8, !tbaa !19
  %804 = load i64, ptr %37, align 8, !tbaa !9
  %805 = getelementptr inbounds double, ptr %803, i64 %804
  %806 = load double, ptr %805, align 8, !tbaa !20
  %807 = fsub double %799, %806
  %808 = call double @llvm.fmuladd.f64(double %798, double %807, double %789)
  %809 = load ptr, ptr %10, align 8, !tbaa !5
  %810 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %809, i32 0, i32 5
  %811 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %810, i32 0, i32 4
  %812 = load ptr, ptr %811, align 8, !tbaa !19
  %813 = load i64, ptr %37, align 8, !tbaa !9
  %814 = mul nsw i64 4, %813
  %815 = add nsw i64 %814, 2
  %816 = getelementptr inbounds double, ptr %812, i64 %815
  %817 = load double, ptr %816, align 8, !tbaa !20
  %818 = load double, ptr %33, align 8, !tbaa !20
  %819 = load ptr, ptr %10, align 8, !tbaa !5
  %820 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %819, i32 0, i32 4
  %821 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %820, i32 0, i32 4
  %822 = load ptr, ptr %821, align 8, !tbaa !19
  %823 = load i64, ptr %37, align 8, !tbaa !9
  %824 = getelementptr inbounds double, ptr %822, i64 %823
  %825 = load double, ptr %824, align 8, !tbaa !20
  %826 = fsub double %818, %825
  %827 = fmul double %817, %826
  %828 = load double, ptr %33, align 8, !tbaa !20
  %829 = load ptr, ptr %10, align 8, !tbaa !5
  %830 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %829, i32 0, i32 4
  %831 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %830, i32 0, i32 4
  %832 = load ptr, ptr %831, align 8, !tbaa !19
  %833 = load i64, ptr %37, align 8, !tbaa !9
  %834 = getelementptr inbounds double, ptr %832, i64 %833
  %835 = load double, ptr %834, align 8, !tbaa !20
  %836 = fsub double %828, %835
  %837 = call double @llvm.fmuladd.f64(double %827, double %836, double %808)
  %838 = load ptr, ptr %10, align 8, !tbaa !5
  %839 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %838, i32 0, i32 5
  %840 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %839, i32 0, i32 4
  %841 = load ptr, ptr %840, align 8, !tbaa !19
  %842 = load i64, ptr %37, align 8, !tbaa !9
  %843 = mul nsw i64 4, %842
  %844 = add nsw i64 %843, 3
  %845 = getelementptr inbounds double, ptr %841, i64 %844
  %846 = load double, ptr %845, align 8, !tbaa !20
  %847 = load double, ptr %33, align 8, !tbaa !20
  %848 = load ptr, ptr %10, align 8, !tbaa !5
  %849 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %848, i32 0, i32 4
  %850 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %849, i32 0, i32 4
  %851 = load ptr, ptr %850, align 8, !tbaa !19
  %852 = load i64, ptr %37, align 8, !tbaa !9
  %853 = getelementptr inbounds double, ptr %851, i64 %852
  %854 = load double, ptr %853, align 8, !tbaa !20
  %855 = fsub double %847, %854
  %856 = fmul double %846, %855
  %857 = load double, ptr %33, align 8, !tbaa !20
  %858 = load ptr, ptr %10, align 8, !tbaa !5
  %859 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %858, i32 0, i32 4
  %860 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %859, i32 0, i32 4
  %861 = load ptr, ptr %860, align 8, !tbaa !19
  %862 = load i64, ptr %37, align 8, !tbaa !9
  %863 = getelementptr inbounds double, ptr %861, i64 %862
  %864 = load double, ptr %863, align 8, !tbaa !20
  %865 = fsub double %857, %864
  %866 = fmul double %856, %865
  %867 = load double, ptr %33, align 8, !tbaa !20
  %868 = load ptr, ptr %10, align 8, !tbaa !5
  %869 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %868, i32 0, i32 4
  %870 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %869, i32 0, i32 4
  %871 = load ptr, ptr %870, align 8, !tbaa !19
  %872 = load i64, ptr %37, align 8, !tbaa !9
  %873 = getelementptr inbounds double, ptr %871, i64 %872
  %874 = load double, ptr %873, align 8, !tbaa !20
  %875 = fsub double %867, %874
  %876 = call double @llvm.fmuladd.f64(double %866, double %875, double %837)
  %877 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %878 = load ptr, ptr %877, align 8, !tbaa !19
  %879 = load ptr, ptr %16, align 8, !tbaa !5
  %880 = load i64, ptr %879, align 8, !tbaa !9
  %881 = add nsw i64 %880, 1
  %882 = getelementptr inbounds double, ptr %878, i64 %881
  store double %876, ptr %882, align 8, !tbaa !20
  %883 = load ptr, ptr %16, align 8, !tbaa !5
  %884 = load i64, ptr %883, align 8, !tbaa !9
  %885 = add nsw i64 %884, 2
  %886 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %885, ptr %886, align 8, !tbaa !9
  br label %887

887:                                              ; preds = %775, %765
  br label %1000

888:                                              ; preds = %761
  %889 = load double, ptr %33, align 8, !tbaa !20
  %890 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %891 = load ptr, ptr %890, align 8, !tbaa !19
  %892 = load ptr, ptr %16, align 8, !tbaa !5
  %893 = load i64, ptr %892, align 8, !tbaa !9
  %894 = getelementptr inbounds double, ptr %891, i64 %893
  store double %889, ptr %894, align 8, !tbaa !20
  %895 = load ptr, ptr %10, align 8, !tbaa !5
  %896 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", 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 !19
  %899 = load i64, ptr %37, align 8, !tbaa !9
  %900 = mul nsw i64 4, %899
  %901 = getelementptr inbounds double, ptr %898, i64 %900
  %902 = load double, ptr %901, align 8, !tbaa !20
  %903 = load ptr, ptr %10, align 8, !tbaa !5
  %904 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %903, i32 0, i32 5
  %905 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %904, i32 0, i32 4
  %906 = load ptr, ptr %905, align 8, !tbaa !19
  %907 = load i64, ptr %37, align 8, !tbaa !9
  %908 = mul nsw i64 4, %907
  %909 = add nsw i64 %908, 1
  %910 = getelementptr inbounds double, ptr %906, i64 %909
  %911 = load double, ptr %910, align 8, !tbaa !20
  %912 = load double, ptr %33, align 8, !tbaa !20
  %913 = load ptr, ptr %10, align 8, !tbaa !5
  %914 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %913, i32 0, i32 4
  %915 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %914, i32 0, i32 4
  %916 = load ptr, ptr %915, align 8, !tbaa !19
  %917 = load i64, ptr %37, align 8, !tbaa !9
  %918 = getelementptr inbounds double, ptr %916, i64 %917
  %919 = load double, ptr %918, align 8, !tbaa !20
  %920 = fsub double %912, %919
  %921 = call double @llvm.fmuladd.f64(double %911, double %920, double %902)
  %922 = load ptr, ptr %10, align 8, !tbaa !5
  %923 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %922, i32 0, i32 5
  %924 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %923, i32 0, i32 4
  %925 = load ptr, ptr %924, align 8, !tbaa !19
  %926 = load i64, ptr %37, align 8, !tbaa !9
  %927 = mul nsw i64 4, %926
  %928 = add nsw i64 %927, 2
  %929 = getelementptr inbounds double, ptr %925, i64 %928
  %930 = load double, ptr %929, align 8, !tbaa !20
  %931 = load double, ptr %33, align 8, !tbaa !20
  %932 = load ptr, ptr %10, align 8, !tbaa !5
  %933 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %932, i32 0, i32 4
  %934 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %933, i32 0, i32 4
  %935 = load ptr, ptr %934, align 8, !tbaa !19
  %936 = load i64, ptr %37, align 8, !tbaa !9
  %937 = getelementptr inbounds double, ptr %935, i64 %936
  %938 = load double, ptr %937, align 8, !tbaa !20
  %939 = fsub double %931, %938
  %940 = fmul double %930, %939
  %941 = load double, ptr %33, align 8, !tbaa !20
  %942 = load ptr, ptr %10, align 8, !tbaa !5
  %943 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %942, i32 0, i32 4
  %944 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %943, i32 0, i32 4
  %945 = load ptr, ptr %944, align 8, !tbaa !19
  %946 = load i64, ptr %37, align 8, !tbaa !9
  %947 = getelementptr inbounds double, ptr %945, i64 %946
  %948 = load double, ptr %947, align 8, !tbaa !20
  %949 = fsub double %941, %948
  %950 = call double @llvm.fmuladd.f64(double %940, double %949, double %921)
  %951 = load ptr, ptr %10, align 8, !tbaa !5
  %952 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %951, i32 0, i32 5
  %953 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %952, i32 0, i32 4
  %954 = load ptr, ptr %953, align 8, !tbaa !19
  %955 = load i64, ptr %37, align 8, !tbaa !9
  %956 = mul nsw i64 4, %955
  %957 = add nsw i64 %956, 3
  %958 = getelementptr inbounds double, ptr %954, i64 %957
  %959 = load double, ptr %958, align 8, !tbaa !20
  %960 = load double, ptr %33, align 8, !tbaa !20
  %961 = load ptr, ptr %10, align 8, !tbaa !5
  %962 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %961, i32 0, i32 4
  %963 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %962, i32 0, i32 4
  %964 = load ptr, ptr %963, align 8, !tbaa !19
  %965 = load i64, ptr %37, align 8, !tbaa !9
  %966 = getelementptr inbounds double, ptr %964, i64 %965
  %967 = load double, ptr %966, align 8, !tbaa !20
  %968 = fsub double %960, %967
  %969 = fmul double %959, %968
  %970 = load double, ptr %33, align 8, !tbaa !20
  %971 = load ptr, ptr %10, align 8, !tbaa !5
  %972 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %971, i32 0, i32 4
  %973 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %972, i32 0, i32 4
  %974 = load ptr, ptr %973, align 8, !tbaa !19
  %975 = load i64, ptr %37, align 8, !tbaa !9
  %976 = getelementptr inbounds double, ptr %974, i64 %975
  %977 = load double, ptr %976, align 8, !tbaa !20
  %978 = fsub double %970, %977
  %979 = fmul double %969, %978
  %980 = load double, ptr %33, align 8, !tbaa !20
  %981 = load ptr, ptr %10, align 8, !tbaa !5
  %982 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %981, i32 0, i32 4
  %983 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %982, i32 0, i32 4
  %984 = load ptr, ptr %983, align 8, !tbaa !19
  %985 = load i64, ptr %37, align 8, !tbaa !9
  %986 = getelementptr inbounds double, ptr %984, i64 %985
  %987 = load double, ptr %986, align 8, !tbaa !20
  %988 = fsub double %980, %987
  %989 = call double @llvm.fmuladd.f64(double %979, double %988, double %950)
  %990 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %991 = load ptr, ptr %990, align 8, !tbaa !19
  %992 = load ptr, ptr %16, align 8, !tbaa !5
  %993 = load i64, ptr %992, align 8, !tbaa !9
  %994 = add nsw i64 %993, 1
  %995 = getelementptr inbounds double, ptr %991, i64 %994
  store double %989, ptr %995, align 8, !tbaa !20
  %996 = load ptr, ptr %16, align 8, !tbaa !5
  %997 = load i64, ptr %996, align 8, !tbaa !9
  %998 = add nsw i64 %997, 2
  %999 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %998, ptr %999, align 8, !tbaa !9
  br label %1000

1000:                                             ; preds = %888, %887
  br label %1367

1001:                                             ; preds = %758
  %1002 = load i64, ptr %35, align 8, !tbaa !9
  %1003 = icmp eq i64 %1002, 2
  br i1 %1003, label %1004, label %1355

1004:                                             ; preds = %1001
  %1005 = load ptr, ptr %16, align 8, !tbaa !5
  %1006 = load i64, ptr %1005, align 8, !tbaa !9
  %1007 = icmp sgt i64 %1006, 0
  br i1 %1007, label %1008, label %1131

1008:                                             ; preds = %1004
  %1009 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1010 = load ptr, ptr %1009, align 8, !tbaa !19
  %1011 = load ptr, ptr %16, align 8, !tbaa !5
  %1012 = load i64, ptr %1011, align 8, !tbaa !9
  %1013 = sub nsw i64 %1012, 2
  %1014 = getelementptr inbounds double, ptr %1010, i64 %1013
  %1015 = load double, ptr %1014, align 8, !tbaa !20
  %1016 = load double, ptr %33, align 8, !tbaa !20
  %1017 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %1015, double noundef %1016)
  br i1 %1017, label %1018, label %1130

1018:                                             ; preds = %1008
  %1019 = load double, ptr %33, align 8, !tbaa !20
  %1020 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1021 = load ptr, ptr %1020, align 8, !tbaa !19
  %1022 = load ptr, ptr %16, align 8, !tbaa !5
  %1023 = load i64, ptr %1022, align 8, !tbaa !9
  %1024 = getelementptr inbounds double, ptr %1021, i64 %1023
  store double %1019, ptr %1024, align 8, !tbaa !20
  %1025 = load ptr, ptr %10, align 8, !tbaa !5
  %1026 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1025, i32 0, i32 5
  %1027 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1026, i32 0, i32 4
  %1028 = load ptr, ptr %1027, align 8, !tbaa !19
  %1029 = load i64, ptr %37, align 8, !tbaa !9
  %1030 = mul nsw i64 4, %1029
  %1031 = getelementptr inbounds double, ptr %1028, i64 %1030
  %1032 = load double, ptr %1031, align 8, !tbaa !20
  %1033 = load ptr, ptr %10, align 8, !tbaa !5
  %1034 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1033, i32 0, i32 5
  %1035 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1034, i32 0, i32 4
  %1036 = load ptr, ptr %1035, align 8, !tbaa !19
  %1037 = load i64, ptr %37, align 8, !tbaa !9
  %1038 = mul nsw i64 4, %1037
  %1039 = add nsw i64 %1038, 1
  %1040 = getelementptr inbounds double, ptr %1036, i64 %1039
  %1041 = load double, ptr %1040, align 8, !tbaa !20
  %1042 = load double, ptr %33, align 8, !tbaa !20
  %1043 = load ptr, ptr %10, align 8, !tbaa !5
  %1044 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1043, i32 0, i32 4
  %1045 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1044, i32 0, i32 4
  %1046 = load ptr, ptr %1045, align 8, !tbaa !19
  %1047 = load i64, ptr %37, align 8, !tbaa !9
  %1048 = getelementptr inbounds double, ptr %1046, i64 %1047
  %1049 = load double, ptr %1048, align 8, !tbaa !20
  %1050 = fsub double %1042, %1049
  %1051 = call double @llvm.fmuladd.f64(double %1041, double %1050, double %1032)
  %1052 = load ptr, ptr %10, align 8, !tbaa !5
  %1053 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1052, i32 0, i32 5
  %1054 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1053, i32 0, i32 4
  %1055 = load ptr, ptr %1054, align 8, !tbaa !19
  %1056 = load i64, ptr %37, align 8, !tbaa !9
  %1057 = mul nsw i64 4, %1056
  %1058 = add nsw i64 %1057, 2
  %1059 = getelementptr inbounds double, ptr %1055, i64 %1058
  %1060 = load double, ptr %1059, align 8, !tbaa !20
  %1061 = load double, ptr %33, align 8, !tbaa !20
  %1062 = load ptr, ptr %10, align 8, !tbaa !5
  %1063 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1062, i32 0, i32 4
  %1064 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1063, i32 0, i32 4
  %1065 = load ptr, ptr %1064, align 8, !tbaa !19
  %1066 = load i64, ptr %37, align 8, !tbaa !9
  %1067 = getelementptr inbounds double, ptr %1065, i64 %1066
  %1068 = load double, ptr %1067, align 8, !tbaa !20
  %1069 = fsub double %1061, %1068
  %1070 = fmul double %1060, %1069
  %1071 = load double, ptr %33, align 8, !tbaa !20
  %1072 = load ptr, ptr %10, align 8, !tbaa !5
  %1073 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1072, i32 0, i32 4
  %1074 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1073, i32 0, i32 4
  %1075 = load ptr, ptr %1074, align 8, !tbaa !19
  %1076 = load i64, ptr %37, align 8, !tbaa !9
  %1077 = getelementptr inbounds double, ptr %1075, i64 %1076
  %1078 = load double, ptr %1077, align 8, !tbaa !20
  %1079 = fsub double %1071, %1078
  %1080 = call double @llvm.fmuladd.f64(double %1070, double %1079, double %1051)
  %1081 = load ptr, ptr %10, align 8, !tbaa !5
  %1082 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1081, i32 0, i32 5
  %1083 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1082, i32 0, i32 4
  %1084 = load ptr, ptr %1083, align 8, !tbaa !19
  %1085 = load i64, ptr %37, align 8, !tbaa !9
  %1086 = mul nsw i64 4, %1085
  %1087 = add nsw i64 %1086, 3
  %1088 = getelementptr inbounds double, ptr %1084, i64 %1087
  %1089 = load double, ptr %1088, align 8, !tbaa !20
  %1090 = load double, ptr %33, align 8, !tbaa !20
  %1091 = load ptr, ptr %10, align 8, !tbaa !5
  %1092 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1091, i32 0, i32 4
  %1093 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1092, i32 0, i32 4
  %1094 = load ptr, ptr %1093, align 8, !tbaa !19
  %1095 = load i64, ptr %37, align 8, !tbaa !9
  %1096 = getelementptr inbounds double, ptr %1094, i64 %1095
  %1097 = load double, ptr %1096, align 8, !tbaa !20
  %1098 = fsub double %1090, %1097
  %1099 = fmul double %1089, %1098
  %1100 = load double, ptr %33, align 8, !tbaa !20
  %1101 = load ptr, ptr %10, align 8, !tbaa !5
  %1102 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1101, i32 0, i32 4
  %1103 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1102, i32 0, i32 4
  %1104 = load ptr, ptr %1103, align 8, !tbaa !19
  %1105 = load i64, ptr %37, align 8, !tbaa !9
  %1106 = getelementptr inbounds double, ptr %1104, i64 %1105
  %1107 = load double, ptr %1106, align 8, !tbaa !20
  %1108 = fsub double %1100, %1107
  %1109 = fmul double %1099, %1108
  %1110 = load double, ptr %33, align 8, !tbaa !20
  %1111 = load ptr, ptr %10, align 8, !tbaa !5
  %1112 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1111, i32 0, i32 4
  %1113 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1112, i32 0, i32 4
  %1114 = load ptr, ptr %1113, align 8, !tbaa !19
  %1115 = load i64, ptr %37, align 8, !tbaa !9
  %1116 = getelementptr inbounds double, ptr %1114, i64 %1115
  %1117 = load double, ptr %1116, align 8, !tbaa !20
  %1118 = fsub double %1110, %1117
  %1119 = call double @llvm.fmuladd.f64(double %1109, double %1118, double %1080)
  %1120 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1121 = load ptr, ptr %1120, align 8, !tbaa !19
  %1122 = load ptr, ptr %16, align 8, !tbaa !5
  %1123 = load i64, ptr %1122, align 8, !tbaa !9
  %1124 = add nsw i64 %1123, 1
  %1125 = getelementptr inbounds double, ptr %1121, i64 %1124
  store double %1119, ptr %1125, align 8, !tbaa !20
  %1126 = load ptr, ptr %16, align 8, !tbaa !5
  %1127 = load i64, ptr %1126, align 8, !tbaa !9
  %1128 = add nsw i64 %1127, 2
  %1129 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1128, ptr %1129, align 8, !tbaa !9
  br label %1130

1130:                                             ; preds = %1018, %1008
  br label %1243

1131:                                             ; preds = %1004
  %1132 = load double, ptr %33, align 8, !tbaa !20
  %1133 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1134 = load ptr, ptr %1133, align 8, !tbaa !19
  %1135 = load ptr, ptr %16, align 8, !tbaa !5
  %1136 = load i64, ptr %1135, align 8, !tbaa !9
  %1137 = getelementptr inbounds double, ptr %1134, i64 %1136
  store double %1132, ptr %1137, align 8, !tbaa !20
  %1138 = load ptr, ptr %10, align 8, !tbaa !5
  %1139 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1138, i32 0, i32 5
  %1140 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1139, i32 0, i32 4
  %1141 = load ptr, ptr %1140, align 8, !tbaa !19
  %1142 = load i64, ptr %37, align 8, !tbaa !9
  %1143 = mul nsw i64 4, %1142
  %1144 = getelementptr inbounds double, ptr %1141, i64 %1143
  %1145 = load double, ptr %1144, align 8, !tbaa !20
  %1146 = load ptr, ptr %10, align 8, !tbaa !5
  %1147 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1146, i32 0, i32 5
  %1148 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1147, i32 0, i32 4
  %1149 = load ptr, ptr %1148, align 8, !tbaa !19
  %1150 = load i64, ptr %37, align 8, !tbaa !9
  %1151 = mul nsw i64 4, %1150
  %1152 = add nsw i64 %1151, 1
  %1153 = getelementptr inbounds double, ptr %1149, i64 %1152
  %1154 = load double, ptr %1153, align 8, !tbaa !20
  %1155 = load double, ptr %33, align 8, !tbaa !20
  %1156 = load ptr, ptr %10, align 8, !tbaa !5
  %1157 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1156, i32 0, i32 4
  %1158 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1157, i32 0, i32 4
  %1159 = load ptr, ptr %1158, align 8, !tbaa !19
  %1160 = load i64, ptr %37, align 8, !tbaa !9
  %1161 = getelementptr inbounds double, ptr %1159, i64 %1160
  %1162 = load double, ptr %1161, align 8, !tbaa !20
  %1163 = fsub double %1155, %1162
  %1164 = call double @llvm.fmuladd.f64(double %1154, double %1163, double %1145)
  %1165 = load ptr, ptr %10, align 8, !tbaa !5
  %1166 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1165, i32 0, i32 5
  %1167 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1166, i32 0, i32 4
  %1168 = load ptr, ptr %1167, align 8, !tbaa !19
  %1169 = load i64, ptr %37, align 8, !tbaa !9
  %1170 = mul nsw i64 4, %1169
  %1171 = add nsw i64 %1170, 2
  %1172 = getelementptr inbounds double, ptr %1168, i64 %1171
  %1173 = load double, ptr %1172, align 8, !tbaa !20
  %1174 = load double, ptr %33, align 8, !tbaa !20
  %1175 = load ptr, ptr %10, align 8, !tbaa !5
  %1176 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1175, i32 0, i32 4
  %1177 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1176, i32 0, i32 4
  %1178 = load ptr, ptr %1177, align 8, !tbaa !19
  %1179 = load i64, ptr %37, align 8, !tbaa !9
  %1180 = getelementptr inbounds double, ptr %1178, i64 %1179
  %1181 = load double, ptr %1180, align 8, !tbaa !20
  %1182 = fsub double %1174, %1181
  %1183 = fmul double %1173, %1182
  %1184 = load double, ptr %33, align 8, !tbaa !20
  %1185 = load ptr, ptr %10, align 8, !tbaa !5
  %1186 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1185, i32 0, i32 4
  %1187 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1186, i32 0, i32 4
  %1188 = load ptr, ptr %1187, align 8, !tbaa !19
  %1189 = load i64, ptr %37, align 8, !tbaa !9
  %1190 = getelementptr inbounds double, ptr %1188, i64 %1189
  %1191 = load double, ptr %1190, align 8, !tbaa !20
  %1192 = fsub double %1184, %1191
  %1193 = call double @llvm.fmuladd.f64(double %1183, double %1192, double %1164)
  %1194 = load ptr, ptr %10, align 8, !tbaa !5
  %1195 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1194, i32 0, i32 5
  %1196 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1195, i32 0, i32 4
  %1197 = load ptr, ptr %1196, align 8, !tbaa !19
  %1198 = load i64, ptr %37, align 8, !tbaa !9
  %1199 = mul nsw i64 4, %1198
  %1200 = add nsw i64 %1199, 3
  %1201 = getelementptr inbounds double, ptr %1197, i64 %1200
  %1202 = load double, ptr %1201, align 8, !tbaa !20
  %1203 = load double, ptr %33, align 8, !tbaa !20
  %1204 = load ptr, ptr %10, align 8, !tbaa !5
  %1205 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1204, i32 0, i32 4
  %1206 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1205, i32 0, i32 4
  %1207 = load ptr, ptr %1206, align 8, !tbaa !19
  %1208 = load i64, ptr %37, align 8, !tbaa !9
  %1209 = getelementptr inbounds double, ptr %1207, i64 %1208
  %1210 = load double, ptr %1209, align 8, !tbaa !20
  %1211 = fsub double %1203, %1210
  %1212 = fmul double %1202, %1211
  %1213 = load double, ptr %33, align 8, !tbaa !20
  %1214 = load ptr, ptr %10, align 8, !tbaa !5
  %1215 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1214, i32 0, i32 4
  %1216 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1215, i32 0, i32 4
  %1217 = load ptr, ptr %1216, align 8, !tbaa !19
  %1218 = load i64, ptr %37, align 8, !tbaa !9
  %1219 = getelementptr inbounds double, ptr %1217, i64 %1218
  %1220 = load double, ptr %1219, align 8, !tbaa !20
  %1221 = fsub double %1213, %1220
  %1222 = fmul double %1212, %1221
  %1223 = load double, ptr %33, align 8, !tbaa !20
  %1224 = load ptr, ptr %10, align 8, !tbaa !5
  %1225 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1224, i32 0, i32 4
  %1226 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1225, i32 0, i32 4
  %1227 = load ptr, ptr %1226, align 8, !tbaa !19
  %1228 = load i64, ptr %37, align 8, !tbaa !9
  %1229 = getelementptr inbounds double, ptr %1227, i64 %1228
  %1230 = load double, ptr %1229, align 8, !tbaa !20
  %1231 = fsub double %1223, %1230
  %1232 = call double @llvm.fmuladd.f64(double %1222, double %1231, double %1193)
  %1233 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1234 = load ptr, ptr %1233, align 8, !tbaa !19
  %1235 = load ptr, ptr %16, align 8, !tbaa !5
  %1236 = load i64, ptr %1235, align 8, !tbaa !9
  %1237 = add nsw i64 %1236, 1
  %1238 = getelementptr inbounds double, ptr %1234, i64 %1237
  store double %1232, ptr %1238, align 8, !tbaa !20
  %1239 = load ptr, ptr %16, align 8, !tbaa !5
  %1240 = load i64, ptr %1239, align 8, !tbaa !9
  %1241 = add nsw i64 %1240, 2
  %1242 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1241, ptr %1242, align 8, !tbaa !9
  br label %1243

1243:                                             ; preds = %1131, %1130
  %1244 = load double, ptr %34, align 8, !tbaa !20
  %1245 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1246 = load ptr, ptr %1245, align 8, !tbaa !19
  %1247 = load ptr, ptr %16, align 8, !tbaa !5
  %1248 = load i64, ptr %1247, align 8, !tbaa !9
  %1249 = getelementptr inbounds double, ptr %1246, i64 %1248
  store double %1244, ptr %1249, align 8, !tbaa !20
  %1250 = load ptr, ptr %10, align 8, !tbaa !5
  %1251 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1250, i32 0, i32 5
  %1252 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1251, i32 0, i32 4
  %1253 = load ptr, ptr %1252, align 8, !tbaa !19
  %1254 = load i64, ptr %37, align 8, !tbaa !9
  %1255 = mul nsw i64 4, %1254
  %1256 = getelementptr inbounds double, ptr %1253, i64 %1255
  %1257 = load double, ptr %1256, align 8, !tbaa !20
  %1258 = load ptr, ptr %10, align 8, !tbaa !5
  %1259 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1258, i32 0, i32 5
  %1260 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1259, i32 0, i32 4
  %1261 = load ptr, ptr %1260, align 8, !tbaa !19
  %1262 = load i64, ptr %37, align 8, !tbaa !9
  %1263 = mul nsw i64 4, %1262
  %1264 = add nsw i64 %1263, 1
  %1265 = getelementptr inbounds double, ptr %1261, i64 %1264
  %1266 = load double, ptr %1265, align 8, !tbaa !20
  %1267 = load double, ptr %34, align 8, !tbaa !20
  %1268 = load ptr, ptr %10, align 8, !tbaa !5
  %1269 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1268, i32 0, i32 4
  %1270 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1269, i32 0, i32 4
  %1271 = load ptr, ptr %1270, align 8, !tbaa !19
  %1272 = load i64, ptr %37, align 8, !tbaa !9
  %1273 = getelementptr inbounds double, ptr %1271, i64 %1272
  %1274 = load double, ptr %1273, align 8, !tbaa !20
  %1275 = fsub double %1267, %1274
  %1276 = call double @llvm.fmuladd.f64(double %1266, double %1275, double %1257)
  %1277 = load ptr, ptr %10, align 8, !tbaa !5
  %1278 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1277, i32 0, i32 5
  %1279 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1278, i32 0, i32 4
  %1280 = load ptr, ptr %1279, align 8, !tbaa !19
  %1281 = load i64, ptr %37, align 8, !tbaa !9
  %1282 = mul nsw i64 4, %1281
  %1283 = add nsw i64 %1282, 2
  %1284 = getelementptr inbounds double, ptr %1280, i64 %1283
  %1285 = load double, ptr %1284, align 8, !tbaa !20
  %1286 = load double, ptr %34, align 8, !tbaa !20
  %1287 = load ptr, ptr %10, align 8, !tbaa !5
  %1288 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1287, i32 0, i32 4
  %1289 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1288, i32 0, i32 4
  %1290 = load ptr, ptr %1289, align 8, !tbaa !19
  %1291 = load i64, ptr %37, align 8, !tbaa !9
  %1292 = getelementptr inbounds double, ptr %1290, i64 %1291
  %1293 = load double, ptr %1292, align 8, !tbaa !20
  %1294 = fsub double %1286, %1293
  %1295 = fmul double %1285, %1294
  %1296 = load double, ptr %34, align 8, !tbaa !20
  %1297 = load ptr, ptr %10, align 8, !tbaa !5
  %1298 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1297, i32 0, i32 4
  %1299 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1298, i32 0, i32 4
  %1300 = load ptr, ptr %1299, align 8, !tbaa !19
  %1301 = load i64, ptr %37, align 8, !tbaa !9
  %1302 = getelementptr inbounds double, ptr %1300, i64 %1301
  %1303 = load double, ptr %1302, align 8, !tbaa !20
  %1304 = fsub double %1296, %1303
  %1305 = call double @llvm.fmuladd.f64(double %1295, double %1304, double %1276)
  %1306 = load ptr, ptr %10, align 8, !tbaa !5
  %1307 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1306, i32 0, i32 5
  %1308 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1307, i32 0, i32 4
  %1309 = load ptr, ptr %1308, align 8, !tbaa !19
  %1310 = load i64, ptr %37, align 8, !tbaa !9
  %1311 = mul nsw i64 4, %1310
  %1312 = add nsw i64 %1311, 3
  %1313 = getelementptr inbounds double, ptr %1309, i64 %1312
  %1314 = load double, ptr %1313, align 8, !tbaa !20
  %1315 = load double, ptr %34, align 8, !tbaa !20
  %1316 = load ptr, ptr %10, align 8, !tbaa !5
  %1317 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1316, i32 0, i32 4
  %1318 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1317, i32 0, i32 4
  %1319 = load ptr, ptr %1318, align 8, !tbaa !19
  %1320 = load i64, ptr %37, align 8, !tbaa !9
  %1321 = getelementptr inbounds double, ptr %1319, i64 %1320
  %1322 = load double, ptr %1321, align 8, !tbaa !20
  %1323 = fsub double %1315, %1322
  %1324 = fmul double %1314, %1323
  %1325 = load double, ptr %34, align 8, !tbaa !20
  %1326 = load ptr, ptr %10, align 8, !tbaa !5
  %1327 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1326, i32 0, i32 4
  %1328 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1327, i32 0, i32 4
  %1329 = load ptr, ptr %1328, align 8, !tbaa !19
  %1330 = load i64, ptr %37, align 8, !tbaa !9
  %1331 = getelementptr inbounds double, ptr %1329, i64 %1330
  %1332 = load double, ptr %1331, align 8, !tbaa !20
  %1333 = fsub double %1325, %1332
  %1334 = fmul double %1324, %1333
  %1335 = load double, ptr %34, align 8, !tbaa !20
  %1336 = load ptr, ptr %10, align 8, !tbaa !5
  %1337 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1336, i32 0, i32 4
  %1338 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1337, i32 0, i32 4
  %1339 = load ptr, ptr %1338, align 8, !tbaa !19
  %1340 = load i64, ptr %37, align 8, !tbaa !9
  %1341 = getelementptr inbounds double, ptr %1339, i64 %1340
  %1342 = load double, ptr %1341, align 8, !tbaa !20
  %1343 = fsub double %1335, %1342
  %1344 = call double @llvm.fmuladd.f64(double %1334, double %1343, double %1305)
  %1345 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1346 = load ptr, ptr %1345, align 8, !tbaa !19
  %1347 = load ptr, ptr %16, align 8, !tbaa !5
  %1348 = load i64, ptr %1347, align 8, !tbaa !9
  %1349 = add nsw i64 %1348, 1
  %1350 = getelementptr inbounds double, ptr %1346, i64 %1349
  store double %1344, ptr %1350, align 8, !tbaa !20
  %1351 = load ptr, ptr %16, align 8, !tbaa !5
  %1352 = load i64, ptr %1351, align 8, !tbaa !9
  %1353 = add nsw i64 %1352, 2
  %1354 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1353, ptr %1354, align 8, !tbaa !9
  br label %1366

1355:                                             ; preds = %1001
  %1356 = load i64, ptr %35, align 8, !tbaa !9
  %1357 = icmp eq i64 %1356, -1
  br i1 %1357, label %1358, label %1365

1358:                                             ; preds = %1355
  %1359 = load ptr, ptr %17, align 8, !tbaa !5
  %1360 = load i8, ptr %1359, align 1, !tbaa !11, !range !22, !noundef !23
  %1361 = trunc i8 %1360 to i1
  br i1 %1361, label %1364, label %1362

1362:                                             ; preds = %1358
  %1363 = load ptr, ptr %17, align 8, !tbaa !5
  store i8 1, ptr %1363, align 1, !tbaa !11
  br label %1364

1364:                                             ; preds = %1362, %1358
  br label %1365

1365:                                             ; preds = %1364, %1355
  br label %1366

1366:                                             ; preds = %1365, %1243
  br label %1367

1367:                                             ; preds = %1366, %1000
  br label %1368

1368:                                             ; preds = %1367
  %1369 = load i64, ptr %37, align 8, !tbaa !9
  %1370 = add nsw i64 %1369, 1
  store i64 %1370, ptr %37, align 8, !tbaa !9
  br label %505, !llvm.loop !32

1371:                                             ; preds = %505
  %1372 = load ptr, ptr %16, align 8, !tbaa !5
  %1373 = load i64, ptr %1372, align 8, !tbaa !9
  %1374 = sdiv i64 %1373, 2
  store i64 %1374, ptr %35, align 8, !tbaa !9
  %1375 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 0, ptr %1375, align 8, !tbaa !9
  %1376 = load ptr, ptr %10, align 8, !tbaa !5
  %1377 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1376, i32 0, i32 5
  %1378 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1377, i32 0, i32 4
  %1379 = load ptr, ptr %1378, align 8, !tbaa !19
  %1380 = getelementptr inbounds double, ptr %1379, i64 0
  %1381 = load double, ptr %1380, align 8, !tbaa !20
  store double %1381, ptr %20, align 8, !tbaa !20
  %1382 = load ptr, ptr %10, align 8, !tbaa !5
  %1383 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1382, i32 0, i32 5
  %1384 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1383, i32 0, i32 4
  %1385 = load ptr, ptr %1384, align 8, !tbaa !19
  %1386 = load ptr, ptr %10, align 8, !tbaa !5
  %1387 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1386, i32 0, i32 1
  %1388 = load i64, ptr %1387, align 8, !tbaa !18
  %1389 = sub nsw i64 %1388, 1
  %1390 = mul nsw i64 4, %1389
  %1391 = getelementptr inbounds double, ptr %1385, i64 %1390
  %1392 = load double, ptr %1391, align 8, !tbaa !20
  store double %1392, ptr %23, align 8, !tbaa !20
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %1393

1393:                                             ; preds = %1759, %1371
  %1394 = load i64, ptr %37, align 8, !tbaa !9
  %1395 = load i64, ptr %35, align 8, !tbaa !9
  %1396 = sub nsw i64 %1395, 1
  %1397 = icmp sle i64 %1394, %1396
  br i1 %1397, label %1398, label %1762

1398:                                             ; preds = %1393
  %1399 = load i64, ptr %37, align 8, !tbaa !9
  %1400 = icmp sgt i64 %1399, 0
  br i1 %1400, label %1401, label %1518

1401:                                             ; preds = %1398
  %1402 = load i64, ptr %37, align 8, !tbaa !9
  %1403 = load i64, ptr %35, align 8, !tbaa !9
  %1404 = sub nsw i64 %1403, 1
  %1405 = icmp slt i64 %1402, %1404
  br i1 %1405, label %1406, label %1518

1406:                                             ; preds = %1401
  %1407 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1408 = load ptr, ptr %1407, align 8, !tbaa !19
  %1409 = load i64, ptr %37, align 8, !tbaa !9
  %1410 = mul nsw i64 2, %1409
  %1411 = add nsw i64 %1410, 1
  %1412 = getelementptr inbounds double, ptr %1408, i64 %1411
  %1413 = load double, ptr %1412, align 8, !tbaa !20
  %1414 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1415 = load ptr, ptr %1414, align 8, !tbaa !19
  %1416 = load i64, ptr %37, align 8, !tbaa !9
  %1417 = sub nsw i64 %1416, 1
  %1418 = mul nsw i64 2, %1417
  %1419 = add nsw i64 %1418, 1
  %1420 = getelementptr inbounds double, ptr %1415, i64 %1419
  %1421 = load double, ptr %1420, align 8, !tbaa !20
  %1422 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %1413, double noundef %1421)
  br i1 %1422, label %1423, label %1461

1423:                                             ; preds = %1406
  %1424 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1425 = load ptr, ptr %1424, align 8, !tbaa !19
  %1426 = load i64, ptr %37, align 8, !tbaa !9
  %1427 = mul nsw i64 2, %1426
  %1428 = add nsw i64 %1427, 1
  %1429 = getelementptr inbounds double, ptr %1425, i64 %1428
  %1430 = load double, ptr %1429, align 8, !tbaa !20
  %1431 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1432 = load ptr, ptr %1431, align 8, !tbaa !19
  %1433 = load i64, ptr %37, align 8, !tbaa !9
  %1434 = add nsw i64 %1433, 1
  %1435 = mul nsw i64 2, %1434
  %1436 = add nsw i64 %1435, 1
  %1437 = getelementptr inbounds double, ptr %1432, i64 %1436
  %1438 = load double, ptr %1437, align 8, !tbaa !20
  %1439 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %1430, double noundef %1438)
  br i1 %1439, label %1440, label %1461

1440:                                             ; preds = %1423
  %1441 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1442 = load ptr, ptr %1441, align 8, !tbaa !19
  %1443 = load i64, ptr %37, align 8, !tbaa !9
  %1444 = mul nsw i64 2, %1443
  %1445 = getelementptr inbounds double, ptr %1442, i64 %1444
  %1446 = load double, ptr %1445, align 8, !tbaa !20
  %1447 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %1448 = load ptr, ptr %1447, align 8, !tbaa !19
  %1449 = load ptr, ptr %16, align 8, !tbaa !5
  %1450 = load i64, ptr %1449, align 8, !tbaa !9
  %1451 = getelementptr inbounds double, ptr %1448, i64 %1450
  store double %1446, ptr %1451, align 8, !tbaa !20
  %1452 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %1453 = load ptr, ptr %1452, align 8, !tbaa !19
  %1454 = load ptr, ptr %16, align 8, !tbaa !5
  %1455 = load i64, ptr %1454, align 8, !tbaa !9
  %1456 = getelementptr inbounds i64, ptr %1453, i64 %1455
  store i64 -1, ptr %1456, align 8, !tbaa !9
  %1457 = load ptr, ptr %16, align 8, !tbaa !5
  %1458 = load i64, ptr %1457, align 8, !tbaa !9
  %1459 = add nsw i64 %1458, 1
  %1460 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1459, ptr %1460, align 8, !tbaa !9
  br label %1517

1461:                                             ; preds = %1423, %1406
  %1462 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1463 = load ptr, ptr %1462, align 8, !tbaa !19
  %1464 = load i64, ptr %37, align 8, !tbaa !9
  %1465 = mul nsw i64 2, %1464
  %1466 = add nsw i64 %1465, 1
  %1467 = getelementptr inbounds double, ptr %1463, i64 %1466
  %1468 = load double, ptr %1467, align 8, !tbaa !20
  %1469 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1470 = load ptr, ptr %1469, align 8, !tbaa !19
  %1471 = load i64, ptr %37, align 8, !tbaa !9
  %1472 = sub nsw i64 %1471, 1
  %1473 = mul nsw i64 2, %1472
  %1474 = add nsw i64 %1473, 1
  %1475 = getelementptr inbounds double, ptr %1470, i64 %1474
  %1476 = load double, ptr %1475, align 8, !tbaa !20
  %1477 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %1468, double noundef %1476)
  br i1 %1477, label %1478, label %1516

1478:                                             ; preds = %1461
  %1479 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1480 = load ptr, ptr %1479, align 8, !tbaa !19
  %1481 = load i64, ptr %37, align 8, !tbaa !9
  %1482 = mul nsw i64 2, %1481
  %1483 = add nsw i64 %1482, 1
  %1484 = getelementptr inbounds double, ptr %1480, i64 %1483
  %1485 = load double, ptr %1484, align 8, !tbaa !20
  %1486 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1487 = load ptr, ptr %1486, align 8, !tbaa !19
  %1488 = load i64, ptr %37, align 8, !tbaa !9
  %1489 = add nsw i64 %1488, 1
  %1490 = mul nsw i64 2, %1489
  %1491 = add nsw i64 %1490, 1
  %1492 = getelementptr inbounds double, ptr %1487, i64 %1491
  %1493 = load double, ptr %1492, align 8, !tbaa !20
  %1494 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %1485, double noundef %1493)
  br i1 %1494, label %1495, label %1516

1495:                                             ; preds = %1478
  %1496 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1497 = load ptr, ptr %1496, align 8, !tbaa !19
  %1498 = load i64, ptr %37, align 8, !tbaa !9
  %1499 = mul nsw i64 2, %1498
  %1500 = getelementptr inbounds double, ptr %1497, i64 %1499
  %1501 = load double, ptr %1500, align 8, !tbaa !20
  %1502 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %1503 = load ptr, ptr %1502, align 8, !tbaa !19
  %1504 = load ptr, ptr %16, align 8, !tbaa !5
  %1505 = load i64, ptr %1504, align 8, !tbaa !9
  %1506 = getelementptr inbounds double, ptr %1503, i64 %1505
  store double %1501, ptr %1506, align 8, !tbaa !20
  %1507 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %1508 = load ptr, ptr %1507, align 8, !tbaa !19
  %1509 = load ptr, ptr %16, align 8, !tbaa !5
  %1510 = load i64, ptr %1509, align 8, !tbaa !9
  %1511 = getelementptr inbounds i64, ptr %1508, i64 %1510
  store i64 1, ptr %1511, align 8, !tbaa !9
  %1512 = load ptr, ptr %16, align 8, !tbaa !5
  %1513 = load i64, ptr %1512, align 8, !tbaa !9
  %1514 = add nsw i64 %1513, 1
  %1515 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1514, ptr %1515, align 8, !tbaa !9
  br label %1516

1516:                                             ; preds = %1495, %1478, %1461
  br label %1517

1517:                                             ; preds = %1516, %1440
  br label %1758

1518:                                             ; preds = %1401, %1398
  %1519 = load i64, ptr %37, align 8, !tbaa !9
  %1520 = icmp eq i64 %1519, 0
  br i1 %1520, label %1521, label %1634

1521:                                             ; preds = %1518
  %1522 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1523 = load ptr, ptr %1522, align 8, !tbaa !19
  %1524 = load i64, ptr %37, align 8, !tbaa !9
  %1525 = mul nsw i64 2, %1524
  %1526 = getelementptr inbounds double, ptr %1523, i64 %1525
  %1527 = load double, ptr %1526, align 8, !tbaa !20
  %1528 = load ptr, ptr %10, align 8, !tbaa !5
  %1529 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1528, i32 0, i32 4
  %1530 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1529, i32 0, i32 4
  %1531 = load ptr, ptr %1530, align 8, !tbaa !19
  %1532 = getelementptr inbounds double, ptr %1531, i64 0
  %1533 = load double, ptr %1532, align 8, !tbaa !20
  %1534 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %1527, double noundef %1533)
  br i1 %1534, label %1535, label %1633

1535:                                             ; preds = %1521
  %1536 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1537 = load ptr, ptr %1536, align 8, !tbaa !19
  %1538 = load i64, ptr %37, align 8, !tbaa !9
  %1539 = mul nsw i64 2, %1538
  %1540 = add nsw i64 %1539, 1
  %1541 = getelementptr inbounds double, ptr %1537, i64 %1540
  %1542 = load double, ptr %1541, align 8, !tbaa !20
  %1543 = load double, ptr %20, align 8, !tbaa !20
  %1544 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %1542, double noundef %1543)
  br i1 %1544, label %1545, label %1583

1545:                                             ; preds = %1535
  %1546 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1547 = load ptr, ptr %1546, align 8, !tbaa !19
  %1548 = load i64, ptr %37, align 8, !tbaa !9
  %1549 = mul nsw i64 2, %1548
  %1550 = add nsw i64 %1549, 1
  %1551 = getelementptr inbounds double, ptr %1547, i64 %1550
  %1552 = load double, ptr %1551, align 8, !tbaa !20
  %1553 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1554 = load ptr, ptr %1553, align 8, !tbaa !19
  %1555 = load i64, ptr %37, align 8, !tbaa !9
  %1556 = add nsw i64 %1555, 1
  %1557 = mul nsw i64 2, %1556
  %1558 = add nsw i64 %1557, 1
  %1559 = getelementptr inbounds double, ptr %1554, i64 %1558
  %1560 = load double, ptr %1559, align 8, !tbaa !20
  %1561 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %1552, double noundef %1560)
  br i1 %1561, label %1562, label %1583

1562:                                             ; preds = %1545
  %1563 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1564 = load ptr, ptr %1563, align 8, !tbaa !19
  %1565 = load i64, ptr %37, align 8, !tbaa !9
  %1566 = mul nsw i64 2, %1565
  %1567 = getelementptr inbounds double, ptr %1564, i64 %1566
  %1568 = load double, ptr %1567, align 8, !tbaa !20
  %1569 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %1570 = load ptr, ptr %1569, align 8, !tbaa !19
  %1571 = load ptr, ptr %16, align 8, !tbaa !5
  %1572 = load i64, ptr %1571, align 8, !tbaa !9
  %1573 = getelementptr inbounds double, ptr %1570, i64 %1572
  store double %1568, ptr %1573, align 8, !tbaa !20
  %1574 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %1575 = load ptr, ptr %1574, align 8, !tbaa !19
  %1576 = load ptr, ptr %16, align 8, !tbaa !5
  %1577 = load i64, ptr %1576, align 8, !tbaa !9
  %1578 = getelementptr inbounds i64, ptr %1575, i64 %1577
  store i64 -1, ptr %1578, align 8, !tbaa !9
  %1579 = load ptr, ptr %16, align 8, !tbaa !5
  %1580 = load i64, ptr %1579, align 8, !tbaa !9
  %1581 = add nsw i64 %1580, 1
  %1582 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1581, ptr %1582, align 8, !tbaa !9
  br label %1632

1583:                                             ; preds = %1545, %1535
  %1584 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1585 = load ptr, ptr %1584, align 8, !tbaa !19
  %1586 = load i64, ptr %37, align 8, !tbaa !9
  %1587 = mul nsw i64 2, %1586
  %1588 = add nsw i64 %1587, 1
  %1589 = getelementptr inbounds double, ptr %1585, i64 %1588
  %1590 = load double, ptr %1589, align 8, !tbaa !20
  %1591 = load double, ptr %20, align 8, !tbaa !20
  %1592 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %1590, double noundef %1591)
  br i1 %1592, label %1593, label %1631

1593:                                             ; preds = %1583
  %1594 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1595 = load ptr, ptr %1594, align 8, !tbaa !19
  %1596 = load i64, ptr %37, align 8, !tbaa !9
  %1597 = mul nsw i64 2, %1596
  %1598 = add nsw i64 %1597, 1
  %1599 = getelementptr inbounds double, ptr %1595, i64 %1598
  %1600 = load double, ptr %1599, align 8, !tbaa !20
  %1601 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1602 = load ptr, ptr %1601, align 8, !tbaa !19
  %1603 = load i64, ptr %37, align 8, !tbaa !9
  %1604 = add nsw i64 %1603, 1
  %1605 = mul nsw i64 2, %1604
  %1606 = add nsw i64 %1605, 1
  %1607 = getelementptr inbounds double, ptr %1602, i64 %1606
  %1608 = load double, ptr %1607, align 8, !tbaa !20
  %1609 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %1600, double noundef %1608)
  br i1 %1609, label %1610, label %1631

1610:                                             ; preds = %1593
  %1611 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1612 = load ptr, ptr %1611, align 8, !tbaa !19
  %1613 = load i64, ptr %37, align 8, !tbaa !9
  %1614 = mul nsw i64 2, %1613
  %1615 = getelementptr inbounds double, ptr %1612, i64 %1614
  %1616 = load double, ptr %1615, align 8, !tbaa !20
  %1617 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %1618 = load ptr, ptr %1617, align 8, !tbaa !19
  %1619 = load ptr, ptr %16, align 8, !tbaa !5
  %1620 = load i64, ptr %1619, align 8, !tbaa !9
  %1621 = getelementptr inbounds double, ptr %1618, i64 %1620
  store double %1616, ptr %1621, align 8, !tbaa !20
  %1622 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %1623 = load ptr, ptr %1622, align 8, !tbaa !19
  %1624 = load ptr, ptr %16, align 8, !tbaa !5
  %1625 = load i64, ptr %1624, align 8, !tbaa !9
  %1626 = getelementptr inbounds i64, ptr %1623, i64 %1625
  store i64 1, ptr %1626, align 8, !tbaa !9
  %1627 = load ptr, ptr %16, align 8, !tbaa !5
  %1628 = load i64, ptr %1627, align 8, !tbaa !9
  %1629 = add nsw i64 %1628, 1
  %1630 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1629, ptr %1630, align 8, !tbaa !9
  br label %1631

1631:                                             ; preds = %1610, %1593, %1583
  br label %1632

1632:                                             ; preds = %1631, %1562
  br label %1633

1633:                                             ; preds = %1632, %1521
  br label %1757

1634:                                             ; preds = %1518
  %1635 = load i64, ptr %37, align 8, !tbaa !9
  %1636 = load i64, ptr %35, align 8, !tbaa !9
  %1637 = sub nsw i64 %1636, 1
  %1638 = icmp eq i64 %1635, %1637
  br i1 %1638, label %1639, label %1756

1639:                                             ; preds = %1634
  %1640 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1641 = load ptr, ptr %1640, align 8, !tbaa !19
  %1642 = load i64, ptr %37, align 8, !tbaa !9
  %1643 = mul nsw i64 2, %1642
  %1644 = getelementptr inbounds double, ptr %1641, i64 %1643
  %1645 = load double, ptr %1644, align 8, !tbaa !20
  %1646 = load ptr, ptr %10, align 8, !tbaa !5
  %1647 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1646, i32 0, i32 4
  %1648 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1647, i32 0, i32 4
  %1649 = load ptr, ptr %1648, align 8, !tbaa !19
  %1650 = load ptr, ptr %10, align 8, !tbaa !5
  %1651 = getelementptr inbounds %"struct.alglib_impl::spline1dinterpolant", ptr %1650, i32 0, i32 1
  %1652 = load i64, ptr %1651, align 8, !tbaa !18
  %1653 = sub nsw i64 %1652, 1
  %1654 = getelementptr inbounds double, ptr %1649, i64 %1653
  %1655 = load double, ptr %1654, align 8, !tbaa !20
  %1656 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %1645, double noundef %1655)
  br i1 %1656, label %1657, label %1755

1657:                                             ; preds = %1639
  %1658 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1659 = load ptr, ptr %1658, align 8, !tbaa !19
  %1660 = load i64, ptr %37, align 8, !tbaa !9
  %1661 = mul nsw i64 2, %1660
  %1662 = add nsw i64 %1661, 1
  %1663 = getelementptr inbounds double, ptr %1659, i64 %1662
  %1664 = load double, ptr %1663, align 8, !tbaa !20
  %1665 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1666 = load ptr, ptr %1665, align 8, !tbaa !19
  %1667 = load i64, ptr %37, align 8, !tbaa !9
  %1668 = sub nsw i64 %1667, 1
  %1669 = mul nsw i64 2, %1668
  %1670 = add nsw i64 %1669, 1
  %1671 = getelementptr inbounds double, ptr %1666, i64 %1670
  %1672 = load double, ptr %1671, align 8, !tbaa !20
  %1673 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %1664, double noundef %1672)
  br i1 %1673, label %1674, label %1705

1674:                                             ; preds = %1657
  %1675 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1676 = load ptr, ptr %1675, align 8, !tbaa !19
  %1677 = load i64, ptr %37, align 8, !tbaa !9
  %1678 = mul nsw i64 2, %1677
  %1679 = add nsw i64 %1678, 1
  %1680 = getelementptr inbounds double, ptr %1676, i64 %1679
  %1681 = load double, ptr %1680, align 8, !tbaa !20
  %1682 = load double, ptr %23, align 8, !tbaa !20
  %1683 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %1681, double noundef %1682)
  br i1 %1683, label %1684, label %1705

1684:                                             ; preds = %1674
  %1685 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1686 = load ptr, ptr %1685, align 8, !tbaa !19
  %1687 = load i64, ptr %37, align 8, !tbaa !9
  %1688 = mul nsw i64 2, %1687
  %1689 = getelementptr inbounds double, ptr %1686, i64 %1688
  %1690 = load double, ptr %1689, align 8, !tbaa !20
  %1691 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %1692 = load ptr, ptr %1691, align 8, !tbaa !19
  %1693 = load ptr, ptr %16, align 8, !tbaa !5
  %1694 = load i64, ptr %1693, align 8, !tbaa !9
  %1695 = getelementptr inbounds double, ptr %1692, i64 %1694
  store double %1690, ptr %1695, align 8, !tbaa !20
  %1696 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %1697 = load ptr, ptr %1696, align 8, !tbaa !19
  %1698 = load ptr, ptr %16, align 8, !tbaa !5
  %1699 = load i64, ptr %1698, align 8, !tbaa !9
  %1700 = getelementptr inbounds i64, ptr %1697, i64 %1699
  store i64 -1, ptr %1700, align 8, !tbaa !9
  %1701 = load ptr, ptr %16, align 8, !tbaa !5
  %1702 = load i64, ptr %1701, align 8, !tbaa !9
  %1703 = add nsw i64 %1702, 1
  %1704 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1703, ptr %1704, align 8, !tbaa !9
  br label %1754

1705:                                             ; preds = %1674, %1657
  %1706 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1707 = load ptr, ptr %1706, align 8, !tbaa !19
  %1708 = load i64, ptr %37, align 8, !tbaa !9
  %1709 = mul nsw i64 2, %1708
  %1710 = add nsw i64 %1709, 1
  %1711 = getelementptr inbounds double, ptr %1707, i64 %1710
  %1712 = load double, ptr %1711, align 8, !tbaa !20
  %1713 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1714 = load ptr, ptr %1713, align 8, !tbaa !19
  %1715 = load i64, ptr %37, align 8, !tbaa !9
  %1716 = sub nsw i64 %1715, 1
  %1717 = mul nsw i64 2, %1716
  %1718 = add nsw i64 %1717, 1
  %1719 = getelementptr inbounds double, ptr %1714, i64 %1718
  %1720 = load double, ptr %1719, align 8, !tbaa !20
  %1721 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %1712, double noundef %1720)
  br i1 %1721, label %1722, label %1753

1722:                                             ; preds = %1705
  %1723 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1724 = load ptr, ptr %1723, align 8, !tbaa !19
  %1725 = load i64, ptr %37, align 8, !tbaa !9
  %1726 = mul nsw i64 2, %1725
  %1727 = add nsw i64 %1726, 1
  %1728 = getelementptr inbounds double, ptr %1724, i64 %1727
  %1729 = load double, ptr %1728, align 8, !tbaa !20
  %1730 = load double, ptr %23, align 8, !tbaa !20
  %1731 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %1729, double noundef %1730)
  br i1 %1731, label %1732, label %1753

1732:                                             ; preds = %1722
  %1733 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %29, i32 0, i32 4
  %1734 = load ptr, ptr %1733, align 8, !tbaa !19
  %1735 = load i64, ptr %37, align 8, !tbaa !9
  %1736 = mul nsw i64 2, %1735
  %1737 = getelementptr inbounds double, ptr %1734, i64 %1736
  %1738 = load double, ptr %1737, align 8, !tbaa !20
  %1739 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %1740 = load ptr, ptr %1739, align 8, !tbaa !19
  %1741 = load ptr, ptr %16, align 8, !tbaa !5
  %1742 = load i64, ptr %1741, align 8, !tbaa !9
  %1743 = getelementptr inbounds double, ptr %1740, i64 %1742
  store double %1738, ptr %1743, align 8, !tbaa !20
  %1744 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %1745 = load ptr, ptr %1744, align 8, !tbaa !19
  %1746 = load ptr, ptr %16, align 8, !tbaa !5
  %1747 = load i64, ptr %1746, align 8, !tbaa !9
  %1748 = getelementptr inbounds i64, ptr %1745, i64 %1747
  store i64 1, ptr %1748, align 8, !tbaa !9
  %1749 = load ptr, ptr %16, align 8, !tbaa !5
  %1750 = load i64, ptr %1749, align 8, !tbaa !9
  %1751 = add nsw i64 %1750, 1
  %1752 = load ptr, ptr %16, align 8, !tbaa !5
  store i64 %1751, ptr %1752, align 8, !tbaa !9
  br label %1753

1753:                                             ; preds = %1732, %1722, %1705
  br label %1754

1754:                                             ; preds = %1753, %1684
  br label %1755

1755:                                             ; preds = %1754, %1639
  br label %1756

1756:                                             ; preds = %1755, %1634
  br label %1757

1757:                                             ; preds = %1756, %1633
  br label %1758

1758:                                             ; preds = %1757, %1517
  br label %1759

1759:                                             ; preds = %1758
  %1760 = load i64, ptr %37, align 8, !tbaa !9
  %1761 = add nsw i64 %1760, 1
  store i64 %1761, ptr %37, align 8, !tbaa !9
  br label %1393, !llvm.loop !33

1762:                                             ; preds = %1393
  %1763 = load ptr, ptr %11, align 8, !tbaa !5
  %1764 = load ptr, ptr %12, align 8, !tbaa !5
  %1765 = load i64, ptr %1764, align 8, !tbaa !9
  %1766 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1763, i64 noundef %1765, ptr noundef %1766)
  %1767 = load ptr, ptr %14, align 8, !tbaa !5
  %1768 = load ptr, ptr %16, align 8, !tbaa !5
  %1769 = load i64, ptr %1768, align 8, !tbaa !9
  %1770 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1767, i64 noundef %1769, ptr noundef %1770)
  %1771 = load ptr, ptr %15, align 8, !tbaa !5
  %1772 = load ptr, ptr %16, align 8, !tbaa !5
  %1773 = load i64, ptr %1772, align 8, !tbaa !9
  %1774 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1771, i64 noundef %1773, ptr noundef %1774)
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %1775

1775:                                             ; preds = %1802, %1762
  %1776 = load i64, ptr %37, align 8, !tbaa !9
  %1777 = load ptr, ptr %16, align 8, !tbaa !5
  %1778 = load i64, ptr %1777, align 8, !tbaa !9
  %1779 = sub nsw i64 %1778, 1
  %1780 = icmp sle i64 %1776, %1779
  br i1 %1780, label %1781, label %1805

1781:                                             ; preds = %1775
  %1782 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %27, i32 0, i32 4
  %1783 = load ptr, ptr %1782, align 8, !tbaa !19
  %1784 = load i64, ptr %37, align 8, !tbaa !9
  %1785 = getelementptr inbounds double, ptr %1783, i64 %1784
  %1786 = load double, ptr %1785, align 8, !tbaa !20
  %1787 = load ptr, ptr %14, align 8, !tbaa !5
  %1788 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1787, i32 0, i32 4
  %1789 = load ptr, ptr %1788, align 8, !tbaa !19
  %1790 = load i64, ptr %37, align 8, !tbaa !9
  %1791 = getelementptr inbounds double, ptr %1789, i64 %1790
  store double %1786, ptr %1791, align 8, !tbaa !20
  %1792 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %28, i32 0, i32 4
  %1793 = load ptr, ptr %1792, align 8, !tbaa !19
  %1794 = load i64, ptr %37, align 8, !tbaa !9
  %1795 = getelementptr inbounds i64, ptr %1793, i64 %1794
  %1796 = load i64, ptr %1795, align 8, !tbaa !9
  %1797 = load ptr, ptr %15, align 8, !tbaa !5
  %1798 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1797, i32 0, i32 4
  %1799 = load ptr, ptr %1798, align 8, !tbaa !19
  %1800 = load i64, ptr %37, align 8, !tbaa !9
  %1801 = getelementptr inbounds i64, ptr %1799, i64 %1800
  store i64 %1796, ptr %1801, align 8, !tbaa !9
  br label %1802

1802:                                             ; preds = %1781
  %1803 = load i64, ptr %37, align 8, !tbaa !9
  %1804 = add nsw i64 %1803, 1
  store i64 %1804, ptr %37, align 8, !tbaa !9
  br label %1775, !llvm.loop !34

1805:                                             ; preds = %1775
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %1806

1806:                                             ; preds = %1823, %1805
  %1807 = load i64, ptr %37, align 8, !tbaa !9
  %1808 = load ptr, ptr %12, align 8, !tbaa !5
  %1809 = load i64, ptr %1808, align 8, !tbaa !9
  %1810 = sub nsw i64 %1809, 1
  %1811 = icmp sle i64 %1807, %1810
  br i1 %1811, label %1812, label %1826

1812:                                             ; preds = %1806
  %1813 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %26, i32 0, i32 4
  %1814 = load ptr, ptr %1813, align 8, !tbaa !19
  %1815 = load i64, ptr %37, align 8, !tbaa !9
  %1816 = getelementptr inbounds double, ptr %1814, i64 %1815
  %1817 = load double, ptr %1816, align 8, !tbaa !20
  %1818 = load ptr, ptr %11, align 8, !tbaa !5
  %1819 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1818, i32 0, i32 4
  %1820 = load ptr, ptr %1819, align 8, !tbaa !19
  %1821 = load i64, ptr %37, align 8, !tbaa !9
  %1822 = getelementptr inbounds double, ptr %1820, i64 %1821
  store double %1817, ptr %1822, align 8, !tbaa !20
  br label %1823

1823:                                             ; preds = %1812
  %1824 = load i64, ptr %37, align 8, !tbaa !9
  %1825 = add nsw i64 %1824, 1
  store i64 %1825, ptr %37, align 8, !tbaa !9
  br label %1806, !llvm.loop !35

1826:                                             ; preds = %1806
  br label %1827

1827:                                             ; preds = %1826, %482
  %1828 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %1828)
  call void @llvm.lifetime.end.p0(i64 1, 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 64, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 64, 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 32, ptr %19) #5
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl17solvecubicpolinomEddddddPdS0_S0_S0_S0_PlS1_PNS_9ae_vectorEPNS_8ae_stateE(double noundef, double noundef, double noundef, double noundef, double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !10, i64 16}
!14 = !{!"_ZTSN11alglib_impl19spline1dinterpolantE", !12, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !15, i64 32, !15, i64 96}
!15 = !{!"_ZTSN11alglib_impl9ae_vectorE", !10, i64 0, !10, i64 8, !12, i64 16, !16, i64 24, !7, i64 56}
!16 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!17 = !{!14, !10, i64 24}
!18 = !{!14, !10, i64 8}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !21, i64 0}
!21 = !{!"double", !7, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}


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

@.str.288 = external hidden unnamed_addr constant [51 x i8], align 1
@.str.289 = external hidden unnamed_addr constant [74 x i8], align 1

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

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

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

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

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

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

declare void @_ZN11alglib_impl15ae_vector_clearEPNS_9ae_vectorE(ptr noundef) local_unnamed_addr #2

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

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

declare void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 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 noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef, double noundef) local_unnamed_addr #2

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

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl23spline1drootsandextremaEPNS_19spline1dinterpolantEPNS_9ae_vectorEPlPbS3_S3_S4_S5_PNS_8ae_stateE(ptr nocapture noundef readonly %0, ptr noundef %1, ptr nocapture noundef %2, ptr nocapture noundef %3, ptr noundef %4, ptr noundef %5, ptr nocapture noundef %6, ptr nocapture noundef %7, ptr noundef %8) local_unnamed_addr #4 {
  %10 = alloca %"struct.alglib_impl::ae_frame", 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 double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 32, 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 8, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %8, ptr noundef nonnull %10)
  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 @_ZN11alglib_impl15ae_vector_clearEPNS_9ae_vectorE(ptr noundef %1)
  store i64 0, ptr %2, align 8, !tbaa !5
  store i8 0, ptr %3, align 1, !tbaa !9
  call void @_ZN11alglib_impl15ae_vector_clearEPNS_9ae_vectorE(ptr noundef %4)
  call void @_ZN11alglib_impl15ae_vector_clearEPNS_9ae_vectorE(ptr noundef %5)
  store i64 0, ptr %6, align 8, !tbaa !5
  store i8 0, ptr %7, align 1, !tbaa !9
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %11, i64 noundef 0, i64 noundef 3, ptr noundef %8, 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 %8, 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 %8, 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 %8, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %15, i64 noundef 0, i64 noundef 3, ptr noundef %8, i1 noundef zeroext true)
  %23 = getelementptr inbounds i8, ptr %0, i64 16
  %24 = load i64, ptr %23, align 8, !tbaa !11
  %25 = icmp eq i64 %24, 3
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %25, ptr noundef nonnull @.str.288, ptr noundef %8)
  %26 = getelementptr inbounds i8, ptr %0, i64 24
  %27 = load i64, ptr %26, align 8, !tbaa !16
  %28 = icmp sgt i64 %27, -1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %28, ptr noundef nonnull @.str.289, ptr noundef %8)
  store i64 0, ptr %2, align 8, !tbaa !5
  store i64 0, ptr %6, align 8, !tbaa !5
  store i8 0, ptr %3, align 1, !tbaa !9
  store i8 0, ptr %7, align 1, !tbaa !9
  %29 = load i64, ptr %26, align 8, !tbaa !16
  %30 = icmp eq i64 %29, 0
  %31 = getelementptr inbounds i8, ptr %0, i64 8
  %32 = load i64, ptr %31, align 8, !tbaa !17
  br i1 %30, label %33, label %230

33:                                               ; preds = %9
  %34 = mul i64 %32, 3
  %35 = add i64 %34, -3
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %12, i64 noundef %35, ptr noundef %8)
  %36 = load i64, ptr %31, align 8, !tbaa !17
  %37 = shl i64 %36, 1
  %38 = add i64 %37, -2
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %13, i64 noundef %38, ptr noundef %8)
  %39 = load i64, ptr %31, align 8, !tbaa !17
  %40 = shl i64 %39, 1
  %41 = add i64 %40, -2
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %14, i64 noundef %41, ptr noundef %8)
  %42 = load i64, ptr %31, align 8, !tbaa !17
  %.not452502 = icmp slt i64 %42, 2
  br i1 %.not452502, label %._crit_edge507, label %.lr.ph506

.lr.ph506:                                        ; preds = %33
  %43 = getelementptr inbounds i8, ptr %0, i64 152
  %44 = getelementptr inbounds i8, ptr %0, i64 88
  %45 = getelementptr inbounds i8, ptr %12, i64 56
  %46 = getelementptr inbounds i8, ptr %14, i64 56
  %47 = getelementptr inbounds i8, ptr %13, i64 56
  br label %48

48:                                               ; preds = %.lr.ph506, %171
  %.0504 = phi i8 [ 1, %.lr.ph506 ], [ %.1, %171 ]
  %.0426503 = phi i64 [ 0, %.lr.ph506 ], [ %56, %171 ]
  %49 = load ptr, ptr %43, align 8, !tbaa !18
  %50 = shl nsw i64 %.0426503, 2
  %51 = getelementptr inbounds double, ptr %49, i64 %50
  %52 = load double, ptr %51, align 8, !tbaa !19
  %53 = or disjoint i64 %50, 1
  %54 = getelementptr inbounds double, ptr %49, i64 %53
  %55 = load double, ptr %54, align 8, !tbaa !19
  %56 = add nuw nsw i64 %.0426503, 1
  %.idx455 = shl nsw i64 %56, 5
  %57 = getelementptr inbounds i8, ptr %49, i64 %.idx455
  %58 = load double, ptr %57, align 8, !tbaa !19
  %59 = or disjoint i64 %50, 2
  %60 = getelementptr inbounds double, ptr %49, i64 %59
  %61 = load double, ptr %60, align 8, !tbaa !19
  %62 = fmul double %61, 2.000000e+00
  %63 = load ptr, ptr %44, align 8, !tbaa !18
  %64 = getelementptr inbounds double, ptr %63, i64 %56
  %65 = load double, ptr %64, align 8, !tbaa !19
  %66 = getelementptr inbounds double, ptr %63, i64 %.0426503
  %67 = load double, ptr %66, align 8, !tbaa !19
  %68 = fsub double %65, %67
  %69 = call double @llvm.fmuladd.f64(double %62, double %68, double %55)
  %70 = or disjoint i64 %50, 3
  %71 = getelementptr inbounds double, ptr %49, i64 %70
  %72 = load double, ptr %71, align 8, !tbaa !19
  %73 = fmul double %72, 3.000000e+00
  %74 = fmul double %68, %73
  %75 = call double @llvm.fmuladd.f64(double %74, double %68, double %69)
  call void @_ZN11alglib_impl17solvecubicpolinomEddddddPdS0_S0_S0_S0_PlS1_PNS_9ae_vectorEPNS_8ae_stateE(double noundef %52, double noundef %55, double noundef %58, double noundef %75, double noundef %67, double noundef %65, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %22, ptr noundef nonnull %21, ptr noundef nonnull %11, ptr noundef %8)
  %76 = load i8, ptr %3, align 1, !tbaa !9, !range !21, !noundef !22
  %77 = trunc nuw i8 %76 to i1
  %78 = load i64, ptr %22, align 8
  %79 = icmp eq i64 %78, -1
  %80 = or i1 %79, %77
  %81 = zext i1 %80 to i8
  store i8 %81, ptr %3, align 1, !tbaa !9
  %82 = load i8, ptr %7, align 1, !tbaa !9, !range !21, !noundef !22
  %83 = trunc nuw i8 %82 to i1
  %84 = load i64, ptr %21, align 8
  %85 = icmp eq i64 %84, -1
  %86 = select i1 %83, i1 true, i1 %85
  %87 = zext i1 %86 to i8
  store i8 %87, ptr %7, align 1, !tbaa !9
  %88 = icmp eq i64 %78, 1
  br i1 %88, label %89, label %109

89:                                               ; preds = %48
  %90 = trunc nuw i8 %.0504 to i1
  br i1 %90, label %91, label %.thread

91:                                               ; preds = %89
  %92 = load i64, ptr %2, align 8, !tbaa !5
  %93 = icmp sgt i64 %92, 0
  %94 = load double, ptr %16, align 8, !tbaa !19
  %95 = load ptr, ptr %45, align 8, !tbaa !18
  %96 = getelementptr double, ptr %95, i64 %92
  br i1 %93, label %97, label %107

97:                                               ; preds = %91
  %98 = getelementptr i8, ptr %96, i64 -8
  %99 = load double, ptr %98, align 8, !tbaa !19
  %100 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %94, double noundef %99)
  br i1 %100, label %101, label %.thread

101:                                              ; preds = %97
  %102 = load double, ptr %16, align 8, !tbaa !19
  %103 = load ptr, ptr %45, align 8, !tbaa !18
  %104 = load i64, ptr %2, align 8, !tbaa !5
  %105 = getelementptr inbounds double, ptr %103, i64 %104
  store double %102, ptr %105, align 8, !tbaa !19
  %106 = add nsw i64 %104, 1
  store i64 %106, ptr %2, align 8, !tbaa !5
  br label %.thread

107:                                              ; preds = %91
  store double %94, ptr %96, align 8, !tbaa !19
  %108 = add nsw i64 %92, 1
  store i64 %108, ptr %2, align 8, !tbaa !5
  br label %.thread

109:                                              ; preds = %48
  br i1 %79, label %110, label %.thread

110:                                              ; preds = %109
  %111 = trunc nuw i8 %.0504 to i1
  %spec.store.select = select i1 %111, i8 0, i8 %.0504
  %112 = load i64, ptr %2, align 8, !tbaa !5
  %113 = icmp sgt i64 %112, 0
  br i1 %113, label %114, label %126

114:                                              ; preds = %110
  %115 = load ptr, ptr %44, align 8, !tbaa !18
  %116 = getelementptr inbounds double, ptr %115, i64 %.0426503
  %117 = load double, ptr %116, align 8, !tbaa !19
  %118 = load ptr, ptr %45, align 8, !tbaa !18
  %119 = getelementptr double, ptr %118, i64 %112
  %120 = getelementptr i8, ptr %119, i64 -8
  %121 = load double, ptr %120, align 8, !tbaa !19
  %122 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %117, double noundef %121)
  br i1 %122, label %123, label %126

123:                                              ; preds = %114
  %124 = load i64, ptr %2, align 8, !tbaa !5
  %125 = add nsw i64 %124, -1
  store i64 %125, ptr %2, align 8, !tbaa !5
  br label %126

126:                                              ; preds = %114, %123, %110
  %127 = load i8, ptr %3, align 1, !tbaa !9, !range !21, !noundef !22
  %128 = trunc nuw i8 %127 to i1
  br i1 %128, label %.thread, label %129

129:                                              ; preds = %126
  store i8 1, ptr %3, align 1, !tbaa !9
  br label %.thread

.thread:                                          ; preds = %89, %109, %129, %126, %107, %101, %97
  %.1 = phi i8 [ %.0504, %101 ], [ %.0504, %97 ], [ %.0504, %107 ], [ %spec.store.select, %126 ], [ %spec.store.select, %129 ], [ 1, %109 ], [ 1, %89 ]
  %.not456 = icmp eq i64 %.0426503, 0
  br i1 %.not456, label %171, label %130

130:                                              ; preds = %.thread
  %131 = load ptr, ptr %43, align 8, !tbaa !18
  %.idx457 = shl i64 %.0426503, 5
  %132 = getelementptr i8, ptr %131, i64 %.idx457
  %133 = getelementptr i8, ptr %132, i64 -32
  %134 = load double, ptr %133, align 8, !tbaa !19
  %135 = load i64, ptr %21, align 8, !tbaa !5
  %136 = icmp eq i64 %135, -1
  br i1 %136, label %137, label %141

137:                                              ; preds = %130
  %138 = load i8, ptr %7, align 1, !tbaa !9, !range !21, !noundef !22
  %139 = trunc nuw i8 %138 to i1
  br i1 %139, label %171, label %140

140:                                              ; preds = %137
  store i8 1, ptr %7, align 1, !tbaa !9
  br label %171

141:                                              ; preds = %130
  %142 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %52, double noundef %134)
  br i1 %142, label %143, label %156

143:                                              ; preds = %141
  %144 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %52, double noundef %58)
  br i1 %144, label %145, label %156

145:                                              ; preds = %143
  %146 = load ptr, ptr %46, align 8, !tbaa !18
  %147 = load i64, ptr %6, align 8, !tbaa !5
  %148 = getelementptr inbounds i64, ptr %146, i64 %147
  store i64 -1, ptr %148, align 8, !tbaa !5
  %149 = load ptr, ptr %44, align 8, !tbaa !18
  %150 = getelementptr inbounds double, ptr %149, i64 %.0426503
  %151 = load double, ptr %150, align 8, !tbaa !19
  %152 = load ptr, ptr %47, align 8, !tbaa !18
  %153 = load i64, ptr %6, align 8, !tbaa !5
  %154 = getelementptr inbounds double, ptr %152, i64 %153
  store double %151, ptr %154, align 8, !tbaa !19
  %155 = add nsw i64 %153, 1
  store i64 %155, ptr %6, align 8, !tbaa !5
  br label %171

156:                                              ; preds = %143, %141
  %157 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %52, double noundef %134)
  br i1 %157, label %158, label %171

158:                                              ; preds = %156
  %159 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %52, double noundef %58)
  br i1 %159, label %160, label %171

160:                                              ; preds = %158
  %161 = load ptr, ptr %46, align 8, !tbaa !18
  %162 = load i64, ptr %6, align 8, !tbaa !5
  %163 = getelementptr inbounds i64, ptr %161, i64 %162
  store i64 1, ptr %163, align 8, !tbaa !5
  %164 = load ptr, ptr %44, align 8, !tbaa !18
  %165 = getelementptr inbounds double, ptr %164, i64 %.0426503
  %166 = load double, ptr %165, align 8, !tbaa !19
  %167 = load ptr, ptr %47, align 8, !tbaa !18
  %168 = load i64, ptr %6, align 8, !tbaa !5
  %169 = getelementptr inbounds double, ptr %167, i64 %168
  store double %166, ptr %169, align 8, !tbaa !19
  %170 = add nsw i64 %168, 1
  store i64 %170, ptr %6, align 8, !tbaa !5
  br label %171

171:                                              ; preds = %.thread, %145, %160, %158, %156, %137, %140
  %172 = load i64, ptr %31, align 8, !tbaa !17
  %173 = add nsw i64 %172, -2
  %.not452.not = icmp slt i64 %.0426503, %173
  br i1 %.not452.not, label %48, label %._crit_edge507, !llvm.loop !23

._crit_edge507:                                   ; preds = %171, %33
  %174 = load i64, ptr %2, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1, i64 noundef %174, ptr noundef %8)
  %175 = load i64, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %4, i64 noundef %175, ptr noundef %8)
  %176 = load i64, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %5, i64 noundef %176, ptr noundef %8)
  %177 = load i64, ptr %2, align 8, !tbaa !5
  %.not453.not508 = icmp sgt i64 %177, 0
  br i1 %.not453.not508, label %.lr.ph511, label %.preheader

.lr.ph511:                                        ; preds = %._crit_edge507
  %178 = getelementptr inbounds i8, ptr %12, i64 56
  %179 = getelementptr inbounds i8, ptr %1, i64 56
  %xtraiter571 = and i64 %177, 3
  %180 = icmp ult i64 %177, 4
  br i1 %180, label %.preheader.loopexit.unr-lcssa, label %.lr.ph511.new

.lr.ph511.new:                                    ; preds = %.lr.ph511
  %unroll_iter574 = and i64 %177, 9223372036854775804
  br label %192

.preheader.loopexit.unr-lcssa:                    ; preds = %192, %.lr.ph511
  %.1427509.unr = phi i64 [ 0, %.lr.ph511 ], [ %216, %192 ]
  %lcmp.mod573.not = icmp eq i64 %xtraiter571, 0
  br i1 %lcmp.mod573.not, label %.preheader, label %.epil.preheader570

.epil.preheader570:                               ; preds = %.preheader.loopexit.unr-lcssa, %.epil.preheader570
  %.1427509.epil = phi i64 [ %186, %.epil.preheader570 ], [ %.1427509.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter572 = phi i64 [ %epil.iter572.next, %.epil.preheader570 ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %181 = load ptr, ptr %178, align 8, !tbaa !18
  %182 = getelementptr inbounds double, ptr %181, i64 %.1427509.epil
  %183 = load double, ptr %182, align 8, !tbaa !19
  %184 = load ptr, ptr %179, align 8, !tbaa !18
  %185 = getelementptr inbounds double, ptr %184, i64 %.1427509.epil
  store double %183, ptr %185, align 8, !tbaa !19
  %186 = add nuw nsw i64 %.1427509.epil, 1
  %epil.iter572.next = add i64 %epil.iter572, 1
  %epil.iter572.cmp.not = icmp eq i64 %epil.iter572.next, %xtraiter571
  br i1 %epil.iter572.cmp.not, label %.preheader, label %.epil.preheader570, !llvm.loop !25

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.epil.preheader570, %._crit_edge507
  %187 = load i64, ptr %6, align 8, !tbaa !5
  %.not454.not512 = icmp sgt i64 %187, 0
  br i1 %.not454.not512, label %.lr.ph514, label %.loopexit

.lr.ph514:                                        ; preds = %.preheader
  %188 = getelementptr inbounds i8, ptr %13, i64 56
  %189 = getelementptr inbounds i8, ptr %4, i64 56
  %190 = getelementptr inbounds i8, ptr %14, i64 56
  %191 = getelementptr inbounds i8, ptr %5, i64 56
  br label %217

192:                                              ; preds = %192, %.lr.ph511.new
  %.1427509 = phi i64 [ 0, %.lr.ph511.new ], [ %216, %192 ]
  %niter575 = phi i64 [ 0, %.lr.ph511.new ], [ %niter575.next.3, %192 ]
  %193 = load ptr, ptr %178, align 8, !tbaa !18
  %194 = getelementptr inbounds double, ptr %193, i64 %.1427509
  %195 = load double, ptr %194, align 8, !tbaa !19
  %196 = load ptr, ptr %179, align 8, !tbaa !18
  %197 = getelementptr inbounds double, ptr %196, i64 %.1427509
  store double %195, ptr %197, align 8, !tbaa !19
  %198 = or disjoint i64 %.1427509, 1
  %199 = load ptr, ptr %178, align 8, !tbaa !18
  %200 = getelementptr inbounds double, ptr %199, i64 %198
  %201 = load double, ptr %200, align 8, !tbaa !19
  %202 = load ptr, ptr %179, align 8, !tbaa !18
  %203 = getelementptr inbounds double, ptr %202, i64 %198
  store double %201, ptr %203, align 8, !tbaa !19
  %204 = or disjoint i64 %.1427509, 2
  %205 = load ptr, ptr %178, align 8, !tbaa !18
  %206 = getelementptr inbounds double, ptr %205, i64 %204
  %207 = load double, ptr %206, align 8, !tbaa !19
  %208 = load ptr, ptr %179, align 8, !tbaa !18
  %209 = getelementptr inbounds double, ptr %208, i64 %204
  store double %207, ptr %209, align 8, !tbaa !19
  %210 = or disjoint i64 %.1427509, 3
  %211 = load ptr, ptr %178, align 8, !tbaa !18
  %212 = getelementptr inbounds double, ptr %211, i64 %210
  %213 = load double, ptr %212, align 8, !tbaa !19
  %214 = load ptr, ptr %179, align 8, !tbaa !18
  %215 = getelementptr inbounds double, ptr %214, i64 %210
  store double %213, ptr %215, align 8, !tbaa !19
  %216 = add nuw nsw i64 %.1427509, 4
  %niter575.next.3 = add i64 %niter575, 4
  %niter575.ncmp.3 = icmp eq i64 %niter575.next.3, %unroll_iter574
  br i1 %niter575.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %192, !llvm.loop !27

217:                                              ; preds = %.lr.ph514, %217
  %.2428513 = phi i64 [ 0, %.lr.ph514 ], [ %228, %217 ]
  %218 = load ptr, ptr %188, align 8, !tbaa !18
  %219 = getelementptr inbounds double, ptr %218, i64 %.2428513
  %220 = load double, ptr %219, align 8, !tbaa !19
  %221 = load ptr, ptr %189, align 8, !tbaa !18
  %222 = getelementptr inbounds double, ptr %221, i64 %.2428513
  store double %220, ptr %222, align 8, !tbaa !19
  %223 = load ptr, ptr %190, align 8, !tbaa !18
  %224 = getelementptr inbounds i64, ptr %223, i64 %.2428513
  %225 = load i64, ptr %224, align 8, !tbaa !5
  %226 = load ptr, ptr %191, align 8, !tbaa !18
  %227 = getelementptr inbounds i64, ptr %226, i64 %.2428513
  store i64 %225, ptr %227, align 8, !tbaa !5
  %228 = add nuw nsw i64 %.2428513, 1
  %229 = load i64, ptr %6, align 8, !tbaa !5
  %.not454.not = icmp slt i64 %228, %229
  br i1 %.not454.not, label %217, label %.loopexit, !llvm.loop !28

230:                                              ; preds = %9
  %231 = shl nsw i64 %32, 1
  %232 = add nsw i64 %231, -1
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %12, i64 noundef %232, ptr noundef %8)
  %233 = load i64, ptr %31, align 8, !tbaa !17
  %234 = shl nsw i64 %233, 2
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %15, i64 noundef %234, ptr noundef %8)
  %235 = load i64, ptr %31, align 8, !tbaa !17
  %236 = shl nsw i64 %235, 1
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %13, i64 noundef %236, ptr noundef %8)
  %237 = load i64, ptr %31, align 8, !tbaa !17
  %238 = shl nsw i64 %237, 1
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %14, i64 noundef %238, ptr noundef %8)
  %239 = load i64, ptr %31, align 8, !tbaa !17
  %.not484 = icmp slt i64 %239, 2
  br i1 %.not484, label %._crit_edge489, label %.lr.ph488

.lr.ph488:                                        ; preds = %230
  %240 = getelementptr inbounds i8, ptr %0, i64 152
  %241 = getelementptr inbounds i8, ptr %0, i64 88
  %242 = getelementptr inbounds i8, ptr %11, i64 56
  %243 = getelementptr inbounds i8, ptr %12, i64 56
  %244 = getelementptr inbounds i8, ptr %15, i64 56
  br label %245

245:                                              ; preds = %.lr.ph488, %640
  %.2486 = phi i8 [ 1, %.lr.ph488 ], [ %.3, %640 ]
  %.3429485 = phi i64 [ 0, %.lr.ph488 ], [ %253, %640 ]
  %246 = load ptr, ptr %240, align 8, !tbaa !18
  %247 = shl nsw i64 %.3429485, 2
  %248 = getelementptr inbounds double, ptr %246, i64 %247
  %249 = load double, ptr %248, align 8, !tbaa !19
  %250 = or disjoint i64 %247, 1
  %251 = getelementptr inbounds double, ptr %246, i64 %250
  %252 = load double, ptr %251, align 8, !tbaa !19
  %253 = add nuw nsw i64 %.3429485, 1
  %254 = shl nsw i64 %253, 2
  %255 = getelementptr inbounds double, ptr %246, i64 %254
  %256 = load double, ptr %255, align 8, !tbaa !19
  %257 = or disjoint i64 %254, 1
  %258 = getelementptr inbounds double, ptr %246, i64 %257
  %259 = load double, ptr %258, align 8, !tbaa !19
  %260 = load ptr, ptr %241, align 8, !tbaa !18
  %261 = getelementptr inbounds double, ptr %260, i64 %.3429485
  %262 = load double, ptr %261, align 8, !tbaa !19
  %263 = getelementptr inbounds double, ptr %260, i64 %253
  %264 = load double, ptr %263, align 8, !tbaa !19
  call void @_ZN11alglib_impl17solvecubicpolinomEddddddPdS0_S0_S0_S0_PlS1_PNS_9ae_vectorEPNS_8ae_stateE(double noundef %249, double noundef %252, double noundef %256, double noundef %259, double noundef %262, double noundef %264, ptr noundef nonnull %16, ptr noundef nonnull %17, ptr noundef nonnull %18, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %22, ptr noundef nonnull %21, ptr noundef nonnull %11, ptr noundef %8)
  %265 = load i64, ptr %22, align 8, !tbaa !5
  %266 = icmp sgt i64 %265, 0
  br i1 %266, label %267, label %455

267:                                              ; preds = %245
  %268 = load double, ptr %16, align 8, !tbaa !19
  %269 = load ptr, ptr %242, align 8, !tbaa !18
  store double %268, ptr %269, align 8, !tbaa !19
  %.not459 = icmp eq i64 %265, 1
  br i1 %.not459, label %.thread458, label %270

270:                                              ; preds = %267
  %271 = load double, ptr %17, align 8, !tbaa !19
  %272 = load ptr, ptr %242, align 8, !tbaa !18
  %273 = getelementptr inbounds i8, ptr %272, i64 8
  store double %271, ptr %273, align 8, !tbaa !19
  %274 = icmp eq i64 %265, 3
  br i1 %274, label %275, label %.thread458

275:                                              ; preds = %270
  %276 = load double, ptr %18, align 8, !tbaa !19
  %277 = load ptr, ptr %242, align 8, !tbaa !18
  %278 = getelementptr inbounds i8, ptr %277, i64 16
  store double %276, ptr %278, align 8, !tbaa !19
  br label %.thread458

.thread458:                                       ; preds = %267, %275, %270
  %279 = load i64, ptr %2, align 8, !tbaa !5
  %280 = icmp sgt i64 %279, 0
  br i1 %280, label %282, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %.thread458
  %xtraiter = and i64 %265, 3
  %281 = icmp ult i64 %265, 4
  br i1 %281, label %._crit_edge.unr-lcssa, label %.lr.ph.preheader.new

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

282:                                              ; preds = %.thread458
  %283 = load ptr, ptr %243, align 8, !tbaa !18
  %284 = getelementptr double, ptr %283, i64 %279
  %285 = getelementptr i8, ptr %284, i64 -8
  %286 = load double, ptr %285, align 8, !tbaa !19
  %287 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %286, double noundef %268)
  %.pre522 = load i64, ptr %2, align 8, !tbaa !5
  br i1 %287, label %292, label %.preheader464

.preheader464:                                    ; preds = %282
  %288 = load i64, ptr %22, align 8, !tbaa !5
  %.not449.not470 = icmp sgt i64 %288, 1
  br i1 %.not449.not470, label %.lr.ph472.preheader, label %._crit_edge473

.lr.ph472.preheader:                              ; preds = %.preheader464
  %289 = add nsw i64 %288, -1
  %290 = add nsw i64 %288, -2
  %xtraiter549 = and i64 %289, 3
  %291 = icmp ult i64 %290, 3
  br i1 %291, label %._crit_edge473.loopexit.unr-lcssa, label %.lr.ph472.preheader.new

.lr.ph472.preheader.new:                          ; preds = %.lr.ph472.preheader
  %unroll_iter552 = and i64 %289, -4
  br label %.lr.ph472

292:                                              ; preds = %282
  %293 = trunc nuw i8 %.2486 to i1
  %294 = load i64, ptr %22, align 8, !tbaa !5
  br i1 %293, label %.preheader462, label %.preheader463

.preheader463:                                    ; preds = %292
  %.not450.not474 = icmp sgt i64 %294, 1
  br i1 %.not450.not474, label %.lr.ph476.preheader, label %._crit_edge477

.lr.ph476.preheader:                              ; preds = %.preheader463
  %295 = add nsw i64 %294, -1
  %296 = add nsw i64 %294, -2
  %xtraiter554 = and i64 %295, 3
  %297 = icmp ult i64 %296, 3
  br i1 %297, label %._crit_edge477.loopexit.unr-lcssa, label %.lr.ph476.preheader.new

.lr.ph476.preheader.new:                          ; preds = %.lr.ph476.preheader
  %unroll_iter557 = and i64 %295, -4
  br label %.lr.ph476

.preheader462:                                    ; preds = %292
  %.not451.not479 = icmp sgt i64 %294, 0
  br i1 %.not451.not479, label %.lr.ph481.preheader, label %._crit_edge482

.lr.ph481.preheader:                              ; preds = %.preheader462
  %xtraiter559 = and i64 %294, 3
  %298 = icmp ult i64 %294, 4
  br i1 %298, label %._crit_edge482.loopexit.unr-lcssa, label %.lr.ph481.preheader.new

.lr.ph481.preheader.new:                          ; preds = %.lr.ph481.preheader
  %unroll_iter562 = and i64 %294, 9223372036854775804
  br label %.lr.ph481

.lr.ph481:                                        ; preds = %.lr.ph481, %.lr.ph481.preheader.new
  %.0422480 = phi i64 [ 0, %.lr.ph481.preheader.new ], [ %326, %.lr.ph481 ]
  %niter563 = phi i64 [ 0, %.lr.ph481.preheader.new ], [ %niter563.next.3, %.lr.ph481 ]
  %299 = load ptr, ptr %242, align 8, !tbaa !18
  %300 = getelementptr inbounds double, ptr %299, i64 %.0422480
  %301 = load double, ptr %300, align 8, !tbaa !19
  %302 = load ptr, ptr %243, align 8, !tbaa !18
  %303 = getelementptr double, ptr %302, i64 %.pre522
  %304 = getelementptr double, ptr %303, i64 %.0422480
  store double %301, ptr %304, align 8, !tbaa !19
  %305 = or disjoint i64 %.0422480, 1
  %306 = load ptr, ptr %242, align 8, !tbaa !18
  %307 = getelementptr inbounds double, ptr %306, i64 %305
  %308 = load double, ptr %307, align 8, !tbaa !19
  %309 = load ptr, ptr %243, align 8, !tbaa !18
  %310 = getelementptr double, ptr %309, i64 %.pre522
  %311 = getelementptr double, ptr %310, i64 %305
  store double %308, ptr %311, align 8, !tbaa !19
  %312 = or disjoint i64 %.0422480, 2
  %313 = load ptr, ptr %242, align 8, !tbaa !18
  %314 = getelementptr inbounds double, ptr %313, i64 %312
  %315 = load double, ptr %314, align 8, !tbaa !19
  %316 = load ptr, ptr %243, align 8, !tbaa !18
  %317 = getelementptr double, ptr %316, i64 %.pre522
  %318 = getelementptr double, ptr %317, i64 %312
  store double %315, ptr %318, align 8, !tbaa !19
  %319 = or disjoint i64 %.0422480, 3
  %320 = load ptr, ptr %242, align 8, !tbaa !18
  %321 = getelementptr inbounds double, ptr %320, i64 %319
  %322 = load double, ptr %321, align 8, !tbaa !19
  %323 = load ptr, ptr %243, align 8, !tbaa !18
  %324 = getelementptr double, ptr %323, i64 %.pre522
  %325 = getelementptr double, ptr %324, i64 %319
  store double %322, ptr %325, align 8, !tbaa !19
  %326 = add nuw nsw i64 %.0422480, 4
  %niter563.next.3 = add i64 %niter563, 4
  %niter563.ncmp.3 = icmp eq i64 %niter563.next.3, %unroll_iter562
  br i1 %niter563.ncmp.3, label %._crit_edge482.loopexit.unr-lcssa, label %.lr.ph481, !llvm.loop !29

._crit_edge482.loopexit.unr-lcssa:                ; preds = %.lr.ph481, %.lr.ph481.preheader
  %.0422480.unr = phi i64 [ 0, %.lr.ph481.preheader ], [ %326, %.lr.ph481 ]
  %lcmp.mod561.not = icmp eq i64 %xtraiter559, 0
  br i1 %lcmp.mod561.not, label %._crit_edge482, label %.lr.ph481.epil

.lr.ph481.epil:                                   ; preds = %._crit_edge482.loopexit.unr-lcssa, %.lr.ph481.epil
  %.0422480.epil = phi i64 [ %333, %.lr.ph481.epil ], [ %.0422480.unr, %._crit_edge482.loopexit.unr-lcssa ]
  %epil.iter560 = phi i64 [ %epil.iter560.next, %.lr.ph481.epil ], [ 0, %._crit_edge482.loopexit.unr-lcssa ]
  %327 = load ptr, ptr %242, align 8, !tbaa !18
  %328 = getelementptr inbounds double, ptr %327, i64 %.0422480.epil
  %329 = load double, ptr %328, align 8, !tbaa !19
  %330 = load ptr, ptr %243, align 8, !tbaa !18
  %331 = getelementptr double, ptr %330, i64 %.pre522
  %332 = getelementptr double, ptr %331, i64 %.0422480.epil
  store double %329, ptr %332, align 8, !tbaa !19
  %333 = add nuw nsw i64 %.0422480.epil, 1
  %epil.iter560.next = add i64 %epil.iter560, 1
  %epil.iter560.cmp.not = icmp eq i64 %epil.iter560.next, %xtraiter559
  br i1 %epil.iter560.cmp.not, label %._crit_edge482, label %.lr.ph481.epil, !llvm.loop !30

._crit_edge482:                                   ; preds = %._crit_edge482.loopexit.unr-lcssa, %.lr.ph481.epil, %.preheader462
  %334 = add nsw i64 %.pre522, %294
  store i64 %334, ptr %2, align 8, !tbaa !5
  br label %469

.lr.ph476:                                        ; preds = %.lr.ph476, %.lr.ph476.preheader.new
  %.1423475 = phi i64 [ 1, %.lr.ph476.preheader.new ], [ %366, %.lr.ph476 ]
  %niter558 = phi i64 [ 0, %.lr.ph476.preheader.new ], [ %niter558.next.3, %.lr.ph476 ]
  %335 = load ptr, ptr %242, align 8, !tbaa !18
  %336 = getelementptr inbounds double, ptr %335, i64 %.1423475
  %337 = load double, ptr %336, align 8, !tbaa !19
  %338 = load ptr, ptr %243, align 8, !tbaa !18
  %339 = getelementptr double, ptr %338, i64 %.pre522
  %340 = getelementptr double, ptr %339, i64 %.1423475
  %341 = getelementptr i8, ptr %340, i64 -8
  store double %337, ptr %341, align 8, !tbaa !19
  %342 = add nuw nsw i64 %.1423475, 1
  %343 = load ptr, ptr %242, align 8, !tbaa !18
  %344 = getelementptr inbounds double, ptr %343, i64 %342
  %345 = load double, ptr %344, align 8, !tbaa !19
  %346 = load ptr, ptr %243, align 8, !tbaa !18
  %347 = getelementptr double, ptr %346, i64 %.pre522
  %348 = getelementptr double, ptr %347, i64 %342
  %349 = getelementptr i8, ptr %348, i64 -8
  store double %345, ptr %349, align 8, !tbaa !19
  %350 = add nuw nsw i64 %.1423475, 2
  %351 = load ptr, ptr %242, align 8, !tbaa !18
  %352 = getelementptr inbounds double, ptr %351, i64 %350
  %353 = load double, ptr %352, align 8, !tbaa !19
  %354 = load ptr, ptr %243, align 8, !tbaa !18
  %355 = getelementptr double, ptr %354, i64 %.pre522
  %356 = getelementptr double, ptr %355, i64 %350
  %357 = getelementptr i8, ptr %356, i64 -8
  store double %353, ptr %357, align 8, !tbaa !19
  %358 = add nuw nsw i64 %.1423475, 3
  %359 = load ptr, ptr %242, align 8, !tbaa !18
  %360 = getelementptr inbounds double, ptr %359, i64 %358
  %361 = load double, ptr %360, align 8, !tbaa !19
  %362 = load ptr, ptr %243, align 8, !tbaa !18
  %363 = getelementptr double, ptr %362, i64 %.pre522
  %364 = getelementptr double, ptr %363, i64 %358
  %365 = getelementptr i8, ptr %364, i64 -8
  store double %361, ptr %365, align 8, !tbaa !19
  %366 = add nuw nsw i64 %.1423475, 4
  %niter558.next.3 = add i64 %niter558, 4
  %niter558.ncmp.3 = icmp eq i64 %niter558.next.3, %unroll_iter557
  br i1 %niter558.ncmp.3, label %._crit_edge477.loopexit.unr-lcssa, label %.lr.ph476, !llvm.loop !31

._crit_edge477.loopexit.unr-lcssa:                ; preds = %.lr.ph476, %.lr.ph476.preheader
  %.1423475.unr = phi i64 [ 1, %.lr.ph476.preheader ], [ %366, %.lr.ph476 ]
  %lcmp.mod556.not = icmp eq i64 %xtraiter554, 0
  br i1 %lcmp.mod556.not, label %._crit_edge477, label %.lr.ph476.epil

.lr.ph476.epil:                                   ; preds = %._crit_edge477.loopexit.unr-lcssa, %.lr.ph476.epil
  %.1423475.epil = phi i64 [ %374, %.lr.ph476.epil ], [ %.1423475.unr, %._crit_edge477.loopexit.unr-lcssa ]
  %epil.iter555 = phi i64 [ %epil.iter555.next, %.lr.ph476.epil ], [ 0, %._crit_edge477.loopexit.unr-lcssa ]
  %367 = load ptr, ptr %242, align 8, !tbaa !18
  %368 = getelementptr inbounds double, ptr %367, i64 %.1423475.epil
  %369 = load double, ptr %368, align 8, !tbaa !19
  %370 = load ptr, ptr %243, align 8, !tbaa !18
  %371 = getelementptr double, ptr %370, i64 %.pre522
  %372 = getelementptr double, ptr %371, i64 %.1423475.epil
  %373 = getelementptr i8, ptr %372, i64 -8
  store double %369, ptr %373, align 8, !tbaa !19
  %374 = add nuw nsw i64 %.1423475.epil, 1
  %epil.iter555.next = add i64 %epil.iter555, 1
  %epil.iter555.cmp.not = icmp eq i64 %epil.iter555.next, %xtraiter554
  br i1 %epil.iter555.cmp.not, label %._crit_edge477, label %.lr.ph476.epil, !llvm.loop !32

._crit_edge477:                                   ; preds = %._crit_edge477.loopexit.unr-lcssa, %.lr.ph476.epil, %.preheader463
  %375 = add i64 %294, -1
  %376 = add i64 %375, %.pre522
  store i64 %376, ptr %2, align 8, !tbaa !5
  br label %469

.lr.ph472:                                        ; preds = %.lr.ph472, %.lr.ph472.preheader.new
  %.2424471 = phi i64 [ 1, %.lr.ph472.preheader.new ], [ %408, %.lr.ph472 ]
  %niter553 = phi i64 [ 0, %.lr.ph472.preheader.new ], [ %niter553.next.3, %.lr.ph472 ]
  %377 = load ptr, ptr %242, align 8, !tbaa !18
  %378 = getelementptr inbounds double, ptr %377, i64 %.2424471
  %379 = load double, ptr %378, align 8, !tbaa !19
  %380 = load ptr, ptr %243, align 8, !tbaa !18
  %381 = getelementptr double, ptr %380, i64 %.pre522
  %382 = getelementptr double, ptr %381, i64 %.2424471
  %383 = getelementptr i8, ptr %382, i64 -8
  store double %379, ptr %383, align 8, !tbaa !19
  %384 = add nuw nsw i64 %.2424471, 1
  %385 = load ptr, ptr %242, align 8, !tbaa !18
  %386 = getelementptr inbounds double, ptr %385, i64 %384
  %387 = load double, ptr %386, align 8, !tbaa !19
  %388 = load ptr, ptr %243, align 8, !tbaa !18
  %389 = getelementptr double, ptr %388, i64 %.pre522
  %390 = getelementptr double, ptr %389, i64 %384
  %391 = getelementptr i8, ptr %390, i64 -8
  store double %387, ptr %391, align 8, !tbaa !19
  %392 = add nuw nsw i64 %.2424471, 2
  %393 = load ptr, ptr %242, align 8, !tbaa !18
  %394 = getelementptr inbounds double, ptr %393, i64 %392
  %395 = load double, ptr %394, align 8, !tbaa !19
  %396 = load ptr, ptr %243, align 8, !tbaa !18
  %397 = getelementptr double, ptr %396, i64 %.pre522
  %398 = getelementptr double, ptr %397, i64 %392
  %399 = getelementptr i8, ptr %398, i64 -8
  store double %395, ptr %399, align 8, !tbaa !19
  %400 = add nuw nsw i64 %.2424471, 3
  %401 = load ptr, ptr %242, align 8, !tbaa !18
  %402 = getelementptr inbounds double, ptr %401, i64 %400
  %403 = load double, ptr %402, align 8, !tbaa !19
  %404 = load ptr, ptr %243, align 8, !tbaa !18
  %405 = getelementptr double, ptr %404, i64 %.pre522
  %406 = getelementptr double, ptr %405, i64 %400
  %407 = getelementptr i8, ptr %406, i64 -8
  store double %403, ptr %407, align 8, !tbaa !19
  %408 = add nuw nsw i64 %.2424471, 4
  %niter553.next.3 = add i64 %niter553, 4
  %niter553.ncmp.3 = icmp eq i64 %niter553.next.3, %unroll_iter552
  br i1 %niter553.ncmp.3, label %._crit_edge473.loopexit.unr-lcssa, label %.lr.ph472, !llvm.loop !33

._crit_edge473.loopexit.unr-lcssa:                ; preds = %.lr.ph472, %.lr.ph472.preheader
  %.2424471.unr = phi i64 [ 1, %.lr.ph472.preheader ], [ %408, %.lr.ph472 ]
  %lcmp.mod551.not = icmp eq i64 %xtraiter549, 0
  br i1 %lcmp.mod551.not, label %._crit_edge473, label %.lr.ph472.epil

.lr.ph472.epil:                                   ; preds = %._crit_edge473.loopexit.unr-lcssa, %.lr.ph472.epil
  %.2424471.epil = phi i64 [ %416, %.lr.ph472.epil ], [ %.2424471.unr, %._crit_edge473.loopexit.unr-lcssa ]
  %epil.iter550 = phi i64 [ %epil.iter550.next, %.lr.ph472.epil ], [ 0, %._crit_edge473.loopexit.unr-lcssa ]
  %409 = load ptr, ptr %242, align 8, !tbaa !18
  %410 = getelementptr inbounds double, ptr %409, i64 %.2424471.epil
  %411 = load double, ptr %410, align 8, !tbaa !19
  %412 = load ptr, ptr %243, align 8, !tbaa !18
  %413 = getelementptr double, ptr %412, i64 %.pre522
  %414 = getelementptr double, ptr %413, i64 %.2424471.epil
  %415 = getelementptr i8, ptr %414, i64 -8
  store double %411, ptr %415, align 8, !tbaa !19
  %416 = add nuw nsw i64 %.2424471.epil, 1
  %epil.iter550.next = add i64 %epil.iter550, 1
  %epil.iter550.cmp.not = icmp eq i64 %epil.iter550.next, %xtraiter549
  br i1 %epil.iter550.cmp.not, label %._crit_edge473, label %.lr.ph472.epil, !llvm.loop !34

._crit_edge473:                                   ; preds = %._crit_edge473.loopexit.unr-lcssa, %.lr.ph472.epil, %.preheader464
  %417 = add i64 %288, -1
  %418 = add i64 %417, %.pre522
  store i64 %418, ptr %2, align 8, !tbaa !5
  br label %469

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.3425469 = phi i64 [ 0, %.lr.ph.preheader.new ], [ %446, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %419 = load ptr, ptr %242, align 8, !tbaa !18
  %420 = getelementptr inbounds double, ptr %419, i64 %.3425469
  %421 = load double, ptr %420, align 8, !tbaa !19
  %422 = load ptr, ptr %243, align 8, !tbaa !18
  %423 = getelementptr double, ptr %422, i64 %279
  %424 = getelementptr double, ptr %423, i64 %.3425469
  store double %421, ptr %424, align 8, !tbaa !19
  %425 = or disjoint i64 %.3425469, 1
  %426 = load ptr, ptr %242, align 8, !tbaa !18
  %427 = getelementptr inbounds double, ptr %426, i64 %425
  %428 = load double, ptr %427, align 8, !tbaa !19
  %429 = load ptr, ptr %243, align 8, !tbaa !18
  %430 = getelementptr double, ptr %429, i64 %279
  %431 = getelementptr double, ptr %430, i64 %425
  store double %428, ptr %431, align 8, !tbaa !19
  %432 = or disjoint i64 %.3425469, 2
  %433 = load ptr, ptr %242, align 8, !tbaa !18
  %434 = getelementptr inbounds double, ptr %433, i64 %432
  %435 = load double, ptr %434, align 8, !tbaa !19
  %436 = load ptr, ptr %243, align 8, !tbaa !18
  %437 = getelementptr double, ptr %436, i64 %279
  %438 = getelementptr double, ptr %437, i64 %432
  store double %435, ptr %438, align 8, !tbaa !19
  %439 = or disjoint i64 %.3425469, 3
  %440 = load ptr, ptr %242, align 8, !tbaa !18
  %441 = getelementptr inbounds double, ptr %440, i64 %439
  %442 = load double, ptr %441, align 8, !tbaa !19
  %443 = load ptr, ptr %243, align 8, !tbaa !18
  %444 = getelementptr double, ptr %443, i64 %279
  %445 = getelementptr double, ptr %444, i64 %439
  store double %442, ptr %445, align 8, !tbaa !19
  %446 = add nuw nsw i64 %.3425469, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.unr-lcssa, label %.lr.ph, !llvm.loop !35

._crit_edge.unr-lcssa:                            ; preds = %.lr.ph, %.lr.ph.preheader
  %.3425469.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %446, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.unr-lcssa, %.lr.ph.epil
  %.3425469.epil = phi i64 [ %453, %.lr.ph.epil ], [ %.3425469.unr, %._crit_edge.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.unr-lcssa ]
  %447 = load ptr, ptr %242, align 8, !tbaa !18
  %448 = getelementptr inbounds double, ptr %447, i64 %.3425469.epil
  %449 = load double, ptr %448, align 8, !tbaa !19
  %450 = load ptr, ptr %243, align 8, !tbaa !18
  %451 = getelementptr double, ptr %450, i64 %279
  %452 = getelementptr double, ptr %451, i64 %.3425469.epil
  store double %449, ptr %452, align 8, !tbaa !19
  %453 = add nuw nsw i64 %.3425469.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.lr.ph.epil, !llvm.loop !36

._crit_edge:                                      ; preds = %.lr.ph.epil, %._crit_edge.unr-lcssa
  %454 = add nsw i64 %279, %265
  store i64 %454, ptr %2, align 8, !tbaa !5
  br label %469

455:                                              ; preds = %245
  %456 = icmp eq i64 %265, -1
  br i1 %456, label %457, label %469

457:                                              ; preds = %455
  %458 = load i64, ptr %2, align 8, !tbaa !5
  %459 = icmp sgt i64 %458, 0
  %460 = trunc i8 %.2486 to i1
  br i1 %459, label %461, label %463

461:                                              ; preds = %457
  br i1 %460, label %.thread531, label %.thread534

.thread531:                                       ; preds = %461
  %462 = add nsw i64 %458, -1
  store i64 %462, ptr %2, align 8, !tbaa !5
  br label %464

463:                                              ; preds = %457
  br i1 %460, label %464, label %.thread534

464:                                              ; preds = %.thread531, %463
  br label %.thread534

.thread534:                                       ; preds = %461, %463, %464
  %465 = phi i8 [ 0, %464 ], [ %.2486, %463 ], [ %.2486, %461 ]
  %466 = load i8, ptr %3, align 1, !tbaa !9, !range !21, !noundef !22
  %467 = trunc nuw i8 %466 to i1
  br i1 %467, label %469, label %468

468:                                              ; preds = %.thread534
  store i8 1, ptr %3, align 1, !tbaa !9
  br label %469

469:                                              ; preds = %455, %468, %.thread534, %._crit_edge, %._crit_edge482, %._crit_edge477, %._crit_edge473
  %.3 = phi i8 [ %.2486, %._crit_edge482 ], [ 1, %._crit_edge477 ], [ %.2486, %._crit_edge473 ], [ %.2486, %._crit_edge ], [ %465, %.thread534 ], [ %465, %468 ], [ %.2486, %455 ]
  %470 = load i64, ptr %21, align 8, !tbaa !5
  switch i64 %470, label %640 [
    i64 1, label %471
    i64 2, label %540
    i64 -1, label %636
  ]

471:                                              ; preds = %469
  %472 = load i64, ptr %6, align 8, !tbaa !5
  %473 = icmp sgt i64 %472, 0
  br i1 %473, label %474, label %511

474:                                              ; preds = %471
  %475 = load ptr, ptr %244, align 8, !tbaa !18
  %476 = getelementptr double, ptr %475, i64 %472
  %477 = getelementptr i8, ptr %476, i64 -16
  %478 = load double, ptr %477, align 8, !tbaa !19
  %479 = load double, ptr %19, align 8, !tbaa !19
  %480 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %478, double noundef %479)
  br i1 %480, label %481, label %640

481:                                              ; preds = %474
  %482 = load double, ptr %19, align 8, !tbaa !19
  %483 = load ptr, ptr %244, align 8, !tbaa !18
  %484 = load i64, ptr %6, align 8, !tbaa !5
  %485 = getelementptr inbounds double, ptr %483, i64 %484
  store double %482, ptr %485, align 8, !tbaa !19
  %486 = load ptr, ptr %240, align 8, !tbaa !18
  %487 = getelementptr inbounds double, ptr %486, i64 %247
  %488 = load double, ptr %487, align 8, !tbaa !19
  %489 = getelementptr inbounds double, ptr %486, i64 %250
  %490 = load double, ptr %489, align 8, !tbaa !19
  %491 = load ptr, ptr %241, align 8, !tbaa !18
  %492 = getelementptr inbounds double, ptr %491, i64 %.3429485
  %493 = load double, ptr %492, align 8, !tbaa !19
  %494 = fsub double %482, %493
  %495 = call double @llvm.fmuladd.f64(double %490, double %494, double %488)
  %496 = or disjoint i64 %247, 2
  %497 = getelementptr inbounds double, ptr %486, i64 %496
  %498 = load double, ptr %497, align 8, !tbaa !19
  %499 = fmul double %498, %494
  %500 = call double @llvm.fmuladd.f64(double %499, double %494, double %495)
  %501 = or disjoint i64 %247, 3
  %502 = getelementptr inbounds double, ptr %486, i64 %501
  %503 = load double, ptr %502, align 8, !tbaa !19
  %504 = fmul double %494, %503
  %505 = fmul double %494, %504
  %506 = call double @llvm.fmuladd.f64(double %505, double %494, double %500)
  %507 = load ptr, ptr %244, align 8, !tbaa !18
  %508 = getelementptr double, ptr %507, i64 %484
  %509 = getelementptr i8, ptr %508, i64 8
  store double %506, ptr %509, align 8, !tbaa !19
  %510 = add nsw i64 %484, 2
  store i64 %510, ptr %6, align 8, !tbaa !5
  br label %640

511:                                              ; preds = %471
  %512 = load double, ptr %19, align 8, !tbaa !19
  %513 = load ptr, ptr %244, align 8, !tbaa !18
  %514 = getelementptr inbounds double, ptr %513, i64 %472
  store double %512, ptr %514, align 8, !tbaa !19
  %515 = load ptr, ptr %240, align 8, !tbaa !18
  %516 = getelementptr inbounds double, ptr %515, i64 %247
  %517 = load double, ptr %516, align 8, !tbaa !19
  %518 = getelementptr inbounds double, ptr %515, i64 %250
  %519 = load double, ptr %518, align 8, !tbaa !19
  %520 = load ptr, ptr %241, align 8, !tbaa !18
  %521 = getelementptr inbounds double, ptr %520, i64 %.3429485
  %522 = load double, ptr %521, align 8, !tbaa !19
  %523 = fsub double %512, %522
  %524 = call double @llvm.fmuladd.f64(double %519, double %523, double %517)
  %525 = or disjoint i64 %247, 2
  %526 = getelementptr inbounds double, ptr %515, i64 %525
  %527 = load double, ptr %526, align 8, !tbaa !19
  %528 = fmul double %527, %523
  %529 = call double @llvm.fmuladd.f64(double %528, double %523, double %524)
  %530 = or disjoint i64 %247, 3
  %531 = getelementptr inbounds double, ptr %515, i64 %530
  %532 = load double, ptr %531, align 8, !tbaa !19
  %533 = fmul double %523, %532
  %534 = fmul double %523, %533
  %535 = call double @llvm.fmuladd.f64(double %534, double %523, double %529)
  %536 = load ptr, ptr %244, align 8, !tbaa !18
  %537 = getelementptr double, ptr %536, i64 %472
  %538 = getelementptr i8, ptr %537, i64 8
  store double %535, ptr %538, align 8, !tbaa !19
  %539 = add nsw i64 %472, 2
  store i64 %539, ptr %6, align 8, !tbaa !5
  br label %640

540:                                              ; preds = %469
  %541 = load i64, ptr %6, align 8, !tbaa !5
  %542 = icmp sgt i64 %541, 0
  br i1 %542, label %543, label %579

543:                                              ; preds = %540
  %544 = load ptr, ptr %244, align 8, !tbaa !18
  %545 = getelementptr double, ptr %544, i64 %541
  %546 = getelementptr i8, ptr %545, i64 -16
  %547 = load double, ptr %546, align 8, !tbaa !19
  %548 = load double, ptr %19, align 8, !tbaa !19
  %549 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %547, double noundef %548)
  %.pre523 = load i64, ptr %6, align 8, !tbaa !5
  br i1 %549, label %550, label %._crit_edge525

._crit_edge525:                                   ; preds = %543
  %.pre526 = or disjoint i64 %247, 2
  %.pre527 = or disjoint i64 %247, 3
  br label %608

550:                                              ; preds = %543
  %551 = load double, ptr %19, align 8, !tbaa !19
  %552 = load ptr, ptr %244, align 8, !tbaa !18
  %553 = getelementptr inbounds double, ptr %552, i64 %.pre523
  store double %551, ptr %553, align 8, !tbaa !19
  %554 = load ptr, ptr %240, align 8, !tbaa !18
  %555 = getelementptr inbounds double, ptr %554, i64 %247
  %556 = load double, ptr %555, align 8, !tbaa !19
  %557 = getelementptr inbounds double, ptr %554, i64 %250
  %558 = load double, ptr %557, align 8, !tbaa !19
  %559 = load ptr, ptr %241, align 8, !tbaa !18
  %560 = getelementptr inbounds double, ptr %559, i64 %.3429485
  %561 = load double, ptr %560, align 8, !tbaa !19
  %562 = fsub double %551, %561
  %563 = call double @llvm.fmuladd.f64(double %558, double %562, double %556)
  %564 = or disjoint i64 %247, 2
  %565 = getelementptr inbounds double, ptr %554, i64 %564
  %566 = load double, ptr %565, align 8, !tbaa !19
  %567 = fmul double %566, %562
  %568 = call double @llvm.fmuladd.f64(double %567, double %562, double %563)
  %569 = or disjoint i64 %247, 3
  %570 = getelementptr inbounds double, ptr %554, i64 %569
  %571 = load double, ptr %570, align 8, !tbaa !19
  %572 = fmul double %562, %571
  %573 = fmul double %562, %572
  %574 = call double @llvm.fmuladd.f64(double %573, double %562, double %568)
  %575 = load ptr, ptr %244, align 8, !tbaa !18
  %576 = getelementptr double, ptr %575, i64 %.pre523
  %577 = getelementptr i8, ptr %576, i64 8
  store double %574, ptr %577, align 8, !tbaa !19
  %578 = add nsw i64 %.pre523, 2
  store i64 %578, ptr %6, align 8, !tbaa !5
  br label %608

579:                                              ; preds = %540
  %580 = load double, ptr %19, align 8, !tbaa !19
  %581 = load ptr, ptr %244, align 8, !tbaa !18
  %582 = getelementptr inbounds double, ptr %581, i64 %541
  store double %580, ptr %582, align 8, !tbaa !19
  %583 = load ptr, ptr %240, align 8, !tbaa !18
  %584 = getelementptr inbounds double, ptr %583, i64 %247
  %585 = load double, ptr %584, align 8, !tbaa !19
  %586 = getelementptr inbounds double, ptr %583, i64 %250
  %587 = load double, ptr %586, align 8, !tbaa !19
  %588 = load ptr, ptr %241, align 8, !tbaa !18
  %589 = getelementptr inbounds double, ptr %588, i64 %.3429485
  %590 = load double, ptr %589, align 8, !tbaa !19
  %591 = fsub double %580, %590
  %592 = call double @llvm.fmuladd.f64(double %587, double %591, double %585)
  %593 = or disjoint i64 %247, 2
  %594 = getelementptr inbounds double, ptr %583, i64 %593
  %595 = load double, ptr %594, align 8, !tbaa !19
  %596 = fmul double %595, %591
  %597 = call double @llvm.fmuladd.f64(double %596, double %591, double %592)
  %598 = or disjoint i64 %247, 3
  %599 = getelementptr inbounds double, ptr %583, i64 %598
  %600 = load double, ptr %599, align 8, !tbaa !19
  %601 = fmul double %591, %600
  %602 = fmul double %591, %601
  %603 = call double @llvm.fmuladd.f64(double %602, double %591, double %597)
  %604 = load ptr, ptr %244, align 8, !tbaa !18
  %605 = getelementptr double, ptr %604, i64 %541
  %606 = getelementptr i8, ptr %605, i64 8
  store double %603, ptr %606, align 8, !tbaa !19
  %607 = add nsw i64 %541, 2
  store i64 %607, ptr %6, align 8, !tbaa !5
  br label %608

608:                                              ; preds = %._crit_edge525, %550, %579
  %.pre-phi528 = phi i64 [ %.pre527, %._crit_edge525 ], [ %569, %550 ], [ %598, %579 ]
  %.pre-phi = phi i64 [ %.pre526, %._crit_edge525 ], [ %564, %550 ], [ %593, %579 ]
  %609 = phi i64 [ %.pre523, %._crit_edge525 ], [ %578, %550 ], [ %607, %579 ]
  %610 = load double, ptr %20, align 8, !tbaa !19
  %611 = load ptr, ptr %244, align 8, !tbaa !18
  %612 = getelementptr inbounds double, ptr %611, i64 %609
  store double %610, ptr %612, align 8, !tbaa !19
  %613 = load ptr, ptr %240, align 8, !tbaa !18
  %614 = getelementptr inbounds double, ptr %613, i64 %247
  %615 = load double, ptr %614, align 8, !tbaa !19
  %616 = getelementptr inbounds double, ptr %613, i64 %250
  %617 = load double, ptr %616, align 8, !tbaa !19
  %618 = load ptr, ptr %241, align 8, !tbaa !18
  %619 = getelementptr inbounds double, ptr %618, i64 %.3429485
  %620 = load double, ptr %619, align 8, !tbaa !19
  %621 = fsub double %610, %620
  %622 = call double @llvm.fmuladd.f64(double %617, double %621, double %615)
  %623 = getelementptr inbounds double, ptr %613, i64 %.pre-phi
  %624 = load double, ptr %623, align 8, !tbaa !19
  %625 = fmul double %624, %621
  %626 = call double @llvm.fmuladd.f64(double %625, double %621, double %622)
  %627 = getelementptr inbounds double, ptr %613, i64 %.pre-phi528
  %628 = load double, ptr %627, align 8, !tbaa !19
  %629 = fmul double %621, %628
  %630 = fmul double %621, %629
  %631 = call double @llvm.fmuladd.f64(double %630, double %621, double %626)
  %632 = load ptr, ptr %244, align 8, !tbaa !18
  %633 = getelementptr double, ptr %632, i64 %609
  %634 = getelementptr i8, ptr %633, i64 8
  store double %631, ptr %634, align 8, !tbaa !19
  %635 = add nsw i64 %609, 2
  store i64 %635, ptr %6, align 8, !tbaa !5
  br label %640

636:                                              ; preds = %469
  %637 = load i8, ptr %7, align 1, !tbaa !9, !range !21, !noundef !22
  %638 = trunc nuw i8 %637 to i1
  br i1 %638, label %640, label %639

639:                                              ; preds = %636
  store i8 1, ptr %7, align 1, !tbaa !9
  br label %640

640:                                              ; preds = %469, %474, %481, %511, %639, %636, %608
  %641 = load i64, ptr %31, align 8, !tbaa !17
  %642 = add nsw i64 %641, -2
  %.not.not = icmp slt i64 %.3429485, %642
  br i1 %.not.not, label %245, label %._crit_edge489, !llvm.loop !37

._crit_edge489:                                   ; preds = %640, %230
  %643 = load i64, ptr %6, align 8, !tbaa !5
  %644 = sdiv i64 %643, 2
  store i64 %644, ptr %21, align 8, !tbaa !5
  store i64 0, ptr %6, align 8, !tbaa !5
  %645 = getelementptr inbounds i8, ptr %0, i64 152
  %646 = load ptr, ptr %645, align 8, !tbaa !18
  %647 = load double, ptr %646, align 8, !tbaa !19
  %648 = load i64, ptr %31, align 8, !tbaa !17
  %.idx = shl i64 %648, 5
  %649 = getelementptr i8, ptr %646, i64 %.idx
  %650 = getelementptr i8, ptr %649, i64 -32
  %651 = load double, ptr %650, align 8, !tbaa !19
  %.not442.not490 = icmp sgt i64 %643, 1
  br i1 %.not442.not490, label %.lr.ph493, label %._crit_edge494

.lr.ph493:                                        ; preds = %._crit_edge489
  %652 = getelementptr inbounds i8, ptr %15, i64 56
  %653 = getelementptr inbounds i8, ptr %0, i64 88
  %654 = getelementptr inbounds i8, ptr %13, i64 56
  %655 = getelementptr inbounds i8, ptr %14, i64 56
  %656 = load ptr, ptr %652, align 8, !tbaa !18
  %657 = load double, ptr %656, align 8, !tbaa !19
  %658 = load ptr, ptr %653, align 8, !tbaa !18
  %659 = load double, ptr %658, align 8, !tbaa !19
  %660 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %657, double noundef %659)
  br i1 %660, label %661, label %697

661:                                              ; preds = %.lr.ph493
  %662 = load ptr, ptr %652, align 8, !tbaa !18
  %663 = getelementptr inbounds i8, ptr %662, i64 8
  %664 = load double, ptr %663, align 8, !tbaa !19
  %665 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %664, double noundef %647)
  br i1 %665, label %666, label %673

666:                                              ; preds = %661
  %667 = load ptr, ptr %652, align 8, !tbaa !18
  %668 = getelementptr inbounds i8, ptr %667, i64 8
  %669 = load double, ptr %668, align 8, !tbaa !19
  %670 = getelementptr inbounds i8, ptr %667, i64 24
  %671 = load double, ptr %670, align 8, !tbaa !19
  %672 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %669, double noundef %671)
  br i1 %672, label %687, label %673

673:                                              ; preds = %666, %661
  %674 = load ptr, ptr %652, align 8, !tbaa !18
  %675 = getelementptr inbounds i8, ptr %674, i64 8
  %676 = load double, ptr %675, align 8, !tbaa !19
  %677 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %676, double noundef %647)
  br i1 %677, label %678, label %697

678:                                              ; preds = %673
  %679 = load ptr, ptr %652, align 8, !tbaa !18
  %680 = getelementptr inbounds i8, ptr %679, i64 8
  %681 = load double, ptr %680, align 8, !tbaa !19
  %682 = getelementptr inbounds i8, ptr %679, i64 24
  %683 = load double, ptr %682, align 8, !tbaa !19
  %684 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %681, double noundef %683)
  br i1 %684, label %685, label %697

685:                                              ; preds = %678
  %686 = load ptr, ptr %652, align 8, !tbaa !18
  br label %.sink.split.peel

687:                                              ; preds = %666
  %688 = load ptr, ptr %652, align 8, !tbaa !18
  br label %.sink.split.peel

.sink.split.peel:                                 ; preds = %687, %685
  %.sink546.peel = phi ptr [ %686, %685 ], [ %688, %687 ]
  %.sink.peel = phi i64 [ 1, %685 ], [ -1, %687 ]
  %689 = load double, ptr %.sink546.peel, align 8, !tbaa !19
  %690 = load ptr, ptr %654, align 8, !tbaa !18
  %691 = load i64, ptr %6, align 8, !tbaa !5
  %692 = getelementptr inbounds double, ptr %690, i64 %691
  store double %689, ptr %692, align 8, !tbaa !19
  %693 = load ptr, ptr %655, align 8, !tbaa !18
  %694 = getelementptr inbounds i64, ptr %693, i64 %691
  store i64 %.sink.peel, ptr %694, align 8, !tbaa !5
  %695 = load i64, ptr %6, align 8, !tbaa !5
  %696 = add nsw i64 %695, 1
  store i64 %696, ptr %6, align 8, !tbaa !5
  br label %697

697:                                              ; preds = %.sink.split.peel, %678, %673, %.lr.ph493
  %698 = load i64, ptr %21, align 8, !tbaa !5
  %.not442.not.peel = icmp sgt i64 %698, 1
  br i1 %.not442.not.peel, label %.lr.ph493.peel.newph, label %._crit_edge494

.lr.ph493.peel.newph:                             ; preds = %697, %793
  %.in = phi i64 [ %795, %793 ], [ %698, %697 ]
  %.4491 = phi i64 [ %794, %793 ], [ 1, %697 ]
  %699 = add nsw i64 %.in, -1
  %700 = icmp slt i64 %.4491, %699
  br i1 %700, label %701, label %740

701:                                              ; preds = %.lr.ph493.peel.newph
  %702 = load ptr, ptr %652, align 8, !tbaa !18
  %703 = shl nuw nsw i64 %.4491, 1
  %704 = or disjoint i64 %703, 1
  %705 = getelementptr inbounds double, ptr %702, i64 %704
  %706 = load double, ptr %705, align 8, !tbaa !19
  %707 = add nsw i64 %703, -1
  %708 = getelementptr inbounds double, ptr %702, i64 %707
  %709 = load double, ptr %708, align 8, !tbaa !19
  %710 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %706, double noundef %709)
  br i1 %710, label %711, label %722

711:                                              ; preds = %701
  %712 = load ptr, ptr %652, align 8, !tbaa !18
  %713 = getelementptr inbounds double, ptr %712, i64 %704
  %714 = load double, ptr %713, align 8, !tbaa !19
  %.idx446 = shl i64 %.4491, 4
  %715 = getelementptr i8, ptr %712, i64 %.idx446
  %716 = getelementptr i8, ptr %715, i64 24
  %717 = load double, ptr %716, align 8, !tbaa !19
  %718 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %714, double noundef %717)
  br i1 %718, label %719, label %722

719:                                              ; preds = %711
  %720 = load ptr, ptr %652, align 8, !tbaa !18
  %721 = getelementptr inbounds double, ptr %720, i64 %703
  br label %.sink.split

722:                                              ; preds = %711, %701
  %723 = load ptr, ptr %652, align 8, !tbaa !18
  %724 = getelementptr inbounds double, ptr %723, i64 %704
  %725 = load double, ptr %724, align 8, !tbaa !19
  %726 = getelementptr inbounds double, ptr %723, i64 %707
  %727 = load double, ptr %726, align 8, !tbaa !19
  %728 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %725, double noundef %727)
  br i1 %728, label %729, label %793

729:                                              ; preds = %722
  %730 = load ptr, ptr %652, align 8, !tbaa !18
  %731 = getelementptr inbounds double, ptr %730, i64 %704
  %732 = load double, ptr %731, align 8, !tbaa !19
  %.idx447 = shl i64 %.4491, 4
  %733 = getelementptr i8, ptr %730, i64 %.idx447
  %734 = getelementptr i8, ptr %733, i64 24
  %735 = load double, ptr %734, align 8, !tbaa !19
  %736 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %732, double noundef %735)
  br i1 %736, label %737, label %793

737:                                              ; preds = %729
  %738 = load ptr, ptr %652, align 8, !tbaa !18
  %739 = getelementptr inbounds double, ptr %738, i64 %703
  br label %.sink.split

740:                                              ; preds = %.lr.ph493.peel.newph
  %741 = icmp eq i64 %.4491, %699
  br i1 %741, label %742, label %793

742:                                              ; preds = %740
  %743 = load ptr, ptr %652, align 8, !tbaa !18
  %744 = shl nuw nsw i64 %.4491, 1
  %745 = getelementptr inbounds double, ptr %743, i64 %744
  %746 = load double, ptr %745, align 8, !tbaa !19
  %747 = load ptr, ptr %653, align 8, !tbaa !18
  %748 = load i64, ptr %31, align 8, !tbaa !17
  %749 = getelementptr double, ptr %747, i64 %748
  %750 = getelementptr i8, ptr %749, i64 -8
  %751 = load double, ptr %750, align 8, !tbaa !19
  %752 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %746, double noundef %751)
  br i1 %752, label %753, label %793

753:                                              ; preds = %742
  %754 = load ptr, ptr %652, align 8, !tbaa !18
  %755 = or disjoint i64 %744, 1
  %756 = getelementptr inbounds double, ptr %754, i64 %755
  %757 = load double, ptr %756, align 8, !tbaa !19
  %758 = add nsw i64 %744, -1
  %759 = getelementptr inbounds double, ptr %754, i64 %758
  %760 = load double, ptr %759, align 8, !tbaa !19
  %761 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %757, double noundef %760)
  br i1 %761, label %762, label %770

762:                                              ; preds = %753
  %763 = load ptr, ptr %652, align 8, !tbaa !18
  %764 = getelementptr inbounds double, ptr %763, i64 %755
  %765 = load double, ptr %764, align 8, !tbaa !19
  %766 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %765, double noundef %651)
  br i1 %766, label %767, label %770

767:                                              ; preds = %762
  %768 = load ptr, ptr %652, align 8, !tbaa !18
  %769 = getelementptr inbounds double, ptr %768, i64 %744
  br label %.sink.split

770:                                              ; preds = %762, %753
  %771 = load ptr, ptr %652, align 8, !tbaa !18
  %772 = getelementptr inbounds double, ptr %771, i64 %755
  %773 = load double, ptr %772, align 8, !tbaa !19
  %774 = getelementptr inbounds double, ptr %771, i64 %758
  %775 = load double, ptr %774, align 8, !tbaa !19
  %776 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %773, double noundef %775)
  br i1 %776, label %777, label %793

777:                                              ; preds = %770
  %778 = load ptr, ptr %652, align 8, !tbaa !18
  %779 = getelementptr inbounds double, ptr %778, i64 %755
  %780 = load double, ptr %779, align 8, !tbaa !19
  %781 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %780, double noundef %651)
  br i1 %781, label %782, label %793

782:                                              ; preds = %777
  %783 = load ptr, ptr %652, align 8, !tbaa !18
  %784 = getelementptr inbounds double, ptr %783, i64 %744
  br label %.sink.split

.sink.split:                                      ; preds = %782, %767, %719, %737
  %.sink546 = phi ptr [ %739, %737 ], [ %721, %719 ], [ %769, %767 ], [ %784, %782 ]
  %.sink = phi i64 [ 1, %737 ], [ -1, %719 ], [ -1, %767 ], [ 1, %782 ]
  %785 = load double, ptr %.sink546, align 8, !tbaa !19
  %786 = load ptr, ptr %654, align 8, !tbaa !18
  %787 = load i64, ptr %6, align 8, !tbaa !5
  %788 = getelementptr inbounds double, ptr %786, i64 %787
  store double %785, ptr %788, align 8, !tbaa !19
  %789 = load ptr, ptr %655, align 8, !tbaa !18
  %790 = getelementptr inbounds i64, ptr %789, i64 %787
  store i64 %.sink, ptr %790, align 8, !tbaa !5
  %791 = load i64, ptr %6, align 8, !tbaa !5
  %792 = add nsw i64 %791, 1
  store i64 %792, ptr %6, align 8, !tbaa !5
  br label %793

793:                                              ; preds = %.sink.split, %722, %729, %740, %777, %770, %742
  %794 = add nuw nsw i64 %.4491, 1
  %795 = load i64, ptr %21, align 8, !tbaa !5
  %.not442.not = icmp slt i64 %794, %795
  br i1 %.not442.not, label %.lr.ph493.peel.newph, label %._crit_edge494, !llvm.loop !38

._crit_edge494:                                   ; preds = %697, %793, %._crit_edge489
  %796 = load i64, ptr %2, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1, i64 noundef %796, ptr noundef %8)
  %797 = load i64, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %4, i64 noundef %797, ptr noundef %8)
  %798 = load i64, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %5, i64 noundef %798, ptr noundef %8)
  %799 = load i64, ptr %6, align 8, !tbaa !5
  %.not443.not495 = icmp sgt i64 %799, 0
  br i1 %.not443.not495, label %.lr.ph498, label %.preheader460

.lr.ph498:                                        ; preds = %._crit_edge494
  %800 = getelementptr inbounds i8, ptr %13, i64 56
  %801 = getelementptr inbounds i8, ptr %4, i64 56
  %802 = getelementptr inbounds i8, ptr %14, i64 56
  %803 = getelementptr inbounds i8, ptr %5, i64 56
  br label %808

.preheader460:                                    ; preds = %808, %._crit_edge494
  %804 = load i64, ptr %2, align 8, !tbaa !5
  %.not444.not499 = icmp sgt i64 %804, 0
  br i1 %.not444.not499, label %.lr.ph501, label %.loopexit

.lr.ph501:                                        ; preds = %.preheader460
  %805 = getelementptr inbounds i8, ptr %12, i64 56
  %806 = getelementptr inbounds i8, ptr %1, i64 56
  %xtraiter565 = and i64 %804, 3
  %807 = icmp ult i64 %804, 4
  br i1 %807, label %.loopexit.loopexit548.unr-lcssa, label %.lr.ph501.new

.lr.ph501.new:                                    ; preds = %.lr.ph501
  %unroll_iter568 = and i64 %804, 9223372036854775804
  br label %821

808:                                              ; preds = %.lr.ph498, %808
  %.5496 = phi i64 [ 0, %.lr.ph498 ], [ %819, %808 ]
  %809 = load ptr, ptr %800, align 8, !tbaa !18
  %810 = getelementptr inbounds double, ptr %809, i64 %.5496
  %811 = load double, ptr %810, align 8, !tbaa !19
  %812 = load ptr, ptr %801, align 8, !tbaa !18
  %813 = getelementptr inbounds double, ptr %812, i64 %.5496
  store double %811, ptr %813, align 8, !tbaa !19
  %814 = load ptr, ptr %802, align 8, !tbaa !18
  %815 = getelementptr inbounds i64, ptr %814, i64 %.5496
  %816 = load i64, ptr %815, align 8, !tbaa !5
  %817 = load ptr, ptr %803, align 8, !tbaa !18
  %818 = getelementptr inbounds i64, ptr %817, i64 %.5496
  store i64 %816, ptr %818, align 8, !tbaa !5
  %819 = add nuw nsw i64 %.5496, 1
  %820 = load i64, ptr %6, align 8, !tbaa !5
  %.not443.not = icmp slt i64 %819, %820
  br i1 %.not443.not, label %808, label %.preheader460, !llvm.loop !40

821:                                              ; preds = %821, %.lr.ph501.new
  %.6500 = phi i64 [ 0, %.lr.ph501.new ], [ %845, %821 ]
  %niter569 = phi i64 [ 0, %.lr.ph501.new ], [ %niter569.next.3, %821 ]
  %822 = load ptr, ptr %805, align 8, !tbaa !18
  %823 = getelementptr inbounds double, ptr %822, i64 %.6500
  %824 = load double, ptr %823, align 8, !tbaa !19
  %825 = load ptr, ptr %806, align 8, !tbaa !18
  %826 = getelementptr inbounds double, ptr %825, i64 %.6500
  store double %824, ptr %826, align 8, !tbaa !19
  %827 = or disjoint i64 %.6500, 1
  %828 = load ptr, ptr %805, align 8, !tbaa !18
  %829 = getelementptr inbounds double, ptr %828, i64 %827
  %830 = load double, ptr %829, align 8, !tbaa !19
  %831 = load ptr, ptr %806, align 8, !tbaa !18
  %832 = getelementptr inbounds double, ptr %831, i64 %827
  store double %830, ptr %832, align 8, !tbaa !19
  %833 = or disjoint i64 %.6500, 2
  %834 = load ptr, ptr %805, align 8, !tbaa !18
  %835 = getelementptr inbounds double, ptr %834, i64 %833
  %836 = load double, ptr %835, align 8, !tbaa !19
  %837 = load ptr, ptr %806, align 8, !tbaa !18
  %838 = getelementptr inbounds double, ptr %837, i64 %833
  store double %836, ptr %838, align 8, !tbaa !19
  %839 = or disjoint i64 %.6500, 3
  %840 = load ptr, ptr %805, align 8, !tbaa !18
  %841 = getelementptr inbounds double, ptr %840, i64 %839
  %842 = load double, ptr %841, align 8, !tbaa !19
  %843 = load ptr, ptr %806, align 8, !tbaa !18
  %844 = getelementptr inbounds double, ptr %843, i64 %839
  store double %842, ptr %844, align 8, !tbaa !19
  %845 = add nuw nsw i64 %.6500, 4
  %niter569.next.3 = add i64 %niter569, 4
  %niter569.ncmp.3 = icmp eq i64 %niter569.next.3, %unroll_iter568
  br i1 %niter569.ncmp.3, label %.loopexit.loopexit548.unr-lcssa, label %821, !llvm.loop !41

.loopexit.loopexit548.unr-lcssa:                  ; preds = %821, %.lr.ph501
  %.6500.unr = phi i64 [ 0, %.lr.ph501 ], [ %845, %821 ]
  %lcmp.mod567.not = icmp eq i64 %xtraiter565, 0
  br i1 %lcmp.mod567.not, label %.loopexit, label %.epil.preheader

.epil.preheader:                                  ; preds = %.loopexit.loopexit548.unr-lcssa, %.epil.preheader
  %.6500.epil = phi i64 [ %851, %.epil.preheader ], [ %.6500.unr, %.loopexit.loopexit548.unr-lcssa ]
  %epil.iter566 = phi i64 [ %epil.iter566.next, %.epil.preheader ], [ 0, %.loopexit.loopexit548.unr-lcssa ]
  %846 = load ptr, ptr %805, align 8, !tbaa !18
  %847 = getelementptr inbounds double, ptr %846, i64 %.6500.epil
  %848 = load double, ptr %847, align 8, !tbaa !19
  %849 = load ptr, ptr %806, align 8, !tbaa !18
  %850 = getelementptr inbounds double, ptr %849, i64 %.6500.epil
  store double %848, ptr %850, align 8, !tbaa !19
  %851 = add nuw nsw i64 %.6500.epil, 1
  %epil.iter566.next = add i64 %epil.iter566, 1
  %epil.iter566.cmp.not = icmp eq i64 %epil.iter566.next, %xtraiter565
  br i1 %epil.iter566.cmp.not, label %.loopexit, label %.epil.preheader, !llvm.loop !42

.loopexit:                                        ; preds = %.loopexit.loopexit548.unr-lcssa, %.epil.preheader, %217, %.preheader460, %.preheader
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %8)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 32, ptr nonnull %10) #5
  ret void
}

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl17solvecubicpolinomEddddddPdS0_S0_S0_S0_PlS1_PNS_9ae_vectorEPNS_8ae_stateE(double noundef, double noundef, double noundef, double noundef, double noundef, double noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !6, i64 16}
!12 = !{!"_ZTSN11alglib_impl19spline1dinterpolantE", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !13, i64 32, !13, i64 96}
!13 = !{!"_ZTSN11alglib_impl9ae_vectorE", !6, i64 0, !6, i64 8, !10, i64 16, !14, i64 24, !7, i64 56}
!14 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!12, !6, i64 24}
!17 = !{!12, !6, i64 8}
!18 = !{!7, !7, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"double", !7, i64 0}
!21 = !{i8 0, i8 2}
!22 = !{}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !26}
!26 = !{!"llvm.loop.unroll.disable"}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !26}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !26}
!33 = distinct !{!33, !24}
!34 = distinct !{!34, !26}
!35 = distinct !{!35, !24}
!36 = distinct !{!36, !26}
!37 = distinct !{!37, !24}
!38 = distinct !{!38, !24, !39}
!39 = !{!"llvm.loop.peeled.count", i32 1}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !24}
!42 = distinct !{!42, !26}


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