; LLVM IR from venumb/ZSPACE :: cpp/depends/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::smoothnessmonitor" = type { i64, i64, i8, %"struct.alglib_impl::ae_vector", i64, %"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", i64, i8, i8, double, double, i8, %"struct.alglib_impl::optguardreport", double, double, %"struct.alglib_impl::optguardnonc1test0report", %"struct.alglib_impl::optguardnonc1test0report", double, double, %"struct.alglib_impl::optguardnonc1test1report", %"struct.alglib_impl::optguardnonc1test1report", i8, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::rcommstate", %"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_matrix", %"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", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix" }
%"struct.alglib_impl::optguardreport" = type { i8, i8, i64, double, i8, i8, i8, i64, double, i8, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix" }
%"struct.alglib_impl::optguardnonc1test0report" = type { i8, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64 }
%"struct.alglib_impl::optguardnonc1test1report" = type { i8, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64 }
%"struct.alglib_impl::rcommstate" = type { i32, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%union.anon.0 = type { ptr }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%union.anon.1 = type { ptr }

; 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_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #1

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

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

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

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

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

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

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

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

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

35:                                               ; preds = %8
  %36 = load ptr, ptr %10, align 8, !tbaa !5
  %37 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %36, i32 0, i32 30
  %38 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %37, i32 0, i32 1
  %39 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %38, i32 0, i32 4
  %40 = load ptr, ptr %39, align 8, !tbaa !24
  %41 = getelementptr inbounds i64, ptr %40, i64 0
  %42 = load i64, ptr %41, align 8, !tbaa !25
  store i64 %42, ptr %18, align 8, !tbaa !25
  %43 = load ptr, ptr %10, align 8, !tbaa !5
  %44 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %43, i32 0, i32 30
  %45 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %44, i32 0, i32 1
  %46 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %47 = load ptr, ptr %46, align 8, !tbaa !24
  %48 = getelementptr inbounds i64, ptr %47, i64 1
  %49 = load i64, ptr %48, align 8, !tbaa !25
  store i64 %49, ptr %19, align 8, !tbaa !25
  %50 = load ptr, ptr %10, align 8, !tbaa !5
  %51 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %50, i32 0, i32 30
  %52 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %51, i32 0, i32 1
  %53 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %52, i32 0, i32 4
  %54 = load ptr, ptr %53, align 8, !tbaa !24
  %55 = getelementptr inbounds i64, ptr %54, i64 2
  %56 = load i64, ptr %55, align 8, !tbaa !25
  store i64 %56, ptr %20, align 8, !tbaa !25
  %57 = load ptr, ptr %10, align 8, !tbaa !5
  %58 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %57, i32 0, i32 30
  %59 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %58, i32 0, i32 1
  %60 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %59, i32 0, i32 4
  %61 = load ptr, ptr %60, align 8, !tbaa !24
  %62 = getelementptr inbounds i64, ptr %61, i64 3
  %63 = load i64, ptr %62, align 8, !tbaa !25
  store i64 %63, ptr %21, align 8, !tbaa !25
  %64 = load ptr, ptr %10, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %64, i32 0, i32 30
  %66 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %65, i32 0, i32 1
  %67 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %66, i32 0, i32 4
  %68 = load ptr, ptr %67, align 8, !tbaa !24
  %69 = getelementptr inbounds i64, ptr %68, i64 4
  %70 = load i64, ptr %69, align 8, !tbaa !25
  store i64 %70, ptr %22, align 8, !tbaa !25
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %71, i32 0, i32 30
  %73 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %72, i32 0, i32 3
  %74 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %73, i32 0, i32 4
  %75 = load ptr, ptr %74, align 8, !tbaa !24
  %76 = getelementptr inbounds double, ptr %75, i64 0
  %77 = load double, ptr %76, align 8, !tbaa !11
  store double %77, ptr %23, align 8, !tbaa !11
  %78 = load ptr, ptr %10, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %78, i32 0, i32 30
  %80 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %79, i32 0, i32 3
  %81 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %80, i32 0, i32 4
  %82 = load ptr, ptr %81, align 8, !tbaa !24
  %83 = getelementptr inbounds double, ptr %82, i64 1
  %84 = load double, ptr %83, align 8, !tbaa !11
  store double %84, ptr %24, align 8, !tbaa !11
  %85 = load ptr, ptr %10, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %85, i32 0, i32 30
  %87 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %86, i32 0, i32 3
  %88 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %87, i32 0, i32 4
  %89 = load ptr, ptr %88, align 8, !tbaa !24
  %90 = getelementptr inbounds double, ptr %89, i64 2
  %91 = load double, ptr %90, align 8, !tbaa !11
  store double %91, ptr %25, align 8, !tbaa !11
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %92, i32 0, i32 30
  %94 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %93, i32 0, i32 3
  %95 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %94, i32 0, i32 4
  %96 = load ptr, ptr %95, align 8, !tbaa !24
  %97 = getelementptr inbounds double, ptr %96, i64 3
  %98 = load double, ptr %97, align 8, !tbaa !11
  store double %98, ptr %26, align 8, !tbaa !11
  br label %100

99:                                               ; preds = %8
  store i64 359, ptr %18, align 8, !tbaa !25
  store i64 -58, ptr %19, align 8, !tbaa !25
  store i64 -919, ptr %20, align 8, !tbaa !25
  store i64 -909, ptr %21, align 8, !tbaa !25
  store i64 81, ptr %22, align 8, !tbaa !25
  store double 2.550000e+02, ptr %23, align 8, !tbaa !11
  store double 7.400000e+01, ptr %24, align 8, !tbaa !11
  store double -7.880000e+02, ptr %25, align 8, !tbaa !11
  store double 8.090000e+02, ptr %26, align 8, !tbaa !11
  br label %100

100:                                              ; preds = %99, %35
  %101 = load ptr, ptr %10, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %101, i32 0, i32 30
  %103 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %102, i32 0, i32 0
  %104 = load i32, ptr %103, align 8, !tbaa !13
  %105 = icmp eq i32 %104, 0
  br i1 %105, label %106, label %107

106:                                              ; preds = %100
  br label %329

107:                                              ; preds = %100
  %108 = load ptr, ptr %10, align 8, !tbaa !5
  %109 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %108, i32 0, i32 30
  %110 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %109, i32 0, i32 0
  %111 = load i32, ptr %110, align 8, !tbaa !13
  %112 = icmp eq i32 %111, 1
  br i1 %112, label %113, label %114

113:                                              ; preds = %107
  br label %567

114:                                              ; preds = %107
  %115 = load ptr, ptr %10, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %115, i32 0, i32 30
  %117 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %116, i32 0, i32 0
  %118 = load i32, ptr %117, align 8, !tbaa !13
  %119 = icmp eq i32 %118, 2
  br i1 %119, label %120, label %121

120:                                              ; preds = %114
  br label %644

121:                                              ; preds = %114
  %122 = load ptr, ptr %10, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %122, i32 0, i32 30
  %124 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %123, i32 0, i32 0
  %125 = load i32, ptr %124, align 8, !tbaa !13
  %126 = icmp eq i32 %125, 3
  br i1 %126, label %127, label %128

127:                                              ; preds = %121
  br label %721

128:                                              ; preds = %121
  %129 = load ptr, ptr %10, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %129, i32 0, i32 0
  %131 = load i64, ptr %130, align 8, !tbaa !26
  store i64 %131, ptr %18, align 8, !tbaa !25
  %132 = load ptr, ptr %10, align 8, !tbaa !5
  %133 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %132, i32 0, i32 1
  %134 = load i64, ptr %133, align 8, !tbaa !27
  store i64 %134, ptr %19, align 8, !tbaa !25
  %135 = load ptr, ptr %10, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %135, i32 0, i32 26
  store i8 0, ptr %136, align 8, !tbaa !28
  %137 = load i64, ptr %18, align 8, !tbaa !25
  %138 = icmp sle i64 %137, 0
  br i1 %138, label %149, label %139

139:                                              ; preds = %128
  %140 = load i64, ptr %19, align 8, !tbaa !25
  %141 = icmp sle i64 %140, 0
  br i1 %141, label %149, label %142

142:                                              ; preds = %139
  %143 = load double, ptr %16, align 8, !tbaa !11
  %144 = load ptr, ptr %17, align 8, !tbaa !5
  %145 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %143, ptr noundef %144)
  br i1 %145, label %146, label %149

146:                                              ; preds = %142
  %147 = load double, ptr %16, align 8, !tbaa !11
  %148 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %147, double noundef 0.000000e+00)
  br i1 %148, label %149, label %152

149:                                              ; preds = %146, %142, %139, %128
  store i8 0, ptr %27, align 1, !tbaa !9
  %150 = load i8, ptr %27, align 1, !tbaa !9, !range !29, !noundef !30
  %151 = trunc i8 %150 to i1
  store i1 %151, ptr %9, align 1
  store i32 1, ptr %28, align 4
  br label %962

152:                                              ; preds = %146
  %153 = load double, ptr %16, align 8, !tbaa !11
  %154 = load ptr, ptr %17, align 8, !tbaa !5
  %155 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %153, ptr noundef %154)
  store double %155, ptr %16, align 8, !tbaa !11
  %156 = load ptr, ptr %10, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %156, i32 0, i32 27
  %158 = load i64, ptr %18, align 8, !tbaa !25
  %159 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %157, i64 noundef %158, ptr noundef %159)
  %160 = load ptr, ptr %10, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %160, i32 0, i32 28
  %162 = load i64, ptr %19, align 8, !tbaa !25
  %163 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %161, i64 noundef %162, ptr noundef %163)
  %164 = load ptr, ptr %10, align 8, !tbaa !5
  %165 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %164, i32 0, i32 29
  %166 = load i64, ptr %19, align 8, !tbaa !25
  %167 = load i64, ptr %18, align 8, !tbaa !25
  %168 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %165, i64 noundef %166, i64 noundef %167, ptr noundef %168)
  %169 = load ptr, ptr %10, align 8, !tbaa !5
  %170 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %169, i32 0, i32 31
  %171 = load i64, ptr %18, align 8, !tbaa !25
  %172 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %170, i64 noundef %171, ptr noundef %172)
  %173 = load ptr, ptr %10, align 8, !tbaa !5
  %174 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %173, i32 0, i32 32
  %175 = load i64, ptr %19, align 8, !tbaa !25
  %176 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %174, i64 noundef %175, ptr noundef %176)
  %177 = load ptr, ptr %10, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %177, i32 0, i32 33
  %179 = load i64, ptr %19, align 8, !tbaa !25
  %180 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %178, i64 noundef %179, ptr noundef %180)
  %181 = load ptr, ptr %10, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %181, i32 0, i32 34
  %183 = load i64, ptr %19, align 8, !tbaa !25
  %184 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %182, i64 noundef %183, ptr noundef %184)
  %185 = load ptr, ptr %10, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %185, i32 0, i32 35
  %187 = load i64, ptr %19, align 8, !tbaa !25
  %188 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %186, i64 noundef %187, ptr noundef %188)
  %189 = load ptr, ptr %10, align 8, !tbaa !5
  %190 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %189, i32 0, i32 36
  %191 = load i64, ptr %19, align 8, !tbaa !25
  %192 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %190, i64 noundef %191, ptr noundef %192)
  %193 = load ptr, ptr %10, align 8, !tbaa !5
  %194 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %193, i32 0, i32 37
  %195 = load i64, ptr %19, align 8, !tbaa !25
  %196 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %194, i64 noundef %195, ptr noundef %196)
  %197 = load ptr, ptr %10, align 8, !tbaa !5
  %198 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %197, i32 0, i32 38
  %199 = load i64, ptr %19, align 8, !tbaa !25
  %200 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %198, i64 noundef %199, ptr noundef %200)
  %201 = load ptr, ptr %10, align 8, !tbaa !5
  %202 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %201, i32 0, i32 39
  %203 = load i64, ptr %19, align 8, !tbaa !25
  %204 = load i64, ptr %18, align 8, !tbaa !25
  %205 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %202, i64 noundef %203, i64 noundef %204, ptr noundef %205)
  %206 = load ptr, ptr %10, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %206, i32 0, i32 40
  %208 = load i64, ptr %19, align 8, !tbaa !25
  %209 = load i64, ptr %18, align 8, !tbaa !25
  %210 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %207, i64 noundef %208, i64 noundef %209, ptr noundef %210)
  %211 = load ptr, ptr %10, align 8, !tbaa !5
  %212 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %211, i32 0, i32 17
  %213 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %212, i32 0, i32 12
  %214 = load i64, ptr %18, align 8, !tbaa !25
  %215 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %213, i64 noundef %214, ptr noundef %215)
  %216 = load ptr, ptr %10, align 8, !tbaa !5
  %217 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %216, i32 0, i32 17
  %218 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %217, i32 0, i32 13
  %219 = load i64, ptr %19, align 8, !tbaa !25
  %220 = load i64, ptr %18, align 8, !tbaa !25
  %221 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %218, i64 noundef %219, i64 noundef %220, ptr noundef %221)
  %222 = load ptr, ptr %10, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %222, i32 0, i32 17
  %224 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %223, i32 0, i32 14
  %225 = load i64, ptr %19, align 8, !tbaa !25
  %226 = load i64, ptr %18, align 8, !tbaa !25
  %227 = load ptr, ptr %17, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %224, i64 noundef %225, i64 noundef %226, ptr noundef %227)
  %228 = load ptr, ptr %10, align 8, !tbaa !5
  %229 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %228, i32 0, i32 16
  store i8 1, ptr %229, align 8, !tbaa !31
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %230

230:                                              ; preds = %320, %152
  %231 = load i64, ptr %20, align 8, !tbaa !25
  %232 = load i64, ptr %18, align 8, !tbaa !25
  %233 = sub nsw i64 %232, 1
  %234 = icmp sle i64 %231, %233
  br i1 %234, label %235, label %323

235:                                              ; preds = %230
  %236 = load ptr, ptr %11, align 8, !tbaa !5
  %237 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %236, i32 0, i32 4
  %238 = load ptr, ptr %237, align 8, !tbaa !24
  %239 = load i64, ptr %20, align 8, !tbaa !25
  %240 = getelementptr inbounds double, ptr %238, i64 %239
  %241 = load double, ptr %240, align 8, !tbaa !11
  store double %241, ptr %23, align 8, !tbaa !11
  %242 = load i8, ptr %15, align 1, !tbaa !9, !range !29, !noundef !30
  %243 = trunc i8 %242 to i1
  br i1 %243, label %244, label %269

244:                                              ; preds = %235
  %245 = load ptr, ptr %13, align 8, !tbaa !5
  %246 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %245, i32 0, i32 4
  %247 = load ptr, ptr %246, align 8, !tbaa !24
  %248 = load i64, ptr %20, align 8, !tbaa !25
  %249 = getelementptr inbounds double, ptr %247, i64 %248
  %250 = load double, ptr %249, align 8, !tbaa !11
  %251 = load ptr, ptr %17, align 8, !tbaa !5
  %252 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %250, ptr noundef %251)
  br i1 %252, label %253, label %269

253:                                              ; preds = %244
  %254 = load double, ptr %23, align 8, !tbaa !11
  %255 = load ptr, ptr %13, align 8, !tbaa !5
  %256 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %255, i32 0, i32 4
  %257 = load ptr, ptr %256, align 8, !tbaa !24
  %258 = load i64, ptr %20, align 8, !tbaa !25
  %259 = getelementptr inbounds double, ptr %257, i64 %258
  %260 = load double, ptr %259, align 8, !tbaa !11
  %261 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %254, double noundef %260)
  br i1 %261, label %262, label %269

262:                                              ; preds = %253
  %263 = load ptr, ptr %13, align 8, !tbaa !5
  %264 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %263, i32 0, i32 4
  %265 = load ptr, ptr %264, align 8, !tbaa !24
  %266 = load i64, ptr %20, align 8, !tbaa !25
  %267 = getelementptr inbounds double, ptr %265, i64 %266
  %268 = load double, ptr %267, align 8, !tbaa !11
  store double %268, ptr %23, align 8, !tbaa !11
  br label %269

269:                                              ; preds = %262, %253, %244, %235
  %270 = load i8, ptr %15, align 1, !tbaa !9, !range !29, !noundef !30
  %271 = trunc i8 %270 to i1
  br i1 %271, label %272, label %297

272:                                              ; preds = %269
  %273 = load ptr, ptr %14, align 8, !tbaa !5
  %274 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %273, i32 0, i32 4
  %275 = load ptr, ptr %274, align 8, !tbaa !24
  %276 = load i64, ptr %20, align 8, !tbaa !25
  %277 = getelementptr inbounds double, ptr %275, i64 %276
  %278 = load double, ptr %277, align 8, !tbaa !11
  %279 = load ptr, ptr %17, align 8, !tbaa !5
  %280 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %278, ptr noundef %279)
  br i1 %280, label %281, label %297

