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

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

%"struct.alglib_impl::gdemostate" = type { i64, i64, i64, i64, %"struct.alglib_impl::ae_vector", i8, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, %"struct.alglib_impl::ae_vector", i64, double, double, i64, i64, double, double, i64, double, double, double, double, i8, i64, double, double, i8, double, double, double, i64, %"struct.alglib_impl::ae_vector", double, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::rcommstate", %"struct.alglib_impl::hqrndstate", %"struct.alglib_impl::gdemopopulation", %"struct.alglib_impl::gdemopopulation", %"struct.alglib_impl::ae_matrix", i64, i64, i64, %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", i64, i64, double, i64, double, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::sparsematrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::rcommstate" = type { i32, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::hqrndstate" = type { i64, i64, i64 }
%"struct.alglib_impl::gdemopopulation" = type { i64, %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%union.anon.1 = type { ptr }
%"struct.alglib_impl::sparsematrix" = type { %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64, i64, i64, i64 }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%union.anon.0 = type { ptr }

@.str.212 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.612 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.708 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1119 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1120 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1216 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1447 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1448 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1449 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1450 = external hidden unnamed_addr constant [102 x i8], align 1
@_ZN11alglib_implL17diffevo_paramscntE = external hidden global i64, align 8
@_ZN11alglib_implL21diffevo_minpowerupitsE = external hidden global i64, align 8
@_ZN11alglib_implL31diffevo_minpopsizefortighteningE = external hidden global i64, align 8
@.str.1451 = external hidden unnamed_addr constant [35 x i8], align 1
@_ZN11alglib_implL20diffevo_tighteningmuE = external hidden global double, align 8
@.str.1452 = external hidden unnamed_addr constant [35 x i8], align 1

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

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef, ptr noundef) #1

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

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

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl19ae_is_trace_enabledEPKc(ptr noundef) #1

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11alglib_impl14gdemoiterationEPNS_10gdemostateEbPNS_8ae_stateE(ptr noundef %0, i1 noundef zeroext %1, ptr noundef %2) #3 {
  %4 = alloca i1, align 1
  %5 = alloca ptr, align 8
  %6 = alloca i8, align 1
  %7 = alloca ptr, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca double, align 8
  %17 = alloca double, align 8
  %18 = alloca double, align 8
  %19 = alloca double, align 8
  %20 = alloca i8, align 1
  %21 = alloca i8, align 1
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i8, align 1
  %26 = alloca i8, align 1
  %27 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  %28 = zext i1 %1 to i8
  store i8 %28, ptr %6, align 1, !tbaa !9
  store ptr %2, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %26) #4
  %29 = load ptr, ptr %5, align 8, !tbaa !5
  %30 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %29, i32 0, i32 49
  %31 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %30, i32 0, i32 0
  %32 = load i32, ptr %31, align 8, !tbaa !11
  %33 = icmp sge i32 %32, 0
  br i1 %33, label %34, label %167

34:                                               ; preds = %3
  %35 = load ptr, ptr %5, align 8, !tbaa !5
  %36 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %35, i32 0, i32 49
  %37 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %36, i32 0, i32 1
  %38 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %37, i32 0, i32 4
  %39 = load ptr, ptr %38, align 8, !tbaa !23
  %40 = getelementptr inbounds i64, ptr %39, i64 0
  %41 = load i64, ptr %40, align 8, !tbaa !24
  store i64 %41, ptr %8, align 8, !tbaa !24
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %42, i32 0, i32 49
  %44 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %43, i32 0, i32 1
  %45 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %44, i32 0, i32 4
  %46 = load ptr, ptr %45, align 8, !tbaa !23
  %47 = getelementptr inbounds i64, ptr %46, i64 1
  %48 = load i64, ptr %47, align 8, !tbaa !24
  store i64 %48, ptr %9, align 8, !tbaa !24
  %49 = load ptr, ptr %5, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %49, i32 0, i32 49
  %51 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %50, i32 0, i32 1
  %52 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %51, i32 0, i32 4
  %53 = load ptr, ptr %52, align 8, !tbaa !23
  %54 = getelementptr inbounds i64, ptr %53, i64 2
  %55 = load i64, ptr %54, align 8, !tbaa !24
  store i64 %55, ptr %10, align 8, !tbaa !24
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %56, i32 0, i32 49
  %58 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %57, i32 0, i32 1
  %59 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %58, i32 0, i32 4
  %60 = load ptr, ptr %59, align 8, !tbaa !23
  %61 = getelementptr inbounds i64, ptr %60, i64 3
  %62 = load i64, ptr %61, align 8, !tbaa !24
  store i64 %62, ptr %11, align 8, !tbaa !24
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %63, i32 0, i32 49
  %65 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %64, i32 0, i32 1
  %66 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %65, i32 0, i32 4
  %67 = load ptr, ptr %66, align 8, !tbaa !23
  %68 = getelementptr inbounds i64, ptr %67, i64 4
  %69 = load i64, ptr %68, align 8, !tbaa !24
  store i64 %69, ptr %12, align 8, !tbaa !24
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  %71 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %70, i32 0, i32 49
  %72 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %71, i32 0, i32 1
  %73 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %72, i32 0, i32 4
  %74 = load ptr, ptr %73, align 8, !tbaa !23
  %75 = getelementptr inbounds i64, ptr %74, i64 5
  %76 = load i64, ptr %75, align 8, !tbaa !24
  store i64 %76, ptr %13, align 8, !tbaa !24
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %77, i32 0, i32 49
  %79 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %78, i32 0, i32 1
  %80 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %79, i32 0, i32 4
  %81 = load ptr, ptr %80, align 8, !tbaa !23
  %82 = getelementptr inbounds i64, ptr %81, i64 6
  %83 = load i64, ptr %82, align 8, !tbaa !24
  store i64 %83, ptr %14, align 8, !tbaa !24
  %84 = load ptr, ptr %5, align 8, !tbaa !5
  %85 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %84, i32 0, i32 49
  %86 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %85, i32 0, i32 1
  %87 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %86, i32 0, i32 4
  %88 = load ptr, ptr %87, align 8, !tbaa !23
  %89 = getelementptr inbounds i64, ptr %88, i64 7
  %90 = load i64, ptr %89, align 8, !tbaa !24
  store i64 %90, ptr %15, align 8, !tbaa !24
  %91 = load ptr, ptr %5, align 8, !tbaa !5
  %92 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %91, i32 0, i32 49
  %93 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %92, i32 0, i32 1
  %94 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %93, i32 0, i32 4
  %95 = load ptr, ptr %94, align 8, !tbaa !23
  %96 = getelementptr inbounds i64, ptr %95, i64 8
  %97 = load i64, ptr %96, align 8, !tbaa !24
  store i64 %97, ptr %22, align 8, !tbaa !24
  %98 = load ptr, ptr %5, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %98, i32 0, i32 49
  %100 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %99, i32 0, i32 1
  %101 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %100, i32 0, i32 4
  %102 = load ptr, ptr %101, align 8, !tbaa !23
  %103 = getelementptr inbounds i64, ptr %102, i64 9
  %104 = load i64, ptr %103, align 8, !tbaa !24
  store i64 %104, ptr %23, align 8, !tbaa !24
  %105 = load ptr, ptr %5, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %105, i32 0, i32 49
  %107 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %106, i32 0, i32 1
  %108 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %107, i32 0, i32 4
  %109 = load ptr, ptr %108, align 8, !tbaa !23
  %110 = getelementptr inbounds i64, ptr %109, i64 10
  %111 = load i64, ptr %110, align 8, !tbaa !24
  store i64 %111, ptr %24, align 8, !tbaa !24
  %112 = load ptr, ptr %5, align 8, !tbaa !5
  %113 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %112, i32 0, i32 49
  %114 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %113, i32 0, i32 2
  %115 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %114, i32 0, i32 4
  %116 = load ptr, ptr %115, align 8, !tbaa !23
  %117 = getelementptr inbounds i8, ptr %116, i64 0
  %118 = load i8, ptr %117, align 1, !tbaa !9, !range !25, !noundef !26
  %119 = trunc i8 %118 to i1
  %120 = zext i1 %119 to i8
  store i8 %120, ptr %20, align 1, !tbaa !9
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %121, i32 0, i32 49
  %123 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %122, i32 0, i32 2
  %124 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %123, i32 0, i32 4
  %125 = load ptr, ptr %124, align 8, !tbaa !23
  %126 = getelementptr inbounds i8, ptr %125, i64 1
  %127 = load i8, ptr %126, align 1, !tbaa !9, !range !25, !noundef !26
  %128 = trunc i8 %127 to i1
  %129 = zext i1 %128 to i8
  store i8 %129, ptr %21, align 1, !tbaa !9
  %130 = load ptr, ptr %5, align 8, !tbaa !5
  %131 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %130, i32 0, i32 49
  %132 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %131, i32 0, i32 2
  %133 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %132, i32 0, i32 4
  %134 = load ptr, ptr %133, align 8, !tbaa !23
  %135 = getelementptr inbounds i8, ptr %134, i64 2
  %136 = load i8, ptr %135, align 1, !tbaa !9, !range !25, !noundef !26
  %137 = trunc i8 %136 to i1
  %138 = zext i1 %137 to i8
  store i8 %138, ptr %25, align 1, !tbaa !9
  %139 = load ptr, ptr %5, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %139, i32 0, i32 49
  %141 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %140, i32 0, i32 3
  %142 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %141, i32 0, i32 4
  %143 = load ptr, ptr %142, align 8, !tbaa !23
  %144 = getelementptr inbounds double, ptr %143, i64 0
  %145 = load double, ptr %144, align 8, !tbaa !27
  store double %145, ptr %16, align 8, !tbaa !27
  %146 = load ptr, ptr %5, align 8, !tbaa !5
  %147 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %146, i32 0, i32 49
  %148 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %147, i32 0, i32 3
  %149 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %148, i32 0, i32 4
  %150 = load ptr, ptr %149, align 8, !tbaa !23
  %151 = getelementptr inbounds double, ptr %150, i64 1
  %152 = load double, ptr %151, align 8, !tbaa !27
  store double %152, ptr %17, align 8, !tbaa !27
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  %154 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %153, i32 0, i32 49
  %155 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %154, i32 0, i32 3
  %156 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %155, i32 0, i32 4
  %157 = load ptr, ptr %156, align 8, !tbaa !23
  %158 = getelementptr inbounds double, ptr %157, i64 2
  %159 = load double, ptr %158, align 8, !tbaa !27
  store double %159, ptr %18, align 8, !tbaa !27
  %160 = load ptr, ptr %5, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %160, i32 0, i32 49
  %162 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %161, i32 0, i32 3
  %163 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %162, i32 0, i32 4
  %164 = load ptr, ptr %163, align 8, !tbaa !23
  %165 = getelementptr inbounds double, ptr %164, i64 3
  %166 = load double, ptr %165, align 8, !tbaa !27
  store double %166, ptr %19, align 8, !tbaa !27
  br label %168

167:                                              ; preds = %3
  store i64 359, ptr %8, align 8, !tbaa !24
  store i64 -58, ptr %9, align 8, !tbaa !24
  store i64 -919, ptr %10, align 8, !tbaa !24
  store i64 -909, ptr %11, align 8, !tbaa !24
  store i64 81, ptr %12, align 8, !tbaa !24
  store i64 255, ptr %13, align 8, !tbaa !24
  store i64 74, ptr %14, align 8, !tbaa !24
  store i64 -788, ptr %15, align 8, !tbaa !24
  store i64 809, ptr %22, align 8, !tbaa !24
  store i64 205, ptr %23, align 8, !tbaa !24
  store i64 -838, ptr %24, align 8, !tbaa !24
  store i8 1, ptr %20, align 1, !tbaa !9
  store i8 0, ptr %21, align 1, !tbaa !9
  store i8 1, ptr %25, align 1, !tbaa !9
  store double -5.410000e+02, ptr %16, align 8, !tbaa !27
  store double -6.980000e+02, ptr %17, align 8, !tbaa !27
  store double -9.000000e+02, ptr %18, align 8, !tbaa !27
  store double -3.180000e+02, ptr %19, align 8, !tbaa !27
  br label %168

168:                                              ; preds = %167, %34
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %169, i32 0, i32 49
  %171 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %170, i32 0, i32 0
  %172 = load i32, ptr %171, align 8, !tbaa !11
  %173 = icmp eq i32 %172, 0
  br i1 %173, label %174, label %175

174:                                              ; preds = %168
  br label %582

175:                                              ; preds = %168
  %176 = load ptr, ptr %5, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %176, i32 0, i32 49
  %178 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %177, i32 0, i32 0
  %179 = load i32, ptr %178, align 8, !tbaa !11
  %180 = icmp eq i32 %179, 1
  br i1 %180, label %181, label %182

181:                                              ; preds = %175
  br label %978

182:                                              ; preds = %175
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %183, i32 0, i32 0
  %185 = load i64, ptr %184, align 8, !tbaa !28
  store i64 %185, ptr %8, align 8, !tbaa !24
  %186 = load ptr, ptr %5, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %186, i32 0, i32 1
  %188 = load i64, ptr %187, align 8, !tbaa !29
  store i64 %188, ptr %9, align 8, !tbaa !24
  %189 = load ptr, ptr %5, align 8, !tbaa !5
  %190 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %189, i32 0, i32 2
  %191 = load i64, ptr %190, align 8, !tbaa !30
  store i64 %191, ptr %10, align 8, !tbaa !24
  %192 = load ptr, ptr %5, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %192, i32 0, i32 3
  %194 = load i64, ptr %193, align 8, !tbaa !31
  store i64 %194, ptr %11, align 8, !tbaa !24
  %195 = load ptr, ptr %5, align 8, !tbaa !5
  %196 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %195, i32 0, i32 26
  %197 = load i64, ptr %196, align 8, !tbaa !32
  store i64 %197, ptr %22, align 8, !tbaa !24
  %198 = call noundef zeroext i1 @_ZN11alglib_impl19ae_is_trace_enabledEPKc(ptr noundef @.str.1447)
  %199 = zext i1 %198 to i8
  store i8 %199, ptr %20, align 1, !tbaa !9
  %200 = load i8, ptr %20, align 1, !tbaa !9, !range !25, !noundef !26
  %201 = trunc i8 %200 to i1
  br i1 %201, label %202, label %204

202:                                              ; preds = %182
  %203 = call noundef zeroext i1 @_ZN11alglib_impl19ae_is_trace_enabledEPKc(ptr noundef @.str.1448)
  br label %204

204:                                              ; preds = %202, %182
  %205 = phi i1 [ false, %182 ], [ %203, %202 ]
  %206 = zext i1 %205 to i8
  store i8 %206, ptr %21, align 1, !tbaa !9
  %207 = load i64, ptr %9, align 8, !tbaa !24
  %208 = icmp eq i64 %207, 1
  %209 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %208, ptr noundef @.str.1449, ptr noundef %209)
  %210 = load ptr, ptr %5, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %210, i32 0, i32 60
  store i64 0, ptr %211, align 8, !tbaa !33
  %212 = load ptr, ptr %5, align 8, !tbaa !5
  %213 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %212, i32 0, i32 59
  store i64 5, ptr %213, align 8, !tbaa !34
  %214 = load ptr, ptr %5, align 8, !tbaa !5
  %215 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %214, i32 0, i32 61
  store double 0.000000e+00, ptr %215, align 8, !tbaa !35
  %216 = load ptr, ptr %5, align 8, !tbaa !5
  %217 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %216, i32 0, i32 62
  store i64 -1, ptr %217, align 8, !tbaa !36
  %218 = load ptr, ptr %5, align 8, !tbaa !5
  %219 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %218, i32 0, i32 63
  store double 0.000000e+00, ptr %219, align 8, !tbaa !37
  %220 = load ptr, ptr %5, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %220, i32 0, i32 64
  store i64 -1, ptr %221, align 8, !tbaa !38
  %222 = load i64, ptr %8, align 8, !tbaa !24
  %223 = load ptr, ptr %5, align 8, !tbaa !5
  %224 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %223, i32 0, i32 44
  %225 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %222, ptr noundef %224, ptr noundef %225)
  %226 = load i8, ptr %20, align 1, !tbaa !9, !range !25, !noundef !26
  %227 = trunc i8 %226 to i1
  br i1 %227, label %228, label %237

228:                                              ; preds = %204
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.612)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.212)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.1450)
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.212)
  %229 = load i64, ptr %8, align 8, !tbaa !24
  %230 = trunc i64 %229 to i32
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.708, i32 noundef %230)
  %231 = load i64, ptr %9, align 8, !tbaa !24
  %232 = trunc i64 %231 to i32
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.1216, i32 noundef %232)
  %233 = load i64, ptr %10, align 8, !tbaa !24
  %234 = trunc i64 %233 to i32
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.1119, i32 noundef %234)
  %235 = load i64, ptr %11, align 8, !tbaa !24
  %236 = trunc i64 %235 to i32
  call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef @.str.1120, i32 noundef %236)
  br label %237

237:                                              ; preds = %228, %204
  %238 = load i64, ptr %22, align 8, !tbaa !24
  %239 = load ptr, ptr %5, align 8, !tbaa !5
  %240 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %239, i32 0, i32 51
  %241 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %240, i32 0, i32 0
  store i64 %238, ptr %241, align 8, !tbaa !39
  %242 = load i64, ptr %22, align 8, !tbaa !24
  %243 = load i64, ptr %8, align 8, !tbaa !24
  %244 = load ptr, ptr %5, align 8, !tbaa !5
  %245 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %244, i32 0, i32 51
  %246 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %245, i32 0, i32 1
  %247 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocmEllPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %242, i64 noundef %243, ptr noundef %246, ptr noundef %247)
  %248 = load i64, ptr %22, align 8, !tbaa !24
  %249 = load i64, ptr %9, align 8, !tbaa !24
  %250 = load i64, ptr %11, align 8, !tbaa !24
  %251 = add nsw i64 %249, %250
  %252 = load ptr, ptr %5, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %252, i32 0, i32 51
  %254 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %253, i32 0, i32 2
  %255 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocmEllPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %248, i64 noundef %251, ptr noundef %254, ptr noundef %255)
  %256 = load i64, ptr %22, align 8, !tbaa !24
  %257 = load i64, ptr %9, align 8, !tbaa !24
  %258 = load ptr, ptr %5, align 8, !tbaa !5
  %259 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %258, i32 0, i32 51
  %260 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %259, i32 0, i32 3
  %261 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocmEllPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %256, i64 noundef %257, ptr noundef %260, ptr noundef %261)
  %262 = load i64, ptr %22, align 8, !tbaa !24
  %263 = load i64, ptr @_ZN11alglib_implL17diffevo_paramscntE, align 8, !tbaa !24
  %264 = load ptr, ptr %5, align 8, !tbaa !5
  %265 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %264, i32 0, i32 51
  %266 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %265, i32 0, i32 4
  %267 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl10rsetallocmElldPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %262, i64 noundef %263, double noundef 0.000000e+00, ptr noundef %266, ptr noundef %267)
  %268 = load i64, ptr %22, align 8, !tbaa !24
  %269 = load ptr, ptr %5, align 8, !tbaa !5
  %270 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %269, i32 0, i32 51
  %271 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %270, i32 0, i32 5
  %272 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl10bsetallocvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %268, i1 noundef zeroext false, ptr noundef %271, ptr noundef %272)
  %273 = load i64, ptr %8, align 8, !tbaa !24
  %274 = load ptr, ptr %5, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %274, i32 0, i32 69
  %276 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %273, ptr noundef %275, ptr noundef %276)
  %277 = load i64, ptr %8, align 8, !tbaa !24
  %278 = load ptr, ptr %5, align 8, !tbaa !5
  %279 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %278, i32 0, i32 70
  %280 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %277, ptr noundef %279, ptr noundef %280)
  store i64 0, ptr %12, align 8, !tbaa !24
  br label %281

281:                                              ; preds = %490, %237
  %282 = load i64, ptr %12, align 8, !tbaa !24
  %283 = load i64, ptr %22, align 8, !tbaa !24
  %284 = sub nsw i64 %283, 1
  %285 = icmp sle i64 %282, %284
  br i1 %285, label %286, label %493

286:                                              ; preds = %281
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %287

287:                                              ; preds = %449, %286
  %288 = load i64, ptr %13, align 8, !tbaa !24
  %289 = load i64, ptr %8, align 8, !tbaa !24
  %290 = sub nsw i64 %289, 1
  %291 = icmp sle i64 %288, %290
  br i1 %291, label %292, label %452

292:                                              ; preds = %287
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %293, i32 0, i32 7
  %295 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %294, i32 0, i32 4
  %296 = load ptr, ptr %295, align 8, !tbaa !23
  %297 = load i64, ptr %13, align 8, !tbaa !24
  %298 = getelementptr inbounds i8, ptr %296, i64 %297
  %299 = load i8, ptr %298, align 1, !tbaa !9, !range !25, !noundef !26
  %300 = trunc i8 %299 to i1
  br i1 %300, label %301, label %348

301:                                              ; preds = %292
  %302 = load ptr, ptr %5, align 8, !tbaa !5
  %303 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %302, i32 0, i32 8
  %304 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %303, i32 0, i32 4
  %305 = load ptr, ptr %304, align 8, !tbaa !23
  %306 = load i64, ptr %13, align 8, !tbaa !24
  %307 = getelementptr inbounds i8, ptr %305, i64 %306
  %308 = load i8, ptr %307, align 1, !tbaa !9, !range !25, !noundef !26
  %309 = trunc i8 %308 to i1
  br i1 %309, label %310, label %348

310:                                              ; preds = %301
  %311 = load ptr, ptr %5, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %311, i32 0, i32 9
  %313 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %312, i32 0, i32 4
  %314 = load ptr, ptr %313, align 8, !tbaa !23
  %315 = load i64, ptr %13, align 8, !tbaa !24
  %316 = getelementptr inbounds double, ptr %314, i64 %315
  %317 = load double, ptr %316, align 8, !tbaa !27
  %318 = load ptr, ptr %5, align 8, !tbaa !5
  %319 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %318, i32 0, i32 10
  %320 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %319, i32 0, i32 4
  %321 = load ptr, ptr %320, align 8, !tbaa !23
  %322 = load i64, ptr %13, align 8, !tbaa !24
  %323 = getelementptr inbounds double, ptr %321, i64 %322
  %324 = load double, ptr %323, align 8, !tbaa !27
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  %326 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %325, i32 0, i32 9
  %327 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %326, i32 0, i32 4
  %328 = load ptr, ptr %327, align 8, !tbaa !23
  %329 = load i64, ptr %13, align 8, !tbaa !24
  %330 = getelementptr inbounds double, ptr %328, i64 %329
  %331 = load double, ptr %330, align 8, !tbaa !27
  %332 = fsub double %324, %331
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %333, i32 0, i32 50
  %335 = load ptr, ptr %7, align 8, !tbaa !5
  %336 = call noundef double @_ZN11alglib_impl13hqrnduniformrEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef %334, ptr noundef %335)
  %337 = call double @llvm.fmuladd.f64(double %332, double %336, double %317)
  %338 = load ptr, ptr %5, align 8, !tbaa !5
  %339 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %338, i32 0, i32 51
  %340 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %339, i32 0, i32 1
  %341 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %340, i32 0, i32 6
  %342 = load ptr, ptr %341, align 8, !tbaa !23
  %343 = load i64, ptr %12, align 8, !tbaa !24
  %344 = getelementptr inbounds ptr, ptr %342, i64 %343
  %345 = load ptr, ptr %344, align 8, !tbaa !5
  %346 = load i64, ptr %13, align 8, !tbaa !24
  %347 = getelementptr inbounds double, ptr %345, i64 %346
  store double %337, ptr %347, align 8, !tbaa !27
  br label %449

