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

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

%"struct.alglib_impl::smoothnessmonitor" = type { i64, i64, i8, %"struct.alglib_impl::ae_vector", %"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, i64, i64, double, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::rcommstate", i8, i8, i64, i64, double, double, i8, %"struct.alglib_impl::optguardreport", double, double, %"struct.alglib_impl::optguardnonc0report", %"struct.alglib_impl::optguardnonc0report", 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::optguardnonc0report" = 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, i64, i64 }
%"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, 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, 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 }

@.str.202 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.203 = external hidden unnamed_addr constant [57 x i8], align 1

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

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

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

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

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

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

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

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

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

declare void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef, ptr noundef) #1

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11alglib_impl32smoothnessmonitorprobelagrangianEPNS_17smoothnessmonitorEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1) #3 {
  %3 = alloca i1, align 1
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca i8, align 1
  %16 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %15) #5
  %17 = load ptr, ptr %4, align 8, !tbaa !5
  %18 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %17, i32 0, i32 28
  %19 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %18, i32 0, i32 0
  %20 = load i32, ptr %19, align 8, !tbaa !9
  %21 = icmp sge i32 %20, 0
  br i1 %21, label %22, label %86

22:                                               ; preds = %2
  %23 = load ptr, ptr %4, align 8, !tbaa !5
  %24 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %23, i32 0, i32 28
  %25 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %24, i32 0, i32 1
  %26 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %25, i32 0, i32 4
  %27 = load ptr, ptr %26, align 8, !tbaa !23
  %28 = getelementptr inbounds i64, ptr %27, i64 0
  %29 = load i64, ptr %28, align 8, !tbaa !24
  store i64 %29, ptr %6, align 8, !tbaa !24
  %30 = load ptr, ptr %4, align 8, !tbaa !5
  %31 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %30, i32 0, i32 28
  %32 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %31, i32 0, i32 1
  %33 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %32, i32 0, i32 4
  %34 = load ptr, ptr %33, align 8, !tbaa !23
  %35 = getelementptr inbounds i64, ptr %34, i64 1
  %36 = load i64, ptr %35, align 8, !tbaa !24
  store i64 %36, ptr %7, align 8, !tbaa !24
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  %38 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %37, i32 0, i32 28
  %39 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %38, i32 0, i32 1
  %40 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %39, i32 0, i32 4
  %41 = load ptr, ptr %40, align 8, !tbaa !23
  %42 = getelementptr inbounds i64, ptr %41, i64 2
  %43 = load i64, ptr %42, align 8, !tbaa !24
  store i64 %43, ptr %8, align 8, !tbaa !24
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %44, i32 0, i32 28
  %46 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %45, i32 0, i32 1
  %47 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %48 = load ptr, ptr %47, align 8, !tbaa !23
  %49 = getelementptr inbounds i64, ptr %48, i64 3
  %50 = load i64, ptr %49, align 8, !tbaa !24
  store i64 %50, ptr %9, align 8, !tbaa !24
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %51, i32 0, i32 28
  %53 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %52, i32 0, i32 3
  %54 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %53, i32 0, i32 4
  %55 = load ptr, ptr %54, align 8, !tbaa !23
  %56 = getelementptr inbounds double, ptr %55, i64 0
  %57 = load double, ptr %56, align 8, !tbaa !25
  store double %57, ptr %10, align 8, !tbaa !25
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  %59 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %58, i32 0, i32 28
  %60 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %59, i32 0, i32 3
  %61 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %60, i32 0, i32 4
  %62 = load ptr, ptr %61, align 8, !tbaa !23
  %63 = getelementptr inbounds double, ptr %62, i64 1
  %64 = load double, ptr %63, align 8, !tbaa !25
  store double %64, ptr %11, align 8, !tbaa !25
  %65 = load ptr, ptr %4, align 8, !tbaa !5
  %66 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %65, i32 0, i32 28
  %67 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %66, i32 0, i32 3
  %68 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %67, i32 0, i32 4
  %69 = load ptr, ptr %68, align 8, !tbaa !23
  %70 = getelementptr inbounds double, ptr %69, i64 2
  %71 = load double, ptr %70, align 8, !tbaa !25
  store double %71, ptr %12, align 8, !tbaa !25
  %72 = load ptr, ptr %4, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %72, i32 0, i32 28
  %74 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %73, i32 0, i32 3
  %75 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %74, i32 0, i32 4
  %76 = load ptr, ptr %75, align 8, !tbaa !23
  %77 = getelementptr inbounds double, ptr %76, i64 3
  %78 = load double, ptr %77, align 8, !tbaa !25
  store double %78, ptr %13, align 8, !tbaa !25
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %79, i32 0, i32 28
  %81 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %80, i32 0, i32 3
  %82 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %81, i32 0, i32 4
  %83 = load ptr, ptr %82, align 8, !tbaa !23
  %84 = getelementptr inbounds double, ptr %83, i64 4
  %85 = load double, ptr %84, align 8, !tbaa !25
  store double %85, ptr %14, align 8, !tbaa !25
  br label %87

86:                                               ; preds = %2
  store i64 359, ptr %6, align 8, !tbaa !24
  store i64 -58, ptr %7, align 8, !tbaa !24
  store i64 -919, ptr %8, align 8, !tbaa !24
  store i64 -909, ptr %9, align 8, !tbaa !24
  store double 8.100000e+01, ptr %10, align 8, !tbaa !25
  store double 2.550000e+02, ptr %11, align 8, !tbaa !25
  store double 7.400000e+01, ptr %12, align 8, !tbaa !25
  store double -7.880000e+02, ptr %13, align 8, !tbaa !25
  store double 8.090000e+02, ptr %14, align 8, !tbaa !25
  br label %87

87:                                               ; preds = %86, %22
  %88 = load ptr, ptr %4, align 8, !tbaa !5
  %89 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %88, i32 0, i32 28
  %90 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %89, i32 0, i32 0
  %91 = load i32, ptr %90, align 8, !tbaa !9
  %92 = icmp eq i32 %91, 0
  br i1 %92, label %93, label %94

93:                                               ; preds = %87
  br label %530

94:                                               ; preds = %87
  store i64 0, ptr %6, align 8, !tbaa !24
  br label %95

95:                                               ; preds = %710, %94
  %96 = load i64, ptr %6, align 8, !tbaa !24
  %97 = icmp sgt i64 %96, 40
  br i1 %97, label %98, label %99

98:                                               ; preds = %95
  br label %713

99:                                               ; preds = %95
  %100 = load ptr, ptr %4, align 8, !tbaa !5
  %101 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %100, i32 0, i32 26
  %102 = load ptr, ptr %4, align 8, !tbaa !5
  %103 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %102, i32 0, i32 16
  %104 = load i64, ptr %103, align 8, !tbaa !26
  %105 = add nsw i64 %104, 1
  %106 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %101, i64 noundef %105, ptr noundef %106)
  %107 = load ptr, ptr %4, align 8, !tbaa !5
  %108 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %107, i32 0, i32 27
  %109 = load ptr, ptr %4, align 8, !tbaa !5
  %110 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %109, i32 0, i32 16
  %111 = load i64, ptr %110, align 8, !tbaa !26
  %112 = add nsw i64 %111, 1
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %108, i64 noundef %112, ptr noundef %113)
  %114 = load ptr, ptr %4, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %114, i32 0, i32 24
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %116, i32 0, i32 16
  %118 = load i64, ptr %117, align 8, !tbaa !26
  %119 = add nsw i64 %118, 1
  %120 = load ptr, ptr %4, align 8, !tbaa !5
  %121 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %120, i32 0, i32 1
  %122 = load i64, ptr %121, align 8, !tbaa !27
  %123 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl17rmatrixgrowrowstoEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %115, i64 noundef %119, i64 noundef %122, ptr noundef %123)
  %124 = load ptr, ptr %4, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %124, i32 0, i32 25
  %126 = load ptr, ptr %4, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %126, i32 0, i32 16
  %128 = load i64, ptr %127, align 8, !tbaa !26
  %129 = add nsw i64 %128, 1
  %130 = load ptr, ptr %4, align 8, !tbaa !5
  %131 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %130, i32 0, i32 0
  %132 = load i64, ptr %131, align 8, !tbaa !28
  %133 = load ptr, ptr %4, align 8, !tbaa !5
  %134 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %133, i32 0, i32 1
  %135 = load i64, ptr %134, align 8, !tbaa !27
  %136 = mul nsw i64 %132, %135
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl17rmatrixgrowrowstoEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %125, i64 noundef %129, i64 noundef %136, ptr noundef %137)
  %138 = load i64, ptr %6, align 8, !tbaa !24
  %139 = icmp sle i64 %138, 10
  br i1 %139, label %140, label %148

140:                                              ; preds = %99
  %141 = load i64, ptr %6, align 8, !tbaa !24
  %142 = sitofp i64 %141 to double
  %143 = fdiv double %142, 1.000000e+01
  %144 = load ptr, ptr %4, align 8, !tbaa !5
  %145 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %144, i32 0, i32 15
  %146 = load double, ptr %145, align 8, !tbaa !29
  %147 = fmul double %143, %146
  store double %147, ptr %10, align 8, !tbaa !25
  br label %480

148:                                              ; preds = %99
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  %150 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %149, i32 0, i32 16
  %151 = load i64, ptr %150, align 8, !tbaa !26
  %152 = icmp sge i64 %151, 3
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %152, ptr noundef @.str.202, ptr noundef %153)
  store double 0.000000e+00, ptr %10, align 8, !tbaa !25
  %154 = load i64, ptr %6, align 8, !tbaa !24
  %155 = srem i64 %154, 3
  %156 = icmp eq i64 %155, 0
  br i1 %156, label %157, label %215

157:                                              ; preds = %148
  store i64 -1, ptr %9, align 8, !tbaa !24
  store double 0.000000e+00, ptr %11, align 8, !tbaa !25
  store i64 0, ptr %8, align 8, !tbaa !24
  br label %158

158:                                              ; preds = %194, %157
  %159 = load i64, ptr %8, align 8, !tbaa !24
  %160 = load ptr, ptr %4, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %160, i32 0, i32 16
  %162 = load i64, ptr %161, align 8, !tbaa !26
  %163 = sub nsw i64 %162, 2
  %164 = icmp sle i64 %159, %163
  br i1 %164, label %165, label %197

165:                                              ; preds = %158
  %166 = load ptr, ptr %4, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %166, i32 0, i32 27
  %168 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %167, i32 0, i32 4
  %169 = load ptr, ptr %168, align 8, !tbaa !23
  %170 = load i64, ptr %8, align 8, !tbaa !24
  %171 = add nsw i64 %170, 1
  %172 = getelementptr inbounds double, ptr %169, i64 %171
  %173 = load double, ptr %172, align 8, !tbaa !25
  %174 = load ptr, ptr %4, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %174, i32 0, i32 27
  %176 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %175, i32 0, i32 4
  %177 = load ptr, ptr %176, align 8, !tbaa !23
  %178 = load i64, ptr %8, align 8, !tbaa !24
  %179 = getelementptr inbounds double, ptr %177, i64 %178
  %180 = load double, ptr %179, align 8, !tbaa !25
  %181 = fsub double %173, %180
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %181, ptr noundef %182)
  store double %183, ptr %12, align 8, !tbaa !25
  %184 = load i64, ptr %9, align 8, !tbaa !24
  %185 = icmp slt i64 %184, 0
  br i1 %185, label %190, label %186

186:                                              ; preds = %165
  %187 = load double, ptr %12, align 8, !tbaa !25
  %188 = load double, ptr %11, align 8, !tbaa !25
  %189 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %187, double noundef %188)
  br i1 %189, label %190, label %193

190:                                              ; preds = %186, %165
  %191 = load i64, ptr %8, align 8, !tbaa !24
  store i64 %191, ptr %9, align 8, !tbaa !24
  %192 = load double, ptr %12, align 8, !tbaa !25
  store double %192, ptr %11, align 8, !tbaa !25
  br label %193

193:                                              ; preds = %190, %186
  br label %194

194:                                              ; preds = %193
  %195 = load i64, ptr %8, align 8, !tbaa !24
  %196 = add nsw i64 %195, 1
  store i64 %196, ptr %8, align 8, !tbaa !24
  br label %158, !llvm.loop !30

