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

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

@.str.263 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.270 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.271 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.273 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.274 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.275 = external hidden unnamed_addr constant [37 x i8], align 1
@_ZN11alglib_implL19optserv_xbfgssigma2E = external hidden global double, align 8
@.str.276 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.277 = external hidden unnamed_addr constant [94 x i8], align 1
@_ZN11alglib_implL19optserv_xbfgssigma3E = external hidden global double, align 8
@.str.278 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.279 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.280 = external hidden unnamed_addr constant [98 x i8], align 1
@.str.281 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.282 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.283 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.284 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.285 = external hidden unnamed_addr constant [53 x i8], align 1

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

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

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

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

declare noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef, ptr noundef) #1

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

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

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

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

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

declare noundef double @_ZN11alglib_impl8rmaxabsvElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, ptr noundef, ptr noundef) #1

declare void @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef, ...) #1

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

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

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

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

declare void @_ZN11alglib_impl5rsetmElldPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef, i64 noundef, double noundef, ptr noundef, ptr noundef) #1

declare noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, ptr noundef, ptr noundef) #1

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

declare void @_ZN11alglib_impl5raddvEldPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, ptr noundef, ptr noundef) #1

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

declare void @_ZN11alglib_impl5rgemvElldPKNS_9ae_matrixElPKNS_9ae_vectorEdPS3_PNS_8ae_stateE(i64 noundef, i64 noundef, double noundef, ptr noundef, i64 noundef, ptr noundef, double noundef, ptr noundef, ptr noundef) #1

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

declare noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef, ptr noundef, ptr noundef, ptr noundef) #1

declare noundef double @_ZN11alglib_impl8boundvalEdddPNS_8ae_stateE(double noundef, double noundef, double noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl15hessianupdatev2EPNS_12xbfgshessianEPKNS_9ae_vectorES4_S4_S4_lbblPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i64 noundef %5, i1 noundef zeroext %6, i1 noundef zeroext %7, i64 noundef %8, ptr noundef %9) #3 {
  %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 i64, align 8
  %17 = alloca i8, align 1
  %18 = alloca i8, align 1
  %19 = alloca i64, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store ptr %4, ptr %15, align 8, !tbaa !5
  store i64 %5, ptr %16, align 8, !tbaa !9
  %38 = zext i1 %6 to i8
  store i8 %38, ptr %17, align 1, !tbaa !11
  %39 = zext i1 %7 to i8
  store i8 %39, ptr %18, align 1, !tbaa !11
  store i64 %8, ptr %19, align 8, !tbaa !9
  store ptr %9, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  %40 = load ptr, ptr %11, align 8, !tbaa !5
  %41 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %40, i32 0, i32 0
  %42 = load i64, ptr %41, align 8, !tbaa !13
  %43 = icmp eq i64 %42, 4
  br i1 %43, label %44, label %54

44:                                               ; preds = %10
  %45 = load ptr, ptr %11, align 8, !tbaa !5
  %46 = load ptr, ptr %12, align 8, !tbaa !5
  %47 = load ptr, ptr %13, align 8, !tbaa !5
  %48 = load ptr, ptr %14, align 8, !tbaa !5
  %49 = load ptr, ptr %15, align 8, !tbaa !5
  %50 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %51 = trunc i8 %50 to i1
  %52 = load i64, ptr %19, align 8, !tbaa !9
  %53 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl16hessianupdatesr1EPNS_12xbfgshessianEPKNS_9ae_vectorES4_S4_S4_blPNS_8ae_stateE(ptr noundef %45, ptr noundef %46, ptr noundef %47, ptr noundef %48, ptr noundef %49, i1 noundef zeroext %51, i64 noundef %52, ptr noundef %53)
  store i32 1, ptr %37, align 4
  br label %794

54:                                               ; preds = %10
  %55 = load ptr, ptr %11, align 8, !tbaa !5
  %56 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %55, i32 0, i32 3
  %57 = load i64, ptr %56, align 8, !tbaa !21
  store i64 %57, ptr %22, align 8, !tbaa !9
  %58 = load ptr, ptr %20, align 8, !tbaa !5
  %59 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef 5.000000e-16, ptr noundef %58)
  %60 = fmul double 1.000000e+01, %59
  store double %60, ptr %34, align 8, !tbaa !22
  %61 = load i64, ptr %22, align 8, !tbaa !9
  %62 = sitofp i64 %61 to double
  %63 = load ptr, ptr %20, align 8, !tbaa !5
  %64 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %62, ptr noundef %63)
  %65 = fadd double 1.000000e+00, %64
  %66 = fmul double 0x3CF6849B86A12B9C, %65
  store double %66, ptr %35, align 8, !tbaa !22
  %67 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %68 = trunc i8 %67 to i1
  br i1 %68, label %69, label %72

69:                                               ; preds = %54
  %70 = load i64, ptr %19, align 8, !tbaa !9
  %71 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %70, ptr noundef %71)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.273)
  br label %72

72:                                               ; preds = %69, %54
  store double 0.000000e+00, ptr %24, align 8, !tbaa !22
  store double 0.000000e+00, ptr %25, align 8, !tbaa !22
  store double 0.000000e+00, ptr %26, align 8, !tbaa !22
  store double 0.000000e+00, ptr %29, align 8, !tbaa !22
  store double 0.000000e+00, ptr %30, align 8, !tbaa !22
  store i64 0, ptr %21, align 8, !tbaa !9
  br label %73

73:                                               ; preds = %149, %72
  %74 = load i64, ptr %21, align 8, !tbaa !9
  %75 = load i64, ptr %22, align 8, !tbaa !9
  %76 = sub nsw i64 %75, 1
  %77 = icmp sle i64 %74, %76
  br i1 %77, label %78, label %152

78:                                               ; preds = %73
  %79 = load ptr, ptr %14, align 8, !tbaa !5
  %80 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %79, i32 0, i32 4
  %81 = load ptr, ptr %80, align 8, !tbaa !23
  %82 = load i64, ptr %21, align 8, !tbaa !9
  %83 = getelementptr inbounds double, ptr %81, i64 %82
  %84 = load double, ptr %83, align 8, !tbaa !22
  %85 = load ptr, ptr %12, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %85, i32 0, i32 4
  %87 = load ptr, ptr %86, align 8, !tbaa !23
  %88 = load i64, ptr %21, align 8, !tbaa !9
  %89 = getelementptr inbounds double, ptr %87, i64 %88
  %90 = load double, ptr %89, align 8, !tbaa !22
  %91 = fsub double %84, %90
  store double %91, ptr %27, align 8, !tbaa !22
  %92 = load ptr, ptr %15, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %92, i32 0, i32 4
  %94 = load ptr, ptr %93, align 8, !tbaa !23
  %95 = load i64, ptr %21, align 8, !tbaa !9
  %96 = getelementptr inbounds double, ptr %94, i64 %95
  %97 = load double, ptr %96, align 8, !tbaa !22
  %98 = load ptr, ptr %13, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %98, i32 0, i32 4
  %100 = load ptr, ptr %99, align 8, !tbaa !23
  %101 = load i64, ptr %21, align 8, !tbaa !9
  %102 = getelementptr inbounds double, ptr %100, i64 %101
  %103 = load double, ptr %102, align 8, !tbaa !22
  %104 = fsub double %97, %103
  store double %104, ptr %28, align 8, !tbaa !22
  %105 = load double, ptr %27, align 8, !tbaa !22
  %106 = load ptr, ptr %11, align 8, !tbaa !5
  %107 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %106, i32 0, i32 46
  %108 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %107, i32 0, i32 4
  %109 = load ptr, ptr %108, align 8, !tbaa !23
  %110 = load i64, ptr %21, align 8, !tbaa !9
  %111 = getelementptr inbounds double, ptr %109, i64 %110
  store double %105, ptr %111, align 8, !tbaa !22
  %112 = load double, ptr %28, align 8, !tbaa !22
  %113 = load ptr, ptr %11, align 8, !tbaa !5
  %114 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %113, i32 0, i32 47
  %115 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %114, i32 0, i32 4
  %116 = load ptr, ptr %115, align 8, !tbaa !23
  %117 = load i64, ptr %21, align 8, !tbaa !9
  %118 = getelementptr inbounds double, ptr %116, i64 %117
  store double %112, ptr %118, align 8, !tbaa !22
  %119 = load double, ptr %24, align 8, !tbaa !22
  %120 = load double, ptr %27, align 8, !tbaa !22
  %121 = load double, ptr %28, align 8, !tbaa !22
  %122 = call double @llvm.fmuladd.f64(double %120, double %121, double %119)
  store double %122, ptr %24, align 8, !tbaa !22
  %123 = load double, ptr %25, align 8, !tbaa !22
  %124 = load double, ptr %27, align 8, !tbaa !22
  %125 = load double, ptr %27, align 8, !tbaa !22
  %126 = call double @llvm.fmuladd.f64(double %124, double %125, double %123)
  store double %126, ptr %25, align 8, !tbaa !22
  %127 = load double, ptr %26, align 8, !tbaa !22
  %128 = load double, ptr %28, align 8, !tbaa !22
  %129 = load double, ptr %28, align 8, !tbaa !22
  %130 = call double @llvm.fmuladd.f64(double %128, double %129, double %127)
  store double %130, ptr %26, align 8, !tbaa !22
  %131 = load double, ptr %29, align 8, !tbaa !22
  %132 = load double, ptr %27, align 8, !tbaa !22
  %133 = load ptr, ptr %13, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %133, i32 0, i32 4
  %135 = load ptr, ptr %134, align 8, !tbaa !23
  %136 = load i64, ptr %21, align 8, !tbaa !9
  %137 = getelementptr inbounds double, ptr %135, i64 %136
  %138 = load double, ptr %137, align 8, !tbaa !22
  %139 = call double @llvm.fmuladd.f64(double %132, double %138, double %131)
  store double %139, ptr %29, align 8, !tbaa !22
  %140 = load double, ptr %30, align 8, !tbaa !22
  %141 = load double, ptr %27, align 8, !tbaa !22
  %142 = load ptr, ptr %15, align 8, !tbaa !5
  %143 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %142, i32 0, i32 4
  %144 = load ptr, ptr %143, align 8, !tbaa !23
  %145 = load i64, ptr %21, align 8, !tbaa !9
  %146 = getelementptr inbounds double, ptr %144, i64 %145
  %147 = load double, ptr %146, align 8, !tbaa !22
  %148 = call double @llvm.fmuladd.f64(double %141, double %147, double %140)
  store double %148, ptr %30, align 8, !tbaa !22
  br label %149

149:                                              ; preds = %78
  %150 = load i64, ptr %21, align 8, !tbaa !9
  %151 = add nsw i64 %150, 1
  store i64 %151, ptr %21, align 8, !tbaa !9
  br label %73, !llvm.loop !24