348:                                              ; preds = %301, %292
  %349 = load ptr, ptr %5, align 8, !tbaa !5
  %350 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %349, i32 0, i32 7
  %351 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %350, i32 0, i32 4
  %352 = load ptr, ptr %351, align 8, !tbaa !23
  %353 = load i64, ptr %13, align 8, !tbaa !24
  %354 = getelementptr inbounds i8, ptr %352, i64 %353
  %355 = load i8, ptr %354, align 1, !tbaa !9, !range !25, !noundef !26
  %356 = trunc i8 %355 to i1
  br i1 %356, label %357, label %391

357:                                              ; preds = %348
  %358 = load ptr, ptr %5, align 8, !tbaa !5
  %359 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %358, i32 0, i32 8
  %360 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %359, i32 0, i32 4
  %361 = load ptr, ptr %360, align 8, !tbaa !23
  %362 = load i64, ptr %13, align 8, !tbaa !24
  %363 = getelementptr inbounds i8, ptr %361, i64 %362
  %364 = load i8, ptr %363, align 1, !tbaa !9, !range !25, !noundef !26
  %365 = trunc i8 %364 to i1
  br i1 %365, label %391, label %366

366:                                              ; preds = %357
  %367 = load ptr, ptr %5, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %367, i32 0, i32 9
  %369 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %368, i32 0, i32 4
  %370 = load ptr, ptr %369, align 8, !tbaa !23
  %371 = load i64, ptr %13, align 8, !tbaa !24
  %372 = getelementptr inbounds double, ptr %370, i64 %371
  %373 = load double, ptr %372, align 8, !tbaa !27
  %374 = load ptr, ptr %5, align 8, !tbaa !5
  %375 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %374, i32 0, i32 50
  %376 = load ptr, ptr %7, align 8, !tbaa !5
  %377 = call noundef double @_ZN11alglib_impl11hqrndnormalEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef %375, ptr noundef %376)
  %378 = load ptr, ptr %7, align 8, !tbaa !5
  %379 = call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef 2.000000e+00, double noundef %377, ptr noundef %378)
  %380 = fadd double %373, %379
  %381 = load ptr, ptr %5, align 8, !tbaa !5
  %382 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %381, i32 0, i32 51
  %383 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %382, i32 0, i32 1
  %384 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %383, i32 0, i32 6
  %385 = load ptr, ptr %384, align 8, !tbaa !23
  %386 = load i64, ptr %12, align 8, !tbaa !24
  %387 = getelementptr inbounds ptr, ptr %385, i64 %386
  %388 = load ptr, ptr %387, align 8, !tbaa !5
  %389 = load i64, ptr %13, align 8, !tbaa !24
  %390 = getelementptr inbounds double, ptr %388, i64 %389
  store double %380, ptr %390, align 8, !tbaa !27
  br label %449

391:                                              ; preds = %357, %348
  %392 = load ptr, ptr %5, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %392, i32 0, i32 8
  %394 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %393, i32 0, i32 4
  %395 = load ptr, ptr %394, align 8, !tbaa !23
  %396 = load i64, ptr %13, align 8, !tbaa !24
  %397 = getelementptr inbounds i8, ptr %395, i64 %396
  %398 = load i8, ptr %397, align 1, !tbaa !9, !range !25, !noundef !26
  %399 = trunc i8 %398 to i1
  br i1 %399, label %400, label %434

400:                                              ; preds = %391
  %401 = load ptr, ptr %5, align 8, !tbaa !5
  %402 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %401, i32 0, i32 7
  %403 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %402, i32 0, i32 4
  %404 = load ptr, ptr %403, align 8, !tbaa !23
  %405 = load i64, ptr %13, align 8, !tbaa !24
  %406 = getelementptr inbounds i8, ptr %404, i64 %405
  %407 = load i8, ptr %406, align 1, !tbaa !9, !range !25, !noundef !26
  %408 = trunc i8 %407 to i1
  br i1 %408, label %434, label %409

409:                                              ; preds = %400
  %410 = load ptr, ptr %5, align 8, !tbaa !5
  %411 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %410, i32 0, i32 10
  %412 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %411, i32 0, i32 4
  %413 = load ptr, ptr %412, align 8, !tbaa !23
  %414 = load i64, ptr %13, align 8, !tbaa !24
  %415 = getelementptr inbounds double, ptr %413, i64 %414
  %416 = load double, ptr %415, align 8, !tbaa !27
  %417 = load ptr, ptr %5, align 8, !tbaa !5
  %418 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %417, i32 0, i32 50
  %419 = load ptr, ptr %7, align 8, !tbaa !5
  %420 = call noundef double @_ZN11alglib_impl11hqrndnormalEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef %418, ptr noundef %419)
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef 2.000000e+00, double noundef %420, ptr noundef %421)
  %423 = fsub double %416, %422
  %424 = load ptr, ptr %5, align 8, !tbaa !5
  %425 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %424, i32 0, i32 51
  %426 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %425, i32 0, i32 1
  %427 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %426, i32 0, i32 6
  %428 = load ptr, ptr %427, align 8, !tbaa !23
  %429 = load i64, ptr %12, align 8, !tbaa !24
  %430 = getelementptr inbounds ptr, ptr %428, i64 %429
  %431 = load ptr, ptr %430, align 8, !tbaa !5
  %432 = load i64, ptr %13, align 8, !tbaa !24
  %433 = getelementptr inbounds double, ptr %431, i64 %432
  store double %423, ptr %433, align 8, !tbaa !27
  br label %449

434:                                              ; preds = %400, %391
  %435 = load ptr, ptr %5, align 8, !tbaa !5
  %436 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %435, i32 0, i32 50
  %437 = load ptr, ptr %7, align 8, !tbaa !5
  %438 = call noundef double @_ZN11alglib_impl11hqrndnormalEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef %436, ptr noundef %437)
  %439 = load ptr, ptr %5, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %439, i32 0, i32 51
  %441 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %440, i32 0, i32 1
  %442 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %441, i32 0, i32 6
  %443 = load ptr, ptr %442, align 8, !tbaa !23
  %444 = load i64, ptr %12, align 8, !tbaa !24
  %445 = getelementptr inbounds ptr, ptr %443, i64 %444
  %446 = load ptr, ptr %445, align 8, !tbaa !5
  %447 = load i64, ptr %13, align 8, !tbaa !24
  %448 = getelementptr inbounds double, ptr %446, i64 %447
  store double %438, ptr %448, align 8, !tbaa !27
  br label %449

449:                                              ; preds = %434, %409, %366, %310
  %450 = load i64, ptr %13, align 8, !tbaa !24
  %451 = add nsw i64 %450, 1
  store i64 %451, ptr %13, align 8, !tbaa !24
  br label %287, !llvm.loop !40

452:                                              ; preds = %287
  %453 = load i64, ptr %12, align 8, !tbaa !24
  %454 = icmp eq i64 %453, 0
  br i1 %454, label %455, label %472

455:                                              ; preds = %452
  %456 = load i64, ptr %8, align 8, !tbaa !24
  %457 = load ptr, ptr %5, align 8, !tbaa !5
  %458 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %457, i32 0, i32 51
  %459 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %458, i32 0, i32 1
  %460 = load i64, ptr %12, align 8, !tbaa !24
  %461 = load ptr, ptr %5, align 8, !tbaa !5
  %462 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %461, i32 0, i32 69
  %463 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %456, ptr noundef %459, i64 noundef %460, ptr noundef %462, ptr noundef %463)
  %464 = load i64, ptr %8, align 8, !tbaa !24
  %465 = load ptr, ptr %5, align 8, !tbaa !5
  %466 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %465, i32 0, i32 51
  %467 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %466, i32 0, i32 1
  %468 = load i64, ptr %12, align 8, !tbaa !24
  %469 = load ptr, ptr %5, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %469, i32 0, i32 70
  %471 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %464, ptr noundef %467, i64 noundef %468, ptr noundef %470, ptr noundef %471)
  br label %489

472:                                              ; preds = %452
  %473 = load i64, ptr %8, align 8, !tbaa !24
  %474 = load ptr, ptr %5, align 8, !tbaa !5
  %475 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %474, i32 0, i32 51
  %476 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %475, i32 0, i32 1
  %477 = load i64, ptr %12, align 8, !tbaa !24
  %478 = load ptr, ptr %5, align 8, !tbaa !5
  %479 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %478, i32 0, i32 69
  %480 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl11rmergeminrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %473, ptr noundef %476, i64 noundef %477, ptr noundef %479, ptr noundef %480)
  %481 = load i64, ptr %8, align 8, !tbaa !24
  %482 = load ptr, ptr %5, align 8, !tbaa !5
  %483 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %482, i32 0, i32 51
  %484 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %483, i32 0, i32 1
  %485 = load i64, ptr %12, align 8, !tbaa !24
  %486 = load ptr, ptr %5, align 8, !tbaa !5
  %487 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %486, i32 0, i32 70
  %488 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl11rmergemaxrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %481, ptr noundef %484, i64 noundef %485, ptr noundef %487, ptr noundef %488)
  br label %489

489:                                              ; preds = %472, %455
  br label %490

490:                                              ; preds = %489
  %491 = load i64, ptr %12, align 8, !tbaa !24
  %492 = add nsw i64 %491, 1
  store i64 %492, ptr %12, align 8, !tbaa !24
  br label %281, !llvm.loop !42

493:                                              ; preds = %281
  %494 = load i64, ptr %8, align 8, !tbaa !24
  %495 = load ptr, ptr %5, align 8, !tbaa !5
  %496 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %495, i32 0, i32 67
  %497 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl10rsetallocvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %494, double noundef 1.000000e+300, ptr noundef %496, ptr noundef %497)
  %498 = load i64, ptr %8, align 8, !tbaa !24
  %499 = load ptr, ptr %5, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %499, i32 0, i32 68
  %501 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl10rsetallocvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %498, double noundef -1.000000e+300, ptr noundef %500, ptr noundef %501)
  %502 = load i64, ptr %22, align 8, !tbaa !24
  store i64 %502, ptr %23, align 8, !tbaa !24
  store i64 0, ptr %24, align 8, !tbaa !24
  br label %503

503:                                              ; preds = %853, %493
  %504 = load i64, ptr %24, align 8, !tbaa !24
  %505 = load i64, ptr @_ZN11alglib_implL21diffevo_minpowerupitsE, align 8, !tbaa !24
  %506 = load ptr, ptr %5, align 8, !tbaa !5
  %507 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %506, i32 0, i32 27
  %508 = load i64, ptr %507, align 8, !tbaa !43
  %509 = sitofp i64 %508 to double
  %510 = fmul double 2.500000e-01, %509
  %511 = load ptr, ptr %7, align 8, !tbaa !5
  %512 = call noundef i64 @_ZN11alglib_impl8ae_roundEdPNS_8ae_stateE(double noundef %510, ptr noundef %511)
  %513 = load ptr, ptr %7, align 8, !tbaa !5
  %514 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %505, i64 noundef %512, ptr noundef %513)
  %515 = sub nsw i64 %514, 1
  %516 = icmp sgt i64 %504, %515
  br i1 %516, label %517, label %518

517:                                              ; preds = %503
  br label %856

518:                                              ; preds = %503
  %519 = load ptr, ptr %5, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %519, i32 0, i32 43
  store i64 4, ptr %520, align 8, !tbaa !44
  %521 = load i64, ptr %23, align 8, !tbaa !24
  %522 = load ptr, ptr %5, align 8, !tbaa !5
  %523 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %522, i32 0, i32 46
  store i64 %521, ptr %523, align 8, !tbaa !45
  %524 = load i64, ptr %8, align 8, !tbaa !24
  %525 = load i64, ptr %23, align 8, !tbaa !24
  %526 = mul nsw i64 %524, %525
  %527 = load ptr, ptr %5, align 8, !tbaa !5
  %528 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %527, i32 0, i32 47
  %529 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %526, ptr noundef %528, ptr noundef %529)
  store i64 0, ptr %12, align 8, !tbaa !24
  br label %530

530:                                              ; preds = %567, %518
  %531 = load i64, ptr %12, align 8, !tbaa !24
  %532 = load i64, ptr %23, align 8, !tbaa !24
  %533 = sub nsw i64 %532, 1
  %534 = icmp sle i64 %531, %533
  br i1 %534, label %535, label %570

535:                                              ; preds = %530
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %536

536:                                              ; preds = %563, %535
  %537 = load i64, ptr %13, align 8, !tbaa !24
  %538 = load i64, ptr %8, align 8, !tbaa !24
  %539 = sub nsw i64 %538, 1
  %540 = icmp sle i64 %537, %539
  br i1 %540, label %541, label %566

541:                                              ; preds = %536
  %542 = load ptr, ptr %5, align 8, !tbaa !5
  %543 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %542, i32 0, i32 51
  %544 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %543, i32 0, i32 1
  %545 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %544, i32 0, i32 6
  %546 = load ptr, ptr %545, align 8, !tbaa !23
  %547 = load i64, ptr %12, align 8, !tbaa !24
  %548 = getelementptr inbounds ptr, ptr %546, i64 %547
  %549 = load ptr, ptr %548, align 8, !tbaa !5
  %550 = load i64, ptr %13, align 8, !tbaa !24
  %551 = getelementptr inbounds double, ptr %549, i64 %550
  %552 = load double, ptr %551, align 8, !tbaa !27
  %553 = load ptr, ptr %5, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %553, i32 0, i32 47
  %555 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %554, i32 0, i32 4
  %556 = load ptr, ptr %555, align 8, !tbaa !23
  %557 = load i64, ptr %12, align 8, !tbaa !24
  %558 = load i64, ptr %8, align 8, !tbaa !24
  %559 = mul nsw i64 %557, %558
  %560 = load i64, ptr %13, align 8, !tbaa !24
  %561 = add nsw i64 %559, %560
  %562 = getelementptr inbounds double, ptr %556, i64 %561
  store double %552, ptr %562, align 8, !tbaa !27
  br label %563

563:                                              ; preds = %541
  %564 = load i64, ptr %13, align 8, !tbaa !24
  %565 = add nsw i64 %564, 1
  store i64 %565, ptr %13, align 8, !tbaa !24
  br label %536, !llvm.loop !46

566:                                              ; preds = %536
  br label %567

567:                                              ; preds = %566
  %568 = load i64, ptr %12, align 8, !tbaa !24
  %569 = add nsw i64 %568, 1
  store i64 %569, ptr %12, align 8, !tbaa !24
  br label %530, !llvm.loop !47

570:                                              ; preds = %530
  %571 = load i64, ptr %23, align 8, !tbaa !24
  %572 = load i64, ptr %9, align 8, !tbaa !24
  %573 = load i64, ptr %11, align 8, !tbaa !24
  %574 = add nsw i64 %572, %573
  %575 = mul nsw i64 %571, %574
  %576 = load ptr, ptr %5, align 8, !tbaa !5
  %577 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %576, i32 0, i32 48
  %578 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %575, ptr noundef %577, ptr noundef %578)
  %579 = load ptr, ptr %5, align 8, !tbaa !5
  %580 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %579, i32 0, i32 49
  %581 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %580, i32 0, i32 0
  store i32 0, ptr %581, align 8, !tbaa !11
  br label %1248

582:                                              ; preds = %174
  store i64 0, ptr %12, align 8, !tbaa !24
  br label %583

583:                                              ; preds = %624, %582
  %584 = load i64, ptr %12, align 8, !tbaa !24
  %585 = load i64, ptr %23, align 8, !tbaa !24
  %586 = sub nsw i64 %585, 1
  %587 = icmp sle i64 %584, %586
  br i1 %587, label %588, label %627

588:                                              ; preds = %583
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %589

589:                                              ; preds = %620, %588
  %590 = load i64, ptr %13, align 8, !tbaa !24
  %591 = load i64, ptr %9, align 8, !tbaa !24
  %592 = load i64, ptr %11, align 8, !tbaa !24
  %593 = add nsw i64 %591, %592
  %594 = sub nsw i64 %593, 1
  %595 = icmp sle i64 %590, %594
  br i1 %595, label %596, label %623

596:                                              ; preds = %589
  %597 = load ptr, ptr %5, align 8, !tbaa !5
  %598 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %597, i32 0, i32 48
  %599 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %598, i32 0, i32 4
  %600 = load ptr, ptr %599, align 8, !tbaa !23
  %601 = load i64, ptr %12, align 8, !tbaa !24
  %602 = load i64, ptr %9, align 8, !tbaa !24
  %603 = load i64, ptr %11, align 8, !tbaa !24
  %604 = add nsw i64 %602, %603
  %605 = mul nsw i64 %601, %604
  %606 = load i64, ptr %13, align 8, !tbaa !24
  %607 = add nsw i64 %605, %606
  %608 = getelementptr inbounds double, ptr %600, i64 %607
  %609 = load double, ptr %608, align 8, !tbaa !27
  %610 = load ptr, ptr %5, align 8, !tbaa !5
  %611 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %610, i32 0, i32 51
  %612 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %611, i32 0, i32 2
  %613 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %612, i32 0, i32 6
  %614 = load ptr, ptr %613, align 8, !tbaa !23
  %615 = load i64, ptr %12, align 8, !tbaa !24
  %616 = getelementptr inbounds ptr, ptr %614, i64 %615
  %617 = load ptr, ptr %616, align 8, !tbaa !5
  %618 = load i64, ptr %13, align 8, !tbaa !24
  %619 = getelementptr inbounds double, ptr %617, i64 %618
  store double %609, ptr %619, align 8, !tbaa !27
  br label %620

620:                                              ; preds = %596
  %621 = load i64, ptr %13, align 8, !tbaa !24
  %622 = add nsw i64 %621, 1
  store i64 %622, ptr %13, align 8, !tbaa !24
  br label %589, !llvm.loop !48

623:                                              ; preds = %589
  br label %624

624:                                              ; preds = %623
  %625 = load i64, ptr %12, align 8, !tbaa !24
  %626 = add nsw i64 %625, 1
  store i64 %626, ptr %12, align 8, !tbaa !24
  br label %583, !llvm.loop !49

627:                                              ; preds = %583
  %628 = load i64, ptr %23, align 8, !tbaa !24
  %629 = sub nsw i64 %628, 1
  store i64 %629, ptr %12, align 8, !tbaa !24
  br label %630

630:                                              ; preds = %719, %627
  %631 = load i64, ptr %12, align 8, !tbaa !24
  %632 = icmp sge i64 %631, 0
  br i1 %632, label %633, label %722

633:                                              ; preds = %630
  store i8 0, ptr %25, align 1, !tbaa !9
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %634

634:                                              ; preds = %662, %633
  %635 = load i64, ptr %13, align 8, !tbaa !24
  %636 = load i64, ptr %9, align 8, !tbaa !24
  %637 = load i64, ptr %11, align 8, !tbaa !24
  %638 = add nsw i64 %636, %637
  %639 = sub nsw i64 %638, 1
  %640 = icmp sle i64 %635, %639
  br i1 %640, label %641, label %665

641:                                              ; preds = %634
  %642 = load i8, ptr %25, align 1, !tbaa !9, !range !25, !noundef !26
  %643 = trunc i8 %642 to i1
  br i1 %643, label %659, label %644

644:                                              ; preds = %641
  %645 = load ptr, ptr %5, align 8, !tbaa !5
  %646 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %645, i32 0, i32 51
  %647 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %646, i32 0, i32 2
  %648 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %647, i32 0, i32 6
  %649 = load ptr, ptr %648, align 8, !tbaa !23
  %650 = load i64, ptr %12, align 8, !tbaa !24
  %651 = getelementptr inbounds ptr, ptr %649, i64 %650
  %652 = load ptr, ptr %651, align 8, !tbaa !5
  %653 = load i64, ptr %13, align 8, !tbaa !24
  %654 = getelementptr inbounds double, ptr %652, i64 %653
  %655 = load double, ptr %654, align 8, !tbaa !27
  %656 = load ptr, ptr %7, align 8, !tbaa !5
  %657 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %655, ptr noundef %656)
  %658 = xor i1 %657, true
  br label %659

659:                                              ; preds = %644, %641
  %660 = phi i1 [ true, %641 ], [ %658, %644 ]
  %661 = zext i1 %660 to i8
  store i8 %661, ptr %25, align 1, !tbaa !9
  br label %662

662:                                              ; preds = %659
  %663 = load i64, ptr %13, align 8, !tbaa !24
  %664 = add nsw i64 %663, 1
  store i64 %664, ptr %13, align 8, !tbaa !24
  br label %634, !llvm.loop !50

665:                                              ; preds = %634
  %666 = load i8, ptr %25, align 1, !tbaa !9, !range !25, !noundef !26
  %667 = trunc i8 %666 to i1
  br i1 %667, label %719, label %668

668:                                              ; preds = %665
  %669 = load i64, ptr %12, align 8, !tbaa !24
  %670 = load i64, ptr %23, align 8, !tbaa !24
  %671 = sub nsw i64 %670, 1
  %672 = icmp ne i64 %669, %671
  br i1 %672, label %673, label %698