197:                                              ; preds = %158
  %198 = load ptr, ptr %4, align 8, !tbaa !5
  %199 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %198, i32 0, i32 26
  %200 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %199, i32 0, i32 4
  %201 = load ptr, ptr %200, align 8, !tbaa !23
  %202 = load i64, ptr %9, align 8, !tbaa !24
  %203 = getelementptr inbounds double, ptr %201, i64 %202
  %204 = load double, ptr %203, align 8, !tbaa !25
  %205 = load ptr, ptr %4, align 8, !tbaa !5
  %206 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %205, i32 0, i32 26
  %207 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %206, i32 0, i32 4
  %208 = load ptr, ptr %207, align 8, !tbaa !23
  %209 = load i64, ptr %9, align 8, !tbaa !24
  %210 = add nsw i64 %209, 1
  %211 = getelementptr inbounds double, ptr %208, i64 %210
  %212 = load double, ptr %211, align 8, !tbaa !25
  %213 = fadd double %204, %212
  %214 = fmul double 5.000000e-01, %213
  store double %214, ptr %10, align 8, !tbaa !25
  br label %215

215:                                              ; preds = %197, %148
  %216 = load i64, ptr %6, align 8, !tbaa !24
  %217 = srem i64 %216, 3
  %218 = icmp eq i64 %217, 1
  br i1 %218, label %219, label %393

219:                                              ; preds = %215
  store i64 -1, ptr %9, align 8, !tbaa !24
  store double 0.000000e+00, ptr %11, align 8, !tbaa !25
  store i64 0, ptr %8, align 8, !tbaa !24
  br label %220

220:                                              ; preds = %315, %219
  %221 = load i64, ptr %8, align 8, !tbaa !24
  %222 = load ptr, ptr %4, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %222, i32 0, i32 16
  %224 = load i64, ptr %223, align 8, !tbaa !26
  %225 = sub nsw i64 %224, 3
  %226 = icmp sle i64 %221, %225
  br i1 %226, label %227, label %318

227:                                              ; preds = %220
  %228 = load ptr, ptr %4, align 8, !tbaa !5
  %229 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %228, i32 0, i32 27
  %230 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %229, i32 0, i32 4
  %231 = load ptr, ptr %230, align 8, !tbaa !23
  %232 = load i64, ptr %8, align 8, !tbaa !24
  %233 = add nsw i64 %232, 1
  %234 = getelementptr inbounds double, ptr %231, i64 %233
  %235 = load double, ptr %234, align 8, !tbaa !25
  %236 = load ptr, ptr %4, align 8, !tbaa !5
  %237 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %236, i32 0, i32 27
  %238 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %237, i32 0, i32 4
  %239 = load ptr, ptr %238, align 8, !tbaa !23
  %240 = load i64, ptr %8, align 8, !tbaa !24
  %241 = add nsw i64 %240, 0
  %242 = getelementptr inbounds double, ptr %239, i64 %241
  %243 = load double, ptr %242, align 8, !tbaa !25
  %244 = fsub double %235, %243
  %245 = load ptr, ptr %4, align 8, !tbaa !5
  %246 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %245, i32 0, i32 26
  %247 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %246, i32 0, i32 4
  %248 = load ptr, ptr %247, align 8, !tbaa !23
  %249 = load i64, ptr %8, align 8, !tbaa !24
  %250 = add nsw i64 %249, 1
  %251 = getelementptr inbounds double, ptr %248, i64 %250
  %252 = load double, ptr %251, align 8, !tbaa !25
  %253 = load ptr, ptr %4, align 8, !tbaa !5
  %254 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %253, i32 0, i32 26
  %255 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %254, i32 0, i32 4
  %256 = load ptr, ptr %255, align 8, !tbaa !23
  %257 = load i64, ptr %8, align 8, !tbaa !24
  %258 = add nsw i64 %257, 0
  %259 = getelementptr inbounds double, ptr %256, i64 %258
  %260 = load double, ptr %259, align 8, !tbaa !25
  %261 = fsub double %252, %260
  %262 = fadd double %261, 5.000000e-16
  %263 = fdiv double %244, %262
  store double %263, ptr %13, align 8, !tbaa !25
  %264 = load ptr, ptr %4, align 8, !tbaa !5
  %265 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %264, i32 0, i32 27
  %266 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %265, i32 0, i32 4
  %267 = load ptr, ptr %266, align 8, !tbaa !23
  %268 = load i64, ptr %8, align 8, !tbaa !24
  %269 = add nsw i64 %268, 2
  %270 = getelementptr inbounds double, ptr %267, i64 %269
  %271 = load double, ptr %270, align 8, !tbaa !25
  %272 = load ptr, ptr %4, align 8, !tbaa !5
  %273 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %272, i32 0, i32 27
  %274 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %273, i32 0, i32 4
  %275 = load ptr, ptr %274, align 8, !tbaa !23
  %276 = load i64, ptr %8, align 8, !tbaa !24
  %277 = add nsw i64 %276, 1
  %278 = getelementptr inbounds double, ptr %275, i64 %277
  %279 = load double, ptr %278, align 8, !tbaa !25
  %280 = fsub double %271, %279
  %281 = load ptr, ptr %4, align 8, !tbaa !5
  %282 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %281, i32 0, i32 26
  %283 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %282, i32 0, i32 4
  %284 = load ptr, ptr %283, align 8, !tbaa !23
  %285 = load i64, ptr %8, align 8, !tbaa !24
  %286 = add nsw i64 %285, 2
  %287 = getelementptr inbounds double, ptr %284, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !25
  %289 = load ptr, ptr %4, align 8, !tbaa !5
  %290 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %289, i32 0, i32 26
  %291 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %290, i32 0, i32 4
  %292 = load ptr, ptr %291, align 8, !tbaa !23
  %293 = load i64, ptr %8, align 8, !tbaa !24
  %294 = add nsw i64 %293, 1
  %295 = getelementptr inbounds double, ptr %292, i64 %294
  %296 = load double, ptr %295, align 8, !tbaa !25
  %297 = fsub double %288, %296
  %298 = fadd double %297, 5.000000e-16
  %299 = fdiv double %280, %298
  store double %299, ptr %14, align 8, !tbaa !25
  %300 = load double, ptr %13, align 8, !tbaa !25
  %301 = load double, ptr %14, align 8, !tbaa !25
  %302 = fsub double %300, %301
  %303 = load ptr, ptr %5, align 8, !tbaa !5
  %304 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %302, ptr noundef %303)
  store double %304, ptr %12, align 8, !tbaa !25
  %305 = load i64, ptr %9, align 8, !tbaa !24
  %306 = icmp slt i64 %305, 0
  br i1 %306, label %311, label %307

307:                                              ; preds = %227
  %308 = load double, ptr %12, align 8, !tbaa !25
  %309 = load double, ptr %11, align 8, !tbaa !25
  %310 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %308, double noundef %309)
  br i1 %310, label %311, label %314

311:                                              ; preds = %307, %227
  %312 = load i64, ptr %8, align 8, !tbaa !24
  store i64 %312, ptr %9, align 8, !tbaa !24
  %313 = load double, ptr %12, align 8, !tbaa !25
  store double %313, ptr %11, align 8, !tbaa !25
  br label %314

314:                                              ; preds = %311, %307
  br label %315

315:                                              ; preds = %314
  %316 = load i64, ptr %8, align 8, !tbaa !24
  %317 = add nsw i64 %316, 1
  store i64 %317, ptr %8, align 8, !tbaa !24
  br label %220, !llvm.loop !32

318:                                              ; preds = %220
  %319 = load ptr, ptr %4, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %319, i32 0, i32 26
  %321 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %320, i32 0, i32 4
  %322 = load ptr, ptr %321, align 8, !tbaa !23
  %323 = load i64, ptr %9, align 8, !tbaa !24
  %324 = add nsw i64 %323, 2
  %325 = getelementptr inbounds double, ptr %322, i64 %324
  %326 = load double, ptr %325, align 8, !tbaa !25
  %327 = load ptr, ptr %4, align 8, !tbaa !5
  %328 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %327, i32 0, i32 26
  %329 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %328, i32 0, i32 4
  %330 = load ptr, ptr %329, align 8, !tbaa !23
  %331 = load i64, ptr %9, align 8, !tbaa !24
  %332 = add nsw i64 %331, 1
  %333 = getelementptr inbounds double, ptr %330, i64 %332
  %334 = load double, ptr %333, align 8, !tbaa !25
  %335 = fsub double %326, %334
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %336, i32 0, i32 26
  %338 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %337, i32 0, i32 4
  %339 = load ptr, ptr %338, align 8, !tbaa !23
  %340 = load i64, ptr %9, align 8, !tbaa !24
  %341 = add nsw i64 %340, 1
  %342 = getelementptr inbounds double, ptr %339, i64 %341
  %343 = load double, ptr %342, align 8, !tbaa !25
  %344 = load ptr, ptr %4, align 8, !tbaa !5
  %345 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %344, i32 0, i32 26
  %346 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %345, i32 0, i32 4
  %347 = load ptr, ptr %346, align 8, !tbaa !23
  %348 = load i64, ptr %9, align 8, !tbaa !24
  %349 = add nsw i64 %348, 0
  %350 = getelementptr inbounds double, ptr %347, i64 %349
  %351 = load double, ptr %350, align 8, !tbaa !25
  %352 = fsub double %343, %351
  %353 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %335, double noundef %352)
  br i1 %353, label %354, label %373

354:                                              ; preds = %318
  %355 = load ptr, ptr %4, align 8, !tbaa !5
  %356 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %355, i32 0, i32 26
  %357 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %356, i32 0, i32 4
  %358 = load ptr, ptr %357, align 8, !tbaa !23
  %359 = load i64, ptr %9, align 8, !tbaa !24
  %360 = add nsw i64 %359, 2
  %361 = getelementptr inbounds double, ptr %358, i64 %360
  %362 = load double, ptr %361, align 8, !tbaa !25
  %363 = load ptr, ptr %4, align 8, !tbaa !5
  %364 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %363, i32 0, i32 26
  %365 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %364, i32 0, i32 4
  %366 = load ptr, ptr %365, align 8, !tbaa !23
  %367 = load i64, ptr %9, align 8, !tbaa !24
  %368 = add nsw i64 %367, 1
  %369 = getelementptr inbounds double, ptr %366, i64 %368
  %370 = load double, ptr %369, align 8, !tbaa !25
  %371 = fadd double %362, %370
  %372 = fmul double 5.000000e-01, %371
  store double %372, ptr %10, align 8, !tbaa !25
  br label %392

373:                                              ; preds = %318
  %374 = load ptr, ptr %4, align 8, !tbaa !5
  %375 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %374, i32 0, i32 26
  %376 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %375, i32 0, i32 4
  %377 = load ptr, ptr %376, align 8, !tbaa !23
  %378 = load i64, ptr %9, align 8, !tbaa !24
  %379 = add nsw i64 %378, 1
  %380 = getelementptr inbounds double, ptr %377, i64 %379
  %381 = load double, ptr %380, align 8, !tbaa !25
  %382 = load ptr, ptr %4, align 8, !tbaa !5
  %383 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %382, i32 0, i32 26
  %384 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %383, i32 0, i32 4
  %385 = load ptr, ptr %384, align 8, !tbaa !23
  %386 = load i64, ptr %9, align 8, !tbaa !24
  %387 = add nsw i64 %386, 0
  %388 = getelementptr inbounds double, ptr %385, i64 %387
  %389 = load double, ptr %388, align 8, !tbaa !25
  %390 = fadd double %381, %389
  %391 = fmul double 5.000000e-01, %390
  store double %391, ptr %10, align 8, !tbaa !25
  br label %392

392:                                              ; preds = %373, %354
  br label %393

393:                                              ; preds = %392, %215
  %394 = load i64, ptr %6, align 8, !tbaa !24
  %395 = srem i64 %394, 3
  %396 = icmp eq i64 %395, 2
  br i1 %396, label %397, label %479

397:                                              ; preds = %393
  store i64 -1, ptr %9, align 8, !tbaa !24
  store double 0.000000e+00, ptr %11, align 8, !tbaa !25
  store i64 0, ptr %8, align 8, !tbaa !24
  br label %398

398:                                              ; preds = %458, %397
  %399 = load i64, ptr %8, align 8, !tbaa !24
  %400 = load ptr, ptr %4, align 8, !tbaa !5
  %401 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %400, i32 0, i32 16
  %402 = load i64, ptr %401, align 8, !tbaa !26
  %403 = sub nsw i64 %402, 2
  %404 = icmp sle i64 %399, %403
  br i1 %404, label %405, label %461

405:                                              ; preds = %398
  store double 0.000000e+00, ptr %12, align 8, !tbaa !25
  store i64 0, ptr %7, align 8, !tbaa !24
  br label %406

