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

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

@_ZN11alglib_implL16linmin_defstpmaxE = external hidden global double, align 8
@_ZN11alglib_implL13linmin_stpminE = external hidden global double, align 8
@_ZN11alglib_implL11linmin_ftolE = external hidden global double, align 8
@_ZN11alglib_implL11linmin_xtolE = external hidden global double, align 8
@_ZN11alglib_implL13linmin_maxfevE = external hidden global i64, align 8

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

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

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef, double 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_impl10ae_minrealEddPNS_8ae_stateE(double noundef, double noundef, ptr noundef) #1

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

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

declare noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef, i64 noundef) #1

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl6mcsrchElPNS_9ae_vectorEPdS1_S1_S2_ddPlS3_S1_PNS_11linminstateES3_PNS_8ae_stateE(i64 noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, double noundef %6, double noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13) #3 {
  %15 = alloca i64, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i64, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca i32, align 4
  store i64 %0, ptr %15, align 8, !tbaa !5
  store ptr %1, ptr %16, align 8, !tbaa !9
  store ptr %2, ptr %17, align 8, !tbaa !9
  store ptr %3, ptr %18, align 8, !tbaa !9
  store ptr %4, ptr %19, align 8, !tbaa !9
  store ptr %5, ptr %20, align 8, !tbaa !9
  store double %6, ptr %21, align 8, !tbaa !11
  store double %7, ptr %22, align 8, !tbaa !11
  store ptr %8, ptr %23, align 8, !tbaa !9
  store ptr %9, ptr %24, align 8, !tbaa !9
  store ptr %10, ptr %25, align 8, !tbaa !9
  store ptr %11, ptr %26, align 8, !tbaa !9
  store ptr %12, ptr %27, align 8, !tbaa !9
  store ptr %13, ptr %28, align 8, !tbaa !9
  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
  store double 5.000000e-01, ptr %31, align 8, !tbaa !11
  store double 6.600000e-01, ptr %32, align 8, !tbaa !11
  %35 = load ptr, ptr %26, align 8, !tbaa !9
  %36 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %35, i32 0, i32 24
  store double 4.000000e+00, ptr %36, align 8, !tbaa !13
  store double 0.000000e+00, ptr %33, align 8, !tbaa !11
  %37 = load double, ptr %21, align 8, !tbaa !11
  %38 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %37, double noundef 0.000000e+00)
  br i1 %38, label %39, label %41

39:                                               ; preds = %14
  %40 = load double, ptr @_ZN11alglib_implL16linmin_defstpmaxE, align 8, !tbaa !11
  store double %40, ptr %21, align 8, !tbaa !11
  br label %41

41:                                               ; preds = %39, %14
  %42 = load ptr, ptr %20, align 8, !tbaa !9
  %43 = load double, ptr %42, align 8, !tbaa !11
  %44 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %45 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %43, double noundef %44)
  br i1 %45, label %46, label %49

46:                                               ; preds = %41
  %47 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %48 = load ptr, ptr %20, align 8, !tbaa !9
  store double %47, ptr %48, align 8, !tbaa !11
  br label %49

49:                                               ; preds = %46, %41
  %50 = load ptr, ptr %20, align 8, !tbaa !9
  %51 = load double, ptr %50, align 8, !tbaa !11
  %52 = load double, ptr %21, align 8, !tbaa !11
  %53 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %51, double noundef %52)
  br i1 %53, label %54, label %57

54:                                               ; preds = %49
  %55 = load double, ptr %21, align 8, !tbaa !11
  %56 = load ptr, ptr %20, align 8, !tbaa !9
  store double %55, ptr %56, align 8, !tbaa !11
  br label %57

57:                                               ; preds = %54, %49
  br label %58

58:                                               ; preds = %867, %865, %137, %62, %57
  %59 = load ptr, ptr %27, align 8, !tbaa !9
  %60 = load i64, ptr %59, align 8, !tbaa !5
  %61 = icmp eq i64 %60, 0
  br i1 %61, label %62, label %64

62:                                               ; preds = %58
  %63 = load ptr, ptr %27, align 8, !tbaa !9
  store i64 2, ptr %63, align 8, !tbaa !5
  br label %58, !llvm.loop !16

64:                                               ; preds = %58
  %65 = load ptr, ptr %27, align 8, !tbaa !9
  %66 = load i64, ptr %65, align 8, !tbaa !5
  %67 = icmp eq i64 %66, 2
  br i1 %67, label %68, label %202

68:                                               ; preds = %64
  %69 = load ptr, ptr %26, align 8, !tbaa !9
  %70 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %69, i32 0, i32 2
  store i64 1, ptr %70, align 8, !tbaa !18
  %71 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 0, ptr %71, align 8, !tbaa !5
  %72 = load double, ptr %21, align 8, !tbaa !11
  %73 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %74 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %72, double noundef %73)
  br i1 %74, label %75, label %83

75:                                               ; preds = %68
  %76 = load double, ptr %21, align 8, !tbaa !11
  %77 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %76, double noundef 0.000000e+00)
  br i1 %77, label %78, label %83

78:                                               ; preds = %75
  %79 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 5, ptr %79, align 8, !tbaa !5
  %80 = load double, ptr %21, align 8, !tbaa !11
  %81 = load ptr, ptr %20, align 8, !tbaa !9
  store double %80, ptr %81, align 8, !tbaa !11
  %82 = load ptr, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %82, align 8, !tbaa !5
  store i32 1, ptr %34, align 4
  br label %868

83:                                               ; preds = %75, %68
  %84 = load i64, ptr %15, align 8, !tbaa !5
  %85 = icmp sle i64 %84, 0
  br i1 %85, label %112, label %86

86:                                               ; preds = %83
  %87 = load ptr, ptr %20, align 8, !tbaa !9
  %88 = load double, ptr %87, align 8, !tbaa !11
  %89 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %88, double noundef 0.000000e+00)
  br i1 %89, label %112, label %90

90:                                               ; preds = %86
  %91 = load double, ptr @_ZN11alglib_implL11linmin_ftolE, align 8, !tbaa !11
  %92 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %91, double noundef 0.000000e+00)
  br i1 %92, label %112, label %93

93:                                               ; preds = %90
  %94 = load double, ptr %22, align 8, !tbaa !11
  %95 = load double, ptr %33, align 8, !tbaa !11
  %96 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %94, double noundef %95)
  br i1 %96, label %112, label %97

97:                                               ; preds = %93
  %98 = load double, ptr @_ZN11alglib_implL11linmin_xtolE, align 8, !tbaa !11
  %99 = load double, ptr %33, align 8, !tbaa !11
  %100 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %98, double noundef %99)
  br i1 %100, label %112, label %101

101:                                              ; preds = %97
  %102 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %103 = load double, ptr %33, align 8, !tbaa !11
  %104 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %102, double noundef %103)
  br i1 %104, label %112, label %105

105:                                              ; preds = %101
  %106 = load double, ptr %21, align 8, !tbaa !11
  %107 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %108 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %106, double noundef %107)
  br i1 %108, label %112, label %109

109:                                              ; preds = %105
  %110 = load i64, ptr @_ZN11alglib_implL13linmin_maxfevE, align 8, !tbaa !5
  %111 = icmp sle i64 %110, 0
  br i1 %111, label %112, label %114

112:                                              ; preds = %109, %105, %101, %97, %93, %90, %86, %83
  %113 = load ptr, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %113, align 8, !tbaa !5
  store i32 1, ptr %34, align 4
  br label %868

114:                                              ; preds = %109
  %115 = load ptr, ptr %18, align 8, !tbaa !9
  %116 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %115, i32 0, i32 4
  %117 = load ptr, ptr %116, align 8, !tbaa !19
  %118 = getelementptr inbounds double, ptr %117, i64 0
  %119 = load ptr, ptr %19, align 8, !tbaa !9
  %120 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %119, i32 0, i32 4
  %121 = load ptr, ptr %120, align 8, !tbaa !19
  %122 = getelementptr inbounds double, ptr %121, i64 0
  %123 = load i64, ptr %15, align 8, !tbaa !5
  %124 = sub nsw i64 %123, 1
  %125 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %124)
  %126 = call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %118, i64 noundef 1, ptr noundef %122, i64 noundef 1, i64 noundef %125)
  store double %126, ptr %30, align 8, !tbaa !11
  %127 = load double, ptr %30, align 8, !tbaa !11
  %128 = load ptr, ptr %26, align 8, !tbaa !9
  %129 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %128, i32 0, i32 5
  store double %127, ptr %129, align 8, !tbaa !20
  %130 = load ptr, ptr %26, align 8, !tbaa !9
  %131 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %130, i32 0, i32 5
  %132 = load double, ptr %131, align 8, !tbaa !20
  %133 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %132, double noundef 0.000000e+00)
  br i1 %133, label %134, label %137

134:                                              ; preds = %114
  %135 = load ptr, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %135, align 8, !tbaa !5
  %136 = load ptr, ptr %20, align 8, !tbaa !9
  store double 0.000000e+00, ptr %136, align 8, !tbaa !11
  store i32 1, ptr %34, align 4
  br label %868

137:                                              ; preds = %114
  %138 = load ptr, ptr %26, align 8, !tbaa !9
  %139 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %138, i32 0, i32 0
  store i8 0, ptr %139, align 8, !tbaa !21
  %140 = load ptr, ptr %26, align 8, !tbaa !9
  %141 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %140, i32 0, i32 1
  store i8 1, ptr %141, align 1, !tbaa !22
  %142 = load ptr, ptr %24, align 8, !tbaa !9
  store i64 0, ptr %142, align 8, !tbaa !5
  %143 = load ptr, ptr %17, align 8, !tbaa !9
  %144 = load double, ptr %143, align 8, !tbaa !11
  %145 = load ptr, ptr %26, align 8, !tbaa !9
  %146 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %145, i32 0, i32 11
  store double %144, ptr %146, align 8, !tbaa !23
  %147 = load double, ptr @_ZN11alglib_implL11linmin_ftolE, align 8, !tbaa !11
  %148 = load ptr, ptr %26, align 8, !tbaa !9
  %149 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %148, i32 0, i32 5
  %150 = load double, ptr %149, align 8, !tbaa !20
  %151 = fmul double %147, %150
  %152 = load ptr, ptr %26, align 8, !tbaa !9
  %153 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %152, i32 0, i32 6
  store double %151, ptr %153, align 8, !tbaa !24
  %154 = load double, ptr %21, align 8, !tbaa !11
  %155 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %156 = fsub double %154, %155
  %157 = load ptr, ptr %26, align 8, !tbaa !9
  %158 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %157, i32 0, i32 22
  store double %156, ptr %158, align 8, !tbaa !25
  %159 = load ptr, ptr %26, align 8, !tbaa !9
  %160 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %159, i32 0, i32 22
  %161 = load double, ptr %160, align 8, !tbaa !25
  %162 = load double, ptr %31, align 8, !tbaa !11
  %163 = fdiv double %161, %162
  %164 = load ptr, ptr %26, align 8, !tbaa !9
  %165 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %164, i32 0, i32 23
  store double %163, ptr %165, align 8, !tbaa !26
  %166 = load ptr, ptr %25, align 8, !tbaa !9
  %167 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %166, i32 0, i32 4
  %168 = load ptr, ptr %167, align 8, !tbaa !19
  %169 = getelementptr inbounds double, ptr %168, i64 0
  %170 = load ptr, ptr %16, align 8, !tbaa !9
  %171 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %170, i32 0, i32 4
  %172 = load ptr, ptr %171, align 8, !tbaa !19
  %173 = getelementptr inbounds double, ptr %172, i64 0
  %174 = load i64, ptr %15, align 8, !tbaa !5
  %175 = sub nsw i64 %174, 1
  %176 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %175)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %169, i64 noundef 1, ptr noundef %173, i64 noundef 1, i64 noundef %176)
  %177 = load ptr, ptr %26, align 8, !tbaa !9
  %178 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %177, i32 0, i32 18
  store double 0.000000e+00, ptr %178, align 8, !tbaa !27
  %179 = load ptr, ptr %26, align 8, !tbaa !9
  %180 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %179, i32 0, i32 11
  %181 = load double, ptr %180, align 8, !tbaa !23
  %182 = load ptr, ptr %26, align 8, !tbaa !9
  %183 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %182, i32 0, i32 14
  store double %181, ptr %183, align 8, !tbaa !28
  %184 = load ptr, ptr %26, align 8, !tbaa !9
  %185 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %184, i32 0, i32 5
  %186 = load double, ptr %185, align 8, !tbaa !20
  %187 = load ptr, ptr %26, align 8, !tbaa !9
  %188 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %187, i32 0, i32 7
  store double %186, ptr %188, align 8, !tbaa !29
  %189 = load ptr, ptr %26, align 8, !tbaa !9
  %190 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %189, i32 0, i32 19
  store double 0.000000e+00, ptr %190, align 8, !tbaa !30
  %191 = load ptr, ptr %26, align 8, !tbaa !9
  %192 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %191, i32 0, i32 11
  %193 = load double, ptr %192, align 8, !tbaa !23
  %194 = load ptr, ptr %26, align 8, !tbaa !9
  %195 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %194, i32 0, i32 16
  store double %193, ptr %195, align 8, !tbaa !31
  %196 = load ptr, ptr %26, align 8, !tbaa !9
  %197 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %196, i32 0, i32 5
  %198 = load double, ptr %197, align 8, !tbaa !20
  %199 = load ptr, ptr %26, align 8, !tbaa !9
  %200 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %199, i32 0, i32 9
  store double %198, ptr %200, align 8, !tbaa !32
  %201 = load ptr, ptr %27, align 8, !tbaa !9
  store i64 3, ptr %201, align 8, !tbaa !5
  br label %58, !llvm.loop !16