281:                                              ; preds = %272
  %282 = load double, ptr %23, align 8, !tbaa !11
  %283 = load ptr, ptr %14, align 8, !tbaa !5
  %284 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %283, i32 0, i32 4
  %285 = load ptr, ptr %284, align 8, !tbaa !24
  %286 = load i64, ptr %20, align 8, !tbaa !25
  %287 = getelementptr inbounds double, ptr %285, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !11
  %289 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %282, double noundef %288)
  br i1 %289, label %290, label %297

290:                                              ; preds = %281
  %291 = load ptr, ptr %14, align 8, !tbaa !5
  %292 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %291, i32 0, i32 4
  %293 = load ptr, ptr %292, align 8, !tbaa !24
  %294 = load i64, ptr %20, align 8, !tbaa !25
  %295 = getelementptr inbounds double, ptr %293, i64 %294
  %296 = load double, ptr %295, align 8, !tbaa !11
  store double %296, ptr %23, align 8, !tbaa !11
  br label %297

297:                                              ; preds = %290, %281, %272, %269
  %298 = load double, ptr %23, align 8, !tbaa !11
  %299 = load ptr, ptr %10, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %299, i32 0, i32 31
  %301 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %300, i32 0, i32 4
  %302 = load ptr, ptr %301, align 8, !tbaa !24
  %303 = load i64, ptr %20, align 8, !tbaa !25
  %304 = getelementptr inbounds double, ptr %302, i64 %303
  store double %298, ptr %304, align 8, !tbaa !11
  %305 = load double, ptr %23, align 8, !tbaa !11
  %306 = load ptr, ptr %10, align 8, !tbaa !5
  %307 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %306, i32 0, i32 17
  %308 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %307, i32 0, i32 12
  %309 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %308, i32 0, i32 4
  %310 = load ptr, ptr %309, align 8, !tbaa !24
  %311 = load i64, ptr %20, align 8, !tbaa !25
  %312 = getelementptr inbounds double, ptr %310, i64 %311
  store double %305, ptr %312, align 8, !tbaa !11
  %313 = load double, ptr %23, align 8, !tbaa !11
  %314 = load ptr, ptr %10, align 8, !tbaa !5
  %315 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %314, i32 0, i32 27
  %316 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %315, i32 0, i32 4
  %317 = load ptr, ptr %316, align 8, !tbaa !24
  %318 = load i64, ptr %20, align 8, !tbaa !25
  %319 = getelementptr inbounds double, ptr %317, i64 %318
  store double %313, ptr %319, align 8, !tbaa !11
  br label %320

320:                                              ; preds = %297
  %321 = load i64, ptr %20, align 8, !tbaa !25
  %322 = add nsw i64 %321, 1
  store i64 %322, ptr %20, align 8, !tbaa !25
  br label %230, !llvm.loop !32

323:                                              ; preds = %230
  %324 = load ptr, ptr %10, align 8, !tbaa !5
  %325 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %324, i32 0, i32 26
  store i8 1, ptr %325, align 8, !tbaa !28
  %326 = load ptr, ptr %10, align 8, !tbaa !5
  %327 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %326, i32 0, i32 30
  %328 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %327, i32 0, i32 0
  store i32 0, ptr %328, align 8, !tbaa !13
  br label %896

329:                                              ; preds = %106
  %330 = load ptr, ptr %10, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %330, i32 0, i32 26
  store i8 0, ptr %331, align 8, !tbaa !28
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %332

332:                                              ; preds = %400, %329
  %333 = load i64, ptr %20, align 8, !tbaa !25
  %334 = load i64, ptr %19, align 8, !tbaa !25
  %335 = sub nsw i64 %334, 1
  %336 = icmp sle i64 %333, %335
  br i1 %336, label %337, label %403

337:                                              ; preds = %332
  %338 = load ptr, ptr %10, align 8, !tbaa !5
  %339 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %338, i32 0, i32 28
  %340 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %339, i32 0, i32 4
  %341 = load ptr, ptr %340, align 8, !tbaa !24
  %342 = load i64, ptr %20, align 8, !tbaa !25
  %343 = getelementptr inbounds double, ptr %341, i64 %342
  %344 = load double, ptr %343, align 8, !tbaa !11
  %345 = load ptr, ptr %10, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %345, i32 0, i32 32
  %347 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %346, i32 0, i32 4
  %348 = load ptr, ptr %347, align 8, !tbaa !24
  %349 = load i64, ptr %20, align 8, !tbaa !25
  %350 = getelementptr inbounds double, ptr %348, i64 %349
  store double %344, ptr %350, align 8, !tbaa !11
  store i64 0, ptr %21, align 8, !tbaa !25
  br label %351

351:                                              ; preds = %396, %337
  %352 = load i64, ptr %21, align 8, !tbaa !25
  %353 = load i64, ptr %18, align 8, !tbaa !25
  %354 = sub nsw i64 %353, 1
  %355 = icmp sle i64 %352, %354
  br i1 %355, label %356, label %399

356:                                              ; preds = %351
  %357 = load ptr, ptr %10, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %357, i32 0, i32 29
  %359 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %358, i32 0, i32 6
  %360 = load ptr, ptr %359, align 8, !tbaa !24
  %361 = load i64, ptr %20, align 8, !tbaa !25
  %362 = getelementptr inbounds ptr, ptr %360, i64 %361
  %363 = load ptr, ptr %362, align 8, !tbaa !5
  %364 = load i64, ptr %21, align 8, !tbaa !25
  %365 = getelementptr inbounds double, ptr %363, i64 %364
  %366 = load double, ptr %365, align 8, !tbaa !11
  %367 = load ptr, ptr %10, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %367, i32 0, i32 39
  %369 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %368, i32 0, i32 6
  %370 = load ptr, ptr %369, align 8, !tbaa !24
  %371 = load i64, ptr %20, align 8, !tbaa !25
  %372 = getelementptr inbounds ptr, ptr %370, i64 %371
  %373 = load ptr, ptr %372, align 8, !tbaa !5
  %374 = load i64, ptr %21, align 8, !tbaa !25
  %375 = getelementptr inbounds double, ptr %373, i64 %374
  store double %366, ptr %375, align 8, !tbaa !11
  %376 = load ptr, ptr %10, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %376, i32 0, i32 29
  %378 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %377, i32 0, i32 6
  %379 = load ptr, ptr %378, align 8, !tbaa !24
  %380 = load i64, ptr %20, align 8, !tbaa !25
  %381 = getelementptr inbounds ptr, ptr %379, i64 %380
  %382 = load ptr, ptr %381, align 8, !tbaa !5
  %383 = load i64, ptr %21, align 8, !tbaa !25
  %384 = getelementptr inbounds double, ptr %382, i64 %383
  %385 = load double, ptr %384, align 8, !tbaa !11
  %386 = load ptr, ptr %10, align 8, !tbaa !5
  %387 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %386, i32 0, i32 17
  %388 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %387, i32 0, i32 13
  %389 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %388, i32 0, i32 6
  %390 = load ptr, ptr %389, align 8, !tbaa !24
  %391 = load i64, ptr %20, align 8, !tbaa !25
  %392 = getelementptr inbounds ptr, ptr %390, i64 %391
  %393 = load ptr, ptr %392, align 8, !tbaa !5
  %394 = load i64, ptr %21, align 8, !tbaa !25
  %395 = getelementptr inbounds double, ptr %393, i64 %394
  store double %385, ptr %395, align 8, !tbaa !11
  br label %396

396:                                              ; preds = %356
  %397 = load i64, ptr %21, align 8, !tbaa !25
  %398 = add nsw i64 %397, 1
  store i64 %398, ptr %21, align 8, !tbaa !25
  br label %351, !llvm.loop !34

399:                                              ; preds = %351
  br label %400

400:                                              ; preds = %399
  %401 = load i64, ptr %20, align 8, !tbaa !25
  %402 = add nsw i64 %401, 1
  store i64 %402, ptr %20, align 8, !tbaa !25
  br label %332, !llvm.loop !35

403:                                              ; preds = %332
  store i64 0, ptr %22, align 8, !tbaa !25
  br label %404

404:                                              ; preds = %890, %403
  %405 = load i64, ptr %22, align 8, !tbaa !25
  %406 = load i64, ptr %18, align 8, !tbaa !25
  %407 = sub nsw i64 %406, 1
  %408 = icmp sgt i64 %405, %407
  br i1 %408, label %409, label %410

409:                                              ; preds = %404
  br label %893

410:                                              ; preds = %404
  %411 = load ptr, ptr %10, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %411, i32 0, i32 31
  %413 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %412, i32 0, i32 4
  %414 = load ptr, ptr %413, align 8, !tbaa !24
  %415 = load i64, ptr %22, align 8, !tbaa !25
  %416 = getelementptr inbounds double, ptr %414, i64 %415
  %417 = load double, ptr %416, align 8, !tbaa !11
  store double %417, ptr %23, align 8, !tbaa !11
  %418 = load double, ptr %23, align 8, !tbaa !11
  %419 = load ptr, ptr %12, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %419, i32 0, i32 4
  %421 = load ptr, ptr %420, align 8, !tbaa !24
  %422 = load i64, ptr %22, align 8, !tbaa !25
  %423 = getelementptr inbounds double, ptr %421, i64 %422
  %424 = load double, ptr %423, align 8, !tbaa !11
  %425 = load double, ptr %16, align 8, !tbaa !11
  %426 = fneg double %424
  %427 = call double @llvm.fmuladd.f64(double %426, double %425, double %418)
  store double %427, ptr %25, align 8, !tbaa !11
  %428 = load double, ptr %23, align 8, !tbaa !11
  %429 = load ptr, ptr %12, align 8, !tbaa !5
  %430 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %429, i32 0, i32 4
  %431 = load ptr, ptr %430, align 8, !tbaa !24
  %432 = load i64, ptr %22, align 8, !tbaa !25
  %433 = getelementptr inbounds double, ptr %431, i64 %432
  %434 = load double, ptr %433, align 8, !tbaa !11
  %435 = load double, ptr %16, align 8, !tbaa !11
  %436 = call double @llvm.fmuladd.f64(double %434, double %435, double %428)
  store double %436, ptr %24, align 8, !tbaa !11
  %437 = load i8, ptr %15, align 1, !tbaa !9, !range !29, !noundef !30
  %438 = trunc i8 %437 to i1
  br i1 %438, label %439, label %464

439:                                              ; preds = %410
  %440 = load ptr, ptr %13, align 8, !tbaa !5
  %441 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %440, i32 0, i32 4
  %442 = load ptr, ptr %441, align 8, !tbaa !24
  %443 = load i64, ptr %22, align 8, !tbaa !25
  %444 = getelementptr inbounds double, ptr %442, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !11
  %446 = load ptr, ptr %17, align 8, !tbaa !5
  %447 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %445, ptr noundef %446)
  br i1 %447, label %448, label %464

448:                                              ; preds = %439
  %449 = load double, ptr %25, align 8, !tbaa !11
  %450 = load ptr, ptr %13, align 8, !tbaa !5
  %451 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %450, i32 0, i32 4
  %452 = load ptr, ptr %451, align 8, !tbaa !24
  %453 = load i64, ptr %22, align 8, !tbaa !25
  %454 = getelementptr inbounds double, ptr %452, i64 %453
  %455 = load double, ptr %454, align 8, !tbaa !11
  %456 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %449, double noundef %455)
  br i1 %456, label %457, label %464

457:                                              ; preds = %448
  %458 = load ptr, ptr %13, align 8, !tbaa !5
  %459 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %458, i32 0, i32 4
  %460 = load ptr, ptr %459, align 8, !tbaa !24
  %461 = load i64, ptr %22, align 8, !tbaa !25
  %462 = getelementptr inbounds double, ptr %460, i64 %461
  %463 = load double, ptr %462, align 8, !tbaa !11
  store double %463, ptr %25, align 8, !tbaa !11
  br label %464

464:                                              ; preds = %457, %448, %439, %410
  %465 = load i8, ptr %15, align 1, !tbaa !9, !range !29, !noundef !30
  %466 = trunc i8 %465 to i1
  br i1 %466, label %467, label %492

467:                                              ; preds = %464
  %468 = load ptr, ptr %14, align 8, !tbaa !5
  %469 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %468, i32 0, i32 4
  %470 = load ptr, ptr %469, align 8, !tbaa !24
  %471 = load i64, ptr %22, align 8, !tbaa !25
  %472 = getelementptr inbounds double, ptr %470, i64 %471
  %473 = load double, ptr %472, align 8, !tbaa !11
  %474 = load ptr, ptr %17, align 8, !tbaa !5
  %475 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %473, ptr noundef %474)
  br i1 %475, label %476, label %492

476:                                              ; preds = %467
  %477 = load double, ptr %24, align 8, !tbaa !11
  %478 = load ptr, ptr %14, align 8, !tbaa !5
  %479 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %478, i32 0, i32 4
  %480 = load ptr, ptr %479, align 8, !tbaa !24
  %481 = load i64, ptr %22, align 8, !tbaa !25
  %482 = getelementptr inbounds double, ptr %480, i64 %481
  %483 = load double, ptr %482, align 8, !tbaa !11
  %484 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %477, double noundef %483)
  br i1 %484, label %485, label %492

485:                                              ; preds = %476
  %486 = load ptr, ptr %14, align 8, !tbaa !5
  %487 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %486, i32 0, i32 4
  %488 = load ptr, ptr %487, align 8, !tbaa !24
  %489 = load i64, ptr %22, align 8, !tbaa !25
  %490 = getelementptr inbounds double, ptr %488, i64 %489
  %491 = load double, ptr %490, align 8, !tbaa !11
  store double %491, ptr %24, align 8, !tbaa !11
  br label %492

492:                                              ; preds = %485, %476, %467, %464
  %493 = load double, ptr %25, align 8, !tbaa !11
  %494 = load double, ptr %24, align 8, !tbaa !11
  %495 = load double, ptr %25, align 8, !tbaa !11
  %496 = fsub double %494, %495
  %497 = fdiv double %496, 2.000000e+00
  %498 = fadd double %493, %497
  store double %498, ptr %26, align 8, !tbaa !11
  %499 = load double, ptr %25, align 8, !tbaa !11
  %500 = load double, ptr %24, align 8, !tbaa !11
  %501 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %499, double noundef %500)
  br i1 %501, label %510, label %502

502:                                              ; preds = %492
  %503 = load double, ptr %26, align 8, !tbaa !11
  %504 = load double, ptr %25, align 8, !tbaa !11
  %505 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %503, double noundef %504)
  br i1 %505, label %510, label %506

506:                                              ; preds = %502
  %507 = load double, ptr %26, align 8, !tbaa !11
  %508 = load double, ptr %24, align 8, !tbaa !11
  %509 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %507, double noundef %508)
  br i1 %509, label %510, label %531

510:                                              ; preds = %506, %502, %492
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %511

511:                                              ; preds = %527, %510
  %512 = load i64, ptr %20, align 8, !tbaa !25
  %513 = load i64, ptr %19, align 8, !tbaa !25
  %514 = sub nsw i64 %513, 1
  %515 = icmp sle i64 %512, %514
  br i1 %515, label %516, label %530

516:                                              ; preds = %511
  %517 = load ptr, ptr %10, align 8, !tbaa !5
  %518 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %517, i32 0, i32 17
  %519 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %518, i32 0, i32 14
  %520 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %519, i32 0, i32 6
  %521 = load ptr, ptr %520, align 8, !tbaa !24
  %522 = load i64, ptr %20, align 8, !tbaa !25
  %523 = getelementptr inbounds ptr, ptr %521, i64 %522
  %524 = load ptr, ptr %523, align 8, !tbaa !5
  %525 = load i64, ptr %22, align 8, !tbaa !25
  %526 = getelementptr inbounds double, ptr %524, i64 %525
  store double 0.000000e+00, ptr %526, align 8, !tbaa !11
  br label %527

527:                                              ; preds = %516
  %528 = load i64, ptr %20, align 8, !tbaa !25
  %529 = add nsw i64 %528, 1
  store i64 %529, ptr %20, align 8, !tbaa !25
  br label %511, !llvm.loop !36

530:                                              ; preds = %511
  br label %890

531:                                              ; preds = %506
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %532

532:                                              ; preds = %551, %531
  %533 = load i64, ptr %20, align 8, !tbaa !25
  %534 = load i64, ptr %18, align 8, !tbaa !25
  %535 = sub nsw i64 %534, 1
  %536 = icmp sle i64 %533, %535
  br i1 %536, label %537, label %554