406:                                              ; preds = %444, %405
  %407 = load i64, ptr %7, align 8, !tbaa !24
  %408 = load ptr, ptr %4, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %408, i32 0, i32 1
  %410 = load i64, ptr %409, align 8, !tbaa !27
  %411 = load ptr, ptr %4, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %411, i32 0, i32 0
  %413 = load i64, ptr %412, align 8, !tbaa !28
  %414 = mul nsw i64 %410, %413
  %415 = sub nsw i64 %414, 1
  %416 = icmp sle i64 %407, %415
  br i1 %416, label %417, label %447

417:                                              ; preds = %406
  %418 = load double, ptr %12, align 8, !tbaa !25
  %419 = load ptr, ptr %4, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %419, i32 0, i32 25
  %421 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %420, i32 0, i32 6
  %422 = load ptr, ptr %421, align 8, !tbaa !23
  %423 = load i64, ptr %8, align 8, !tbaa !24
  %424 = add nsw i64 %423, 1
  %425 = getelementptr inbounds ptr, ptr %422, i64 %424
  %426 = load ptr, ptr %425, align 8, !tbaa !5
  %427 = load i64, ptr %7, align 8, !tbaa !24
  %428 = getelementptr inbounds double, ptr %426, i64 %427
  %429 = load double, ptr %428, align 8, !tbaa !25
  %430 = load ptr, ptr %4, align 8, !tbaa !5
  %431 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %430, i32 0, i32 25
  %432 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %431, i32 0, i32 6
  %433 = load ptr, ptr %432, align 8, !tbaa !23
  %434 = load i64, ptr %8, align 8, !tbaa !24
  %435 = getelementptr inbounds ptr, ptr %433, i64 %434
  %436 = load ptr, ptr %435, align 8, !tbaa !5
  %437 = load i64, ptr %7, align 8, !tbaa !24
  %438 = getelementptr inbounds double, ptr %436, i64 %437
  %439 = load double, ptr %438, align 8, !tbaa !25
  %440 = fsub double %429, %439
  %441 = load ptr, ptr %5, align 8, !tbaa !5
  %442 = call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef %440, ptr noundef %441)
  %443 = fadd double %418, %442
  store double %443, ptr %12, align 8, !tbaa !25
  br label %444

444:                                              ; preds = %417
  %445 = load i64, ptr %7, align 8, !tbaa !24
  %446 = add nsw i64 %445, 1
  store i64 %446, ptr %7, align 8, !tbaa !24
  br label %406, !llvm.loop !33

447:                                              ; preds = %406
  %448 = load i64, ptr %9, align 8, !tbaa !24
  %449 = icmp slt i64 %448, 0
  br i1 %449, label %454, label %450

450:                                              ; preds = %447
  %451 = load double, ptr %12, align 8, !tbaa !25
  %452 = load double, ptr %11, align 8, !tbaa !25
  %453 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %451, double noundef %452)
  br i1 %453, label %454, label %457

454:                                              ; preds = %450, %447
  %455 = load i64, ptr %8, align 8, !tbaa !24
  store i64 %455, ptr %9, align 8, !tbaa !24
  %456 = load double, ptr %12, align 8, !tbaa !25
  store double %456, ptr %11, align 8, !tbaa !25
  br label %457

457:                                              ; preds = %454, %450
  br label %458

458:                                              ; preds = %457
  %459 = load i64, ptr %8, align 8, !tbaa !24
  %460 = add nsw i64 %459, 1
  store i64 %460, ptr %8, align 8, !tbaa !24
  br label %398, !llvm.loop !34

461:                                              ; preds = %398
  %462 = load ptr, ptr %4, align 8, !tbaa !5
  %463 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %462, i32 0, i32 26
  %464 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %463, i32 0, i32 4
  %465 = load ptr, ptr %464, align 8, !tbaa !23
  %466 = load i64, ptr %9, align 8, !tbaa !24
  %467 = getelementptr inbounds double, ptr %465, i64 %466
  %468 = load double, ptr %467, align 8, !tbaa !25
  %469 = load ptr, ptr %4, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %469, i32 0, i32 26
  %471 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %470, i32 0, i32 4
  %472 = load ptr, ptr %471, align 8, !tbaa !23
  %473 = load i64, ptr %9, align 8, !tbaa !24
  %474 = add nsw i64 %473, 1
  %475 = getelementptr inbounds double, ptr %472, i64 %474
  %476 = load double, ptr %475, align 8, !tbaa !25
  %477 = fadd double %468, %476
  %478 = fmul double 5.000000e-01, %477
  store double %478, ptr %10, align 8, !tbaa !25
  br label %479

479:                                              ; preds = %461, %393
  br label %480

480:                                              ; preds = %479, %140
  %481 = load double, ptr %10, align 8, !tbaa !25
  %482 = load ptr, ptr %4, align 8, !tbaa !5
  %483 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %482, i32 0, i32 26
  %484 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %483, i32 0, i32 4
  %485 = load ptr, ptr %484, align 8, !tbaa !23
  %486 = load ptr, ptr %4, align 8, !tbaa !5
  %487 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %486, i32 0, i32 16
  %488 = load i64, ptr %487, align 8, !tbaa !26
  %489 = getelementptr inbounds double, ptr %485, i64 %488
  store double %481, ptr %489, align 8, !tbaa !25
  store i64 0, ptr %7, align 8, !tbaa !24
  br label %490

490:                                              ; preds = %520, %480
  %491 = load i64, ptr %7, align 8, !tbaa !24
  %492 = load ptr, ptr %4, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %492, i32 0, i32 0
  %494 = load i64, ptr %493, align 8, !tbaa !28
  %495 = sub nsw i64 %494, 1
  %496 = icmp sle i64 %491, %495
  br i1 %496, label %497, label %523

497:                                              ; preds = %490
  %498 = load ptr, ptr %4, align 8, !tbaa !5
  %499 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %498, i32 0, i32 17
  %500 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %499, i32 0, i32 4
  %501 = load ptr, ptr %500, align 8, !tbaa !23
  %502 = load i64, ptr %7, align 8, !tbaa !24
  %503 = getelementptr inbounds double, ptr %501, i64 %502
  %504 = load double, ptr %503, align 8, !tbaa !25
  %505 = load ptr, ptr %4, align 8, !tbaa !5
  %506 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %505, i32 0, i32 18
  %507 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %506, i32 0, i32 4
  %508 = load ptr, ptr %507, align 8, !tbaa !23
  %509 = load i64, ptr %7, align 8, !tbaa !24
  %510 = getelementptr inbounds double, ptr %508, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !25
  %512 = load double, ptr %10, align 8, !tbaa !25
  %513 = call double @llvm.fmuladd.f64(double %511, double %512, double %504)
  %514 = load ptr, ptr %4, align 8, !tbaa !5
  %515 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %514, i32 0, i32 20
  %516 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %515, i32 0, i32 4
  %517 = load ptr, ptr %516, align 8, !tbaa !23
  %518 = load i64, ptr %7, align 8, !tbaa !24
  %519 = getelementptr inbounds double, ptr %517, i64 %518
  store double %513, ptr %519, align 8, !tbaa !25
  br label %520

520:                                              ; preds = %497
  %521 = load i64, ptr %7, align 8, !tbaa !24
  %522 = add nsw i64 %521, 1
  store i64 %522, ptr %7, align 8, !tbaa !24
  br label %490, !llvm.loop !35

523:                                              ; preds = %490
  %524 = load double, ptr %10, align 8, !tbaa !25
  %525 = load ptr, ptr %4, align 8, !tbaa !5
  %526 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %525, i32 0, i32 19
  store double %524, ptr %526, align 8, !tbaa !36
  %527 = load ptr, ptr %4, align 8, !tbaa !5
  %528 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %527, i32 0, i32 28
  %529 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %528, i32 0, i32 0
  store i32 0, ptr %529, align 8, !tbaa !9
  br label %718

530:                                              ; preds = %93
  store i64 0, ptr %7, align 8, !tbaa !24
  br label %531

531:                                              ; preds = %596, %530
  %532 = load i64, ptr %7, align 8, !tbaa !24
  %533 = load ptr, ptr %4, align 8, !tbaa !5
  %534 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %533, i32 0, i32 1
  %535 = load i64, ptr %534, align 8, !tbaa !27
  %536 = sub nsw i64 %535, 1
  %537 = icmp sle i64 %532, %536
  br i1 %537, label %538, label %599

538:                                              ; preds = %531
  %539 = load ptr, ptr %4, align 8, !tbaa !5
  %540 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %539, i32 0, i32 21
  %541 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %540, i32 0, i32 4
  %542 = load ptr, ptr %541, align 8, !tbaa !23
  %543 = load i64, ptr %7, align 8, !tbaa !24
  %544 = getelementptr inbounds double, ptr %542, i64 %543
  %545 = load double, ptr %544, align 8, !tbaa !25
  %546 = load ptr, ptr %4, align 8, !tbaa !5
  %547 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %546, i32 0, i32 24
  %548 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %547, i32 0, i32 6
  %549 = load ptr, ptr %548, align 8, !tbaa !23
  %550 = load ptr, ptr %4, align 8, !tbaa !5
  %551 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %550, i32 0, i32 16
  %552 = load i64, ptr %551, align 8, !tbaa !26
  %553 = getelementptr inbounds ptr, ptr %549, i64 %552
  %554 = load ptr, ptr %553, align 8, !tbaa !5
  %555 = load i64, ptr %7, align 8, !tbaa !24
  %556 = getelementptr inbounds double, ptr %554, i64 %555
  store double %545, ptr %556, align 8, !tbaa !25
  store i64 0, ptr %8, align 8, !tbaa !24
  br label %557

557:                                              ; preds = %592, %538
  %558 = load i64, ptr %8, align 8, !tbaa !24
  %559 = load ptr, ptr %4, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %559, i32 0, i32 0
  %561 = load i64, ptr %560, align 8, !tbaa !28
  %562 = sub nsw i64 %561, 1
  %563 = icmp sle i64 %558, %562
  br i1 %563, label %564, label %595

564:                                              ; preds = %557
  %565 = load ptr, ptr %4, align 8, !tbaa !5
  %566 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %565, i32 0, i32 23
  %567 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %566, i32 0, i32 6
  %568 = load ptr, ptr %567, align 8, !tbaa !23
  %569 = load i64, ptr %7, align 8, !tbaa !24
  %570 = getelementptr inbounds ptr, ptr %568, i64 %569
  %571 = load ptr, ptr %570, align 8, !tbaa !5
  %572 = load i64, ptr %8, align 8, !tbaa !24
  %573 = getelementptr inbounds double, ptr %571, i64 %572
  %574 = load double, ptr %573, align 8, !tbaa !25
  %575 = load ptr, ptr %4, align 8, !tbaa !5
  %576 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %575, i32 0, i32 25
  %577 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %576, i32 0, i32 6
  %578 = load ptr, ptr %577, align 8, !tbaa !23
  %579 = load ptr, ptr %4, align 8, !tbaa !5
  %580 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %579, i32 0, i32 16
  %581 = load i64, ptr %580, align 8, !tbaa !26
  %582 = getelementptr inbounds ptr, ptr %578, i64 %581
  %583 = load ptr, ptr %582, align 8, !tbaa !5
  %584 = load i64, ptr %7, align 8, !tbaa !24
  %585 = load ptr, ptr %4, align 8, !tbaa !5
  %586 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %585, i32 0, i32 0
  %587 = load i64, ptr %586, align 8, !tbaa !28
  %588 = mul nsw i64 %584, %587
  %589 = load i64, ptr %8, align 8, !tbaa !24
  %590 = add nsw i64 %588, %589
  %591 = getelementptr inbounds double, ptr %583, i64 %590
  store double %574, ptr %591, align 8, !tbaa !25
  br label %592

592:                                              ; preds = %564
  %593 = load i64, ptr %8, align 8, !tbaa !24
  %594 = add nsw i64 %593, 1
  store i64 %594, ptr %8, align 8, !tbaa !24
  br label %557, !llvm.loop !37

595:                                              ; preds = %557
  br label %596

596:                                              ; preds = %595
  %597 = load i64, ptr %7, align 8, !tbaa !24
  %598 = add nsw i64 %597, 1
  store i64 %598, ptr %7, align 8, !tbaa !24
  br label %531, !llvm.loop !38