202:                                              ; preds = %64
  %203 = load ptr, ptr %27, align 8, !tbaa !9
  %204 = load i64, ptr %203, align 8, !tbaa !5
  %205 = icmp eq i64 %204, 3
  br i1 %205, label %206, label %358

206:                                              ; preds = %202
  %207 = load ptr, ptr %26, align 8, !tbaa !9
  %208 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %207, i32 0, i32 0
  %209 = load i8, ptr %208, align 8, !tbaa !21, !range !33, !noundef !34
  %210 = trunc i8 %209 to i1
  br i1 %210, label %211, label %242

211:                                              ; preds = %206
  %212 = load ptr, ptr %26, align 8, !tbaa !9
  %213 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %212, i32 0, i32 18
  %214 = load double, ptr %213, align 8, !tbaa !27
  %215 = load ptr, ptr %26, align 8, !tbaa !9
  %216 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %215, i32 0, i32 19
  %217 = load double, ptr %216, align 8, !tbaa !30
  %218 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %214, double noundef %217)
  br i1 %218, label %219, label %230

219:                                              ; preds = %211
  %220 = load ptr, ptr %26, align 8, !tbaa !9
  %221 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %220, i32 0, i32 18
  %222 = load double, ptr %221, align 8, !tbaa !27
  %223 = load ptr, ptr %26, align 8, !tbaa !9
  %224 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %223, i32 0, i32 20
  store double %222, ptr %224, align 8, !tbaa !35
  %225 = load ptr, ptr %26, align 8, !tbaa !9
  %226 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %225, i32 0, i32 19
  %227 = load double, ptr %226, align 8, !tbaa !30
  %228 = load ptr, ptr %26, align 8, !tbaa !9
  %229 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %228, i32 0, i32 21
  store double %227, ptr %229, align 8, !tbaa !36
  br label %241

230:                                              ; preds = %211
  %231 = load ptr, ptr %26, align 8, !tbaa !9
  %232 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %231, i32 0, i32 19
  %233 = load double, ptr %232, align 8, !tbaa !30
  %234 = load ptr, ptr %26, align 8, !tbaa !9
  %235 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %234, i32 0, i32 20
  store double %233, ptr %235, align 8, !tbaa !35
  %236 = load ptr, ptr %26, align 8, !tbaa !9
  %237 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %236, i32 0, i32 18
  %238 = load double, ptr %237, align 8, !tbaa !27
  %239 = load ptr, ptr %26, align 8, !tbaa !9
  %240 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %239, i32 0, i32 21
  store double %238, ptr %240, align 8, !tbaa !36
  br label %241

241:                                              ; preds = %230, %219
  br label %262

242:                                              ; preds = %206
  %243 = load ptr, ptr %26, align 8, !tbaa !9
  %244 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %243, i32 0, i32 18
  %245 = load double, ptr %244, align 8, !tbaa !27
  %246 = load ptr, ptr %26, align 8, !tbaa !9
  %247 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %246, i32 0, i32 20
  store double %245, ptr %247, align 8, !tbaa !35
  %248 = load ptr, ptr %20, align 8, !tbaa !9
  %249 = load double, ptr %248, align 8, !tbaa !11
  %250 = load ptr, ptr %26, align 8, !tbaa !9
  %251 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %250, i32 0, i32 24
  %252 = load double, ptr %251, align 8, !tbaa !13
  %253 = load ptr, ptr %20, align 8, !tbaa !9
  %254 = load double, ptr %253, align 8, !tbaa !11
  %255 = load ptr, ptr %26, align 8, !tbaa !9
  %256 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %255, i32 0, i32 18
  %257 = load double, ptr %256, align 8, !tbaa !27
  %258 = fsub double %254, %257
  %259 = call double @llvm.fmuladd.f64(double %252, double %258, double %249)
  %260 = load ptr, ptr %26, align 8, !tbaa !9
  %261 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %260, i32 0, i32 21
  store double %259, ptr %261, align 8, !tbaa !36
  br label %262

262:                                              ; preds = %242, %241
  %263 = load ptr, ptr %20, align 8, !tbaa !9
  %264 = load double, ptr %263, align 8, !tbaa !11
  %265 = load double, ptr %21, align 8, !tbaa !11
  %266 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %264, double noundef %265)
  br i1 %266, label %267, label %270

267:                                              ; preds = %262
  %268 = load double, ptr %21, align 8, !tbaa !11
  %269 = load ptr, ptr %20, align 8, !tbaa !9
  store double %268, ptr %269, align 8, !tbaa !11
  br label %270

270:                                              ; preds = %267, %262
  %271 = load ptr, ptr %20, align 8, !tbaa !9
  %272 = load double, ptr %271, align 8, !tbaa !11
  %273 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %274 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %272, double noundef %273)
  br i1 %274, label %275, label %278

275:                                              ; preds = %270
  %276 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %277 = load ptr, ptr %20, align 8, !tbaa !9
  store double %276, ptr %277, align 8, !tbaa !11
  br label %278

278:                                              ; preds = %275, %270
  %279 = load ptr, ptr %26, align 8, !tbaa !9
  %280 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %279, i32 0, i32 0
  %281 = load i8, ptr %280, align 8, !tbaa !21, !range !33, !noundef !34
  %282 = trunc i8 %281 to i1
  br i1 %282, label %283, label %297

283:                                              ; preds = %278
  %284 = load ptr, ptr %20, align 8, !tbaa !9
  %285 = load double, ptr %284, align 8, !tbaa !11
  %286 = load ptr, ptr %26, align 8, !tbaa !9
  %287 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %286, i32 0, i32 20
  %288 = load double, ptr %287, align 8, !tbaa !35
  %289 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %285, double noundef %288)
  br i1 %289, label %327, label %290

290:                                              ; preds = %283
  %291 = load ptr, ptr %20, align 8, !tbaa !9
  %292 = load double, ptr %291, align 8, !tbaa !11
  %293 = load ptr, ptr %26, align 8, !tbaa !9
  %294 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %293, i32 0, i32 21
  %295 = load double, ptr %294, align 8, !tbaa !36
  %296 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %292, double noundef %295)
  br i1 %296, label %327, label %297

297:                                              ; preds = %290, %278
  %298 = load ptr, ptr %24, align 8, !tbaa !9
  %299 = load i64, ptr %298, align 8, !tbaa !5
  %300 = load i64, ptr @_ZN11alglib_implL13linmin_maxfevE, align 8, !tbaa !5
  %301 = sub nsw i64 %300, 1
  %302 = icmp sge i64 %299, %301
  br i1 %302, label %327, label %303

303:                                              ; preds = %297
  %304 = load ptr, ptr %26, align 8, !tbaa !9
  %305 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %304, i32 0, i32 2
  %306 = load i64, ptr %305, align 8, !tbaa !18
  %307 = icmp eq i64 %306, 0
  br i1 %307, label %327, label %308

308:                                              ; preds = %303
  %309 = load ptr, ptr %26, align 8, !tbaa !9
  %310 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %309, i32 0, i32 0
  %311 = load i8, ptr %310, align 8, !tbaa !21, !range !33, !noundef !34
  %312 = trunc i8 %311 to i1
  br i1 %312, label %313, label %332

313:                                              ; preds = %308
  %314 = load ptr, ptr %26, align 8, !tbaa !9
  %315 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %314, i32 0, i32 21
  %316 = load double, ptr %315, align 8, !tbaa !36
  %317 = load ptr, ptr %26, align 8, !tbaa !9
  %318 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %317, i32 0, i32 20
  %319 = load double, ptr %318, align 8, !tbaa !35
  %320 = fsub double %316, %319
  %321 = load double, ptr @_ZN11alglib_implL11linmin_xtolE, align 8, !tbaa !11
  %322 = load ptr, ptr %26, align 8, !tbaa !9
  %323 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %322, i32 0, i32 21
  %324 = load double, ptr %323, align 8, !tbaa !36
  %325 = fmul double %321, %324
  %326 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %320, double noundef %325)
  br i1 %326, label %327, label %332

327:                                              ; preds = %313, %303, %297, %290, %283
  %328 = load ptr, ptr %26, align 8, !tbaa !9
  %329 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %328, i32 0, i32 18
  %330 = load double, ptr %329, align 8, !tbaa !27
  %331 = load ptr, ptr %20, align 8, !tbaa !9
  store double %330, ptr %331, align 8, !tbaa !11
  br label %332

332:                                              ; preds = %327, %313, %308
  %333 = load ptr, ptr %16, align 8, !tbaa !9
  %334 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %333, i32 0, i32 4
  %335 = load ptr, ptr %334, align 8, !tbaa !19
  %336 = getelementptr inbounds double, ptr %335, i64 0
  %337 = load ptr, ptr %25, align 8, !tbaa !9
  %338 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %337, i32 0, i32 4
  %339 = load ptr, ptr %338, align 8, !tbaa !19
  %340 = getelementptr inbounds double, ptr %339, i64 0
  %341 = load i64, ptr %15, align 8, !tbaa !5
  %342 = sub nsw i64 %341, 1
  %343 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %342)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %336, i64 noundef 1, ptr noundef %340, i64 noundef 1, i64 noundef %343)
  %344 = load ptr, ptr %16, align 8, !tbaa !9
  %345 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %344, i32 0, i32 4
  %346 = load ptr, ptr %345, align 8, !tbaa !19
  %347 = getelementptr inbounds double, ptr %346, i64 0
  %348 = load ptr, ptr %19, align 8, !tbaa !9
  %349 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %348, i32 0, i32 4
  %350 = load ptr, ptr %349, align 8, !tbaa !19
  %351 = getelementptr inbounds double, ptr %350, i64 0
  %352 = load i64, ptr %15, align 8, !tbaa !5
  %353 = sub nsw i64 %352, 1
  %354 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %353)
  %355 = load ptr, ptr %20, align 8, !tbaa !9
  %356 = load double, ptr %355, align 8, !tbaa !11
  call void @_ZN11alglib_impl9ae_v_adddEPdlPKdlld(ptr noundef %347, i64 noundef 1, ptr noundef %351, i64 noundef 1, i64 noundef %354, double noundef %356)
  %357 = load ptr, ptr %27, align 8, !tbaa !9
  store i64 4, ptr %357, align 8, !tbaa !5
  store i32 1, ptr %34, align 4
  br label %868