537:                                              ; preds = %532
  %538 = load ptr, ptr %10, align 8, !tbaa !5
  %539 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %538, i32 0, i32 31
  %540 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %539, i32 0, i32 4
  %541 = load ptr, ptr %540, align 8, !tbaa !24
  %542 = load i64, ptr %20, align 8, !tbaa !25
  %543 = getelementptr inbounds double, ptr %541, i64 %542
  %544 = load double, ptr %543, align 8, !tbaa !11
  %545 = load ptr, ptr %10, align 8, !tbaa !5
  %546 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %545, i32 0, i32 27
  %547 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %546, i32 0, i32 4
  %548 = load ptr, ptr %547, align 8, !tbaa !24
  %549 = load i64, ptr %20, align 8, !tbaa !25
  %550 = getelementptr inbounds double, ptr %548, i64 %549
  store double %544, ptr %550, align 8, !tbaa !11
  br label %551

551:                                              ; preds = %537
  %552 = load i64, ptr %20, align 8, !tbaa !25
  %553 = add nsw i64 %552, 1
  store i64 %553, ptr %20, align 8, !tbaa !25
  br label %532, !llvm.loop !37

554:                                              ; preds = %532
  %555 = load double, ptr %25, align 8, !tbaa !11
  %556 = load ptr, ptr %10, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %556, i32 0, i32 27
  %558 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %557, i32 0, i32 4
  %559 = load ptr, ptr %558, align 8, !tbaa !24
  %560 = load i64, ptr %22, align 8, !tbaa !25
  %561 = getelementptr inbounds double, ptr %559, i64 %560
  store double %555, ptr %561, align 8, !tbaa !11
  %562 = load ptr, ptr %10, align 8, !tbaa !5
  %563 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %562, i32 0, i32 26
  store i8 1, ptr %563, align 8, !tbaa !28
  %564 = load ptr, ptr %10, align 8, !tbaa !5
  %565 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %564, i32 0, i32 30
  %566 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %565, i32 0, i32 0
  store i32 1, ptr %566, align 8, !tbaa !13
  br label %896

567:                                              ; preds = %113
  %568 = load ptr, ptr %10, align 8, !tbaa !5
  %569 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %568, i32 0, i32 26
  store i8 0, ptr %569, align 8, !tbaa !28
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %570

570:                                              ; preds = %605, %567
  %571 = load i64, ptr %20, align 8, !tbaa !25
  %572 = load i64, ptr %19, align 8, !tbaa !25
  %573 = sub nsw i64 %572, 1
  %574 = icmp sle i64 %571, %573
  br i1 %574, label %575, label %608

575:                                              ; preds = %570
  %576 = load ptr, ptr %10, align 8, !tbaa !5
  %577 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %576, i32 0, i32 28
  %578 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %577, i32 0, i32 4
  %579 = load ptr, ptr %578, align 8, !tbaa !24
  %580 = load i64, ptr %20, align 8, !tbaa !25
  %581 = getelementptr inbounds double, ptr %579, i64 %580
  %582 = load double, ptr %581, align 8, !tbaa !11
  %583 = load ptr, ptr %10, align 8, !tbaa !5
  %584 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %583, i32 0, i32 33
  %585 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %584, i32 0, i32 4
  %586 = load ptr, ptr %585, align 8, !tbaa !24
  %587 = load i64, ptr %20, align 8, !tbaa !25
  %588 = getelementptr inbounds double, ptr %586, i64 %587
  store double %582, ptr %588, align 8, !tbaa !11
  %589 = load ptr, ptr %10, align 8, !tbaa !5
  %590 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %589, i32 0, i32 29
  %591 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %590, i32 0, i32 6
  %592 = load ptr, ptr %591, align 8, !tbaa !24
  %593 = load i64, ptr %20, align 8, !tbaa !25
  %594 = getelementptr inbounds ptr, ptr %592, i64 %593
  %595 = load ptr, ptr %594, align 8, !tbaa !5
  %596 = load i64, ptr %22, align 8, !tbaa !25
  %597 = getelementptr inbounds double, ptr %595, i64 %596
  %598 = load double, ptr %597, align 8, !tbaa !11
  %599 = load ptr, ptr %10, align 8, !tbaa !5
  %600 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %599, i32 0, i32 36
  %601 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %600, i32 0, i32 4
  %602 = load ptr, ptr %601, align 8, !tbaa !24
  %603 = load i64, ptr %20, align 8, !tbaa !25
  %604 = getelementptr inbounds double, ptr %602, i64 %603
  store double %598, ptr %604, align 8, !tbaa !11
  br label %605

605:                                              ; preds = %575
  %606 = load i64, ptr %20, align 8, !tbaa !25
  %607 = add nsw i64 %606, 1
  store i64 %607, ptr %20, align 8, !tbaa !25
  br label %570, !llvm.loop !38

608:                                              ; preds = %570
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %609

609:                                              ; preds = %628, %608
  %610 = load i64, ptr %20, align 8, !tbaa !25
  %611 = load i64, ptr %18, align 8, !tbaa !25
  %612 = sub nsw i64 %611, 1
  %613 = icmp sle i64 %610, %612
  br i1 %613, label %614, label %631

614:                                              ; preds = %609
  %615 = load ptr, ptr %10, align 8, !tbaa !5
  %616 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %615, i32 0, i32 31
  %617 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %616, i32 0, i32 4
  %618 = load ptr, ptr %617, align 8, !tbaa !24
  %619 = load i64, ptr %20, align 8, !tbaa !25
  %620 = getelementptr inbounds double, ptr %618, i64 %619
  %621 = load double, ptr %620, align 8, !tbaa !11
  %622 = load ptr, ptr %10, align 8, !tbaa !5
  %623 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %622, i32 0, i32 27
  %624 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %623, i32 0, i32 4
  %625 = load ptr, ptr %624, align 8, !tbaa !24
  %626 = load i64, ptr %20, align 8, !tbaa !25
  %627 = getelementptr inbounds double, ptr %625, i64 %626
  store double %621, ptr %627, align 8, !tbaa !11
  br label %628

628:                                              ; preds = %614
  %629 = load i64, ptr %20, align 8, !tbaa !25
  %630 = add nsw i64 %629, 1
  store i64 %630, ptr %20, align 8, !tbaa !25
  br label %609, !llvm.loop !39

631:                                              ; preds = %609
  %632 = load double, ptr %26, align 8, !tbaa !11
  %633 = load ptr, ptr %10, align 8, !tbaa !5
  %634 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %633, i32 0, i32 27
  %635 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %634, i32 0, i32 4
  %636 = load ptr, ptr %635, align 8, !tbaa !24
  %637 = load i64, ptr %22, align 8, !tbaa !25
  %638 = getelementptr inbounds double, ptr %636, i64 %637
  store double %632, ptr %638, align 8, !tbaa !11
  %639 = load ptr, ptr %10, align 8, !tbaa !5
  %640 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %639, i32 0, i32 26
  store i8 1, ptr %640, align 8, !tbaa !28
  %641 = load ptr, ptr %10, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %641, i32 0, i32 30
  %643 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %642, i32 0, i32 0
  store i32 2, ptr %643, align 8, !tbaa !13
  br label %896

644:                                              ; preds = %120
  %645 = load ptr, ptr %10, align 8, !tbaa !5
  %646 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %645, i32 0, i32 26
  store i8 0, ptr %646, align 8, !tbaa !28
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %647

647:                                              ; preds = %682, %644
  %648 = load i64, ptr %20, align 8, !tbaa !25
  %649 = load i64, ptr %19, align 8, !tbaa !25
  %650 = sub nsw i64 %649, 1
  %651 = icmp sle i64 %648, %650
  br i1 %651, label %652, label %685

652:                                              ; preds = %647
  %653 = load ptr, ptr %10, align 8, !tbaa !5
  %654 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %653, i32 0, i32 28
  %655 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %654, i32 0, i32 4
  %656 = load ptr, ptr %655, align 8, !tbaa !24
  %657 = load i64, ptr %20, align 8, !tbaa !25
  %658 = getelementptr inbounds double, ptr %656, i64 %657
  %659 = load double, ptr %658, align 8, !tbaa !11
  %660 = load ptr, ptr %10, align 8, !tbaa !5
  %661 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %660, i32 0, i32 34
  %662 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %661, i32 0, i32 4
  %663 = load ptr, ptr %662, align 8, !tbaa !24
  %664 = load i64, ptr %20, align 8, !tbaa !25
  %665 = getelementptr inbounds double, ptr %663, i64 %664
  store double %659, ptr %665, align 8, !tbaa !11
  %666 = load ptr, ptr %10, align 8, !tbaa !5
  %667 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %666, i32 0, i32 29
  %668 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %667, i32 0, i32 6
  %669 = load ptr, ptr %668, align 8, !tbaa !24
  %670 = load i64, ptr %20, align 8, !tbaa !25
  %671 = getelementptr inbounds ptr, ptr %669, i64 %670
  %672 = load ptr, ptr %671, align 8, !tbaa !5
  %673 = load i64, ptr %22, align 8, !tbaa !25
  %674 = getelementptr inbounds double, ptr %672, i64 %673
  %675 = load double, ptr %674, align 8, !tbaa !11
  %676 = load ptr, ptr %10, align 8, !tbaa !5
  %677 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %676, i32 0, i32 37
  %678 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %677, i32 0, i32 4
  %679 = load ptr, ptr %678, align 8, !tbaa !24
  %680 = load i64, ptr %20, align 8, !tbaa !25
  %681 = getelementptr inbounds double, ptr %679, i64 %680
  store double %675, ptr %681, align 8, !tbaa !11
  br label %682

682:                                              ; preds = %652
  %683 = load i64, ptr %20, align 8, !tbaa !25
  %684 = add nsw i64 %683, 1
  store i64 %684, ptr %20, align 8, !tbaa !25
  br label %647, !llvm.loop !40

685:                                              ; preds = %647
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %686

686:                                              ; preds = %705, %685
  %687 = load i64, ptr %20, align 8, !tbaa !25
  %688 = load i64, ptr %18, align 8, !tbaa !25
  %689 = sub nsw i64 %688, 1
  %690 = icmp sle i64 %687, %689
  br i1 %690, label %691, label %708

691:                                              ; preds = %686
  %692 = load ptr, ptr %10, align 8, !tbaa !5
  %693 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %692, i32 0, i32 31
  %694 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %693, i32 0, i32 4
  %695 = load ptr, ptr %694, align 8, !tbaa !24
  %696 = load i64, ptr %20, align 8, !tbaa !25
  %697 = getelementptr inbounds double, ptr %695, i64 %696
  %698 = load double, ptr %697, align 8, !tbaa !11
  %699 = load ptr, ptr %10, align 8, !tbaa !5
  %700 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %699, i32 0, i32 27
  %701 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %700, i32 0, i32 4
  %702 = load ptr, ptr %701, align 8, !tbaa !24
  %703 = load i64, ptr %20, align 8, !tbaa !25
  %704 = getelementptr inbounds double, ptr %702, i64 %703
  store double %698, ptr %704, align 8, !tbaa !11
  br label %705

705:                                              ; preds = %691
  %706 = load i64, ptr %20, align 8, !tbaa !25
  %707 = add nsw i64 %706, 1
  store i64 %707, ptr %20, align 8, !tbaa !25
  br label %686, !llvm.loop !41

708:                                              ; preds = %686
  %709 = load double, ptr %24, align 8, !tbaa !11
  %710 = load ptr, ptr %10, align 8, !tbaa !5
  %711 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %710, i32 0, i32 27
  %712 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %711, i32 0, i32 4
  %713 = load ptr, ptr %712, align 8, !tbaa !24
  %714 = load i64, ptr %22, align 8, !tbaa !25
  %715 = getelementptr inbounds double, ptr %713, i64 %714
  store double %709, ptr %715, align 8, !tbaa !11
  %716 = load ptr, ptr %10, align 8, !tbaa !5
  %717 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %716, i32 0, i32 26
  store i8 1, ptr %717, align 8, !tbaa !28
  %718 = load ptr, ptr %10, align 8, !tbaa !5
  %719 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %718, i32 0, i32 30
  %720 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %719, i32 0, i32 0
  store i32 3, ptr %720, align 8, !tbaa !13
  br label %896

721:                                              ; preds = %127
  %722 = load ptr, ptr %10, align 8, !tbaa !5
  %723 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %722, i32 0, i32 26
  store i8 0, ptr %723, align 8, !tbaa !28
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %724

724:                                              ; preds = %759, %721
  %725 = load i64, ptr %20, align 8, !tbaa !25
  %726 = load i64, ptr %19, align 8, !tbaa !25
  %727 = sub nsw i64 %726, 1
  %728 = icmp sle i64 %725, %727
  br i1 %728, label %729, label %762

729:                                              ; preds = %724
  %730 = load ptr, ptr %10, align 8, !tbaa !5
  %731 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %730, i32 0, i32 28
  %732 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %731, i32 0, i32 4
  %733 = load ptr, ptr %732, align 8, !tbaa !24
  %734 = load i64, ptr %20, align 8, !tbaa !25
  %735 = getelementptr inbounds double, ptr %733, i64 %734
  %736 = load double, ptr %735, align 8, !tbaa !11
  %737 = load ptr, ptr %10, align 8, !tbaa !5
  %738 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %737, i32 0, i32 35
  %739 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %738, i32 0, i32 4
  %740 = load ptr, ptr %739, align 8, !tbaa !24
  %741 = load i64, ptr %20, align 8, !tbaa !25
  %742 = getelementptr inbounds double, ptr %740, i64 %741
  store double %736, ptr %742, align 8, !tbaa !11
  %743 = load ptr, ptr %10, align 8, !tbaa !5
  %744 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %743, i32 0, i32 29
  %745 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %744, i32 0, i32 6
  %746 = load ptr, ptr %745, align 8, !tbaa !24
  %747 = load i64, ptr %20, align 8, !tbaa !25
  %748 = getelementptr inbounds ptr, ptr %746, i64 %747
  %749 = load ptr, ptr %748, align 8, !tbaa !5
  %750 = load i64, ptr %22, align 8, !tbaa !25
  %751 = getelementptr inbounds double, ptr %749, i64 %750
  %752 = load double, ptr %751, align 8, !tbaa !11
  %753 = load ptr, ptr %10, align 8, !tbaa !5
  %754 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %753, i32 0, i32 38
  %755 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %754, i32 0, i32 4
  %756 = load ptr, ptr %755, align 8, !tbaa !24
  %757 = load i64, ptr %20, align 8, !tbaa !25
  %758 = getelementptr inbounds double, ptr %756, i64 %757
  store double %752, ptr %758, align 8, !tbaa !11
  br label %759

759:                                              ; preds = %729
  %760 = load i64, ptr %20, align 8, !tbaa !25
  %761 = add nsw i64 %760, 1
  store i64 %761, ptr %20, align 8, !tbaa !25
  br label %724, !llvm.loop !42

762:                                              ; preds = %724
  store i64 0, ptr %20, align 8, !tbaa !25
  br label %763

763:                                              ; preds = %886, %762
  %764 = load i64, ptr %20, align 8, !tbaa !25
  %765 = load i64, ptr %19, align 8, !tbaa !25
  %766 = sub nsw i64 %765, 1
  %767 = icmp sle i64 %764, %766
  br i1 %767, label %768, label %889