599:                                              ; preds = %531
  %600 = load ptr, ptr %4, align 8, !tbaa !5
  %601 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %600, i32 0, i32 22
  %602 = load double, ptr %601, align 8, !tbaa !39
  %603 = load ptr, ptr %4, align 8, !tbaa !5
  %604 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %603, i32 0, i32 27
  %605 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %604, i32 0, i32 4
  %606 = load ptr, ptr %605, align 8, !tbaa !23
  %607 = load ptr, ptr %4, align 8, !tbaa !5
  %608 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %607, i32 0, i32 16
  %609 = load i64, ptr %608, align 8, !tbaa !26
  %610 = getelementptr inbounds double, ptr %606, i64 %609
  store double %602, ptr %610, align 8, !tbaa !25
  %611 = load ptr, ptr %4, align 8, !tbaa !5
  %612 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %611, i32 0, i32 16
  %613 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef %612, ptr noundef %613)
  %614 = load i64, ptr %6, align 8, !tbaa !24
  %615 = icmp eq i64 %614, 0
  br i1 %615, label %616, label %634

616:                                              ; preds = %599
  %617 = load double, ptr %10, align 8, !tbaa !25
  %618 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %617, double noundef 0.000000e+00)
  %619 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %618, ptr noundef @.str.203, ptr noundef %619)
  %620 = load ptr, ptr %4, align 8, !tbaa !5
  %621 = load ptr, ptr %4, align 8, !tbaa !5
  %622 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %621, i32 0, i32 20
  %623 = load ptr, ptr %4, align 8, !tbaa !5
  %624 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %623, i32 0, i32 21
  %625 = load ptr, ptr %4, align 8, !tbaa !5
  %626 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %625, i32 0, i32 23
  %627 = load ptr, ptr %4, align 8, !tbaa !5
  %628 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %627, i32 0, i32 13
  %629 = load i64, ptr %628, align 8, !tbaa !40
  %630 = load ptr, ptr %4, align 8, !tbaa !5
  %631 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %630, i32 0, i32 14
  %632 = load i64, ptr %631, align 8, !tbaa !41
  %633 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl32smoothnessmonitorstartlinesearchEPNS_17smoothnessmonitorEPKNS_9ae_vectorES4_PKNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %620, ptr noundef %622, ptr noundef %624, ptr noundef %626, i64 noundef %629, i64 noundef %632, ptr noundef %633)
  br label %646

634:                                              ; preds = %599
  %635 = load ptr, ptr %4, align 8, !tbaa !5
  %636 = load ptr, ptr %4, align 8, !tbaa !5
  %637 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %636, i32 0, i32 18
  %638 = load double, ptr %10, align 8, !tbaa !25
  %639 = load ptr, ptr %4, align 8, !tbaa !5
  %640 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %639, i32 0, i32 20
  %641 = load ptr, ptr %4, align 8, !tbaa !5
  %642 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %641, i32 0, i32 21
  %643 = load ptr, ptr %4, align 8, !tbaa !5
  %644 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %643, i32 0, i32 23
  %645 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl29smoothnessmonitorenqueuepointEPNS_17smoothnessmonitorEPKNS_9ae_vectorEdS4_S4_PKNS_9ae_matrixEPNS_8ae_stateE(ptr noundef %635, ptr noundef %637, double noundef %638, ptr noundef %640, ptr noundef %642, ptr noundef %644, ptr noundef %645)
  br label %646

646:                                              ; preds = %634, %616
  %647 = load ptr, ptr %4, align 8, !tbaa !5
  %648 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %647, i32 0, i32 16
  %649 = load i64, ptr %648, align 8, !tbaa !26
  %650 = sub nsw i64 %649, 1
  store i64 %650, ptr %8, align 8, !tbaa !24
  br label %651

651:                                              ; preds = %707, %646
  %652 = load i64, ptr %8, align 8, !tbaa !24
  %653 = icmp sge i64 %652, 1
  br i1 %653, label %654, label %710

654:                                              ; preds = %651
  %655 = load ptr, ptr %4, align 8, !tbaa !5
  %656 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %655, i32 0, i32 26
  %657 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %656, i32 0, i32 4
  %658 = load ptr, ptr %657, align 8, !tbaa !23
  %659 = load i64, ptr %8, align 8, !tbaa !24
  %660 = sub nsw i64 %659, 1
  %661 = getelementptr inbounds double, ptr %658, i64 %660
  %662 = load double, ptr %661, align 8, !tbaa !25
  %663 = load ptr, ptr %4, align 8, !tbaa !5
  %664 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %663, i32 0, i32 26
  %665 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %664, i32 0, i32 4
  %666 = load ptr, ptr %665, align 8, !tbaa !23
  %667 = load i64, ptr %8, align 8, !tbaa !24
  %668 = getelementptr inbounds double, ptr %666, i64 %667
  %669 = load double, ptr %668, align 8, !tbaa !25
  %670 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %662, double noundef %669)
  br i1 %670, label %671, label %672

671:                                              ; preds = %654
  br label %710

672:                                              ; preds = %654
  %673 = load ptr, ptr %4, align 8, !tbaa !5
  %674 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %673, i32 0, i32 26
  %675 = load i64, ptr %8, align 8, !tbaa !24
  %676 = sub nsw i64 %675, 1
  %677 = load i64, ptr %8, align 8, !tbaa !24
  %678 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl12swapelementsEPNS_9ae_vectorEllPNS_8ae_stateE(ptr noundef %674, i64 noundef %676, i64 noundef %677, ptr noundef %678)
  %679 = load ptr, ptr %4, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %679, i32 0, i32 27
  %681 = load i64, ptr %8, align 8, !tbaa !24
  %682 = sub nsw i64 %681, 1
  %683 = load i64, ptr %8, align 8, !tbaa !24
  %684 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl12swapelementsEPNS_9ae_vectorEllPNS_8ae_stateE(ptr noundef %680, i64 noundef %682, i64 noundef %683, ptr noundef %684)
  %685 = load ptr, ptr %4, align 8, !tbaa !5
  %686 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %685, i32 0, i32 24
  %687 = load i64, ptr %8, align 8, !tbaa !24
  %688 = sub nsw i64 %687, 1
  %689 = load i64, ptr %8, align 8, !tbaa !24
  %690 = load ptr, ptr %4, align 8, !tbaa !5
  %691 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %690, i32 0, i32 1
  %692 = load i64, ptr %691, align 8, !tbaa !27
  %693 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl8swaprowsEPNS_9ae_matrixElllPNS_8ae_stateE(ptr noundef %686, i64 noundef %688, i64 noundef %689, i64 noundef %692, ptr noundef %693)
  %694 = load ptr, ptr %4, align 8, !tbaa !5
  %695 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %694, i32 0, i32 25
  %696 = load i64, ptr %8, align 8, !tbaa !24
  %697 = sub nsw i64 %696, 1
  %698 = load i64, ptr %8, align 8, !tbaa !24
  %699 = load ptr, ptr %4, align 8, !tbaa !5
  %700 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %699, i32 0, i32 0
  %701 = load i64, ptr %700, align 8, !tbaa !28
  %702 = load ptr, ptr %4, align 8, !tbaa !5
  %703 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %702, i32 0, i32 1
  %704 = load i64, ptr %703, align 8, !tbaa !27
  %705 = mul nsw i64 %701, %704
  %706 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl8swaprowsEPNS_9ae_matrixElllPNS_8ae_stateE(ptr noundef %695, i64 noundef %697, i64 noundef %698, i64 noundef %705, ptr noundef %706)
  br label %707

707:                                              ; preds = %672
  %708 = load i64, ptr %8, align 8, !tbaa !24
  %709 = add nsw i64 %708, -1
  store i64 %709, ptr %8, align 8, !tbaa !24
  br label %651, !llvm.loop !42

710:                                              ; preds = %671, %651
  %711 = load i64, ptr %6, align 8, !tbaa !24
  %712 = add nsw i64 %711, 1
  store i64 %712, ptr %6, align 8, !tbaa !24
  br label %95

713:                                              ; preds = %98
  %714 = load ptr, ptr %4, align 8, !tbaa !5
  %715 = load ptr, ptr %5, align 8, !tbaa !5
  call void @_ZN11alglib_impl35smoothnessmonitorfinalizelinesearchEPNS_17smoothnessmonitorEPNS_8ae_stateE(ptr noundef %714, ptr noundef %715)
  store i8 0, ptr %15, align 1, !tbaa !43
  %716 = load i8, ptr %15, align 1, !tbaa !43, !range !44, !noundef !45
  %717 = trunc i8 %716 to i1
  store i1 %717, ptr %3, align 1
  store i32 1, ptr %16, align 4
  br label %784

718:                                              ; preds = %523
  store i8 1, ptr %15, align 1, !tbaa !43
  %719 = load i64, ptr %6, align 8, !tbaa !24
  %720 = load ptr, ptr %4, align 8, !tbaa !5
  %721 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %720, i32 0, i32 28
  %722 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %721, i32 0, i32 1
  %723 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %722, i32 0, i32 4
  %724 = load ptr, ptr %723, align 8, !tbaa !23
  %725 = getelementptr inbounds i64, ptr %724, i64 0
  store i64 %719, ptr %725, align 8, !tbaa !24
  %726 = load i64, ptr %7, align 8, !tbaa !24
  %727 = load ptr, ptr %4, align 8, !tbaa !5
  %728 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %727, i32 0, i32 28
  %729 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %728, i32 0, i32 1
  %730 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %729, i32 0, i32 4
  %731 = load ptr, ptr %730, align 8, !tbaa !23
  %732 = getelementptr inbounds i64, ptr %731, i64 1
  store i64 %726, ptr %732, align 8, !tbaa !24
  %733 = load i64, ptr %8, align 8, !tbaa !24
  %734 = load ptr, ptr %4, align 8, !tbaa !5
  %735 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %734, i32 0, i32 28
  %736 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %735, i32 0, i32 1
  %737 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %736, i32 0, i32 4
  %738 = load ptr, ptr %737, align 8, !tbaa !23
  %739 = getelementptr inbounds i64, ptr %738, i64 2
  store i64 %733, ptr %739, align 8, !tbaa !24
  %740 = load i64, ptr %9, align 8, !tbaa !24
  %741 = load ptr, ptr %4, align 8, !tbaa !5
  %742 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %741, i32 0, i32 28
  %743 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %742, i32 0, i32 1
  %744 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %743, i32 0, i32 4
  %745 = load ptr, ptr %744, align 8, !tbaa !23
  %746 = getelementptr inbounds i64, ptr %745, i64 3
  store i64 %740, ptr %746, align 8, !tbaa !24
  %747 = load double, ptr %10, align 8, !tbaa !25
  %748 = load ptr, ptr %4, align 8, !tbaa !5
  %749 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %748, i32 0, i32 28
  %750 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %749, i32 0, i32 3
  %751 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %750, i32 0, i32 4
  %752 = load ptr, ptr %751, align 8, !tbaa !23
  %753 = getelementptr inbounds double, ptr %752, i64 0
  store double %747, ptr %753, align 8, !tbaa !25
  %754 = load double, ptr %11, align 8, !tbaa !25
  %755 = load ptr, ptr %4, align 8, !tbaa !5
  %756 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %755, i32 0, i32 28
  %757 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %756, i32 0, i32 3
  %758 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %757, i32 0, i32 4
  %759 = load ptr, ptr %758, align 8, !tbaa !23
  %760 = getelementptr inbounds double, ptr %759, i64 1
  store double %754, ptr %760, align 8, !tbaa !25
  %761 = load double, ptr %12, align 8, !tbaa !25
  %762 = load ptr, ptr %4, align 8, !tbaa !5
  %763 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %762, i32 0, i32 28
  %764 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %763, i32 0, i32 3
  %765 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %764, i32 0, i32 4
  %766 = load ptr, ptr %765, align 8, !tbaa !23
  %767 = getelementptr inbounds double, ptr %766, i64 2
  store double %761, ptr %767, align 8, !tbaa !25
  %768 = load double, ptr %13, align 8, !tbaa !25
  %769 = load ptr, ptr %4, align 8, !tbaa !5
  %770 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %769, i32 0, i32 28
  %771 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %770, i32 0, i32 3
  %772 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %771, i32 0, i32 4
  %773 = load ptr, ptr %772, align 8, !tbaa !23
  %774 = getelementptr inbounds double, ptr %773, i64 3
  store double %768, ptr %774, align 8, !tbaa !25
  %775 = load double, ptr %14, align 8, !tbaa !25
  %776 = load ptr, ptr %4, align 8, !tbaa !5
  %777 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %776, i32 0, i32 28
  %778 = getelementptr inbounds %"struct.alglib_impl::rcommstate", ptr %777, i32 0, i32 3
  %779 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %778, i32 0, i32 4
  %780 = load ptr, ptr %779, align 8, !tbaa !23
  %781 = getelementptr inbounds double, ptr %780, i64 4
  store double %775, ptr %781, align 8, !tbaa !25
  %782 = load i8, ptr %15, align 1, !tbaa !43, !range !44, !noundef !45
  %783 = trunc i8 %782 to i1
  store i1 %783, ptr %3, align 1
  store i32 1, ptr %16, align 4
  br label %784