673:                                              ; preds = %668
  %674 = load i64, ptr %8, align 8, !tbaa !24
  %675 = load ptr, ptr %5, align 8, !tbaa !5
  %676 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %675, i32 0, i32 51
  %677 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %676, i32 0, i32 1
  %678 = load i64, ptr %12, align 8, !tbaa !24
  %679 = load ptr, ptr %5, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %679, i32 0, i32 51
  %681 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %680, i32 0, i32 1
  %682 = load i64, ptr %23, align 8, !tbaa !24
  %683 = sub nsw i64 %682, 1
  %684 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyrrElPKNS_9ae_matrixElPS0_lPNS_8ae_stateE(i64 noundef %674, ptr noundef %677, i64 noundef %678, ptr noundef %681, i64 noundef %683, ptr noundef %684)
  %685 = load i64, ptr %9, align 8, !tbaa !24
  %686 = load i64, ptr %11, align 8, !tbaa !24
  %687 = add nsw i64 %685, %686
  %688 = load ptr, ptr %5, align 8, !tbaa !5
  %689 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %688, i32 0, i32 51
  %690 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %689, i32 0, i32 2
  %691 = load i64, ptr %12, align 8, !tbaa !24
  %692 = load ptr, ptr %5, align 8, !tbaa !5
  %693 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %692, i32 0, i32 51
  %694 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %693, i32 0, i32 2
  %695 = load i64, ptr %23, align 8, !tbaa !24
  %696 = sub nsw i64 %695, 1
  %697 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rcopyrrElPKNS_9ae_matrixElPS0_lPNS_8ae_stateE(i64 noundef %687, ptr noundef %690, i64 noundef %691, ptr noundef %694, i64 noundef %696, ptr noundef %697)
  br label %698

698:                                              ; preds = %673, %668
  %699 = load i64, ptr %8, align 8, !tbaa !24
  %700 = load ptr, ptr %5, align 8, !tbaa !5
  %701 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %700, i32 0, i32 51
  %702 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %701, i32 0, i32 1
  %703 = load i64, ptr %23, align 8, !tbaa !24
  %704 = sub nsw i64 %703, 1
  %705 = load ptr, ptr %5, align 8, !tbaa !5
  %706 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %705, i32 0, i32 67
  %707 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl11rmergeminrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %699, ptr noundef %702, i64 noundef %704, ptr noundef %706, ptr noundef %707)
  %708 = load i64, ptr %8, align 8, !tbaa !24
  %709 = load ptr, ptr %5, align 8, !tbaa !5
  %710 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %709, i32 0, i32 51
  %711 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %710, i32 0, i32 1
  %712 = load i64, ptr %23, align 8, !tbaa !24
  %713 = sub nsw i64 %712, 1
  %714 = load ptr, ptr %5, align 8, !tbaa !5
  %715 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %714, i32 0, i32 68
  %716 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl11rmergemaxrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %708, ptr noundef %711, i64 noundef %713, ptr noundef %715, ptr noundef %716)
  %717 = load i64, ptr %23, align 8, !tbaa !24
  %718 = sub nsw i64 %717, 1
  store i64 %718, ptr %23, align 8, !tbaa !24
  br label %719

719:                                              ; preds = %698, %665
  %720 = load i64, ptr %12, align 8, !tbaa !24
  %721 = sub nsw i64 %720, 1
  store i64 %721, ptr %12, align 8, !tbaa !24
  br label %630, !llvm.loop !51

722:                                              ; preds = %630
  %723 = load i64, ptr %23, align 8, !tbaa !24
  %724 = icmp eq i64 %723, 0
  br i1 %724, label %725, label %726

725:                                              ; preds = %722
  br label %856

726:                                              ; preds = %722
  %727 = load i64, ptr %23, align 8, !tbaa !24
  %728 = load i64, ptr %22, align 8, !tbaa !24
  %729 = load i64, ptr @_ZN11alglib_implL31diffevo_minpopsizefortighteningE, align 8, !tbaa !24
  %730 = sub nsw i64 %728, %729
  %731 = icmp sle i64 %727, %730
  br i1 %731, label %732, label %796

732:                                              ; preds = %726
  %733 = load i64, ptr @_ZN11alglib_implL31diffevo_minpopsizefortighteningE, align 8, !tbaa !24
  %734 = icmp sge i64 %733, 2
  %735 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %734, ptr noundef @.str.1451, ptr noundef %735)
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %736

736:                                              ; preds = %792, %732
  %737 = load i64, ptr %13, align 8, !tbaa !24
  %738 = load i64, ptr %8, align 8, !tbaa !24
  %739 = sub nsw i64 %738, 1
  %740 = icmp sle i64 %737, %739
  br i1 %740, label %741, label %795

741:                                              ; preds = %736
  %742 = load double, ptr @_ZN11alglib_implL20diffevo_tighteningmuE, align 8, !tbaa !27
  %743 = load ptr, ptr %5, align 8, !tbaa !5
  %744 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %743, i32 0, i32 69
  %745 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %744, i32 0, i32 4
  %746 = load ptr, ptr %745, align 8, !tbaa !23
  %747 = load i64, ptr %13, align 8, !tbaa !24
  %748 = getelementptr inbounds double, ptr %746, i64 %747
  %749 = load double, ptr %748, align 8, !tbaa !27
  %750 = load double, ptr @_ZN11alglib_implL20diffevo_tighteningmuE, align 8, !tbaa !27
  %751 = fsub double 1.000000e+00, %750
  %752 = load ptr, ptr %5, align 8, !tbaa !5
  %753 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %752, i32 0, i32 67
  %754 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %753, i32 0, i32 4
  %755 = load ptr, ptr %754, align 8, !tbaa !23
  %756 = load i64, ptr %13, align 8, !tbaa !24
  %757 = getelementptr inbounds double, ptr %755, i64 %756
  %758 = load double, ptr %757, align 8, !tbaa !27
  %759 = fmul double %751, %758
  %760 = call double @llvm.fmuladd.f64(double %742, double %749, double %759)
  %761 = load ptr, ptr %5, align 8, !tbaa !5
  %762 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %761, i32 0, i32 69
  %763 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %762, i32 0, i32 4
  %764 = load ptr, ptr %763, align 8, !tbaa !23
  %765 = load i64, ptr %13, align 8, !tbaa !24
  %766 = getelementptr inbounds double, ptr %764, i64 %765
  store double %760, ptr %766, align 8, !tbaa !27
  %767 = load double, ptr @_ZN11alglib_implL20diffevo_tighteningmuE, align 8, !tbaa !27
  %768 = load ptr, ptr %5, align 8, !tbaa !5
  %769 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %768, i32 0, i32 70
  %770 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %769, i32 0, i32 4
  %771 = load ptr, ptr %770, align 8, !tbaa !23
  %772 = load i64, ptr %13, align 8, !tbaa !24
  %773 = getelementptr inbounds double, ptr %771, i64 %772
  %774 = load double, ptr %773, align 8, !tbaa !27
  %775 = load double, ptr @_ZN11alglib_implL20diffevo_tighteningmuE, align 8, !tbaa !27
  %776 = fsub double 1.000000e+00, %775
  %777 = load ptr, ptr %5, align 8, !tbaa !5
  %778 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %777, i32 0, i32 68
  %779 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %778, i32 0, i32 4
  %780 = load ptr, ptr %779, align 8, !tbaa !23
  %781 = load i64, ptr %13, align 8, !tbaa !24
  %782 = getelementptr inbounds double, ptr %780, i64 %781
  %783 = load double, ptr %782, align 8, !tbaa !27
  %784 = fmul double %776, %783
  %785 = call double @llvm.fmuladd.f64(double %767, double %774, double %784)
  %786 = load ptr, ptr %5, align 8, !tbaa !5
  %787 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %786, i32 0, i32 70
  %788 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %787, i32 0, i32 4
  %789 = load ptr, ptr %788, align 8, !tbaa !23
  %790 = load i64, ptr %13, align 8, !tbaa !24
  %791 = getelementptr inbounds double, ptr %789, i64 %790
  store double %785, ptr %791, align 8, !tbaa !27
  br label %792

792:                                              ; preds = %741
  %793 = load i64, ptr %13, align 8, !tbaa !24
  %794 = add nsw i64 %793, 1
  store i64 %794, ptr %13, align 8, !tbaa !24
  br label %736, !llvm.loop !52

795:                                              ; preds = %736
  br label %796

796:                                              ; preds = %795, %726
  store i64 0, ptr %12, align 8, !tbaa !24
  br label %797

797:                                              ; preds = %850, %796
  %798 = load i64, ptr %12, align 8, !tbaa !24
  %799 = load i64, ptr %23, align 8, !tbaa !24
  %800 = sub nsw i64 %799, 1
  %801 = icmp sle i64 %798, %800
  br i1 %801, label %802, label %853

802:                                              ; preds = %797
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %803

803:                                              ; preds = %846, %802
  %804 = load i64, ptr %13, align 8, !tbaa !24
  %805 = load i64, ptr %8, align 8, !tbaa !24
  %806 = sub nsw i64 %805, 1
  %807 = icmp sle i64 %804, %806
  br i1 %807, label %808, label %849

808:                                              ; preds = %803
  %809 = load ptr, ptr %5, align 8, !tbaa !5
  %810 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %809, i32 0, i32 69
  %811 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %810, i32 0, i32 4
  %812 = load ptr, ptr %811, align 8, !tbaa !23
  %813 = load i64, ptr %13, align 8, !tbaa !24
  %814 = getelementptr inbounds double, ptr %812, i64 %813
  %815 = load double, ptr %814, align 8, !tbaa !27
  %816 = load ptr, ptr %5, align 8, !tbaa !5
  %817 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %816, i32 0, i32 70
  %818 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %817, i32 0, i32 4
  %819 = load ptr, ptr %818, align 8, !tbaa !23
  %820 = load i64, ptr %13, align 8, !tbaa !24
  %821 = getelementptr inbounds double, ptr %819, i64 %820
  %822 = load double, ptr %821, align 8, !tbaa !27
  %823 = load ptr, ptr %5, align 8, !tbaa !5
  %824 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %823, i32 0, i32 69
  %825 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %824, i32 0, i32 4
  %826 = load ptr, ptr %825, align 8, !tbaa !23
  %827 = load i64, ptr %13, align 8, !tbaa !24
  %828 = getelementptr inbounds double, ptr %826, i64 %827
  %829 = load double, ptr %828, align 8, !tbaa !27
  %830 = fsub double %822, %829
  %831 = load ptr, ptr %5, align 8, !tbaa !5
  %832 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %831, i32 0, i32 50
  %833 = load ptr, ptr %7, align 8, !tbaa !5
  %834 = call noundef double @_ZN11alglib_impl13hqrnduniformrEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef %832, ptr noundef %833)
  %835 = call double @llvm.fmuladd.f64(double %830, double %834, double %815)
  %836 = load ptr, ptr %5, align 8, !tbaa !5
  %837 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %836, i32 0, i32 51
  %838 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %837, i32 0, i32 1
  %839 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %838, i32 0, i32 6
  %840 = load ptr, ptr %839, align 8, !tbaa !23
  %841 = load i64, ptr %12, align 8, !tbaa !24
  %842 = getelementptr inbounds ptr, ptr %840, i64 %841
  %843 = load ptr, ptr %842, align 8, !tbaa !5
  %844 = load i64, ptr %13, align 8, !tbaa !24
  %845 = getelementptr inbounds double, ptr %843, i64 %844
  store double %835, ptr %845, align 8, !tbaa !27
  br label %846

846:                                              ; preds = %808
  %847 = load i64, ptr %13, align 8, !tbaa !24
  %848 = add nsw i64 %847, 1
  store i64 %848, ptr %13, align 8, !tbaa !24
  br label %803, !llvm.loop !53

849:                                              ; preds = %803
  br label %850

850:                                              ; preds = %849
  %851 = load i64, ptr %12, align 8, !tbaa !24
  %852 = add nsw i64 %851, 1
  store i64 %852, ptr %12, align 8, !tbaa !24
  br label %797, !llvm.loop !54

853:                                              ; preds = %797
  %854 = load i64, ptr %24, align 8, !tbaa !24
  %855 = add nsw i64 %854, 1
  store i64 %855, ptr %24, align 8, !tbaa !24
  br label %503

856:                                              ; preds = %725, %517
  %857 = load i64, ptr %23, align 8, !tbaa !24
  %858 = icmp sgt i64 %857, 0
  br i1 %858, label %859, label %864

859:                                              ; preds = %856
  %860 = load ptr, ptr %5, align 8, !tbaa !5
  %861 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %860, i32 0, i32 59
  store i64 -8, ptr %861, align 8, !tbaa !34
  store i8 0, ptr %26, align 1, !tbaa !9
  %862 = load i8, ptr %26, align 1, !tbaa !9, !range !25, !noundef !26
  %863 = trunc i8 %862 to i1
  store i1 %863, ptr %4, align 1
  store i32 1, ptr %27, align 4
  br label %1383

864:                                              ; preds = %856
  %865 = load ptr, ptr %5, align 8, !tbaa !5
  %866 = load ptr, ptr %5, align 8, !tbaa !5
  %867 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %866, i32 0, i32 51
  %868 = load ptr, ptr %5, align 8, !tbaa !5
  %869 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %868, i32 0, i32 51
  %870 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_implL22diffevo_computefitnessEPKNS_10gdemostateEPKNS_15gdemopopulationEbPS3_PNS_8ae_stateE(ptr noundef %865, ptr noundef %867, i1 noundef zeroext false, ptr noundef %869, ptr noundef %870)
  %871 = load ptr, ptr %5, align 8, !tbaa !5
  %872 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_implL18diffevo_updatebestEPNS_10gdemostateEPNS_8ae_stateE(ptr noundef %871, ptr noundef %872)
  %873 = load ptr, ptr %5, align 8, !tbaa !5
  %874 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %873, i32 0, i32 35
  %875 = load i8, ptr %874, align 8, !tbaa !55, !range !25, !noundef !26
  %876 = trunc i8 %875 to i1
  br i1 %876, label %887, label %877

877:                                              ; preds = %864
  %878 = load ptr, ptr %5, align 8, !tbaa !5
  %879 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %878, i32 0, i32 55
  %880 = load i64, ptr %879, align 8, !tbaa !56
  %881 = load i64, ptr @_ZN11alglib_implL17diffevo_paramscntE, align 8, !tbaa !24
  %882 = load ptr, ptr %5, align 8, !tbaa !5
  %883 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %882, i32 0, i32 53
  %884 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocmEllPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %880, i64 noundef %881, ptr noundef %883, ptr noundef %884)
  %885 = load ptr, ptr %5, align 8, !tbaa !5
  %886 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %885, i32 0, i32 56
  store i64 0, ptr %886, align 8, !tbaa !57
  br label %887

887:                                              ; preds = %877, %864
  store i64 0, ptr %24, align 8, !tbaa !24
  br label %888

888:                                              ; preds = %1242, %887
  %889 = load i64, ptr %24, align 8, !tbaa !24
  %890 = load ptr, ptr %5, align 8, !tbaa !5
  %891 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %890, i32 0, i32 27
  %892 = load i64, ptr %891, align 8, !tbaa !43
  %893 = sub nsw i64 %892, 1
  %894 = icmp sgt i64 %889, %893
  br i1 %894, label %895, label %896

895:                                              ; preds = %888
  br label %1245

896:                                              ; preds = %888
  %897 = load ptr, ptr %5, align 8, !tbaa !5
  %898 = load ptr, ptr %5, align 8, !tbaa !5
  %899 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %898, i32 0, i32 51
  %900 = load ptr, ptr %5, align 8, !tbaa !5
  %901 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %900, i32 0, i32 52
  %902 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_implL27diffevo_generatetrialpointsEPNS_10gdemostateEPKNS_15gdemopopulationEPS2_PNS_8ae_stateE(ptr noundef %897, ptr noundef %899, ptr noundef %901, ptr noundef %902)
  %903 = load ptr, ptr %5, align 8, !tbaa !5
  %904 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %903, i32 0, i32 43
  store i64 4, ptr %904, align 8, !tbaa !44
  %905 = load ptr, ptr %5, align 8, !tbaa !5
  %906 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %905, i32 0, i32 52
  %907 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %906, i32 0, i32 0
  %908 = load i64, ptr %907, align 8, !tbaa !58
  %909 = load ptr, ptr %5, align 8, !tbaa !5
  %910 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %909, i32 0, i32 46
  store i64 %908, ptr %910, align 8, !tbaa !45
  %911 = load i64, ptr %8, align 8, !tbaa !24
  %912 = load ptr, ptr %5, align 8, !tbaa !5
  %913 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %912, i32 0, i32 52
  %914 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %913, i32 0, i32 0
  %915 = load i64, ptr %914, align 8, !tbaa !58
  %916 = mul nsw i64 %911, %915
  %917 = load ptr, ptr %5, align 8, !tbaa !5
  %918 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %917, i32 0, i32 47
  %919 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %916, ptr noundef %918, ptr noundef %919)
  store i64 0, ptr %12, align 8, !tbaa !24
  br label %920

920:                                              ; preds = %960, %896
  %921 = load i64, ptr %12, align 8, !tbaa !24
  %922 = load ptr, ptr %5, align 8, !tbaa !5
  %923 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %922, i32 0, i32 52
  %924 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %923, i32 0, i32 0
  %925 = load i64, ptr %924, align 8, !tbaa !58
  %926 = sub nsw i64 %925, 1
  %927 = icmp sle i64 %921, %926
  br i1 %927, label %928, label %963

928:                                              ; preds = %920
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %929

929:                                              ; preds = %956, %928
  %930 = load i64, ptr %13, align 8, !tbaa !24
  %931 = load i64, ptr %8, align 8, !tbaa !24
  %932 = sub nsw i64 %931, 1
  %933 = icmp sle i64 %930, %932
  br i1 %933, label %934, label %959

934:                                              ; preds = %929
  %935 = load ptr, ptr %5, align 8, !tbaa !5
  %936 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %935, i32 0, i32 52
  %937 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %936, i32 0, i32 1
  %938 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %937, i32 0, i32 6
  %939 = load ptr, ptr %938, align 8, !tbaa !23
  %940 = load i64, ptr %12, align 8, !tbaa !24
  %941 = getelementptr inbounds ptr, ptr %939, i64 %940
  %942 = load ptr, ptr %941, align 8, !tbaa !5
  %943 = load i64, ptr %13, align 8, !tbaa !24
  %944 = getelementptr inbounds double, ptr %942, i64 %943
  %945 = load double, ptr %944, align 8, !tbaa !27
  %946 = load ptr, ptr %5, align 8, !tbaa !5
  %947 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %946, i32 0, i32 47
  %948 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %947, i32 0, i32 4
  %949 = load ptr, ptr %948, align 8, !tbaa !23
  %950 = load i64, ptr %12, align 8, !tbaa !24
  %951 = load i64, ptr %8, align 8, !tbaa !24
  %952 = mul nsw i64 %950, %951
  %953 = load i64, ptr %13, align 8, !tbaa !24
  %954 = add nsw i64 %952, %953
  %955 = getelementptr inbounds double, ptr %949, i64 %954
  store double %945, ptr %955, align 8, !tbaa !27
  br label %956

956:                                              ; preds = %934
  %957 = load i64, ptr %13, align 8, !tbaa !24
  %958 = add nsw i64 %957, 1
  store i64 %958, ptr %13, align 8, !tbaa !24
  br label %929, !llvm.loop !59

959:                                              ; preds = %929
  br label %960

960:                                              ; preds = %959
  %961 = load i64, ptr %12, align 8, !tbaa !24
  %962 = add nsw i64 %961, 1
  store i64 %962, ptr %12, align 8, !tbaa !24
  br label %920, !llvm.loop !60

963:                                              ; preds = %920
  %964 = load ptr, ptr %5, align 8, !tbaa !5
  %965 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %964, i32 0, i32 52
  %966 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %965, i32 0, i32 0
  %967 = load i64, ptr %966, align 8, !tbaa !58
  %968 = load i64, ptr %9, align 8, !tbaa !24
  %969 = load i64, ptr %11, align 8, !tbaa !24
  %970 = add nsw i64 %968, %969
  %971 = mul nsw i64 %967, %970
  %972 = load ptr, ptr %5, align 8, !tbaa !5
  %973 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %972, i32 0, i32 48
  %974 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %971, ptr noundef %973, ptr noundef %974)
  %975 = load ptr, ptr %5, align 8, !tbaa !5
  %976 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %975, i32 0, i32 49
  %977 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %976, i32 0, i32 0
  store i32 1, ptr %977, align 8, !tbaa !11
  br label %1248

978:                                              ; preds = %181
  store i64 0, ptr %12, align 8, !tbaa !24
  br label %979

979:                                              ; preds = %1023, %978
  %980 = load i64, ptr %12, align 8, !tbaa !24
  %981 = load ptr, ptr %5, align 8, !tbaa !5
  %982 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %981, i32 0, i32 52
  %983 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %982, i32 0, i32 0
  %984 = load i64, ptr %983, align 8, !tbaa !58
  %985 = sub nsw i64 %984, 1
  %986 = icmp sle i64 %980, %985
  br i1 %986, label %987, label %1026

987:                                              ; preds = %979
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %988

988:                                              ; preds = %1019, %987
  %989 = load i64, ptr %13, align 8, !tbaa !24
  %990 = load i64, ptr %9, align 8, !tbaa !24
  %991 = load i64, ptr %11, align 8, !tbaa !24
  %992 = add nsw i64 %990, %991
  %993 = sub nsw i64 %992, 1
  %994 = icmp sle i64 %989, %993
  br i1 %994, label %995, label %1022

995:                                              ; preds = %988
  %996 = load ptr, ptr %5, align 8, !tbaa !5
  %997 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %996, i32 0, i32 48
  %998 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %997, i32 0, i32 4
  %999 = load ptr, ptr %998, align 8, !tbaa !23
  %1000 = load i64, ptr %12, align 8, !tbaa !24
  %1001 = load i64, ptr %9, align 8, !tbaa !24
  %1002 = load i64, ptr %11, align 8, !tbaa !24
  %1003 = add nsw i64 %1001, %1002
  %1004 = mul nsw i64 %1000, %1003
  %1005 = load i64, ptr %13, align 8, !tbaa !24
  %1006 = add nsw i64 %1004, %1005
  %1007 = getelementptr inbounds double, ptr %999, i64 %1006
  %1008 = load double, ptr %1007, align 8, !tbaa !27
  %1009 = load ptr, ptr %5, align 8, !tbaa !5
  %1010 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1009, i32 0, i32 52
  %1011 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %1010, i32 0, i32 2
  %1012 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1011, i32 0, i32 6
  %1013 = load ptr, ptr %1012, align 8, !tbaa !23
  %1014 = load i64, ptr %12, align 8, !tbaa !24
  %1015 = getelementptr inbounds ptr, ptr %1013, i64 %1014
  %1016 = load ptr, ptr %1015, align 8, !tbaa !5
  %1017 = load i64, ptr %13, align 8, !tbaa !24
  %1018 = getelementptr inbounds double, ptr %1016, i64 %1017
  store double %1008, ptr %1018, align 8, !tbaa !27
  br label %1019

1019:                                             ; preds = %995
  %1020 = load i64, ptr %13, align 8, !tbaa !24
  %1021 = add nsw i64 %1020, 1
  store i64 %1021, ptr %13, align 8, !tbaa !24
  br label %988, !llvm.loop !61