768:                                              ; preds = %763
  %769 = load ptr, ptr %10, align 8, !tbaa !5
  %770 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %769, i32 0, i32 35
  %771 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %770, i32 0, i32 4
  %772 = load ptr, ptr %771, align 8, !tbaa !24
  %773 = load i64, ptr %20, align 8, !tbaa !25
  %774 = getelementptr inbounds double, ptr %772, i64 %773
  %775 = load double, ptr %774, align 8, !tbaa !11
  %776 = load ptr, ptr %10, align 8, !tbaa !5
  %777 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %776, i32 0, i32 33
  %778 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %777, i32 0, i32 4
  %779 = load ptr, ptr %778, align 8, !tbaa !24
  %780 = load i64, ptr %20, align 8, !tbaa !25
  %781 = getelementptr inbounds double, ptr %779, i64 %780
  %782 = load double, ptr %781, align 8, !tbaa !11
  %783 = fsub double %775, %782
  %784 = load double, ptr %24, align 8, !tbaa !11
  %785 = load double, ptr %25, align 8, !tbaa !11
  %786 = fsub double %784, %785
  %787 = fdiv double %783, %786
  %788 = load ptr, ptr %10, align 8, !tbaa !5
  %789 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %788, i32 0, i32 17
  %790 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %789, i32 0, i32 14
  %791 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %790, i32 0, i32 6
  %792 = load ptr, ptr %791, align 8, !tbaa !24
  %793 = load i64, ptr %20, align 8, !tbaa !25
  %794 = getelementptr inbounds ptr, ptr %792, i64 %793
  %795 = load ptr, ptr %794, align 8, !tbaa !5
  %796 = load i64, ptr %22, align 8, !tbaa !25
  %797 = getelementptr inbounds double, ptr %795, i64 %796
  store double %787, ptr %797, align 8, !tbaa !11
  %798 = load ptr, ptr %10, align 8, !tbaa !5
  %799 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %798, i32 0, i32 33
  %800 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %799, i32 0, i32 4
  %801 = load ptr, ptr %800, align 8, !tbaa !24
  %802 = load i64, ptr %20, align 8, !tbaa !25
  %803 = getelementptr inbounds double, ptr %801, i64 %802
  %804 = load double, ptr %803, align 8, !tbaa !11
  %805 = load ptr, ptr %10, align 8, !tbaa !5
  %806 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %805, i32 0, i32 36
  %807 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %806, i32 0, i32 4
  %808 = load ptr, ptr %807, align 8, !tbaa !24
  %809 = load i64, ptr %20, align 8, !tbaa !25
  %810 = getelementptr inbounds double, ptr %808, i64 %809
  %811 = load double, ptr %810, align 8, !tbaa !11
  %812 = load ptr, ptr %12, align 8, !tbaa !5
  %813 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %812, i32 0, i32 4
  %814 = load ptr, ptr %813, align 8, !tbaa !24
  %815 = load i64, ptr %22, align 8, !tbaa !25
  %816 = getelementptr inbounds double, ptr %814, i64 %815
  %817 = load double, ptr %816, align 8, !tbaa !11
  %818 = fmul double %811, %817
  %819 = load ptr, ptr %10, align 8, !tbaa !5
  %820 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %819, i32 0, i32 35
  %821 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %820, i32 0, i32 4
  %822 = load ptr, ptr %821, align 8, !tbaa !24
  %823 = load i64, ptr %20, align 8, !tbaa !25
  %824 = getelementptr inbounds double, ptr %822, i64 %823
  %825 = load double, ptr %824, align 8, !tbaa !11
  %826 = load ptr, ptr %10, align 8, !tbaa !5
  %827 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %826, i32 0, i32 38
  %828 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %827, i32 0, i32 4
  %829 = load ptr, ptr %828, align 8, !tbaa !24
  %830 = load i64, ptr %20, align 8, !tbaa !25
  %831 = getelementptr inbounds double, ptr %829, i64 %830
  %832 = load double, ptr %831, align 8, !tbaa !11
  %833 = load ptr, ptr %12, align 8, !tbaa !5
  %834 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %833, i32 0, i32 4
  %835 = load ptr, ptr %834, align 8, !tbaa !24
  %836 = load i64, ptr %22, align 8, !tbaa !25
  %837 = getelementptr inbounds double, ptr %835, i64 %836
  %838 = load double, ptr %837, align 8, !tbaa !11
  %839 = fmul double %832, %838
  %840 = load ptr, ptr %10, align 8, !tbaa !5
  %841 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %840, i32 0, i32 34
  %842 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %841, i32 0, i32 4
  %843 = load ptr, ptr %842, align 8, !tbaa !24
  %844 = load i64, ptr %20, align 8, !tbaa !25
  %845 = getelementptr inbounds double, ptr %843, i64 %844
  %846 = load double, ptr %845, align 8, !tbaa !11
  %847 = load ptr, ptr %10, align 8, !tbaa !5
  %848 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %847, i32 0, i32 37
  %849 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %848, i32 0, i32 4
  %850 = load ptr, ptr %849, align 8, !tbaa !24
  %851 = load i64, ptr %20, align 8, !tbaa !25
  %852 = getelementptr inbounds double, ptr %850, i64 %851
  %853 = load double, ptr %852, align 8, !tbaa !11
  %854 = load ptr, ptr %12, align 8, !tbaa !5
  %855 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %854, i32 0, i32 4
  %856 = load ptr, ptr %855, align 8, !tbaa !24
  %857 = load i64, ptr %22, align 8, !tbaa !25
  %858 = getelementptr inbounds double, ptr %856, i64 %857
  %859 = load double, ptr %858, align 8, !tbaa !11
  %860 = fmul double %853, %859
  %861 = load double, ptr %24, align 8, !tbaa !11
  %862 = load double, ptr %25, align 8, !tbaa !11
  %863 = fsub double %861, %862
  %864 = load ptr, ptr %12, align 8, !tbaa !5
  %865 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %864, i32 0, i32 4
  %866 = load ptr, ptr %865, align 8, !tbaa !24
  %867 = load i64, ptr %22, align 8, !tbaa !25
  %868 = getelementptr inbounds double, ptr %866, i64 %867
  %869 = load double, ptr %868, align 8, !tbaa !11
  %870 = fdiv double %863, %869
  %871 = load ptr, ptr %17, align 8, !tbaa !5
  %872 = call noundef zeroext i1 @_ZN11alglib_impl15derivativecheckEdddddddPNS_8ae_stateE(double noundef %804, double noundef %818, double noundef %825, double noundef %839, double noundef %846, double noundef %860, double noundef %870, ptr noundef %871)
  br i1 %872, label %885, label %873

873:                                              ; preds = %768
  %874 = load ptr, ptr %10, align 8, !tbaa !5
  %875 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %874, i32 0, i32 17
  %876 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %875, i32 0, i32 9
  store i8 1, ptr %876, align 8, !tbaa !43
  %877 = load i64, ptr %20, align 8, !tbaa !25
  %878 = load ptr, ptr %10, align 8, !tbaa !5
  %879 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %878, i32 0, i32 17
  %880 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %879, i32 0, i32 10
  store i64 %877, ptr %880, align 8, !tbaa !44
  %881 = load i64, ptr %22, align 8, !tbaa !25
  %882 = load ptr, ptr %10, align 8, !tbaa !5
  %883 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %882, i32 0, i32 17
  %884 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %883, i32 0, i32 11
  store i64 %881, ptr %884, align 8, !tbaa !45
  br label %885

885:                                              ; preds = %873, %768
  br label %886

886:                                              ; preds = %885
  %887 = load i64, ptr %20, align 8, !tbaa !25
  %888 = add nsw i64 %887, 1
  store i64 %888, ptr %20, align 8, !tbaa !25
  br label %763, !llvm.loop !46

889:                                              ; preds = %763
  br label %890

890:                                              ; preds = %889, %530
  %891 = load i64, ptr %22, align 8, !tbaa !25
  %892 = add nsw i64 %891, 1
  store i64 %892, ptr %22, align 8, !tbaa !25
  br label %404

893:                                              ; preds = %409
  store i8 0, ptr %27, align 1, !tbaa !9
  %894 = load i8, ptr %27, align 1, !tbaa !9, !range !29, !noundef !30
  %895 = trunc i8 %894 to i1
  store i1 %895, ptr %9, align 1
  store i32 1, ptr %28, align 4
  br label %962

896:                                              ; preds = %708, %631, %554, %323
  store i8 1, ptr %27, align 1, !tbaa !9
  %897 = load i64, ptr %18, align 8, !tbaa !25
  %898 = load ptr, ptr %10, align 8, !tbaa !5
  %899 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %898, i32 0, i32 30
  %900 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %899, i32 0, i32 1
  %901 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %900, i32 0, i32 4
  %902 = load ptr, ptr %901, align 8, !tbaa !24
  %903 = getelementptr inbounds i64, ptr %902, i64 0
  store i64 %897, ptr %903, align 8, !tbaa !25
  %904 = load i64, ptr %19, align 8, !tbaa !25
  %905 = load ptr, ptr %10, align 8, !tbaa !5
  %906 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %905, i32 0, i32 30
  %907 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %906, i32 0, i32 1
  %908 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %907, i32 0, i32 4
  %909 = load ptr, ptr %908, align 8, !tbaa !24
  %910 = getelementptr inbounds i64, ptr %909, i64 1
  store i64 %904, ptr %910, align 8, !tbaa !25
  %911 = load i64, ptr %20, align 8, !tbaa !25
  %912 = load ptr, ptr %10, align 8, !tbaa !5
  %913 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %912, i32 0, i32 30
  %914 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %913, i32 0, i32 1
  %915 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %914, i32 0, i32 4
  %916 = load ptr, ptr %915, align 8, !tbaa !24
  %917 = getelementptr inbounds i64, ptr %916, i64 2
  store i64 %911, ptr %917, align 8, !tbaa !25
  %918 = load i64, ptr %21, align 8, !tbaa !25
  %919 = load ptr, ptr %10, align 8, !tbaa !5
  %920 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %919, i32 0, i32 30
  %921 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %920, i32 0, i32 1
  %922 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %921, i32 0, i32 4
  %923 = load ptr, ptr %922, align 8, !tbaa !24
  %924 = getelementptr inbounds i64, ptr %923, i64 3
  store i64 %918, ptr %924, align 8, !tbaa !25
  %925 = load i64, ptr %22, align 8, !tbaa !25
  %926 = load ptr, ptr %10, align 8, !tbaa !5
  %927 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %926, i32 0, i32 30
  %928 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %927, i32 0, i32 1
  %929 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %928, i32 0, i32 4
  %930 = load ptr, ptr %929, align 8, !tbaa !24
  %931 = getelementptr inbounds i64, ptr %930, i64 4
  store i64 %925, ptr %931, align 8, !tbaa !25
  %932 = load double, ptr %23, align 8, !tbaa !11
  %933 = load ptr, ptr %10, align 8, !tbaa !5
  %934 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %933, i32 0, i32 30
  %935 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %934, i32 0, i32 3
  %936 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %935, i32 0, i32 4
  %937 = load ptr, ptr %936, align 8, !tbaa !24
  %938 = getelementptr inbounds double, ptr %937, i64 0
  store double %932, ptr %938, align 8, !tbaa !11
  %939 = load double, ptr %24, align 8, !tbaa !11
  %940 = load ptr, ptr %10, align 8, !tbaa !5
  %941 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %940, i32 0, i32 30
  %942 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %941, i32 0, i32 3
  %943 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %942, i32 0, i32 4
  %944 = load ptr, ptr %943, align 8, !tbaa !24
  %945 = getelementptr inbounds double, ptr %944, i64 1
  store double %939, ptr %945, align 8, !tbaa !11
  %946 = load double, ptr %25, align 8, !tbaa !11
  %947 = load ptr, ptr %10, align 8, !tbaa !5
  %948 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %947, i32 0, i32 30
  %949 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %948, i32 0, i32 3
  %950 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %949, i32 0, i32 4
  %951 = load ptr, ptr %950, align 8, !tbaa !24
  %952 = getelementptr inbounds double, ptr %951, i64 2
  store double %946, ptr %952, align 8, !tbaa !11
  %953 = load double, ptr %26, align 8, !tbaa !11
  %954 = load ptr, ptr %10, align 8, !tbaa !5
  %955 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %954, i32 0, i32 30
  %956 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %955, i32 0, i32 3
  %957 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %956, i32 0, i32 4
  %958 = load ptr, ptr %957, align 8, !tbaa !24
  %959 = getelementptr inbounds double, ptr %958, i64 3
  store double %953, ptr %959, align 8, !tbaa !11
  %960 = load i8, ptr %27, align 1, !tbaa !9, !range !29, !noundef !30
  %961 = trunc i8 %960 to i1
  store i1 %961, ptr %9, align 1
  store i32 1, ptr %28, align 4
  br label %962

962:                                              ; preds = %896, %893, %149
  call void @llvm.lifetime.end.p0(i64 1, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, 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
  %963 = load i1, ptr %9, align 1
  ret i1 %963
}

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, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !23, i64 2312}
!14 = !{!"_ZTSN11alglib_impl17smoothnessmonitorE", !15, i64 0, !15, i64 8, !10, i64 16, !16, i64 24, !15, i64 88, !16, i64 96, !16, i64 160, !16, i64 224, !18, i64 288, !16, i64 368, !16, i64 432, !15, i64 496, !10, i64 504, !10, i64 505, !12, i64 512, !12, i64 520, !10, i64 528, !19, i64 536, !12, i64 832, !12, i64 840, !20, i64 848, !20, i64 1152, !12, i64 1456, !12, i64 1464, !21, i64 1472, !21, i64 1784, !10, i64 2096, !16, i64 2104, !16, i64 2168, !18, i64 2232, !22, i64 2312, !16, i64 2576, !16, i64 2640, !16, i64 2704, !16, i64 2768, !16, i64 2832, !16, i64 2896, !16, i64 2960, !16, i64 3024, !18, i64 3088, !18, i64 3168, !16, i64 3248, !16, i64 3312, !16, i64 3376, !16, i64 3440, !16, i64 3504, !16, i64 3568, !16, i64 3632, !16, i64 3696, !16, i64 3760, !16, i64 3824, !18, i64 3888}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTSN11alglib_impl9ae_vectorE", !15, i64 0, !15, i64 8, !10, i64 16, !17, i64 24, !7, i64 56}
!17 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!18 = !{!"_ZTSN11alglib_impl9ae_matrixE", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !10, i64 32, !17, i64 40, !7, i64 72}
!19 = !{!"_ZTSN11alglib_impl14optguardreportE", !10, i64 0, !10, i64 1, !15, i64 8, !12, i64 16, !10, i64 24, !10, i64 25, !10, i64 26, !15, i64 32, !12, i64 40, !10, i64 48, !15, i64 56, !15, i64 64, !16, i64 72, !18, i64 136, !18, i64 216}
!20 = !{!"_ZTSN11alglib_impl24optguardnonc1test0reportE", !10, i64 0, !15, i64 8, !16, i64 16, !16, i64 80, !15, i64 144, !16, i64 152, !16, i64 216, !15, i64 280, !15, i64 288, !15, i64 296}
!21 = !{!"_ZTSN11alglib_impl24optguardnonc1test1reportE", !10, i64 0, !15, i64 8, !15, i64 16, !16, i64 24, !16, i64 88, !15, i64 152, !16, i64 160, !16, i64 224, !15, i64 288, !15, i64 296, !15, i64 304}
!22 = !{!"_ZTSN11alglib_impl10rcommstateE", !23, i64 0, !16, i64 8, !16, i64 72, !16, i64 136, !16, i64 200}
!23 = !{!"int", !7, i64 0}
!24 = !{!7, !7, i64 0}
!25 = !{!15, !15, i64 0}
!26 = !{!14, !15, i64 0}
!27 = !{!14, !15, i64 8}
!28 = !{!14, !10, i64 2096}
!29 = !{i8 0, i8 2}
!30 = !{}
!31 = !{!14, !10, i64 528}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !33}
!37 = distinct !{!37, !33}
!38 = distinct !{!38, !33}
!39 = distinct !{!39, !33}
!40 = distinct !{!40, !33}
!41 = distinct !{!41, !33}
!42 = distinct !{!42, !33}
!43 = !{!14, !10, i64 584}
!44 = !{!14, !15, i64 592}
!45 = !{!14, !15, i64 600}
!46 = distinct !{!46, !33}


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

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

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

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

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

declare void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef, i64 noundef, i64 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 double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef, ptr noundef) local_unnamed_addr #0

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl15derivativecheckEdddddddPNS_8ae_stateE(double noundef, double noundef, double noundef, double noundef, double noundef, double noundef, double noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11alglib_impl34smoothnessmonitorcheckgradientatx0EPNS_17smoothnessmonitorEPNS_9ae_vectorES3_S3_S3_bdPNS_8ae_stateE(ptr noundef %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, i1 noundef zeroext %5, double noundef %6, ptr noundef %7) local_unnamed_addr #2 {
  %9 = getelementptr inbounds i8, ptr %0, i64 2312
  %10 = load i32, ptr %9, align 8, !tbaa !5
  %11 = icmp sgt i32 %10, -1
  br i1 %11, label %12, label %31

12:                                               ; preds = %8
  %13 = getelementptr inbounds i8, ptr %0, i64 2376
  %14 = load ptr, ptr %13, align 8, !tbaa !21
  %15 = load i64, ptr %14, align 8, !tbaa !22
  %16 = getelementptr inbounds i8, ptr %14, i64 8
  %17 = load i64, ptr %16, align 8, !tbaa !22
  %18 = getelementptr inbounds i8, ptr %14, i64 24
  %19 = load i64, ptr %18, align 8, !tbaa !22
  %20 = getelementptr inbounds i8, ptr %14, i64 32
  %21 = load i64, ptr %20, align 8, !tbaa !22
  %22 = getelementptr inbounds i8, ptr %0, i64 2504
  %23 = load ptr, ptr %22, align 8, !tbaa !21
  %24 = load double, ptr %23, align 8, !tbaa !23
  %25 = getelementptr inbounds i8, ptr %23, i64 8
  %26 = load double, ptr %25, align 8, !tbaa !23
  %27 = getelementptr inbounds i8, ptr %23, i64 16
  %28 = load double, ptr %27, align 8, !tbaa !23
  %29 = getelementptr inbounds i8, ptr %23, i64 24
  %30 = load double, ptr %29, align 8, !tbaa !23
  br label %31

31:                                               ; preds = %8, %12
  %.0343 = phi i64 [ %15, %12 ], [ 359, %8 ]
  %.0341 = phi i64 [ %17, %12 ], [ -58, %8 ]
  %.0330 = phi i64 [ %19, %12 ], [ -909, %8 ]
  %.0326 = phi i64 [ %21, %12 ], [ 81, %8 ]
  %.0323 = phi double [ %24, %12 ], [ 2.550000e+02, %8 ]
  %.0320 = phi double [ %26, %12 ], [ 7.400000e+01, %8 ]
  %.0318 = phi double [ %28, %12 ], [ -7.880000e+02, %8 ]
  %.0 = phi double [ %30, %12 ], [ 8.090000e+02, %8 ]
  switch i32 %10, label %32 [
    i32 0, label %107
    i32 1, label %284
    i32 2, label %367
    i32 3, label %450
  ]

32:                                               ; preds = %31
  %33 = load i64, ptr %0, align 8, !tbaa !24
  %34 = getelementptr inbounds i8, ptr %0, i64 8
  %35 = load i64, ptr %34, align 8, !tbaa !25
  %36 = getelementptr inbounds i8, ptr %0, i64 2096
  store i8 0, ptr %36, align 8, !tbaa !26
  %37 = icmp slt i64 %33, 1
  %38 = icmp slt i64 %35, 1
  %or.cond = select i1 %37, i1 true, i1 %38
  br i1 %or.cond, label %574, label %39

39:                                               ; preds = %32
  %40 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %6, ptr noundef %7)
  br i1 %40, label %41, label %574