358:                                              ; preds = %202
  %359 = load ptr, ptr %27, align 8, !tbaa !9
  %360 = load i64, ptr %359, align 8, !tbaa !5
  %361 = icmp eq i64 %360, 4
  br i1 %361, label %362, label %867

362:                                              ; preds = %358
  %363 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 0, ptr %363, align 8, !tbaa !5
  %364 = load ptr, ptr %24, align 8, !tbaa !9
  %365 = load i64, ptr %364, align 8, !tbaa !5
  %366 = add nsw i64 %365, 1
  %367 = load ptr, ptr %24, align 8, !tbaa !9
  store i64 %366, ptr %367, align 8, !tbaa !5
  %368 = load ptr, ptr %18, align 8, !tbaa !9
  %369 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %368, i32 0, i32 4
  %370 = load ptr, ptr %369, align 8, !tbaa !19
  %371 = getelementptr inbounds double, ptr %370, i64 0
  %372 = load ptr, ptr %19, align 8, !tbaa !9
  %373 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %372, i32 0, i32 4
  %374 = load ptr, ptr %373, align 8, !tbaa !19
  %375 = getelementptr inbounds double, ptr %374, i64 0
  %376 = load i64, ptr %15, align 8, !tbaa !5
  %377 = sub nsw i64 %376, 1
  %378 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %377)
  %379 = call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %371, i64 noundef 1, ptr noundef %375, i64 noundef 1, i64 noundef %378)
  store double %379, ptr %30, align 8, !tbaa !11
  %380 = load double, ptr %30, align 8, !tbaa !11
  %381 = load ptr, ptr %26, align 8, !tbaa !9
  %382 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %381, i32 0, i32 3
  store double %380, ptr %382, align 8, !tbaa !37
  %383 = load ptr, ptr %26, align 8, !tbaa !9
  %384 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %383, i32 0, i32 11
  %385 = load double, ptr %384, align 8, !tbaa !23
  %386 = load ptr, ptr %20, align 8, !tbaa !9
  %387 = load double, ptr %386, align 8, !tbaa !11
  %388 = load ptr, ptr %26, align 8, !tbaa !9
  %389 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %388, i32 0, i32 6
  %390 = load double, ptr %389, align 8, !tbaa !24
  %391 = call double @llvm.fmuladd.f64(double %387, double %390, double %385)
  %392 = load ptr, ptr %26, align 8, !tbaa !9
  %393 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %392, i32 0, i32 12
  store double %391, ptr %393, align 8, !tbaa !38
  %394 = load ptr, ptr %26, align 8, !tbaa !9
  %395 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %394, i32 0, i32 0
  %396 = load i8, ptr %395, align 8, !tbaa !21, !range !33, !noundef !34
  %397 = trunc i8 %396 to i1
  br i1 %397, label %398, label %412

398:                                              ; preds = %362
  %399 = load ptr, ptr %20, align 8, !tbaa !9
  %400 = load double, ptr %399, align 8, !tbaa !11
  %401 = load ptr, ptr %26, align 8, !tbaa !9
  %402 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %401, i32 0, i32 20
  %403 = load double, ptr %402, align 8, !tbaa !35
  %404 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %400, double noundef %403)
  br i1 %404, label %417, label %405

405:                                              ; preds = %398
  %406 = load ptr, ptr %20, align 8, !tbaa !9
  %407 = load double, ptr %406, align 8, !tbaa !11
  %408 = load ptr, ptr %26, align 8, !tbaa !9
  %409 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %408, i32 0, i32 21
  %410 = load double, ptr %409, align 8, !tbaa !36
  %411 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %407, double noundef %410)
  br i1 %411, label %417, label %412

412:                                              ; preds = %405, %362
  %413 = load ptr, ptr %26, align 8, !tbaa !9
  %414 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %413, i32 0, i32 2
  %415 = load i64, ptr %414, align 8, !tbaa !18
  %416 = icmp eq i64 %415, 0
  br i1 %416, label %417, label %419

417:                                              ; preds = %412, %405, %398
  %418 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 6, ptr %418, align 8, !tbaa !5
  br label %419

419:                                              ; preds = %417, %412
  %420 = load ptr, ptr %20, align 8, !tbaa !9
  %421 = load double, ptr %420, align 8, !tbaa !11
  %422 = load double, ptr %21, align 8, !tbaa !11
  %423 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %421, double noundef %422)
  br i1 %423, label %424, label %448

424:                                              ; preds = %419
  %425 = load ptr, ptr %17, align 8, !tbaa !9
  %426 = load double, ptr %425, align 8, !tbaa !11
  %427 = load ptr, ptr %26, align 8, !tbaa !9
  %428 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %427, i32 0, i32 11
  %429 = load double, ptr %428, align 8, !tbaa !23
  %430 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %426, double noundef %429)
  br i1 %430, label %431, label %448

431:                                              ; preds = %424
  %432 = load ptr, ptr %17, align 8, !tbaa !9
  %433 = load double, ptr %432, align 8, !tbaa !11
  %434 = load ptr, ptr %26, align 8, !tbaa !9
  %435 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %434, i32 0, i32 12
  %436 = load double, ptr %435, align 8, !tbaa !38
  %437 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %433, double noundef %436)
  br i1 %437, label %438, label %448

438:                                              ; preds = %431
  %439 = load ptr, ptr %26, align 8, !tbaa !9
  %440 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %439, i32 0, i32 3
  %441 = load double, ptr %440, align 8, !tbaa !37
  %442 = load ptr, ptr %26, align 8, !tbaa !9
  %443 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %442, i32 0, i32 6
  %444 = load double, ptr %443, align 8, !tbaa !24
  %445 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %441, double noundef %444)
  br i1 %445, label %446, label %448

446:                                              ; preds = %438
  %447 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 5, ptr %447, align 8, !tbaa !5
  br label %448

448:                                              ; preds = %446, %438, %431, %424, %419
  %449 = load ptr, ptr %20, align 8, !tbaa !9
  %450 = load double, ptr %449, align 8, !tbaa !11
  %451 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !11
  %452 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %450, double noundef %451)
  br i1 %452, label %453, label %477

453:                                              ; preds = %448
  %454 = load ptr, ptr %17, align 8, !tbaa !9
  %455 = load double, ptr %454, align 8, !tbaa !11
  %456 = load ptr, ptr %26, align 8, !tbaa !9
  %457 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %456, i32 0, i32 11
  %458 = load double, ptr %457, align 8, !tbaa !23
  %459 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %455, double noundef %458)
  br i1 %459, label %475, label %460

460:                                              ; preds = %453
  %461 = load ptr, ptr %17, align 8, !tbaa !9
  %462 = load double, ptr %461, align 8, !tbaa !11
  %463 = load ptr, ptr %26, align 8, !tbaa !9
  %464 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %463, i32 0, i32 12
  %465 = load double, ptr %464, align 8, !tbaa !38
  %466 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %462, double noundef %465)
  br i1 %466, label %475, label %467

467:                                              ; preds = %460
  %468 = load ptr, ptr %26, align 8, !tbaa !9
  %469 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %468, i32 0, i32 3
  %470 = load double, ptr %469, align 8, !tbaa !37
  %471 = load ptr, ptr %26, align 8, !tbaa !9
  %472 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %471, i32 0, i32 6
  %473 = load double, ptr %472, align 8, !tbaa !24
  %474 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %470, double noundef %473)
  br i1 %474, label %475, label %477

475:                                              ; preds = %467, %460, %453
  %476 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 4, ptr %476, align 8, !tbaa !5
  br label %477

477:                                              ; preds = %475, %467, %448
  %478 = load ptr, ptr %24, align 8, !tbaa !9
  %479 = load i64, ptr %478, align 8, !tbaa !5
  %480 = load i64, ptr @_ZN11alglib_implL13linmin_maxfevE, align 8, !tbaa !5
  %481 = icmp sge i64 %479, %480
  br i1 %481, label %482, label %484

482:                                              ; preds = %477
  %483 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 3, ptr %483, align 8, !tbaa !5
  br label %484

484:                                              ; preds = %482, %477
  %485 = load ptr, ptr %26, align 8, !tbaa !9
  %486 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %485, i32 0, i32 0
  %487 = load i8, ptr %486, align 8, !tbaa !21, !range !33, !noundef !34
  %488 = trunc i8 %487 to i1
  br i1 %488, label %489, label %505

489:                                              ; preds = %484
  %490 = load ptr, ptr %26, align 8, !tbaa !9
  %491 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %490, i32 0, i32 21
  %492 = load double, ptr %491, align 8, !tbaa !36
  %493 = load ptr, ptr %26, align 8, !tbaa !9
  %494 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %493, i32 0, i32 20
  %495 = load double, ptr %494, align 8, !tbaa !35
  %496 = fsub double %492, %495
  %497 = load double, ptr @_ZN11alglib_implL11linmin_xtolE, align 8, !tbaa !11
  %498 = load ptr, ptr %26, align 8, !tbaa !9
  %499 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %498, i32 0, i32 21
  %500 = load double, ptr %499, align 8, !tbaa !36
  %501 = fmul double %497, %500
  %502 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %496, double noundef %501)
  br i1 %502, label %503, label %505

503:                                              ; preds = %489
  %504 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 2, ptr %504, align 8, !tbaa !5
  br label %505

505:                                              ; preds = %503, %489, %484
  %506 = load ptr, ptr %17, align 8, !tbaa !9
  %507 = load double, ptr %506, align 8, !tbaa !11
  %508 = load ptr, ptr %26, align 8, !tbaa !9
  %509 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %508, i32 0, i32 11
  %510 = load double, ptr %509, align 8, !tbaa !23
  %511 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %507, double noundef %510)
  br i1 %511, label %512, label %534

512:                                              ; preds = %505
  %513 = load ptr, ptr %17, align 8, !tbaa !9
  %514 = load double, ptr %513, align 8, !tbaa !11
  %515 = load ptr, ptr %26, align 8, !tbaa !9
  %516 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %515, i32 0, i32 12
  %517 = load double, ptr %516, align 8, !tbaa !38
  %518 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %514, double noundef %517)
  br i1 %518, label %519, label %534

519:                                              ; preds = %512
  %520 = load ptr, ptr %26, align 8, !tbaa !9
  %521 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %520, i32 0, i32 3
  %522 = load double, ptr %521, align 8, !tbaa !37
  %523 = load ptr, ptr %28, align 8, !tbaa !9
  %524 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %522, ptr noundef %523)
  %525 = load double, ptr %22, align 8, !tbaa !11
  %526 = fneg double %525
  %527 = load ptr, ptr %26, align 8, !tbaa !9
  %528 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %527, i32 0, i32 5
  %529 = load double, ptr %528, align 8, !tbaa !20
  %530 = fmul double %526, %529
  %531 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %524, double noundef %530)
  br i1 %531, label %532, label %534

532:                                              ; preds = %519
  %533 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 1, ptr %533, align 8, !tbaa !5
  br label %534

534:                                              ; preds = %532, %519, %512, %505
  %535 = load ptr, ptr %23, align 8, !tbaa !9
  %536 = load i64, ptr %535, align 8, !tbaa !5
  %537 = icmp ne i64 %536, 0
  br i1 %537, label %538, label %599