1022:                                             ; preds = %988
  br label %1023

1023:                                             ; preds = %1022
  %1024 = load i64, ptr %12, align 8, !tbaa !24
  %1025 = add nsw i64 %1024, 1
  store i64 %1025, ptr %12, align 8, !tbaa !24
  br label %979, !llvm.loop !62

1026:                                             ; preds = %979
  %1027 = load ptr, ptr %5, align 8, !tbaa !5
  %1028 = load ptr, ptr %5, align 8, !tbaa !5
  %1029 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1028, i32 0, i32 51
  %1030 = load ptr, ptr %5, align 8, !tbaa !5
  %1031 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1030, i32 0, i32 52
  %1032 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_implL22diffevo_computefitnessEPKNS_10gdemostateEPKNS_15gdemopopulationEbPS3_PNS_8ae_stateE(ptr noundef %1027, ptr noundef %1029, i1 noundef zeroext true, ptr noundef %1031, ptr noundef %1032)
  %1033 = load ptr, ptr %5, align 8, !tbaa !5
  %1034 = load ptr, ptr %5, align 8, !tbaa !5
  %1035 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1034, i32 0, i32 52
  %1036 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_implL24diffevo_updatepopulationEPNS_10gdemostateEPKNS_15gdemopopulationEPNS_8ae_stateE(ptr noundef %1033, ptr noundef %1035, ptr noundef %1036)
  %1037 = load ptr, ptr %5, align 8, !tbaa !5
  %1038 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_implL18diffevo_updatebestEPNS_10gdemostateEPNS_8ae_stateE(ptr noundef %1037, ptr noundef %1038)
  %1039 = load ptr, ptr %5, align 8, !tbaa !5
  %1040 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1039, i32 0, i32 60
  %1041 = load i64, ptr %1040, align 8, !tbaa !33
  %1042 = add nsw i64 %1041, 1
  %1043 = load ptr, ptr %5, align 8, !tbaa !5
  %1044 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1043, i32 0, i32 60
  store i64 %1042, ptr %1044, align 8, !tbaa !33
  %1045 = load ptr, ptr %5, align 8, !tbaa !5
  %1046 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1045, i32 0, i32 39
  %1047 = load i8, ptr %1046, align 8, !tbaa !63, !range !25, !noundef !26
  %1048 = trunc i8 %1047 to i1
  br i1 %1048, label %1049, label %1066

1049:                                             ; preds = %1026
  %1050 = load i64, ptr %9, align 8, !tbaa !24
  %1051 = icmp eq i64 %1050, 1
  br i1 %1051, label %1052, label %1066

1052:                                             ; preds = %1049
  %1053 = load ptr, ptr %5, align 8, !tbaa !5
  %1054 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1053, i32 0, i32 58
  %1055 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1054, i32 0, i32 4
  %1056 = load ptr, ptr %1055, align 8, !tbaa !23
  %1057 = getelementptr inbounds double, ptr %1056, i64 0
  %1058 = load double, ptr %1057, align 8, !tbaa !27
  %1059 = load ptr, ptr %5, align 8, !tbaa !5
  %1060 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1059, i32 0, i32 40
  %1061 = load double, ptr %1060, align 8, !tbaa !64
  %1062 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %1058, double noundef %1061)
  br i1 %1062, label %1063, label %1066

1063:                                             ; preds = %1052
  %1064 = load ptr, ptr %5, align 8, !tbaa !5
  %1065 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1064, i32 0, i32 59
  store i64 6, ptr %1065, align 8, !tbaa !34
  br label %1245

1066:                                             ; preds = %1052, %1049, %1026
  %1067 = load ptr, ptr %5, align 8, !tbaa !5
  %1068 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1067, i32 0, i32 41
  %1069 = load double, ptr %1068, align 8, !tbaa !65
  %1070 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %1069, double noundef 0.000000e+00)
  br i1 %1070, label %1076, label %1071

1071:                                             ; preds = %1066
  %1072 = load ptr, ptr %5, align 8, !tbaa !5
  %1073 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1072, i32 0, i32 42
  %1074 = load double, ptr %1073, align 8, !tbaa !66
  %1075 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %1074, double noundef 0.000000e+00)
  br i1 %1075, label %1076, label %1242

1076:                                             ; preds = %1071, %1066
  %1077 = load i64, ptr %9, align 8, !tbaa !24
  %1078 = icmp eq i64 %1077, 1
  br i1 %1078, label %1079, label %1242

1079:                                             ; preds = %1076
  %1080 = load ptr, ptr %5, align 8, !tbaa !5
  %1081 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1080, i32 0, i32 58
  %1082 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1081, i32 0, i32 4
  %1083 = load ptr, ptr %1082, align 8, !tbaa !23
  %1084 = getelementptr inbounds double, ptr %1083, i64 0
  %1085 = load double, ptr %1084, align 8, !tbaa !27
  %1086 = load ptr, ptr %7, align 8, !tbaa !5
  %1087 = call noundef zeroext i1 @_ZN11alglib_impl8ae_isnanEdPNS_8ae_stateE(double noundef %1085, ptr noundef %1086)
  %1088 = xor i1 %1087, true
  %1089 = load ptr, ptr %7, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %1088, ptr noundef @.str.1452, ptr noundef %1089)
  store i64 0, ptr %14, align 8, !tbaa !24
  store i64 0, ptr %15, align 8, !tbaa !24
  %1090 = load ptr, ptr %5, align 8, !tbaa !5
  %1091 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1090, i32 0, i32 58
  %1092 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1091, i32 0, i32 4
  %1093 = load ptr, ptr %1092, align 8, !tbaa !23
  %1094 = getelementptr inbounds double, ptr %1093, i64 0
  %1095 = load double, ptr %1094, align 8, !tbaa !27
  %1096 = load ptr, ptr %5, align 8, !tbaa !5
  %1097 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1096, i32 0, i32 41
  %1098 = load double, ptr %1097, align 8, !tbaa !65
  %1099 = load ptr, ptr %5, align 8, !tbaa !5
  %1100 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1099, i32 0, i32 58
  %1101 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1100, i32 0, i32 4
  %1102 = load ptr, ptr %1101, align 8, !tbaa !23
  %1103 = getelementptr inbounds double, ptr %1102, i64 0
  %1104 = load double, ptr %1103, align 8, !tbaa !27
  %1105 = load ptr, ptr %7, align 8, !tbaa !5
  %1106 = call noundef double @_ZN11alglib_impl8rmaxabs2EddPNS_8ae_stateE(double noundef %1104, double noundef 1.000000e+00, ptr noundef %1105)
  %1107 = call double @llvm.fmuladd.f64(double %1098, double %1106, double %1095)
  store double %1107, ptr %16, align 8, !tbaa !27
  store i64 0, ptr %12, align 8, !tbaa !24
  br label %1108

1108:                                             ; preds = %1211, %1079
  %1109 = load i64, ptr %12, align 8, !tbaa !24
  %1110 = load i64, ptr %22, align 8, !tbaa !24
  %1111 = sub nsw i64 %1110, 1
  %1112 = icmp sle i64 %1109, %1111
  br i1 %1112, label %1113, label %1214

1113:                                             ; preds = %1108
  %1114 = load ptr, ptr %5, align 8, !tbaa !5
  %1115 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1114, i32 0, i32 41
  %1116 = load double, ptr %1115, align 8, !tbaa !65
  %1117 = fcmp ogt double %1116, 0.000000e+00
  br i1 %1117, label %1118, label %1132

1118:                                             ; preds = %1113
  %1119 = load ptr, ptr %5, align 8, !tbaa !5
  %1120 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1119, i32 0, i32 51
  %1121 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %1120, i32 0, i32 3
  %1122 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1121, i32 0, i32 6
  %1123 = load ptr, ptr %1122, align 8, !tbaa !23
  %1124 = load i64, ptr %12, align 8, !tbaa !24
  %1125 = getelementptr inbounds ptr, ptr %1123, i64 %1124
  %1126 = load ptr, ptr %1125, align 8, !tbaa !5
  %1127 = getelementptr inbounds double, ptr %1126, i64 0
  %1128 = load double, ptr %1127, align 8, !tbaa !27
  %1129 = load double, ptr %16, align 8, !tbaa !27
  %1130 = fcmp ogt double %1128, %1129
  br i1 %1130, label %1131, label %1132

1131:                                             ; preds = %1118
  br label %1211

1132:                                             ; preds = %1118, %1113
  %1133 = load i64, ptr %14, align 8, !tbaa !24
  %1134 = add nsw i64 %1133, 1
  store i64 %1134, ptr %14, align 8, !tbaa !24
  %1135 = load ptr, ptr %5, align 8, !tbaa !5
  %1136 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1135, i32 0, i32 42
  %1137 = load double, ptr %1136, align 8, !tbaa !66
  %1138 = fcmp ogt double %1137, 0.000000e+00
  br i1 %1138, label %1139, label %1208

1139:                                             ; preds = %1132
  store double 0.000000e+00, ptr %17, align 8, !tbaa !27
  store i64 0, ptr %13, align 8, !tbaa !24
  br label %1140

1140:                                             ; preds = %1190, %1139
  %1141 = load i64, ptr %13, align 8, !tbaa !24
  %1142 = load i64, ptr %8, align 8, !tbaa !24
  %1143 = sub nsw i64 %1142, 1
  %1144 = icmp sle i64 %1141, %1143
  br i1 %1144, label %1145, label %1193

1145:                                             ; preds = %1140
  %1146 = load double, ptr %17, align 8, !tbaa !27
  %1147 = load ptr, ptr %5, align 8, !tbaa !5
  %1148 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1147, i32 0, i32 51
  %1149 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %1148, i32 0, i32 1
  %1150 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1149, i32 0, i32 6
  %1151 = load ptr, ptr %1150, align 8, !tbaa !23
  %1152 = load i64, ptr %12, align 8, !tbaa !24
  %1153 = getelementptr inbounds ptr, ptr %1151, i64 %1152
  %1154 = load ptr, ptr %1153, align 8, !tbaa !5
  %1155 = load i64, ptr %13, align 8, !tbaa !24
  %1156 = getelementptr inbounds double, ptr %1154, i64 %1155
  %1157 = load double, ptr %1156, align 8, !tbaa !27
  %1158 = load ptr, ptr %5, align 8, !tbaa !5
  %1159 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1158, i32 0, i32 57
  %1160 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1159, i32 0, i32 6
  %1161 = load ptr, ptr %1160, align 8, !tbaa !23
  %1162 = getelementptr inbounds ptr, ptr %1161, i64 0
  %1163 = load ptr, ptr %1162, align 8, !tbaa !5
  %1164 = load i64, ptr %13, align 8, !tbaa !24
  %1165 = getelementptr inbounds double, ptr %1163, i64 %1164
  %1166 = load double, ptr %1165, align 8, !tbaa !27
  %1167 = fsub double %1157, %1166
  %1168 = load ptr, ptr %5, align 8, !tbaa !5
  %1169 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1168, i32 0, i32 51
  %1170 = getelementptr inbounds %"struct.alglib_impl::gdemopopulation", ptr %1169, i32 0, i32 1
  %1171 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1170, i32 0, i32 6
  %1172 = load ptr, ptr %1171, align 8, !tbaa !23
  %1173 = load i64, ptr %12, align 8, !tbaa !24
  %1174 = getelementptr inbounds ptr, ptr %1172, i64 %1173
  %1175 = load ptr, ptr %1174, align 8, !tbaa !5
  %1176 = load i64, ptr %13, align 8, !tbaa !24
  %1177 = getelementptr inbounds double, ptr %1175, i64 %1176
  %1178 = load double, ptr %1177, align 8, !tbaa !27
  %1179 = load ptr, ptr %5, align 8, !tbaa !5
  %1180 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1179, i32 0, i32 57
  %1181 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1180, i32 0, i32 6
  %1182 = load ptr, ptr %1181, align 8, !tbaa !23
  %1183 = getelementptr inbounds ptr, ptr %1182, i64 0
  %1184 = load ptr, ptr %1183, align 8, !tbaa !5
  %1185 = load i64, ptr %13, align 8, !tbaa !24
  %1186 = getelementptr inbounds double, ptr %1184, i64 %1185
  %1187 = load double, ptr %1186, align 8, !tbaa !27
  %1188 = fsub double %1178, %1187
  %1189 = call double @llvm.fmuladd.f64(double %1167, double %1188, double %1146)
  store double %1189, ptr %17, align 8, !tbaa !27
  br label %1190

1190:                                             ; preds = %1145
  %1191 = load i64, ptr %13, align 8, !tbaa !24
  %1192 = add nsw i64 %1191, 1
  store i64 %1192, ptr %13, align 8, !tbaa !24
  br label %1140, !llvm.loop !67

1193:                                             ; preds = %1140
  %1194 = load double, ptr %17, align 8, !tbaa !27
  %1195 = load i64, ptr %8, align 8, !tbaa !24
  %1196 = sitofp i64 %1195 to double
  %1197 = fdiv double %1194, %1196
  %1198 = load ptr, ptr %5, align 8, !tbaa !5
  %1199 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1198, i32 0, i32 42
  %1200 = load double, ptr %1199, align 8, !tbaa !66
  %1201 = load ptr, ptr %5, align 8, !tbaa !5
  %1202 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1201, i32 0, i32 42
  %1203 = load double, ptr %1202, align 8, !tbaa !66
  %1204 = fmul double %1200, %1203
  %1205 = fcmp ogt double %1197, %1204
  br i1 %1205, label %1206, label %1207

1206:                                             ; preds = %1193
  br label %1211

1207:                                             ; preds = %1193
  br label %1208

1208:                                             ; preds = %1207, %1132
  %1209 = load i64, ptr %15, align 8, !tbaa !24
  %1210 = add nsw i64 %1209, 1
  store i64 %1210, ptr %15, align 8, !tbaa !24
  br label %1211

1211:                                             ; preds = %1208, %1206, %1131
  %1212 = load i64, ptr %12, align 8, !tbaa !24
  %1213 = add nsw i64 %1212, 1
  store i64 %1213, ptr %12, align 8, !tbaa !24
  br label %1108, !llvm.loop !68

1214:                                             ; preds = %1108
  %1215 = load i64, ptr %14, align 8, !tbaa !24
  %1216 = sitofp i64 %1215 to double
  %1217 = load i64, ptr %8, align 8, !tbaa !24
  %1218 = mul nsw i64 2, %1217
  %1219 = add nsw i64 %1218, 1
  %1220 = sitofp i64 %1219 to double
  %1221 = load i64, ptr %22, align 8, !tbaa !24
  %1222 = sitofp i64 %1221 to double
  %1223 = load ptr, ptr %7, align 8, !tbaa !5
  %1224 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %1220, double noundef %1222, ptr noundef %1223)
  %1225 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %1216, double noundef %1224)
  br i1 %1225, label %1226, label %1241

1226:                                             ; preds = %1214
  %1227 = load i64, ptr %15, align 8, !tbaa !24
  %1228 = sitofp i64 %1227 to double
  %1229 = load i64, ptr %8, align 8, !tbaa !24
  %1230 = mul nsw i64 2, %1229
  %1231 = add nsw i64 %1230, 1
  %1232 = sitofp i64 %1231 to double
  %1233 = load i64, ptr %22, align 8, !tbaa !24
  %1234 = sitofp i64 %1233 to double
  %1235 = load ptr, ptr %7, align 8, !tbaa !5
  %1236 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %1232, double noundef %1234, ptr noundef %1235)
  %1237 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %1228, double noundef %1236)
  br i1 %1237, label %1238, label %1241

1238:                                             ; preds = %1226
  %1239 = load ptr, ptr %5, align 8, !tbaa !5
  %1240 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1239, i32 0, i32 59
  store i64 1, ptr %1240, align 8, !tbaa !34
  br label %1245

1241:                                             ; preds = %1226, %1214
  br label %1242

1242:                                             ; preds = %1241, %1076, %1071
  %1243 = load i64, ptr %24, align 8, !tbaa !24
  %1244 = add nsw i64 %1243, 1
  store i64 %1244, ptr %24, align 8, !tbaa !24
  br label %888

1245:                                             ; preds = %1238, %1063, %895
  store i8 0, ptr %26, align 1, !tbaa !9
  %1246 = load i8, ptr %26, align 1, !tbaa !9, !range !25, !noundef !26
  %1247 = trunc i8 %1246 to i1
  store i1 %1247, ptr %4, align 1
  store i32 1, ptr %27, align 4
  br label %1383

1248:                                             ; preds = %963, %570
  store i8 1, ptr %26, align 1, !tbaa !9
  %1249 = load i64, ptr %8, align 8, !tbaa !24
  %1250 = load ptr, ptr %5, align 8, !tbaa !5
  %1251 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1250, i32 0, i32 49
  %1252 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1251, i32 0, i32 1
  %1253 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1252, i32 0, i32 4
  %1254 = load ptr, ptr %1253, align 8, !tbaa !23
  %1255 = getelementptr inbounds i64, ptr %1254, i64 0
  store i64 %1249, ptr %1255, align 8, !tbaa !24
  %1256 = load i64, ptr %9, align 8, !tbaa !24
  %1257 = load ptr, ptr %5, align 8, !tbaa !5
  %1258 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1257, i32 0, i32 49
  %1259 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1258, i32 0, i32 1
  %1260 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1259, i32 0, i32 4
  %1261 = load ptr, ptr %1260, align 8, !tbaa !23
  %1262 = getelementptr inbounds i64, ptr %1261, i64 1
  store i64 %1256, ptr %1262, align 8, !tbaa !24
  %1263 = load i64, ptr %10, align 8, !tbaa !24
  %1264 = load ptr, ptr %5, align 8, !tbaa !5
  %1265 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1264, i32 0, i32 49
  %1266 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1265, i32 0, i32 1
  %1267 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1266, i32 0, i32 4
  %1268 = load ptr, ptr %1267, align 8, !tbaa !23
  %1269 = getelementptr inbounds i64, ptr %1268, i64 2
  store i64 %1263, ptr %1269, align 8, !tbaa !24
  %1270 = load i64, ptr %11, align 8, !tbaa !24
  %1271 = load ptr, ptr %5, align 8, !tbaa !5
  %1272 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1271, i32 0, i32 49
  %1273 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1272, i32 0, i32 1
  %1274 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1273, i32 0, i32 4
  %1275 = load ptr, ptr %1274, align 8, !tbaa !23
  %1276 = getelementptr inbounds i64, ptr %1275, i64 3
  store i64 %1270, ptr %1276, align 8, !tbaa !24
  %1277 = load i64, ptr %12, align 8, !tbaa !24
  %1278 = load ptr, ptr %5, align 8, !tbaa !5
  %1279 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1278, i32 0, i32 49
  %1280 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1279, i32 0, i32 1
  %1281 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1280, i32 0, i32 4
  %1282 = load ptr, ptr %1281, align 8, !tbaa !23
  %1283 = getelementptr inbounds i64, ptr %1282, i64 4
  store i64 %1277, ptr %1283, align 8, !tbaa !24
  %1284 = load i64, ptr %13, align 8, !tbaa !24
  %1285 = load ptr, ptr %5, align 8, !tbaa !5
  %1286 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1285, i32 0, i32 49
  %1287 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1286, i32 0, i32 1
  %1288 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1287, i32 0, i32 4
  %1289 = load ptr, ptr %1288, align 8, !tbaa !23
  %1290 = getelementptr inbounds i64, ptr %1289, i64 5
  store i64 %1284, ptr %1290, align 8, !tbaa !24
  %1291 = load i64, ptr %14, align 8, !tbaa !24
  %1292 = load ptr, ptr %5, align 8, !tbaa !5
  %1293 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1292, i32 0, i32 49
  %1294 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1293, i32 0, i32 1
  %1295 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1294, i32 0, i32 4
  %1296 = load ptr, ptr %1295, align 8, !tbaa !23
  %1297 = getelementptr inbounds i64, ptr %1296, i64 6
  store i64 %1291, ptr %1297, align 8, !tbaa !24
  %1298 = load i64, ptr %15, align 8, !tbaa !24
  %1299 = load ptr, ptr %5, align 8, !tbaa !5
  %1300 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1299, i32 0, i32 49
  %1301 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1300, i32 0, i32 1
  %1302 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1301, i32 0, i32 4
  %1303 = load ptr, ptr %1302, align 8, !tbaa !23
  %1304 = getelementptr inbounds i64, ptr %1303, i64 7
  store i64 %1298, ptr %1304, align 8, !tbaa !24
  %1305 = load i64, ptr %22, align 8, !tbaa !24
  %1306 = load ptr, ptr %5, align 8, !tbaa !5
  %1307 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1306, i32 0, i32 49
  %1308 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1307, i32 0, i32 1
  %1309 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1308, i32 0, i32 4
  %1310 = load ptr, ptr %1309, align 8, !tbaa !23
  %1311 = getelementptr inbounds i64, ptr %1310, i64 8
  store i64 %1305, ptr %1311, align 8, !tbaa !24
  %1312 = load i64, ptr %23, align 8, !tbaa !24
  %1313 = load ptr, ptr %5, align 8, !tbaa !5
  %1314 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1313, i32 0, i32 49
  %1315 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1314, i32 0, i32 1
  %1316 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1315, i32 0, i32 4
  %1317 = load ptr, ptr %1316, align 8, !tbaa !23
  %1318 = getelementptr inbounds i64, ptr %1317, i64 9
  store i64 %1312, ptr %1318, align 8, !tbaa !24
  %1319 = load i64, ptr %24, align 8, !tbaa !24
  %1320 = load ptr, ptr %5, align 8, !tbaa !5
  %1321 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1320, i32 0, i32 49
  %1322 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1321, i32 0, i32 1
  %1323 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1322, i32 0, i32 4
  %1324 = load ptr, ptr %1323, align 8, !tbaa !23
  %1325 = getelementptr inbounds i64, ptr %1324, i64 10
  store i64 %1319, ptr %1325, align 8, !tbaa !24
  %1326 = load i8, ptr %20, align 1, !tbaa !9, !range !25, !noundef !26
  %1327 = trunc i8 %1326 to i1
  %1328 = load ptr, ptr %5, align 8, !tbaa !5
  %1329 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1328, i32 0, i32 49
  %1330 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1329, i32 0, i32 2
  %1331 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1330, i32 0, i32 4
  %1332 = load ptr, ptr %1331, align 8, !tbaa !23
  %1333 = getelementptr inbounds i8, ptr %1332, i64 0
  %1334 = zext i1 %1327 to i8
  store i8 %1334, ptr %1333, align 1, !tbaa !9
  %1335 = load i8, ptr %21, align 1, !tbaa !9, !range !25, !noundef !26
  %1336 = trunc i8 %1335 to i1
  %1337 = load ptr, ptr %5, align 8, !tbaa !5
  %1338 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1337, i32 0, i32 49
  %1339 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1338, i32 0, i32 2
  %1340 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1339, i32 0, i32 4
  %1341 = load ptr, ptr %1340, align 8, !tbaa !23
  %1342 = getelementptr inbounds i8, ptr %1341, i64 1
  %1343 = zext i1 %1336 to i8
  store i8 %1343, ptr %1342, align 1, !tbaa !9
  %1344 = load i8, ptr %25, align 1, !tbaa !9, !range !25, !noundef !26
  %1345 = trunc i8 %1344 to i1
  %1346 = load ptr, ptr %5, align 8, !tbaa !5
  %1347 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1346, i32 0, i32 49
  %1348 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1347, i32 0, i32 2
  %1349 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1348, i32 0, i32 4
  %1350 = load ptr, ptr %1349, align 8, !tbaa !23
  %1351 = getelementptr inbounds i8, ptr %1350, i64 2
  %1352 = zext i1 %1345 to i8
  store i8 %1352, ptr %1351, align 1, !tbaa !9
  %1353 = load double, ptr %16, align 8, !tbaa !27
  %1354 = load ptr, ptr %5, align 8, !tbaa !5
  %1355 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1354, i32 0, i32 49
  %1356 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1355, i32 0, i32 3
  %1357 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1356, i32 0, i32 4
  %1358 = load ptr, ptr %1357, align 8, !tbaa !23
  %1359 = getelementptr inbounds double, ptr %1358, i64 0
  store double %1353, ptr %1359, align 8, !tbaa !27
  %1360 = load double, ptr %17, align 8, !tbaa !27
  %1361 = load ptr, ptr %5, align 8, !tbaa !5
  %1362 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1361, i32 0, i32 49
  %1363 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1362, i32 0, i32 3
  %1364 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1363, i32 0, i32 4
  %1365 = load ptr, ptr %1364, align 8, !tbaa !23
  %1366 = getelementptr inbounds double, ptr %1365, i64 1
  store double %1360, ptr %1366, align 8, !tbaa !27
  %1367 = load double, ptr %18, align 8, !tbaa !27
  %1368 = load ptr, ptr %5, align 8, !tbaa !5
  %1369 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1368, i32 0, i32 49
  %1370 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1369, i32 0, i32 3
  %1371 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1370, i32 0, i32 4
  %1372 = load ptr, ptr %1371, align 8, !tbaa !23
  %1373 = getelementptr inbounds double, ptr %1372, i64 2
  store double %1367, ptr %1373, align 8, !tbaa !27
  %1374 = load double, ptr %19, align 8, !tbaa !27
  %1375 = load ptr, ptr %5, align 8, !tbaa !5
  %1376 = getelementptr inbounds %"struct.alglib_impl::gdemostate", ptr %1375, i32 0, i32 49
  %1377 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %1376, i32 0, i32 3
  %1378 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1377, i32 0, i32 4
  %1379 = load ptr, ptr %1378, align 8, !tbaa !23
  %1380 = getelementptr inbounds double, ptr %1379, i64 3
  store double %1374, ptr %1380, align 8, !tbaa !27
  %1381 = load i8, ptr %26, align 1, !tbaa !9, !range !25, !noundef !26
  %1382 = trunc i8 %1381 to i1
  store i1 %1382, ptr %4, align 1
  store i32 1, ptr %27, align 4
  br label %1383