41:                                               ; preds = %39
  %42 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %6, double noundef 0.000000e+00)
  br i1 %42, label %574, label %.lr.ph416

.lr.ph416:                                        ; preds = %41
  %43 = tail call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %6, ptr noundef %7)
  %44 = getelementptr inbounds i8, ptr %0, i64 2104
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %44, i64 noundef %33, ptr noundef %7)
  %45 = getelementptr inbounds i8, ptr %0, i64 2168
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %45, i64 noundef %35, ptr noundef %7)
  %46 = getelementptr inbounds i8, ptr %0, i64 2232
  tail call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %46, i64 noundef %35, i64 noundef %33, ptr noundef %7)
  %47 = getelementptr inbounds i8, ptr %0, i64 2576
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %47, i64 noundef %33, ptr noundef %7)
  %48 = getelementptr inbounds i8, ptr %0, i64 2640
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %48, i64 noundef %35, ptr noundef %7)
  %49 = getelementptr inbounds i8, ptr %0, i64 2704
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %49, i64 noundef %35, ptr noundef %7)
  %50 = getelementptr inbounds i8, ptr %0, i64 2768
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %50, i64 noundef %35, ptr noundef %7)
  %51 = getelementptr inbounds i8, ptr %0, i64 2832
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %51, i64 noundef %35, ptr noundef %7)
  %52 = getelementptr inbounds i8, ptr %0, i64 2896
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %52, i64 noundef %35, ptr noundef %7)
  %53 = getelementptr inbounds i8, ptr %0, i64 2960
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %53, i64 noundef %35, ptr noundef %7)
  %54 = getelementptr inbounds i8, ptr %0, i64 3024
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %54, i64 noundef %35, ptr noundef %7)
  %55 = getelementptr inbounds i8, ptr %0, i64 3088
  tail call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %55, i64 noundef %35, i64 noundef %33, ptr noundef %7)
  %56 = getelementptr inbounds i8, ptr %0, i64 3168
  tail call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %56, i64 noundef %35, i64 noundef %33, ptr noundef %7)
  %57 = getelementptr inbounds i8, ptr %0, i64 608
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %57, i64 noundef %33, ptr noundef %7)
  %58 = getelementptr inbounds i8, ptr %0, i64 672
  tail call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %58, i64 noundef %35, i64 noundef %33, ptr noundef %7)
  %59 = getelementptr inbounds i8, ptr %0, i64 752
  tail call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %59, i64 noundef %35, i64 noundef %33, ptr noundef %7)
  %60 = getelementptr inbounds i8, ptr %0, i64 528
  store i8 1, ptr %60, align 8, !tbaa !27
  %61 = getelementptr inbounds i8, ptr %1, i64 56
  %62 = getelementptr inbounds i8, ptr %3, i64 56
  %63 = getelementptr inbounds i8, ptr %4, i64 56
  %64 = getelementptr inbounds i8, ptr %0, i64 2632
  %65 = getelementptr inbounds i8, ptr %0, i64 664
  %66 = getelementptr inbounds i8, ptr %0, i64 2160
  br label %67

67:                                               ; preds = %.lr.ph416, %99
  %.0335414 = phi i64 [ 0, %.lr.ph416 ], [ %106, %99 ]
  %68 = load ptr, ptr %61, align 8, !tbaa !21
  %69 = getelementptr inbounds double, ptr %68, i64 %.0335414
  %70 = load double, ptr %69, align 8, !tbaa !23
  br i1 %5, label %71, label %99

71:                                               ; preds = %67
  %72 = load ptr, ptr %62, align 8, !tbaa !21
  %73 = getelementptr inbounds double, ptr %72, i64 %.0335414
  %74 = load double, ptr %73, align 8, !tbaa !23
  %75 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %74, ptr noundef %7)
  br i1 %75, label %76, label %85

76:                                               ; preds = %71
  %77 = load ptr, ptr %62, align 8, !tbaa !21
  %78 = getelementptr inbounds double, ptr %77, i64 %.0335414
  %79 = load double, ptr %78, align 8, !tbaa !23
  %80 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %70, double noundef %79)
  br i1 %80, label %81, label %85

81:                                               ; preds = %76
  %82 = load ptr, ptr %62, align 8, !tbaa !21
  %83 = getelementptr inbounds double, ptr %82, i64 %.0335414
  %84 = load double, ptr %83, align 8, !tbaa !23
  br label %85

85:                                               ; preds = %81, %76, %71
  %.2325.ph = phi double [ %70, %71 ], [ %70, %76 ], [ %84, %81 ]
  %86 = load ptr, ptr %63, align 8, !tbaa !21
  %87 = getelementptr inbounds double, ptr %86, i64 %.0335414
  %88 = load double, ptr %87, align 8, !tbaa !23
  %89 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %88, ptr noundef %7)
  br i1 %89, label %90, label %99

90:                                               ; preds = %85
  %91 = load ptr, ptr %63, align 8, !tbaa !21
  %92 = getelementptr inbounds double, ptr %91, i64 %.0335414
  %93 = load double, ptr %92, align 8, !tbaa !23
  %94 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %.2325.ph, double noundef %93)
  br i1 %94, label %95, label %99

95:                                               ; preds = %90
  %96 = load ptr, ptr %63, align 8, !tbaa !21
  %97 = getelementptr inbounds double, ptr %96, i64 %.0335414
  %98 = load double, ptr %97, align 8, !tbaa !23
  br label %99

99:                                               ; preds = %67, %95, %90, %85
  %.3 = phi double [ %98, %95 ], [ %.2325.ph, %90 ], [ %.2325.ph, %85 ], [ %70, %67 ]
  %100 = load ptr, ptr %64, align 8, !tbaa !21
  %101 = getelementptr inbounds double, ptr %100, i64 %.0335414
  store double %.3, ptr %101, align 8, !tbaa !23
  %102 = load ptr, ptr %65, align 8, !tbaa !21
  %103 = getelementptr inbounds double, ptr %102, i64 %.0335414
  store double %.3, ptr %103, align 8, !tbaa !23
  %104 = load ptr, ptr %66, align 8, !tbaa !21
  %105 = getelementptr inbounds double, ptr %104, i64 %.0335414
  store double %.3, ptr %105, align 8, !tbaa !23
  %106 = add nuw nsw i64 %.0335414, 1
  %exitcond436.not = icmp eq i64 %106, %33
  br i1 %exitcond436.not, label %._crit_edge417, label %67, !llvm.loop !28

107:                                              ; preds = %31
  %108 = getelementptr inbounds i8, ptr %0, i64 2096
  store i8 0, ptr %108, align 8, !tbaa !26
  %.not.not357399 = icmp sgt i64 %.0341, 0
  br i1 %.not.not357399, label %.lr.ph402, label %.loopexit368

.lr.ph402:                                        ; preds = %107
  %109 = getelementptr inbounds i8, ptr %0, i64 2224
  %110 = getelementptr inbounds i8, ptr %0, i64 2696
  %.not360.not393 = icmp sgt i64 %.0343, 0
  %111 = getelementptr inbounds i8, ptr %0, i64 2304
  %112 = getelementptr inbounds i8, ptr %0, i64 3160
  %113 = getelementptr inbounds i8, ptr %0, i64 744
  br i1 %.not360.not393, label %.lr.ph396.us, label %.lr.ph402.split.preheader

.lr.ph402.split.preheader:                        ; preds = %.lr.ph402
  %114 = add nsw i64 %.0341, -1
  %xtraiter466 = and i64 %.0341, 3
  %115 = icmp ult i64 %114, 3
  br i1 %115, label %.loopexit368.loopexit442.unr-lcssa, label %.lr.ph402.split.preheader.new

.lr.ph402.split.preheader.new:                    ; preds = %.lr.ph402.split.preheader
  %unroll_iter469 = and i64 %.0341, 9223372036854775804
  br label %.lr.ph402.split

.lr.ph396.us:                                     ; preds = %.lr.ph402, %._crit_edge397.us
  %.1336400.us = phi i64 [ %141, %._crit_edge397.us ], [ 0, %.lr.ph402 ]
  %116 = load ptr, ptr %109, align 8, !tbaa !21
  %117 = getelementptr inbounds double, ptr %116, i64 %.1336400.us
  %118 = load double, ptr %117, align 8, !tbaa !23
  %119 = load ptr, ptr %110, align 8, !tbaa !21
  %120 = getelementptr inbounds double, ptr %119, i64 %.1336400.us
  store double %118, ptr %120, align 8, !tbaa !23
  br label %121

121:                                              ; preds = %.lr.ph396.us, %121
  %.2332394.us = phi i64 [ 0, %.lr.ph396.us ], [ %140, %121 ]
  %122 = load ptr, ptr %111, align 8, !tbaa !21
  %123 = getelementptr inbounds ptr, ptr %122, i64 %.1336400.us
  %124 = load ptr, ptr %123, align 8, !tbaa !30
  %125 = getelementptr inbounds double, ptr %124, i64 %.2332394.us
  %126 = load double, ptr %125, align 8, !tbaa !23
  %127 = load ptr, ptr %112, align 8, !tbaa !21
  %128 = getelementptr inbounds ptr, ptr %127, i64 %.1336400.us
  %129 = load ptr, ptr %128, align 8, !tbaa !30
  %130 = getelementptr inbounds double, ptr %129, i64 %.2332394.us
  store double %126, ptr %130, align 8, !tbaa !23
  %131 = load ptr, ptr %111, align 8, !tbaa !21
  %132 = getelementptr inbounds ptr, ptr %131, i64 %.1336400.us
  %133 = load ptr, ptr %132, align 8, !tbaa !30
  %134 = getelementptr inbounds double, ptr %133, i64 %.2332394.us
  %135 = load double, ptr %134, align 8, !tbaa !23
  %136 = load ptr, ptr %113, align 8, !tbaa !21
  %137 = getelementptr inbounds ptr, ptr %136, i64 %.1336400.us
  %138 = load ptr, ptr %137, align 8, !tbaa !30
  %139 = getelementptr inbounds double, ptr %138, i64 %.2332394.us
  store double %135, ptr %139, align 8, !tbaa !23
  %140 = add nuw nsw i64 %.2332394.us, 1
  %exitcond432.not = icmp eq i64 %140, %.0343
  br i1 %exitcond432.not, label %._crit_edge397.us, label %121, !llvm.loop !31

._crit_edge397.us:                                ; preds = %121
  %141 = add nuw nsw i64 %.1336400.us, 1
  %exitcond433.not = icmp eq i64 %141, %.0341
  br i1 %exitcond433.not, label %.loopexit368, label %.lr.ph396.us, !llvm.loop !32

.lr.ph402.split:                                  ; preds = %.lr.ph402.split, %.lr.ph402.split.preheader.new
  %.1336400 = phi i64 [ 0, %.lr.ph402.split.preheader.new ], [ %165, %.lr.ph402.split ]
  %niter470 = phi i64 [ 0, %.lr.ph402.split.preheader.new ], [ %niter470.next.3, %.lr.ph402.split ]
  %142 = load ptr, ptr %109, align 8, !tbaa !21
  %143 = getelementptr inbounds double, ptr %142, i64 %.1336400
  %144 = load double, ptr %143, align 8, !tbaa !23
  %145 = load ptr, ptr %110, align 8, !tbaa !21
  %146 = getelementptr inbounds double, ptr %145, i64 %.1336400
  store double %144, ptr %146, align 8, !tbaa !23
  %147 = or disjoint i64 %.1336400, 1
  %148 = load ptr, ptr %109, align 8, !tbaa !21
  %149 = getelementptr inbounds double, ptr %148, i64 %147
  %150 = load double, ptr %149, align 8, !tbaa !23
  %151 = load ptr, ptr %110, align 8, !tbaa !21
  %152 = getelementptr inbounds double, ptr %151, i64 %147
  store double %150, ptr %152, align 8, !tbaa !23
  %153 = or disjoint i64 %.1336400, 2
  %154 = load ptr, ptr %109, align 8, !tbaa !21
  %155 = getelementptr inbounds double, ptr %154, i64 %153
  %156 = load double, ptr %155, align 8, !tbaa !23
  %157 = load ptr, ptr %110, align 8, !tbaa !21
  %158 = getelementptr inbounds double, ptr %157, i64 %153
  store double %156, ptr %158, align 8, !tbaa !23
  %159 = or disjoint i64 %.1336400, 3
  %160 = load ptr, ptr %109, align 8, !tbaa !21
  %161 = getelementptr inbounds double, ptr %160, i64 %159
  %162 = load double, ptr %161, align 8, !tbaa !23
  %163 = load ptr, ptr %110, align 8, !tbaa !21
  %164 = getelementptr inbounds double, ptr %163, i64 %159
  store double %162, ptr %164, align 8, !tbaa !23
  %165 = add nuw nsw i64 %.1336400, 4
  %niter470.next.3 = add i64 %niter470, 4
  %niter470.ncmp.3 = icmp eq i64 %niter470.next.3, %unroll_iter469
  br i1 %niter470.ncmp.3, label %.loopexit368.loopexit442.unr-lcssa, label %.lr.ph402.split, !llvm.loop !32

.loopexit368.loopexit442.unr-lcssa:               ; preds = %.lr.ph402.split, %.lr.ph402.split.preheader
  %.1336400.unr = phi i64 [ 0, %.lr.ph402.split.preheader ], [ %165, %.lr.ph402.split ]
  %lcmp.mod468.not = icmp eq i64 %xtraiter466, 0
  br i1 %lcmp.mod468.not, label %.loopexit368.loopexit442, label %.lr.ph402.split.epil

.lr.ph402.split.epil:                             ; preds = %.loopexit368.loopexit442.unr-lcssa, %.lr.ph402.split.epil
  %.1336400.epil = phi i64 [ %171, %.lr.ph402.split.epil ], [ %.1336400.unr, %.loopexit368.loopexit442.unr-lcssa ]
  %epil.iter467 = phi i64 [ %epil.iter467.next, %.lr.ph402.split.epil ], [ 0, %.loopexit368.loopexit442.unr-lcssa ]
  %166 = load ptr, ptr %109, align 8, !tbaa !21
  %167 = getelementptr inbounds double, ptr %166, i64 %.1336400.epil
  %168 = load double, ptr %167, align 8, !tbaa !23
  %169 = load ptr, ptr %110, align 8, !tbaa !21
  %170 = getelementptr inbounds double, ptr %169, i64 %.1336400.epil
  store double %168, ptr %170, align 8, !tbaa !23
  %171 = add nuw nsw i64 %.1336400.epil, 1
  %epil.iter467.next = add i64 %epil.iter467, 1
  %epil.iter467.cmp.not = icmp eq i64 %epil.iter467.next, %xtraiter466
  br i1 %epil.iter467.cmp.not, label %.loopexit368.loopexit442, label %.lr.ph402.split.epil, !llvm.loop !33

.loopexit368.loopexit442:                         ; preds = %.lr.ph402.split.epil, %.loopexit368.loopexit442.unr-lcssa
  br label %.loopexit368

.loopexit368:                                     ; preds = %._crit_edge397.us, %.loopexit368.loopexit442, %107, %.loopexit
  %.3333 = phi i64 [ %.4334, %.loopexit ], [ %.0330, %107 ], [ 0, %.loopexit368.loopexit442 ], [ %.0343, %._crit_edge397.us ]
  %.1327 = phi i64 [ %555, %.loopexit ], [ 0, %107 ], [ 0, %.loopexit368.loopexit442 ], [ 0, %._crit_edge397.us ]
  %.not = icmp slt i64 %.1327, %.0343
  br i1 %.not, label %172, label %574