538:                                              ; preds = %534
  %539 = load ptr, ptr %23, align 8, !tbaa !9
  %540 = load i64, ptr %539, align 8, !tbaa !5
  %541 = icmp eq i64 %540, 1
  br i1 %541, label %546, label %542

542:                                              ; preds = %538
  %543 = load ptr, ptr %23, align 8, !tbaa !9
  %544 = load i64, ptr %543, align 8, !tbaa !5
  %545 = icmp eq i64 %544, 5
  br i1 %545, label %546, label %597

546:                                              ; preds = %542, %538
  store double 0.000000e+00, ptr %30, align 8, !tbaa !11
  store i64 0, ptr %29, align 8, !tbaa !5
  br label %547

547:                                              ; preds = %581, %546
  %548 = load i64, ptr %29, align 8, !tbaa !5
  %549 = load i64, ptr %15, align 8, !tbaa !5
  %550 = sub nsw i64 %549, 1
  %551 = icmp sle i64 %548, %550
  br i1 %551, label %552, label %584

552:                                              ; preds = %547
  %553 = load double, ptr %30, align 8, !tbaa !11
  %554 = load ptr, ptr %25, align 8, !tbaa !9
  %555 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %554, i32 0, i32 4
  %556 = load ptr, ptr %555, align 8, !tbaa !19
  %557 = load i64, ptr %29, align 8, !tbaa !5
  %558 = getelementptr inbounds double, ptr %556, i64 %557
  %559 = load double, ptr %558, align 8, !tbaa !11
  %560 = load ptr, ptr %16, align 8, !tbaa !9
  %561 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %560, i32 0, i32 4
  %562 = load ptr, ptr %561, align 8, !tbaa !19
  %563 = load i64, ptr %29, align 8, !tbaa !5
  %564 = getelementptr inbounds double, ptr %562, i64 %563
  %565 = load double, ptr %564, align 8, !tbaa !11
  %566 = fsub double %559, %565
  %567 = load ptr, ptr %25, align 8, !tbaa !9
  %568 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %567, i32 0, i32 4
  %569 = load ptr, ptr %568, align 8, !tbaa !19
  %570 = load i64, ptr %29, align 8, !tbaa !5
  %571 = getelementptr inbounds double, ptr %569, i64 %570
  %572 = load double, ptr %571, align 8, !tbaa !11
  %573 = load ptr, ptr %16, align 8, !tbaa !9
  %574 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %573, i32 0, i32 4
  %575 = load ptr, ptr %574, align 8, !tbaa !19
  %576 = load i64, ptr %29, align 8, !tbaa !5
  %577 = getelementptr inbounds double, ptr %575, i64 %576
  %578 = load double, ptr %577, align 8, !tbaa !11
  %579 = fsub double %572, %578
  %580 = call double @llvm.fmuladd.f64(double %566, double %579, double %553)
  store double %580, ptr %30, align 8, !tbaa !11
  br label %581

581:                                              ; preds = %552
  %582 = load i64, ptr %29, align 8, !tbaa !5
  %583 = add nsw i64 %582, 1
  store i64 %583, ptr %29, align 8, !tbaa !5
  br label %547, !llvm.loop !39

584:                                              ; preds = %547
  %585 = load ptr, ptr %17, align 8, !tbaa !9
  %586 = load double, ptr %585, align 8, !tbaa !11
  %587 = load ptr, ptr %26, align 8, !tbaa !9
  %588 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %587, i32 0, i32 11
  %589 = load double, ptr %588, align 8, !tbaa !23
  %590 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %586, double noundef %589)
  br i1 %590, label %594, label %591

591:                                              ; preds = %584
  %592 = load double, ptr %30, align 8, !tbaa !11
  %593 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %592, double noundef 0.000000e+00)
  br i1 %593, label %594, label %596

594:                                              ; preds = %591, %584
  %595 = load ptr, ptr %23, align 8, !tbaa !9
  store i64 6, ptr %595, align 8, !tbaa !5
  br label %596

596:                                              ; preds = %594, %591
  br label %597

597:                                              ; preds = %596, %542
  %598 = load ptr, ptr %27, align 8, !tbaa !9
  store i64 0, ptr %598, align 8, !tbaa !5
  store i32 1, ptr %34, align 4
  br label %868

599:                                              ; preds = %534
  %600 = load ptr, ptr %26, align 8, !tbaa !9
  %601 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %600, i32 0, i32 1
  %602 = load i8, ptr %601, align 1, !tbaa !22, !range !33, !noundef !34
  %603 = trunc i8 %602 to i1
  br i1 %603, label %604, label %627

604:                                              ; preds = %599
  %605 = load ptr, ptr %17, align 8, !tbaa !9
  %606 = load double, ptr %605, align 8, !tbaa !11
  %607 = load ptr, ptr %26, align 8, !tbaa !9
  %608 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %607, i32 0, i32 12
  %609 = load double, ptr %608, align 8, !tbaa !38
  %610 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %606, double noundef %609)
  br i1 %610, label %611, label %627

611:                                              ; preds = %604
  %612 = load ptr, ptr %26, align 8, !tbaa !9
  %613 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %612, i32 0, i32 3
  %614 = load double, ptr %613, align 8, !tbaa !37
  %615 = load double, ptr @_ZN11alglib_implL11linmin_ftolE, align 8, !tbaa !11
  %616 = load double, ptr %22, align 8, !tbaa !11
  %617 = load ptr, ptr %28, align 8, !tbaa !9
  %618 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %615, double noundef %616, ptr noundef %617)
  %619 = load ptr, ptr %26, align 8, !tbaa !9
  %620 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %619, i32 0, i32 5
  %621 = load double, ptr %620, align 8, !tbaa !20
  %622 = fmul double %618, %621
  %623 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %614, double noundef %622)
  br i1 %623, label %624, label %627

624:                                              ; preds = %611
  %625 = load ptr, ptr %26, align 8, !tbaa !9
  %626 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %625, i32 0, i32 1
  store i8 0, ptr %626, align 1, !tbaa !22
  br label %627

627:                                              ; preds = %624, %611, %604, %599
  %628 = load ptr, ptr %26, align 8, !tbaa !9
  %629 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %628, i32 0, i32 1
  %630 = load i8, ptr %629, align 1, !tbaa !22, !range !33, !noundef !34
  %631 = trunc i8 %630 to i1
  br i1 %631, label %632, label %783

632:                                              ; preds = %627
  %633 = load ptr, ptr %17, align 8, !tbaa !9
  %634 = load double, ptr %633, align 8, !tbaa !11
  %635 = load ptr, ptr %26, align 8, !tbaa !9
  %636 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %635, i32 0, i32 14
  %637 = load double, ptr %636, align 8, !tbaa !28
  %638 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %634, double noundef %637)
  br i1 %638, label %639, label %783

639:                                              ; preds = %632
  %640 = load ptr, ptr %17, align 8, !tbaa !9
  %641 = load double, ptr %640, align 8, !tbaa !11
  %642 = load ptr, ptr %26, align 8, !tbaa !9
  %643 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %642, i32 0, i32 12
  %644 = load double, ptr %643, align 8, !tbaa !38
  %645 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %641, double noundef %644)
  br i1 %645, label %646, label %783

646:                                              ; preds = %639
  %647 = load ptr, ptr %17, align 8, !tbaa !9
  %648 = load double, ptr %647, align 8, !tbaa !11
  %649 = load ptr, ptr %20, align 8, !tbaa !9
  %650 = load double, ptr %649, align 8, !tbaa !11
  %651 = load ptr, ptr %26, align 8, !tbaa !9
  %652 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %651, i32 0, i32 6
  %653 = load double, ptr %652, align 8, !tbaa !24
  %654 = fneg double %650
  %655 = call double @llvm.fmuladd.f64(double %654, double %653, double %648)
  %656 = load ptr, ptr %26, align 8, !tbaa !9
  %657 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %656, i32 0, i32 13
  store double %655, ptr %657, align 8, !tbaa !40
  %658 = load ptr, ptr %26, align 8, !tbaa !9
  %659 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %658, i32 0, i32 14
  %660 = load double, ptr %659, align 8, !tbaa !28
  %661 = load ptr, ptr %26, align 8, !tbaa !9
  %662 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %661, i32 0, i32 18
  %663 = load double, ptr %662, align 8, !tbaa !27
  %664 = load ptr, ptr %26, align 8, !tbaa !9
  %665 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %664, i32 0, i32 6
  %666 = load double, ptr %665, align 8, !tbaa !24
  %667 = fneg double %663
  %668 = call double @llvm.fmuladd.f64(double %667, double %666, double %660)
  %669 = load ptr, ptr %26, align 8, !tbaa !9
  %670 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %669, i32 0, i32 15
  store double %668, ptr %670, align 8, !tbaa !41
  %671 = load ptr, ptr %26, align 8, !tbaa !9
  %672 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %671, i32 0, i32 16
  %673 = load double, ptr %672, align 8, !tbaa !31
  %674 = load ptr, ptr %26, align 8, !tbaa !9
  %675 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %674, i32 0, i32 19
  %676 = load double, ptr %675, align 8, !tbaa !30
  %677 = load ptr, ptr %26, align 8, !tbaa !9
  %678 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %677, i32 0, i32 6
  %679 = load double, ptr %678, align 8, !tbaa !24
  %680 = fneg double %676
  %681 = call double @llvm.fmuladd.f64(double %680, double %679, double %673)
  %682 = load ptr, ptr %26, align 8, !tbaa !9
  %683 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %682, i32 0, i32 17
  store double %681, ptr %683, align 8, !tbaa !42
  %684 = load ptr, ptr %26, align 8, !tbaa !9
  %685 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %684, i32 0, i32 3
  %686 = load double, ptr %685, align 8, !tbaa !37
  %687 = load ptr, ptr %26, align 8, !tbaa !9
  %688 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %687, i32 0, i32 6
  %689 = load double, ptr %688, align 8, !tbaa !24
  %690 = fsub double %686, %689
  %691 = load ptr, ptr %26, align 8, !tbaa !9
  %692 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %691, i32 0, i32 4
  store double %690, ptr %692, align 8, !tbaa !43
  %693 = load ptr, ptr %26, align 8, !tbaa !9
  %694 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %693, i32 0, i32 7
  %695 = load double, ptr %694, align 8, !tbaa !29
  %696 = load ptr, ptr %26, align 8, !tbaa !9
  %697 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %696, i32 0, i32 6
  %698 = load double, ptr %697, align 8, !tbaa !24
  %699 = fsub double %695, %698
  %700 = load ptr, ptr %26, align 8, !tbaa !9
  %701 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %700, i32 0, i32 8
  store double %699, ptr %701, align 8, !tbaa !44
  %702 = load ptr, ptr %26, align 8, !tbaa !9
  %703 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %702, i32 0, i32 9
  %704 = load double, ptr %703, align 8, !tbaa !32
  %705 = load ptr, ptr %26, align 8, !tbaa !9
  %706 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %705, i32 0, i32 6
  %707 = load double, ptr %706, align 8, !tbaa !24
  %708 = fsub double %704, %707
  %709 = load ptr, ptr %26, align 8, !tbaa !9
  %710 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %709, i32 0, i32 10
  store double %708, ptr %710, align 8, !tbaa !45
  %711 = load ptr, ptr %26, align 8, !tbaa !9
  %712 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %711, i32 0, i32 18
  %713 = load ptr, ptr %26, align 8, !tbaa !9
  %714 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %713, i32 0, i32 15
  %715 = load ptr, ptr %26, align 8, !tbaa !9
  %716 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %715, i32 0, i32 8
  %717 = load ptr, ptr %26, align 8, !tbaa !9
  %718 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %717, i32 0, i32 19
  %719 = load ptr, ptr %26, align 8, !tbaa !9
  %720 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %719, i32 0, i32 17
  %721 = load ptr, ptr %26, align 8, !tbaa !9
  %722 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %721, i32 0, i32 10
  %723 = load ptr, ptr %20, align 8, !tbaa !9
  %724 = load ptr, ptr %26, align 8, !tbaa !9
  %725 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %724, i32 0, i32 13
  %726 = load double, ptr %725, align 8, !tbaa !40
  %727 = load ptr, ptr %26, align 8, !tbaa !9
  %728 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %727, i32 0, i32 4
  %729 = load double, ptr %728, align 8, !tbaa !43
  %730 = load ptr, ptr %26, align 8, !tbaa !9
  %731 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %730, i32 0, i32 0
  %732 = load ptr, ptr %26, align 8, !tbaa !9
  %733 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %732, i32 0, i32 20
  %734 = load double, ptr %733, align 8, !tbaa !35
  %735 = load ptr, ptr %26, align 8, !tbaa !9
  %736 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %735, i32 0, i32 21
  %737 = load double, ptr %736, align 8, !tbaa !36
  %738 = load ptr, ptr %26, align 8, !tbaa !9
  %739 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %738, i32 0, i32 2
  %740 = load ptr, ptr %28, align 8, !tbaa !9
  call void @_ZN11alglib_implL13linmin_mcstepEPdS0_S0_S0_S0_S0_S0_ddPbddPlPNS_8ae_stateE(ptr noundef %712, ptr noundef %714, ptr noundef %716, ptr noundef %718, ptr noundef %720, ptr noundef %722, ptr noundef %723, double noundef %726, double noundef %729, ptr noundef %731, double noundef %734, double noundef %737, ptr noundef %739, ptr noundef %740)
  %741 = load ptr, ptr %26, align 8, !tbaa !9
  %742 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %741, i32 0, i32 15
  %743 = load double, ptr %742, align 8, !tbaa !41
  %744 = load ptr, ptr %26, align 8, !tbaa !9
  %745 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %744, i32 0, i32 18
  %746 = load double, ptr %745, align 8, !tbaa !27
  %747 = load ptr, ptr %26, align 8, !tbaa !9
  %748 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %747, i32 0, i32 6
  %749 = load double, ptr %748, align 8, !tbaa !24
  %750 = call double @llvm.fmuladd.f64(double %746, double %749, double %743)
  %751 = load ptr, ptr %26, align 8, !tbaa !9
  %752 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %751, i32 0, i32 14
  store double %750, ptr %752, align 8, !tbaa !28
  %753 = load ptr, ptr %26, align 8, !tbaa !9
  %754 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %753, i32 0, i32 17
  %755 = load double, ptr %754, align 8, !tbaa !42
  %756 = load ptr, ptr %26, align 8, !tbaa !9
  %757 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %756, i32 0, i32 19
  %758 = load double, ptr %757, align 8, !tbaa !30
  %759 = load ptr, ptr %26, align 8, !tbaa !9
  %760 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %759, i32 0, i32 6
  %761 = load double, ptr %760, align 8, !tbaa !24
  %762 = call double @llvm.fmuladd.f64(double %758, double %761, double %755)
  %763 = load ptr, ptr %26, align 8, !tbaa !9
  %764 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %763, i32 0, i32 16
  store double %762, ptr %764, align 8, !tbaa !31
  %765 = load ptr, ptr %26, align 8, !tbaa !9
  %766 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %765, i32 0, i32 8
  %767 = load double, ptr %766, align 8, !tbaa !44
  %768 = load ptr, ptr %26, align 8, !tbaa !9
  %769 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %768, i32 0, i32 6
  %770 = load double, ptr %769, align 8, !tbaa !24
  %771 = fadd double %767, %770
  %772 = load ptr, ptr %26, align 8, !tbaa !9
  %773 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %772, i32 0, i32 7
  store double %771, ptr %773, align 8, !tbaa !29
  %774 = load ptr, ptr %26, align 8, !tbaa !9
  %775 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %774, i32 0, i32 10
  %776 = load double, ptr %775, align 8, !tbaa !45
  %777 = load ptr, ptr %26, align 8, !tbaa !9
  %778 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %777, i32 0, i32 6
  %779 = load double, ptr %778, align 8, !tbaa !24
  %780 = fadd double %776, %779
  %781 = load ptr, ptr %26, align 8, !tbaa !9
  %782 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %781, i32 0, i32 9
  store double %780, ptr %782, align 8, !tbaa !32
  br label %813