784:                                              ; preds = %718, %713
  call void @llvm.lifetime.end.p0(i64 1, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  %785 = load i1, ptr %3, align 1
  ret i1 %785
}

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !18, i64 1240}
!10 = !{!"_ZTSN11alglib_impl17smoothnessmonitorE", !11, i64 0, !11, i64 8, !12, i64 16, !13, i64 24, !13, i64 88, !11, i64 152, !13, i64 160, !13, i64 224, !13, i64 288, !15, i64 352, !13, i64 432, !13, i64 496, !11, i64 560, !11, i64 568, !11, i64 576, !16, i64 584, !11, i64 592, !13, i64 600, !13, i64 664, !16, i64 728, !13, i64 736, !13, i64 800, !16, i64 864, !15, i64 872, !15, i64 952, !15, i64 1032, !13, i64 1112, !13, i64 1176, !17, i64 1240, !12, i64 1504, !12, i64 1505, !11, i64 1512, !11, i64 1520, !16, i64 1528, !16, i64 1536, !12, i64 1544, !19, i64 1552, !16, i64 1848, !16, i64 1856, !20, i64 1864, !20, i64 2184, !16, i64 2504, !16, i64 2512, !21, i64 2520, !21, i64 2840, !16, i64 3160, !16, i64 3168, !22, i64 3176, !22, i64 3504, !12, i64 3832, !13, i64 3840, !13, i64 3904, !15, i64 3968, !17, i64 4048, !13, i64 4312, !13, i64 4376, !13, i64 4440, !13, i64 4504, !13, i64 4568, !13, i64 4632, !13, i64 4696, !13, i64 4760, !15, i64 4824, !15, i64 4904, !13, i64 4984, !13, i64 5048, !13, i64 5112, !13, i64 5176, !13, i64 5240, !13, i64 5304, !13, i64 5368, !13, i64 5432, !13, i64 5496, !13, i64 5560, !15, i64 5624}
!11 = !{!"long", !7, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!"_ZTSN11alglib_impl9ae_vectorE", !11, i64 0, !11, i64 8, !12, i64 16, !14, i64 24, !7, i64 56}
!14 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!15 = !{!"_ZTSN11alglib_impl9ae_matrixE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !12, i64 32, !14, i64 40, !7, i64 72}
!16 = !{!"double", !7, i64 0}
!17 = !{!"_ZTSN11alglib_impl10rcommstateE", !18, i64 0, !13, i64 8, !13, i64 72, !13, i64 136, !13, i64 200}
!18 = !{!"int", !7, i64 0}
!19 = !{!"_ZTSN11alglib_impl14optguardreportE", !12, i64 0, !12, i64 1, !11, i64 8, !16, i64 16, !12, i64 24, !12, i64 25, !12, i64 26, !11, i64 32, !16, i64 40, !12, i64 48, !11, i64 56, !11, i64 64, !13, i64 72, !15, i64 136, !15, i64 216}
!20 = !{!"_ZTSN11alglib_impl19optguardnonc0reportE", !12, i64 0, !11, i64 8, !13, i64 16, !13, i64 80, !11, i64 144, !13, i64 152, !13, i64 216, !11, i64 280, !11, i64 288, !11, i64 296, !11, i64 304, !11, i64 312}
!21 = !{!"_ZTSN11alglib_impl24optguardnonc1test0reportE", !12, i64 0, !11, i64 8, !13, i64 16, !13, i64 80, !11, i64 144, !13, i64 152, !13, i64 216, !11, i64 280, !11, i64 288, !11, i64 296, !11, i64 304, !11, i64 312}
!22 = !{!"_ZTSN11alglib_impl24optguardnonc1test1reportE", !12, i64 0, !11, i64 8, !11, i64 16, !13, i64 24, !13, i64 88, !11, i64 152, !13, i64 160, !13, i64 224, !11, i64 288, !11, i64 296, !11, i64 304, !11, i64 312, !11, i64 320}
!23 = !{!7, !7, i64 0}
!24 = !{!11, !11, i64 0}
!25 = !{!16, !16, i64 0}
!26 = !{!10, !11, i64 592}
!27 = !{!10, !11, i64 8}
!28 = !{!10, !11, i64 0}
!29 = !{!10, !16, i64 584}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = distinct !{!32, !31}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !31}
!35 = distinct !{!35, !31}
!36 = !{!10, !16, i64 728}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}
!39 = !{!10, !16, i64 864}
!40 = !{!10, !11, i64 568}
!41 = !{!10, !11, i64 576}
!42 = distinct !{!42, !31}
!43 = !{!12, !12, i64 0}
!44 = !{i8 0, i8 2}
!45 = !{}


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

@.str.202 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.203 = external hidden unnamed_addr constant [57 x i8], align 1

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

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

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

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

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

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

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

declare void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl32smoothnessmonitorstartlinesearchEPNS_17smoothnessmonitorEPKNS_9ae_vectorES4_PKNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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

6:                                                ; preds = %2
  %7 = getelementptr inbounds i8, ptr %0, i64 1304
  %8 = load ptr, ptr %7, align 8, !tbaa !22
  %9 = load i64, ptr %8, align 8, !tbaa !23
  %10 = getelementptr inbounds i8, ptr %8, i64 16
  %11 = load i64, ptr %10, align 8, !tbaa !23
  %12 = getelementptr inbounds i8, ptr %8, i64 24
  %13 = load i64, ptr %12, align 8, !tbaa !23
  %14 = getelementptr inbounds i8, ptr %0, i64 1432
  %15 = load ptr, ptr %14, align 8, !tbaa !22
  %16 = load double, ptr %15, align 8, !tbaa !24
  %17 = getelementptr inbounds i8, ptr %15, i64 8
  %18 = load double, ptr %17, align 8, !tbaa !24
  %19 = getelementptr inbounds i8, ptr %15, i64 16
  %20 = load double, ptr %19, align 8, !tbaa !24
  %21 = getelementptr inbounds i8, ptr %15, i64 24
  %22 = load <2 x double>, ptr %21, align 8, !tbaa !24
  %23 = icmp eq i32 %4, 0
  br i1 %23, label %.preheader307, label %.thread289

.preheader307:                                    ; preds = %6
  %24 = getelementptr inbounds i8, ptr %0, i64 8
  %25 = load i64, ptr %24, align 8, !tbaa !25
  %.not.not310 = icmp sgt i64 %25, 0
  br i1 %.not.not310, label %.lr.ph312, label %.preheader307.._crit_edge313_crit_edge

.preheader307.._crit_edge313_crit_edge:           ; preds = %.preheader307
  %.phi.trans.insert = getelementptr inbounds i8, ptr %0, i64 592
  %.pre = load i64, ptr %.phi.trans.insert, align 8, !tbaa !26
  br label %._crit_edge313

.lr.ph312:                                        ; preds = %.preheader307
  %26 = getelementptr inbounds i8, ptr %0, i64 856
  %27 = getelementptr inbounds i8, ptr %0, i64 1024
  %28 = getelementptr inbounds i8, ptr %0, i64 592
  %29 = load i64, ptr %28, align 8, !tbaa !26
  %30 = load i64, ptr %0, align 8, !tbaa !27
  %.not275.not308 = icmp sgt i64 %30, 0
  %31 = getelementptr inbounds i8, ptr %0, i64 944
  %32 = getelementptr inbounds i8, ptr %0, i64 1104
  br i1 %.not275.not308, label %.lr.ph.us.preheader, label %.lr.ph312.split.preheader

.lr.ph312.split.preheader:                        ; preds = %.lr.ph312
  %xtraiter = and i64 %25, 1
  %33 = icmp eq i64 %25, 1
  br i1 %33, label %._crit_edge313.loopexit406.unr-lcssa, label %.lr.ph312.split.preheader.new

.lr.ph312.split.preheader.new:                    ; preds = %.lr.ph312.split.preheader
  %unroll_iter = and i64 %25, 9223372036854775806
  br label %.lr.ph312.split

.lr.ph.us.preheader:                              ; preds = %.lr.ph312
  %xtraiter407 = and i64 %30, 1
  %34 = icmp eq i64 %30, 1
  %unroll_iter409 = and i64 %30, 9223372036854775806
  %lcmp.mod408.not = icmp eq i64 %xtraiter407, 0
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us.preheader, %._crit_edge.us
  %.2267311.us = phi i64 [ %75, %._crit_edge.us ], [ 0, %.lr.ph.us.preheader ]
  %35 = load ptr, ptr %26, align 8, !tbaa !22
  %36 = getelementptr inbounds double, ptr %35, i64 %.2267311.us
  %37 = load double, ptr %36, align 8, !tbaa !24
  %38 = load ptr, ptr %27, align 8, !tbaa !22
  %39 = getelementptr inbounds ptr, ptr %38, i64 %29
  %40 = load ptr, ptr %39, align 8, !tbaa !28
  %41 = getelementptr inbounds double, ptr %40, i64 %.2267311.us
  store double %37, ptr %41, align 8, !tbaa !24
  %42 = mul nuw nsw i64 %30, %.2267311.us
  br i1 %34, label %._crit_edge.us.unr-lcssa, label %.lr.ph.us.new

.lr.ph.us.new:                                    ; preds = %.lr.ph.us, %.lr.ph.us.new
  %.8263309.us = phi i64 [ %64, %.lr.ph.us.new ], [ 0, %.lr.ph.us ]
  %niter410 = phi i64 [ %niter410.next.1, %.lr.ph.us.new ], [ 0, %.lr.ph.us ]
  %43 = load ptr, ptr %31, align 8, !tbaa !22
  %44 = getelementptr inbounds ptr, ptr %43, i64 %.2267311.us
  %45 = load ptr, ptr %44, align 8, !tbaa !28
  %46 = getelementptr inbounds double, ptr %45, i64 %.8263309.us
  %47 = load double, ptr %46, align 8, !tbaa !24
  %48 = load ptr, ptr %32, align 8, !tbaa !22
  %49 = getelementptr inbounds ptr, ptr %48, i64 %29
  %50 = load ptr, ptr %49, align 8, !tbaa !28
  %51 = getelementptr double, ptr %50, i64 %42
  %52 = getelementptr double, ptr %51, i64 %.8263309.us
  store double %47, ptr %52, align 8, !tbaa !24
  %53 = or disjoint i64 %.8263309.us, 1
  %54 = load ptr, ptr %31, align 8, !tbaa !22
  %55 = getelementptr inbounds ptr, ptr %54, i64 %.2267311.us
  %56 = load ptr, ptr %55, align 8, !tbaa !28
  %57 = getelementptr inbounds double, ptr %56, i64 %53
  %58 = load double, ptr %57, align 8, !tbaa !24
  %59 = load ptr, ptr %32, align 8, !tbaa !22
  %60 = getelementptr inbounds ptr, ptr %59, i64 %29
  %61 = load ptr, ptr %60, align 8, !tbaa !28
  %62 = getelementptr double, ptr %61, i64 %42
  %63 = getelementptr double, ptr %62, i64 %53
  store double %58, ptr %63, align 8, !tbaa !24
  %64 = add nuw nsw i64 %.8263309.us, 2
  %niter410.next.1 = add i64 %niter410, 2
  %niter410.ncmp.1 = icmp eq i64 %niter410.next.1, %unroll_iter409
  br i1 %niter410.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.lr.ph.us.new, !llvm.loop !29

._crit_edge.us.unr-lcssa:                         ; preds = %.lr.ph.us.new, %.lr.ph.us
  %.8263309.us.unr = phi i64 [ 0, %.lr.ph.us ], [ %64, %.lr.ph.us.new ]
  br i1 %lcmp.mod408.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %65 = load ptr, ptr %31, align 8, !tbaa !22
  %66 = getelementptr inbounds ptr, ptr %65, i64 %.2267311.us
  %67 = load ptr, ptr %66, align 8, !tbaa !28
  %68 = getelementptr inbounds double, ptr %67, i64 %.8263309.us.unr
  %69 = load double, ptr %68, align 8, !tbaa !24
  %70 = load ptr, ptr %32, align 8, !tbaa !22
  %71 = getelementptr inbounds ptr, ptr %70, i64 %29
  %72 = load ptr, ptr %71, align 8, !tbaa !28
  %73 = getelementptr double, ptr %72, i64 %42
  %74 = getelementptr double, ptr %73, i64 %.8263309.us.unr
  store double %69, ptr %74, align 8, !tbaa !24
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %75 = add nuw nsw i64 %.2267311.us, 1
  %exitcond373.not = icmp eq i64 %75, %25
  br i1 %exitcond373.not, label %._crit_edge313, label %.lr.ph.us, !llvm.loop !31