1383:                                             ; preds = %1248, %1245, %859
  call void @llvm.lifetime.end.p0(i64 1, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  %1384 = load i1, ptr %4, align 1
  ret i1 %1384
}

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

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

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

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

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl8ae_isnanEdPNS_8ae_stateE(double noundef, ptr noundef) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !19, i64 1528}
!12 = !{!"_ZTSN11alglib_impl10gdemostateE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !14, i64 32, !10, i64 96, !14, i64 104, !14, i64 168, !14, i64 232, !14, i64 296, !14, i64 360, !16, i64 424, !14, i64 504, !14, i64 568, !14, i64 632, !14, i64 696, !14, i64 760, !14, i64 824, !14, i64 888, !14, i64 952, !14, i64 1016, !13, i64 1080, !14, i64 1088, !13, i64 1152, !17, i64 1160, !17, i64 1168, !13, i64 1176, !13, i64 1184, !17, i64 1192, !17, i64 1200, !13, i64 1208, !17, i64 1216, !17, i64 1224, !17, i64 1232, !17, i64 1240, !10, i64 1248, !13, i64 1256, !17, i64 1264, !17, i64 1272, !10, i64 1280, !17, i64 1288, !17, i64 1296, !17, i64 1304, !13, i64 1312, !14, i64 1320, !17, i64 1384, !13, i64 1392, !14, i64 1400, !14, i64 1464, !18, i64 1528, !20, i64 1792, !21, i64 1816, !21, i64 2208, !16, i64 2600, !13, i64 2680, !13, i64 2688, !13, i64 2696, !16, i64 2704, !14, i64 2784, !13, i64 2848, !13, i64 2856, !17, i64 2864, !13, i64 2872, !17, i64 2880, !13, i64 2888, !14, i64 2896, !22, i64 2960, !14, i64 3328, !14, i64 3392, !14, i64 3456, !14, i64 3520}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSN11alglib_impl9ae_vectorE", !13, i64 0, !13, i64 8, !10, i64 16, !15, i64 24, !7, i64 56}
!15 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!16 = !{!"_ZTSN11alglib_impl9ae_matrixE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !10, i64 32, !15, i64 40, !7, i64 72}
!17 = !{!"double", !7, i64 0}
!18 = !{!"_ZTSN11alglib_impl10rcommstateE", !19, i64 0, !14, i64 8, !14, i64 72, !14, i64 136, !14, i64 200}
!19 = !{!"int", !7, i64 0}
!20 = !{!"_ZTSN11alglib_impl10hqrndstateE", !13, i64 0, !13, i64 8, !13, i64 16}
!21 = !{!"_ZTSN11alglib_impl15gdemopopulationE", !13, i64 0, !16, i64 8, !16, i64 88, !16, i64 168, !16, i64 248, !14, i64 328}
!22 = !{!"_ZTSN11alglib_impl12sparsematrixE", !14, i64 0, !14, i64 64, !14, i64 128, !14, i64 192, !14, i64 256, !13, i64 320, !13, i64 328, !13, i64 336, !13, i64 344, !13, i64 352, !13, i64 360}
!23 = !{!7, !7, i64 0}
!24 = !{!13, !13, i64 0}
!25 = !{i8 0, i8 2}
!26 = !{}
!27 = !{!17, !17, i64 0}
!28 = !{!12, !13, i64 0}
!29 = !{!12, !13, i64 8}
!30 = !{!12, !13, i64 16}
!31 = !{!12, !13, i64 24}
!32 = !{!12, !13, i64 1176}
!33 = !{!12, !13, i64 2856}
!34 = !{!12, !13, i64 2848}
!35 = !{!12, !17, i64 2864}
!36 = !{!12, !13, i64 2872}
!37 = !{!12, !17, i64 2880}
!38 = !{!12, !13, i64 2888}
!39 = !{!12, !13, i64 1816}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = distinct !{!42, !41}
!43 = !{!12, !13, i64 1184}
!44 = !{!12, !13, i64 1312}
!45 = !{!12, !13, i64 1392}
!46 = distinct !{!46, !41}
!47 = distinct !{!47, !41}
!48 = distinct !{!48, !41}
!49 = distinct !{!49, !41}
!50 = distinct !{!50, !41}
!51 = distinct !{!51, !41}
!52 = distinct !{!52, !41}
!53 = distinct !{!53, !41}
!54 = distinct !{!54, !41}
!55 = !{!12, !10, i64 1248}
!56 = !{!12, !13, i64 2688}
!57 = !{!12, !13, i64 2696}
!58 = !{!12, !13, i64 2208}
!59 = distinct !{!59, !41}
!60 = distinct !{!60, !41}
!61 = distinct !{!61, !41}
!62 = distinct !{!62, !41}
!63 = !{!12, !10, i64 1280}
!64 = !{!12, !17, i64 1288}
!65 = !{!12, !17, i64 1296}
!66 = !{!12, !17, i64 1304}
!67 = distinct !{!67, !41}
!68 = distinct !{!68, !41}


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

@.str.212 = external hidden unnamed_addr constant [102 x i8], align 1
@.str.612 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.708 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1119 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1120 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1216 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.1447 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.1448 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.1449 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.1450 = external hidden unnamed_addr constant [102 x i8], align 1
@_ZN11alglib_implL17diffevo_paramscntE = external hidden local_unnamed_addr global i64, align 8
@_ZN11alglib_implL21diffevo_minpowerupitsE = external hidden local_unnamed_addr global i64, align 8
@_ZN11alglib_implL31diffevo_minpopsizefortighteningE = external hidden local_unnamed_addr global i64, align 8
@.str.1451 = external hidden unnamed_addr constant [35 x i8], align 1
@_ZN11alglib_implL20diffevo_tighteningmuE = external hidden local_unnamed_addr global double, align 8
@.str.1452 = external hidden unnamed_addr constant [35 x i8], align 1

declare void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext, ptr noundef, ptr 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 zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef, ptr noundef) local_unnamed_addr #0

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef, double 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_impl13ae_fp_less_eqEdd(double noundef, double noundef) local_unnamed_addr #0

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

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

declare noundef zeroext i1 @_ZN11alglib_impl19ae_is_trace_enabledEPKc(ptr noundef) local_unnamed_addr #0

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

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

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

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

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

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

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

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

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

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

declare void @_ZN11alglib_impl10bsetallocvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, i1 noundef zeroext, ptr noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11alglib_impl14gdemoiterationEPNS_10gdemostateEbPNS_8ae_stateE(ptr noundef %0, i1 noundef zeroext %1, ptr noundef %2) local_unnamed_addr #2 {
  %4 = getelementptr inbounds i8, ptr %0, i64 1528
  %5 = load i32, ptr %4, align 8, !tbaa !5
  %6 = icmp sgt i32 %5, -1
  br i1 %6, label %7, label %45

7:                                                ; preds = %3
  %8 = getelementptr inbounds i8, ptr %0, i64 1592
  %9 = load ptr, ptr %8, align 8, !tbaa !21
  %10 = load i64, ptr %9, align 8, !tbaa !22
  %11 = getelementptr inbounds i8, ptr %9, i64 8
  %12 = load i64, ptr %11, align 8, !tbaa !22
  %13 = getelementptr inbounds i8, ptr %9, i64 16
  %14 = load i64, ptr %13, align 8, !tbaa !22
  %15 = getelementptr inbounds i8, ptr %9, i64 24
  %16 = load i64, ptr %15, align 8, !tbaa !22
  %17 = getelementptr inbounds i8, ptr %9, i64 40
  %18 = load i64, ptr %17, align 8, !tbaa !22
  %19 = getelementptr inbounds i8, ptr %9, i64 48
  %20 = load i64, ptr %19, align 8, !tbaa !22
  %21 = getelementptr inbounds i8, ptr %9, i64 56
  %22 = load i64, ptr %21, align 8, !tbaa !22
  %23 = getelementptr inbounds i8, ptr %9, i64 64
  %24 = load i64, ptr %23, align 8, !tbaa !22
  %25 = getelementptr inbounds i8, ptr %9, i64 72
  %26 = load i64, ptr %25, align 8, !tbaa !22
  %27 = getelementptr inbounds i8, ptr %9, i64 80
  %28 = load i64, ptr %27, align 8, !tbaa !22
  %29 = getelementptr inbounds i8, ptr %0, i64 1656
  %30 = load ptr, ptr %29, align 8, !tbaa !21
  %31 = load i8, ptr %30, align 1, !tbaa !23, !range !24, !noundef !25
  %32 = getelementptr inbounds i8, ptr %30, i64 1
  %33 = load i8, ptr %32, align 1, !tbaa !23, !range !24, !noundef !25
  %34 = getelementptr inbounds i8, ptr %30, i64 2
  %35 = load i8, ptr %34, align 1, !tbaa !23, !range !24, !noundef !25
  %36 = getelementptr inbounds i8, ptr %0, i64 1720
  %37 = load ptr, ptr %36, align 8, !tbaa !21
  %38 = load double, ptr %37, align 8, !tbaa !26
  %39 = getelementptr inbounds i8, ptr %37, i64 8
  %40 = load double, ptr %39, align 8, !tbaa !26
  %41 = getelementptr inbounds i8, ptr %37, i64 16
  %42 = load double, ptr %41, align 8, !tbaa !26
  %43 = getelementptr inbounds i8, ptr %37, i64 24
  %44 = load double, ptr %43, align 8, !tbaa !26
  br label %45

45:                                               ; preds = %3, %7
  %.0519 = phi i64 [ %10, %7 ], [ 359, %3 ]
  %.0514 = phi i64 [ %12, %7 ], [ -58, %3 ]
  %.0509 = phi i64 [ %14, %7 ], [ -919, %3 ]
  %.0504 = phi i64 [ %16, %7 ], [ -909, %3 ]
  %.0487 = phi i64 [ %18, %7 ], [ 255, %3 ]
  %.0481 = phi i64 [ %20, %7 ], [ 74, %3 ]
  %.0475 = phi i64 [ %22, %7 ], [ -788, %3 ]
  %.0471 = phi double [ %38, %7 ], [ -5.410000e+02, %3 ]
  %.0464 = phi double [ %40, %7 ], [ -6.980000e+02, %3 ]
  %.0463 = phi double [ %42, %7 ], [ -9.000000e+02, %3 ]
  %.0462 = phi double [ %44, %7 ], [ -3.180000e+02, %3 ]
  %.0457 = phi i8 [ %31, %7 ], [ 1, %3 ]
  %.0452 = phi i8 [ %33, %7 ], [ 0, %3 ]
  %.0447 = phi i64 [ %24, %7 ], [ 809, %3 ]
  %.0440 = phi i64 [ %26, %7 ], [ 205, %3 ]
  %.0436 = phi i64 [ %28, %7 ], [ -838, %3 ]
  %.0 = phi i8 [ %35, %7 ], [ 1, %3 ]
  switch i32 %5, label %114 [
    i32 0, label %.preheader576
    i32 1, label %.preheader579
  ]

.preheader579:                                    ; preds = %45
  %46 = getelementptr inbounds i8, ptr %0, i64 2208
  %47 = load i64, ptr %46, align 8, !tbaa !27
  %.not.not529584 = icmp sgt i64 %47, 0
  br i1 %.not.not529584, label %.preheader578.lr.ph, label %._crit_edge586

.preheader578.lr.ph:                              ; preds = %.preheader579
  %48 = add nsw i64 %.0504, %.0514
  %.not.not532582 = icmp sgt i64 %48, 0
  %49 = getelementptr inbounds i8, ptr %0, i64 1520
  %50 = getelementptr inbounds i8, ptr %0, i64 2368
  br i1 %.not.not532582, label %.preheader578.us.preheader, label %._crit_edge586

.preheader578.us.preheader:                       ; preds = %.preheader578.lr.ph
  %51 = add i64 %.0504, %.0514
  %xtraiter = and i64 %48, 1
  %52 = icmp eq i64 %51, 1
  %unroll_iter = and i64 %48, 9223372036854775806
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader578.us

.preheader578.us:                                 ; preds = %.preheader578.us.preheader, %._crit_edge.us
  %.6501585.us = phi i64 [ %80, %._crit_edge.us ], [ 0, %.preheader578.us.preheader ]
  %53 = mul nuw nsw i64 %.6501585.us, %48
  br i1 %52, label %._crit_edge.us.unr-lcssa, label %.preheader578.us.new

.preheader578.us.new:                             ; preds = %.preheader578.us, %.preheader578.us.new
  %.19583.us = phi i64 [ %71, %.preheader578.us.new ], [ 0, %.preheader578.us ]
  %niter = phi i64 [ %niter.next.1, %.preheader578.us.new ], [ 0, %.preheader578.us ]
  %54 = load ptr, ptr %49, align 8, !tbaa !21
  %55 = getelementptr double, ptr %54, i64 %53
  %56 = getelementptr double, ptr %55, i64 %.19583.us
  %57 = load double, ptr %56, align 8, !tbaa !26
  %58 = load ptr, ptr %50, align 8, !tbaa !21
  %59 = getelementptr inbounds ptr, ptr %58, i64 %.6501585.us
  %60 = load ptr, ptr %59, align 8, !tbaa !28
  %61 = getelementptr inbounds double, ptr %60, i64 %.19583.us
  store double %57, ptr %61, align 8, !tbaa !26
  %62 = or disjoint i64 %.19583.us, 1
  %63 = load ptr, ptr %49, align 8, !tbaa !21
  %64 = getelementptr double, ptr %63, i64 %53
  %65 = getelementptr double, ptr %64, i64 %62
  %66 = load double, ptr %65, align 8, !tbaa !26
  %67 = load ptr, ptr %50, align 8, !tbaa !21
  %68 = getelementptr inbounds ptr, ptr %67, i64 %.6501585.us
  %69 = load ptr, ptr %68, align 8, !tbaa !28
  %70 = getelementptr inbounds double, ptr %69, i64 %62
  store double %66, ptr %70, align 8, !tbaa !26
  %71 = add nuw nsw i64 %.19583.us, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.preheader578.us.new, !llvm.loop !29

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader578.us.new, %.preheader578.us
  %.19583.us.unr = phi i64 [ 0, %.preheader578.us ], [ %71, %.preheader578.us.new ]
  br i1 %lcmp.mod.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %72 = load ptr, ptr %49, align 8, !tbaa !21
  %73 = getelementptr double, ptr %72, i64 %53
  %74 = getelementptr double, ptr %73, i64 %.19583.us.unr
  %75 = load double, ptr %74, align 8, !tbaa !26
  %76 = load ptr, ptr %50, align 8, !tbaa !21
  %77 = getelementptr inbounds ptr, ptr %76, i64 %.6501585.us
  %78 = load ptr, ptr %77, align 8, !tbaa !28
  %79 = getelementptr inbounds double, ptr %78, i64 %.19583.us.unr
  store double %75, ptr %79, align 8, !tbaa !26
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %80 = add nuw nsw i64 %.6501585.us, 1
  %exitcond700.not = icmp eq i64 %80, %47
  br i1 %exitcond700.not, label %._crit_edge586, label %.preheader578.us, !llvm.loop !31

.preheader576:                                    ; preds = %45
  %.not.not533610 = icmp sgt i64 %.0440, 0
  br i1 %.not.not533610, label %.preheader575.lr.ph, label %._crit_edge626

.preheader575.lr.ph:                              ; preds = %.preheader576
  %81 = add nsw i64 %.0504, %.0514
  %.not545.not605 = icmp sgt i64 %81, 0
  %82 = getelementptr inbounds i8, ptr %0, i64 1520
  %83 = getelementptr inbounds i8, ptr %0, i64 1976
  br i1 %.not545.not605, label %.preheader575.us.preheader, label %.preheader573.lr.ph

.preheader575.us.preheader:                       ; preds = %.preheader575.lr.ph
  %84 = add i64 %.0504, %.0514
  %xtraiter747 = and i64 %81, 1
  %85 = icmp eq i64 %84, 1
  %unroll_iter750 = and i64 %81, 9223372036854775806
  %lcmp.mod749.not = icmp eq i64 %xtraiter747, 0
  br label %.preheader575.us

.preheader575.us:                                 ; preds = %.preheader575.us.preheader, %._crit_edge608.us
  %.2497611.us = phi i64 [ %113, %._crit_edge608.us ], [ 0, %.preheader575.us.preheader ]
  %86 = mul nuw nsw i64 %.2497611.us, %81
  br i1 %85, label %._crit_edge608.us.unr-lcssa, label %.preheader575.us.new

.preheader575.us.new:                             ; preds = %.preheader575.us, %.preheader575.us.new
  %.7494606.us = phi i64 [ %104, %.preheader575.us.new ], [ 0, %.preheader575.us ]
  %niter751 = phi i64 [ %niter751.next.1, %.preheader575.us.new ], [ 0, %.preheader575.us ]
  %87 = load ptr, ptr %82, align 8, !tbaa !21
  %88 = getelementptr double, ptr %87, i64 %86
  %89 = getelementptr double, ptr %88, i64 %.7494606.us
  %90 = load double, ptr %89, align 8, !tbaa !26
  %91 = load ptr, ptr %83, align 8, !tbaa !21
  %92 = getelementptr inbounds ptr, ptr %91, i64 %.2497611.us
  %93 = load ptr, ptr %92, align 8, !tbaa !28
  %94 = getelementptr inbounds double, ptr %93, i64 %.7494606.us
  store double %90, ptr %94, align 8, !tbaa !26
  %95 = or disjoint i64 %.7494606.us, 1
  %96 = load ptr, ptr %82, align 8, !tbaa !21
  %97 = getelementptr double, ptr %96, i64 %86
  %98 = getelementptr double, ptr %97, i64 %95
  %99 = load double, ptr %98, align 8, !tbaa !26
  %100 = load ptr, ptr %83, align 8, !tbaa !21
  %101 = getelementptr inbounds ptr, ptr %100, i64 %.2497611.us
  %102 = load ptr, ptr %101, align 8, !tbaa !28
  %103 = getelementptr inbounds double, ptr %102, i64 %95
  store double %99, ptr %103, align 8, !tbaa !26
  %104 = add nuw nsw i64 %.7494606.us, 2
  %niter751.next.1 = add i64 %niter751, 2
  %niter751.ncmp.1 = icmp eq i64 %niter751.next.1, %unroll_iter750
  br i1 %niter751.ncmp.1, label %._crit_edge608.us.unr-lcssa, label %.preheader575.us.new, !llvm.loop !32

._crit_edge608.us.unr-lcssa:                      ; preds = %.preheader575.us.new, %.preheader575.us
  %.7494606.us.unr = phi i64 [ 0, %.preheader575.us ], [ %104, %.preheader575.us.new ]
  br i1 %lcmp.mod749.not, label %._crit_edge608.us, label %._crit_edge608.us.epilog-lcssa

._crit_edge608.us.epilog-lcssa:                   ; preds = %._crit_edge608.us.unr-lcssa
  %105 = load ptr, ptr %82, align 8, !tbaa !21
  %106 = getelementptr double, ptr %105, i64 %86
  %107 = getelementptr double, ptr %106, i64 %.7494606.us.unr
  %108 = load double, ptr %107, align 8, !tbaa !26
  %109 = load ptr, ptr %83, align 8, !tbaa !21
  %110 = getelementptr inbounds ptr, ptr %109, i64 %.2497611.us
  %111 = load ptr, ptr %110, align 8, !tbaa !28
  %112 = getelementptr inbounds double, ptr %111, i64 %.7494606.us.unr
  store double %108, ptr %112, align 8, !tbaa !26
  br label %._crit_edge608.us