783:                                              ; preds = %639, %632, %627
  %784 = load ptr, ptr %26, align 8, !tbaa !9
  %785 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %784, i32 0, i32 18
  %786 = load ptr, ptr %26, align 8, !tbaa !9
  %787 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %786, i32 0, i32 14
  %788 = load ptr, ptr %26, align 8, !tbaa !9
  %789 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %788, i32 0, i32 7
  %790 = load ptr, ptr %26, align 8, !tbaa !9
  %791 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %790, i32 0, i32 19
  %792 = load ptr, ptr %26, align 8, !tbaa !9
  %793 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %792, i32 0, i32 16
  %794 = load ptr, ptr %26, align 8, !tbaa !9
  %795 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %794, i32 0, i32 9
  %796 = load ptr, ptr %20, align 8, !tbaa !9
  %797 = load ptr, ptr %17, align 8, !tbaa !9
  %798 = load double, ptr %797, align 8, !tbaa !11
  %799 = load ptr, ptr %26, align 8, !tbaa !9
  %800 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %799, i32 0, i32 3
  %801 = load double, ptr %800, align 8, !tbaa !37
  %802 = load ptr, ptr %26, align 8, !tbaa !9
  %803 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %802, i32 0, i32 0
  %804 = load ptr, ptr %26, align 8, !tbaa !9
  %805 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %804, i32 0, i32 20
  %806 = load double, ptr %805, align 8, !tbaa !35
  %807 = load ptr, ptr %26, align 8, !tbaa !9
  %808 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %807, i32 0, i32 21
  %809 = load double, ptr %808, align 8, !tbaa !36
  %810 = load ptr, ptr %26, align 8, !tbaa !9
  %811 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %810, i32 0, i32 2
  %812 = load ptr, ptr %28, align 8, !tbaa !9
  call void @_ZN11alglib_implL13linmin_mcstepEPdS0_S0_S0_S0_S0_S0_ddPbddPlPNS_8ae_stateE(ptr noundef %785, ptr noundef %787, ptr noundef %789, ptr noundef %791, ptr noundef %793, ptr noundef %795, ptr noundef %796, double noundef %798, double noundef %801, ptr noundef %803, double noundef %806, double noundef %809, ptr noundef %811, ptr noundef %812)
  br label %813

813:                                              ; preds = %783, %646
  %814 = load ptr, ptr %26, align 8, !tbaa !9
  %815 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %814, i32 0, i32 0
  %816 = load i8, ptr %815, align 8, !tbaa !21, !range !33, !noundef !34
  %817 = trunc i8 %816 to i1
  br i1 %817, label %818, label %865

818:                                              ; preds = %813
  %819 = load ptr, ptr %26, align 8, !tbaa !9
  %820 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %819, i32 0, i32 19
  %821 = load double, ptr %820, align 8, !tbaa !30
  %822 = load ptr, ptr %26, align 8, !tbaa !9
  %823 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %822, i32 0, i32 18
  %824 = load double, ptr %823, align 8, !tbaa !27
  %825 = fsub double %821, %824
  %826 = load ptr, ptr %28, align 8, !tbaa !9
  %827 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %825, ptr noundef %826)
  %828 = load double, ptr %32, align 8, !tbaa !11
  %829 = load ptr, ptr %26, align 8, !tbaa !9
  %830 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %829, i32 0, i32 23
  %831 = load double, ptr %830, align 8, !tbaa !26
  %832 = fmul double %828, %831
  %833 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %827, double noundef %832)
  br i1 %833, label %834, label %848

834:                                              ; preds = %818
  %835 = load ptr, ptr %26, align 8, !tbaa !9
  %836 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %835, i32 0, i32 18
  %837 = load double, ptr %836, align 8, !tbaa !27
  %838 = load double, ptr %31, align 8, !tbaa !11
  %839 = load ptr, ptr %26, align 8, !tbaa !9
  %840 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %839, i32 0, i32 19
  %841 = load double, ptr %840, align 8, !tbaa !30
  %842 = load ptr, ptr %26, align 8, !tbaa !9
  %843 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %842, i32 0, i32 18
  %844 = load double, ptr %843, align 8, !tbaa !27
  %845 = fsub double %841, %844
  %846 = call double @llvm.fmuladd.f64(double %838, double %845, double %837)
  %847 = load ptr, ptr %20, align 8, !tbaa !9
  store double %846, ptr %847, align 8, !tbaa !11
  br label %848

848:                                              ; preds = %834, %818
  %849 = load ptr, ptr %26, align 8, !tbaa !9
  %850 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %849, i32 0, i32 22
  %851 = load double, ptr %850, align 8, !tbaa !25
  %852 = load ptr, ptr %26, align 8, !tbaa !9
  %853 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %852, i32 0, i32 23
  store double %851, ptr %853, align 8, !tbaa !26
  %854 = load ptr, ptr %26, align 8, !tbaa !9
  %855 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %854, i32 0, i32 19
  %856 = load double, ptr %855, align 8, !tbaa !30
  %857 = load ptr, ptr %26, align 8, !tbaa !9
  %858 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %857, i32 0, i32 18
  %859 = load double, ptr %858, align 8, !tbaa !27
  %860 = fsub double %856, %859
  %861 = load ptr, ptr %28, align 8, !tbaa !9
  %862 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %860, ptr noundef %861)
  %863 = load ptr, ptr %26, align 8, !tbaa !9
  %864 = getelementptr inbounds %"struct.alglib_impl::linminstate", ptr %863, i32 0, i32 22
  store double %862, ptr %864, align 8, !tbaa !25
  br label %865

865:                                              ; preds = %848, %813
  %866 = load ptr, ptr %27, align 8, !tbaa !9
  store i64 3, ptr %866, align 8, !tbaa !5
  br label %58, !llvm.loop !16

867:                                              ; preds = %358
  br label %58, !llvm.loop !16

868:                                              ; preds = %597, %332, %134, %112, %78
  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
  ret void
}

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL13linmin_mcstepEPdS0_S0_S0_S0_S0_S0_ddPbddPlPNS_8ae_stateE(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, ptr noundef, double noundef, double noundef, 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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !12, i64 184}
!14 = !{!"_ZTSN11alglib_impl11linminstateE", !15, i64 0, !15, i64 1, !6, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !12, i64 40, !12, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !12, i64 80, !12, i64 88, !12, i64 96, !12, i64 104, !12, i64 112, !12, i64 120, !12, i64 128, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184}
!15 = !{!"bool", !7, i64 0}
!16 = distinct !{!16, !17}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!14, !6, i64 8}
!19 = !{!7, !7, i64 0}
!20 = !{!14, !12, i64 32}
!21 = !{!14, !15, i64 0}
!22 = !{!14, !15, i64 1}
!23 = !{!14, !12, i64 80}
!24 = !{!14, !12, i64 40}
!25 = !{!14, !12, i64 168}
!26 = !{!14, !12, i64 176}
!27 = !{!14, !12, i64 136}
!28 = !{!14, !12, i64 104}
!29 = !{!14, !12, i64 48}
!30 = !{!14, !12, i64 144}
!31 = !{!14, !12, i64 120}
!32 = !{!14, !12, i64 64}
!33 = !{i8 0, i8 2}
!34 = !{}
!35 = !{!14, !12, i64 152}
!36 = !{!14, !12, i64 160}
!37 = !{!14, !12, i64 16}
!38 = !{!14, !12, i64 88}
!39 = distinct !{!39, !17}
!40 = !{!14, !12, i64 96}
!41 = !{!14, !12, i64 112}
!42 = !{!14, !12, i64 128}
!43 = !{!14, !12, i64 24}
!44 = !{!14, !12, i64 56}
!45 = !{!14, !12, i64 72}


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