._crit_edge:                                      ; preds = %346, %354, %339
  %.9264.lcssa = phi i64 [ %.9264314, %339 ], [ 0, %354 ], [ %.9264316, %346 ]
  %76 = add nsw i64 %9, 1
  %77 = icmp slt i64 %9, 40
  br i1 %77, label %.thread289, label %360

.thread289:                                       ; preds = %2, %6, %._crit_edge
  %.1256303 = phi i64 [ %.9264.lcssa, %._crit_edge ], [ %11, %6 ], [ -919, %2 ]
  %.1269302 = phi i64 [ %76, %._crit_edge ], [ 0, %6 ], [ 0, %2 ]
  %.0245284301 = phi i64 [ %13, %._crit_edge ], [ %13, %6 ], [ -909, %2 ]
  %.0233285300 = phi double [ %18, %._crit_edge ], [ %18, %6 ], [ 2.550000e+02, %2 ]
  %.0229286299 = phi double [ %20, %._crit_edge ], [ %20, %6 ], [ 7.400000e+01, %2 ]
  %78 = phi <2 x double> [ %22, %._crit_edge ], [ %22, %6 ], [ <double -7.880000e+02, double 8.090000e+02>, %2 ]
  %79 = getelementptr inbounds i8, ptr %0, i64 1112
  %80 = getelementptr inbounds i8, ptr %0, i64 592
  %81 = load i64, ptr %80, align 8, !tbaa !26
  %82 = add nsw i64 %81, 1
  tail call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %79, i64 noundef %82, ptr noundef %1)
  %83 = getelementptr inbounds i8, ptr %0, i64 1176
  %84 = load i64, ptr %80, align 8, !tbaa !26
  %85 = add nsw i64 %84, 1
  tail call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %83, i64 noundef %85, ptr noundef %1)
  %86 = getelementptr inbounds i8, ptr %0, i64 952
  %87 = load i64, ptr %80, align 8, !tbaa !26
  %88 = add nsw i64 %87, 1
  %89 = getelementptr inbounds i8, ptr %0, i64 8
  %90 = load i64, ptr %89, align 8, !tbaa !25
  tail call void @_ZN11alglib_impl17rmatrixgrowrowstoEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %86, i64 noundef %88, i64 noundef %90, ptr noundef %1)
  %91 = getelementptr inbounds i8, ptr %0, i64 1032
  %92 = load i64, ptr %80, align 8, !tbaa !26
  %93 = add nsw i64 %92, 1
  %94 = load i64, ptr %0, align 8, !tbaa !27
  %95 = load i64, ptr %89, align 8, !tbaa !25
  %96 = mul nsw i64 %95, %94
  tail call void @_ZN11alglib_impl17rmatrixgrowrowstoEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %91, i64 noundef %93, i64 noundef %96, ptr noundef %1)
  %97 = icmp slt i64 %.1269302, 11
  br i1 %97, label %98, label %104

98:                                               ; preds = %.thread289
  %99 = sitofp i64 %.1269302 to double
  %100 = fdiv double %99, 1.000000e+01
  %101 = getelementptr inbounds i8, ptr %0, i64 584
  %102 = load double, ptr %101, align 8, !tbaa !32
  %103 = fmul double %100, %102
  %.pre375 = load i64, ptr %80, align 8, !tbaa !26
  br label %231

104:                                              ; preds = %.thread289
  %105 = load i64, ptr %80, align 8, !tbaa !26
  %106 = icmp sgt i64 %105, 2
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %106, ptr noundef nonnull @.str.202, ptr noundef %1)
  %.lhs.trunc = trunc i64 %.1269302 to i8
  %107 = urem i8 %.lhs.trunc, 3
  %108 = icmp eq i8 %107, 0
  br i1 %108, label %.preheader306, label %135

.preheader306:                                    ; preds = %104
  %109 = load i64, ptr %80, align 8, !tbaa !26
  %.not319 = icmp slt i64 %109, 2
  br i1 %.not319, label %._crit_edge324, label %.lr.ph323

.lr.ph323:                                        ; preds = %.preheader306
  %110 = getelementptr inbounds i8, ptr %0, i64 1232
  br label %111

111:                                              ; preds = %.lr.ph323, %124
  %.1234322 = phi double [ 0.000000e+00, %.lr.ph323 ], [ %.2235, %124 ]
  %.1246321 = phi i64 [ -1, %.lr.ph323 ], [ %.2247, %124 ]
  %.2257320 = phi i64 [ 0, %.lr.ph323 ], [ %113, %124 ]
  %112 = load ptr, ptr %110, align 8, !tbaa !22
  %113 = add nuw nsw i64 %.2257320, 1
  %114 = getelementptr inbounds double, ptr %112, i64 %113
  %115 = load double, ptr %114, align 8, !tbaa !24
  %116 = getelementptr inbounds double, ptr %112, i64 %.2257320
  %117 = load double, ptr %116, align 8, !tbaa !24
  %118 = fsub double %115, %117
  %119 = tail call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %118, ptr noundef %1)
  %120 = icmp slt i64 %.1246321, 0
  br i1 %120, label %123, label %121

121:                                              ; preds = %111
  %122 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %119, double noundef %.1234322)
  br i1 %122, label %123, label %124

123:                                              ; preds = %121, %111
  br label %124

124:                                              ; preds = %121, %123
  %.2247 = phi i64 [ %.2257320, %123 ], [ %.1246321, %121 ]
  %.2235 = phi double [ %119, %123 ], [ %.1234322, %121 ]
  %125 = load i64, ptr %80, align 8, !tbaa !26
  %126 = add nsw i64 %125, -2
  %.not.not362 = icmp slt i64 %.2257320, %126
  br i1 %.not.not362, label %111, label %._crit_edge324, !llvm.loop !33

._crit_edge324:                                   ; preds = %124, %.preheader306
  %.2257.lcssa = phi i64 [ 0, %.preheader306 ], [ %113, %124 ]
  %.1246.lcssa = phi i64 [ -1, %.preheader306 ], [ %.2247, %124 ]
  %.1234.lcssa = phi double [ 0.000000e+00, %.preheader306 ], [ %.2235, %124 ]
  %.1230.lcssa = phi double [ %.0229286299, %.preheader306 ], [ %119, %124 ]
  %127 = getelementptr inbounds i8, ptr %0, i64 1168
  %128 = load ptr, ptr %127, align 8, !tbaa !22
  %129 = getelementptr inbounds double, ptr %128, i64 %.1246.lcssa
  %130 = load double, ptr %129, align 8, !tbaa !24
  %131 = getelementptr i8, ptr %129, i64 8
  %132 = load double, ptr %131, align 8, !tbaa !24
  %133 = fadd double %130, %132
  %134 = fmul double %133, 5.000000e-01
  br label %135

135:                                              ; preds = %._crit_edge324, %104
  %.3258 = phi i64 [ %.2257.lcssa, %._crit_edge324 ], [ %.1256303, %104 ]
  %.3248 = phi i64 [ %.1246.lcssa, %._crit_edge324 ], [ %.0245284301, %104 ]
  %.1242 = phi double [ %134, %._crit_edge324 ], [ 0.000000e+00, %104 ]
  %.3236 = phi double [ %.1234.lcssa, %._crit_edge324 ], [ %.0233285300, %104 ]
  %.2231 = phi double [ %.1230.lcssa, %._crit_edge324 ], [ %.0229286299, %104 ]
  %136 = icmp eq i8 %107, 1
  br i1 %136, label %.preheader305, label %191

.preheader305:                                    ; preds = %135
  %137 = load i64, ptr %80, align 8, !tbaa !26
  %.not271329 = icmp slt i64 %137, 3
  br i1 %.not271329, label %._crit_edge334, label %.lr.ph333

.lr.ph333:                                        ; preds = %.preheader305
  %138 = getelementptr inbounds i8, ptr %0, i64 1232
  %139 = getelementptr inbounds i8, ptr %0, i64 1168
  br label %140

140:                                              ; preds = %.lr.ph333, %167
  %.4237332 = phi double [ 0.000000e+00, %.lr.ph333 ], [ %.5238, %167 ]
  %.4249331 = phi i64 [ -1, %.lr.ph333 ], [ %.5250, %167 ]
  %.4259330 = phi i64 [ 0, %.lr.ph333 ], [ %142, %167 ]
  %141 = load ptr, ptr %138, align 8, !tbaa !22
  %142 = add nuw nsw i64 %.4259330, 1
  %143 = getelementptr inbounds double, ptr %141, i64 %142
  %144 = getelementptr inbounds double, ptr %141, i64 %.4259330
  %145 = load double, ptr %144, align 8, !tbaa !24
  %146 = load ptr, ptr %139, align 8, !tbaa !22
  %147 = getelementptr inbounds double, ptr %146, i64 %142
  %148 = getelementptr inbounds double, ptr %146, i64 %.4259330
  %149 = load double, ptr %148, align 8, !tbaa !24
  %150 = load <2 x double>, ptr %143, align 8, !tbaa !24
  %151 = insertelement <2 x double> poison, double %145, i64 0
  %152 = shufflevector <2 x double> %151, <2 x double> %150, <2 x i32> <i32 0, i32 2>
  %153 = fsub <2 x double> %150, %152
  %154 = load <2 x double>, ptr %147, align 8, !tbaa !24
  %155 = insertelement <2 x double> poison, double %149, i64 0
  %156 = shufflevector <2 x double> %155, <2 x double> %154, <2 x i32> <i32 0, i32 2>
  %157 = fsub <2 x double> %154, %156
  %158 = fadd <2 x double> %157, <double 5.000000e-16, double 5.000000e-16>
  %159 = fdiv <2 x double> %153, %158
  %shift = shufflevector <2 x double> %159, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %160 = fsub <2 x double> %159, %shift
  %161 = extractelement <2 x double> %160, i64 0
  %162 = tail call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %161, ptr noundef %1)
  %163 = icmp slt i64 %.4249331, 0
  br i1 %163, label %166, label %164

164:                                              ; preds = %140
  %165 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %162, double noundef %.4237332)
  br i1 %165, label %166, label %167

166:                                              ; preds = %164, %140
  br label %167

167:                                              ; preds = %164, %166
  %.5250 = phi i64 [ %.4259330, %166 ], [ %.4249331, %164 ]
  %.5238 = phi double [ %162, %166 ], [ %.4237332, %164 ]
  %168 = load i64, ptr %80, align 8, !tbaa !26
  %169 = add nsw i64 %168, -3
  %.not271.not = icmp slt i64 %.4259330, %169
  br i1 %.not271.not, label %140, label %._crit_edge334, !llvm.loop !34

._crit_edge334:                                   ; preds = %167, %.preheader305
  %.4259.lcssa = phi i64 [ 0, %.preheader305 ], [ %142, %167 ]
  %.4249.lcssa = phi i64 [ -1, %.preheader305 ], [ %.5250, %167 ]
  %.4237.lcssa = phi double [ 0.000000e+00, %.preheader305 ], [ %.5238, %167 ]
  %.3232.lcssa = phi double [ %.2231, %.preheader305 ], [ %162, %167 ]
  %170 = phi <2 x double> [ %78, %.preheader305 ], [ %159, %167 ]
  %171 = getelementptr inbounds i8, ptr %0, i64 1168
  %172 = load ptr, ptr %171, align 8, !tbaa !22
  %173 = add nsw i64 %.4249.lcssa, 2
  %174 = getelementptr inbounds double, ptr %172, i64 %173
  %175 = load double, ptr %174, align 8, !tbaa !24
  %176 = add nsw i64 %.4249.lcssa, 1
  %177 = getelementptr inbounds double, ptr %172, i64 %176
  %178 = load double, ptr %177, align 8, !tbaa !24
  %179 = fsub double %175, %178
  %180 = getelementptr inbounds double, ptr %172, i64 %.4249.lcssa
  %181 = load double, ptr %180, align 8, !tbaa !24
  %182 = fsub double %178, %181
  %183 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %179, double noundef %182)
  %184 = load ptr, ptr %171, align 8, !tbaa !22
  %. = select i1 %183, i64 %173, i64 %176
  %..4249.lcssa = select i1 %183, i64 %176, i64 %.4249.lcssa
  %185 = getelementptr inbounds double, ptr %184, i64 %.
  %186 = load double, ptr %185, align 8, !tbaa !24
  %187 = getelementptr inbounds double, ptr %184, i64 %..4249.lcssa
  %188 = load double, ptr %187, align 8, !tbaa !24
  %189 = fadd double %186, %188
  %190 = fmul double %189, 5.000000e-01
  br label %191