._crit_edge608.us:                                ; preds = %._crit_edge608.us.unr-lcssa, %._crit_edge608.us.epilog-lcssa
  %113 = add nuw nsw i64 %.2497611.us, 1
  %exitcond704.not = icmp eq i64 %113, %.0440
  br i1 %exitcond704.not, label %.preheader574, label %.preheader575.us, !llvm.loop !33

114:                                              ; preds = %45
  %115 = load i64, ptr %0, align 8, !tbaa !34
  %116 = getelementptr inbounds i8, ptr %0, i64 8
  %117 = load i64, ptr %116, align 8, !tbaa !35
  %118 = getelementptr inbounds i8, ptr %0, i64 16
  %119 = load i64, ptr %118, align 8, !tbaa !36
  %120 = getelementptr inbounds i8, ptr %0, i64 24
  %121 = load i64, ptr %120, align 8, !tbaa !37
  %122 = getelementptr inbounds i8, ptr %0, i64 1176
  %123 = load i64, ptr %122, align 8, !tbaa !38
  %124 = tail call noundef zeroext i1 @_ZN11alglib_impl19ae_is_trace_enabledEPKc(ptr noundef nonnull @.str.1447)
  %125 = zext i1 %124 to i8
  br i1 %124, label %126, label %129

126:                                              ; preds = %114
  %127 = tail call noundef zeroext i1 @_ZN11alglib_impl19ae_is_trace_enabledEPKc(ptr noundef nonnull @.str.1448)
  %128 = zext i1 %127 to i8
  br label %129

129:                                              ; preds = %126, %114
  %130 = phi i8 [ 0, %114 ], [ %128, %126 ]
  %131 = icmp eq i64 %117, 1
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %131, ptr noundef nonnull @.str.1449, ptr noundef %2)
  %132 = getelementptr inbounds i8, ptr %0, i64 2856
  store i64 0, ptr %132, align 8, !tbaa !39
  %133 = getelementptr inbounds i8, ptr %0, i64 2848
  store i64 5, ptr %133, align 8, !tbaa !40
  %134 = getelementptr inbounds i8, ptr %0, i64 2864
  store double 0.000000e+00, ptr %134, align 8, !tbaa !41
  %135 = getelementptr inbounds i8, ptr %0, i64 2872
  store i64 -1, ptr %135, align 8, !tbaa !42
  %136 = getelementptr inbounds i8, ptr %0, i64 2880
  store double 0.000000e+00, ptr %136, align 8, !tbaa !43
  %137 = getelementptr inbounds i8, ptr %0, i64 2888
  store i64 -1, ptr %137, align 8, !tbaa !44
  %138 = getelementptr inbounds i8, ptr %0, i64 1320
  tail call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, ptr noundef nonnull %138, ptr noundef %2)
  br i1 %124, label %139, label %144

139:                                              ; preds = %129
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.612)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.212)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.1450)
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.212)
  %140 = trunc i64 %115 to i32
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.708, i32 noundef %140)
  %141 = trunc i64 %117 to i32
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.1216, i32 noundef %141)
  %142 = trunc i64 %119 to i32
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.1119, i32 noundef %142)
  %143 = trunc i64 %121 to i32
  tail call void (ptr, ...) @_ZN11alglib_impl8ae_traceEPKcz(ptr noundef nonnull @.str.1120, i32 noundef %143)
  br label %144

144:                                              ; preds = %139, %129
  %145 = getelementptr inbounds i8, ptr %0, i64 1816
  store i64 %123, ptr %145, align 8, !tbaa !45
  %146 = getelementptr inbounds i8, ptr %0, i64 1824
  tail call void @_ZN11alglib_impl7rallocmEllPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %123, i64 noundef %115, ptr noundef nonnull %146, ptr noundef %2)
  %147 = add nsw i64 %121, %117
  %148 = getelementptr inbounds i8, ptr %0, i64 1904
  tail call void @_ZN11alglib_impl7rallocmEllPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %123, i64 noundef %147, ptr noundef nonnull %148, ptr noundef %2)
  %149 = getelementptr inbounds i8, ptr %0, i64 1984
  tail call void @_ZN11alglib_impl7rallocmEllPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %123, i64 noundef %117, ptr noundef nonnull %149, ptr noundef %2)
  %150 = load i64, ptr @_ZN11alglib_implL17diffevo_paramscntE, align 8, !tbaa !22
  %151 = getelementptr inbounds i8, ptr %0, i64 2064
  tail call void @_ZN11alglib_impl10rsetallocmElldPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %123, i64 noundef %150, double noundef 0.000000e+00, ptr noundef nonnull %151, ptr noundef %2)
  %152 = getelementptr inbounds i8, ptr %0, i64 2144
  tail call void @_ZN11alglib_impl10bsetallocvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %123, i1 noundef zeroext false, ptr noundef nonnull %152, ptr noundef %2)
  %153 = getelementptr inbounds i8, ptr %0, i64 3456
  tail call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, ptr noundef nonnull %153, ptr noundef %2)
  %154 = getelementptr inbounds i8, ptr %0, i64 3520
  tail call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, ptr noundef nonnull %154, ptr noundef %2)
  %.not.not651 = icmp sgt i64 %123, 0
  br i1 %.not.not651, label %.preheader571.lr.ph, label %._crit_edge653

.preheader571.lr.ph:                              ; preds = %144
  %.not.not528645 = icmp sgt i64 %115, 0
  %155 = getelementptr inbounds i8, ptr %0, i64 224
  %156 = getelementptr inbounds i8, ptr %0, i64 288
  %157 = getelementptr inbounds i8, ptr %0, i64 352
  %158 = getelementptr inbounds i8, ptr %0, i64 1792
  %159 = getelementptr inbounds i8, ptr %0, i64 1896
  %160 = getelementptr inbounds i8, ptr %0, i64 416
  br label %.preheader571

.preheader571:                                    ; preds = %.preheader571.lr.ph, %201
  %.0495652 = phi i64 [ 0, %.preheader571.lr.ph ], [ %202, %201 ]
  br i1 %.not.not528645, label %.lr.ph648, label %._crit_edge649

.lr.ph648:                                        ; preds = %.preheader571, %192
  %.2489646 = phi i64 [ %197, %192 ], [ 0, %.preheader571 ]
  %161 = load ptr, ptr %155, align 8, !tbaa !21
  %162 = getelementptr inbounds i8, ptr %161, i64 %.2489646
  %163 = load i8, ptr %162, align 1, !tbaa !23, !range !24, !noundef !25
  %164 = trunc nuw i8 %163 to i1
  %165 = load ptr, ptr %156, align 8, !tbaa !21
  %166 = getelementptr inbounds i8, ptr %165, i64 %.2489646
  %167 = load i8, ptr %166, align 1, !tbaa !23, !range !24, !noundef !25
  %168 = trunc nuw i8 %167 to i1
  br i1 %164, label %169, label %.thread546

169:                                              ; preds = %.lr.ph648
  %170 = load ptr, ptr %157, align 8, !tbaa !21
  %171 = getelementptr inbounds double, ptr %170, i64 %.2489646
  %172 = load double, ptr %171, align 8, !tbaa !26
  br i1 %168, label %173, label %180

173:                                              ; preds = %169
  %174 = load ptr, ptr %160, align 8, !tbaa !21
  %175 = getelementptr inbounds double, ptr %174, i64 %.2489646
  %176 = load double, ptr %175, align 8, !tbaa !26
  %177 = fsub double %176, %172
  %178 = tail call noundef double @_ZN11alglib_impl13hqrnduniformrEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef nonnull %158, ptr noundef %2)
  %179 = tail call double @llvm.fmuladd.f64(double %177, double %178, double %172)
  br label %192

180:                                              ; preds = %169
  %181 = tail call noundef double @_ZN11alglib_impl11hqrndnormalEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef nonnull %158, ptr noundef %2)
  %182 = tail call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef 2.000000e+00, double noundef %181, ptr noundef %2)
  %183 = fadd double %172, %182
  br label %192

.thread546:                                       ; preds = %.lr.ph648
  br i1 %168, label %.thread547, label %190

.thread547:                                       ; preds = %.thread546
  %184 = load ptr, ptr %160, align 8, !tbaa !21
  %185 = getelementptr inbounds double, ptr %184, i64 %.2489646
  %186 = load double, ptr %185, align 8, !tbaa !26
  %187 = tail call noundef double @_ZN11alglib_impl11hqrndnormalEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef nonnull %158, ptr noundef %2)
  %188 = tail call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef 2.000000e+00, double noundef %187, ptr noundef %2)
  %189 = fsub double %186, %188
  br label %192

190:                                              ; preds = %.thread546
  %191 = tail call noundef double @_ZN11alglib_impl11hqrndnormalEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef nonnull %158, ptr noundef %2)
  br label %192

192:                                              ; preds = %190, %.thread547, %180, %173
  %.sink = phi double [ %191, %190 ], [ %189, %.thread547 ], [ %183, %180 ], [ %179, %173 ]
  %193 = load ptr, ptr %159, align 8, !tbaa !21
  %194 = getelementptr inbounds ptr, ptr %193, i64 %.0495652
  %195 = load ptr, ptr %194, align 8, !tbaa !28
  %196 = getelementptr inbounds double, ptr %195, i64 %.2489646
  store double %.sink, ptr %196, align 8, !tbaa !26
  %197 = add nuw nsw i64 %.2489646, 1
  %exitcond709.not = icmp eq i64 %197, %115
  br i1 %exitcond709.not, label %._crit_edge649, label %.lr.ph648, !llvm.loop !46

._crit_edge649:                                   ; preds = %192, %.preheader571
  %198 = icmp eq i64 %.0495652, 0
  br i1 %198, label %199, label %200

199:                                              ; preds = %._crit_edge649
  tail call void @_ZN11alglib_impl7rcopyrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, ptr noundef nonnull %146, i64 noundef 0, ptr noundef nonnull %153, ptr noundef %2)
  tail call void @_ZN11alglib_impl7rcopyrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, ptr noundef nonnull %146, i64 noundef 0, ptr noundef nonnull %154, ptr noundef %2)
  br label %201

200:                                              ; preds = %._crit_edge649
  tail call void @_ZN11alglib_impl11rmergeminrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, ptr noundef nonnull %146, i64 noundef %.0495652, ptr noundef nonnull %153, ptr noundef %2)
  tail call void @_ZN11alglib_impl11rmergemaxrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, ptr noundef nonnull %146, i64 noundef %.0495652, ptr noundef nonnull %154, ptr noundef %2)
  br label %201

201:                                              ; preds = %199, %200
  %202 = add nuw nsw i64 %.0495652, 1
  %exitcond710.not = icmp eq i64 %202, %123
  br i1 %exitcond710.not, label %._crit_edge653.loopexit, label %.preheader571, !llvm.loop !47

._crit_edge653.loopexit:                          ; preds = %201
  %smax = tail call i64 @llvm.smax.i64(i64 %115, i64 0)
  br label %._crit_edge653

._crit_edge653:                                   ; preds = %._crit_edge653.loopexit, %144
  %.1488.lcssa = phi i64 [ %.0487, %144 ], [ %smax, %._crit_edge653.loopexit ]
  %203 = getelementptr inbounds i8, ptr %0, i64 3328
  tail call void @_ZN11alglib_impl10rsetallocvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, double noundef 1.000000e+300, ptr noundef nonnull %203, ptr noundef %2)
  %204 = getelementptr inbounds i8, ptr %0, i64 3392
  tail call void @_ZN11alglib_impl10rsetallocvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %115, double noundef -1.000000e+300, ptr noundef nonnull %204, ptr noundef %2)
  br label %205

205:                                              ; preds = %._crit_edge642, %._crit_edge653
  %.1520 = phi i64 [ %.0519, %._crit_edge642 ], [ %115, %._crit_edge653 ]
  %.1515 = phi i64 [ %.0514, %._crit_edge642 ], [ %117, %._crit_edge653 ]
  %.1510 = phi i64 [ %.0509, %._crit_edge642 ], [ %119, %._crit_edge653 ]
  %.1505 = phi i64 [ %.0504, %._crit_edge642 ], [ %121, %._crit_edge653 ]
  %.3490 = phi i64 [ %.12.lcssa, %._crit_edge642 ], [ %.1488.lcssa, %._crit_edge653 ]
  %.1458 = phi i8 [ %.0457, %._crit_edge642 ], [ %125, %._crit_edge653 ]
  %.1453 = phi i8 [ %.0452, %._crit_edge642 ], [ %130, %._crit_edge653 ]
  %.1448 = phi i64 [ %.0447, %._crit_edge642 ], [ %123, %._crit_edge653 ]
  %.1441 = phi i64 [ %.2442.lcssa729, %._crit_edge642 ], [ %123, %._crit_edge653 ]
  %.1437 = phi i64 [ %325, %._crit_edge642 ], [ 0, %._crit_edge653 ]
  %.1 = phi i8 [ %.2.lcssa730, %._crit_edge642 ], [ %.0, %._crit_edge653 ]
  %206 = load i64, ptr @_ZN11alglib_implL21diffevo_minpowerupitsE, align 8, !tbaa !22
  %207 = getelementptr inbounds i8, ptr %0, i64 1184
  %208 = load i64, ptr %207, align 8, !tbaa !48
  %209 = sitofp i64 %208 to double
  %210 = fmul double %209, 2.500000e-01
  %211 = tail call noundef i64 @_ZN11alglib_impl8ae_roundEdPNS_8ae_stateE(double noundef %210, ptr noundef %2)
  %212 = tail call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %206, i64 noundef %211, ptr noundef %2)
  %.not536 = icmp slt i64 %.1437, %212
  br i1 %.not536, label %213, label %326

213:                                              ; preds = %205
  %214 = getelementptr inbounds i8, ptr %0, i64 1312
  store i64 4, ptr %214, align 8, !tbaa !49
  %215 = getelementptr inbounds i8, ptr %0, i64 1392
  store i64 %.1441, ptr %215, align 8, !tbaa !50
  %216 = mul nsw i64 %.1441, %.1520
  %217 = getelementptr inbounds i8, ptr %0, i64 1400
  tail call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %216, ptr noundef nonnull %217, ptr noundef %2)
  %.not537.not674 = icmp sgt i64 %.1441, 0
  br i1 %.not537.not674, label %.preheader.lr.ph, label %._crit_edge676

.preheader.lr.ph:                                 ; preds = %213
  %.not538.not669 = icmp sgt i64 %.1520, 0
  %218 = getelementptr inbounds i8, ptr %0, i64 1896
  %219 = getelementptr inbounds i8, ptr %0, i64 1456
  br i1 %.not538.not669, label %.preheader.us.preheader, label %._crit_edge676

.preheader.us.preheader:                          ; preds = %.preheader.lr.ph
  %xtraiter759 = and i64 %.1520, 1
  %220 = icmp eq i64 %.1520, 1
  %unroll_iter762 = and i64 %.1520, 9223372036854775806
  %lcmp.mod761.not = icmp eq i64 %xtraiter759, 0
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge672.us
  %.1496675.us = phi i64 [ %248, %._crit_edge672.us ], [ 0, %.preheader.us.preheader ]
  %221 = mul nuw nsw i64 %.1496675.us, %.1520
  br i1 %220, label %._crit_edge672.us.unr-lcssa, label %.preheader.us.new

.preheader.us.new:                                ; preds = %.preheader.us, %.preheader.us.new
  %.5492670.us = phi i64 [ %239, %.preheader.us.new ], [ 0, %.preheader.us ]
  %niter763 = phi i64 [ %niter763.next.1, %.preheader.us.new ], [ 0, %.preheader.us ]
  %222 = load ptr, ptr %218, align 8, !tbaa !21
  %223 = getelementptr inbounds ptr, ptr %222, i64 %.1496675.us
  %224 = load ptr, ptr %223, align 8, !tbaa !28
  %225 = getelementptr inbounds double, ptr %224, i64 %.5492670.us
  %226 = load double, ptr %225, align 8, !tbaa !26
  %227 = load ptr, ptr %219, align 8, !tbaa !21
  %228 = getelementptr double, ptr %227, i64 %221
  %229 = getelementptr double, ptr %228, i64 %.5492670.us
  store double %226, ptr %229, align 8, !tbaa !26
  %230 = or disjoint i64 %.5492670.us, 1
  %231 = load ptr, ptr %218, align 8, !tbaa !21
  %232 = getelementptr inbounds ptr, ptr %231, i64 %.1496675.us
  %233 = load ptr, ptr %232, align 8, !tbaa !28
  %234 = getelementptr inbounds double, ptr %233, i64 %230
  %235 = load double, ptr %234, align 8, !tbaa !26
  %236 = load ptr, ptr %219, align 8, !tbaa !21
  %237 = getelementptr double, ptr %236, i64 %221
  %238 = getelementptr double, ptr %237, i64 %230
  store double %235, ptr %238, align 8, !tbaa !26
  %239 = add nuw nsw i64 %.5492670.us, 2
  %niter763.next.1 = add i64 %niter763, 2
  %niter763.ncmp.1 = icmp eq i64 %niter763.next.1, %unroll_iter762
  br i1 %niter763.ncmp.1, label %._crit_edge672.us.unr-lcssa, label %.preheader.us.new, !llvm.loop !51

._crit_edge672.us.unr-lcssa:                      ; preds = %.preheader.us.new, %.preheader.us
  %.5492670.us.unr = phi i64 [ 0, %.preheader.us ], [ %239, %.preheader.us.new ]
  br i1 %lcmp.mod761.not, label %._crit_edge672.us, label %._crit_edge672.us.epilog-lcssa

._crit_edge672.us.epilog-lcssa:                   ; preds = %._crit_edge672.us.unr-lcssa
  %240 = load ptr, ptr %218, align 8, !tbaa !21
  %241 = getelementptr inbounds ptr, ptr %240, i64 %.1496675.us
  %242 = load ptr, ptr %241, align 8, !tbaa !28
  %243 = getelementptr inbounds double, ptr %242, i64 %.5492670.us.unr
  %244 = load double, ptr %243, align 8, !tbaa !26
  %245 = load ptr, ptr %219, align 8, !tbaa !21
  %246 = getelementptr double, ptr %245, i64 %221
  %247 = getelementptr double, ptr %246, i64 %.5492670.us.unr
  store double %244, ptr %247, align 8, !tbaa !26
  br label %._crit_edge672.us

._crit_edge672.us:                                ; preds = %._crit_edge672.us.unr-lcssa, %._crit_edge672.us.epilog-lcssa
  %248 = add nuw nsw i64 %.1496675.us, 1
  %exitcond714.not = icmp eq i64 %248, %.1441
  br i1 %exitcond714.not, label %._crit_edge676, label %.preheader.us, !llvm.loop !52

._crit_edge676:                                   ; preds = %._crit_edge672.us, %.preheader.lr.ph, %213
  %.1496.lcssa = phi i64 [ 0, %213 ], [ %.1441, %.preheader.lr.ph ], [ %.1441, %._crit_edge672.us ]
  %.4491.lcssa = phi i64 [ %.3490, %213 ], [ 0, %.preheader.lr.ph ], [ %.1520, %._crit_edge672.us ]
  %249 = add nsw i64 %.1505, %.1515
  %250 = mul nsw i64 %.1441, %249
  br label %503

.preheader574:                                    ; preds = %._crit_edge608.us
  br i1 %.not.not533610, label %.preheader573.lr.ph, label %._crit_edge626.thread

.preheader573.lr.ph:                              ; preds = %.preheader575.lr.ph, %.preheader574
  %251 = add nsw i64 %.0504, %.0514
  %.not543.not614 = icmp sgt i64 %251, 0
  %252 = getelementptr inbounds i8, ptr %0, i64 1976
  %253 = getelementptr inbounds i8, ptr %0, i64 1824
  %254 = getelementptr inbounds i8, ptr %0, i64 1904
  %255 = getelementptr inbounds i8, ptr %0, i64 3328
  %256 = getelementptr inbounds i8, ptr %0, i64 3392
  br label %.preheader573

.preheader573:                                    ; preds = %.preheader573.lr.ph, %272
  %.2442624 = phi i64 [ %.0440, %.preheader573.lr.ph ], [ %.3443, %272 ]
  %.3498.in623 = phi i64 [ %.0440, %.preheader573.lr.ph ], [ %.3498625, %272 ]
  %.3498625 = add nsw i64 %.3498.in623, -1
  br i1 %.not543.not614, label %.lr.ph617, label %._crit_edge618.thread

.lr.ph617:                                        ; preds = %.preheader573, %265
  %.3616 = phi i1 [ %266, %265 ], [ false, %.preheader573 ]
  %.9615 = phi i64 [ %267, %265 ], [ 0, %.preheader573 ]
  br i1 %.3616, label %265, label %257

257:                                              ; preds = %.lr.ph617
  %258 = load ptr, ptr %252, align 8, !tbaa !21
  %259 = getelementptr inbounds ptr, ptr %258, i64 %.3498625
  %260 = load ptr, ptr %259, align 8, !tbaa !28
  %261 = getelementptr inbounds double, ptr %260, i64 %.9615
  %262 = load double, ptr %261, align 8, !tbaa !26
  %263 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %262, ptr noundef %2)
  %264 = xor i1 %263, true
  br label %265

265:                                              ; preds = %257, %.lr.ph617
  %266 = phi i1 [ true, %.lr.ph617 ], [ %264, %257 ]
  %267 = add nuw nsw i64 %.9615, 1
  %exitcond705.not = icmp eq i64 %267, %251
  br i1 %exitcond705.not, label %._crit_edge618, label %.lr.ph617, !llvm.loop !53

._crit_edge618:                                   ; preds = %265
  %268 = zext i1 %266 to i8
  br i1 %266, label %272, label %._crit_edge618.thread

._crit_edge618.thread:                            ; preds = %.preheader573, %._crit_edge618
  %.3.lcssa723 = phi i8 [ %268, %._crit_edge618 ], [ 0, %.preheader573 ]
  %.9.lcssa721 = phi i64 [ %251, %._crit_edge618 ], [ 0, %.preheader573 ]
  %269 = add nsw i64 %.2442624, -1
  %.not544 = icmp eq i64 %.3498.in623, %.2442624
  br i1 %.not544, label %271, label %270