152:                                              ; preds = %73
  %153 = load ptr, ptr %11, align 8, !tbaa !5
  %154 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %153, i32 0, i32 44
  store i64 0, ptr %154, align 8, !tbaa !26
  %155 = load i64, ptr %22, align 8, !tbaa !9
  %156 = load ptr, ptr %11, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %156, i32 0, i32 46
  %158 = load ptr, ptr %20, align 8, !tbaa !5
  %159 = call noundef double @_ZN11alglib_impl8rmaxabsvElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %155, ptr noundef %157, ptr noundef %158)
  %160 = load ptr, ptr %11, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %160, i32 0, i32 5
  %162 = load double, ptr %161, align 8, !tbaa !27
  %163 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %159, double noundef %162)
  br i1 %163, label %164, label %172

164:                                              ; preds = %152
  %165 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %166 = trunc i8 %165 to i1
  br i1 %166, label %167, label %171

167:                                              ; preds = %164
  %168 = load i64, ptr %19, align 8, !tbaa !9
  %169 = add nsw i64 %168, 1
  %170 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %169, ptr noundef %170)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.274)
  br label %171

171:                                              ; preds = %167, %164
  store i32 1, ptr %37, align 4
  br label %794

172:                                              ; preds = %152
  %173 = load ptr, ptr %11, align 8, !tbaa !5
  %174 = load ptr, ptr %11, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %174, i32 0, i32 46
  %176 = load ptr, ptr %11, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %176, i32 0, i32 49
  %178 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl9hessianmvEPNS_12xbfgshessianEPKNS_9ae_vectorEPS2_PNS_8ae_stateE(ptr noundef %173, ptr noundef %175, ptr noundef %177, ptr noundef %178)
  %179 = load i64, ptr %22, align 8, !tbaa !9
  %180 = load ptr, ptr %11, align 8, !tbaa !5
  %181 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %180, i32 0, i32 46
  %182 = load ptr, ptr %11, align 8, !tbaa !5
  %183 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %182, i32 0, i32 49
  %184 = load ptr, ptr %20, align 8, !tbaa !5
  %185 = call noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef %179, ptr noundef %181, ptr noundef %183, ptr noundef %184)
  store double %185, ptr %31, align 8, !tbaa !22
  %186 = load double, ptr %31, align 8, !tbaa !22
  %187 = load double, ptr %35, align 8, !tbaa !22
  %188 = load double, ptr %25, align 8, !tbaa !22
  %189 = fmul double %187, %188
  %190 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %186, double noundef %189)
  br i1 %190, label %191, label %312

191:                                              ; preds = %172
  %192 = load i64, ptr %16, align 8, !tbaa !9
  %193 = icmp eq i64 %192, 0
  br i1 %193, label %200, label %194

194:                                              ; preds = %191
  %195 = load i64, ptr %16, align 8, !tbaa !9
  %196 = icmp eq i64 %195, 1
  br i1 %196, label %200, label %197

197:                                              ; preds = %194
  %198 = load i64, ptr %16, align 8, !tbaa !9
  %199 = icmp eq i64 %198, 2
  br label %200

200:                                              ; preds = %197, %194, %191
  %201 = phi i1 [ true, %194 ], [ true, %191 ], [ %199, %197 ]
  %202 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %201, ptr noundef @.str.275, ptr noundef %202)
  store double 1.000000e+00, ptr %33, align 8, !tbaa !22
  %203 = load double, ptr %24, align 8, !tbaa !22
  %204 = load double, ptr %31, align 8, !tbaa !22
  %205 = fdiv double %203, %204
  store double %205, ptr %32, align 8, !tbaa !22
  %206 = load i64, ptr %16, align 8, !tbaa !9
  %207 = icmp eq i64 %206, 1
  br i1 %207, label %208, label %225

208:                                              ; preds = %200
  %209 = load double, ptr %32, align 8, !tbaa !22
  %210 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !22
  %211 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %209, double noundef %210)
  br i1 %211, label %212, label %225

212:                                              ; preds = %208
  %213 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %214 = trunc i8 %213 to i1
  br i1 %214, label %215, label %219

215:                                              ; preds = %212
  %216 = load i64, ptr %19, align 8, !tbaa !9
  %217 = add nsw i64 %216, 1
  %218 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %217, ptr noundef %218)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.276)
  br label %219

219:                                              ; preds = %215, %212
  %220 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !22
  %221 = fsub double 1.000000e+00, %220
  %222 = load double, ptr %32, align 8, !tbaa !22
  %223 = fsub double 1.000000e+00, %222
  %224 = fdiv double %221, %223
  store double %224, ptr %33, align 8, !tbaa !22
  br label %225

225:                                              ; preds = %219, %208, %200
  %226 = load i64, ptr %16, align 8, !tbaa !9
  %227 = icmp eq i64 %226, 2
  br i1 %227, label %228, label %259

228:                                              ; preds = %225
  %229 = load double, ptr %32, align 8, !tbaa !22
  %230 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !22
  %231 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %229, double noundef %230)
  br i1 %231, label %232, label %259

232:                                              ; preds = %228
  %233 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %234 = trunc i8 %233 to i1
  br i1 %234, label %235, label %239

235:                                              ; preds = %232
  %236 = load i64, ptr %19, align 8, !tbaa !9
  %237 = add nsw i64 %236, 1
  %238 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %237, ptr noundef %238)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.277)
  br label %239

239:                                              ; preds = %235, %232
  %240 = load i64, ptr %22, align 8, !tbaa !9
  %241 = load ptr, ptr %11, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %241, i32 0, i32 49
  %243 = load ptr, ptr %11, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %243, i32 0, i32 47
  %245 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl6rcopyvElPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %240, ptr noundef %242, ptr noundef %244, ptr noundef %245)
  %246 = load i64, ptr %22, align 8, !tbaa !9
  %247 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !22
  %248 = load ptr, ptr %11, align 8, !tbaa !5
  %249 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %248, i32 0, i32 47
  %250 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %246, double noundef %247, ptr noundef %249, ptr noundef %250)
  %251 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !22
  %252 = load double, ptr %31, align 8, !tbaa !22
  %253 = fmul double %251, %252
  store double %253, ptr %24, align 8, !tbaa !22
  %254 = load i64, ptr %22, align 8, !tbaa !9
  %255 = load ptr, ptr %11, align 8, !tbaa !5
  %256 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %255, i32 0, i32 47
  %257 = load ptr, ptr %20, align 8, !tbaa !5
  %258 = call noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %254, ptr noundef %256, ptr noundef %257)
  store double %258, ptr %26, align 8, !tbaa !22
  br label %259

259:                                              ; preds = %239, %228, %225
  %260 = load i64, ptr %16, align 8, !tbaa !9
  %261 = icmp eq i64 %260, 1
  br i1 %261, label %265, label %262

262:                                              ; preds = %259
  %263 = load i64, ptr %16, align 8, !tbaa !9
  %264 = icmp eq i64 %263, 2
  br i1 %264, label %265, label %282

265:                                              ; preds = %262, %259
  %266 = load double, ptr %32, align 8, !tbaa !22
  %267 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma3E, align 8, !tbaa !22
  %268 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %266, double noundef %267)
  br i1 %268, label %269, label %282

269:                                              ; preds = %265
  %270 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %271 = trunc i8 %270 to i1
  br i1 %271, label %272, label %276

272:                                              ; preds = %269
  %273 = load i64, ptr %19, align 8, !tbaa !9
  %274 = add nsw i64 %273, 1
  %275 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %274, ptr noundef %275)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.278)
  br label %276

276:                                              ; preds = %272, %269
  %277 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma3E, align 8, !tbaa !22
  %278 = fsub double %277, 1.000000e+00
  %279 = load double, ptr %32, align 8, !tbaa !22
  %280 = fsub double %279, 1.000000e+00
  %281 = fdiv double %278, %280
  store double %281, ptr %33, align 8, !tbaa !22
  br label %282

282:                                              ; preds = %276, %265, %262
  %283 = load double, ptr %33, align 8, !tbaa !22
  %284 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %283, double noundef 1.000000e+00)
  br i1 %284, label %285, label %311

285:                                              ; preds = %282
  %286 = load i64, ptr %22, align 8, !tbaa !9
  %287 = load double, ptr %33, align 8, !tbaa !22
  %288 = load ptr, ptr %11, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %288, i32 0, i32 47
  %290 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %286, double noundef %287, ptr noundef %289, ptr noundef %290)
  %291 = load i64, ptr %22, align 8, !tbaa !9
  %292 = load double, ptr %33, align 8, !tbaa !22
  %293 = fsub double 1.000000e+00, %292
  %294 = load ptr, ptr %11, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %294, i32 0, i32 49
  %296 = load ptr, ptr %11, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %296, i32 0, i32 47
  %298 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl5raddvEldPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %291, double noundef %293, ptr noundef %295, ptr noundef %297, ptr noundef %298)
  %299 = load i64, ptr %22, align 8, !tbaa !9
  %300 = load ptr, ptr %11, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %300, i32 0, i32 46
  %302 = load ptr, ptr %11, align 8, !tbaa !5
  %303 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %302, i32 0, i32 47
  %304 = load ptr, ptr %20, align 8, !tbaa !5
  %305 = call noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef %299, ptr noundef %301, ptr noundef %303, ptr noundef %304)
  store double %305, ptr %24, align 8, !tbaa !22
  %306 = load i64, ptr %22, align 8, !tbaa !9
  %307 = load ptr, ptr %11, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %307, i32 0, i32 47
  %309 = load ptr, ptr %20, align 8, !tbaa !5
  %310 = call noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %306, ptr noundef %308, ptr noundef %309)
  store double %310, ptr %26, align 8, !tbaa !22
  br label %311

311:                                              ; preds = %285, %282
  br label %339

312:                                              ; preds = %172
  %313 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %314 = trunc i8 %313 to i1
  br i1 %314, label %315, label %319

315:                                              ; preds = %312
  %316 = load i64, ptr %19, align 8, !tbaa !9
  %317 = add nsw i64 %316, 1
  %318 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %317, ptr noundef %318)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.279)
  br label %319

319:                                              ; preds = %315, %312
  %320 = load i64, ptr %22, align 8, !tbaa !9
  %321 = load double, ptr %34, align 8, !tbaa !22
  %322 = load ptr, ptr %11, align 8, !tbaa !5
  %323 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %322, i32 0, i32 46
  %324 = load ptr, ptr %11, align 8, !tbaa !5
  %325 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %324, i32 0, i32 47
  %326 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl9rcopymulvEldPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %320, double noundef %321, ptr noundef %323, ptr noundef %325, ptr noundef %326)
  %327 = load i64, ptr %22, align 8, !tbaa !9
  %328 = load ptr, ptr %11, align 8, !tbaa !5
  %329 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %328, i32 0, i32 46
  %330 = load ptr, ptr %11, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %330, i32 0, i32 47
  %332 = load ptr, ptr %20, align 8, !tbaa !5
  %333 = call noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef %327, ptr noundef %329, ptr noundef %331, ptr noundef %332)
  store double %333, ptr %24, align 8, !tbaa !22
  %334 = load i64, ptr %22, align 8, !tbaa !9
  %335 = load ptr, ptr %11, align 8, !tbaa !5
  %336 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %335, i32 0, i32 47
  %337 = load ptr, ptr %20, align 8, !tbaa !5
  %338 = call noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %334, ptr noundef %336, ptr noundef %337)
  store double %338, ptr %26, align 8, !tbaa !22
  br label %339