172:                                              ; preds = %.loopexit368
  %173 = getelementptr inbounds i8, ptr %0, i64 2632
  %174 = load ptr, ptr %173, align 8, !tbaa !21
  %175 = getelementptr inbounds double, ptr %174, i64 %.1327
  %176 = load double, ptr %175, align 8, !tbaa !23
  %177 = getelementptr inbounds i8, ptr %2, i64 56
  %178 = load ptr, ptr %177, align 8, !tbaa !21
  %179 = getelementptr inbounds double, ptr %178, i64 %.1327
  %180 = load double, ptr %179, align 8, !tbaa !23
  %181 = fneg double %180
  %182 = tail call double @llvm.fmuladd.f64(double %181, double %6, double %176)
  %183 = tail call double @llvm.fmuladd.f64(double %180, double %6, double %176)
  br i1 %5, label %184, label %214

184:                                              ; preds = %172
  %185 = getelementptr inbounds i8, ptr %3, i64 56
  %186 = load ptr, ptr %185, align 8, !tbaa !21
  %187 = getelementptr inbounds double, ptr %186, i64 %.1327
  %188 = load double, ptr %187, align 8, !tbaa !23
  %189 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %188, ptr noundef %7)
  br i1 %189, label %190, label %199

190:                                              ; preds = %184
  %191 = load ptr, ptr %185, align 8, !tbaa !21
  %192 = getelementptr inbounds double, ptr %191, i64 %.1327
  %193 = load double, ptr %192, align 8, !tbaa !23
  %194 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %182, double noundef %193)
  br i1 %194, label %195, label %199

195:                                              ; preds = %190
  %196 = load ptr, ptr %185, align 8, !tbaa !21
  %197 = getelementptr inbounds double, ptr %196, i64 %.1327
  %198 = load double, ptr %197, align 8, !tbaa !23
  br label %199

199:                                              ; preds = %195, %190, %184
  %.1319.ph = phi double [ %182, %184 ], [ %182, %190 ], [ %198, %195 ]
  %200 = getelementptr inbounds i8, ptr %4, i64 56
  %201 = load ptr, ptr %200, align 8, !tbaa !21
  %202 = getelementptr inbounds double, ptr %201, i64 %.1327
  %203 = load double, ptr %202, align 8, !tbaa !23
  %204 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %203, ptr noundef %7)
  br i1 %204, label %205, label %214

205:                                              ; preds = %199
  %206 = load ptr, ptr %200, align 8, !tbaa !21
  %207 = getelementptr inbounds double, ptr %206, i64 %.1327
  %208 = load double, ptr %207, align 8, !tbaa !23
  %209 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %183, double noundef %208)
  br i1 %209, label %210, label %214

210:                                              ; preds = %205
  %211 = load ptr, ptr %200, align 8, !tbaa !21
  %212 = getelementptr inbounds double, ptr %211, i64 %.1327
  %213 = load double, ptr %212, align 8, !tbaa !23
  br label %214

214:                                              ; preds = %172, %210, %205, %199
  %.1319366 = phi double [ %.1319.ph, %210 ], [ %.1319.ph, %205 ], [ %.1319.ph, %199 ], [ %182, %172 ]
  %.1321 = phi double [ %213, %210 ], [ %183, %205 ], [ %183, %199 ], [ %183, %172 ]
  %215 = fsub double %.1321, %.1319366
  %216 = fmul double %215, 5.000000e-01
  %217 = fadd double %.1319366, %216
  %218 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.1319366, double noundef %.1321)
  br i1 %218, label %225, label %219

219:                                              ; preds = %214
  %220 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %217, double noundef %.1319366)
  br i1 %220, label %225, label %221

221:                                              ; preds = %219
  %222 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %217, double noundef %.1321)
  br i1 %222, label %225, label %.preheader

.preheader:                                       ; preds = %221
  %.not358.not404 = icmp sgt i64 %.0343, 0
  br i1 %.not358.not404, label %.lr.ph406, label %._crit_edge407

.lr.ph406:                                        ; preds = %.preheader
  %223 = getelementptr inbounds i8, ptr %0, i64 2160
  %xtraiter472 = and i64 %.0343, 3
  %224 = icmp ult i64 %.0343, 4
  br i1 %224, label %._crit_edge407.loopexit.unr-lcssa, label %.lr.ph406.new

.lr.ph406.new:                                    ; preds = %.lr.ph406
  %unroll_iter475 = and i64 %.0343, 9223372036854775804
  br label %249

225:                                              ; preds = %221, %219, %214
  %.not359.not409 = icmp sgt i64 %.0341, 0
  br i1 %.not359.not409, label %.lr.ph412, label %.loopexit

.lr.ph412:                                        ; preds = %225
  %226 = getelementptr inbounds i8, ptr %0, i64 824
  %xtraiter478 = and i64 %.0341, 3
  %227 = icmp ult i64 %.0341, 4
  br i1 %227, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph412.new

.lr.ph412.new:                                    ; preds = %.lr.ph412
  %unroll_iter481 = and i64 %.0341, 9223372036854775804
  br label %228

228:                                              ; preds = %228, %.lr.ph412.new
  %.2337410 = phi i64 [ 0, %.lr.ph412.new ], [ %248, %228 ]
  %niter482 = phi i64 [ 0, %.lr.ph412.new ], [ %niter482.next.3, %228 ]
  %229 = load ptr, ptr %226, align 8, !tbaa !21
  %230 = getelementptr inbounds ptr, ptr %229, i64 %.2337410
  %231 = load ptr, ptr %230, align 8, !tbaa !30
  %232 = getelementptr inbounds double, ptr %231, i64 %.1327
  store double 0.000000e+00, ptr %232, align 8, !tbaa !23
  %233 = or disjoint i64 %.2337410, 1
  %234 = load ptr, ptr %226, align 8, !tbaa !21
  %235 = getelementptr inbounds ptr, ptr %234, i64 %233
  %236 = load ptr, ptr %235, align 8, !tbaa !30
  %237 = getelementptr inbounds double, ptr %236, i64 %.1327
  store double 0.000000e+00, ptr %237, align 8, !tbaa !23
  %238 = or disjoint i64 %.2337410, 2
  %239 = load ptr, ptr %226, align 8, !tbaa !21
  %240 = getelementptr inbounds ptr, ptr %239, i64 %238
  %241 = load ptr, ptr %240, align 8, !tbaa !30
  %242 = getelementptr inbounds double, ptr %241, i64 %.1327
  store double 0.000000e+00, ptr %242, align 8, !tbaa !23
  %243 = or disjoint i64 %.2337410, 3
  %244 = load ptr, ptr %226, align 8, !tbaa !21
  %245 = getelementptr inbounds ptr, ptr %244, i64 %243
  %246 = load ptr, ptr %245, align 8, !tbaa !30
  %247 = getelementptr inbounds double, ptr %246, i64 %.1327
  store double 0.000000e+00, ptr %247, align 8, !tbaa !23
  %248 = add nuw nsw i64 %.2337410, 4
  %niter482.next.3 = add i64 %niter482, 4
  %niter482.ncmp.3 = icmp eq i64 %niter482.next.3, %unroll_iter481
  br i1 %niter482.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %228, !llvm.loop !35

249:                                              ; preds = %249, %.lr.ph406.new
  %.3338405 = phi i64 [ 0, %.lr.ph406.new ], [ %273, %249 ]
  %niter476 = phi i64 [ 0, %.lr.ph406.new ], [ %niter476.next.3, %249 ]
  %250 = load ptr, ptr %173, align 8, !tbaa !21
  %251 = getelementptr inbounds double, ptr %250, i64 %.3338405
  %252 = load double, ptr %251, align 8, !tbaa !23
  %253 = load ptr, ptr %223, align 8, !tbaa !21
  %254 = getelementptr inbounds double, ptr %253, i64 %.3338405
  store double %252, ptr %254, align 8, !tbaa !23
  %255 = or disjoint i64 %.3338405, 1
  %256 = load ptr, ptr %173, align 8, !tbaa !21
  %257 = getelementptr inbounds double, ptr %256, i64 %255
  %258 = load double, ptr %257, align 8, !tbaa !23
  %259 = load ptr, ptr %223, align 8, !tbaa !21
  %260 = getelementptr inbounds double, ptr %259, i64 %255
  store double %258, ptr %260, align 8, !tbaa !23
  %261 = or disjoint i64 %.3338405, 2
  %262 = load ptr, ptr %173, align 8, !tbaa !21
  %263 = getelementptr inbounds double, ptr %262, i64 %261
  %264 = load double, ptr %263, align 8, !tbaa !23
  %265 = load ptr, ptr %223, align 8, !tbaa !21
  %266 = getelementptr inbounds double, ptr %265, i64 %261
  store double %264, ptr %266, align 8, !tbaa !23
  %267 = or disjoint i64 %.3338405, 3
  %268 = load ptr, ptr %173, align 8, !tbaa !21
  %269 = getelementptr inbounds double, ptr %268, i64 %267
  %270 = load double, ptr %269, align 8, !tbaa !23
  %271 = load ptr, ptr %223, align 8, !tbaa !21
  %272 = getelementptr inbounds double, ptr %271, i64 %267
  store double %270, ptr %272, align 8, !tbaa !23
  %273 = add nuw nsw i64 %.3338405, 4
  %niter476.next.3 = add i64 %niter476, 4
  %niter476.ncmp.3 = icmp eq i64 %niter476.next.3, %unroll_iter475
  br i1 %niter476.ncmp.3, label %._crit_edge407.loopexit.unr-lcssa, label %249, !llvm.loop !36

._crit_edge407.loopexit.unr-lcssa:                ; preds = %249, %.lr.ph406
  %.3338405.unr = phi i64 [ 0, %.lr.ph406 ], [ %273, %249 ]
  %lcmp.mod474.not = icmp eq i64 %xtraiter472, 0
  br i1 %lcmp.mod474.not, label %._crit_edge407, label %.epil.preheader471

.epil.preheader471:                               ; preds = %._crit_edge407.loopexit.unr-lcssa, %.epil.preheader471
  %.3338405.epil = phi i64 [ %279, %.epil.preheader471 ], [ %.3338405.unr, %._crit_edge407.loopexit.unr-lcssa ]
  %epil.iter473 = phi i64 [ %epil.iter473.next, %.epil.preheader471 ], [ 0, %._crit_edge407.loopexit.unr-lcssa ]
  %274 = load ptr, ptr %173, align 8, !tbaa !21
  %275 = getelementptr inbounds double, ptr %274, i64 %.3338405.epil
  %276 = load double, ptr %275, align 8, !tbaa !23
  %277 = load ptr, ptr %223, align 8, !tbaa !21
  %278 = getelementptr inbounds double, ptr %277, i64 %.3338405.epil
  store double %276, ptr %278, align 8, !tbaa !23
  %279 = add nuw nsw i64 %.3338405.epil, 1
  %epil.iter473.next = add i64 %epil.iter473, 1
  %epil.iter473.cmp.not = icmp eq i64 %epil.iter473.next, %xtraiter472
  br i1 %epil.iter473.cmp.not, label %._crit_edge407, label %.epil.preheader471, !llvm.loop !37

._crit_edge407:                                   ; preds = %._crit_edge407.loopexit.unr-lcssa, %.epil.preheader471, %.preheader
  %.3338.lcssa = phi i64 [ 0, %.preheader ], [ %.0343, %.epil.preheader471 ], [ %.0343, %._crit_edge407.loopexit.unr-lcssa ]
  %280 = getelementptr inbounds i8, ptr %0, i64 2160
  %281 = load ptr, ptr %280, align 8, !tbaa !21
  %282 = getelementptr inbounds double, ptr %281, i64 %.1327
  store double %.1319366, ptr %282, align 8, !tbaa !23
  %283 = getelementptr inbounds i8, ptr %0, i64 2096
  br label %._crit_edge417

284:                                              ; preds = %31
  %285 = getelementptr inbounds i8, ptr %0, i64 2096
  %.not.not355384 = icmp sgt i64 %.0341, 0
  br i1 %.not.not355384, label %.lr.ph387, label %.preheader369

.lr.ph387:                                        ; preds = %284
  %286 = getelementptr inbounds i8, ptr %0, i64 2224
  %287 = getelementptr inbounds i8, ptr %0, i64 2760
  %288 = getelementptr inbounds i8, ptr %0, i64 2304
  %289 = getelementptr inbounds i8, ptr %0, i64 2952
  %xtraiter455 = and i64 %.0341, 1
  %290 = icmp eq i64 %.0341, 1
  br i1 %290, label %.preheader369.loopexit.unr-lcssa, label %.lr.ph387.new

.lr.ph387.new:                                    ; preds = %.lr.ph387
  %unroll_iter458 = and i64 %.0341, 9223372036854775806
  br label %306

.preheader369.loopexit.unr-lcssa:                 ; preds = %306, %.lr.ph387
  %.4339385.unr = phi i64 [ 0, %.lr.ph387 ], [ %332, %306 ]
  %lcmp.mod457.not = icmp eq i64 %xtraiter455, 0
  br i1 %lcmp.mod457.not, label %.preheader369, label %.preheader369.loopexit.epilog-lcssa

.preheader369.loopexit.epilog-lcssa:              ; preds = %.preheader369.loopexit.unr-lcssa
  %291 = load ptr, ptr %286, align 8, !tbaa !21
  %292 = getelementptr inbounds double, ptr %291, i64 %.4339385.unr
  %293 = load double, ptr %292, align 8, !tbaa !23
  %294 = load ptr, ptr %287, align 8, !tbaa !21
  %295 = getelementptr inbounds double, ptr %294, i64 %.4339385.unr
  store double %293, ptr %295, align 8, !tbaa !23
  %296 = load ptr, ptr %288, align 8, !tbaa !21
  %297 = getelementptr inbounds ptr, ptr %296, i64 %.4339385.unr
  %298 = load ptr, ptr %297, align 8, !tbaa !30
  %299 = getelementptr inbounds double, ptr %298, i64 %.0326
  %300 = load double, ptr %299, align 8, !tbaa !23
  %301 = load ptr, ptr %289, align 8, !tbaa !21
  %302 = getelementptr inbounds double, ptr %301, i64 %.4339385.unr
  store double %300, ptr %302, align 8, !tbaa !23
  br label %.preheader369

.preheader369:                                    ; preds = %.preheader369.loopexit.epilog-lcssa, %.preheader369.loopexit.unr-lcssa, %284
  %.not.not356388 = icmp sgt i64 %.0343, 0
  br i1 %.not.not356388, label %.lr.ph390, label %._crit_edge391

.lr.ph390:                                        ; preds = %.preheader369
  %303 = getelementptr inbounds i8, ptr %0, i64 2632
  %304 = getelementptr inbounds i8, ptr %0, i64 2160
  %xtraiter461 = and i64 %.0343, 3
  %305 = icmp ult i64 %.0343, 4
  br i1 %305, label %._crit_edge391.loopexit.unr-lcssa, label %.lr.ph390.new

.lr.ph390.new:                                    ; preds = %.lr.ph390
  %unroll_iter464 = and i64 %.0343, 9223372036854775804
  br label %333

306:                                              ; preds = %306, %.lr.ph387.new
  %.4339385 = phi i64 [ 0, %.lr.ph387.new ], [ %332, %306 ]
  %niter459 = phi i64 [ 0, %.lr.ph387.new ], [ %niter459.next.1, %306 ]
  %307 = load ptr, ptr %286, align 8, !tbaa !21
  %308 = getelementptr inbounds double, ptr %307, i64 %.4339385
  %309 = load double, ptr %308, align 8, !tbaa !23
  %310 = load ptr, ptr %287, align 8, !tbaa !21
  %311 = getelementptr inbounds double, ptr %310, i64 %.4339385
  store double %309, ptr %311, align 8, !tbaa !23
  %312 = load ptr, ptr %288, align 8, !tbaa !21
  %313 = getelementptr inbounds ptr, ptr %312, i64 %.4339385
  %314 = load ptr, ptr %313, align 8, !tbaa !30
  %315 = getelementptr inbounds double, ptr %314, i64 %.0326
  %316 = load double, ptr %315, align 8, !tbaa !23
  %317 = load ptr, ptr %289, align 8, !tbaa !21
  %318 = getelementptr inbounds double, ptr %317, i64 %.4339385
  store double %316, ptr %318, align 8, !tbaa !23
  %319 = or disjoint i64 %.4339385, 1
  %320 = load ptr, ptr %286, align 8, !tbaa !21
  %321 = getelementptr inbounds double, ptr %320, i64 %319
  %322 = load double, ptr %321, align 8, !tbaa !23
  %323 = load ptr, ptr %287, align 8, !tbaa !21
  %324 = getelementptr inbounds double, ptr %323, i64 %319
  store double %322, ptr %324, align 8, !tbaa !23
  %325 = load ptr, ptr %288, align 8, !tbaa !21
  %326 = getelementptr inbounds ptr, ptr %325, i64 %319
  %327 = load ptr, ptr %326, align 8, !tbaa !30
  %328 = getelementptr inbounds double, ptr %327, i64 %.0326
  %329 = load double, ptr %328, align 8, !tbaa !23
  %330 = load ptr, ptr %289, align 8, !tbaa !21
  %331 = getelementptr inbounds double, ptr %330, i64 %319
  store double %329, ptr %331, align 8, !tbaa !23
  %332 = add nuw nsw i64 %.4339385, 2
  %niter459.next.1 = add i64 %niter459, 2
  %niter459.ncmp.1 = icmp eq i64 %niter459.next.1, %unroll_iter458
  br i1 %niter459.ncmp.1, label %.preheader369.loopexit.unr-lcssa, label %306, !llvm.loop !38