@_ZN11alglib_implL16linmin_defstpmaxE = external hidden local_unnamed_addr global double, align 8
@_ZN11alglib_implL13linmin_stpminE = external hidden local_unnamed_addr global double, align 8
@_ZN11alglib_implL11linmin_ftolE = external hidden local_unnamed_addr global double, align 8
@_ZN11alglib_implL11linmin_xtolE = external hidden local_unnamed_addr global double, align 8
@_ZN11alglib_implL13linmin_maxfevE = external hidden local_unnamed_addr global i64, align 8

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

declare noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

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

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

declare noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef, i64 noundef) local_unnamed_addr #0

declare noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

declare void @_ZN11alglib_impl9ae_v_adddEPdlPKdlld(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, double noundef) local_unnamed_addr #0

declare void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl6mcsrchElPNS_9ae_vectorEPdS1_S1_S2_ddPlS3_S1_PNS_11linminstateES3_PNS_8ae_stateE(i64 noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr noundef %5, double noundef %6, double noundef %7, ptr nocapture noundef %8, ptr nocapture noundef %9, ptr nocapture noundef readonly %10, ptr noundef %11, ptr nocapture noundef %12, ptr noundef %13) local_unnamed_addr #2 {
  %15 = getelementptr inbounds i8, ptr %11, i64 184
  store double 4.000000e+00, ptr %15, align 8, !tbaa !5
  %16 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %6, double noundef 0.000000e+00)
  %17 = load double, ptr @_ZN11alglib_implL16linmin_defstpmaxE, align 8
  %.0 = select i1 %16, double %17, double %6
  %18 = load double, ptr %5, align 8, !tbaa !12
  %19 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  %20 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %18, double noundef %19)
  br i1 %20, label %21, label %._crit_edge289

._crit_edge289:                                   ; preds = %14
  %.pre = load double, ptr %5, align 8, !tbaa !12
  br label %23

21:                                               ; preds = %14
  %22 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  store double %22, ptr %5, align 8, !tbaa !12
  br label %23

23:                                               ; preds = %._crit_edge289, %21
  %24 = phi double [ %.pre, %._crit_edge289 ], [ %22, %21 ]
  %25 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %24, double noundef %.0)
  br i1 %25, label %26, label %27

26:                                               ; preds = %23
  store double %.0, ptr %5, align 8, !tbaa !12
  br label %27

27:                                               ; preds = %26, %23
  %.pr = load i64, ptr %12, align 8, !tbaa !13
  %28 = getelementptr inbounds i8, ptr %3, i64 56
  %29 = getelementptr inbounds i8, ptr %4, i64 56
  %30 = add nsw i64 %0, -1
  %31 = getelementptr inbounds i8, ptr %11, i64 16
  %32 = getelementptr inbounds i8, ptr %11, i64 80
  %33 = getelementptr inbounds i8, ptr %11, i64 40
  %34 = getelementptr inbounds i8, ptr %11, i64 88
  %35 = getelementptr inbounds i8, ptr %11, i64 152
  %36 = getelementptr inbounds i8, ptr %11, i64 160
  %37 = getelementptr inbounds i8, ptr %11, i64 8
  %38 = fneg double %7
  %39 = getelementptr inbounds i8, ptr %11, i64 32
  %40 = getelementptr inbounds i8, ptr %11, i64 1
  %41 = getelementptr inbounds i8, ptr %11, i64 104
  %42 = getelementptr inbounds i8, ptr %11, i64 136
  %43 = getelementptr inbounds i8, ptr %11, i64 48
  %44 = getelementptr inbounds i8, ptr %11, i64 144
  %45 = getelementptr inbounds i8, ptr %11, i64 120
  %46 = getelementptr inbounds i8, ptr %11, i64 64
  %47 = getelementptr inbounds i8, ptr %11, i64 96
  %48 = getelementptr inbounds i8, ptr %11, i64 112
  %49 = getelementptr inbounds i8, ptr %11, i64 128
  %50 = getelementptr inbounds i8, ptr %11, i64 24
  %51 = getelementptr inbounds i8, ptr %11, i64 56
  %52 = getelementptr inbounds i8, ptr %11, i64 72
  %53 = getelementptr inbounds i8, ptr %11, i64 176
  %54 = getelementptr inbounds i8, ptr %11, i64 168
  %55 = icmp slt i64 %0, 1
  %56 = getelementptr inbounds i8, ptr %10, i64 56
  %57 = getelementptr inbounds i8, ptr %1, i64 56
  br label %.outer

.outer:                                           ; preds = %.outer.backedge, %27
  %.ph = phi i64 [ %.pr, %27 ], [ %.sink292, %.outer.backedge ]
  switch i64 %.ph, label %.outer.split.preheader [
    i64 0, label %.outer.backedge
    i64 2, label %58
    i64 3, label %105
    i64 4, label %171
  ]

.outer.split.preheader:                           ; preds = %.outer
  unreachable

58:                                               ; preds = %.outer
  store i64 1, ptr %37, align 8, !tbaa !14
  store i64 0, ptr %8, align 8, !tbaa !13
  %59 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  %60 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %.0, double noundef %59)
  br i1 %60, label %61, label %64

61:                                               ; preds = %58
  %62 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %.0, double noundef 0.000000e+00)
  br i1 %62, label %63, label %64

63:                                               ; preds = %61
  store i64 5, ptr %8, align 8, !tbaa !13
  store double %.0, ptr %5, align 8, !tbaa !12
  store i64 0, ptr %12, align 8, !tbaa !13
  br label %390

64:                                               ; preds = %61, %58
  br i1 %55, label %84, label %65

65:                                               ; preds = %64
  %66 = load double, ptr %5, align 8, !tbaa !12
  %67 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %66, double noundef 0.000000e+00)
  br i1 %67, label %84, label %68

68:                                               ; preds = %65
  %69 = load double, ptr @_ZN11alglib_implL11linmin_ftolE, align 8, !tbaa !12
  %70 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %69, double noundef 0.000000e+00)
  br i1 %70, label %84, label %71

71:                                               ; preds = %68
  %72 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %7, double noundef 0.000000e+00)
  br i1 %72, label %84, label %73

73:                                               ; preds = %71
  %74 = load double, ptr @_ZN11alglib_implL11linmin_xtolE, align 8, !tbaa !12
  %75 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %74, double noundef 0.000000e+00)
  br i1 %75, label %84, label %76

76:                                               ; preds = %73
  %77 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  %78 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %77, double noundef 0.000000e+00)
  br i1 %78, label %84, label %79

79:                                               ; preds = %76
  %80 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  %81 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %.0, double noundef %80)
  %82 = load i64, ptr @_ZN11alglib_implL13linmin_maxfevE, align 8
  %83 = icmp slt i64 %82, 1
  %or.cond = select i1 %81, i1 true, i1 %83
  br i1 %or.cond, label %84, label %85

84:                                               ; preds = %79, %76, %73, %71, %68, %65, %64
  store i64 0, ptr %12, align 8, !tbaa !13
  br label %390

85:                                               ; preds = %79
  %86 = load ptr, ptr %28, align 8, !tbaa !15
  %87 = load ptr, ptr %29, align 8, !tbaa !15
  %88 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %30)
  %89 = tail call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %86, i64 noundef 1, ptr noundef %87, i64 noundef 1, i64 noundef %88)
  store double %89, ptr %39, align 8, !tbaa !16
  %90 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %89, double noundef 0.000000e+00)
  br i1 %90, label %91, label %92

91:                                               ; preds = %85
  store i64 0, ptr %12, align 8, !tbaa !13
  store double 0.000000e+00, ptr %5, align 8, !tbaa !12
  br label %390

92:                                               ; preds = %85
  store i8 0, ptr %11, align 8, !tbaa !17
  store i8 1, ptr %40, align 1, !tbaa !18
  store i64 0, ptr %9, align 8, !tbaa !13
  %93 = load double, ptr %2, align 8, !tbaa !12
  store double %93, ptr %32, align 8, !tbaa !19
  %94 = load double, ptr @_ZN11alglib_implL11linmin_ftolE, align 8, !tbaa !12
  %95 = load double, ptr %39, align 8, !tbaa !16
  %96 = fmul double %94, %95
  store double %96, ptr %33, align 8, !tbaa !20
  %97 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  %98 = fsub double %.0, %97
  store double %98, ptr %54, align 8, !tbaa !21
  %99 = fmul double %98, 2.000000e+00
  store double %99, ptr %53, align 8, !tbaa !22
  %100 = load ptr, ptr %56, align 8, !tbaa !15
  %101 = load ptr, ptr %57, align 8, !tbaa !15
  %102 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %30)
  tail call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %100, i64 noundef 1, ptr noundef %101, i64 noundef 1, i64 noundef %102)
  %103 = load double, ptr %32, align 8, !tbaa !19
  store double %103, ptr %41, align 8, !tbaa !23
  %104 = load double, ptr %39, align 8, !tbaa !16
  store double %104, ptr %43, align 8, !tbaa !24
  store <2 x double> zeroinitializer, ptr %42, align 8, !tbaa !12
  store double %103, ptr %45, align 8, !tbaa !25
  store double %104, ptr %46, align 8, !tbaa !26
  br label %.outer.backedge

105:                                              ; preds = %.outer
  %106 = load i8, ptr %11, align 8, !tbaa !17, !range !27, !noundef !28
  %107 = trunc nuw i8 %106 to i1
  %108 = load double, ptr %42, align 8, !tbaa !29
  br i1 %107, label %109, label %118

109:                                              ; preds = %105
  %110 = load double, ptr %44, align 8, !tbaa !30
  %111 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %108, double noundef %110)
  br i1 %111, label %112, label %115

112:                                              ; preds = %109
  %113 = load double, ptr %42, align 8, !tbaa !29
  store double %113, ptr %35, align 8, !tbaa !31
  %114 = load double, ptr %44, align 8, !tbaa !30
  br label %123

115:                                              ; preds = %109
  %116 = load double, ptr %44, align 8, !tbaa !30
  store double %116, ptr %35, align 8, !tbaa !31
  %117 = load double, ptr %42, align 8, !tbaa !29
  br label %123

118:                                              ; preds = %105
  store double %108, ptr %35, align 8, !tbaa !31
  %119 = load double, ptr %5, align 8, !tbaa !12
  %120 = load double, ptr %15, align 8, !tbaa !5
  %121 = fsub double %119, %108
  %122 = tail call double @llvm.fmuladd.f64(double %120, double %121, double %119)
  br label %123

123:                                              ; preds = %112, %115, %118
  %.sink = phi double [ %114, %112 ], [ %117, %115 ], [ %122, %118 ]
  store double %.sink, ptr %36, align 8, !tbaa !32
  %124 = load double, ptr %5, align 8, !tbaa !12
  %125 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %124, double noundef %.0)
  br i1 %125, label %126, label %._crit_edge290

._crit_edge290:                                   ; preds = %123
  %.pre291 = load double, ptr %5, align 8, !tbaa !12
  br label %127

126:                                              ; preds = %123
  store double %.0, ptr %5, align 8, !tbaa !12
  br label %127

127:                                              ; preds = %._crit_edge290, %126
  %128 = phi double [ %.pre291, %._crit_edge290 ], [ %.0, %126 ]
  %129 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  %130 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %128, double noundef %129)
  br i1 %130, label %131, label %133

131:                                              ; preds = %127
  %132 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  store double %132, ptr %5, align 8, !tbaa !12
  br label %133