339:                                              ; preds = %319, %311
  %340 = load double, ptr %24, align 8, !tbaa !22
  %341 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %340, double noundef 0.000000e+00)
  br i1 %341, label %348, label %342

342:                                              ; preds = %339
  %343 = load double, ptr %24, align 8, !tbaa !22
  %344 = load double, ptr %25, align 8, !tbaa !22
  %345 = fdiv double %343, %344
  %346 = load double, ptr %34, align 8, !tbaa !22
  %347 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %345, double noundef %346)
  br i1 %347, label %348, label %378

348:                                              ; preds = %342, %339
  %349 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %350 = trunc i8 %349 to i1
  br i1 %350, label %351, label %358

351:                                              ; preds = %348
  %352 = load i64, ptr %19, align 8, !tbaa !9
  %353 = add nsw i64 %352, 1
  %354 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %353, ptr noundef %354)
  %355 = load double, ptr %24, align 8, !tbaa !22
  %356 = load double, ptr %25, align 8, !tbaa !22
  %357 = fdiv double %355, %356
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.280, double noundef %357)
  br label %358

358:                                              ; preds = %351, %348
  %359 = load i64, ptr %22, align 8, !tbaa !9
  %360 = load double, ptr %34, align 8, !tbaa !22
  %361 = load ptr, ptr %11, align 8, !tbaa !5
  %362 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %361, i32 0, i32 46
  %363 = load ptr, ptr %11, align 8, !tbaa !5
  %364 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %363, i32 0, i32 47
  %365 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl9rcopymulvEldPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %359, double noundef %360, ptr noundef %362, ptr noundef %364, ptr noundef %365)
  %366 = load i64, ptr %22, align 8, !tbaa !9
  %367 = load ptr, ptr %11, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %367, i32 0, i32 46
  %369 = load ptr, ptr %11, align 8, !tbaa !5
  %370 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %369, i32 0, i32 47
  %371 = load ptr, ptr %20, align 8, !tbaa !5
  %372 = call noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef %366, ptr noundef %368, ptr noundef %370, ptr noundef %371)
  store double %372, ptr %24, align 8, !tbaa !22
  %373 = load i64, ptr %22, align 8, !tbaa !9
  %374 = load ptr, ptr %11, align 8, !tbaa !5
  %375 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %374, i32 0, i32 47
  %376 = load ptr, ptr %20, align 8, !tbaa !5
  %377 = call noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %373, ptr noundef %375, ptr noundef %376)
  store double %377, ptr %26, align 8, !tbaa !22
  br label %378

378:                                              ; preds = %358, %342
  %379 = load double, ptr %24, align 8, !tbaa !22
  %380 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %379, double noundef 0.000000e+00)
  br i1 %380, label %381, label %418

381:                                              ; preds = %378
  %382 = load double, ptr %26, align 8, !tbaa !22
  %383 = load double, ptr %24, align 8, !tbaa !22
  %384 = fdiv double %382, %383
  %385 = load double, ptr %34, align 8, !tbaa !22
  %386 = fdiv double 1.000000e+00, %385
  %387 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %384, double noundef %386)
  br i1 %387, label %388, label %418

388:                                              ; preds = %381
  %389 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %390 = trunc i8 %389 to i1
  br i1 %390, label %391, label %398

391:                                              ; preds = %388
  %392 = load i64, ptr %19, align 8, !tbaa !9
  %393 = add nsw i64 %392, 1
  %394 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %393, ptr noundef %394)
  %395 = load double, ptr %26, align 8, !tbaa !22
  %396 = load double, ptr %24, align 8, !tbaa !22
  %397 = fdiv double %395, %396
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.281, double noundef %397)
  br label %398

398:                                              ; preds = %391, %388
  %399 = load double, ptr %34, align 8, !tbaa !22
  %400 = fdiv double 1.000000e+00, %399
  %401 = load double, ptr %26, align 8, !tbaa !22
  %402 = load double, ptr %24, align 8, !tbaa !22
  %403 = fdiv double %401, %402
  %404 = fdiv double %400, %403
  store double %404, ptr %36, align 8, !tbaa !22
  %405 = load i64, ptr %22, align 8, !tbaa !9
  %406 = load double, ptr %36, align 8, !tbaa !22
  %407 = load ptr, ptr %11, align 8, !tbaa !5
  %408 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %407, i32 0, i32 47
  %409 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %405, double noundef %406, ptr noundef %408, ptr noundef %409)
  %410 = load double, ptr %36, align 8, !tbaa !22
  %411 = load double, ptr %24, align 8, !tbaa !22
  %412 = fmul double %410, %411
  store double %412, ptr %24, align 8, !tbaa !22
  %413 = load double, ptr %36, align 8, !tbaa !22
  %414 = load double, ptr %36, align 8, !tbaa !22
  %415 = fmul double %413, %414
  %416 = load double, ptr %26, align 8, !tbaa !22
  %417 = fmul double %415, %416
  store double %417, ptr %26, align 8, !tbaa !22
  br label %418

418:                                              ; preds = %398, %381, %378
  %419 = load ptr, ptr %11, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %419, i32 0, i32 0
  %421 = load i64, ptr %420, align 8, !tbaa !13
  %422 = icmp eq i64 %421, 0
  br i1 %422, label %428, label %423

423:                                              ; preds = %418
  %424 = load ptr, ptr %11, align 8, !tbaa !5
  %425 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %424, i32 0, i32 0
  %426 = load i64, ptr %425, align 8, !tbaa !13
  %427 = icmp eq i64 %426, 3
  br label %428

428:                                              ; preds = %423, %418
  %429 = phi i1 [ true, %418 ], [ %427, %423 ]
  %430 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %429, ptr noundef @.str.263, ptr noundef %430)
  %431 = load ptr, ptr %11, align 8, !tbaa !5
  %432 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %431, i32 0, i32 0
  %433 = load i64, ptr %432, align 8, !tbaa !13
  %434 = icmp eq i64 %433, 0
  br i1 %434, label %435, label %578

435:                                              ; preds = %428
  %436 = load ptr, ptr %11, align 8, !tbaa !5
  %437 = load ptr, ptr %11, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %437, i32 0, i32 15
  %439 = load ptr, ptr %11, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %439, i32 0, i32 46
  %441 = load ptr, ptr %11, align 8, !tbaa !5
  %442 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %441, i32 0, i32 47
  %443 = load ptr, ptr %11, align 8, !tbaa !5
  %444 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %443, i32 0, i32 44
  %445 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_implL30optserv_hessianupdatelowlevel2EPNS_12xbfgshessianEPNS_9ae_matrixEPKNS_9ae_vectorES6_PlPNS_8ae_stateE(ptr noundef %436, ptr noundef %438, ptr noundef %440, ptr noundef %442, ptr noundef %444, ptr noundef %445)
  %446 = load ptr, ptr %11, align 8, !tbaa !5
  %447 = load ptr, ptr %11, align 8, !tbaa !5
  %448 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %447, i32 0, i32 45
  %449 = load ptr, ptr %11, align 8, !tbaa !5
  %450 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %449, i32 0, i32 46
  %451 = load ptr, ptr %11, align 8, !tbaa !5
  %452 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %451, i32 0, i32 47
  %453 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_implL30optserv_hessianupdatelowlevel2EPNS_12xbfgshessianEPNS_9ae_matrixEPKNS_9ae_vectorES6_PlPNS_8ae_stateE(ptr noundef %446, ptr noundef %448, ptr noundef %450, ptr noundef %452, ptr noundef %21, ptr noundef %453)
  %454 = load double, ptr %24, align 8, !tbaa !22
  %455 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %454, double noundef 0.000000e+00)
  br i1 %455, label %456, label %471

456:                                              ; preds = %435
  %457 = load ptr, ptr %11, align 8, !tbaa !5
  %458 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %457, i32 0, i32 19
  %459 = load double, ptr %458, align 8, !tbaa !28
  %460 = load double, ptr %24, align 8, !tbaa !22
  %461 = fadd double %459, %460
  %462 = load ptr, ptr %11, align 8, !tbaa !5
  %463 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %462, i32 0, i32 19
  store double %461, ptr %463, align 8, !tbaa !28
  %464 = load ptr, ptr %11, align 8, !tbaa !5
  %465 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %464, i32 0, i32 17
  %466 = load double, ptr %465, align 8, !tbaa !29
  %467 = load double, ptr %26, align 8, !tbaa !22
  %468 = fadd double %466, %467
  %469 = load ptr, ptr %11, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %469, i32 0, i32 17
  store double %468, ptr %470, align 8, !tbaa !29
  br label %471

471:                                              ; preds = %456, %435
  %472 = load ptr, ptr %11, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %472, i32 0, i32 18
  %474 = load double, ptr %473, align 8, !tbaa !30
  %475 = load double, ptr %25, align 8, !tbaa !22
  %476 = fadd double %474, %475
  %477 = load ptr, ptr %11, align 8, !tbaa !5
  %478 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %477, i32 0, i32 18
  store double %476, ptr %478, align 8, !tbaa !30
  %479 = load ptr, ptr %11, align 8, !tbaa !5
  %480 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %479, i32 0, i32 16
  %481 = load i64, ptr %480, align 8, !tbaa !31
  %482 = add nsw i64 %481, 1
  %483 = load ptr, ptr %11, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %483, i32 0, i32 16
  store i64 %482, ptr %484, align 8, !tbaa !31
  %485 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %486 = trunc i8 %485 to i1
  br i1 %486, label %487, label %491

487:                                              ; preds = %471
  %488 = load i64, ptr %19, align 8, !tbaa !9
  %489 = add nsw i64 %488, 1
  %490 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %489, ptr noundef %490)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.282)
  br label %491

491:                                              ; preds = %487, %471
  %492 = load ptr, ptr %11, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %492, i32 0, i32 4
  %494 = load i64, ptr %493, align 8, !tbaa !32
  %495 = icmp sgt i64 %494, 0
  br i1 %495, label %496, label %577

496:                                              ; preds = %491
  %497 = load ptr, ptr %11, align 8, !tbaa !5
  %498 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %497, i32 0, i32 16
  %499 = load i64, ptr %498, align 8, !tbaa !31
  %500 = load ptr, ptr %11, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %500, i32 0, i32 4
  %502 = load i64, ptr %501, align 8, !tbaa !32
  %503 = icmp sge i64 %499, %502
  br i1 %503, label %504, label %577