191:                                              ; preds = %._crit_edge334, %135
  %.5260 = phi i64 [ %.3258, %135 ], [ %.4259.lcssa, %._crit_edge334 ]
  %.6251 = phi i64 [ %.3248, %135 ], [ %.4249.lcssa, %._crit_edge334 ]
  %.2243 = phi double [ %.1242, %135 ], [ %190, %._crit_edge334 ]
  %.6239 = phi double [ %.3236, %135 ], [ %.4237.lcssa, %._crit_edge334 ]
  %.4 = phi double [ %.2231, %135 ], [ %.3232.lcssa, %._crit_edge334 ]
  %192 = phi <2 x double> [ %78, %135 ], [ %170, %._crit_edge334 ]
  %193 = icmp eq i8 %107, 2
  %.pre376 = load i64, ptr %80, align 8, !tbaa !26
  br i1 %193, label %.preheader304, label %231

.preheader304:                                    ; preds = %191
  %.not272347 = icmp slt i64 %.pre376, 2
  br i1 %.not272347, label %._crit_edge351, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %.preheader304
  %194 = getelementptr inbounds i8, ptr %0, i64 1104
  br label %.preheader

.preheader:                                       ; preds = %.preheader.lr.ph, %218
  %.7240350 = phi double [ 0.000000e+00, %.preheader.lr.ph ], [ %.8, %218 ]
  %.7252349 = phi i64 [ -1, %.preheader.lr.ph ], [ %.8253, %218 ]
  %.6261348 = phi i64 [ 0, %.preheader.lr.ph ], [ %219, %218 ]
  %195 = load i64, ptr %89, align 8, !tbaa !25
  %196 = load i64, ptr %0, align 8, !tbaa !27
  %197 = mul nsw i64 %196, %195
  %.not273.not341 = icmp sgt i64 %197, 0
  br i1 %.not273.not341, label %.lr.ph344, label %._crit_edge345

.lr.ph344:                                        ; preds = %.preheader, %.lr.ph344
  %.6343 = phi double [ %209, %.lr.ph344 ], [ 0.000000e+00, %.preheader ]
  %.0265342 = phi i64 [ %210, %.lr.ph344 ], [ 0, %.preheader ]
  %198 = load ptr, ptr %194, align 8, !tbaa !22
  %199 = getelementptr inbounds ptr, ptr %198, i64 %.6261348
  %200 = getelementptr inbounds i8, ptr %199, i64 8
  %201 = load ptr, ptr %200, align 8, !tbaa !28
  %202 = getelementptr inbounds double, ptr %201, i64 %.0265342
  %203 = load double, ptr %202, align 8, !tbaa !24
  %204 = load ptr, ptr %199, align 8, !tbaa !28
  %205 = getelementptr inbounds double, ptr %204, i64 %.0265342
  %206 = load double, ptr %205, align 8, !tbaa !24
  %207 = fsub double %203, %206
  %208 = tail call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef %207, ptr noundef %1)
  %209 = fadd double %.6343, %208
  %210 = add nuw nsw i64 %.0265342, 1
  %211 = load i64, ptr %89, align 8, !tbaa !25
  %212 = load i64, ptr %0, align 8, !tbaa !27
  %213 = mul nsw i64 %212, %211
  %.not273.not = icmp slt i64 %210, %213
  br i1 %.not273.not, label %.lr.ph344, label %._crit_edge345, !llvm.loop !35

._crit_edge345:                                   ; preds = %.lr.ph344, %.preheader
  %.6.lcssa = phi double [ 0.000000e+00, %.preheader ], [ %209, %.lr.ph344 ]
  %214 = icmp slt i64 %.7252349, 0
  br i1 %214, label %217, label %215

215:                                              ; preds = %._crit_edge345
  %216 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %.6.lcssa, double noundef %.7240350)
  br i1 %216, label %217, label %218

217:                                              ; preds = %215, %._crit_edge345
  br label %218

218:                                              ; preds = %215, %217
  %.8253 = phi i64 [ %.6261348, %217 ], [ %.7252349, %215 ]
  %.8 = phi double [ %.6.lcssa, %217 ], [ %.7240350, %215 ]
  %219 = add nuw nsw i64 %.6261348, 1
  %220 = load i64, ptr %80, align 8, !tbaa !26
  %221 = add nsw i64 %220, -2
  %.not272.not = icmp slt i64 %.6261348, %221
  br i1 %.not272.not, label %.preheader, label %._crit_edge351, !llvm.loop !36

._crit_edge351:                                   ; preds = %218, %.preheader304
  %222 = phi i64 [ %.pre376, %.preheader304 ], [ %220, %218 ]
  %.6261.lcssa = phi i64 [ 0, %.preheader304 ], [ %219, %218 ]
  %.7252.lcssa = phi i64 [ -1, %.preheader304 ], [ %.8253, %218 ]
  %.7240.lcssa = phi double [ 0.000000e+00, %.preheader304 ], [ %.8, %218 ]
  %.5.lcssa = phi double [ %.4, %.preheader304 ], [ %.6.lcssa, %218 ]
  %223 = getelementptr inbounds i8, ptr %0, i64 1168
  %224 = load ptr, ptr %223, align 8, !tbaa !22
  %225 = getelementptr inbounds double, ptr %224, i64 %.7252.lcssa
  %226 = load double, ptr %225, align 8, !tbaa !24
  %227 = getelementptr i8, ptr %225, i64 8
  %228 = load double, ptr %227, align 8, !tbaa !24
  %229 = fadd double %226, %228
  %230 = fmul double %229, 5.000000e-01
  br label %231

231:                                              ; preds = %191, %._crit_edge351, %98
  %232 = phi i64 [ %.pre375, %98 ], [ %222, %._crit_edge351 ], [ %.pre376, %191 ]
  %.7262 = phi i64 [ %.1256303, %98 ], [ %.6261.lcssa, %._crit_edge351 ], [ %.5260, %191 ]
  %.9254 = phi i64 [ %.0245284301, %98 ], [ %.7252.lcssa, %._crit_edge351 ], [ %.6251, %191 ]
  %.3244 = phi double [ %103, %98 ], [ %230, %._crit_edge351 ], [ %.2243, %191 ]
  %.9 = phi double [ %.0233285300, %98 ], [ %.7240.lcssa, %._crit_edge351 ], [ %.6239, %191 ]
  %.7 = phi double [ %.0229286299, %98 ], [ %.5.lcssa, %._crit_edge351 ], [ %.4, %191 ]
  %233 = phi <2 x double> [ %78, %98 ], [ %192, %._crit_edge351 ], [ %192, %191 ]
  %234 = getelementptr inbounds i8, ptr %0, i64 1168
  %235 = load ptr, ptr %234, align 8, !tbaa !22
  %236 = getelementptr inbounds double, ptr %235, i64 %232
  store double %.3244, ptr %236, align 8, !tbaa !24
  %237 = load i64, ptr %0, align 8, !tbaa !27
  %.not274.not356 = icmp sgt i64 %237, 0
  br i1 %.not274.not356, label %.lr.ph359, label %._crit_edge360

.lr.ph359:                                        ; preds = %231
  %238 = getelementptr inbounds i8, ptr %0, i64 656
  %239 = getelementptr inbounds i8, ptr %0, i64 720
  %240 = getelementptr inbounds i8, ptr %0, i64 792
  %xtraiter412 = and i64 %237, 1
  %241 = icmp eq i64 %237, 1
  br i1 %241, label %._crit_edge360.loopexit.unr-lcssa, label %.lr.ph359.new

.lr.ph359.new:                                    ; preds = %.lr.ph359
  %unroll_iter414 = and i64 %237, 9223372036854775806
  br label %242

242:                                              ; preds = %242, %.lr.ph359.new
  %.1266357 = phi i64 [ 0, %.lr.ph359.new ], [ %262, %242 ]
  %niter415 = phi i64 [ 0, %.lr.ph359.new ], [ %niter415.next.1, %242 ]
  %243 = load ptr, ptr %238, align 8, !tbaa !22
  %244 = getelementptr inbounds double, ptr %243, i64 %.1266357
  %245 = load double, ptr %244, align 8, !tbaa !24
  %246 = load ptr, ptr %239, align 8, !tbaa !22
  %247 = getelementptr inbounds double, ptr %246, i64 %.1266357
  %248 = load double, ptr %247, align 8, !tbaa !24
  %249 = tail call double @llvm.fmuladd.f64(double %248, double %.3244, double %245)
  %250 = load ptr, ptr %240, align 8, !tbaa !22
  %251 = getelementptr inbounds double, ptr %250, i64 %.1266357
  store double %249, ptr %251, align 8, !tbaa !24
  %252 = or disjoint i64 %.1266357, 1
  %253 = load ptr, ptr %238, align 8, !tbaa !22
  %254 = getelementptr inbounds double, ptr %253, i64 %252
  %255 = load double, ptr %254, align 8, !tbaa !24
  %256 = load ptr, ptr %239, align 8, !tbaa !22
  %257 = getelementptr inbounds double, ptr %256, i64 %252
  %258 = load double, ptr %257, align 8, !tbaa !24
  %259 = tail call double @llvm.fmuladd.f64(double %258, double %.3244, double %255)
  %260 = load ptr, ptr %240, align 8, !tbaa !22
  %261 = getelementptr inbounds double, ptr %260, i64 %252
  store double %259, ptr %261, align 8, !tbaa !24
  %262 = add nuw nsw i64 %.1266357, 2
  %niter415.next.1 = add i64 %niter415, 2
  %niter415.ncmp.1 = icmp eq i64 %niter415.next.1, %unroll_iter414
  br i1 %niter415.ncmp.1, label %._crit_edge360.loopexit.unr-lcssa, label %242, !llvm.loop !37

._crit_edge360.loopexit.unr-lcssa:                ; preds = %242, %.lr.ph359
  %.1266357.unr = phi i64 [ 0, %.lr.ph359 ], [ %262, %242 ]
  %lcmp.mod413.not = icmp eq i64 %xtraiter412, 0
  br i1 %lcmp.mod413.not, label %._crit_edge360, label %._crit_edge360.loopexit.epilog-lcssa

._crit_edge360.loopexit.epilog-lcssa:             ; preds = %._crit_edge360.loopexit.unr-lcssa
  %263 = load ptr, ptr %238, align 8, !tbaa !22
  %264 = getelementptr inbounds double, ptr %263, i64 %.1266357.unr
  %265 = load double, ptr %264, align 8, !tbaa !24
  %266 = load ptr, ptr %239, align 8, !tbaa !22
  %267 = getelementptr inbounds double, ptr %266, i64 %.1266357.unr
  %268 = load double, ptr %267, align 8, !tbaa !24
  %269 = tail call double @llvm.fmuladd.f64(double %268, double %.3244, double %265)
  %270 = load ptr, ptr %240, align 8, !tbaa !22
  %271 = getelementptr inbounds double, ptr %270, i64 %.1266357.unr
  store double %269, ptr %271, align 8, !tbaa !24
  br label %._crit_edge360

._crit_edge360:                                   ; preds = %._crit_edge360.loopexit.epilog-lcssa, %._crit_edge360.loopexit.unr-lcssa, %231
  %.1266.lcssa = phi i64 [ 0, %231 ], [ %237, %._crit_edge360.loopexit.unr-lcssa ], [ %237, %._crit_edge360.loopexit.epilog-lcssa ]
  %272 = getelementptr inbounds i8, ptr %0, i64 728
  store double %.3244, ptr %272, align 8, !tbaa !38
  store i32 0, ptr %3, align 8, !tbaa !5
  %273 = getelementptr inbounds i8, ptr %0, i64 1304
  %274 = load ptr, ptr %273, align 8, !tbaa !22
  store i64 %.1269302, ptr %274, align 8, !tbaa !23
  %275 = load ptr, ptr %273, align 8, !tbaa !22
  %276 = getelementptr inbounds i8, ptr %275, i64 8
  store i64 %.1266.lcssa, ptr %276, align 8, !tbaa !23
  %277 = load ptr, ptr %273, align 8, !tbaa !22
  %278 = getelementptr inbounds i8, ptr %277, i64 16
  store i64 %.7262, ptr %278, align 8, !tbaa !23
  %279 = load ptr, ptr %273, align 8, !tbaa !22
  %280 = getelementptr inbounds i8, ptr %279, i64 24
  store i64 %.9254, ptr %280, align 8, !tbaa !23
  %281 = getelementptr inbounds i8, ptr %0, i64 1432
  %282 = load ptr, ptr %281, align 8, !tbaa !22
  store double %.3244, ptr %282, align 8, !tbaa !24
  %283 = load ptr, ptr %281, align 8, !tbaa !22
  %284 = getelementptr inbounds i8, ptr %283, i64 8
  store double %.9, ptr %284, align 8, !tbaa !24
  %285 = load ptr, ptr %281, align 8, !tbaa !22
  %286 = getelementptr inbounds i8, ptr %285, i64 16
  store double %.7, ptr %286, align 8, !tbaa !24
  %287 = load ptr, ptr %281, align 8, !tbaa !22
  %288 = getelementptr inbounds i8, ptr %287, i64 24
  %289 = extractelement <2 x double> %233, i64 0
  store double %289, ptr %288, align 8, !tbaa !24
  %290 = load ptr, ptr %281, align 8, !tbaa !22
  %291 = getelementptr inbounds i8, ptr %290, i64 32
  %292 = extractelement <2 x double> %233, i64 1
  store double %292, ptr %291, align 8, !tbaa !24
  br label %361