133:                                              ; preds = %131, %127
  %134 = load i8, ptr %11, align 8, !tbaa !17, !range !27, !noundef !28
  %135 = trunc nuw i8 %134 to i1
  br i1 %135, label %136, label %144

136:                                              ; preds = %133
  %137 = load double, ptr %5, align 8, !tbaa !12
  %138 = load double, ptr %35, align 8, !tbaa !31
  %139 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %137, double noundef %138)
  br i1 %139, label %161, label %140

140:                                              ; preds = %136
  %141 = load double, ptr %5, align 8, !tbaa !12
  %142 = load double, ptr %36, align 8, !tbaa !32
  %143 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %141, double noundef %142)
  br i1 %143, label %161, label %144

144:                                              ; preds = %140, %133
  %145 = load i64, ptr %9, align 8, !tbaa !13
  %146 = load i64, ptr @_ZN11alglib_implL13linmin_maxfevE, align 8, !tbaa !13
  %147 = add nsw i64 %146, -1
  %.not281 = icmp slt i64 %145, %147
  br i1 %.not281, label %148, label %161

148:                                              ; preds = %144
  %149 = load i64, ptr %37, align 8, !tbaa !14
  %150 = icmp eq i64 %149, 0
  br i1 %150, label %161, label %151

151:                                              ; preds = %148
  %152 = load i8, ptr %11, align 8, !tbaa !17, !range !27, !noundef !28
  %153 = trunc nuw i8 %152 to i1
  br i1 %153, label %154, label %163

154:                                              ; preds = %151
  %155 = load double, ptr %36, align 8, !tbaa !32
  %156 = load double, ptr %35, align 8, !tbaa !31
  %157 = fsub double %155, %156
  %158 = load double, ptr @_ZN11alglib_implL11linmin_xtolE, align 8, !tbaa !12
  %159 = fmul double %155, %158
  %160 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %157, double noundef %159)
  br i1 %160, label %161, label %163

161:                                              ; preds = %154, %148, %144, %140, %136
  %162 = load double, ptr %42, align 8, !tbaa !29
  store double %162, ptr %5, align 8, !tbaa !12
  br label %163

163:                                              ; preds = %161, %154, %151
  %164 = load ptr, ptr %57, align 8, !tbaa !15
  %165 = load ptr, ptr %56, align 8, !tbaa !15
  %166 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %30)
  tail call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %164, i64 noundef 1, ptr noundef %165, i64 noundef 1, i64 noundef %166)
  %167 = load ptr, ptr %57, align 8, !tbaa !15
  %168 = load ptr, ptr %29, align 8, !tbaa !15
  %169 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %30)
  %170 = load double, ptr %5, align 8, !tbaa !12
  tail call void @_ZN11alglib_impl9ae_v_adddEPdlPKdlld(ptr noundef %167, i64 noundef 1, ptr noundef %168, i64 noundef 1, i64 noundef %169, double noundef %170)
  store i64 4, ptr %12, align 8, !tbaa !13
  br label %390

171:                                              ; preds = %.outer
  store i64 0, ptr %8, align 8, !tbaa !13
  %172 = load i64, ptr %9, align 8, !tbaa !13
  %173 = add nsw i64 %172, 1
  store i64 %173, ptr %9, align 8, !tbaa !13
  %174 = load ptr, ptr %28, align 8, !tbaa !15
  %175 = load ptr, ptr %29, align 8, !tbaa !15
  %176 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %30)
  %177 = tail call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %174, i64 noundef 1, ptr noundef %175, i64 noundef 1, i64 noundef %176)
  store double %177, ptr %31, align 8, !tbaa !33
  %178 = load double, ptr %32, align 8, !tbaa !19
  %179 = load double, ptr %5, align 8, !tbaa !12
  %180 = load double, ptr %33, align 8, !tbaa !20
  %181 = tail call double @llvm.fmuladd.f64(double %179, double %180, double %178)
  store double %181, ptr %34, align 8, !tbaa !34
  %182 = load i8, ptr %11, align 8, !tbaa !17, !range !27, !noundef !28
  %183 = trunc nuw i8 %182 to i1
  br i1 %183, label %184, label %192

184:                                              ; preds = %171
  %185 = load double, ptr %5, align 8, !tbaa !12
  %186 = load double, ptr %35, align 8, !tbaa !31
  %187 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %185, double noundef %186)
  br i1 %187, label %195, label %188

188:                                              ; preds = %184
  %189 = load double, ptr %5, align 8, !tbaa !12
  %190 = load double, ptr %36, align 8, !tbaa !32
  %191 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %189, double noundef %190)
  br i1 %191, label %195, label %192

192:                                              ; preds = %188, %171
  %193 = load i64, ptr %37, align 8, !tbaa !14
  %194 = icmp eq i64 %193, 0
  br i1 %194, label %195, label %196

195:                                              ; preds = %192, %188, %184
  store i64 6, ptr %8, align 8, !tbaa !13
  br label %196

196:                                              ; preds = %195, %192
  %197 = load double, ptr %5, align 8, !tbaa !12
  %198 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %197, double noundef %.0)
  br i1 %198, label %199, label %212

199:                                              ; preds = %196
  %200 = load double, ptr %2, align 8, !tbaa !12
  %201 = load double, ptr %32, align 8, !tbaa !19
  %202 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %200, double noundef %201)
  br i1 %202, label %203, label %212

203:                                              ; preds = %199
  %204 = load double, ptr %2, align 8, !tbaa !12
  %205 = load double, ptr %34, align 8, !tbaa !34
  %206 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %204, double noundef %205)
  br i1 %206, label %207, label %212

207:                                              ; preds = %203
  %208 = load double, ptr %31, align 8, !tbaa !33
  %209 = load double, ptr %33, align 8, !tbaa !20
  %210 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %208, double noundef %209)
  br i1 %210, label %211, label %212

211:                                              ; preds = %207
  store i64 5, ptr %8, align 8, !tbaa !13
  br label %212

212:                                              ; preds = %211, %207, %203, %199, %196
  %213 = load double, ptr %5, align 8, !tbaa !12
  %214 = load double, ptr @_ZN11alglib_implL13linmin_stpminE, align 8, !tbaa !12
  %215 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %213, double noundef %214)
  br i1 %215, label %216, label %229

216:                                              ; preds = %212
  %217 = load double, ptr %2, align 8, !tbaa !12
  %218 = load double, ptr %32, align 8, !tbaa !19
  %219 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %217, double noundef %218)
  br i1 %219, label %228, label %220

220:                                              ; preds = %216
  %221 = load double, ptr %2, align 8, !tbaa !12
  %222 = load double, ptr %34, align 8, !tbaa !34
  %223 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %221, double noundef %222)
  br i1 %223, label %228, label %224

224:                                              ; preds = %220
  %225 = load double, ptr %31, align 8, !tbaa !33
  %226 = load double, ptr %33, align 8, !tbaa !20
  %227 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %225, double noundef %226)
  br i1 %227, label %228, label %229

228:                                              ; preds = %224, %220, %216
  store i64 4, ptr %8, align 8, !tbaa !13
  br label %229

229:                                              ; preds = %228, %224, %212
  %230 = load i64, ptr %9, align 8, !tbaa !13
  %231 = load i64, ptr @_ZN11alglib_implL13linmin_maxfevE, align 8, !tbaa !13
  %.not = icmp slt i64 %230, %231
  br i1 %.not, label %233, label %232

232:                                              ; preds = %229
  store i64 3, ptr %8, align 8, !tbaa !13
  br label %233

233:                                              ; preds = %232, %229
  %234 = load i8, ptr %11, align 8, !tbaa !17, !range !27, !noundef !28
  %235 = trunc nuw i8 %234 to i1
  br i1 %235, label %236, label %244

236:                                              ; preds = %233
  %237 = load double, ptr %36, align 8, !tbaa !32
  %238 = load double, ptr %35, align 8, !tbaa !31
  %239 = fsub double %237, %238
  %240 = load double, ptr @_ZN11alglib_implL11linmin_xtolE, align 8, !tbaa !12
  %241 = fmul double %237, %240
  %242 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %239, double noundef %241)
  br i1 %242, label %243, label %244

243:                                              ; preds = %236
  store i64 2, ptr %8, align 8, !tbaa !13
  br label %244

244:                                              ; preds = %243, %236, %233
  %245 = load double, ptr %2, align 8, !tbaa !12
  %246 = load double, ptr %32, align 8, !tbaa !19
  %247 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %245, double noundef %246)
  br i1 %247, label %248, label %258

248:                                              ; preds = %244
  %249 = load double, ptr %2, align 8, !tbaa !12
  %250 = load double, ptr %34, align 8, !tbaa !34
  %251 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %249, double noundef %250)
  br i1 %251, label %252, label %258

252:                                              ; preds = %248
  %253 = load double, ptr %31, align 8, !tbaa !33
  %254 = tail call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %253, ptr noundef %13)
  %255 = load double, ptr %39, align 8, !tbaa !16
  %256 = fmul double %255, %38
  %257 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %254, double noundef %256)
  br i1 %257, label %.thread, label %258

.thread:                                          ; preds = %252
  store i64 1, ptr %8, align 8, !tbaa !13
  br label %.loopexit283

258:                                              ; preds = %252, %248, %244
  %.pr282 = load i64, ptr %8, align 8, !tbaa !13
  switch i64 %.pr282, label %.loopexit [
    i64 0, label %304
    i64 1, label %.loopexit283
    i64 5, label %.loopexit283
  ]

.loopexit283:                                     ; preds = %258, %258, %.thread
  %.not280.not286 = icmp sgt i64 %0, 0
  br i1 %.not280.not286, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.loopexit283
  %259 = load ptr, ptr %56, align 8, !tbaa !15
  %260 = load ptr, ptr %57, align 8, !tbaa !15
  %xtraiter = and i64 %0, 3
  %261 = icmp ult i64 %0, 4
  br i1 %261, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

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

262:                                              ; preds = %262, %.lr.ph.new
  %.0274288 = phi i64 [ 0, %.lr.ph.new ], [ %290, %262 ]
  %.0275287 = phi double [ 0.000000e+00, %.lr.ph.new ], [ %289, %262 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %262 ]
  %263 = getelementptr inbounds double, ptr %259, i64 %.0274288
  %264 = load double, ptr %263, align 8, !tbaa !12
  %265 = getelementptr inbounds double, ptr %260, i64 %.0274288
  %266 = load double, ptr %265, align 8, !tbaa !12
  %267 = fsub double %264, %266
  %268 = tail call double @llvm.fmuladd.f64(double %267, double %267, double %.0275287)
  %269 = or disjoint i64 %.0274288, 1
  %270 = getelementptr inbounds double, ptr %259, i64 %269
  %271 = load double, ptr %270, align 8, !tbaa !12
  %272 = getelementptr inbounds double, ptr %260, i64 %269
  %273 = load double, ptr %272, align 8, !tbaa !12
  %274 = fsub double %271, %273
  %275 = tail call double @llvm.fmuladd.f64(double %274, double %274, double %268)
  %276 = or disjoint i64 %.0274288, 2
  %277 = getelementptr inbounds double, ptr %259, i64 %276
  %278 = load double, ptr %277, align 8, !tbaa !12
  %279 = getelementptr inbounds double, ptr %260, i64 %276
  %280 = load double, ptr %279, align 8, !tbaa !12
  %281 = fsub double %278, %280
  %282 = tail call double @llvm.fmuladd.f64(double %281, double %281, double %275)
  %283 = or disjoint i64 %.0274288, 3
  %284 = getelementptr inbounds double, ptr %259, i64 %283
  %285 = load double, ptr %284, align 8, !tbaa !12
  %286 = getelementptr inbounds double, ptr %260, i64 %283
  %287 = load double, ptr %286, align 8, !tbaa !12
  %288 = fsub double %285, %287
  %289 = tail call double @llvm.fmuladd.f64(double %288, double %288, double %282)
  %290 = add nuw nsw i64 %.0274288, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %262, !llvm.loop !35