504:                                              ; preds = %496
  %505 = load i64, ptr %22, align 8, !tbaa !9
  %506 = load i64, ptr %22, align 8, !tbaa !9
  %507 = load ptr, ptr %11, align 8, !tbaa !5
  %508 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %507, i32 0, i32 45
  %509 = load ptr, ptr %11, align 8, !tbaa !5
  %510 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %509, i32 0, i32 15
  %511 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11rmatrixcopyEllPKNS_9ae_matrixEllPS0_llPNS_8ae_stateE(i64 noundef %505, i64 noundef %506, ptr noundef %508, i64 noundef 0, i64 noundef 0, ptr noundef %510, i64 noundef 0, i64 noundef 0, ptr noundef %511)
  %512 = load ptr, ptr %11, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %512, i32 0, i32 17
  %514 = load double, ptr %513, align 8, !tbaa !29
  %515 = load ptr, ptr %11, align 8, !tbaa !5
  %516 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %515, i32 0, i32 19
  %517 = load double, ptr %516, align 8, !tbaa !28
  %518 = load ptr, ptr %11, align 8, !tbaa !5
  %519 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %518, i32 0, i32 7
  %520 = load double, ptr %519, align 8, !tbaa !33
  %521 = load ptr, ptr %11, align 8, !tbaa !5
  %522 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %521, i32 0, i32 17
  %523 = load double, ptr %522, align 8, !tbaa !29
  %524 = call double @llvm.fmuladd.f64(double %520, double %523, double %517)
  %525 = load ptr, ptr %11, align 8, !tbaa !5
  %526 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %525, i32 0, i32 8
  %527 = load double, ptr %526, align 8, !tbaa !34
  %528 = load ptr, ptr %11, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %528, i32 0, i32 18
  %530 = load double, ptr %529, align 8, !tbaa !30
  %531 = call double @llvm.fmuladd.f64(double %527, double %530, double %524)
  %532 = fdiv double %514, %531
  store double %532, ptr %23, align 8, !tbaa !22
  %533 = load i64, ptr %22, align 8, !tbaa !9
  %534 = load i64, ptr %22, align 8, !tbaa !9
  %535 = load ptr, ptr %11, align 8, !tbaa !5
  %536 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %535, i32 0, i32 45
  %537 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rsetmElldPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %533, i64 noundef %534, double noundef 0.000000e+00, ptr noundef %536, ptr noundef %537)
  store i64 0, ptr %21, align 8, !tbaa !9
  br label %538

538:                                              ; preds = %554, %504
  %539 = load i64, ptr %21, align 8, !tbaa !9
  %540 = load i64, ptr %22, align 8, !tbaa !9
  %541 = sub nsw i64 %540, 1
  %542 = icmp sle i64 %539, %541
  br i1 %542, label %543, label %557

543:                                              ; preds = %538
  %544 = load double, ptr %23, align 8, !tbaa !22
  %545 = load ptr, ptr %11, align 8, !tbaa !5
  %546 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %545, i32 0, i32 45
  %547 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %546, i32 0, i32 6
  %548 = load ptr, ptr %547, align 8, !tbaa !23
  %549 = load i64, ptr %21, align 8, !tbaa !9
  %550 = getelementptr inbounds ptr, ptr %548, i64 %549
  %551 = load ptr, ptr %550, align 8, !tbaa !5
  %552 = load i64, ptr %21, align 8, !tbaa !9
  %553 = getelementptr inbounds double, ptr %551, i64 %552
  store double %544, ptr %553, align 8, !tbaa !22
  br label %554

554:                                              ; preds = %543
  %555 = load i64, ptr %21, align 8, !tbaa !9
  %556 = add nsw i64 %555, 1
  store i64 %556, ptr %21, align 8, !tbaa !9
  br label %538, !llvm.loop !35

557:                                              ; preds = %538
  %558 = load ptr, ptr %20, align 8, !tbaa !5
  %559 = call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef 5.000000e-16, ptr noundef %558)
  %560 = load ptr, ptr %11, align 8, !tbaa !5
  %561 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %560, i32 0, i32 19
  store double %559, ptr %561, align 8, !tbaa !28
  %562 = load ptr, ptr %11, align 8, !tbaa !5
  %563 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %562, i32 0, i32 19
  %564 = load double, ptr %563, align 8, !tbaa !28
  %565 = load ptr, ptr %11, align 8, !tbaa !5
  %566 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %565, i32 0, i32 6
  %567 = load double, ptr %566, align 8, !tbaa !36
  %568 = fmul double %564, %567
  %569 = load ptr, ptr %11, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %569, i32 0, i32 17
  store double %568, ptr %570, align 8, !tbaa !29
  %571 = load ptr, ptr %11, align 8, !tbaa !5
  %572 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %571, i32 0, i32 18
  store double 0.000000e+00, ptr %572, align 8, !tbaa !30
  %573 = load ptr, ptr %11, align 8, !tbaa !5
  %574 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %573, i32 0, i32 16
  store i64 0, ptr %574, align 8, !tbaa !31
  %575 = load ptr, ptr %11, align 8, !tbaa !5
  %576 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %575, i32 0, i32 44
  store i64 3, ptr %576, align 8, !tbaa !26
  br label %577

577:                                              ; preds = %557, %496, %491
  store i32 1, ptr %37, align 4
  br label %794

578:                                              ; preds = %428
  %579 = load ptr, ptr %11, align 8, !tbaa !5
  %580 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %579, i32 0, i32 0
  %581 = load i64, ptr %580, align 8, !tbaa !13
  %582 = icmp eq i64 %581, 3
  br i1 %582, label %583, label %793

583:                                              ; preds = %578
  %584 = load ptr, ptr %11, align 8, !tbaa !5
  %585 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %584, i32 0, i32 12
  %586 = load i64, ptr %585, align 8, !tbaa !37
  %587 = icmp eq i64 %586, 0
  br i1 %587, label %588, label %596

588:                                              ; preds = %583
  %589 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %590 = trunc i8 %589 to i1
  br i1 %590, label %591, label %595

591:                                              ; preds = %588
  %592 = load i64, ptr %19, align 8, !tbaa !9
  %593 = add nsw i64 %592, 1
  %594 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %593, ptr noundef %594)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.283)
  br label %595

595:                                              ; preds = %591, %588
  store i32 1, ptr %37, align 4
  br label %794

596:                                              ; preds = %583
  %597 = load ptr, ptr %11, align 8, !tbaa !5
  %598 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %597, i32 0, i32 19
  %599 = load double, ptr %598, align 8, !tbaa !28
  %600 = load double, ptr %24, align 8, !tbaa !22
  %601 = fadd double %599, %600
  %602 = load ptr, ptr %11, align 8, !tbaa !5
  %603 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %602, i32 0, i32 19
  store double %601, ptr %603, align 8, !tbaa !28
  %604 = load ptr, ptr %11, align 8, !tbaa !5
  %605 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %604, i32 0, i32 17
  %606 = load double, ptr %605, align 8, !tbaa !29
  %607 = load double, ptr %26, align 8, !tbaa !22
  %608 = fadd double %606, %607
  %609 = load ptr, ptr %11, align 8, !tbaa !5
  %610 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %609, i32 0, i32 17
  store double %608, ptr %610, align 8, !tbaa !29
  %611 = load ptr, ptr %11, align 8, !tbaa !5
  %612 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %611, i32 0, i32 18
  %613 = load double, ptr %612, align 8, !tbaa !30
  %614 = load double, ptr %25, align 8, !tbaa !22
  %615 = fadd double %613, %614
  %616 = load ptr, ptr %11, align 8, !tbaa !5
  %617 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %616, i32 0, i32 18
  store double %615, ptr %617, align 8, !tbaa !30
  %618 = load ptr, ptr %11, align 8, !tbaa !5
  %619 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %618, i32 0, i32 20
  %620 = load i64, ptr %619, align 8, !tbaa !38
  %621 = load ptr, ptr %11, align 8, !tbaa !5
  %622 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %621, i32 0, i32 12
  %623 = load i64, ptr %622, align 8, !tbaa !37
  %624 = icmp sle i64 %620, %623
  %625 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %624, ptr noundef @.str.270, ptr noundef %625)
  %626 = load i8, ptr %17, align 1, !tbaa !11, !range !19, !noundef !20
  %627 = trunc i8 %626 to i1
  br i1 %627, label %628, label %638

628:                                              ; preds = %596
  %629 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %630 = trunc i8 %629 to i1
  br i1 %630, label %631, label %635

631:                                              ; preds = %628
  %632 = load i64, ptr %19, align 8, !tbaa !9
  %633 = add nsw i64 %632, 1
  %634 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %633, ptr noundef %634)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.284)
  br label %635

635:                                              ; preds = %631, %628
  %636 = load ptr, ptr %11, align 8, !tbaa !5
  %637 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl26hessianpoplatestifpossibleEPNS_12xbfgshessianEPNS_8ae_stateE(ptr noundef %636, ptr noundef %637)
  br label %638

638:                                              ; preds = %635, %596
  %639 = load ptr, ptr %11, align 8, !tbaa !5
  %640 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %639, i32 0, i32 20
  %641 = load i64, ptr %640, align 8, !tbaa !38
  %642 = load ptr, ptr %11, align 8, !tbaa !5
  %643 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %642, i32 0, i32 12
  %644 = load i64, ptr %643, align 8, !tbaa !37
  %645 = icmp eq i64 %641, %644
  br i1 %645, label %646, label %649

646:                                              ; preds = %638
  %647 = load ptr, ptr %11, align 8, !tbaa !5
  %648 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_implL18optserv_popfrontxyEPNS_12xbfgshessianEPNS_8ae_stateE(ptr noundef %647, ptr noundef %648)
  br label %649