.lr.ph312.split:                                  ; preds = %.lr.ph312.split, %.lr.ph312.split.preheader.new
  %.2267311 = phi i64 [ 0, %.lr.ph312.split.preheader.new ], [ %308, %.lr.ph312.split ]
  %niter = phi i64 [ 0, %.lr.ph312.split.preheader.new ], [ %niter.next.1, %.lr.ph312.split ]
  %293 = load ptr, ptr %26, align 8, !tbaa !22
  %294 = getelementptr inbounds double, ptr %293, i64 %.2267311
  %295 = load double, ptr %294, align 8, !tbaa !24
  %296 = load ptr, ptr %27, align 8, !tbaa !22
  %297 = getelementptr inbounds ptr, ptr %296, i64 %29
  %298 = load ptr, ptr %297, align 8, !tbaa !28
  %299 = getelementptr inbounds double, ptr %298, i64 %.2267311
  store double %295, ptr %299, align 8, !tbaa !24
  %300 = or disjoint i64 %.2267311, 1
  %301 = load ptr, ptr %26, align 8, !tbaa !22
  %302 = getelementptr inbounds double, ptr %301, i64 %300
  %303 = load double, ptr %302, align 8, !tbaa !24
  %304 = load ptr, ptr %27, align 8, !tbaa !22
  %305 = getelementptr inbounds ptr, ptr %304, i64 %29
  %306 = load ptr, ptr %305, align 8, !tbaa !28
  %307 = getelementptr inbounds double, ptr %306, i64 %300
  store double %303, ptr %307, align 8, !tbaa !24
  %308 = add nuw nsw i64 %.2267311, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge313.loopexit406.unr-lcssa, label %.lr.ph312.split, !llvm.loop !31

._crit_edge313.loopexit406.unr-lcssa:             ; preds = %.lr.ph312.split, %.lr.ph312.split.preheader
  %.2267311.unr = phi i64 [ 0, %.lr.ph312.split.preheader ], [ %308, %.lr.ph312.split ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge313, label %.lr.ph312.split.epil

.lr.ph312.split.epil:                             ; preds = %._crit_edge313.loopexit406.unr-lcssa
  %309 = load ptr, ptr %26, align 8, !tbaa !22
  %310 = getelementptr inbounds double, ptr %309, i64 %.2267311.unr
  %311 = load double, ptr %310, align 8, !tbaa !24
  %312 = load ptr, ptr %27, align 8, !tbaa !22
  %313 = getelementptr inbounds ptr, ptr %312, i64 %29
  %314 = load ptr, ptr %313, align 8, !tbaa !28
  %315 = getelementptr inbounds double, ptr %314, i64 %.2267311.unr
  store double %311, ptr %315, align 8, !tbaa !24
  br label %._crit_edge313

._crit_edge313:                                   ; preds = %.lr.ph312.split.epil, %._crit_edge313.loopexit406.unr-lcssa, %._crit_edge.us, %.preheader307.._crit_edge313_crit_edge
  %316 = phi i64 [ %.pre, %.preheader307.._crit_edge313_crit_edge ], [ %29, %._crit_edge.us ], [ %29, %._crit_edge313.loopexit406.unr-lcssa ], [ %29, %.lr.ph312.split.epil ]
  %317 = getelementptr inbounds i8, ptr %0, i64 864
  %318 = load double, ptr %317, align 8, !tbaa !39
  %319 = getelementptr inbounds i8, ptr %0, i64 1176
  %320 = getelementptr inbounds i8, ptr %0, i64 1232
  %321 = load ptr, ptr %320, align 8, !tbaa !22
  %322 = getelementptr inbounds i8, ptr %0, i64 592
  %323 = getelementptr inbounds double, ptr %321, i64 %316
  store double %318, ptr %323, align 8, !tbaa !24
  tail call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef nonnull %322, ptr noundef %1)
  %324 = icmp eq i64 %9, 0
  br i1 %324, label %325, label %334

325:                                              ; preds = %._crit_edge313
  %326 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %16, double noundef 0.000000e+00)
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %326, ptr noundef nonnull @.str.203, ptr noundef %1)
  %327 = getelementptr inbounds i8, ptr %0, i64 736
  %328 = getelementptr inbounds i8, ptr %0, i64 800
  %329 = getelementptr inbounds i8, ptr %0, i64 872
  %330 = getelementptr inbounds i8, ptr %0, i64 568
  %331 = load i64, ptr %330, align 8, !tbaa !40
  %332 = getelementptr inbounds i8, ptr %0, i64 576
  %333 = load i64, ptr %332, align 8, !tbaa !41
  tail call void @_ZN11alglib_impl32smoothnessmonitorstartlinesearchEPNS_17smoothnessmonitorEPKNS_9ae_vectorES4_PKNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %327, ptr noundef nonnull %328, ptr noundef nonnull %329, i64 noundef %331, i64 noundef %333, ptr noundef %1)
  br label %339

334:                                              ; preds = %._crit_edge313
  %335 = getelementptr inbounds i8, ptr %0, i64 664
  %336 = getelementptr inbounds i8, ptr %0, i64 736
  %337 = getelementptr inbounds i8, ptr %0, i64 800
  %338 = getelementptr inbounds i8, ptr %0, i64 872
  tail call void @_ZN11alglib_impl29smoothnessmonitorenqueuepointEPNS_17smoothnessmonitorEPKNS_9ae_vectorEdS4_S4_PKNS_9ae_matrixEPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %335, double noundef %16, ptr noundef nonnull %336, ptr noundef nonnull %337, ptr noundef nonnull %338, ptr noundef %1)
  br label %339

339:                                              ; preds = %334, %325
  %340 = load i64, ptr %322, align 8, !tbaa !26
  %.9264314 = add nsw i64 %340, -1
  %341 = icmp sgt i64 %340, 1
  br i1 %341, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %339
  %342 = getelementptr inbounds i8, ptr %0, i64 1168
  %343 = getelementptr inbounds i8, ptr %0, i64 1112
  %344 = getelementptr inbounds i8, ptr %0, i64 952
  %345 = getelementptr inbounds i8, ptr %0, i64 1032
  br label %346

346:                                              ; preds = %.lr.ph, %354
  %.9264316 = phi i64 [ %.9264314, %.lr.ph ], [ %.9264, %354 ]
  %.9264.in315 = phi i64 [ %340, %.lr.ph ], [ %.9264316, %354 ]
  %347 = load ptr, ptr %342, align 8, !tbaa !22
  %348 = add nsw i64 %.9264.in315, -2
  %349 = getelementptr inbounds double, ptr %347, i64 %348
  %350 = load double, ptr %349, align 8, !tbaa !24
  %351 = getelementptr inbounds double, ptr %347, i64 %.9264316
  %352 = load double, ptr %351, align 8, !tbaa !24
  %353 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %350, double noundef %352)
  br i1 %353, label %._crit_edge, label %354

354:                                              ; preds = %346
  tail call void @_ZN11alglib_impl12swapelementsEPNS_9ae_vectorEllPNS_8ae_stateE(ptr noundef nonnull %343, i64 noundef %348, i64 noundef %.9264316, ptr noundef %1)
  tail call void @_ZN11alglib_impl12swapelementsEPNS_9ae_vectorEllPNS_8ae_stateE(ptr noundef nonnull %319, i64 noundef %348, i64 noundef %.9264316, ptr noundef %1)
  %355 = load i64, ptr %24, align 8, !tbaa !25
  tail call void @_ZN11alglib_impl8swaprowsEPNS_9ae_matrixElllPNS_8ae_stateE(ptr noundef nonnull %344, i64 noundef %348, i64 noundef %.9264316, i64 noundef %355, ptr noundef %1)
  %356 = load i64, ptr %0, align 8, !tbaa !27
  %357 = load i64, ptr %24, align 8, !tbaa !25
  %358 = mul nsw i64 %357, %356
  tail call void @_ZN11alglib_impl8swaprowsEPNS_9ae_matrixElllPNS_8ae_stateE(ptr noundef nonnull %345, i64 noundef %348, i64 noundef %.9264316, i64 noundef %358, ptr noundef %1)
  %.9264 = add nsw i64 %.9264316, -1
  %359 = icmp sgt i64 %.9264316, 1
  br i1 %359, label %346, label %._crit_edge, !llvm.loop !42

360:                                              ; preds = %._crit_edge
  tail call void @_ZN11alglib_impl35smoothnessmonitorfinalizelinesearchEPNS_17smoothnessmonitorEPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %1)
  br label %361

361:                                              ; preds = %._crit_edge360, %360
  %362 = phi i1 [ true, %._crit_edge360 ], [ false, %360 ]
  ret i1 %362
}

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

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

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind 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, !17, i64 1240}
!6 = !{!"_ZTSN11alglib_impl17smoothnessmonitorE", !7, i64 0, !7, i64 8, !10, i64 16, !11, i64 24, !11, i64 88, !7, i64 152, !11, i64 160, !11, i64 224, !11, i64 288, !14, i64 352, !11, i64 432, !11, i64 496, !7, i64 560, !7, i64 568, !7, i64 576, !15, i64 584, !7, i64 592, !11, i64 600, !11, i64 664, !15, i64 728, !11, i64 736, !11, i64 800, !15, i64 864, !14, i64 872, !14, i64 952, !14, i64 1032, !11, i64 1112, !11, i64 1176, !16, i64 1240, !10, i64 1504, !10, i64 1505, !7, i64 1512, !7, i64 1520, !15, i64 1528, !15, i64 1536, !10, i64 1544, !18, i64 1552, !15, i64 1848, !15, i64 1856, !19, i64 1864, !19, i64 2184, !15, i64 2504, !15, i64 2512, !20, i64 2520, !20, i64 2840, !15, i64 3160, !15, i64 3168, !21, i64 3176, !21, i64 3504, !10, i64 3832, !11, i64 3840, !11, i64 3904, !14, i64 3968, !16, i64 4048, !11, i64 4312, !11, i64 4376, !11, i64 4440, !11, i64 4504, !11, i64 4568, !11, i64 4632, !11, i64 4696, !11, i64 4760, !14, i64 4824, !14, i64 4904, !11, i64 4984, !11, i64 5048, !11, i64 5112, !11, i64 5176, !11, i64 5240, !11, i64 5304, !11, i64 5368, !11, i64 5432, !11, i64 5496, !11, i64 5560, !14, i64 5624}
!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_impl10rcommstateE", !17, i64 0, !11, i64 8, !11, i64 72, !11, i64 136, !11, i64 200}
!17 = !{!"int", !8, i64 0}
!18 = !{!"_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}
!19 = !{!"_ZTSN11alglib_impl19optguardnonc0reportE", !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, !7, i64 304, !7, i64 312}
!20 = !{!"_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, !7, i64 304, !7, i64 312}
!21 = !{!"_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, !7, i64 312, !7, i64 320}
!22 = !{!8, !8, i64 0}
!23 = !{!7, !7, i64 0}
!24 = !{!15, !15, i64 0}
!25 = !{!6, !7, i64 8}
!26 = !{!6, !7, i64 592}
!27 = !{!6, !7, i64 0}
!28 = !{!13, !13, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = distinct !{!31, !30}
!32 = !{!6, !15, i64 584}
!33 = distinct !{!33, !30}
!34 = distinct !{!34, !30}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = !{!6, !15, i64 728}
!39 = !{!6, !15, i64 864}
!40 = !{!6, !7, i64 568}
!41 = !{!6, !7, i64 576}
!42 = distinct !{!42, !30}


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