333:                                              ; preds = %333, %.lr.ph390.new
  %.5340389 = phi i64 [ 0, %.lr.ph390.new ], [ %357, %333 ]
  %niter465 = phi i64 [ 0, %.lr.ph390.new ], [ %niter465.next.3, %333 ]
  %334 = load ptr, ptr %303, align 8, !tbaa !21
  %335 = getelementptr inbounds double, ptr %334, i64 %.5340389
  %336 = load double, ptr %335, align 8, !tbaa !23
  %337 = load ptr, ptr %304, align 8, !tbaa !21
  %338 = getelementptr inbounds double, ptr %337, i64 %.5340389
  store double %336, ptr %338, align 8, !tbaa !23
  %339 = or disjoint i64 %.5340389, 1
  %340 = load ptr, ptr %303, align 8, !tbaa !21
  %341 = getelementptr inbounds double, ptr %340, i64 %339
  %342 = load double, ptr %341, align 8, !tbaa !23
  %343 = load ptr, ptr %304, align 8, !tbaa !21
  %344 = getelementptr inbounds double, ptr %343, i64 %339
  store double %342, ptr %344, align 8, !tbaa !23
  %345 = or disjoint i64 %.5340389, 2
  %346 = load ptr, ptr %303, align 8, !tbaa !21
  %347 = getelementptr inbounds double, ptr %346, i64 %345
  %348 = load double, ptr %347, align 8, !tbaa !23
  %349 = load ptr, ptr %304, align 8, !tbaa !21
  %350 = getelementptr inbounds double, ptr %349, i64 %345
  store double %348, ptr %350, align 8, !tbaa !23
  %351 = or disjoint i64 %.5340389, 3
  %352 = load ptr, ptr %303, align 8, !tbaa !21
  %353 = getelementptr inbounds double, ptr %352, i64 %351
  %354 = load double, ptr %353, align 8, !tbaa !23
  %355 = load ptr, ptr %304, align 8, !tbaa !21
  %356 = getelementptr inbounds double, ptr %355, i64 %351
  store double %354, ptr %356, align 8, !tbaa !23
  %357 = add nuw nsw i64 %.5340389, 4
  %niter465.next.3 = add i64 %niter465, 4
  %niter465.ncmp.3 = icmp eq i64 %niter465.next.3, %unroll_iter464
  br i1 %niter465.ncmp.3, label %._crit_edge391.loopexit.unr-lcssa, label %333, !llvm.loop !39

._crit_edge391.loopexit.unr-lcssa:                ; preds = %333, %.lr.ph390
  %.5340389.unr = phi i64 [ 0, %.lr.ph390 ], [ %357, %333 ]
  %lcmp.mod463.not = icmp eq i64 %xtraiter461, 0
  br i1 %lcmp.mod463.not, label %._crit_edge391, label %.epil.preheader460

.epil.preheader460:                               ; preds = %._crit_edge391.loopexit.unr-lcssa, %.epil.preheader460
  %.5340389.epil = phi i64 [ %363, %.epil.preheader460 ], [ %.5340389.unr, %._crit_edge391.loopexit.unr-lcssa ]
  %epil.iter462 = phi i64 [ %epil.iter462.next, %.epil.preheader460 ], [ 0, %._crit_edge391.loopexit.unr-lcssa ]
  %358 = load ptr, ptr %303, align 8, !tbaa !21
  %359 = getelementptr inbounds double, ptr %358, i64 %.5340389.epil
  %360 = load double, ptr %359, align 8, !tbaa !23
  %361 = load ptr, ptr %304, align 8, !tbaa !21
  %362 = getelementptr inbounds double, ptr %361, i64 %.5340389.epil
  store double %360, ptr %362, align 8, !tbaa !23
  %363 = add nuw nsw i64 %.5340389.epil, 1
  %epil.iter462.next = add i64 %epil.iter462, 1
  %epil.iter462.cmp.not = icmp eq i64 %epil.iter462.next, %xtraiter461
  br i1 %epil.iter462.cmp.not, label %._crit_edge391, label %.epil.preheader460, !llvm.loop !40

._crit_edge391:                                   ; preds = %._crit_edge391.loopexit.unr-lcssa, %.epil.preheader460, %.preheader369
  %.5340.lcssa = phi i64 [ 0, %.preheader369 ], [ %.0343, %.epil.preheader460 ], [ %.0343, %._crit_edge391.loopexit.unr-lcssa ]
  %364 = getelementptr inbounds i8, ptr %0, i64 2160
  %365 = load ptr, ptr %364, align 8, !tbaa !21
  %366 = getelementptr inbounds double, ptr %365, i64 %.0326
  store double %.0, ptr %366, align 8, !tbaa !23
  br label %._crit_edge417

367:                                              ; preds = %31
  %368 = getelementptr inbounds i8, ptr %0, i64 2096
  %.not.not353378 = icmp sgt i64 %.0341, 0
  br i1 %.not.not353378, label %.lr.ph380, label %.preheader370

.lr.ph380:                                        ; preds = %367
  %369 = getelementptr inbounds i8, ptr %0, i64 2224
  %370 = getelementptr inbounds i8, ptr %0, i64 2824
  %371 = getelementptr inbounds i8, ptr %0, i64 2304
  %372 = getelementptr inbounds i8, ptr %0, i64 3016
  %xtraiter445 = and i64 %.0341, 1
  %373 = icmp eq i64 %.0341, 1
  br i1 %373, label %.preheader370.loopexit.unr-lcssa, label %.lr.ph380.new

.lr.ph380.new:                                    ; preds = %.lr.ph380
  %unroll_iter447 = and i64 %.0341, 9223372036854775806
  br label %389

.preheader370.loopexit.unr-lcssa:                 ; preds = %389, %.lr.ph380
  %.6379.unr = phi i64 [ 0, %.lr.ph380 ], [ %415, %389 ]
  %lcmp.mod446.not = icmp eq i64 %xtraiter445, 0
  br i1 %lcmp.mod446.not, label %.preheader370, label %.preheader370.loopexit.epilog-lcssa

.preheader370.loopexit.epilog-lcssa:              ; preds = %.preheader370.loopexit.unr-lcssa
  %374 = load ptr, ptr %369, align 8, !tbaa !21
  %375 = getelementptr inbounds double, ptr %374, i64 %.6379.unr
  %376 = load double, ptr %375, align 8, !tbaa !23
  %377 = load ptr, ptr %370, align 8, !tbaa !21
  %378 = getelementptr inbounds double, ptr %377, i64 %.6379.unr
  store double %376, ptr %378, align 8, !tbaa !23
  %379 = load ptr, ptr %371, align 8, !tbaa !21
  %380 = getelementptr inbounds ptr, ptr %379, i64 %.6379.unr
  %381 = load ptr, ptr %380, align 8, !tbaa !30
  %382 = getelementptr inbounds double, ptr %381, i64 %.0326
  %383 = load double, ptr %382, align 8, !tbaa !23
  %384 = load ptr, ptr %372, align 8, !tbaa !21
  %385 = getelementptr inbounds double, ptr %384, i64 %.6379.unr
  store double %383, ptr %385, align 8, !tbaa !23
  br label %.preheader370

.preheader370:                                    ; preds = %.preheader370.loopexit.epilog-lcssa, %.preheader370.loopexit.unr-lcssa, %367
  %.not.not354381 = icmp sgt i64 %.0343, 0
  br i1 %.not.not354381, label %.lr.ph383, label %._crit_edge

.lr.ph383:                                        ; preds = %.preheader370
  %386 = getelementptr inbounds i8, ptr %0, i64 2632
  %387 = getelementptr inbounds i8, ptr %0, i64 2160
  %xtraiter450 = and i64 %.0343, 3
  %388 = icmp ult i64 %.0343, 4
  br i1 %388, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph383.new

.lr.ph383.new:                                    ; preds = %.lr.ph383
  %unroll_iter452 = and i64 %.0343, 9223372036854775804
  br label %416

389:                                              ; preds = %389, %.lr.ph380.new
  %.6379 = phi i64 [ 0, %.lr.ph380.new ], [ %415, %389 ]
  %niter448 = phi i64 [ 0, %.lr.ph380.new ], [ %niter448.next.1, %389 ]
  %390 = load ptr, ptr %369, align 8, !tbaa !21
  %391 = getelementptr inbounds double, ptr %390, i64 %.6379
  %392 = load double, ptr %391, align 8, !tbaa !23
  %393 = load ptr, ptr %370, align 8, !tbaa !21
  %394 = getelementptr inbounds double, ptr %393, i64 %.6379
  store double %392, ptr %394, align 8, !tbaa !23
  %395 = load ptr, ptr %371, align 8, !tbaa !21
  %396 = getelementptr inbounds ptr, ptr %395, i64 %.6379
  %397 = load ptr, ptr %396, align 8, !tbaa !30
  %398 = getelementptr inbounds double, ptr %397, i64 %.0326
  %399 = load double, ptr %398, align 8, !tbaa !23
  %400 = load ptr, ptr %372, align 8, !tbaa !21
  %401 = getelementptr inbounds double, ptr %400, i64 %.6379
  store double %399, ptr %401, align 8, !tbaa !23
  %402 = or disjoint i64 %.6379, 1
  %403 = load ptr, ptr %369, align 8, !tbaa !21
  %404 = getelementptr inbounds double, ptr %403, i64 %402
  %405 = load double, ptr %404, align 8, !tbaa !23
  %406 = load ptr, ptr %370, align 8, !tbaa !21
  %407 = getelementptr inbounds double, ptr %406, i64 %402
  store double %405, ptr %407, align 8, !tbaa !23
  %408 = load ptr, ptr %371, align 8, !tbaa !21
  %409 = getelementptr inbounds ptr, ptr %408, i64 %402
  %410 = load ptr, ptr %409, align 8, !tbaa !30
  %411 = getelementptr inbounds double, ptr %410, i64 %.0326
  %412 = load double, ptr %411, align 8, !tbaa !23
  %413 = load ptr, ptr %372, align 8, !tbaa !21
  %414 = getelementptr inbounds double, ptr %413, i64 %402
  store double %412, ptr %414, align 8, !tbaa !23
  %415 = add nuw nsw i64 %.6379, 2
  %niter448.next.1 = add i64 %niter448, 2
  %niter448.ncmp.1 = icmp eq i64 %niter448.next.1, %unroll_iter447
  br i1 %niter448.ncmp.1, label %.preheader370.loopexit.unr-lcssa, label %389, !llvm.loop !41

416:                                              ; preds = %416, %.lr.ph383.new
  %.7382 = phi i64 [ 0, %.lr.ph383.new ], [ %440, %416 ]
  %niter453 = phi i64 [ 0, %.lr.ph383.new ], [ %niter453.next.3, %416 ]
  %417 = load ptr, ptr %386, align 8, !tbaa !21
  %418 = getelementptr inbounds double, ptr %417, i64 %.7382
  %419 = load double, ptr %418, align 8, !tbaa !23
  %420 = load ptr, ptr %387, align 8, !tbaa !21
  %421 = getelementptr inbounds double, ptr %420, i64 %.7382
  store double %419, ptr %421, align 8, !tbaa !23
  %422 = or disjoint i64 %.7382, 1
  %423 = load ptr, ptr %386, align 8, !tbaa !21
  %424 = getelementptr inbounds double, ptr %423, i64 %422
  %425 = load double, ptr %424, align 8, !tbaa !23
  %426 = load ptr, ptr %387, align 8, !tbaa !21
  %427 = getelementptr inbounds double, ptr %426, i64 %422
  store double %425, ptr %427, align 8, !tbaa !23
  %428 = or disjoint i64 %.7382, 2
  %429 = load ptr, ptr %386, align 8, !tbaa !21
  %430 = getelementptr inbounds double, ptr %429, i64 %428
  %431 = load double, ptr %430, align 8, !tbaa !23
  %432 = load ptr, ptr %387, align 8, !tbaa !21
  %433 = getelementptr inbounds double, ptr %432, i64 %428
  store double %431, ptr %433, align 8, !tbaa !23
  %434 = or disjoint i64 %.7382, 3
  %435 = load ptr, ptr %386, align 8, !tbaa !21
  %436 = getelementptr inbounds double, ptr %435, i64 %434
  %437 = load double, ptr %436, align 8, !tbaa !23
  %438 = load ptr, ptr %387, align 8, !tbaa !21
  %439 = getelementptr inbounds double, ptr %438, i64 %434
  store double %437, ptr %439, align 8, !tbaa !23
  %440 = add nuw nsw i64 %.7382, 4
  %niter453.next.3 = add i64 %niter453, 4
  %niter453.ncmp.3 = icmp eq i64 %niter453.next.3, %unroll_iter452
  br i1 %niter453.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %416, !llvm.loop !42

._crit_edge.loopexit.unr-lcssa:                   ; preds = %416, %.lr.ph383
  %.7382.unr = phi i64 [ 0, %.lr.ph383 ], [ %440, %416 ]
  %lcmp.mod451.not = icmp eq i64 %xtraiter450, 0
  br i1 %lcmp.mod451.not, label %._crit_edge, label %.epil.preheader449