649:                                              ; preds = %646, %638
  %650 = load ptr, ptr %11, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %650, i32 0, i32 20
  %652 = load i64, ptr %651, align 8, !tbaa !38
  %653 = load ptr, ptr %11, align 8, !tbaa !5
  %654 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %653, i32 0, i32 12
  %655 = load i64, ptr %654, align 8, !tbaa !37
  %656 = icmp slt i64 %652, %655
  %657 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %656, ptr noundef @.str.271, ptr noundef %657)
  %658 = load ptr, ptr %11, align 8, !tbaa !5
  %659 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %658, i32 0, i32 20
  %660 = load i64, ptr %659, align 8, !tbaa !38
  %661 = add nsw i64 %660, 1
  %662 = load ptr, ptr %11, align 8, !tbaa !5
  %663 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %662, i32 0, i32 20
  store i64 %661, ptr %663, align 8, !tbaa !38
  %664 = load i64, ptr %22, align 8, !tbaa !9
  %665 = load ptr, ptr %11, align 8, !tbaa !5
  %666 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %665, i32 0, i32 46
  %667 = load ptr, ptr %11, align 8, !tbaa !5
  %668 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %667, i32 0, i32 22
  %669 = load ptr, ptr %11, align 8, !tbaa !5
  %670 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %669, i32 0, i32 20
  %671 = load i64, ptr %670, align 8, !tbaa !38
  %672 = sub nsw i64 %671, 1
  %673 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyvrElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %664, ptr noundef %666, ptr noundef %668, i64 noundef %672, ptr noundef %673)
  %674 = load i64, ptr %22, align 8, !tbaa !9
  %675 = load ptr, ptr %11, align 8, !tbaa !5
  %676 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %675, i32 0, i32 47
  %677 = load ptr, ptr %11, align 8, !tbaa !5
  %678 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %677, i32 0, i32 23
  %679 = load ptr, ptr %11, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %679, i32 0, i32 20
  %681 = load i64, ptr %680, align 8, !tbaa !38
  %682 = sub nsw i64 %681, 1
  %683 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyvrElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %674, ptr noundef %676, ptr noundef %678, i64 noundef %682, ptr noundef %683)
  %684 = load ptr, ptr %11, align 8, !tbaa !5
  %685 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %684, i32 0, i32 20
  %686 = load i64, ptr %685, align 8, !tbaa !38
  %687 = load ptr, ptr %11, align 8, !tbaa !5
  %688 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %687, i32 0, i32 50
  %689 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %686, ptr noundef %688, ptr noundef %689)
  %690 = load ptr, ptr %11, align 8, !tbaa !5
  %691 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %690, i32 0, i32 20
  %692 = load i64, ptr %691, align 8, !tbaa !38
  %693 = load i64, ptr %22, align 8, !tbaa !9
  %694 = load ptr, ptr %11, align 8, !tbaa !5
  %695 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %694, i32 0, i32 22
  %696 = load ptr, ptr %11, align 8, !tbaa !5
  %697 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %696, i32 0, i32 46
  %698 = load ptr, ptr %11, align 8, !tbaa !5
  %699 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %698, i32 0, i32 50
  %700 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rgemvElldPKNS_9ae_matrixElPKNS_9ae_vectorEdPS3_PNS_8ae_stateE(i64 noundef %692, i64 noundef %693, double noundef 1.000000e+00, ptr noundef %695, i64 noundef 0, ptr noundef %697, double noundef 0.000000e+00, ptr noundef %699, ptr noundef %700)
  %701 = load ptr, ptr %11, align 8, !tbaa !5
  %702 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %701, i32 0, i32 20
  %703 = load i64, ptr %702, align 8, !tbaa !38
  %704 = load ptr, ptr %11, align 8, !tbaa !5
  %705 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %704, i32 0, i32 50
  %706 = load ptr, ptr %11, align 8, !tbaa !5
  %707 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %706, i32 0, i32 24
  %708 = load ptr, ptr %11, align 8, !tbaa !5
  %709 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %708, i32 0, i32 20
  %710 = load i64, ptr %709, align 8, !tbaa !38
  %711 = sub nsw i64 %710, 1
  %712 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyvrElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %703, ptr noundef %705, ptr noundef %707, i64 noundef %711, ptr noundef %712)
  %713 = load ptr, ptr %11, align 8, !tbaa !5
  %714 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %713, i32 0, i32 20
  %715 = load i64, ptr %714, align 8, !tbaa !38
  %716 = load ptr, ptr %11, align 8, !tbaa !5
  %717 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %716, i32 0, i32 50
  %718 = load ptr, ptr %11, align 8, !tbaa !5
  %719 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %718, i32 0, i32 24
  %720 = load ptr, ptr %11, align 8, !tbaa !5
  %721 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %720, i32 0, i32 20
  %722 = load i64, ptr %721, align 8, !tbaa !38
  %723 = sub nsw i64 %722, 1
  %724 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyvcElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %715, ptr noundef %717, ptr noundef %719, i64 noundef %723, ptr noundef %724)
  %725 = load ptr, ptr %11, align 8, !tbaa !5
  %726 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %725, i32 0, i32 20
  %727 = load i64, ptr %726, align 8, !tbaa !38
  %728 = load i64, ptr %22, align 8, !tbaa !9
  %729 = load ptr, ptr %11, align 8, !tbaa !5
  %730 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %729, i32 0, i32 23
  %731 = load ptr, ptr %11, align 8, !tbaa !5
  %732 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %731, i32 0, i32 46
  %733 = load ptr, ptr %11, align 8, !tbaa !5
  %734 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %733, i32 0, i32 50
  %735 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rgemvElldPKNS_9ae_matrixElPKNS_9ae_vectorEdPS3_PNS_8ae_stateE(i64 noundef %727, i64 noundef %728, double noundef 1.000000e+00, ptr noundef %730, i64 noundef 0, ptr noundef %732, double noundef 0.000000e+00, ptr noundef %734, ptr noundef %735)
  %736 = load ptr, ptr %11, align 8, !tbaa !5
  %737 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %736, i32 0, i32 20
  %738 = load i64, ptr %737, align 8, !tbaa !38
  %739 = load ptr, ptr %11, align 8, !tbaa !5
  %740 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %739, i32 0, i32 50
  %741 = load ptr, ptr %11, align 8, !tbaa !5
  %742 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %741, i32 0, i32 25
  %743 = load ptr, ptr %11, align 8, !tbaa !5
  %744 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %743, i32 0, i32 20
  %745 = load i64, ptr %744, align 8, !tbaa !38
  %746 = sub nsw i64 %745, 1
  %747 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyvrElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %738, ptr noundef %740, ptr noundef %742, i64 noundef %746, ptr noundef %747)
  %748 = load ptr, ptr %11, align 8, !tbaa !5
  %749 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %748, i32 0, i32 20
  %750 = load i64, ptr %749, align 8, !tbaa !38
  %751 = load i64, ptr %22, align 8, !tbaa !9
  %752 = load ptr, ptr %11, align 8, !tbaa !5
  %753 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %752, i32 0, i32 22
  %754 = load ptr, ptr %11, align 8, !tbaa !5
  %755 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %754, i32 0, i32 47
  %756 = load ptr, ptr %11, align 8, !tbaa !5
  %757 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %756, i32 0, i32 50
  %758 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rgemvElldPKNS_9ae_matrixElPKNS_9ae_vectorEdPS3_PNS_8ae_stateE(i64 noundef %750, i64 noundef %751, double noundef 1.000000e+00, ptr noundef %753, i64 noundef 0, ptr noundef %755, double noundef 0.000000e+00, ptr noundef %757, ptr noundef %758)
  %759 = load ptr, ptr %11, align 8, !tbaa !5
  %760 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %759, i32 0, i32 20
  %761 = load i64, ptr %760, align 8, !tbaa !38
  %762 = load ptr, ptr %11, align 8, !tbaa !5
  %763 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %762, i32 0, i32 50
  %764 = load ptr, ptr %11, align 8, !tbaa !5
  %765 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %764, i32 0, i32 25
  %766 = load ptr, ptr %11, align 8, !tbaa !5
  %767 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %766, i32 0, i32 20
  %768 = load i64, ptr %767, align 8, !tbaa !38
  %769 = sub nsw i64 %768, 1
  %770 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyvcElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %761, ptr noundef %763, ptr noundef %765, i64 noundef %769, ptr noundef %770)
  %771 = load double, ptr %26, align 8, !tbaa !22
  %772 = load double, ptr %24, align 8, !tbaa !22
  %773 = fdiv double %771, %772
  %774 = load double, ptr %34, align 8, !tbaa !22
  %775 = load double, ptr %34, align 8, !tbaa !22
  %776 = fdiv double 1.000000e+00, %775
  %777 = load ptr, ptr %20, align 8, !tbaa !5
  %778 = call noundef double @_ZN11alglib_impl8boundvalEdddPNS_8ae_stateE(double noundef %773, double noundef %774, double noundef %776, ptr noundef %777)
  %779 = load ptr, ptr %11, align 8, !tbaa !5
  %780 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %779, i32 0, i32 21
  store double %778, ptr %780, align 8, !tbaa !39
  %781 = load i8, ptr %18, align 1, !tbaa !11, !range !19, !noundef !20
  %782 = trunc i8 %781 to i1
  br i1 %782, label %783, label %790

783:                                              ; preds = %649
  %784 = load i64, ptr %19, align 8, !tbaa !9
  %785 = add nsw i64 %784, 1
  %786 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %785, ptr noundef %786)
  %787 = load ptr, ptr %11, align 8, !tbaa !5
  %788 = getelementptr inbounds %"struct.alglib_impl::xbfgshessian", ptr %787, i32 0, i32 21
  %789 = load double, ptr %788, align 8, !tbaa !39
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.285, double noundef %789)
  br label %790

790:                                              ; preds = %783, %649
  %791 = load ptr, ptr %11, align 8, !tbaa !5
  %792 = load ptr, ptr %20, align 8, !tbaa !5
  call void @_ZN11alglib_implL25optserv_resetlowrankmodelEPNS_12xbfgshessianEPNS_8ae_stateE(ptr noundef %791, ptr noundef %792)
  br label %793

793:                                              ; preds = %790, %578
  store i32 0, ptr %37, align 4
  br label %794

794:                                              ; preds = %793, %595, %577, %171, %44
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  %795 = load i32, ptr %37, align 4
  switch i32 %795, label %797 [
    i32 0, label %796
    i32 1, label %796
  ]

796:                                              ; preds = %794, %794
  ret void

797:                                              ; preds = %794
  unreachable
}

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

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

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

declare void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, ptr noundef) #1

declare void @_ZN11alglib_impl9rcopymulvEldPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, ptr noundef, ptr noundef) #1

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTSN11alglib_impl12xbfgshessianE", !10, i64 0, !15, i64 8, !15, i64 72, !10, i64 136, !10, i64 144, !17, i64 152, !17, i64 160, !17, i64 168, !17, i64 176, !17, i64 184, !17, i64 192, !17, i64 200, !10, i64 208, !17, i64 216, !17, i64 224, !18, i64 232, !10, i64 312, !17, i64 320, !17, i64 328, !17, i64 336, !10, i64 344, !17, i64 352, !18, i64 360, !18, i64 440, !18, i64 520, !18, i64 600, !12, i64 680, !10, i64 688, !18, i64 696, !18, i64 776, !12, i64 856, !15, i64 864, !12, i64 928, !10, i64 936, !18, i64 944, !15, i64 1024, !15, i64 1088, !18, i64 1152, !15, i64 1232, !15, i64 1296, !12, i64 1360, !15, i64 1368, !17, i64 1432, !17, i64 1440, !10, i64 1448, !18, i64 1456, !15, i64 1536, !15, i64 1600, !15, i64 1664, !15, i64 1728, !15, i64 1792, !15, i64 1856, !18, i64 1920, !18, i64 2000, !18, i64 2080, !18, i64 2160, !18, i64 2240, !18, i64 2320, !18, i64 2400, !18, i64 2480, !15, i64 2560, !15, i64 2624, !18, i64 2688, !15, i64 2768, !18, i64 2832, !18, i64 2912, !18, i64 2992, !18, i64 3072, !18, i64 3152, !15, i64 3232, !15, i64 3296}
!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 = !{!"double", !7, i64 0}
!18 = !{!"_ZTSN11alglib_impl9ae_matrixE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !12, i64 32, !16, i64 40, !7, i64 72}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = !{!14, !10, i64 136}
!22 = !{!17, !17, i64 0}
!23 = !{!7, !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!14, !10, i64 1448}
!27 = !{!14, !17, i64 152}
!28 = !{!14, !17, i64 336}
!29 = !{!14, !17, i64 320}
!30 = !{!14, !17, i64 328}
!31 = !{!14, !10, i64 312}
!32 = !{!14, !10, i64 144}
!33 = !{!14, !17, i64 168}
!34 = !{!14, !17, i64 176}
!35 = distinct !{!35, !25}
!36 = !{!14, !17, i64 160}
!37 = !{!14, !10, i64 208}
!38 = !{!14, !10, i64 344}
!39 = !{!14, !17, i64 352}


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

@.str.263 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.270 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.271 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.273 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.274 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.275 = external hidden unnamed_addr constant [37 x i8], align 1
@_ZN11alglib_implL19optserv_xbfgssigma2E = external hidden local_unnamed_addr global double, align 8
@.str.276 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.277 = external hidden unnamed_addr constant [94 x i8], align 1
@_ZN11alglib_implL19optserv_xbfgssigma3E = external hidden local_unnamed_addr global double, align 8
@.str.278 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.279 = external hidden unnamed_addr constant [81 x i8], align 1
@.str.280 = external hidden unnamed_addr constant [98 x i8], align 1
@.str.281 = external hidden unnamed_addr constant [101 x i8], align 1
@.str.282 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.283 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.284 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.285 = external hidden unnamed_addr constant [53 x i8], align 1

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

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

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

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

declare noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef, ptr noundef) local_unnamed_addr #1

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

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

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

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

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