270:                                              ; preds = %._crit_edge618.thread
  tail call void @_ZN11alglib_impl7rcopyrrElPKNS_9ae_matrixElPS0_lPNS_8ae_stateE(i64 noundef %.0519, ptr noundef nonnull %253, i64 noundef %.3498625, ptr noundef nonnull %253, i64 noundef %269, ptr noundef %2)
  tail call void @_ZN11alglib_impl7rcopyrrElPKNS_9ae_matrixElPS0_lPNS_8ae_stateE(i64 noundef %251, ptr noundef nonnull %254, i64 noundef %.3498625, ptr noundef nonnull %254, i64 noundef %269, ptr noundef %2)
  br label %271

271:                                              ; preds = %270, %._crit_edge618.thread
  tail call void @_ZN11alglib_impl11rmergeminrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %.0519, ptr noundef nonnull %253, i64 noundef %269, ptr noundef nonnull %255, ptr noundef %2)
  tail call void @_ZN11alglib_impl11rmergemaxrvElPKNS_9ae_matrixElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %.0519, ptr noundef nonnull %253, i64 noundef %269, ptr noundef nonnull %256, ptr noundef %2)
  br label %272

272:                                              ; preds = %271, %._crit_edge618
  %.3.lcssa724 = phi i8 [ %268, %._crit_edge618 ], [ %.3.lcssa723, %271 ]
  %.9.lcssa722 = phi i64 [ %251, %._crit_edge618 ], [ %.9.lcssa721, %271 ]
  %.3443 = phi i64 [ %.2442624, %._crit_edge618 ], [ %269, %271 ]
  %273 = icmp sgt i64 %.3498.in623, 1
  br i1 %273, label %.preheader573, label %._crit_edge626, !llvm.loop !54

._crit_edge626:                                   ; preds = %272, %.preheader576
  %.8.lcssa = phi i64 [ %.0487, %.preheader576 ], [ %.9.lcssa722, %272 ]
  %.2442.lcssa = phi i64 [ %.0440, %.preheader576 ], [ %.3443, %272 ]
  %.2.lcssa = phi i8 [ %.0, %.preheader576 ], [ %.3.lcssa724, %272 ]
  %274 = icmp eq i64 %.2442.lcssa, 0
  br i1 %274, label %.thread548, label %._crit_edge626.thread

._crit_edge626.thread:                            ; preds = %.preheader574, %._crit_edge626
  %.2.lcssa730 = phi i8 [ %.2.lcssa, %._crit_edge626 ], [ %.0, %.preheader574 ]
  %.2442.lcssa729 = phi i64 [ %.2442.lcssa, %._crit_edge626 ], [ %.0440, %.preheader574 ]
  %.8.lcssa728 = phi i64 [ %.8.lcssa, %._crit_edge626 ], [ %81, %.preheader574 ]
  %275 = load i64, ptr @_ZN11alglib_implL31diffevo_minpopsizefortighteningE, align 8, !tbaa !22
  %276 = sub nsw i64 %.0447, %275
  %.not = icmp sgt i64 %.2442.lcssa729, %276
  br i1 %.not, label %.loopexit, label %277

277:                                              ; preds = %._crit_edge626.thread
  %278 = icmp sgt i64 %275, 1
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %278, ptr noundef nonnull @.str.1451, ptr noundef %2)
  %.not534.not630 = icmp sgt i64 %.0519, 0
  br i1 %.not534.not630, label %.lr.ph633, label %.loopexit

.lr.ph633:                                        ; preds = %277
  %279 = getelementptr inbounds i8, ptr %0, i64 3512
  %280 = getelementptr inbounds i8, ptr %0, i64 3384
  %281 = getelementptr inbounds i8, ptr %0, i64 3576
  %282 = getelementptr inbounds i8, ptr %0, i64 3448
  br label %283

283:                                              ; preds = %.lr.ph633, %283
  %.10631 = phi i64 [ 0, %.lr.ph633 ], [ %304, %283 ]
  %284 = load double, ptr @_ZN11alglib_implL20diffevo_tighteningmuE, align 8, !tbaa !26
  %285 = load ptr, ptr %279, align 8, !tbaa !21
  %286 = getelementptr inbounds double, ptr %285, i64 %.10631
  %287 = load double, ptr %286, align 8, !tbaa !26
  %288 = fsub double 1.000000e+00, %284
  %289 = load ptr, ptr %280, align 8, !tbaa !21
  %290 = getelementptr inbounds double, ptr %289, i64 %.10631
  %291 = load double, ptr %290, align 8, !tbaa !26
  %292 = fmul double %288, %291
  %293 = tail call double @llvm.fmuladd.f64(double %284, double %287, double %292)
  store double %293, ptr %286, align 8, !tbaa !26
  %294 = load double, ptr @_ZN11alglib_implL20diffevo_tighteningmuE, align 8, !tbaa !26
  %295 = load ptr, ptr %281, align 8, !tbaa !21
  %296 = getelementptr inbounds double, ptr %295, i64 %.10631
  %297 = load double, ptr %296, align 8, !tbaa !26
  %298 = fsub double 1.000000e+00, %294
  %299 = load ptr, ptr %282, align 8, !tbaa !21
  %300 = getelementptr inbounds double, ptr %299, i64 %.10631
  %301 = load double, ptr %300, align 8, !tbaa !26
  %302 = fmul double %298, %301
  %303 = tail call double @llvm.fmuladd.f64(double %294, double %297, double %302)
  store double %303, ptr %296, align 8, !tbaa !26
  %304 = add nuw nsw i64 %.10631, 1
  %exitcond706.not = icmp eq i64 %304, %.0519
  br i1 %exitcond706.not, label %.loopexit, label %283, !llvm.loop !55

.loopexit:                                        ; preds = %283, %277, %._crit_edge626.thread
  %.11 = phi i64 [ %.8.lcssa728, %._crit_edge626.thread ], [ 0, %277 ], [ %.0519, %283 ]
  %.not535.not640 = icmp sgt i64 %.2442.lcssa729, 0
  br i1 %.not535.not640, label %.preheader572.lr.ph, label %._crit_edge642

.preheader572.lr.ph:                              ; preds = %.loopexit
  %.not539.not635 = icmp sgt i64 %.0519, 0
  %305 = getelementptr inbounds i8, ptr %0, i64 3512
  %306 = getelementptr inbounds i8, ptr %0, i64 3576
  %307 = getelementptr inbounds i8, ptr %0, i64 1792
  %308 = getelementptr inbounds i8, ptr %0, i64 1896
  br i1 %.not539.not635, label %.preheader572.us, label %._crit_edge642

.preheader572.us:                                 ; preds = %.preheader572.lr.ph, %._crit_edge638.us
  %.4499641.us = phi i64 [ %324, %._crit_edge638.us ], [ 0, %.preheader572.lr.ph ]
  br label %309

309:                                              ; preds = %.preheader572.us, %309
  %.13636.us = phi i64 [ 0, %.preheader572.us ], [ %323, %309 ]
  %310 = load ptr, ptr %305, align 8, !tbaa !21
  %311 = getelementptr inbounds double, ptr %310, i64 %.13636.us
  %312 = load double, ptr %311, align 8, !tbaa !26
  %313 = load ptr, ptr %306, align 8, !tbaa !21
  %314 = getelementptr inbounds double, ptr %313, i64 %.13636.us
  %315 = load double, ptr %314, align 8, !tbaa !26
  %316 = fsub double %315, %312
  %317 = tail call noundef double @_ZN11alglib_impl13hqrnduniformrEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef nonnull %307, ptr noundef %2)
  %318 = tail call double @llvm.fmuladd.f64(double %316, double %317, double %312)
  %319 = load ptr, ptr %308, align 8, !tbaa !21
  %320 = getelementptr inbounds ptr, ptr %319, i64 %.4499641.us
  %321 = load ptr, ptr %320, align 8, !tbaa !28
  %322 = getelementptr inbounds double, ptr %321, i64 %.13636.us
  store double %318, ptr %322, align 8, !tbaa !26
  %323 = add nuw nsw i64 %.13636.us, 1
  %exitcond707.not = icmp eq i64 %323, %.0519
  br i1 %exitcond707.not, label %._crit_edge638.us, label %309, !llvm.loop !56

._crit_edge638.us:                                ; preds = %309
  %324 = add nuw nsw i64 %.4499641.us, 1
  %exitcond708.not = icmp eq i64 %324, %.2442.lcssa729
  br i1 %exitcond708.not, label %._crit_edge642, label %.preheader572.us, !llvm.loop !57

._crit_edge642:                                   ; preds = %._crit_edge638.us, %.preheader572.lr.ph, %.loopexit
  %.12.lcssa = phi i64 [ %.11, %.loopexit ], [ 0, %.preheader572.lr.ph ], [ %.0519, %._crit_edge638.us ]
  %325 = add nsw i64 %.0436, 1
  br label %205

326:                                              ; preds = %205
  %327 = icmp sgt i64 %.1441, 0
  br i1 %327, label %328, label %.thread548

328:                                              ; preds = %326
  %329 = getelementptr inbounds i8, ptr %0, i64 2848
  store i64 -8, ptr %329, align 8, !tbaa !40
  br label %544

.thread548:                                       ; preds = %._crit_edge626, %326
  %.4568 = phi i8 [ %.1, %326 ], [ %.2.lcssa, %._crit_edge626 ]
  %.4444567 = phi i64 [ %.1441, %326 ], [ 0, %._crit_edge626 ]
  %.2449566 = phi i64 [ %.1448, %326 ], [ %.0447, %._crit_edge626 ]
  %.2454565 = phi i8 [ %.1453, %326 ], [ %.0452, %._crit_edge626 ]
  %.2459564 = phi i8 [ %.1458, %326 ], [ %.0457, %._crit_edge626 ]
  %.14563 = phi i64 [ %.3490, %326 ], [ %.8.lcssa, %._crit_edge626 ]
  %.2506562 = phi i64 [ %.1505, %326 ], [ %.0504, %._crit_edge626 ]
  %.2511561 = phi i64 [ %.1510, %326 ], [ %.0509, %._crit_edge626 ]
  %.2516560 = phi i64 [ %.1515, %326 ], [ %.0514, %._crit_edge626 ]
  %.2521559 = phi i64 [ %.1520, %326 ], [ %.0519, %._crit_edge626 ]
  %330 = getelementptr inbounds i8, ptr %0, i64 1816
  tail call void @_ZN11alglib_implL22diffevo_computefitnessEPKNS_10gdemostateEPKNS_15gdemopopulationEbPS3_PNS_8ae_stateE(ptr noundef %0, ptr noundef nonnull %330, i1 noundef zeroext false, ptr noundef nonnull %330, ptr noundef %2)
  tail call void @_ZN11alglib_implL18diffevo_updatebestEPNS_10gdemostateEPNS_8ae_stateE(ptr noundef %0, ptr noundef %2)
  %331 = getelementptr inbounds i8, ptr %0, i64 1248
  %332 = load i8, ptr %331, align 8, !tbaa !58, !range !24, !noundef !25
  %333 = trunc nuw i8 %332 to i1
  br i1 %333, label %340, label %334

334:                                              ; preds = %.thread548
  %335 = getelementptr inbounds i8, ptr %0, i64 2688
  %336 = load i64, ptr %335, align 8, !tbaa !59
  %337 = load i64, ptr @_ZN11alglib_implL17diffevo_paramscntE, align 8, !tbaa !22
  %338 = getelementptr inbounds i8, ptr %0, i64 2600
  tail call void @_ZN11alglib_impl7rallocmEllPNS_9ae_matrixEPNS_8ae_stateE(i64 noundef %336, i64 noundef %337, ptr noundef nonnull %338, ptr noundef %2)
  %339 = getelementptr inbounds i8, ptr %0, i64 2696
  store i64 0, ptr %339, align 8, !tbaa !60
  br label %340

340:                                              ; preds = %.thread548, %334, %501
  %.3522 = phi i64 [ %.0519, %501 ], [ %.2521559, %334 ], [ %.2521559, %.thread548 ]
  %.3517 = phi i64 [ %.0514, %501 ], [ %.2516560, %334 ], [ %.2516560, %.thread548 ]
  %.3512 = phi i64 [ %.0509, %501 ], [ %.2511561, %334 ], [ %.2511561, %.thread548 ]
  %.3507 = phi i64 [ %.0504, %501 ], [ %.2506562, %334 ], [ %.2506562, %.thread548 ]
  %.15 = phi i64 [ %.24, %501 ], [ %.14563, %334 ], [ %.14563, %.thread548 ]
  %.1482 = phi i64 [ %.4485, %501 ], [ %.0481, %334 ], [ %.0481, %.thread548 ]
  %.1476 = phi i64 [ %.4479, %501 ], [ %.0475, %334 ], [ %.0475, %.thread548 ]
  %.1472 = phi double [ %.2473, %501 ], [ %.0471, %334 ], [ %.0471, %.thread548 ]
  %.1465 = phi double [ %.6470, %501 ], [ %.0464, %334 ], [ %.0464, %.thread548 ]
  %.3460 = phi i8 [ %.0457, %501 ], [ %.2459564, %334 ], [ %.2459564, %.thread548 ]
  %.3455 = phi i8 [ %.0452, %501 ], [ %.2454565, %334 ], [ %.2454565, %.thread548 ]
  %.3450 = phi i64 [ %.0447, %501 ], [ %.2449566, %334 ], [ %.2449566, %.thread548 ]
  %.5445 = phi i64 [ %.0440, %501 ], [ %.4444567, %334 ], [ %.4444567, %.thread548 ]
  %.2438 = phi i64 [ %502, %501 ], [ 0, %334 ], [ 0, %.thread548 ]
  %.5 = phi i8 [ %.0, %501 ], [ %.4568, %334 ], [ %.4568, %.thread548 ]
  %341 = getelementptr inbounds i8, ptr %0, i64 1184
  %342 = load i64, ptr %341, align 8, !tbaa !48
  %.not540 = icmp slt i64 %.2438, %342
  br i1 %.not540, label %343, label %544

343:                                              ; preds = %340
  %344 = getelementptr inbounds i8, ptr %0, i64 1816
  %345 = getelementptr inbounds i8, ptr %0, i64 2208
  tail call void @_ZN11alglib_implL27diffevo_generatetrialpointsEPNS_10gdemostateEPKNS_15gdemopopulationEPS2_PNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %344, ptr noundef nonnull %345, ptr noundef %2)
  %346 = getelementptr inbounds i8, ptr %0, i64 1312
  store i64 4, ptr %346, align 8, !tbaa !49
  %347 = load i64, ptr %345, align 8, !tbaa !27
  %348 = getelementptr inbounds i8, ptr %0, i64 1392
  store i64 %347, ptr %348, align 8, !tbaa !50
  %349 = mul nsw i64 %347, %.3522
  %350 = getelementptr inbounds i8, ptr %0, i64 1400
  tail call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %349, ptr noundef nonnull %350, ptr noundef %2)
  %351 = load i64, ptr %345, align 8, !tbaa !27
  %.not541.not660 = icmp sgt i64 %351, 0
  br i1 %.not541.not660, label %.preheader570.lr.ph, label %._crit_edge662

.preheader570.lr.ph:                              ; preds = %343
  %.not542.not655 = icmp sgt i64 %.3522, 0
  %352 = getelementptr inbounds i8, ptr %0, i64 2288
  %353 = getelementptr inbounds i8, ptr %0, i64 1456
  br i1 %.not542.not655, label %.preheader570.us.preheader, label %._crit_edge662

.preheader570.us.preheader:                       ; preds = %.preheader570.lr.ph
  %xtraiter753 = and i64 %.3522, 1
  %354 = icmp eq i64 %.3522, 1
  %unroll_iter756 = and i64 %.3522, 9223372036854775806
  %lcmp.mod755.not = icmp eq i64 %xtraiter753, 0
  br label %.preheader570.us

.preheader570.us:                                 ; preds = %.preheader570.us.preheader, %._crit_edge658.us
  %.5500661.us = phi i64 [ %382, %._crit_edge658.us ], [ 0, %.preheader570.us.preheader ]
  %355 = mul nuw nsw i64 %.5500661.us, %.3522
  br i1 %354, label %._crit_edge658.us.unr-lcssa, label %.preheader570.us.new

.preheader570.us.new:                             ; preds = %.preheader570.us, %.preheader570.us.new
  %.17656.us = phi i64 [ %373, %.preheader570.us.new ], [ 0, %.preheader570.us ]
  %niter757 = phi i64 [ %niter757.next.1, %.preheader570.us.new ], [ 0, %.preheader570.us ]
  %356 = load ptr, ptr %352, align 8, !tbaa !21
  %357 = getelementptr inbounds ptr, ptr %356, i64 %.5500661.us
  %358 = load ptr, ptr %357, align 8, !tbaa !28
  %359 = getelementptr inbounds double, ptr %358, i64 %.17656.us
  %360 = load double, ptr %359, align 8, !tbaa !26
  %361 = load ptr, ptr %353, align 8, !tbaa !21
  %362 = getelementptr double, ptr %361, i64 %355
  %363 = getelementptr double, ptr %362, i64 %.17656.us
  store double %360, ptr %363, align 8, !tbaa !26
  %364 = or disjoint i64 %.17656.us, 1
  %365 = load ptr, ptr %352, align 8, !tbaa !21
  %366 = getelementptr inbounds ptr, ptr %365, i64 %.5500661.us
  %367 = load ptr, ptr %366, align 8, !tbaa !28
  %368 = getelementptr inbounds double, ptr %367, i64 %364
  %369 = load double, ptr %368, align 8, !tbaa !26
  %370 = load ptr, ptr %353, align 8, !tbaa !21
  %371 = getelementptr double, ptr %370, i64 %355
  %372 = getelementptr double, ptr %371, i64 %364
  store double %369, ptr %372, align 8, !tbaa !26
  %373 = add nuw nsw i64 %.17656.us, 2
  %niter757.next.1 = add i64 %niter757, 2
  %niter757.ncmp.1 = icmp eq i64 %niter757.next.1, %unroll_iter756
  br i1 %niter757.ncmp.1, label %._crit_edge658.us.unr-lcssa, label %.preheader570.us.new, !llvm.loop !61

._crit_edge658.us.unr-lcssa:                      ; preds = %.preheader570.us.new, %.preheader570.us
  %.17656.us.unr = phi i64 [ 0, %.preheader570.us ], [ %373, %.preheader570.us.new ]
  br i1 %lcmp.mod755.not, label %._crit_edge658.us, label %._crit_edge658.us.epilog-lcssa

._crit_edge658.us.epilog-lcssa:                   ; preds = %._crit_edge658.us.unr-lcssa
  %374 = load ptr, ptr %352, align 8, !tbaa !21
  %375 = getelementptr inbounds ptr, ptr %374, i64 %.5500661.us
  %376 = load ptr, ptr %375, align 8, !tbaa !28
  %377 = getelementptr inbounds double, ptr %376, i64 %.17656.us.unr
  %378 = load double, ptr %377, align 8, !tbaa !26
  %379 = load ptr, ptr %353, align 8, !tbaa !21
  %380 = getelementptr double, ptr %379, i64 %355
  %381 = getelementptr double, ptr %380, i64 %.17656.us.unr
  store double %378, ptr %381, align 8, !tbaa !26
  br label %._crit_edge658.us

._crit_edge658.us:                                ; preds = %._crit_edge658.us.unr-lcssa, %._crit_edge658.us.epilog-lcssa
  %382 = add nuw nsw i64 %.5500661.us, 1
  %exitcond712.not = icmp eq i64 %382, %351
  br i1 %exitcond712.not, label %._crit_edge662, label %.preheader570.us, !llvm.loop !62

._crit_edge662:                                   ; preds = %._crit_edge658.us, %.preheader570.lr.ph, %343
  %.5500.lcssa = phi i64 [ 0, %343 ], [ %351, %.preheader570.lr.ph ], [ %351, %._crit_edge658.us ]
  %.16.lcssa = phi i64 [ %.15, %343 ], [ 0, %.preheader570.lr.ph ], [ %.3522, %._crit_edge658.us ]
  %383 = add nsw i64 %.3507, %.3517
  %384 = mul nsw i64 %351, %383
  br label %503

._crit_edge586:                                   ; preds = %._crit_edge.us, %.preheader578.lr.ph, %.preheader579
  %.18.lcssa = phi i64 [ %.0487, %.preheader579 ], [ 0, %.preheader578.lr.ph ], [ %48, %._crit_edge.us ]
  %385 = getelementptr inbounds i8, ptr %0, i64 1816
  tail call void @_ZN11alglib_implL22diffevo_computefitnessEPKNS_10gdemostateEPKNS_15gdemopopulationEbPS3_PNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %385, i1 noundef zeroext true, ptr noundef nonnull %46, ptr noundef %2)
  tail call void @_ZN11alglib_implL24diffevo_updatepopulationEPNS_10gdemostateEPKNS_15gdemopopulationEPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %46, ptr noundef %2)
  tail call void @_ZN11alglib_implL18diffevo_updatebestEPNS_10gdemostateEPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %2)
  %386 = getelementptr inbounds i8, ptr %0, i64 2856
  %387 = load i64, ptr %386, align 8, !tbaa !39
  %388 = add nsw i64 %387, 1
  store i64 %388, ptr %386, align 8, !tbaa !39
  %389 = getelementptr inbounds i8, ptr %0, i64 1280
  %390 = load i8, ptr %389, align 8, !tbaa !63, !range !24, !noundef !25
  %391 = trunc nuw i8 %390 to i1
  %392 = icmp eq i64 %.0514, 1
  %or.cond = select i1 %391, i1 %392, i1 false
  br i1 %or.cond, label %393, label %402

393:                                              ; preds = %._crit_edge586
  %394 = getelementptr inbounds i8, ptr %0, i64 2840
  %395 = load ptr, ptr %394, align 8, !tbaa !21
  %396 = load double, ptr %395, align 8, !tbaa !26
  %397 = getelementptr inbounds i8, ptr %0, i64 1288
  %398 = load double, ptr %397, align 8, !tbaa !64
  %399 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %396, double noundef %398)
  br i1 %399, label %400, label %402

400:                                              ; preds = %393
  %401 = getelementptr inbounds i8, ptr %0, i64 2848
  store i64 6, ptr %401, align 8, !tbaa !40
  br label %544

402:                                              ; preds = %393, %._crit_edge586
  %403 = getelementptr inbounds i8, ptr %0, i64 1296
  %404 = load double, ptr %403, align 8, !tbaa !65
  %405 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %404, double noundef 0.000000e+00)
  br i1 %405, label %410, label %406

406:                                              ; preds = %402
  %407 = getelementptr inbounds i8, ptr %0, i64 1304
  %408 = load double, ptr %407, align 8, !tbaa !66
  %409 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %408, double noundef 0.000000e+00)
  %or.cond3 = select i1 %409, i1 %392, i1 false
  br i1 %or.cond3, label %411, label %501