.epil.preheader449:                               ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader449
  %.7382.epil = phi i64 [ %446, %.epil.preheader449 ], [ %.7382.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader449 ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %441 = load ptr, ptr %386, align 8, !tbaa !21
  %442 = getelementptr inbounds double, ptr %441, i64 %.7382.epil
  %443 = load double, ptr %442, align 8, !tbaa !23
  %444 = load ptr, ptr %387, align 8, !tbaa !21
  %445 = getelementptr inbounds double, ptr %444, i64 %.7382.epil
  store double %443, ptr %445, align 8, !tbaa !23
  %446 = add nuw nsw i64 %.7382.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter450
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.epil.preheader449, !llvm.loop !43

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader449, %.preheader370
  %.7.lcssa = phi i64 [ 0, %.preheader370 ], [ %.0343, %.epil.preheader449 ], [ %.0343, %._crit_edge.loopexit.unr-lcssa ]
  %447 = getelementptr inbounds i8, ptr %0, i64 2160
  %448 = load ptr, ptr %447, align 8, !tbaa !21
  %449 = getelementptr inbounds double, ptr %448, i64 %.0326
  store double %.0320, ptr %449, align 8, !tbaa !23
  br label %._crit_edge417

450:                                              ; preds = %31
  %451 = getelementptr inbounds i8, ptr %0, i64 2096
  store i8 0, ptr %451, align 8, !tbaa !26
  %.not.not351373 = icmp sgt i64 %.0341, 0
  br i1 %.not.not351373, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %450
  %452 = getelementptr inbounds i8, ptr %0, i64 2224
  %453 = getelementptr inbounds i8, ptr %0, i64 2888
  %454 = getelementptr inbounds i8, ptr %0, i64 2304
  %455 = getelementptr inbounds i8, ptr %0, i64 3080
  %xtraiter = and i64 %.0341, 1
  %456 = icmp eq i64 %.0341, 1
  br i1 %456, label %.preheader371.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %.0341, 9223372036854775806
  br label %481

.preheader371.unr-lcssa:                          ; preds = %481, %.lr.ph
  %.8374.unr = phi i64 [ 0, %.lr.ph ], [ %507, %481 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader371, label %.preheader371.epilog-lcssa

.preheader371.epilog-lcssa:                       ; preds = %.preheader371.unr-lcssa
  %457 = load ptr, ptr %452, align 8, !tbaa !21
  %458 = getelementptr inbounds double, ptr %457, i64 %.8374.unr
  %459 = load double, ptr %458, align 8, !tbaa !23
  %460 = load ptr, ptr %453, align 8, !tbaa !21
  %461 = getelementptr inbounds double, ptr %460, i64 %.8374.unr
  store double %459, ptr %461, align 8, !tbaa !23
  %462 = load ptr, ptr %454, align 8, !tbaa !21
  %463 = getelementptr inbounds ptr, ptr %462, i64 %.8374.unr
  %464 = load ptr, ptr %463, align 8, !tbaa !30
  %465 = getelementptr inbounds double, ptr %464, i64 %.0326
  %466 = load double, ptr %465, align 8, !tbaa !23
  %467 = load ptr, ptr %455, align 8, !tbaa !21
  %468 = getelementptr inbounds double, ptr %467, i64 %.8374.unr
  store double %466, ptr %468, align 8, !tbaa !23
  br label %.preheader371

.preheader371:                                    ; preds = %.preheader371.unr-lcssa, %.preheader371.epilog-lcssa
  br i1 %.not.not351373, label %.lr.ph377, label %.loopexit

.lr.ph377:                                        ; preds = %.preheader371
  %469 = getelementptr inbounds i8, ptr %0, i64 2888
  %470 = getelementptr inbounds i8, ptr %0, i64 2760
  %471 = fsub double %.0320, %.0318
  %472 = getelementptr inbounds i8, ptr %0, i64 824
  %473 = getelementptr inbounds i8, ptr %0, i64 2952
  %474 = getelementptr inbounds i8, ptr %2, i64 56
  %475 = getelementptr inbounds i8, ptr %0, i64 3080
  %476 = getelementptr inbounds i8, ptr %0, i64 2824
  %477 = getelementptr inbounds i8, ptr %0, i64 3016
  %478 = getelementptr inbounds i8, ptr %0, i64 584
  %479 = getelementptr inbounds i8, ptr %0, i64 592
  %480 = getelementptr inbounds i8, ptr %0, i64 600
  br label %508

481:                                              ; preds = %481, %.lr.ph.new
  %.8374 = phi i64 [ 0, %.lr.ph.new ], [ %507, %481 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %481 ]
  %482 = load ptr, ptr %452, align 8, !tbaa !21
  %483 = getelementptr inbounds double, ptr %482, i64 %.8374
  %484 = load double, ptr %483, align 8, !tbaa !23
  %485 = load ptr, ptr %453, align 8, !tbaa !21
  %486 = getelementptr inbounds double, ptr %485, i64 %.8374
  store double %484, ptr %486, align 8, !tbaa !23
  %487 = load ptr, ptr %454, align 8, !tbaa !21
  %488 = getelementptr inbounds ptr, ptr %487, i64 %.8374
  %489 = load ptr, ptr %488, align 8, !tbaa !30
  %490 = getelementptr inbounds double, ptr %489, i64 %.0326
  %491 = load double, ptr %490, align 8, !tbaa !23
  %492 = load ptr, ptr %455, align 8, !tbaa !21
  %493 = getelementptr inbounds double, ptr %492, i64 %.8374
  store double %491, ptr %493, align 8, !tbaa !23
  %494 = or disjoint i64 %.8374, 1
  %495 = load ptr, ptr %452, align 8, !tbaa !21
  %496 = getelementptr inbounds double, ptr %495, i64 %494
  %497 = load double, ptr %496, align 8, !tbaa !23
  %498 = load ptr, ptr %453, align 8, !tbaa !21
  %499 = getelementptr inbounds double, ptr %498, i64 %494
  store double %497, ptr %499, align 8, !tbaa !23
  %500 = load ptr, ptr %454, align 8, !tbaa !21
  %501 = getelementptr inbounds ptr, ptr %500, i64 %494
  %502 = load ptr, ptr %501, align 8, !tbaa !30
  %503 = getelementptr inbounds double, ptr %502, i64 %.0326
  %504 = load double, ptr %503, align 8, !tbaa !23
  %505 = load ptr, ptr %455, align 8, !tbaa !21
  %506 = getelementptr inbounds double, ptr %505, i64 %494
  store double %504, ptr %506, align 8, !tbaa !23
  %507 = add nuw nsw i64 %.8374, 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 %.preheader371.unr-lcssa, label %481, !llvm.loop !44

508:                                              ; preds = %.lr.ph377, %548
  %.9376 = phi i64 [ 0, %.lr.ph377 ], [ %549, %548 ]
  %509 = load ptr, ptr %469, align 8, !tbaa !21
  %510 = getelementptr inbounds double, ptr %509, i64 %.9376
  %511 = load double, ptr %510, align 8, !tbaa !23
  %512 = load ptr, ptr %470, align 8, !tbaa !21
  %513 = getelementptr inbounds double, ptr %512, i64 %.9376
  %514 = load double, ptr %513, align 8, !tbaa !23
  %515 = fsub double %511, %514
  %516 = fdiv double %515, %471
  %517 = load ptr, ptr %472, align 8, !tbaa !21
  %518 = getelementptr inbounds ptr, ptr %517, i64 %.9376
  %519 = load ptr, ptr %518, align 8, !tbaa !30
  %520 = getelementptr inbounds double, ptr %519, i64 %.0326
  store double %516, ptr %520, align 8, !tbaa !23
  %521 = load ptr, ptr %470, align 8, !tbaa !21
  %522 = getelementptr inbounds double, ptr %521, i64 %.9376
  %523 = load double, ptr %522, align 8, !tbaa !23
  %524 = load ptr, ptr %473, align 8, !tbaa !21
  %525 = getelementptr inbounds double, ptr %524, i64 %.9376
  %526 = load double, ptr %525, align 8, !tbaa !23
  %527 = load ptr, ptr %474, align 8, !tbaa !21
  %528 = getelementptr inbounds double, ptr %527, i64 %.0326
  %529 = load double, ptr %528, align 8, !tbaa !23
  %530 = fmul double %526, %529
  %531 = load ptr, ptr %469, align 8, !tbaa !21
  %532 = getelementptr inbounds double, ptr %531, i64 %.9376
  %533 = load double, ptr %532, align 8, !tbaa !23
  %534 = load ptr, ptr %475, align 8, !tbaa !21
  %535 = getelementptr inbounds double, ptr %534, i64 %.9376
  %536 = load double, ptr %535, align 8, !tbaa !23
  %537 = fmul double %529, %536
  %538 = load ptr, ptr %476, align 8, !tbaa !21
  %539 = getelementptr inbounds double, ptr %538, i64 %.9376
  %540 = load double, ptr %539, align 8, !tbaa !23
  %541 = load ptr, ptr %477, align 8, !tbaa !21
  %542 = getelementptr inbounds double, ptr %541, i64 %.9376
  %543 = load double, ptr %542, align 8, !tbaa !23
  %544 = fmul double %529, %543
  %545 = fdiv double %471, %529
  %546 = tail call noundef zeroext i1 @_ZN11alglib_impl15derivativecheckEdddddddPNS_8ae_stateE(double noundef %523, double noundef %530, double noundef %533, double noundef %537, double noundef %540, double noundef %544, double noundef %545, ptr noundef %7)
  br i1 %546, label %548, label %547

547:                                              ; preds = %508
  store i8 1, ptr %478, align 8, !tbaa !45
  store i64 %.9376, ptr %479, align 8, !tbaa !46
  store i64 %.0326, ptr %480, align 8, !tbaa !47
  br label %548

548:                                              ; preds = %508, %547
  %549 = add nuw nsw i64 %.9376, 1
  %exitcond426.not = icmp eq i64 %549, %.0341
  br i1 %exitcond426.not, label %.loopexit, label %508, !llvm.loop !48

.loopexit.loopexit.unr-lcssa:                     ; preds = %228, %.lr.ph412
  %.2337410.unr = phi i64 [ 0, %.lr.ph412 ], [ %248, %228 ]
  %lcmp.mod480.not = icmp eq i64 %xtraiter478, 0
  br i1 %lcmp.mod480.not, label %.loopexit, label %.epil.preheader477

.epil.preheader477:                               ; preds = %.loopexit.loopexit.unr-lcssa, %.epil.preheader477
  %.2337410.epil = phi i64 [ %554, %.epil.preheader477 ], [ %.2337410.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter479 = phi i64 [ %epil.iter479.next, %.epil.preheader477 ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %550 = load ptr, ptr %226, align 8, !tbaa !21
  %551 = getelementptr inbounds ptr, ptr %550, i64 %.2337410.epil
  %552 = load ptr, ptr %551, align 8, !tbaa !30
  %553 = getelementptr inbounds double, ptr %552, i64 %.1327
  store double 0.000000e+00, ptr %553, align 8, !tbaa !23
  %554 = add nuw nsw i64 %.2337410.epil, 1
  %epil.iter479.next = add i64 %epil.iter479, 1
  %epil.iter479.cmp.not = icmp eq i64 %epil.iter479.next, %xtraiter478
  br i1 %epil.iter479.cmp.not, label %.loopexit, label %.epil.preheader477, !llvm.loop !49

.loopexit:                                        ; preds = %548, %.loopexit.loopexit.unr-lcssa, %.epil.preheader477, %450, %.preheader371, %225
  %.4334 = phi i64 [ %.3333, %225 ], [ %.0330, %.preheader371 ], [ %.0330, %450 ], [ %.3333, %.epil.preheader477 ], [ %.3333, %.loopexit.loopexit.unr-lcssa ], [ %.0330, %548 ]
  %.2328 = phi i64 [ %.1327, %225 ], [ %.0326, %.preheader371 ], [ %.0326, %450 ], [ %.1327, %.epil.preheader477 ], [ %.1327, %.loopexit.loopexit.unr-lcssa ], [ %.0326, %548 ]
  %555 = add nsw i64 %.2328, 1
  br label %.loopexit368

._crit_edge417:                                   ; preds = %99, %._crit_edge, %._crit_edge391, %._crit_edge407
  %.sink439 = phi ptr [ %368, %._crit_edge ], [ %285, %._crit_edge391 ], [ %283, %._crit_edge407 ], [ %36, %99 ]
  %.sink = phi i32 [ 3, %._crit_edge ], [ 2, %._crit_edge391 ], [ 1, %._crit_edge407 ], [ 0, %99 ]
  %.1344 = phi i64 [ %.0343, %._crit_edge ], [ %.0343, %._crit_edge391 ], [ %.0343, %._crit_edge407 ], [ %33, %99 ]
  %.1342 = phi i64 [ %.0341, %._crit_edge ], [ %.0341, %._crit_edge391 ], [ %.0341, %._crit_edge407 ], [ %35, %99 ]
  %.10 = phi i64 [ %.7.lcssa, %._crit_edge ], [ %.5340.lcssa, %._crit_edge391 ], [ %.3338.lcssa, %._crit_edge407 ], [ %33, %99 ]
  %.5 = phi i64 [ %.0330, %._crit_edge ], [ %.0330, %._crit_edge391 ], [ %.3333, %._crit_edge407 ], [ %.0330, %99 ]
  %.3329 = phi i64 [ %.0326, %._crit_edge ], [ %.0326, %._crit_edge391 ], [ %.1327, %._crit_edge407 ], [ %.0326, %99 ]
  %.4 = phi double [ %.0323, %._crit_edge ], [ %.0323, %._crit_edge391 ], [ %176, %._crit_edge407 ], [ %.3, %99 ]
  %.2322 = phi double [ %.0320, %._crit_edge ], [ %.0320, %._crit_edge391 ], [ %.1321, %._crit_edge407 ], [ %.0320, %99 ]
  %.2 = phi double [ %.0318, %._crit_edge ], [ %.0318, %._crit_edge391 ], [ %.1319366, %._crit_edge407 ], [ %.0318, %99 ]
  %.1 = phi double [ %.0, %._crit_edge ], [ %.0, %._crit_edge391 ], [ %217, %._crit_edge407 ], [ %.0, %99 ]
  store i8 1, ptr %.sink439, align 8, !tbaa !26
  store i32 %.sink, ptr %9, align 8, !tbaa !5
  %556 = getelementptr inbounds i8, ptr %0, i64 2376
  %557 = load ptr, ptr %556, align 8, !tbaa !21
  store i64 %.1344, ptr %557, align 8, !tbaa !22
  %558 = load ptr, ptr %556, align 8, !tbaa !21
  %559 = getelementptr inbounds i8, ptr %558, i64 8
  store i64 %.1342, ptr %559, align 8, !tbaa !22
  %560 = load ptr, ptr %556, align 8, !tbaa !21
  %561 = getelementptr inbounds i8, ptr %560, i64 16
  store i64 %.10, ptr %561, align 8, !tbaa !22
  %562 = load ptr, ptr %556, align 8, !tbaa !21
  %563 = getelementptr inbounds i8, ptr %562, i64 24
  store i64 %.5, ptr %563, align 8, !tbaa !22
  %564 = load ptr, ptr %556, align 8, !tbaa !21
  %565 = getelementptr inbounds i8, ptr %564, i64 32
  store i64 %.3329, ptr %565, align 8, !tbaa !22
  %566 = getelementptr inbounds i8, ptr %0, i64 2504
  %567 = load ptr, ptr %566, align 8, !tbaa !21
  store double %.4, ptr %567, align 8, !tbaa !23
  %568 = load ptr, ptr %566, align 8, !tbaa !21
  %569 = getelementptr inbounds i8, ptr %568, i64 8
  store double %.2322, ptr %569, align 8, !tbaa !23
  %570 = load ptr, ptr %566, align 8, !tbaa !21
  %571 = getelementptr inbounds i8, ptr %570, i64 16
  store double %.2, ptr %571, align 8, !tbaa !23
  %572 = load ptr, ptr %566, align 8, !tbaa !21
  %573 = getelementptr inbounds i8, ptr %572, i64 24
  store double %.1, ptr %573, align 8, !tbaa !23
  br label %574

574:                                              ; preds = %.loopexit368, %32, %39, %41, %._crit_edge417
  %.0345 = phi i1 [ true, %._crit_edge417 ], [ false, %41 ], [ false, %39 ], [ false, %32 ], [ false, %.loopexit368 ]
  ret i1 %.0345
}

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !20, i64 2312}
!6 = !{!"_ZTSN11alglib_impl17smoothnessmonitorE", !7, i64 0, !7, i64 8, !10, i64 16, !11, i64 24, !7, i64 88, !11, i64 96, !11, i64 160, !11, i64 224, !14, i64 288, !11, i64 368, !11, i64 432, !7, i64 496, !10, i64 504, !10, i64 505, !15, i64 512, !15, i64 520, !10, i64 528, !16, i64 536, !15, i64 832, !15, i64 840, !17, i64 848, !17, i64 1152, !15, i64 1456, !15, i64 1464, !18, i64 1472, !18, i64 1784, !10, i64 2096, !11, i64 2104, !11, i64 2168, !14, i64 2232, !19, i64 2312, !11, i64 2576, !11, i64 2640, !11, i64 2704, !11, i64 2768, !11, i64 2832, !11, i64 2896, !11, i64 2960, !11, i64 3024, !14, i64 3088, !14, i64 3168, !11, i64 3248, !11, i64 3312, !11, i64 3376, !11, i64 3440, !11, i64 3504, !11, i64 3568, !11, i64 3632, !11, i64 3696, !11, i64 3760, !11, i64 3824, !14, i64 3888}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !10, i64 16, !12, i64 24, !8, i64 56}
!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, !10, i64 32, !12, i64 40, !8, i64 72}
!15 = !{!"double", !8, i64 0}
!16 = !{!"_ZTSN11alglib_impl14optguardreportE", !10, i64 0, !10, i64 1, !7, i64 8, !15, i64 16, !10, i64 24, !10, i64 25, !10, i64 26, !7, i64 32, !15, i64 40, !10, i64 48, !7, i64 56, !7, i64 64, !11, i64 72, !14, i64 136, !14, i64 216}
!17 = !{!"_ZTSN11alglib_impl24optguardnonc1test0reportE", !10, i64 0, !7, i64 8, !11, i64 16, !11, i64 80, !7, i64 144, !11, i64 152, !11, i64 216, !7, i64 280, !7, i64 288, !7, i64 296}
!18 = !{!"_ZTSN11alglib_impl24optguardnonc1test1reportE", !10, i64 0, !7, i64 8, !7, i64 16, !11, i64 24, !11, i64 88, !7, i64 152, !11, i64 160, !11, i64 224, !7, i64 288, !7, i64 296, !7, i64 304}
!19 = !{!"_ZTSN11alglib_impl10rcommstateE", !20, i64 0, !11, i64 8, !11, i64 72, !11, i64 136, !11, i64 200}
!20 = !{!"int", !8, i64 0}
!21 = !{!8, !8, i64 0}
!22 = !{!7, !7, i64 0}
!23 = !{!15, !15, i64 0}
!24 = !{!6, !7, i64 0}
!25 = !{!6, !7, i64 8}
!26 = !{!6, !10, i64 2096}
!27 = !{!6, !10, i64 528}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!13, !13, i64 0}
!31 = distinct !{!31, !29}
!32 = distinct !{!32, !29}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.unroll.disable"}
!35 = distinct !{!35, !29}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !34}
!38 = distinct !{!38, !29}
!39 = distinct !{!39, !29}
!40 = distinct !{!40, !34}
!41 = distinct !{!41, !29}
!42 = distinct !{!42, !29}
!43 = distinct !{!43, !34}
!44 = distinct !{!44, !29}
!45 = !{!6, !10, i64 584}
!46 = !{!6, !7, i64 592}
!47 = !{!6, !7, i64 600}
!48 = distinct !{!48, !29}
!49 = distinct !{!49, !34}


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