declare noundef double @_ZN11alglib_impl8rmaxabsvElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef, ...) local_unnamed_addr #1

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

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

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

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

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

declare noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

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

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

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

declare noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare noundef double @_ZN11alglib_impl8boundvalEdddPNS_8ae_stateE(double noundef, double noundef, double noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl15hessianupdatev2EPNS_12xbfgshessianEPKNS_9ae_vectorES4_S4_S4_lbblPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i64 noundef %5, i1 noundef zeroext %6, i1 noundef zeroext %7, i64 noundef %8, ptr noundef %9) local_unnamed_addr #3 {
  %11 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #5
  %12 = load i64, ptr %0, align 8, !tbaa !5
  %13 = icmp eq i64 %12, 4
  br i1 %13, label %14, label %15

14:                                               ; preds = %10
  tail call void @_ZN11alglib_impl16hessianupdatesr1EPNS_12xbfgshessianEPKNS_9ae_vectorES4_S4_S4_blPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, i1 noundef zeroext %7, i64 noundef %8, ptr noundef %9)
  br label %290

15:                                               ; preds = %10
  %16 = getelementptr inbounds i8, ptr %0, i64 136
  %17 = load i64, ptr %16, align 8, !tbaa !16
  %18 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef 5.000000e-16, ptr noundef %9)
  %19 = fmul double %18, 1.000000e+01
  %20 = sitofp i64 %17 to double
  %21 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %20, ptr noundef %9)
  %22 = fadd double %21, 1.000000e+00
  %23 = fmul double %22, 0x3CF6849B86A12B9C
  br i1 %7, label %24, label %25

24:                                               ; preds = %15
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %8, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.273)
  br label %25

25:                                               ; preds = %24, %15
  %.not.not357 = icmp sgt i64 %17, 0
  br i1 %.not.not357, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %25
  %26 = getelementptr inbounds i8, ptr %3, i64 56
  %27 = getelementptr inbounds i8, ptr %1, i64 56
  %28 = getelementptr inbounds i8, ptr %4, i64 56
  %29 = getelementptr inbounds i8, ptr %2, i64 56
  %30 = getelementptr inbounds i8, ptr %0, i64 1592
  %31 = getelementptr inbounds i8, ptr %0, i64 1656
  br label %32

32:                                               ; preds = %.lr.ph, %32
  %.0363 = phi double [ 0.000000e+00, %.lr.ph ], [ %57, %32 ]
  %storemerge358 = phi i64 [ 0, %.lr.ph ], [ %59, %32 ]
  %33 = phi <2 x double> [ zeroinitializer, %.lr.ph ], [ %58, %32 ]
  %34 = load ptr, ptr %26, align 8, !tbaa !17
  %35 = getelementptr inbounds double, ptr %34, i64 %storemerge358
  %36 = load double, ptr %35, align 8, !tbaa !18
  %37 = load ptr, ptr %27, align 8, !tbaa !17
  %38 = getelementptr inbounds double, ptr %37, i64 %storemerge358
  %39 = load double, ptr %38, align 8, !tbaa !18
  %40 = load ptr, ptr %28, align 8, !tbaa !17
  %41 = getelementptr inbounds double, ptr %40, i64 %storemerge358
  %42 = load double, ptr %41, align 8, !tbaa !18
  %43 = load ptr, ptr %29, align 8, !tbaa !17
  %44 = getelementptr inbounds double, ptr %43, i64 %storemerge358
  %45 = load double, ptr %44, align 8, !tbaa !18
  %46 = insertelement <2 x double> poison, double %42, i64 0
  %47 = insertelement <2 x double> %46, double %36, i64 1
  %48 = insertelement <2 x double> poison, double %45, i64 0
  %49 = insertelement <2 x double> %48, double %39, i64 1
  %50 = fsub <2 x double> %47, %49
  %51 = load ptr, ptr %30, align 8, !tbaa !17
  %52 = getelementptr inbounds double, ptr %51, i64 %storemerge358
  %53 = extractelement <2 x double> %50, i64 1
  store double %53, ptr %52, align 8, !tbaa !18
  %54 = load ptr, ptr %31, align 8, !tbaa !17
  %55 = getelementptr inbounds double, ptr %54, i64 %storemerge358
  %56 = extractelement <2 x double> %50, i64 0
  store double %56, ptr %55, align 8, !tbaa !18
  %57 = tail call double @llvm.fmuladd.f64(double %53, double %56, double %.0363)
  %58 = tail call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %50, <2 x double> %50, <2 x double> %33)
  %59 = add nuw nsw i64 %storemerge358, 1
  %exitcond.not = icmp eq i64 %59, %17
  br i1 %exitcond.not, label %._crit_edge, label %32, !llvm.loop !19

._crit_edge:                                      ; preds = %32, %25
  %storemerge.lcssa = phi i64 [ 0, %25 ], [ %17, %32 ]
  %.0.lcssa = phi double [ 0.000000e+00, %25 ], [ %57, %32 ]
  %60 = phi <2 x double> [ zeroinitializer, %25 ], [ %58, %32 ]
  store i64 %storemerge.lcssa, ptr %11, align 8, !tbaa !21
  %61 = getelementptr inbounds i8, ptr %0, i64 1448
  store i64 0, ptr %61, align 8, !tbaa !22
  %62 = getelementptr inbounds i8, ptr %0, i64 1536
  %63 = tail call noundef double @_ZN11alglib_impl8rmaxabsvElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %62, ptr noundef %9)
  %64 = getelementptr inbounds i8, ptr %0, i64 152
  %65 = load double, ptr %64, align 8, !tbaa !23
  %66 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %63, double noundef %65)
  br i1 %66, label %67, label %70

67:                                               ; preds = %._crit_edge
  br i1 %7, label %68, label %290

68:                                               ; preds = %67
  %69 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %69, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.274)
  br label %290

70:                                               ; preds = %._crit_edge
  %71 = getelementptr inbounds i8, ptr %0, i64 1728
  tail call void @_ZN11alglib_impl9hessianmvEPNS_12xbfgshessianEPKNS_9ae_vectorEPS2_PNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %62, ptr noundef nonnull %71, ptr noundef %9)
  %72 = tail call noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %62, ptr noundef nonnull %71, ptr noundef %9)
  %73 = extractelement <2 x double> %60, i64 1
  %74 = fmul double %23, %73
  %75 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %72, double noundef %74)
  br i1 %75, label %76, label %117

76:                                               ; preds = %70
  %spec.select = icmp ult i64 %5, 3
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %spec.select, ptr noundef nonnull @.str.275, ptr noundef %9)
  %77 = fdiv double %.0.lcssa, %72
  %78 = extractelement <2 x double> %60, i64 0
  switch i64 %5, label %112 [
    i64 1, label %79
    i64 2, label %90
  ]

79:                                               ; preds = %76
  %80 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !18
  %81 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %77, double noundef %80)
  br i1 %81, label %82, label %.thread

82:                                               ; preds = %79
  br i1 %7, label %83, label %85

83:                                               ; preds = %82
  %84 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %84, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.276)
  br label %85

85:                                               ; preds = %83, %82
  %86 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !18
  %87 = fsub double 1.000000e+00, %86
  %88 = fsub double 1.000000e+00, %77
  %89 = fdiv double %87, %88
  br label %.thread

90:                                               ; preds = %76
  %91 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !18
  %92 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %77, double noundef %91)
  br i1 %92, label %93, label %.thread

93:                                               ; preds = %90
  br i1 %7, label %94, label %96

94:                                               ; preds = %93
  %95 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %95, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.277)
  br label %96

96:                                               ; preds = %94, %93
  %97 = getelementptr inbounds i8, ptr %0, i64 1600
  tail call void @_ZN11alglib_impl6rcopyvElPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %71, ptr noundef nonnull %97, ptr noundef %9)
  %98 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !18
  tail call void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %17, double noundef %98, ptr noundef nonnull %97, ptr noundef %9)
  %99 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma2E, align 8, !tbaa !18
  %100 = fmul double %72, %99
  %101 = tail call noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %97, ptr noundef %9)
  br label %.thread

.thread:                                          ; preds = %79, %85, %96, %90
  %.0330345.ph = phi double [ 1.000000e+00, %90 ], [ 1.000000e+00, %96 ], [ 1.000000e+00, %79 ], [ %89, %85 ]
  %.1326.ph = phi double [ %78, %90 ], [ %101, %96 ], [ %78, %79 ], [ %78, %85 ]
  %.1.ph = phi double [ %.0.lcssa, %90 ], [ %100, %96 ], [ %.0.lcssa, %79 ], [ %.0.lcssa, %85 ]
  %102 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma3E, align 8, !tbaa !18
  %103 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %77, double noundef %102)
  br i1 %103, label %104, label %112

104:                                              ; preds = %.thread
  br i1 %7, label %105, label %107

105:                                              ; preds = %104
  %106 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %106, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.278)
  br label %107

107:                                              ; preds = %105, %104
  %108 = load double, ptr @_ZN11alglib_implL19optserv_xbfgssigma3E, align 8, !tbaa !18
  %109 = fadd double %108, -1.000000e+00
  %110 = fadd double %77, -1.000000e+00
  %111 = fdiv double %109, %110
  br label %112

112:                                              ; preds = %76, %107, %.thread
  %.1355 = phi double [ %.1.ph, %107 ], [ %.1.ph, %.thread ], [ %.0.lcssa, %76 ]
  %.1326353 = phi double [ %.1326.ph, %107 ], [ %.1326.ph, %.thread ], [ %78, %76 ]
  %.1331 = phi double [ %111, %107 ], [ %.0330345.ph, %.thread ], [ 1.000000e+00, %76 ]
  %113 = tail call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %.1331, double noundef 1.000000e+00)
  br i1 %113, label %114, label %124

114:                                              ; preds = %112
  %115 = getelementptr inbounds i8, ptr %0, i64 1600
  tail call void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %17, double noundef %.1331, ptr noundef nonnull %115, ptr noundef %9)
  %116 = fsub double 1.000000e+00, %.1331
  tail call void @_ZN11alglib_impl5raddvEldPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %17, double noundef %116, ptr noundef nonnull %71, ptr noundef nonnull %115, ptr noundef %9)
  br label %.sink.split

117:                                              ; preds = %70
  br i1 %7, label %118, label %120