410:                                              ; preds = %402
  br i1 %392, label %411, label %501

411:                                              ; preds = %406, %410
  %412 = getelementptr inbounds i8, ptr %0, i64 2840
  %413 = load ptr, ptr %412, align 8, !tbaa !21
  %414 = load double, ptr %413, align 8, !tbaa !26
  %415 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_isnanEdPNS_8ae_stateE(double noundef %414, ptr noundef %2)
  %416 = xor i1 %415, true
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %416, ptr noundef nonnull @.str.1452, ptr noundef %2)
  %417 = load ptr, ptr %412, align 8, !tbaa !21
  %418 = load double, ptr %417, align 8, !tbaa !26
  %419 = load double, ptr %403, align 8, !tbaa !65
  %420 = tail call noundef double @_ZN11alglib_impl8rmaxabs2EddPNS_8ae_stateE(double noundef %418, double noundef 1.000000e+00, ptr noundef %2)
  %421 = tail call double @llvm.fmuladd.f64(double %419, double %420, double %418)
  %.not.not530592 = icmp sgt i64 %.0447, 0
  br i1 %.not.not530592, label %.lr.ph599, label %._crit_edge600

.lr.ph599:                                        ; preds = %411
  %422 = load double, ptr %403, align 8, !tbaa !65
  %423 = fcmp ogt double %422, 0.000000e+00
  %424 = getelementptr inbounds i8, ptr %0, i64 2056
  %425 = getelementptr inbounds i8, ptr %0, i64 1304
  %.not.not531588 = icmp sgt i64 %.0519, 0
  %426 = getelementptr inbounds i8, ptr %0, i64 1896
  %427 = getelementptr inbounds i8, ptr %0, i64 2776
  %428 = sitofp i64 %.0519 to double
  %xtraiter741 = and i64 %.0519, 3
  %429 = icmp ult i64 %.0519, 4
  %unroll_iter744 = and i64 %.0519, 9223372036854775804
  %lcmp.mod742.not = icmp eq i64 %xtraiter741, 0
  br label %430

430:                                              ; preds = %.lr.ph599, %486
  %.2466597 = phi double [ %.0464, %.lr.ph599 ], [ %.5469, %486 ]
  %.2477596 = phi i64 [ 0, %.lr.ph599 ], [ %.3478, %486 ]
  %.2483595 = phi i64 [ 0, %.lr.ph599 ], [ %.3484, %486 ]
  %.20594 = phi i64 [ %.18.lcssa, %.lr.ph599 ], [ %.23, %486 ]
  %.7502593 = phi i64 [ 0, %.lr.ph599 ], [ %487, %486 ]
  br i1 %423, label %431, label %437

431:                                              ; preds = %430
  %432 = load ptr, ptr %424, align 8, !tbaa !21
  %433 = getelementptr inbounds ptr, ptr %432, i64 %.7502593
  %434 = load ptr, ptr %433, align 8, !tbaa !28
  %435 = load double, ptr %434, align 8, !tbaa !26
  %436 = fcmp ogt double %435, %421
  br i1 %436, label %486, label %437

437:                                              ; preds = %431, %430
  %438 = add nsw i64 %.2483595, 1
  %439 = load double, ptr %425, align 8, !tbaa !66
  %440 = fcmp ogt double %439, 0.000000e+00
  br i1 %440, label %.preheader577, label %484

.preheader577:                                    ; preds = %437
  br i1 %.not.not531588, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader577
  %441 = load ptr, ptr %426, align 8, !tbaa !21
  %442 = getelementptr inbounds ptr, ptr %441, i64 %.7502593
  %443 = load ptr, ptr %442, align 8, !tbaa !28
  %444 = load ptr, ptr %427, align 8, !tbaa !21
  %445 = load ptr, ptr %444, align 8, !tbaa !28
  br i1 %429, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph, %.lr.ph.new
  %.3467590 = phi double [ %472, %.lr.ph.new ], [ 0.000000e+00, %.lr.ph ]
  %.21589 = phi i64 [ %473, %.lr.ph.new ], [ 0, %.lr.ph ]
  %niter745 = phi i64 [ %niter745.next.3, %.lr.ph.new ], [ 0, %.lr.ph ]
  %446 = getelementptr inbounds double, ptr %443, i64 %.21589
  %447 = load double, ptr %446, align 8, !tbaa !26
  %448 = getelementptr inbounds double, ptr %445, i64 %.21589
  %449 = load double, ptr %448, align 8, !tbaa !26
  %450 = fsub double %447, %449
  %451 = tail call double @llvm.fmuladd.f64(double %450, double %450, double %.3467590)
  %452 = or disjoint i64 %.21589, 1
  %453 = getelementptr inbounds double, ptr %443, i64 %452
  %454 = load double, ptr %453, align 8, !tbaa !26
  %455 = getelementptr inbounds double, ptr %445, i64 %452
  %456 = load double, ptr %455, align 8, !tbaa !26
  %457 = fsub double %454, %456
  %458 = tail call double @llvm.fmuladd.f64(double %457, double %457, double %451)
  %459 = or disjoint i64 %.21589, 2
  %460 = getelementptr inbounds double, ptr %443, i64 %459
  %461 = load double, ptr %460, align 8, !tbaa !26
  %462 = getelementptr inbounds double, ptr %445, i64 %459
  %463 = load double, ptr %462, align 8, !tbaa !26
  %464 = fsub double %461, %463
  %465 = tail call double @llvm.fmuladd.f64(double %464, double %464, double %458)
  %466 = or disjoint i64 %.21589, 3
  %467 = getelementptr inbounds double, ptr %443, i64 %466
  %468 = load double, ptr %467, align 8, !tbaa !26
  %469 = getelementptr inbounds double, ptr %445, i64 %466
  %470 = load double, ptr %469, align 8, !tbaa !26
  %471 = fsub double %468, %470
  %472 = tail call double @llvm.fmuladd.f64(double %471, double %471, double %465)
  %473 = add nuw nsw i64 %.21589, 4
  %niter745.next.3 = add i64 %niter745, 4
  %niter745.ncmp.3 = icmp eq i64 %niter745.next.3, %unroll_iter744
  br i1 %niter745.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new, !llvm.loop !67

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph.new, %.lr.ph
  %.lcssa739.ph = phi double [ poison, %.lr.ph ], [ %472, %.lr.ph.new ]
  %.3467590.unr = phi double [ 0.000000e+00, %.lr.ph ], [ %472, %.lr.ph.new ]
  %.21589.unr = phi i64 [ 0, %.lr.ph ], [ %473, %.lr.ph.new ]
  br i1 %lcmp.mod742.not, label %._crit_edge, label %.epil.preheader740

.epil.preheader740:                               ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader740
  %.3467590.epil = phi double [ %479, %.epil.preheader740 ], [ %.3467590.unr, %._crit_edge.loopexit.unr-lcssa ]
  %.21589.epil = phi i64 [ %480, %.epil.preheader740 ], [ %.21589.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader740 ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %474 = getelementptr inbounds double, ptr %443, i64 %.21589.epil
  %475 = load double, ptr %474, align 8, !tbaa !26
  %476 = getelementptr inbounds double, ptr %445, i64 %.21589.epil
  %477 = load double, ptr %476, align 8, !tbaa !26
  %478 = fsub double %475, %477
  %479 = tail call double @llvm.fmuladd.f64(double %478, double %478, double %.3467590.epil)
  %480 = add nuw nsw i64 %.21589.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter741
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.epil.preheader740, !llvm.loop !68

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader740, %.preheader577
  %.21.lcssa = phi i64 [ 0, %.preheader577 ], [ %.0519, %.epil.preheader740 ], [ %.0519, %._crit_edge.loopexit.unr-lcssa ]
  %.3467.lcssa = phi double [ 0.000000e+00, %.preheader577 ], [ %.lcssa739.ph, %._crit_edge.loopexit.unr-lcssa ], [ %479, %.epil.preheader740 ]
  %481 = fdiv double %.3467.lcssa, %428
  %482 = fmul double %439, %439
  %483 = fcmp ogt double %481, %482
  br i1 %483, label %486, label %484

484:                                              ; preds = %._crit_edge, %437
  %.22 = phi i64 [ %.21.lcssa, %._crit_edge ], [ %.20594, %437 ]
  %.4468 = phi double [ %.3467.lcssa, %._crit_edge ], [ %.2466597, %437 ]
  %485 = add nsw i64 %.2477596, 1
  br label %486

486:                                              ; preds = %._crit_edge, %431, %484
  %.23 = phi i64 [ %.20594, %431 ], [ %.21.lcssa, %._crit_edge ], [ %.22, %484 ]
  %.3484 = phi i64 [ %.2483595, %431 ], [ %438, %._crit_edge ], [ %438, %484 ]
  %.3478 = phi i64 [ %.2477596, %431 ], [ %.2477596, %._crit_edge ], [ %485, %484 ]
  %.5469 = phi double [ %.2466597, %431 ], [ %.3467.lcssa, %._crit_edge ], [ %.4468, %484 ]
  %487 = add nuw nsw i64 %.7502593, 1
  %exitcond702.not = icmp eq i64 %487, %.0447
  br i1 %exitcond702.not, label %._crit_edge600, label %430, !llvm.loop !70

._crit_edge600:                                   ; preds = %486, %411
  %.20.lcssa = phi i64 [ %.18.lcssa, %411 ], [ %.23, %486 ]
  %.2483.lcssa = phi i64 [ 0, %411 ], [ %.3484, %486 ]
  %.2477.lcssa = phi i64 [ 0, %411 ], [ %.3478, %486 ]
  %.2466.lcssa = phi double [ %.0464, %411 ], [ %.5469, %486 ]
  %488 = sitofp i64 %.2483.lcssa to double
  %489 = shl nsw i64 %.0519, 1
  %490 = or disjoint i64 %489, 1
  %491 = sitofp i64 %490 to double
  %492 = sitofp i64 %.0447 to double
  %493 = tail call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %491, double noundef %492, ptr noundef %2)
  %494 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %488, double noundef %493)
  br i1 %494, label %495, label %501

495:                                              ; preds = %._crit_edge600
  %496 = sitofp i64 %.2477.lcssa to double
  %497 = tail call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef %491, double noundef %492, ptr noundef %2)
  %498 = tail call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %496, double noundef %497)
  br i1 %498, label %499, label %501

499:                                              ; preds = %495
  %500 = getelementptr inbounds i8, ptr %0, i64 2848
  store i64 1, ptr %500, align 8, !tbaa !40
  br label %544

501:                                              ; preds = %._crit_edge600, %495, %410, %406
  %.24 = phi i64 [ %.20.lcssa, %495 ], [ %.20.lcssa, %._crit_edge600 ], [ %.18.lcssa, %410 ], [ %.18.lcssa, %406 ]
  %.4485 = phi i64 [ %.2483.lcssa, %495 ], [ %.2483.lcssa, %._crit_edge600 ], [ %.0481, %410 ], [ %.0481, %406 ]
  %.4479 = phi i64 [ %.2477.lcssa, %495 ], [ %.2477.lcssa, %._crit_edge600 ], [ %.0475, %410 ], [ %.0475, %406 ]
  %.2473 = phi double [ %421, %495 ], [ %421, %._crit_edge600 ], [ %.0471, %410 ], [ %.0471, %406 ]
  %.6470 = phi double [ %.2466.lcssa, %495 ], [ %.2466.lcssa, %._crit_edge600 ], [ %.0464, %410 ], [ %.0464, %406 ]
  %502 = add nsw i64 %.0436, 1
  br label %340

503:                                              ; preds = %._crit_edge662, %._crit_edge676
  %.sink736 = phi i64 [ %384, %._crit_edge662 ], [ %250, %._crit_edge676 ]
  %storemerge = phi i32 [ 1, %._crit_edge662 ], [ 0, %._crit_edge676 ]
  %.4523 = phi i64 [ %.3522, %._crit_edge662 ], [ %.1520, %._crit_edge676 ]
  %.4518 = phi i64 [ %.3517, %._crit_edge662 ], [ %.1515, %._crit_edge676 ]
  %.4513 = phi i64 [ %.3512, %._crit_edge662 ], [ %.1510, %._crit_edge676 ]
  %.4508 = phi i64 [ %.3507, %._crit_edge662 ], [ %.1505, %._crit_edge676 ]
  %.8503 = phi i64 [ %.5500.lcssa, %._crit_edge662 ], [ %.1496.lcssa, %._crit_edge676 ]
  %.25 = phi i64 [ %.16.lcssa, %._crit_edge662 ], [ %.4491.lcssa, %._crit_edge676 ]
  %.5486 = phi i64 [ %.1482, %._crit_edge662 ], [ %.0481, %._crit_edge676 ]
  %.5480 = phi i64 [ %.1476, %._crit_edge662 ], [ %.0475, %._crit_edge676 ]
  %.3474 = phi double [ %.1472, %._crit_edge662 ], [ %.0471, %._crit_edge676 ]
  %.7 = phi double [ %.1465, %._crit_edge662 ], [ %.0464, %._crit_edge676 ]
  %.4461 = phi i8 [ %.3460, %._crit_edge662 ], [ %.1458, %._crit_edge676 ]
  %.4456 = phi i8 [ %.3455, %._crit_edge662 ], [ %.1453, %._crit_edge676 ]
  %.4451 = phi i64 [ %.3450, %._crit_edge662 ], [ %.1448, %._crit_edge676 ]
  %.6446 = phi i64 [ %.5445, %._crit_edge662 ], [ %.1441, %._crit_edge676 ]
  %.3439 = phi i64 [ %.2438, %._crit_edge662 ], [ %.1437, %._crit_edge676 ]
  %.6 = phi i8 [ %.5, %._crit_edge662 ], [ %.1, %._crit_edge676 ]
  %504 = getelementptr inbounds i8, ptr %0, i64 1464
  tail call void @_ZN11alglib_impl7rallocvElPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %.sink736, ptr noundef nonnull %504, ptr noundef %2)
  store i32 %storemerge, ptr %4, align 8, !tbaa !5
  %505 = getelementptr inbounds i8, ptr %0, i64 1592
  %506 = load ptr, ptr %505, align 8, !tbaa !21
  store i64 %.4523, ptr %506, align 8, !tbaa !22
  %507 = load ptr, ptr %505, align 8, !tbaa !21
  %508 = getelementptr inbounds i8, ptr %507, i64 8
  store i64 %.4518, ptr %508, align 8, !tbaa !22
  %509 = load ptr, ptr %505, align 8, !tbaa !21
  %510 = getelementptr inbounds i8, ptr %509, i64 16
  store i64 %.4513, ptr %510, align 8, !tbaa !22
  %511 = load ptr, ptr %505, align 8, !tbaa !21
  %512 = getelementptr inbounds i8, ptr %511, i64 24
  store i64 %.4508, ptr %512, align 8, !tbaa !22
  %513 = load ptr, ptr %505, align 8, !tbaa !21
  %514 = getelementptr inbounds i8, ptr %513, i64 32
  store i64 %.8503, ptr %514, align 8, !tbaa !22
  %515 = load ptr, ptr %505, align 8, !tbaa !21
  %516 = getelementptr inbounds i8, ptr %515, i64 40
  store i64 %.25, ptr %516, align 8, !tbaa !22
  %517 = load ptr, ptr %505, align 8, !tbaa !21
  %518 = getelementptr inbounds i8, ptr %517, i64 48
  store i64 %.5486, ptr %518, align 8, !tbaa !22
  %519 = load ptr, ptr %505, align 8, !tbaa !21
  %520 = getelementptr inbounds i8, ptr %519, i64 56
  store i64 %.5480, ptr %520, align 8, !tbaa !22
  %521 = load ptr, ptr %505, align 8, !tbaa !21
  %522 = getelementptr inbounds i8, ptr %521, i64 64
  store i64 %.4451, ptr %522, align 8, !tbaa !22
  %523 = load ptr, ptr %505, align 8, !tbaa !21
  %524 = getelementptr inbounds i8, ptr %523, i64 72
  store i64 %.6446, ptr %524, align 8, !tbaa !22
  %525 = load ptr, ptr %505, align 8, !tbaa !21
  %526 = getelementptr inbounds i8, ptr %525, i64 80
  store i64 %.3439, ptr %526, align 8, !tbaa !22
  %527 = getelementptr inbounds i8, ptr %0, i64 1656
  %528 = load ptr, ptr %527, align 8, !tbaa !21
  %529 = and i8 %.4461, 1
  store i8 %529, ptr %528, align 1, !tbaa !23
  %530 = load ptr, ptr %527, align 8, !tbaa !21
  %531 = getelementptr inbounds i8, ptr %530, i64 1
  %532 = and i8 %.4456, 1
  store i8 %532, ptr %531, align 1, !tbaa !23
  %533 = load ptr, ptr %527, align 8, !tbaa !21
  %534 = getelementptr inbounds i8, ptr %533, i64 2
  %535 = and i8 %.6, 1
  store i8 %535, ptr %534, align 1, !tbaa !23
  %536 = getelementptr inbounds i8, ptr %0, i64 1720
  %537 = load ptr, ptr %536, align 8, !tbaa !21
  store double %.3474, ptr %537, align 8, !tbaa !26
  %538 = load ptr, ptr %536, align 8, !tbaa !21
  %539 = getelementptr inbounds i8, ptr %538, i64 8
  store double %.7, ptr %539, align 8, !tbaa !26
  %540 = load ptr, ptr %536, align 8, !tbaa !21
  %541 = getelementptr inbounds i8, ptr %540, i64 16
  store double %.0463, ptr %541, align 8, !tbaa !26
  %542 = load ptr, ptr %536, align 8, !tbaa !21
  %543 = getelementptr inbounds i8, ptr %542, i64 24
  store double %.0462, ptr %543, align 8, !tbaa !26
  br label %544

544:                                              ; preds = %400, %499, %340, %503, %328
  %.0524 = phi i1 [ false, %328 ], [ true, %503 ], [ false, %340 ], [ false, %499 ], [ false, %400 ]
  ret i1 %.0524
}

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL22diffevo_computefitnessEPKNS_10gdemostateEPKNS_15gdemopopulationEbPS3_PNS_8ae_stateE(ptr noundef, ptr noundef, i1 noundef zeroext, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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, !17, i64 1528}
!6 = !{!"_ZTSN11alglib_impl10gdemostateE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !11, i64 96, !10, i64 104, !10, i64 168, !10, i64 232, !10, i64 296, !10, i64 360, !14, i64 424, !10, i64 504, !10, i64 568, !10, i64 632, !10, i64 696, !10, i64 760, !10, i64 824, !10, i64 888, !10, i64 952, !10, i64 1016, !7, i64 1080, !10, i64 1088, !7, i64 1152, !15, i64 1160, !15, i64 1168, !7, i64 1176, !7, i64 1184, !15, i64 1192, !15, i64 1200, !7, i64 1208, !15, i64 1216, !15, i64 1224, !15, i64 1232, !15, i64 1240, !11, i64 1248, !7, i64 1256, !15, i64 1264, !15, i64 1272, !11, i64 1280, !15, i64 1288, !15, i64 1296, !15, i64 1304, !7, i64 1312, !10, i64 1320, !15, i64 1384, !7, i64 1392, !10, i64 1400, !10, i64 1464, !16, i64 1528, !18, i64 1792, !19, i64 1816, !19, i64 2208, !14, i64 2600, !7, i64 2680, !7, i64 2688, !7, i64 2696, !14, i64 2704, !10, i64 2784, !7, i64 2848, !7, i64 2856, !15, i64 2864, !7, i64 2872, !15, i64 2880, !7, i64 2888, !10, i64 2896, !20, i64 2960, !10, i64 3328, !10, i64 3392, !10, i64 3456, !10, i64 3520}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !11, i64 16, !12, i64 24, !8, i64 56}
!11 = !{!"bool", !8, i64 0}
!12 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"_ZTSN11alglib_impl9ae_matrixE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !11, i64 32, !12, i64 40, !8, i64 72}
!15 = !{!"double", !8, i64 0}
!16 = !{!"_ZTSN11alglib_impl10rcommstateE", !17, i64 0, !10, i64 8, !10, i64 72, !10, i64 136, !10, i64 200}
!17 = !{!"int", !8, i64 0}
!18 = !{!"_ZTSN11alglib_impl10hqrndstateE", !7, i64 0, !7, i64 8, !7, i64 16}
!19 = !{!"_ZTSN11alglib_impl15gdemopopulationE", !7, i64 0, !14, i64 8, !14, i64 88, !14, i64 168, !14, i64 248, !10, i64 328}
!20 = !{!"_ZTSN11alglib_impl12sparsematrixE", !10, i64 0, !10, i64 64, !10, i64 128, !10, i64 192, !10, i64 256, !7, i64 320, !7, i64 328, !7, i64 336, !7, i64 344, !7, i64 352, !7, i64 360}
!21 = !{!8, !8, i64 0}
!22 = !{!7, !7, i64 0}
!23 = !{!11, !11, i64 0}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = !{!15, !15, i64 0}
!27 = !{!6, !7, i64 2208}
!28 = !{!13, !13, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = distinct !{!32, !30}
!33 = distinct !{!33, !30}
!34 = !{!6, !7, i64 0}
!35 = !{!6, !7, i64 8}
!36 = !{!6, !7, i64 16}
!37 = !{!6, !7, i64 24}
!38 = !{!6, !7, i64 1176}
!39 = !{!6, !7, i64 2856}
!40 = !{!6, !7, i64 2848}
!41 = !{!6, !15, i64 2864}
!42 = !{!6, !7, i64 2872}
!43 = !{!6, !15, i64 2880}
!44 = !{!6, !7, i64 2888}
!45 = !{!6, !7, i64 1816}
!46 = distinct !{!46, !30}
!47 = distinct !{!47, !30}
!48 = !{!6, !7, i64 1184}
!49 = !{!6, !7, i64 1312}
!50 = !{!6, !7, i64 1392}
!51 = distinct !{!51, !30}
!52 = distinct !{!52, !30}
!53 = distinct !{!53, !30}
!54 = distinct !{!54, !30}
!55 = distinct !{!55, !30}
!56 = distinct !{!56, !30}
!57 = distinct !{!57, !30}
!58 = !{!6, !11, i64 1248}
!59 = !{!6, !7, i64 2688}
!60 = !{!6, !7, i64 2696}
!61 = distinct !{!61, !30}
!62 = distinct !{!62, !30}
!63 = !{!6, !11, i64 1280}
!64 = !{!6, !15, i64 1288}
!65 = !{!6, !15, i64 1296}
!66 = !{!6, !15, i64 1304}
!67 = distinct !{!67, !30}
!68 = distinct !{!68, !69}
!69 = !{!"llvm.loop.unroll.disable"}
!70 = distinct !{!70, !30}


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