._crit_edge.loopexit.unr-lcssa:                   ; preds = %262, %.lr.ph
  %.lcssa.ph = phi double [ poison, %.lr.ph ], [ %289, %262 ]
  %.0274288.unr = phi i64 [ 0, %.lr.ph ], [ %290, %262 ]
  %.0275287.unr = phi double [ 0.000000e+00, %.lr.ph ], [ %289, %262 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader
  %.0274288.epil = phi i64 [ %297, %.epil.preheader ], [ %.0274288.unr, %._crit_edge.loopexit.unr-lcssa ]
  %.0275287.epil = phi double [ %296, %.epil.preheader ], [ %.0275287.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %291 = getelementptr inbounds double, ptr %259, i64 %.0274288.epil
  %292 = load double, ptr %291, align 8, !tbaa !12
  %293 = getelementptr inbounds double, ptr %260, i64 %.0274288.epil
  %294 = load double, ptr %293, align 8, !tbaa !12
  %295 = fsub double %292, %294
  %296 = tail call double @llvm.fmuladd.f64(double %295, double %295, double %.0275287.epil)
  %297 = add nuw nsw i64 %.0274288.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.epil.preheader, !llvm.loop !37

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader, %.loopexit283
  %.0275.lcssa = phi double [ 0.000000e+00, %.loopexit283 ], [ %.lcssa.ph, %._crit_edge.loopexit.unr-lcssa ], [ %296, %.epil.preheader ]
  %298 = load double, ptr %2, align 8, !tbaa !12
  %299 = load double, ptr %32, align 8, !tbaa !19
  %300 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %298, double noundef %299)
  br i1 %300, label %303, label %301

301:                                              ; preds = %._crit_edge
  %302 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.0275.lcssa, double noundef 0.000000e+00)
  br i1 %302, label %303, label %.loopexit

303:                                              ; preds = %301, %._crit_edge
  store i64 6, ptr %8, align 8, !tbaa !13
  br label %.loopexit

.loopexit:                                        ; preds = %258, %301, %303
  store i64 0, ptr %12, align 8, !tbaa !13
  br label %390

304:                                              ; preds = %258
  %305 = load i8, ptr %40, align 1, !tbaa !18, !range !27, !noundef !28
  %306 = trunc nuw i8 %305 to i1
  br i1 %306, label %307, label %319

307:                                              ; preds = %304
  %308 = load double, ptr %2, align 8, !tbaa !12
  %309 = load double, ptr %34, align 8, !tbaa !34
  %310 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %308, double noundef %309)
  br i1 %310, label %311, label %319

311:                                              ; preds = %307
  %312 = load double, ptr %31, align 8, !tbaa !33
  %313 = load double, ptr @_ZN11alglib_implL11linmin_ftolE, align 8, !tbaa !12
  %314 = tail call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %313, double noundef %7, ptr noundef %13)
  %315 = load double, ptr %39, align 8, !tbaa !16
  %316 = fmul double %314, %315
  %317 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %312, double noundef %316)
  br i1 %317, label %318, label %319

318:                                              ; preds = %311
  store i8 0, ptr %40, align 1, !tbaa !18
  br label %319

319:                                              ; preds = %318, %311, %307, %304
  %320 = load i8, ptr %40, align 1, !tbaa !18, !range !27, !noundef !28
  %321 = trunc nuw i8 %320 to i1
  br i1 %321, label %322, label %363

322:                                              ; preds = %319
  %323 = load double, ptr %2, align 8, !tbaa !12
  %324 = load double, ptr %41, align 8, !tbaa !23
  %325 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %323, double noundef %324)
  br i1 %325, label %326, label %363

326:                                              ; preds = %322
  %327 = load double, ptr %2, align 8, !tbaa !12
  %328 = load double, ptr %34, align 8, !tbaa !34
  %329 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %327, double noundef %328)
  br i1 %329, label %330, label %363

330:                                              ; preds = %326
  %331 = load double, ptr %2, align 8, !tbaa !12
  %332 = load double, ptr %5, align 8, !tbaa !12
  %333 = load double, ptr %33, align 8, !tbaa !20
  %334 = fneg double %332
  %335 = tail call double @llvm.fmuladd.f64(double %334, double %333, double %331)
  store double %335, ptr %47, align 8, !tbaa !39
  %336 = load double, ptr %41, align 8, !tbaa !23
  %337 = load double, ptr %42, align 8, !tbaa !29
  %338 = fneg double %337
  %339 = tail call double @llvm.fmuladd.f64(double %338, double %333, double %336)
  store double %339, ptr %48, align 8, !tbaa !40
  %340 = load double, ptr %45, align 8, !tbaa !25
  %341 = load double, ptr %44, align 8, !tbaa !30
  %342 = fneg double %341
  %343 = tail call double @llvm.fmuladd.f64(double %342, double %333, double %340)
  store double %343, ptr %49, align 8, !tbaa !41
  %344 = load double, ptr %31, align 8, !tbaa !33
  %345 = fsub double %344, %333
  store double %345, ptr %50, align 8, !tbaa !42
  %346 = load double, ptr %43, align 8, !tbaa !24
  %347 = fsub double %346, %333
  store double %347, ptr %51, align 8, !tbaa !43
  %348 = load double, ptr %46, align 8, !tbaa !26
  %349 = fsub double %348, %333
  store double %349, ptr %52, align 8, !tbaa !44
  %350 = load double, ptr %35, align 8, !tbaa !31
  %351 = load double, ptr %36, align 8, !tbaa !32
  tail call void @_ZN11alglib_implL13linmin_mcstepEPdS0_S0_S0_S0_S0_S0_ddPbddPlPNS_8ae_stateE(ptr noundef nonnull %42, ptr noundef nonnull %48, ptr noundef nonnull %51, ptr noundef nonnull %44, ptr noundef nonnull %49, ptr noundef nonnull %52, ptr noundef nonnull %5, double noundef %335, double noundef %345, ptr noundef nonnull %11, double noundef %350, double noundef %351, ptr noundef nonnull %37, ptr noundef %13)
  %352 = load double, ptr %48, align 8, !tbaa !40
  %353 = load double, ptr %42, align 8, !tbaa !29
  %354 = load double, ptr %33, align 8, !tbaa !20
  %355 = tail call double @llvm.fmuladd.f64(double %353, double %354, double %352)
  store double %355, ptr %41, align 8, !tbaa !23
  %356 = load double, ptr %49, align 8, !tbaa !41
  %357 = load double, ptr %44, align 8, !tbaa !30
  %358 = tail call double @llvm.fmuladd.f64(double %357, double %354, double %356)
  store double %358, ptr %45, align 8, !tbaa !25
  %359 = load double, ptr %51, align 8, !tbaa !43
  %360 = fadd double %354, %359
  store double %360, ptr %43, align 8, !tbaa !24
  %361 = load double, ptr %52, align 8, !tbaa !44
  %362 = fadd double %354, %361
  store double %362, ptr %46, align 8, !tbaa !26
  br label %368

363:                                              ; preds = %326, %322, %319
  %364 = load double, ptr %2, align 8, !tbaa !12
  %365 = load double, ptr %31, align 8, !tbaa !33
  %366 = load double, ptr %35, align 8, !tbaa !31
  %367 = load double, ptr %36, align 8, !tbaa !32
  tail call void @_ZN11alglib_implL13linmin_mcstepEPdS0_S0_S0_S0_S0_S0_ddPbddPlPNS_8ae_stateE(ptr noundef nonnull %42, ptr noundef nonnull %41, ptr noundef nonnull %43, ptr noundef nonnull %44, ptr noundef nonnull %45, ptr noundef nonnull %46, ptr noundef nonnull %5, double noundef %364, double noundef %365, ptr noundef nonnull %11, double noundef %366, double noundef %367, ptr noundef nonnull %37, ptr noundef %13)
  br label %368

368:                                              ; preds = %363, %330
  %369 = load i8, ptr %11, align 8, !tbaa !17, !range !27, !noundef !28
  %370 = trunc nuw i8 %369 to i1
  br i1 %370, label %371, label %.outer.backedge

371:                                              ; preds = %368
  %372 = load double, ptr %44, align 8, !tbaa !30
  %373 = load double, ptr %42, align 8, !tbaa !29
  %374 = fsub double %372, %373
  %375 = tail call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %374, ptr noundef %13)
  %376 = load double, ptr %53, align 8, !tbaa !22
  %377 = fmul double %376, 6.600000e-01
  %378 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %375, double noundef %377)
  br i1 %378, label %379, label %384

379:                                              ; preds = %371
  %380 = load double, ptr %42, align 8, !tbaa !29
  %381 = load double, ptr %44, align 8, !tbaa !30
  %382 = fsub double %381, %380
  %383 = tail call double @llvm.fmuladd.f64(double %382, double 5.000000e-01, double %380)
  store double %383, ptr %5, align 8, !tbaa !12
  br label %384

384:                                              ; preds = %379, %371
  %385 = load double, ptr %54, align 8, !tbaa !21
  store double %385, ptr %53, align 8, !tbaa !22
  %386 = load double, ptr %44, align 8, !tbaa !30
  %387 = load double, ptr %42, align 8, !tbaa !29
  %388 = fsub double %386, %387
  %389 = tail call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %388, ptr noundef %13)
  store double %389, ptr %54, align 8, !tbaa !21
  br label %.outer.backedge

.outer.backedge:                                  ; preds = %368, %384, %.outer, %92
  %.sink292 = phi i64 [ 3, %92 ], [ 2, %.outer ], [ 3, %384 ], [ 3, %368 ]
  store i64 %.sink292, ptr %12, align 8, !tbaa !13
  br label %.outer, !llvm.loop !45

390:                                              ; preds = %.loopexit, %163, %91, %84, %63
  ret void
}

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL13linmin_mcstepEPdS0_S0_S0_S0_S0_S0_ddPbddPlPNS_8ae_stateE(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, double noundef, ptr noundef, double noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

!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, !11, i64 184}
!6 = !{!"_ZTSN11alglib_impl11linminstateE", !7, i64 0, !7, i64 1, !10, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !11, i64 168, !11, i64 176, !11, i64 184}
!7 = !{!"bool", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"long", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!11, !11, i64 0}
!13 = !{!10, !10, i64 0}
!14 = !{!6, !10, i64 8}
!15 = !{!8, !8, i64 0}
!16 = !{!6, !11, i64 32}
!17 = !{!6, !7, i64 0}
!18 = !{!6, !7, i64 1}
!19 = !{!6, !11, i64 80}
!20 = !{!6, !11, i64 40}
!21 = !{!6, !11, i64 168}
!22 = !{!6, !11, i64 176}
!23 = !{!6, !11, i64 104}
!24 = !{!6, !11, i64 48}
!25 = !{!6, !11, i64 120}
!26 = !{!6, !11, i64 64}
!27 = !{i8 0, i8 2}
!28 = !{}
!29 = !{!6, !11, i64 136}
!30 = !{!6, !11, i64 144}
!31 = !{!6, !11, i64 152}
!32 = !{!6, !11, i64 160}
!33 = !{!6, !11, i64 16}
!34 = !{!6, !11, i64 88}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.mustprogress"}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.unroll.disable"}
!39 = !{!6, !11, i64 96}
!40 = !{!6, !11, i64 112}
!41 = !{!6, !11, i64 128}
!42 = !{!6, !11, i64 24}
!43 = !{!6, !11, i64 56}
!44 = !{!6, !11, i64 72}
!45 = distinct !{!45, !36}


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