118:                                              ; preds = %117
  %119 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %119, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.279)
  br label %120

120:                                              ; preds = %118, %117
  %121 = getelementptr inbounds i8, ptr %0, i64 1600
  tail call void @_ZN11alglib_impl9rcopymulvEldPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %17, double noundef %19, ptr noundef nonnull %62, ptr noundef nonnull %121, ptr noundef %9)
  br label %.sink.split

.sink.split:                                      ; preds = %120, %114
  %.sink381 = phi ptr [ %115, %114 ], [ %121, %120 ]
  %122 = tail call noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %62, ptr noundef nonnull %.sink381, ptr noundef %9)
  %123 = tail call noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %.sink381, ptr noundef %9)
  br label %124

124:                                              ; preds = %.sink.split, %112
  %.2327 = phi double [ %.1326353, %112 ], [ %123, %.sink.split ]
  %.2 = phi double [ %.1355, %112 ], [ %122, %.sink.split ]
  %125 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %.2, double noundef 0.000000e+00)
  br i1 %125, label %129, label %126

126:                                              ; preds = %124
  %127 = fdiv double %.2, %73
  %128 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %127, double noundef %19)
  br i1 %128, label %129, label %137

129:                                              ; preds = %126, %124
  br i1 %7, label %130, label %133

130:                                              ; preds = %129
  %131 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %131, ptr noundef %9)
  %132 = fdiv double %.2, %73
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.280, double noundef %132)
  br label %133

133:                                              ; preds = %130, %129
  %134 = getelementptr inbounds i8, ptr %0, i64 1600
  tail call void @_ZN11alglib_impl9rcopymulvEldPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %17, double noundef %19, ptr noundef nonnull %62, ptr noundef nonnull %134, ptr noundef %9)
  %135 = tail call noundef double @_ZN11alglib_impl5rdotvElPKNS_9ae_vectorES2_PNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %62, ptr noundef nonnull %134, ptr noundef %9)
  %136 = tail call noundef double @_ZN11alglib_impl6rdotv2ElPKNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %134, ptr noundef %9)
  br label %137

137:                                              ; preds = %133, %126
  %.3328 = phi double [ %136, %133 ], [ %.2327, %126 ]
  %.3 = phi double [ %135, %133 ], [ %.2, %126 ]
  %138 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %.3, double noundef 0.000000e+00)
  br i1 %138, label %139, label %152

139:                                              ; preds = %137
  %140 = fdiv double %.3328, %.3
  %141 = fdiv double 1.000000e+00, %19
  %142 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %140, double noundef %141)
  br i1 %142, label %143, label %152

143:                                              ; preds = %139
  br i1 %7, label %144, label %146

144:                                              ; preds = %143
  %145 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %145, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.281, double noundef %140)
  br label %146

146:                                              ; preds = %144, %143
  %147 = fdiv double %141, %140
  %148 = getelementptr inbounds i8, ptr %0, i64 1600
  tail call void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %17, double noundef %147, ptr noundef nonnull %148, ptr noundef %9)
  %149 = fmul double %.3, %147
  %150 = fmul double %147, %147
  %151 = fmul double %.3328, %150
  br label %152

152:                                              ; preds = %146, %139, %137
  %.4329 = phi double [ %151, %146 ], [ %.3328, %139 ], [ %.3328, %137 ]
  %.4 = phi double [ %149, %146 ], [ %.3, %139 ], [ %.3, %137 ]
  %153 = load i64, ptr %0, align 8, !tbaa !5
  %154 = icmp eq i64 %153, 0
  %155 = icmp eq i64 %153, 3
  %spec.select343 = or i1 %154, %155
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %spec.select343, ptr noundef nonnull @.str.263, ptr noundef %9)
  %156 = load i64, ptr %0, align 8, !tbaa !5
  switch i64 %156, label %290 [
    i64 0, label %157
    i64 3, label %229
  ]

157:                                              ; preds = %152
  %158 = getelementptr inbounds i8, ptr %0, i64 232
  %159 = getelementptr inbounds i8, ptr %0, i64 1600
  tail call void @_ZN11alglib_implL30optserv_hessianupdatelowlevel2EPNS_12xbfgshessianEPNS_9ae_matrixEPKNS_9ae_vectorES6_PlPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %158, ptr noundef nonnull %62, ptr noundef nonnull %159, ptr noundef nonnull %61, ptr noundef %9)
  %160 = getelementptr inbounds i8, ptr %0, i64 1456
  call void @_ZN11alglib_implL30optserv_hessianupdatelowlevel2EPNS_12xbfgshessianEPNS_9ae_matrixEPKNS_9ae_vectorES6_PlPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %160, ptr noundef nonnull %62, ptr noundef nonnull %159, ptr noundef nonnull %11, ptr noundef %9)
  %161 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %.4, double noundef 0.000000e+00)
  br i1 %161, label %162, label %169

162:                                              ; preds = %157
  %163 = getelementptr inbounds i8, ptr %0, i64 336
  %164 = load double, ptr %163, align 8, !tbaa !24
  %165 = fadd double %.4, %164
  store double %165, ptr %163, align 8, !tbaa !24
  %166 = getelementptr inbounds i8, ptr %0, i64 320
  %167 = load double, ptr %166, align 8, !tbaa !25
  %168 = fadd double %.4329, %167
  store double %168, ptr %166, align 8, !tbaa !25
  br label %169

169:                                              ; preds = %162, %157
  %170 = getelementptr inbounds i8, ptr %0, i64 328
  %171 = load double, ptr %170, align 8, !tbaa !26
  %172 = fadd double %73, %171
  store double %172, ptr %170, align 8, !tbaa !26
  %173 = getelementptr inbounds i8, ptr %0, i64 312
  %174 = load i64, ptr %173, align 8, !tbaa !27
  %175 = add nsw i64 %174, 1
  store i64 %175, ptr %173, align 8, !tbaa !27
  br i1 %7, label %176, label %178

176:                                              ; preds = %169
  %177 = add nsw i64 %8, 1
  call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %177, ptr noundef %9)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.282)
  br label %178

178:                                              ; preds = %176, %169
  %179 = getelementptr inbounds i8, ptr %0, i64 144
  %180 = load i64, ptr %179, align 8, !tbaa !28
  %181 = icmp sgt i64 %180, 0
  br i1 %181, label %182, label %290

182:                                              ; preds = %178
  %183 = load i64, ptr %173, align 8, !tbaa !27
  %.not = icmp slt i64 %183, %180
  br i1 %.not, label %290, label %184

184:                                              ; preds = %182
  call void @_ZN11alglib_impl11rmatrixcopyEllPKNS_9ae_matrixEllPS0_llPNS_8ae_stateE(i64 noundef %17, i64 noundef %17, ptr noundef nonnull %160, i64 noundef 0, i64 noundef 0, ptr noundef nonnull %158, i64 noundef 0, i64 noundef 0, ptr noundef %9)
  %185 = getelementptr inbounds i8, ptr %0, i64 320
  %186 = load double, ptr %185, align 8, !tbaa !25
  %187 = getelementptr inbounds i8, ptr %0, i64 336
  %188 = load double, ptr %187, align 8, !tbaa !24
  %189 = getelementptr inbounds i8, ptr %0, i64 168
  %190 = load double, ptr %189, align 8, !tbaa !29
  %191 = call double @llvm.fmuladd.f64(double %190, double %186, double %188)
  %192 = getelementptr inbounds i8, ptr %0, i64 176
  %193 = load double, ptr %192, align 8, !tbaa !30
  %194 = load double, ptr %170, align 8, !tbaa !26
  %195 = call double @llvm.fmuladd.f64(double %193, double %194, double %191)
  %196 = fdiv double %186, %195
  call void @_ZN11alglib_impl5rsetmElldPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %17, i64 noundef %17, double noundef 0.000000e+00, ptr noundef nonnull %160, ptr noundef %9)
  br i1 %.not.not357, label %.lr.ph370, label %._crit_edge371

.lr.ph370:                                        ; preds = %184
  %197 = getelementptr inbounds i8, ptr %0, i64 1528
  %xtraiter = and i64 %17, 3
  %198 = icmp ult i64 %17, 4
  br i1 %198, label %._crit_edge371.loopexit.unr-lcssa, label %.lr.ph370.new

.lr.ph370.new:                                    ; preds = %.lr.ph370
  %unroll_iter = and i64 %17, 9223372036854775804
  br label %199

199:                                              ; preds = %199, %.lr.ph370.new
  %storemerge341368 = phi i64 [ 0, %.lr.ph370.new ], [ %219, %199 ]
  %niter = phi i64 [ 0, %.lr.ph370.new ], [ %niter.next.3, %199 ]
  %200 = load ptr, ptr %197, align 8, !tbaa !17
  %201 = getelementptr inbounds ptr, ptr %200, i64 %storemerge341368
  %202 = load ptr, ptr %201, align 8, !tbaa !31
  %203 = getelementptr inbounds double, ptr %202, i64 %storemerge341368
  store double %196, ptr %203, align 8, !tbaa !18
  %204 = or disjoint i64 %storemerge341368, 1
  %205 = load ptr, ptr %197, align 8, !tbaa !17
  %206 = getelementptr inbounds ptr, ptr %205, i64 %204
  %207 = load ptr, ptr %206, align 8, !tbaa !31
  %208 = getelementptr inbounds double, ptr %207, i64 %204
  store double %196, ptr %208, align 8, !tbaa !18
  %209 = or disjoint i64 %storemerge341368, 2
  %210 = load ptr, ptr %197, align 8, !tbaa !17
  %211 = getelementptr inbounds ptr, ptr %210, i64 %209
  %212 = load ptr, ptr %211, align 8, !tbaa !31
  %213 = getelementptr inbounds double, ptr %212, i64 %209
  store double %196, ptr %213, align 8, !tbaa !18
  %214 = or disjoint i64 %storemerge341368, 3
  %215 = load ptr, ptr %197, align 8, !tbaa !17
  %216 = getelementptr inbounds ptr, ptr %215, i64 %214
  %217 = load ptr, ptr %216, align 8, !tbaa !31
  %218 = getelementptr inbounds double, ptr %217, i64 %214
  store double %196, ptr %218, align 8, !tbaa !18
  %219 = add nuw nsw i64 %storemerge341368, 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_edge371.loopexit.unr-lcssa, label %199, !llvm.loop !32

._crit_edge371.loopexit.unr-lcssa:                ; preds = %199, %.lr.ph370
  %storemerge341368.unr = phi i64 [ 0, %.lr.ph370 ], [ %219, %199 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge371, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge371.loopexit.unr-lcssa, %.epil.preheader
  %storemerge341368.epil = phi i64 [ %224, %.epil.preheader ], [ %storemerge341368.unr, %._crit_edge371.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge371.loopexit.unr-lcssa ]
  %220 = load ptr, ptr %197, align 8, !tbaa !17
  %221 = getelementptr inbounds ptr, ptr %220, i64 %storemerge341368.epil
  %222 = load ptr, ptr %221, align 8, !tbaa !31
  %223 = getelementptr inbounds double, ptr %222, i64 %storemerge341368.epil
  store double %196, ptr %223, align 8, !tbaa !18
  %224 = add nuw nsw i64 %storemerge341368.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_edge371, label %.epil.preheader, !llvm.loop !33

._crit_edge371:                                   ; preds = %._crit_edge371.loopexit.unr-lcssa, %.epil.preheader, %184
  %storemerge341.lcssa = phi i64 [ 0, %184 ], [ %17, %.epil.preheader ], [ %17, %._crit_edge371.loopexit.unr-lcssa ]
  store i64 %storemerge341.lcssa, ptr %11, align 8, !tbaa !21
  %225 = call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef 5.000000e-16, ptr noundef %9)
  store double %225, ptr %187, align 8, !tbaa !24
  %226 = getelementptr inbounds i8, ptr %0, i64 160
  %227 = load double, ptr %226, align 8, !tbaa !35
  %228 = fmul double %225, %227
  store double %228, ptr %185, align 8, !tbaa !25
  store double 0.000000e+00, ptr %170, align 8, !tbaa !26
  store i64 0, ptr %173, align 8, !tbaa !27
  store i64 3, ptr %61, align 8, !tbaa !22
  br label %290

229:                                              ; preds = %152
  %230 = getelementptr inbounds i8, ptr %0, i64 208
  %231 = load i64, ptr %230, align 8, !tbaa !36
  %232 = icmp eq i64 %231, 0
  br i1 %232, label %233, label %236

233:                                              ; preds = %229
  br i1 %7, label %234, label %290

234:                                              ; preds = %233
  %235 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %235, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.283)
  br label %290

236:                                              ; preds = %229
  %237 = getelementptr inbounds i8, ptr %0, i64 336
  %238 = load double, ptr %237, align 8, !tbaa !24
  %239 = fadd double %.4, %238
  store double %239, ptr %237, align 8, !tbaa !24
  %240 = getelementptr inbounds i8, ptr %0, i64 320
  %241 = load <2 x double>, ptr %240, align 8, !tbaa !18
  %242 = insertelement <2 x double> %60, double %.4329, i64 0
  %243 = fadd <2 x double> %242, %241
  store <2 x double> %243, ptr %240, align 8, !tbaa !18
  %244 = getelementptr inbounds i8, ptr %0, i64 344
  %245 = load i64, ptr %244, align 8, !tbaa !37
  %246 = icmp sle i64 %245, %231
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %246, ptr noundef nonnull @.str.270, ptr noundef %9)
  br i1 %6, label %247, label %251

247:                                              ; preds = %236
  br i1 %7, label %248, label %250

248:                                              ; preds = %247
  %249 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %249, ptr noundef %9)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.284)
  br label %250

250:                                              ; preds = %248, %247
  tail call void @_ZN11alglib_impl26hessianpoplatestifpossibleEPNS_12xbfgshessianEPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %9)
  br label %251

251:                                              ; preds = %250, %236
  %252 = load i64, ptr %244, align 8, !tbaa !37
  %253 = load i64, ptr %230, align 8, !tbaa !36
  %254 = icmp eq i64 %252, %253
  br i1 %254, label %255, label %256

255:                                              ; preds = %251
  tail call void @_ZN11alglib_implL18optserv_popfrontxyEPNS_12xbfgshessianEPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %9)
  %.pre = load i64, ptr %244, align 8, !tbaa !37
  %.pre378 = load i64, ptr %230, align 8, !tbaa !36
  br label %256

256:                                              ; preds = %255, %251
  %257 = phi i64 [ %.pre378, %255 ], [ %253, %251 ]
  %258 = phi i64 [ %.pre, %255 ], [ %252, %251 ]
  %259 = icmp slt i64 %258, %257
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %259, ptr noundef nonnull @.str.271, ptr noundef %9)
  %260 = load i64, ptr %244, align 8, !tbaa !37
  %261 = add nsw i64 %260, 1
  store i64 %261, ptr %244, align 8, !tbaa !37
  %262 = getelementptr inbounds i8, ptr %0, i64 360
  tail call void @_ZN11alglib_impl7rcopyvrElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %62, ptr noundef nonnull %262, i64 noundef %260, ptr noundef %9)
  %263 = getelementptr inbounds i8, ptr %0, i64 1600
  %264 = getelementptr inbounds i8, ptr %0, i64 440
  %265 = load i64, ptr %244, align 8, !tbaa !37
  %266 = add nsw i64 %265, -1
  tail call void @_ZN11alglib_impl7rcopyvrElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %17, ptr noundef nonnull %263, ptr noundef nonnull %264, i64 noundef %266, ptr noundef %9)
  %267 = load i64, ptr %244, align 8, !tbaa !37
  %268 = getelementptr inbounds i8, ptr %0, i64 1792
  tail call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %267, ptr noundef nonnull %268, ptr noundef %9)
  %269 = load i64, ptr %244, align 8, !tbaa !37
  tail call void @_ZN11alglib_impl5rgemvElldPKNS_9ae_matrixElPKNS_9ae_vectorEdPS3_PNS_8ae_stateE(i64 noundef %269, i64 noundef %17, double noundef 1.000000e+00, ptr noundef nonnull %262, i64 noundef 0, ptr noundef nonnull %62, double noundef 0.000000e+00, ptr noundef nonnull %268, ptr noundef %9)
  %270 = load i64, ptr %244, align 8, !tbaa !37
  %271 = getelementptr inbounds i8, ptr %0, i64 520
  %272 = add nsw i64 %270, -1
  tail call void @_ZN11alglib_impl7rcopyvrElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %270, ptr noundef nonnull %268, ptr noundef nonnull %271, i64 noundef %272, ptr noundef %9)
  %273 = load i64, ptr %244, align 8, !tbaa !37
  %274 = add nsw i64 %273, -1
  tail call void @_ZN11alglib_impl7rcopyvcElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %273, ptr noundef nonnull %268, ptr noundef nonnull %271, i64 noundef %274, ptr noundef %9)
  %275 = load i64, ptr %244, align 8, !tbaa !37
  tail call void @_ZN11alglib_impl5rgemvElldPKNS_9ae_matrixElPKNS_9ae_vectorEdPS3_PNS_8ae_stateE(i64 noundef %275, i64 noundef %17, double noundef 1.000000e+00, ptr noundef nonnull %264, i64 noundef 0, ptr noundef nonnull %62, double noundef 0.000000e+00, ptr noundef nonnull %268, ptr noundef %9)
  %276 = load i64, ptr %244, align 8, !tbaa !37
  %277 = getelementptr inbounds i8, ptr %0, i64 600
  %278 = add nsw i64 %276, -1
  tail call void @_ZN11alglib_impl7rcopyvrElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %276, ptr noundef nonnull %268, ptr noundef nonnull %277, i64 noundef %278, ptr noundef %9)
  %279 = load i64, ptr %244, align 8, !tbaa !37
  tail call void @_ZN11alglib_impl5rgemvElldPKNS_9ae_matrixElPKNS_9ae_vectorEdPS3_PNS_8ae_stateE(i64 noundef %279, i64 noundef %17, double noundef 1.000000e+00, ptr noundef nonnull %262, i64 noundef 0, ptr noundef nonnull %263, double noundef 0.000000e+00, ptr noundef nonnull %268, ptr noundef %9)
  %280 = load i64, ptr %244, align 8, !tbaa !37
  %281 = add nsw i64 %280, -1
  tail call void @_ZN11alglib_impl7rcopyvcElPKNS_9ae_vectorEPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %280, ptr noundef nonnull %268, ptr noundef nonnull %277, i64 noundef %281, ptr noundef %9)
  %282 = fdiv double %.4329, %.4
  %283 = fdiv double 1.000000e+00, %19
  %284 = tail call noundef double @_ZN11alglib_impl8boundvalEdddPNS_8ae_stateE(double noundef %282, double noundef %19, double noundef %283, ptr noundef %9)
  %285 = getelementptr inbounds i8, ptr %0, i64 352
  store double %284, ptr %285, align 8, !tbaa !38
  br i1 %7, label %286, label %289

286:                                              ; preds = %256
  %287 = add nsw i64 %8, 1
  tail call void @_ZN11alglib_impl11traceanglesElPNS_8ae_stateE(i64 noundef %287, ptr noundef %9)
  %288 = load double, ptr %285, align 8, !tbaa !38
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.285, double noundef %288)
  br label %289

289:                                              ; preds = %286, %256
  tail call void @_ZN11alglib_implL25optserv_resetlowrankmodelEPNS_12xbfgshessianEPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %9)
  br label %290

290:                                              ; preds = %289, %152, %233, %234, %178, %182, %._crit_edge371, %67, %68, %14
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #5
  ret void
}

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSN11alglib_impl12xbfgshessianE", !7, i64 0, !10, i64 8, !10, i64 72, !7, i64 136, !7, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !14, i64 200, !7, i64 208, !14, i64 216, !14, i64 224, !15, i64 232, !7, i64 312, !14, i64 320, !14, i64 328, !14, i64 336, !7, i64 344, !14, i64 352, !15, i64 360, !15, i64 440, !15, i64 520, !15, i64 600, !11, i64 680, !7, i64 688, !15, i64 696, !15, i64 776, !11, i64 856, !10, i64 864, !11, i64 928, !7, i64 936, !15, i64 944, !10, i64 1024, !10, i64 1088, !15, i64 1152, !10, i64 1232, !10, i64 1296, !11, i64 1360, !10, i64 1368, !14, i64 1432, !14, i64 1440, !7, i64 1448, !15, i64 1456, !10, i64 1536, !10, i64 1600, !10, i64 1664, !10, i64 1728, !10, i64 1792, !10, i64 1856, !15, i64 1920, !15, i64 2000, !15, i64 2080, !15, i64 2160, !15, i64 2240, !15, i64 2320, !15, i64 2400, !15, i64 2480, !10, i64 2560, !10, i64 2624, !15, i64 2688, !10, i64 2768, !15, i64 2832, !15, i64 2912, !15, i64 2992, !15, i64 3072, !15, i64 3152, !10, i64 3232, !10, i64 3296}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !11, i64 16, !12, i64 24, !8, i64 56}
!11 = !{!"bool", !8, i64 0}
!12 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"double", !8, i64 0}
!15 = !{!"_ZTSN11alglib_impl9ae_matrixE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !11, i64 32, !12, i64 40, !8, i64 72}
!16 = !{!6, !7, i64 136}
!17 = !{!8, !8, i64 0}
!18 = !{!14, !14, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!7, !7, i64 0}
!22 = !{!6, !7, i64 1448}
!23 = !{!6, !14, i64 152}
!24 = !{!6, !14, i64 336}
!25 = !{!6, !14, i64 320}
!26 = !{!6, !14, i64 328}
!27 = !{!6, !7, i64 312}
!28 = !{!6, !7, i64 144}
!29 = !{!6, !14, i64 168}
!30 = !{!6, !14, i64 176}
!31 = !{!13, !13, i64 0}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.unroll.disable"}
!35 = !{!6, !14, i64 160}
!36 = !{!6, !7, i64 208}
!37 = !{!6, !7, i64 344}
!38 = !{!6, !14, i64 352}


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