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

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

%"struct.alglib_impl::smoothnessmonitor" = type { i64, i64, i8, %"struct.alglib_impl::ae_vector", i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i8, i8, double, double, i8, %"struct.alglib_impl::optguardreport", double, double, %"struct.alglib_impl::optguardnonc1test0report", %"struct.alglib_impl::optguardnonc1test0report", double, double, %"struct.alglib_impl::optguardnonc1test1report", %"struct.alglib_impl::optguardnonc1test1report", i8, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::rcommstate", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix" }
%"struct.alglib_impl::optguardreport" = type { i8, i8, i64, double, i8, i8, i8, i64, double, i8, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_matrix" }
%"struct.alglib_impl::optguardnonc1test0report" = type { i8, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64 }
%"struct.alglib_impl::optguardnonc1test1report" = type { i8, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, i64, i64 }
%"struct.alglib_impl::rcommstate" = type { i32, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%union.anon.0 = type { ptr }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%union.anon.1 = type { ptr }

@_ZN11alglib_implL21optserv_ognoiselevelfE = external hidden global double, align 8
@_ZN11alglib_implL20optserv_ogminrating0E = external hidden global double, align 8

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl29smoothnessmonitorenqueuepointEPNS_17smoothnessmonitorEPNS_9ae_vectorEdS3_S3_PNS_9ae_matrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, double noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) #3 {
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca double, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca double, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i8, align 1
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca i32, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store ptr %1, ptr %9, align 8, !tbaa !5
  store double %2, ptr %10, align 8, !tbaa !9
  store ptr %3, ptr %11, align 8, !tbaa !5
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  store ptr %6, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  %37 = load ptr, ptr %8, align 8, !tbaa !5
  %38 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %37, i32 0, i32 0
  %39 = load i64, ptr %38, align 8, !tbaa !11
  store i64 %39, ptr %15, align 8, !tbaa !23
  %40 = load ptr, ptr %8, align 8, !tbaa !5
  %41 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %40, i32 0, i32 1
  %42 = load i64, ptr %41, align 8, !tbaa !24
  store i64 %42, ptr %16, align 8, !tbaa !23
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %43, i32 0, i32 2
  %45 = load i8, ptr %44, align 8, !tbaa !25, !range !26, !noundef !27
  %46 = trunc i8 %45 to i1
  br i1 %46, label %47, label %57

47:                                               ; preds = %7
  %48 = load ptr, ptr %8, align 8, !tbaa !5
  %49 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %48, i32 0, i32 12
  %50 = load i8, ptr %49, align 8, !tbaa !28, !range !26, !noundef !27
  %51 = trunc i8 %50 to i1
  br i1 %51, label %57, label %52

52:                                               ; preds = %47
  %53 = load ptr, ptr %8, align 8, !tbaa !5
  %54 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %53, i32 0, i32 13
  %55 = load i8, ptr %54, align 1, !tbaa !29, !range !26, !noundef !27
  %56 = trunc i8 %55 to i1
  br i1 %56, label %58, label %57

57:                                               ; preds = %52, %47, %7
  store i32 1, ptr %36, align 4
  br label %920

58:                                               ; preds = %52
  %59 = load double, ptr %10, align 8, !tbaa !9
  store double %59, ptr %19, align 8, !tbaa !9
  store i64 0, ptr %17, align 8, !tbaa !23
  br label %60

60:                                               ; preds = %74, %58
  %61 = load i64, ptr %17, align 8, !tbaa !23
  %62 = load i64, ptr %15, align 8, !tbaa !23
  %63 = sub nsw i64 %62, 1
  %64 = icmp sle i64 %61, %63
  br i1 %64, label %65, label %77

65:                                               ; preds = %60
  %66 = load double, ptr %19, align 8, !tbaa !9
  %67 = load ptr, ptr %11, align 8, !tbaa !5
  %68 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %67, i32 0, i32 4
  %69 = load ptr, ptr %68, align 8, !tbaa !30
  %70 = load i64, ptr %17, align 8, !tbaa !23
  %71 = getelementptr inbounds double, ptr %69, i64 %70
  %72 = load double, ptr %71, align 8, !tbaa !9
  %73 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %66, double %72)
  store double %73, ptr %19, align 8, !tbaa !9
  br label %74

74:                                               ; preds = %65
  %75 = load i64, ptr %17, align 8, !tbaa !23
  %76 = add nsw i64 %75, 1
  store i64 %76, ptr %17, align 8, !tbaa !23
  br label %60, !llvm.loop !31

77:                                               ; preds = %60
  store i64 0, ptr %17, align 8, !tbaa !23
  br label %78

78:                                               ; preds = %92, %77
  %79 = load i64, ptr %17, align 8, !tbaa !23
  %80 = load i64, ptr %15, align 8, !tbaa !23
  %81 = sub nsw i64 %80, 1
  %82 = icmp sle i64 %79, %81
  br i1 %82, label %83, label %95

83:                                               ; preds = %78
  %84 = load double, ptr %19, align 8, !tbaa !9
  %85 = load ptr, ptr %9, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %85, i32 0, i32 4
  %87 = load ptr, ptr %86, align 8, !tbaa !30
  %88 = load i64, ptr %17, align 8, !tbaa !23
  %89 = getelementptr inbounds double, ptr %87, i64 %88
  %90 = load double, ptr %89, align 8, !tbaa !9
  %91 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %84, double %90)
  store double %91, ptr %19, align 8, !tbaa !9
  br label %92

92:                                               ; preds = %83
  %93 = load i64, ptr %17, align 8, !tbaa !23
  %94 = add nsw i64 %93, 1
  store i64 %94, ptr %17, align 8, !tbaa !23
  br label %78, !llvm.loop !33

95:                                               ; preds = %78
  store i64 0, ptr %17, align 8, !tbaa !23
  br label %96

96:                                               ; preds = %110, %95
  %97 = load i64, ptr %17, align 8, !tbaa !23
  %98 = load i64, ptr %16, align 8, !tbaa !23
  %99 = sub nsw i64 %98, 1
  %100 = icmp sle i64 %97, %99
  br i1 %100, label %101, label %113

101:                                              ; preds = %96
  %102 = load double, ptr %19, align 8, !tbaa !9
  %103 = load ptr, ptr %12, align 8, !tbaa !5
  %104 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %103, i32 0, i32 4
  %105 = load ptr, ptr %104, align 8, !tbaa !30
  %106 = load i64, ptr %17, align 8, !tbaa !23
  %107 = getelementptr inbounds double, ptr %105, i64 %106
  %108 = load double, ptr %107, align 8, !tbaa !9
  %109 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %102, double %108)
  store double %109, ptr %19, align 8, !tbaa !9
  br label %110

110:                                              ; preds = %101
  %111 = load i64, ptr %17, align 8, !tbaa !23
  %112 = add nsw i64 %111, 1
  store i64 %112, ptr %17, align 8, !tbaa !23
  br label %96, !llvm.loop !34

113:                                              ; preds = %96
  store i64 0, ptr %17, align 8, !tbaa !23
  br label %114

114:                                              ; preds = %141, %113
  %115 = load i64, ptr %17, align 8, !tbaa !23
  %116 = load i64, ptr %16, align 8, !tbaa !23
  %117 = sub nsw i64 %116, 1
  %118 = icmp sle i64 %115, %117
  br i1 %118, label %119, label %144

119:                                              ; preds = %114
  store i64 0, ptr %18, align 8, !tbaa !23
  br label %120

120:                                              ; preds = %137, %119
  %121 = load i64, ptr %18, align 8, !tbaa !23
  %122 = load i64, ptr %15, align 8, !tbaa !23
  %123 = sub nsw i64 %122, 1
  %124 = icmp sle i64 %121, %123
  br i1 %124, label %125, label %140

125:                                              ; preds = %120
  %126 = load double, ptr %19, align 8, !tbaa !9
  %127 = load ptr, ptr %13, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %127, i32 0, i32 6
  %129 = load ptr, ptr %128, align 8, !tbaa !30
  %130 = load i64, ptr %17, align 8, !tbaa !23
  %131 = getelementptr inbounds ptr, ptr %129, i64 %130
  %132 = load ptr, ptr %131, align 8, !tbaa !5
  %133 = load i64, ptr %18, align 8, !tbaa !23
  %134 = getelementptr inbounds double, ptr %132, i64 %133
  %135 = load double, ptr %134, align 8, !tbaa !9
  %136 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %126, double %135)
  store double %136, ptr %19, align 8, !tbaa !9
  br label %137

137:                                              ; preds = %125
  %138 = load i64, ptr %18, align 8, !tbaa !23
  %139 = add nsw i64 %138, 1
  store i64 %139, ptr %18, align 8, !tbaa !23
  br label %120, !llvm.loop !35

140:                                              ; preds = %120
  br label %141

141:                                              ; preds = %140
  %142 = load i64, ptr %17, align 8, !tbaa !23
  %143 = add nsw i64 %142, 1
  store i64 %143, ptr %17, align 8, !tbaa !23
  br label %114, !llvm.loop !36

144:                                              ; preds = %114
  %145 = load double, ptr %19, align 8, !tbaa !9
  %146 = load ptr, ptr %14, align 8, !tbaa !5
  %147 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %145, ptr noundef %146)
  br i1 %147, label %151, label %148

148:                                              ; preds = %144
  %149 = load ptr, ptr %8, align 8, !tbaa !5
  %150 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %149, i32 0, i32 12
  store i8 1, ptr %150, align 8, !tbaa !28
  store i32 1, ptr %36, align 4
  br label %920

151:                                              ; preds = %144
  %152 = load ptr, ptr %8, align 8, !tbaa !5
  %153 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %152, i32 0, i32 4
  %154 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef %153, ptr noundef %154)
  %155 = load ptr, ptr %8, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %155, i32 0, i32 4
  %157 = load i64, ptr %156, align 8, !tbaa !37
  store i64 %157, ptr %20, align 8, !tbaa !23
  %158 = load ptr, ptr %8, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %158, i32 0, i32 3
  %160 = load i64, ptr %15, align 8, !tbaa !23
  %161 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %159, i64 noundef %160, ptr noundef %161)
  %162 = load ptr, ptr %8, align 8, !tbaa !5
  %163 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %162, i32 0, i32 5
  %164 = load i64, ptr %20, align 8, !tbaa !23
  %165 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %163, i64 noundef %164, ptr noundef %165)
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %166, i32 0, i32 6
  %168 = load i64, ptr %20, align 8, !tbaa !23
  %169 = load i64, ptr %15, align 8, !tbaa !23
  %170 = mul nsw i64 %168, %169
  %171 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %167, i64 noundef %170, ptr noundef %171)
  %172 = load ptr, ptr %8, align 8, !tbaa !5
  %173 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %172, i32 0, i32 7
  %174 = load i64, ptr %20, align 8, !tbaa !23
  %175 = load i64, ptr %16, align 8, !tbaa !23
  %176 = mul nsw i64 %174, %175
  %177 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %173, i64 noundef %176, ptr noundef %177)
  %178 = load ptr, ptr %8, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %178, i32 0, i32 8
  %180 = load i64, ptr %20, align 8, !tbaa !23
  %181 = load i64, ptr %16, align 8, !tbaa !23
  %182 = mul nsw i64 %180, %181
  %183 = load i64, ptr %15, align 8, !tbaa !23
  %184 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl17rmatrixgrowrowstoEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %179, i64 noundef %182, i64 noundef %183, ptr noundef %184)
  %185 = load double, ptr %10, align 8, !tbaa !9
  %186 = load ptr, ptr %8, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %186, i32 0, i32 5
  %188 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %187, i32 0, i32 4
  %189 = load ptr, ptr %188, align 8, !tbaa !30
  %190 = load i64, ptr %20, align 8, !tbaa !23
  %191 = sub nsw i64 %190, 1
  %192 = getelementptr inbounds double, ptr %189, i64 %191
  store double %185, ptr %192, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !23
  br label %193

193:                                              ; preds = %211, %151
  %194 = load i64, ptr %18, align 8, !tbaa !23
  %195 = load i64, ptr %15, align 8, !tbaa !23
  %196 = sub nsw i64 %195, 1
  %197 = icmp sle i64 %194, %196
  br i1 %197, label %198, label %214

198:                                              ; preds = %193
  %199 = load ptr, ptr %9, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %199, i32 0, i32 4
  %201 = load ptr, ptr %200, align 8, !tbaa !30
  %202 = load i64, ptr %18, align 8, !tbaa !23
  %203 = getelementptr inbounds double, ptr %201, i64 %202
  %204 = load double, ptr %203, align 8, !tbaa !9
  %205 = load ptr, ptr %8, align 8, !tbaa !5
  %206 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %205, i32 0, i32 3
  %207 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %206, i32 0, i32 4
  %208 = load ptr, ptr %207, align 8, !tbaa !30
  %209 = load i64, ptr %18, align 8, !tbaa !23
  %210 = getelementptr inbounds double, ptr %208, i64 %209
  store double %204, ptr %210, align 8, !tbaa !9
  br label %211

211:                                              ; preds = %198
  %212 = load i64, ptr %18, align 8, !tbaa !23
  %213 = add nsw i64 %212, 1
  store i64 %213, ptr %18, align 8, !tbaa !23
  br label %193, !llvm.loop !38

214:                                              ; preds = %193
  store i64 0, ptr %18, align 8, !tbaa !23
  br label %215

215:                                              ; preds = %238, %214
  %216 = load i64, ptr %18, align 8, !tbaa !23
  %217 = load i64, ptr %15, align 8, !tbaa !23
  %218 = sub nsw i64 %217, 1
  %219 = icmp sle i64 %216, %218
  br i1 %219, label %220, label %241

220:                                              ; preds = %215
  %221 = load ptr, ptr %11, align 8, !tbaa !5
  %222 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %221, i32 0, i32 4
  %223 = load ptr, ptr %222, align 8, !tbaa !30
  %224 = load i64, ptr %18, align 8, !tbaa !23
  %225 = getelementptr inbounds double, ptr %223, i64 %224
  %226 = load double, ptr %225, align 8, !tbaa !9
  %227 = load ptr, ptr %8, align 8, !tbaa !5
  %228 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %227, i32 0, i32 6
  %229 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %228, i32 0, i32 4
  %230 = load ptr, ptr %229, align 8, !tbaa !30
  %231 = load i64, ptr %20, align 8, !tbaa !23
  %232 = sub nsw i64 %231, 1
  %233 = load i64, ptr %15, align 8, !tbaa !23
  %234 = mul nsw i64 %232, %233
  %235 = load i64, ptr %18, align 8, !tbaa !23
  %236 = add nsw i64 %234, %235
  %237 = getelementptr inbounds double, ptr %230, i64 %236
  store double %226, ptr %237, align 8, !tbaa !9
  br label %238

238:                                              ; preds = %220
  %239 = load i64, ptr %18, align 8, !tbaa !23
  %240 = add nsw i64 %239, 1
  store i64 %240, ptr %18, align 8, !tbaa !23
  br label %215, !llvm.loop !39

241:                                              ; preds = %215
  store i64 0, ptr %17, align 8, !tbaa !23
  br label %242

242:                                              ; preds = %265, %241
  %243 = load i64, ptr %17, align 8, !tbaa !23
  %244 = load i64, ptr %16, align 8, !tbaa !23
  %245 = sub nsw i64 %244, 1
  %246 = icmp sle i64 %243, %245
  br i1 %246, label %247, label %268

247:                                              ; preds = %242
  %248 = load ptr, ptr %12, align 8, !tbaa !5
  %249 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %248, i32 0, i32 4
  %250 = load ptr, ptr %249, align 8, !tbaa !30
  %251 = load i64, ptr %17, align 8, !tbaa !23
  %252 = getelementptr inbounds double, ptr %250, i64 %251
  %253 = load double, ptr %252, align 8, !tbaa !9
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  %255 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %254, i32 0, i32 7
  %256 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %255, i32 0, i32 4
  %257 = load ptr, ptr %256, align 8, !tbaa !30
  %258 = load i64, ptr %20, align 8, !tbaa !23
  %259 = sub nsw i64 %258, 1
  %260 = load i64, ptr %16, align 8, !tbaa !23
  %261 = mul nsw i64 %259, %260
  %262 = load i64, ptr %17, align 8, !tbaa !23
  %263 = add nsw i64 %261, %262
  %264 = getelementptr inbounds double, ptr %257, i64 %263
  store double %253, ptr %264, align 8, !tbaa !9
  br label %265

265:                                              ; preds = %247
  %266 = load i64, ptr %17, align 8, !tbaa !23
  %267 = add nsw i64 %266, 1
  store i64 %267, ptr %17, align 8, !tbaa !23
  br label %242, !llvm.loop !40

268:                                              ; preds = %242
  store i64 0, ptr %17, align 8, !tbaa !23
  br label %269

269:                                              ; preds = %308, %268
  %270 = load i64, ptr %17, align 8, !tbaa !23
  %271 = load i64, ptr %16, align 8, !tbaa !23
  %272 = sub nsw i64 %271, 1
  %273 = icmp sle i64 %270, %272
  br i1 %273, label %274, label %311

274:                                              ; preds = %269
  store i64 0, ptr %18, align 8, !tbaa !23
  br label %275

275:                                              ; preds = %304, %274
  %276 = load i64, ptr %18, align 8, !tbaa !23
  %277 = load i64, ptr %15, align 8, !tbaa !23
  %278 = sub nsw i64 %277, 1
  %279 = icmp sle i64 %276, %278
  br i1 %279, label %280, label %307

280:                                              ; preds = %275
  %281 = load ptr, ptr %13, align 8, !tbaa !5
  %282 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %281, i32 0, i32 6
  %283 = load ptr, ptr %282, align 8, !tbaa !30
  %284 = load i64, ptr %17, align 8, !tbaa !23
  %285 = getelementptr inbounds ptr, ptr %283, i64 %284
  %286 = load ptr, ptr %285, align 8, !tbaa !5
  %287 = load i64, ptr %18, align 8, !tbaa !23
  %288 = getelementptr inbounds double, ptr %286, i64 %287
  %289 = load double, ptr %288, align 8, !tbaa !9
  %290 = load ptr, ptr %8, align 8, !tbaa !5
  %291 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %290, i32 0, i32 8
  %292 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %291, i32 0, i32 6
  %293 = load ptr, ptr %292, align 8, !tbaa !30
  %294 = load i64, ptr %20, align 8, !tbaa !23
  %295 = sub nsw i64 %294, 1
  %296 = load i64, ptr %16, align 8, !tbaa !23
  %297 = mul nsw i64 %295, %296
  %298 = load i64, ptr %17, align 8, !tbaa !23
  %299 = add nsw i64 %297, %298
  %300 = getelementptr inbounds ptr, ptr %293, i64 %299
  %301 = load ptr, ptr %300, align 8, !tbaa !5
  %302 = load i64, ptr %18, align 8, !tbaa !23
  %303 = getelementptr inbounds double, ptr %301, i64 %302
  store double %289, ptr %303, align 8, !tbaa !9
  br label %304

304:                                              ; preds = %280
  %305 = load i64, ptr %18, align 8, !tbaa !23
  %306 = add nsw i64 %305, 1
  store i64 %306, ptr %18, align 8, !tbaa !23
  br label %275, !llvm.loop !41

307:                                              ; preds = %275
  br label %308

308:                                              ; preds = %307
  %309 = load i64, ptr %17, align 8, !tbaa !23
  %310 = add nsw i64 %309, 1
  store i64 %310, ptr %17, align 8, !tbaa !23
  br label %269, !llvm.loop !42

311:                                              ; preds = %269
  %312 = load ptr, ptr %8, align 8, !tbaa !5
  %313 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %312, i32 0, i32 11
  %314 = load i64, ptr %313, align 8, !tbaa !43
  store i64 %314, ptr %21, align 8, !tbaa !23
  store i8 0, ptr %22, align 1, !tbaa !44
  store i64 0, ptr %17, align 8, !tbaa !23
  br label %315

315:                                              ; preds = %336, %311
  %316 = load i64, ptr %17, align 8, !tbaa !23
  %317 = load i64, ptr %21, align 8, !tbaa !23
  %318 = sub nsw i64 %317, 1
  %319 = icmp sle i64 %316, %318
  br i1 %319, label %320, label %339

320:                                              ; preds = %315
  %321 = load i8, ptr %22, align 1, !tbaa !44, !range !26, !noundef !27
  %322 = trunc i8 %321 to i1
  br i1 %322, label %333, label %323

323:                                              ; preds = %320
  %324 = load ptr, ptr %8, align 8, !tbaa !5
  %325 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %324, i32 0, i32 9
  %326 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %325, i32 0, i32 4
  %327 = load ptr, ptr %326, align 8, !tbaa !30
  %328 = load i64, ptr %17, align 8, !tbaa !23
  %329 = getelementptr inbounds double, ptr %327, i64 %328
  %330 = load double, ptr %329, align 8, !tbaa !9
  %331 = load double, ptr %10, align 8, !tbaa !9
  %332 = fcmp oeq double %330, %331
  br label %333

333:                                              ; preds = %323, %320
  %334 = phi i1 [ true, %320 ], [ %332, %323 ]
  %335 = zext i1 %334 to i8
  store i8 %335, ptr %22, align 1, !tbaa !44
  br label %336

336:                                              ; preds = %333
  %337 = load i64, ptr %17, align 8, !tbaa !23
  %338 = add nsw i64 %337, 1
  store i64 %338, ptr %17, align 8, !tbaa !23
  br label %315, !llvm.loop !45

339:                                              ; preds = %315
  %340 = load i8, ptr %22, align 1, !tbaa !44, !range !26, !noundef !27
  %341 = trunc i8 %340 to i1
  br i1 %341, label %460, label %342

342:                                              ; preds = %339
  %343 = load ptr, ptr %8, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %343, i32 0, i32 11
  %345 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef %344, ptr noundef %345)
  %346 = load ptr, ptr %8, align 8, !tbaa !5
  %347 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %346, i32 0, i32 11
  %348 = load i64, ptr %347, align 8, !tbaa !43
  store i64 %348, ptr %21, align 8, !tbaa !23
  %349 = load ptr, ptr %8, align 8, !tbaa !5
  %350 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %349, i32 0, i32 9
  %351 = load i64, ptr %21, align 8, !tbaa !23
  %352 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %350, i64 noundef %351, ptr noundef %352)
  %353 = load ptr, ptr %8, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %353, i32 0, i32 10
  %355 = load i64, ptr %21, align 8, !tbaa !23
  %356 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ivectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %354, i64 noundef %355, ptr noundef %356)
  %357 = load double, ptr %10, align 8, !tbaa !9
  %358 = load ptr, ptr %8, align 8, !tbaa !5
  %359 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %358, i32 0, i32 9
  %360 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %359, i32 0, i32 4
  %361 = load ptr, ptr %360, align 8, !tbaa !30
  %362 = load i64, ptr %21, align 8, !tbaa !23
  %363 = sub nsw i64 %362, 1
  %364 = getelementptr inbounds double, ptr %361, i64 %363
  store double %357, ptr %364, align 8, !tbaa !9
  %365 = load i64, ptr %20, align 8, !tbaa !23
  %366 = sub nsw i64 %365, 1
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %367, i32 0, i32 10
  %369 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %368, i32 0, i32 4
  %370 = load ptr, ptr %369, align 8, !tbaa !30
  %371 = load i64, ptr %21, align 8, !tbaa !23
  %372 = sub nsw i64 %371, 1
  %373 = getelementptr inbounds i64, ptr %370, i64 %372
  store i64 %366, ptr %373, align 8, !tbaa !23
  %374 = load i64, ptr %21, align 8, !tbaa !23
  %375 = sub nsw i64 %374, 2
  store i64 %375, ptr %17, align 8, !tbaa !23
  br label %376

376:                                              ; preds = %456, %342
  %377 = load i64, ptr %17, align 8, !tbaa !23
  %378 = icmp sge i64 %377, 0
  br i1 %378, label %379, label %459

379:                                              ; preds = %376
  %380 = load ptr, ptr %8, align 8, !tbaa !5
  %381 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %380, i32 0, i32 9
  %382 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %381, i32 0, i32 4
  %383 = load ptr, ptr %382, align 8, !tbaa !30
  %384 = load i64, ptr %17, align 8, !tbaa !23
  %385 = getelementptr inbounds double, ptr %383, i64 %384
  %386 = load double, ptr %385, align 8, !tbaa !9
  %387 = load ptr, ptr %8, align 8, !tbaa !5
  %388 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %387, i32 0, i32 9
  %389 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %388, i32 0, i32 4
  %390 = load ptr, ptr %389, align 8, !tbaa !30
  %391 = load i64, ptr %17, align 8, !tbaa !23
  %392 = add nsw i64 %391, 1
  %393 = getelementptr inbounds double, ptr %390, i64 %392
  %394 = load double, ptr %393, align 8, !tbaa !9
  %395 = fcmp ole double %386, %394
  br i1 %395, label %396, label %397

396:                                              ; preds = %379
  br label %459

397:                                              ; preds = %379
  %398 = load ptr, ptr %8, align 8, !tbaa !5
  %399 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %398, i32 0, i32 9
  %400 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %399, i32 0, i32 4
  %401 = load ptr, ptr %400, align 8, !tbaa !30
  %402 = load i64, ptr %17, align 8, !tbaa !23
  %403 = getelementptr inbounds double, ptr %401, i64 %402
  %404 = load double, ptr %403, align 8, !tbaa !9
  store double %404, ptr %19, align 8, !tbaa !9
  %405 = load ptr, ptr %8, align 8, !tbaa !5
  %406 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %405, i32 0, i32 9
  %407 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %406, i32 0, i32 4
  %408 = load ptr, ptr %407, align 8, !tbaa !30
  %409 = load i64, ptr %17, align 8, !tbaa !23
  %410 = add nsw i64 %409, 1
  %411 = getelementptr inbounds double, ptr %408, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !9
  %413 = load ptr, ptr %8, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %413, i32 0, i32 9
  %415 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %414, i32 0, i32 4
  %416 = load ptr, ptr %415, align 8, !tbaa !30
  %417 = load i64, ptr %17, align 8, !tbaa !23
  %418 = getelementptr inbounds double, ptr %416, i64 %417
  store double %412, ptr %418, align 8, !tbaa !9
  %419 = load double, ptr %19, align 8, !tbaa !9
  %420 = load ptr, ptr %8, align 8, !tbaa !5
  %421 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %420, i32 0, i32 9
  %422 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %421, i32 0, i32 4
  %423 = load ptr, ptr %422, align 8, !tbaa !30
  %424 = load i64, ptr %17, align 8, !tbaa !23
  %425 = add nsw i64 %424, 1
  %426 = getelementptr inbounds double, ptr %423, i64 %425
  store double %419, ptr %426, align 8, !tbaa !9
  %427 = load ptr, ptr %8, align 8, !tbaa !5
  %428 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %427, i32 0, i32 10
  %429 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %428, i32 0, i32 4
  %430 = load ptr, ptr %429, align 8, !tbaa !30
  %431 = load i64, ptr %17, align 8, !tbaa !23
  %432 = getelementptr inbounds i64, ptr %430, i64 %431
  %433 = load i64, ptr %432, align 8, !tbaa !23
  store i64 %433, ptr %18, align 8, !tbaa !23
  %434 = load ptr, ptr %8, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %434, i32 0, i32 10
  %436 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %435, i32 0, i32 4
  %437 = load ptr, ptr %436, align 8, !tbaa !30
  %438 = load i64, ptr %17, align 8, !tbaa !23
  %439 = add nsw i64 %438, 1
  %440 = getelementptr inbounds i64, ptr %437, i64 %439
  %441 = load i64, ptr %440, align 8, !tbaa !23
  %442 = load ptr, ptr %8, align 8, !tbaa !5
  %443 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %442, i32 0, i32 10
  %444 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %443, i32 0, i32 4
  %445 = load ptr, ptr %444, align 8, !tbaa !30
  %446 = load i64, ptr %17, align 8, !tbaa !23
  %447 = getelementptr inbounds i64, ptr %445, i64 %446
  store i64 %441, ptr %447, align 8, !tbaa !23
  %448 = load i64, ptr %18, align 8, !tbaa !23
  %449 = load ptr, ptr %8, align 8, !tbaa !5
  %450 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %449, i32 0, i32 10
  %451 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %450, i32 0, i32 4
  %452 = load ptr, ptr %451, align 8, !tbaa !30
  %453 = load i64, ptr %17, align 8, !tbaa !23
  %454 = add nsw i64 %453, 1
  %455 = getelementptr inbounds i64, ptr %452, i64 %454
  store i64 %448, ptr %455, align 8, !tbaa !23
  br label %456

456:                                              ; preds = %397
  %457 = load i64, ptr %17, align 8, !tbaa !23
  %458 = add nsw i64 %457, -1
  store i64 %458, ptr %17, align 8, !tbaa !23
  br label %376, !llvm.loop !46

459:                                              ; preds = %396, %376
  br label %460

460:                                              ; preds = %459, %339
  %461 = load ptr, ptr %8, align 8, !tbaa !5
  %462 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %461, i32 0, i32 43
  %463 = load i64, ptr %21, align 8, !tbaa !23
  %464 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %462, i64 noundef %463, ptr noundef %464)
  %465 = load ptr, ptr %8, align 8, !tbaa !5
  %466 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %465, i32 0, i32 44
  %467 = load i64, ptr %21, align 8, !tbaa !23
  %468 = load i64, ptr %15, align 8, !tbaa !23
  %469 = mul nsw i64 %467, %468
  %470 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %466, i64 noundef %469, ptr noundef %470)
  store i64 0, ptr %23, align 8, !tbaa !23
  br label %471

471:                                              ; preds = %916, %460
  %472 = load i64, ptr %23, align 8, !tbaa !23
  %473 = load i64, ptr %16, align 8, !tbaa !23
  %474 = sub nsw i64 %473, 1
  %475 = icmp sle i64 %472, %474
  br i1 %475, label %476, label %919

476:                                              ; preds = %471
  store i64 0, ptr %17, align 8, !tbaa !23
  br label %477

477:                                              ; preds = %546, %476
  %478 = load i64, ptr %17, align 8, !tbaa !23
  %479 = load i64, ptr %21, align 8, !tbaa !23
  %480 = sub nsw i64 %479, 1
  %481 = icmp sle i64 %478, %480
  br i1 %481, label %482, label %549

482:                                              ; preds = %477
  %483 = load ptr, ptr %8, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %483, i32 0, i32 7
  %485 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %484, i32 0, i32 4
  %486 = load ptr, ptr %485, align 8, !tbaa !30
  %487 = load ptr, ptr %8, align 8, !tbaa !5
  %488 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %487, i32 0, i32 10
  %489 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %488, i32 0, i32 4
  %490 = load ptr, ptr %489, align 8, !tbaa !30
  %491 = load i64, ptr %17, align 8, !tbaa !23
  %492 = getelementptr inbounds i64, ptr %490, i64 %491
  %493 = load i64, ptr %492, align 8, !tbaa !23
  %494 = load i64, ptr %16, align 8, !tbaa !23
  %495 = mul nsw i64 %493, %494
  %496 = load i64, ptr %23, align 8, !tbaa !23
  %497 = add nsw i64 %495, %496
  %498 = getelementptr inbounds double, ptr %486, i64 %497
  %499 = load double, ptr %498, align 8, !tbaa !9
  %500 = load ptr, ptr %8, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %500, i32 0, i32 43
  %502 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %501, i32 0, i32 4
  %503 = load ptr, ptr %502, align 8, !tbaa !30
  %504 = load i64, ptr %17, align 8, !tbaa !23
  %505 = getelementptr inbounds double, ptr %503, i64 %504
  store double %499, ptr %505, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !23
  br label %506

506:                                              ; preds = %542, %482
  %507 = load i64, ptr %18, align 8, !tbaa !23
  %508 = load i64, ptr %15, align 8, !tbaa !23
  %509 = sub nsw i64 %508, 1
  %510 = icmp sle i64 %507, %509
  br i1 %510, label %511, label %545

511:                                              ; preds = %506
  %512 = load ptr, ptr %8, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %512, i32 0, i32 8
  %514 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %513, i32 0, i32 6
  %515 = load ptr, ptr %514, align 8, !tbaa !30
  %516 = load ptr, ptr %8, align 8, !tbaa !5
  %517 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %516, i32 0, i32 10
  %518 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %517, i32 0, i32 4
  %519 = load ptr, ptr %518, align 8, !tbaa !30
  %520 = load i64, ptr %17, align 8, !tbaa !23
  %521 = getelementptr inbounds i64, ptr %519, i64 %520
  %522 = load i64, ptr %521, align 8, !tbaa !23
  %523 = load i64, ptr %16, align 8, !tbaa !23
  %524 = mul nsw i64 %522, %523
  %525 = load i64, ptr %23, align 8, !tbaa !23
  %526 = add nsw i64 %524, %525
  %527 = getelementptr inbounds ptr, ptr %515, i64 %526
  %528 = load ptr, ptr %527, align 8, !tbaa !5
  %529 = load i64, ptr %18, align 8, !tbaa !23
  %530 = getelementptr inbounds double, ptr %528, i64 %529
  %531 = load double, ptr %530, align 8, !tbaa !9
  %532 = load ptr, ptr %8, align 8, !tbaa !5
  %533 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %532, i32 0, i32 44
  %534 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %533, i32 0, i32 4
  %535 = load ptr, ptr %534, align 8, !tbaa !30
  %536 = load i64, ptr %17, align 8, !tbaa !23
  %537 = load i64, ptr %15, align 8, !tbaa !23
  %538 = mul nsw i64 %536, %537
  %539 = load i64, ptr %18, align 8, !tbaa !23
  %540 = add nsw i64 %538, %539
  %541 = getelementptr inbounds double, ptr %535, i64 %540
  store double %531, ptr %541, align 8, !tbaa !9
  br label %542

542:                                              ; preds = %511
  %543 = load i64, ptr %18, align 8, !tbaa !23
  %544 = add nsw i64 %543, 1
  store i64 %544, ptr %18, align 8, !tbaa !23
  br label %506, !llvm.loop !47

545:                                              ; preds = %506
  br label %546

546:                                              ; preds = %545
  %547 = load i64, ptr %17, align 8, !tbaa !23
  %548 = add nsw i64 %547, 1
  store i64 %548, ptr %17, align 8, !tbaa !23
  br label %477, !llvm.loop !48

549:                                              ; preds = %477
  %550 = load i64, ptr %23, align 8, !tbaa !23
  %551 = icmp eq i64 %550, 0
  br i1 %551, label %552, label %724

552:                                              ; preds = %549
  store i64 0, ptr %24, align 8, !tbaa !23
  br label %553

553:                                              ; preds = %720, %552
  %554 = load i64, ptr %24, align 8, !tbaa !23
  %555 = load i64, ptr %21, align 8, !tbaa !23
  %556 = sub nsw i64 %555, 4
  %557 = icmp sle i64 %554, %556
  br i1 %557, label %558, label %723

558:                                              ; preds = %553
  %559 = load ptr, ptr %8, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %559, i32 0, i32 43
  %561 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %560, i32 0, i32 4
  %562 = load ptr, ptr %561, align 8, !tbaa !30
  %563 = load i64, ptr %24, align 8, !tbaa !23
  %564 = add nsw i64 %563, 0
  %565 = getelementptr inbounds double, ptr %562, i64 %564
  %566 = load double, ptr %565, align 8, !tbaa !9
  store double %566, ptr %25, align 8, !tbaa !9
  %567 = load ptr, ptr %8, align 8, !tbaa !5
  %568 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %567, i32 0, i32 43
  %569 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %568, i32 0, i32 4
  %570 = load ptr, ptr %569, align 8, !tbaa !30
  %571 = load i64, ptr %24, align 8, !tbaa !23
  %572 = add nsw i64 %571, 1
  %573 = getelementptr inbounds double, ptr %570, i64 %572
  %574 = load double, ptr %573, align 8, !tbaa !9
  store double %574, ptr %26, align 8, !tbaa !9
  %575 = load ptr, ptr %8, align 8, !tbaa !5
  %576 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %575, i32 0, i32 43
  %577 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %576, i32 0, i32 4
  %578 = load ptr, ptr %577, align 8, !tbaa !30
  %579 = load i64, ptr %24, align 8, !tbaa !23
  %580 = add nsw i64 %579, 2
  %581 = getelementptr inbounds double, ptr %578, i64 %580
  %582 = load double, ptr %581, align 8, !tbaa !9
  store double %582, ptr %27, align 8, !tbaa !9
  %583 = load ptr, ptr %8, align 8, !tbaa !5
  %584 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %583, i32 0, i32 43
  %585 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %584, i32 0, i32 4
  %586 = load ptr, ptr %585, align 8, !tbaa !30
  %587 = load i64, ptr %24, align 8, !tbaa !23
  %588 = add nsw i64 %587, 3
  %589 = getelementptr inbounds double, ptr %586, i64 %588
  %590 = load double, ptr %589, align 8, !tbaa !9
  store double %590, ptr %28, align 8, !tbaa !9
  %591 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %592 = load double, ptr %25, align 8, !tbaa !9
  %593 = load ptr, ptr %14, align 8, !tbaa !5
  %594 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %592, ptr noundef %593)
  %595 = load ptr, ptr %14, align 8, !tbaa !5
  %596 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %594, double noundef 1.000000e+00, ptr noundef %595)
  %597 = fmul double %591, %596
  store double %597, ptr %30, align 8, !tbaa !9
  %598 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %599 = load double, ptr %26, align 8, !tbaa !9
  %600 = load ptr, ptr %14, align 8, !tbaa !5
  %601 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %599, ptr noundef %600)
  %602 = load ptr, ptr %14, align 8, !tbaa !5
  %603 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %601, double noundef 1.000000e+00, ptr noundef %602)
  %604 = fmul double %598, %603
  store double %604, ptr %31, align 8, !tbaa !9
  %605 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %606 = load double, ptr %27, align 8, !tbaa !9
  %607 = load ptr, ptr %14, align 8, !tbaa !5
  %608 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %606, ptr noundef %607)
  %609 = load ptr, ptr %14, align 8, !tbaa !5
  %610 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %608, double noundef 1.000000e+00, ptr noundef %609)
  %611 = fmul double %605, %610
  store double %611, ptr %32, align 8, !tbaa !9
  %612 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %613 = load double, ptr %28, align 8, !tbaa !9
  %614 = load ptr, ptr %14, align 8, !tbaa !5
  %615 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %613, ptr noundef %614)
  %616 = load ptr, ptr %14, align 8, !tbaa !5
  %617 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %615, double noundef 1.000000e+00, ptr noundef %616)
  %618 = fmul double %612, %617
  store double %618, ptr %33, align 8, !tbaa !9
  %619 = load double, ptr %26, align 8, !tbaa !9
  %620 = load double, ptr %25, align 8, !tbaa !9
  %621 = load double, ptr %30, align 8, !tbaa !9
  %622 = load double, ptr %31, align 8, !tbaa !9
  %623 = fadd double %621, %622
  %624 = fadd double %620, %623
  %625 = fcmp olt double %619, %624
  br i1 %625, label %626, label %630

626:                                              ; preds = %558
  %627 = load double, ptr %26, align 8, !tbaa !9
  %628 = load double, ptr %27, align 8, !tbaa !9
  %629 = fcmp olt double %627, %628
  br i1 %629, label %631, label %630

630:                                              ; preds = %626, %558
  br label %720

631:                                              ; preds = %626
  %632 = load double, ptr %25, align 8, !tbaa !9
  %633 = load double, ptr %26, align 8, !tbaa !9
  %634 = load double, ptr %27, align 8, !tbaa !9
  %635 = load double, ptr %28, align 8, !tbaa !9
  %636 = load double, ptr %30, align 8, !tbaa !9
  %637 = load double, ptr %31, align 8, !tbaa !9
  %638 = load double, ptr %32, align 8, !tbaa !9
  %639 = load double, ptr %33, align 8, !tbaa !9
  %640 = load ptr, ptr %8, align 8, !tbaa !5
  %641 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %640, i32 0, i32 9
  %642 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %641, i32 0, i32 4
  %643 = load ptr, ptr %642, align 8, !tbaa !30
  %644 = load i64, ptr %24, align 8, !tbaa !23
  %645 = add nsw i64 %644, 1
  %646 = getelementptr inbounds double, ptr %643, i64 %645
  %647 = load double, ptr %646, align 8, !tbaa !9
  %648 = load ptr, ptr %8, align 8, !tbaa !5
  %649 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %648, i32 0, i32 9
  %650 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %649, i32 0, i32 4
  %651 = load ptr, ptr %650, align 8, !tbaa !30
  %652 = load i64, ptr %24, align 8, !tbaa !23
  %653 = add nsw i64 %652, 0
  %654 = getelementptr inbounds double, ptr %651, i64 %653
  %655 = load double, ptr %654, align 8, !tbaa !9
  %656 = fsub double %647, %655
  %657 = load ptr, ptr %8, align 8, !tbaa !5
  %658 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %657, i32 0, i32 9
  %659 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %658, i32 0, i32 4
  %660 = load ptr, ptr %659, align 8, !tbaa !30
  %661 = load i64, ptr %24, align 8, !tbaa !23
  %662 = add nsw i64 %661, 2
  %663 = getelementptr inbounds double, ptr %660, i64 %662
  %664 = load double, ptr %663, align 8, !tbaa !9
  %665 = load ptr, ptr %8, align 8, !tbaa !5
  %666 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %665, i32 0, i32 9
  %667 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %666, i32 0, i32 4
  %668 = load ptr, ptr %667, align 8, !tbaa !30
  %669 = load i64, ptr %24, align 8, !tbaa !23
  %670 = add nsw i64 %669, 1
  %671 = getelementptr inbounds double, ptr %668, i64 %670
  %672 = load double, ptr %671, align 8, !tbaa !9
  %673 = fsub double %664, %672
  %674 = load ptr, ptr %8, align 8, !tbaa !5
  %675 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %674, i32 0, i32 9
  %676 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %675, i32 0, i32 4
  %677 = load ptr, ptr %676, align 8, !tbaa !30
  %678 = load i64, ptr %24, align 8, !tbaa !23
  %679 = add nsw i64 %678, 3
  %680 = getelementptr inbounds double, ptr %677, i64 %679
  %681 = load double, ptr %680, align 8, !tbaa !9
  %682 = load ptr, ptr %8, align 8, !tbaa !5
  %683 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %682, i32 0, i32 9
  %684 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %683, i32 0, i32 4
  %685 = load ptr, ptr %684, align 8, !tbaa !30
  %686 = load i64, ptr %24, align 8, !tbaa !23
  %687 = add nsw i64 %686, 2
  %688 = getelementptr inbounds double, ptr %685, i64 %687
  %689 = load double, ptr %688, align 8, !tbaa !9
  %690 = fsub double %681, %689
  %691 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_implL24optserv_testc0continuityEdddddddddddbPdS0_PNS_8ae_stateE(double noundef %632, double noundef %633, double noundef %634, double noundef %635, double noundef %636, double noundef %637, double noundef %638, double noundef %639, double noundef %656, double noundef %673, double noundef %690, i1 noundef zeroext true, ptr noundef %34, ptr noundef %35, ptr noundef %691)
  %692 = load double, ptr %34, align 8, !tbaa !9
  %693 = load double, ptr @_ZN11alglib_implL20optserv_ogminrating0E, align 8, !tbaa !9
  %694 = fcmp ogt double %692, %693
  br i1 %694, label %695, label %719

695:                                              ; preds = %631
  %696 = load double, ptr %34, align 8, !tbaa !9
  %697 = load ptr, ptr %8, align 8, !tbaa !5
  %698 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %697, i32 0, i32 14
  %699 = load double, ptr %698, align 8, !tbaa !49
  %700 = fcmp ogt double %696, %699
  br i1 %700, label %701, label %719

701:                                              ; preds = %695
  %702 = load double, ptr %34, align 8, !tbaa !9
  %703 = load ptr, ptr %8, align 8, !tbaa !5
  %704 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %703, i32 0, i32 14
  store double %702, ptr %704, align 8, !tbaa !49
  %705 = load ptr, ptr %8, align 8, !tbaa !5
  %706 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %705, i32 0, i32 17
  %707 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %706, i32 0, i32 0
  store i8 1, ptr %707, align 8, !tbaa !50
  %708 = load ptr, ptr %8, align 8, !tbaa !5
  %709 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %708, i32 0, i32 17
  %710 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %709, i32 0, i32 1
  store i8 1, ptr %710, align 1, !tbaa !51
  %711 = load double, ptr %35, align 8, !tbaa !9
  %712 = load ptr, ptr %8, align 8, !tbaa !5
  %713 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %712, i32 0, i32 17
  %714 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %713, i32 0, i32 3
  store double %711, ptr %714, align 8, !tbaa !52
  %715 = load i64, ptr %23, align 8, !tbaa !23
  %716 = load ptr, ptr %8, align 8, !tbaa !5
  %717 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %716, i32 0, i32 17
  %718 = getelementptr inbounds %"struct.alglib_impl::optguardreport", ptr %717, i32 0, i32 2
  store i64 %715, ptr %718, align 8, !tbaa !53
  br label %719

719:                                              ; preds = %701, %695, %631
  br label %720

720:                                              ; preds = %719, %630
  %721 = load i64, ptr %24, align 8, !tbaa !23
  %722 = add nsw i64 %721, 1
  store i64 %722, ptr %24, align 8, !tbaa !23
  br label %553, !llvm.loop !54

723:                                              ; preds = %553
  br label %724

724:                                              ; preds = %723, %549
  store i64 0, ptr %24, align 8, !tbaa !23
  br label %725

725:                                              ; preds = %807, %724
  %726 = load i64, ptr %24, align 8, !tbaa !23
  %727 = load i64, ptr %21, align 8, !tbaa !23
  %728 = sub nsw i64 %727, 7
  %729 = icmp sle i64 %726, %728
  br i1 %729, label %730, label %810

730:                                              ; preds = %725
  %731 = load ptr, ptr %8, align 8, !tbaa !5
  %732 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %731, i32 0, i32 43
  %733 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %732, i32 0, i32 4
  %734 = load ptr, ptr %733, align 8, !tbaa !30
  %735 = load i64, ptr %24, align 8, !tbaa !23
  %736 = add nsw i64 %735, 2
  %737 = getelementptr inbounds double, ptr %734, i64 %736
  %738 = load double, ptr %737, align 8, !tbaa !9
  store double %738, ptr %27, align 8, !tbaa !9
  %739 = load ptr, ptr %8, align 8, !tbaa !5
  %740 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %739, i32 0, i32 43
  %741 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %740, i32 0, i32 4
  %742 = load ptr, ptr %741, align 8, !tbaa !30
  %743 = load i64, ptr %24, align 8, !tbaa !23
  %744 = add nsw i64 %743, 3
  %745 = getelementptr inbounds double, ptr %742, i64 %744
  %746 = load double, ptr %745, align 8, !tbaa !9
  store double %746, ptr %28, align 8, !tbaa !9
  %747 = load ptr, ptr %8, align 8, !tbaa !5
  %748 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %747, i32 0, i32 43
  %749 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %748, i32 0, i32 4
  %750 = load ptr, ptr %749, align 8, !tbaa !30
  %751 = load i64, ptr %24, align 8, !tbaa !23
  %752 = add nsw i64 %751, 4
  %753 = getelementptr inbounds double, ptr %750, i64 %752
  %754 = load double, ptr %753, align 8, !tbaa !9
  store double %754, ptr %29, align 8, !tbaa !9
  %755 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %756 = load double, ptr %27, align 8, !tbaa !9
  %757 = load ptr, ptr %14, align 8, !tbaa !5
  %758 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %756, ptr noundef %757)
  %759 = load ptr, ptr %14, align 8, !tbaa !5
  %760 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %758, double noundef 1.000000e+00, ptr noundef %759)
  %761 = fmul double %755, %760
  store double %761, ptr %32, align 8, !tbaa !9
  %762 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %763 = load double, ptr %28, align 8, !tbaa !9
  %764 = load ptr, ptr %14, align 8, !tbaa !5
  %765 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %763, ptr noundef %764)
  %766 = load ptr, ptr %14, align 8, !tbaa !5
  %767 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %765, double noundef 1.000000e+00, ptr noundef %766)
  %768 = fmul double %762, %767
  store double %768, ptr %33, align 8, !tbaa !9
  %769 = load i64, ptr %23, align 8, !tbaa !23
  %770 = icmp eq i64 %769, 0
  br i1 %770, label %771, label %785

771:                                              ; preds = %730
  %772 = load double, ptr %28, align 8, !tbaa !9
  %773 = load double, ptr %27, align 8, !tbaa !9
  %774 = load double, ptr %32, align 8, !tbaa !9
  %775 = load double, ptr %33, align 8, !tbaa !9
  %776 = fadd double %774, %775
  %777 = fadd double %773, %776
  %778 = fcmp olt double %772, %777
  br i1 %778, label %779, label %783

779:                                              ; preds = %771
  %780 = load double, ptr %28, align 8, !tbaa !9
  %781 = load double, ptr %29, align 8, !tbaa !9
  %782 = fcmp olt double %780, %781
  br i1 %782, label %784, label %783

783:                                              ; preds = %779, %771
  br label %807

784:                                              ; preds = %779
  br label %794

785:                                              ; preds = %730
  %786 = load double, ptr %27, align 8, !tbaa !9
  %787 = load double, ptr %29, align 8, !tbaa !9
  %788 = fmul double %786, %787
  %789 = load ptr, ptr %14, align 8, !tbaa !5
  %790 = call noundef i64 @_ZN11alglib_impl7ae_signEdPNS_8ae_stateE(double noundef %788, ptr noundef %789)
  %791 = icmp sgt i64 %790, 0
  br i1 %791, label %792, label %793

792:                                              ; preds = %785
  br label %807

793:                                              ; preds = %785
  br label %794

794:                                              ; preds = %793, %784
  %795 = load ptr, ptr %8, align 8, !tbaa !5
  %796 = load i64, ptr %23, align 8, !tbaa !23
  %797 = load i64, ptr %24, align 8, !tbaa !23
  %798 = add nsw i64 %797, 0
  %799 = load i64, ptr %21, align 8, !tbaa !23
  %800 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_implL25optserv_c1continuitytest0EPNS_17smoothnessmonitorElllPNS_8ae_stateE(ptr noundef %795, i64 noundef %796, i64 noundef %798, i64 noundef %799, ptr noundef %800)
  %801 = load ptr, ptr %8, align 8, !tbaa !5
  %802 = load i64, ptr %23, align 8, !tbaa !23
  %803 = load i64, ptr %24, align 8, !tbaa !23
  %804 = add nsw i64 %803, 1
  %805 = load i64, ptr %21, align 8, !tbaa !23
  %806 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_implL25optserv_c1continuitytest0EPNS_17smoothnessmonitorElllPNS_8ae_stateE(ptr noundef %801, i64 noundef %802, i64 noundef %804, i64 noundef %805, ptr noundef %806)
  br label %807

807:                                              ; preds = %794, %792, %783
  %808 = load i64, ptr %24, align 8, !tbaa !23
  %809 = add nsw i64 %808, 1
  store i64 %809, ptr %24, align 8, !tbaa !23
  br label %725, !llvm.loop !55

810:                                              ; preds = %725
  store i64 0, ptr %24, align 8, !tbaa !23
  br label %811

811:                                              ; preds = %912, %810
  %812 = load i64, ptr %24, align 8, !tbaa !23
  %813 = load i64, ptr %21, align 8, !tbaa !23
  %814 = sub nsw i64 %813, 4
  %815 = icmp sle i64 %812, %814
  br i1 %815, label %816, label %915

816:                                              ; preds = %811
  %817 = load ptr, ptr %8, align 8, !tbaa !5
  %818 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %817, i32 0, i32 43
  %819 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %818, i32 0, i32 4
  %820 = load ptr, ptr %819, align 8, !tbaa !30
  %821 = load i64, ptr %24, align 8, !tbaa !23
  %822 = add nsw i64 %821, 0
  %823 = getelementptr inbounds double, ptr %820, i64 %822
  %824 = load double, ptr %823, align 8, !tbaa !9
  store double %824, ptr %25, align 8, !tbaa !9
  %825 = load ptr, ptr %8, align 8, !tbaa !5
  %826 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %825, i32 0, i32 43
  %827 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %826, i32 0, i32 4
  %828 = load ptr, ptr %827, align 8, !tbaa !30
  %829 = load i64, ptr %24, align 8, !tbaa !23
  %830 = add nsw i64 %829, 1
  %831 = getelementptr inbounds double, ptr %828, i64 %830
  %832 = load double, ptr %831, align 8, !tbaa !9
  store double %832, ptr %26, align 8, !tbaa !9
  %833 = load ptr, ptr %8, align 8, !tbaa !5
  %834 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %833, i32 0, i32 43
  %835 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %834, i32 0, i32 4
  %836 = load ptr, ptr %835, align 8, !tbaa !30
  %837 = load i64, ptr %24, align 8, !tbaa !23
  %838 = add nsw i64 %837, 2
  %839 = getelementptr inbounds double, ptr %836, i64 %838
  %840 = load double, ptr %839, align 8, !tbaa !9
  store double %840, ptr %27, align 8, !tbaa !9
  %841 = load ptr, ptr %8, align 8, !tbaa !5
  %842 = getelementptr inbounds %"struct.alglib_impl::smoothnessmonitor", ptr %841, i32 0, i32 43
  %843 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %842, i32 0, i32 4
  %844 = load ptr, ptr %843, align 8, !tbaa !30
  %845 = load i64, ptr %24, align 8, !tbaa !23
  %846 = add nsw i64 %845, 3
  %847 = getelementptr inbounds double, ptr %844, i64 %846
  %848 = load double, ptr %847, align 8, !tbaa !9
  store double %848, ptr %28, align 8, !tbaa !9
  %849 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %850 = load double, ptr %25, align 8, !tbaa !9
  %851 = load ptr, ptr %14, align 8, !tbaa !5
  %852 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %850, ptr noundef %851)
  %853 = load ptr, ptr %14, align 8, !tbaa !5
  %854 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %852, double noundef 1.000000e+00, ptr noundef %853)
  %855 = fmul double %849, %854
  store double %855, ptr %30, align 8, !tbaa !9
  %856 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %857 = load double, ptr %26, align 8, !tbaa !9
  %858 = load ptr, ptr %14, align 8, !tbaa !5
  %859 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %857, ptr noundef %858)
  %860 = load ptr, ptr %14, align 8, !tbaa !5
  %861 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %859, double noundef 1.000000e+00, ptr noundef %860)
  %862 = fmul double %856, %861
  store double %862, ptr %31, align 8, !tbaa !9
  %863 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %864 = load double, ptr %27, align 8, !tbaa !9
  %865 = load ptr, ptr %14, align 8, !tbaa !5
  %866 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %864, ptr noundef %865)
  %867 = load ptr, ptr %14, align 8, !tbaa !5
  %868 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %866, double noundef 1.000000e+00, ptr noundef %867)
  %869 = fmul double %863, %868
  store double %869, ptr %32, align 8, !tbaa !9
  %870 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !9
  %871 = load double, ptr %28, align 8, !tbaa !9
  %872 = load ptr, ptr %14, align 8, !tbaa !5
  %873 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %871, ptr noundef %872)
  %874 = load ptr, ptr %14, align 8, !tbaa !5
  %875 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %873, double noundef 1.000000e+00, ptr noundef %874)
  %876 = fmul double %870, %875
  store double %876, ptr %33, align 8, !tbaa !9
  %877 = load i64, ptr %23, align 8, !tbaa !23
  %878 = icmp eq i64 %877, 0
  br i1 %878, label %879, label %897

879:                                              ; preds = %816
  %880 = load double, ptr %26, align 8, !tbaa !9
  %881 = load double, ptr %25, align 8, !tbaa !9
  %882 = load double, ptr %30, align 8, !tbaa !9
  %883 = load double, ptr %31, align 8, !tbaa !9
  %884 = fadd double %882, %883
  %885 = fadd double %881, %884
  %886 = fcmp olt double %880, %885
  br i1 %886, label %887, label %895

887:                                              ; preds = %879
  %888 = load double, ptr %27, align 8, !tbaa !9
  %889 = load double, ptr %28, align 8, !tbaa !9
  %890 = load double, ptr %32, align 8, !tbaa !9
  %891 = fadd double %889, %890
  %892 = load double, ptr %33, align 8, !tbaa !9
  %893 = fadd double %891, %892
  %894 = fcmp olt double %888, %893
  br i1 %894, label %896, label %895

895:                                              ; preds = %887, %879
  br label %912

896:                                              ; preds = %887
  br label %906

897:                                              ; preds = %816
  %898 = load double, ptr %25, align 8, !tbaa !9
  %899 = load double, ptr %28, align 8, !tbaa !9
  %900 = fmul double %898, %899
  %901 = load ptr, ptr %14, align 8, !tbaa !5
  %902 = call noundef i64 @_ZN11alglib_impl7ae_signEdPNS_8ae_stateE(double noundef %900, ptr noundef %901)
  %903 = icmp sgt i64 %902, 0
  br i1 %903, label %904, label %905

904:                                              ; preds = %897
  br label %912

905:                                              ; preds = %897
  br label %906

906:                                              ; preds = %905, %896
  %907 = load ptr, ptr %8, align 8, !tbaa !5
  %908 = load i64, ptr %23, align 8, !tbaa !23
  %909 = load i64, ptr %24, align 8, !tbaa !23
  %910 = load i64, ptr %21, align 8, !tbaa !23
  %911 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_implL25optserv_c1continuitytest1EPNS_17smoothnessmonitorElllPNS_8ae_stateE(ptr noundef %907, i64 noundef %908, i64 noundef %909, i64 noundef %910, ptr noundef %911)
  br label %912

912:                                              ; preds = %906, %904, %895
  %913 = load i64, ptr %24, align 8, !tbaa !23
  %914 = add nsw i64 %913, 1
  store i64 %914, ptr %24, align 8, !tbaa !23
  br label %811, !llvm.loop !56

915:                                              ; preds = %811
  br label %916

916:                                              ; preds = %915
  %917 = load i64, ptr %23, align 8, !tbaa !23
  %918 = add nsw i64 %917, 1
  store i64 %918, ptr %23, align 8, !tbaa !23
  br label %471, !llvm.loop !57

919:                                              ; preds = %471
  store i32 0, ptr %36, align 4
  br label %920

920:                                              ; preds = %919, %148, %57
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  %921 = load i32, ptr %36, align 4
  switch i32 %921, label %923 [
    i32 0, label %922
    i32 1, label %922
  ]

922:                                              ; preds = %920, %920
  ret void

923:                                              ; preds = %920
  unreachable
}

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

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

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

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

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

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


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

@_ZN11alglib_implL21optserv_ognoiselevelfE = external hidden local_unnamed_addr global double, align 8
@_ZN11alglib_implL20optserv_ogminrating0E = external hidden local_unnamed_addr global double, align 8

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl29smoothnessmonitorenqueuepointEPNS_17smoothnessmonitorEPNS_9ae_vectorEdS3_S3_PNS_9ae_matrixEPNS_8ae_stateE(ptr noundef %0, ptr nocapture noundef readonly %1, double noundef %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, ptr noundef %6) local_unnamed_addr #3 {
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #4
  %10 = load i64, ptr %0, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %0, i64 8
  %12 = load i64, ptr %11, align 8, !tbaa !21
  %13 = getelementptr inbounds i8, ptr %0, i64 16
  %14 = load i8, ptr %13, align 8, !tbaa !22, !range !23, !noundef !24
  %15 = trunc nuw i8 %14 to i1
  br i1 %15, label %16, label %.loopexit357

16:                                               ; preds = %7
  %17 = getelementptr inbounds i8, ptr %0, i64 504
  %18 = load i8, ptr %17, align 8, !tbaa !25, !range !23, !noundef !24
  %19 = trunc nuw i8 %18 to i1
  br i1 %19, label %.loopexit357, label %20

20:                                               ; preds = %16
  %21 = getelementptr inbounds i8, ptr %0, i64 505
  %22 = load i8, ptr %21, align 1, !tbaa !26, !range !23, !noundef !24
  %23 = trunc nuw i8 %22 to i1
  br i1 %23, label %.preheader367, label %.loopexit357

.preheader367:                                    ; preds = %20
  %.not.not368 = icmp slt i64 %10, 1
  br i1 %.not.not368, label %.preheader365, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader367
  %24 = getelementptr inbounds i8, ptr %3, i64 56
  %25 = load ptr, ptr %24, align 8, !tbaa !27
  %26 = add nsw i64 %10, -1
  %xtraiter = and i64 %10, 3
  %27 = icmp ult i64 %10, 4
  br i1 %27, label %.preheader366.unr-lcssa, label %.lr.ph.new

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

.preheader366.unr-lcssa:                          ; preds = %35, %.lr.ph
  %.lcssa481.ph = phi double [ poison, %.lr.ph ], [ %50, %35 ]
  %.0370.unr = phi i64 [ 0, %.lr.ph ], [ %51, %35 ]
  %.0326369.unr = phi double [ %2, %.lr.ph ], [ %50, %35 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader366, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader366.unr-lcssa, %.epil.preheader
  %.0370.epil = phi i64 [ %31, %.epil.preheader ], [ %.0370.unr, %.preheader366.unr-lcssa ]
  %.0326369.epil = phi double [ %30, %.epil.preheader ], [ %.0326369.unr, %.preheader366.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader366.unr-lcssa ]
  %28 = getelementptr inbounds double, ptr %25, i64 %.0370.epil
  %29 = load double, ptr %28, align 8, !tbaa !28
  %30 = tail call double @llvm.fmuladd.f64(double %.0326369.epil, double 5.000000e-01, double %29)
  %31 = add nuw nsw i64 %.0370.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader366, label %.epil.preheader, !llvm.loop !29

.preheader366:                                    ; preds = %.epil.preheader, %.preheader366.unr-lcssa
  %.lcssa481 = phi double [ %.lcssa481.ph, %.preheader366.unr-lcssa ], [ %30, %.epil.preheader ]
  br i1 %.not.not368, label %.preheader365, label %.lr.ph374

.lr.ph374:                                        ; preds = %.preheader366
  %32 = getelementptr inbounds i8, ptr %1, i64 56
  %33 = load ptr, ptr %32, align 8, !tbaa !27
  %xtraiter484 = and i64 %10, 3
  %34 = icmp ult i64 %26, 3
  br i1 %34, label %.preheader365.loopexit.unr-lcssa, label %.lr.ph374.new

.lr.ph374.new:                                    ; preds = %.lr.ph374
  %unroll_iter488 = and i64 %10, 9223372036854775804
  br label %59

35:                                               ; preds = %35, %.lr.ph.new
  %.0370 = phi i64 [ 0, %.lr.ph.new ], [ %51, %35 ]
  %.0326369 = phi double [ %2, %.lr.ph.new ], [ %50, %35 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %35 ]
  %36 = getelementptr inbounds double, ptr %25, i64 %.0370
  %37 = load double, ptr %36, align 8, !tbaa !28
  %38 = tail call double @llvm.fmuladd.f64(double %.0326369, double 5.000000e-01, double %37)
  %39 = or disjoint i64 %.0370, 1
  %40 = getelementptr inbounds double, ptr %25, i64 %39
  %41 = load double, ptr %40, align 8, !tbaa !28
  %42 = tail call double @llvm.fmuladd.f64(double %38, double 5.000000e-01, double %41)
  %43 = or disjoint i64 %.0370, 2
  %44 = getelementptr inbounds double, ptr %25, i64 %43
  %45 = load double, ptr %44, align 8, !tbaa !28
  %46 = tail call double @llvm.fmuladd.f64(double %42, double 5.000000e-01, double %45)
  %47 = or disjoint i64 %.0370, 3
  %48 = getelementptr inbounds double, ptr %25, i64 %47
  %49 = load double, ptr %48, align 8, !tbaa !28
  %50 = tail call double @llvm.fmuladd.f64(double %46, double 5.000000e-01, double %49)
  %51 = add nuw nsw i64 %.0370, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader366.unr-lcssa, label %35, !llvm.loop !31

.preheader365.loopexit.unr-lcssa:                 ; preds = %59, %.lr.ph374
  %.lcssa480.ph = phi double [ poison, %.lr.ph374 ], [ %74, %59 ]
  %.1373.unr = phi i64 [ 0, %.lr.ph374 ], [ %75, %59 ]
  %.1327372.unr = phi double [ %.lcssa481, %.lr.ph374 ], [ %74, %59 ]
  %lcmp.mod486.not = icmp eq i64 %xtraiter484, 0
  br i1 %lcmp.mod486.not, label %.preheader365, label %.epil.preheader483

.epil.preheader483:                               ; preds = %.preheader365.loopexit.unr-lcssa, %.epil.preheader483
  %.1373.epil = phi i64 [ %55, %.epil.preheader483 ], [ %.1373.unr, %.preheader365.loopexit.unr-lcssa ]
  %.1327372.epil = phi double [ %54, %.epil.preheader483 ], [ %.1327372.unr, %.preheader365.loopexit.unr-lcssa ]
  %epil.iter485 = phi i64 [ %epil.iter485.next, %.epil.preheader483 ], [ 0, %.preheader365.loopexit.unr-lcssa ]
  %52 = getelementptr inbounds double, ptr %33, i64 %.1373.epil
  %53 = load double, ptr %52, align 8, !tbaa !28
  %54 = tail call double @llvm.fmuladd.f64(double %.1327372.epil, double 5.000000e-01, double %53)
  %55 = add nuw nsw i64 %.1373.epil, 1
  %epil.iter485.next = add i64 %epil.iter485, 1
  %epil.iter485.cmp.not = icmp eq i64 %epil.iter485.next, %xtraiter484
  br i1 %epil.iter485.cmp.not, label %.preheader365, label %.epil.preheader483, !llvm.loop !33

.preheader365:                                    ; preds = %.preheader365.loopexit.unr-lcssa, %.epil.preheader483, %.preheader367, %.preheader366
  %.1327.lcssa = phi double [ %.lcssa481, %.preheader366 ], [ %2, %.preheader367 ], [ %.lcssa480.ph, %.preheader365.loopexit.unr-lcssa ], [ %54, %.epil.preheader483 ]
  %.not.not340376 = icmp slt i64 %12, 1
  br i1 %.not.not340376, label %._crit_edge389, label %.lr.ph379

.lr.ph379:                                        ; preds = %.preheader365
  %56 = getelementptr inbounds i8, ptr %4, i64 56
  %57 = load ptr, ptr %56, align 8, !tbaa !27
  %xtraiter491 = and i64 %12, 3
  %58 = icmp ult i64 %12, 4
  br i1 %58, label %.preheader364.unr-lcssa, label %.lr.ph379.new

.lr.ph379.new:                                    ; preds = %.lr.ph379
  %unroll_iter495 = and i64 %12, 9223372036854775804
  br label %107

59:                                               ; preds = %59, %.lr.ph374.new
  %.1373 = phi i64 [ 0, %.lr.ph374.new ], [ %75, %59 ]
  %.1327372 = phi double [ %.lcssa481, %.lr.ph374.new ], [ %74, %59 ]
  %niter489 = phi i64 [ 0, %.lr.ph374.new ], [ %niter489.next.3, %59 ]
  %60 = getelementptr inbounds double, ptr %33, i64 %.1373
  %61 = load double, ptr %60, align 8, !tbaa !28
  %62 = tail call double @llvm.fmuladd.f64(double %.1327372, double 5.000000e-01, double %61)
  %63 = or disjoint i64 %.1373, 1
  %64 = getelementptr inbounds double, ptr %33, i64 %63
  %65 = load double, ptr %64, align 8, !tbaa !28
  %66 = tail call double @llvm.fmuladd.f64(double %62, double 5.000000e-01, double %65)
  %67 = or disjoint i64 %.1373, 2
  %68 = getelementptr inbounds double, ptr %33, i64 %67
  %69 = load double, ptr %68, align 8, !tbaa !28
  %70 = tail call double @llvm.fmuladd.f64(double %66, double 5.000000e-01, double %69)
  %71 = or disjoint i64 %.1373, 3
  %72 = getelementptr inbounds double, ptr %33, i64 %71
  %73 = load double, ptr %72, align 8, !tbaa !28
  %74 = tail call double @llvm.fmuladd.f64(double %70, double 5.000000e-01, double %73)
  %75 = add nuw nsw i64 %.1373, 4
  %niter489.next.3 = add i64 %niter489, 4
  %niter489.ncmp.3 = icmp eq i64 %niter489.next.3, %unroll_iter488
  br i1 %niter489.ncmp.3, label %.preheader365.loopexit.unr-lcssa, label %59, !llvm.loop !34

.preheader364.unr-lcssa:                          ; preds = %107, %.lr.ph379
  %.lcssa479.ph = phi double [ poison, %.lr.ph379 ], [ %122, %107 ]
  %.2378.unr = phi i64 [ 0, %.lr.ph379 ], [ %123, %107 ]
  %.2328377.unr = phi double [ %.1327.lcssa, %.lr.ph379 ], [ %122, %107 ]
  %lcmp.mod493.not = icmp eq i64 %xtraiter491, 0
  br i1 %lcmp.mod493.not, label %.preheader364, label %.epil.preheader490

.epil.preheader490:                               ; preds = %.preheader364.unr-lcssa, %.epil.preheader490
  %.2378.epil = phi i64 [ %79, %.epil.preheader490 ], [ %.2378.unr, %.preheader364.unr-lcssa ]
  %.2328377.epil = phi double [ %78, %.epil.preheader490 ], [ %.2328377.unr, %.preheader364.unr-lcssa ]
  %epil.iter492 = phi i64 [ %epil.iter492.next, %.epil.preheader490 ], [ 0, %.preheader364.unr-lcssa ]
  %76 = getelementptr inbounds double, ptr %57, i64 %.2378.epil
  %77 = load double, ptr %76, align 8, !tbaa !28
  %78 = tail call double @llvm.fmuladd.f64(double %.2328377.epil, double 5.000000e-01, double %77)
  %79 = add nuw nsw i64 %.2378.epil, 1
  %epil.iter492.next = add i64 %epil.iter492, 1
  %epil.iter492.cmp.not = icmp eq i64 %epil.iter492.next, %xtraiter491
  br i1 %epil.iter492.cmp.not, label %.preheader364, label %.epil.preheader490, !llvm.loop !35

.preheader364:                                    ; preds = %.epil.preheader490, %.preheader364.unr-lcssa
  %.lcssa479 = phi double [ %.lcssa479.ph, %.preheader364.unr-lcssa ], [ %78, %.epil.preheader490 ]
  %brmerge471 = or i1 %.not.not340376, %.not.not368
  br i1 %brmerge471, label %._crit_edge389, label %.preheader363.lr.ph.split.us

.preheader363.lr.ph.split.us:                     ; preds = %.preheader364
  %80 = getelementptr inbounds i8, ptr %5, i64 72
  %81 = load ptr, ptr %80, align 8, !tbaa !27
  %82 = add nsw i64 %10, -1
  %xtraiter498 = and i64 %10, 3
  %83 = icmp ult i64 %82, 3
  %unroll_iter502 = and i64 %10, 9223372036854775804
  %lcmp.mod500.not = icmp eq i64 %xtraiter498, 0
  br label %.preheader363.us

.preheader363.us:                                 ; preds = %._crit_edge.us, %.preheader363.lr.ph.split.us
  %.3388.us = phi i64 [ 0, %.preheader363.lr.ph.split.us ], [ %106, %._crit_edge.us ]
  %.3329387.us = phi double [ %.lcssa479, %.preheader363.lr.ph.split.us ], [ %.lcssa478, %._crit_edge.us ]
  %84 = getelementptr inbounds ptr, ptr %81, i64 %.3388.us
  %85 = load ptr, ptr %84, align 8, !tbaa !36
  br i1 %83, label %._crit_edge.us.unr-lcssa, label %.preheader363.us.new

.preheader363.us.new:                             ; preds = %.preheader363.us, %.preheader363.us.new
  %.0321383.us = phi i64 [ %101, %.preheader363.us.new ], [ 0, %.preheader363.us ]
  %.4330382.us = phi double [ %100, %.preheader363.us.new ], [ %.3329387.us, %.preheader363.us ]
  %niter503 = phi i64 [ %niter503.next.3, %.preheader363.us.new ], [ 0, %.preheader363.us ]
  %86 = getelementptr inbounds double, ptr %85, i64 %.0321383.us
  %87 = load double, ptr %86, align 8, !tbaa !28
  %88 = tail call double @llvm.fmuladd.f64(double %.4330382.us, double 5.000000e-01, double %87)
  %89 = or disjoint i64 %.0321383.us, 1
  %90 = getelementptr inbounds double, ptr %85, i64 %89
  %91 = load double, ptr %90, align 8, !tbaa !28
  %92 = tail call double @llvm.fmuladd.f64(double %88, double 5.000000e-01, double %91)
  %93 = or disjoint i64 %.0321383.us, 2
  %94 = getelementptr inbounds double, ptr %85, i64 %93
  %95 = load double, ptr %94, align 8, !tbaa !28
  %96 = tail call double @llvm.fmuladd.f64(double %92, double 5.000000e-01, double %95)
  %97 = or disjoint i64 %.0321383.us, 3
  %98 = getelementptr inbounds double, ptr %85, i64 %97
  %99 = load double, ptr %98, align 8, !tbaa !28
  %100 = tail call double @llvm.fmuladd.f64(double %96, double 5.000000e-01, double %99)
  %101 = add nuw nsw i64 %.0321383.us, 4
  %niter503.next.3 = add i64 %niter503, 4
  %niter503.ncmp.3 = icmp eq i64 %niter503.next.3, %unroll_iter502
  br i1 %niter503.ncmp.3, label %._crit_edge.us.unr-lcssa, label %.preheader363.us.new, !llvm.loop !37

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader363.us.new, %.preheader363.us
  %.lcssa478.ph = phi double [ poison, %.preheader363.us ], [ %100, %.preheader363.us.new ]
  %.0321383.us.unr = phi i64 [ 0, %.preheader363.us ], [ %101, %.preheader363.us.new ]
  %.4330382.us.unr = phi double [ %.3329387.us, %.preheader363.us ], [ %100, %.preheader363.us.new ]
  br i1 %lcmp.mod500.not, label %._crit_edge.us, label %.epil.preheader497

.epil.preheader497:                               ; preds = %._crit_edge.us.unr-lcssa, %.epil.preheader497
  %.0321383.us.epil = phi i64 [ %105, %.epil.preheader497 ], [ %.0321383.us.unr, %._crit_edge.us.unr-lcssa ]
  %.4330382.us.epil = phi double [ %104, %.epil.preheader497 ], [ %.4330382.us.unr, %._crit_edge.us.unr-lcssa ]
  %epil.iter499 = phi i64 [ %epil.iter499.next, %.epil.preheader497 ], [ 0, %._crit_edge.us.unr-lcssa ]
  %102 = getelementptr inbounds double, ptr %85, i64 %.0321383.us.epil
  %103 = load double, ptr %102, align 8, !tbaa !28
  %104 = tail call double @llvm.fmuladd.f64(double %.4330382.us.epil, double 5.000000e-01, double %103)
  %105 = add nuw nsw i64 %.0321383.us.epil, 1
  %epil.iter499.next = add i64 %epil.iter499, 1
  %epil.iter499.cmp.not = icmp eq i64 %epil.iter499.next, %xtraiter498
  br i1 %epil.iter499.cmp.not, label %._crit_edge.us, label %.epil.preheader497, !llvm.loop !38

._crit_edge.us:                                   ; preds = %.epil.preheader497, %._crit_edge.us.unr-lcssa
  %.lcssa478 = phi double [ %.lcssa478.ph, %._crit_edge.us.unr-lcssa ], [ %104, %.epil.preheader497 ]
  %106 = add nuw nsw i64 %.3388.us, 1
  %exitcond449.not = icmp eq i64 %106, %12
  br i1 %exitcond449.not, label %._crit_edge389, label %.preheader363.us, !llvm.loop !39

107:                                              ; preds = %107, %.lr.ph379.new
  %.2378 = phi i64 [ 0, %.lr.ph379.new ], [ %123, %107 ]
  %.2328377 = phi double [ %.1327.lcssa, %.lr.ph379.new ], [ %122, %107 ]
  %niter496 = phi i64 [ 0, %.lr.ph379.new ], [ %niter496.next.3, %107 ]
  %108 = getelementptr inbounds double, ptr %57, i64 %.2378
  %109 = load double, ptr %108, align 8, !tbaa !28
  %110 = tail call double @llvm.fmuladd.f64(double %.2328377, double 5.000000e-01, double %109)
  %111 = or disjoint i64 %.2378, 1
  %112 = getelementptr inbounds double, ptr %57, i64 %111
  %113 = load double, ptr %112, align 8, !tbaa !28
  %114 = tail call double @llvm.fmuladd.f64(double %110, double 5.000000e-01, double %113)
  %115 = or disjoint i64 %.2378, 2
  %116 = getelementptr inbounds double, ptr %57, i64 %115
  %117 = load double, ptr %116, align 8, !tbaa !28
  %118 = tail call double @llvm.fmuladd.f64(double %114, double 5.000000e-01, double %117)
  %119 = or disjoint i64 %.2378, 3
  %120 = getelementptr inbounds double, ptr %57, i64 %119
  %121 = load double, ptr %120, align 8, !tbaa !28
  %122 = tail call double @llvm.fmuladd.f64(double %118, double 5.000000e-01, double %121)
  %123 = add nuw nsw i64 %.2378, 4
  %niter496.next.3 = add i64 %niter496, 4
  %niter496.ncmp.3 = icmp eq i64 %niter496.next.3, %unroll_iter495
  br i1 %niter496.ncmp.3, label %.preheader364.unr-lcssa, label %107, !llvm.loop !40

._crit_edge389:                                   ; preds = %._crit_edge.us, %.preheader364, %.preheader365
  %.3329.lcssa = phi double [ %.lcssa479, %.preheader364 ], [ %.1327.lcssa, %.preheader365 ], [ %.lcssa478, %._crit_edge.us ]
  %124 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %.3329.lcssa, ptr noundef %6)
  br i1 %124, label %126, label %125

125:                                              ; preds = %._crit_edge389
  store i8 1, ptr %17, align 8, !tbaa !25
  br label %.loopexit357

126:                                              ; preds = %._crit_edge389
  %127 = getelementptr inbounds i8, ptr %0, i64 88
  tail call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef nonnull %127, ptr noundef %6)
  %128 = load i64, ptr %127, align 8, !tbaa !41
  %129 = getelementptr inbounds i8, ptr %0, i64 24
  tail call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %129, i64 noundef %10, ptr noundef %6)
  %130 = getelementptr inbounds i8, ptr %0, i64 96
  tail call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %130, i64 noundef %128, ptr noundef %6)
  %131 = getelementptr inbounds i8, ptr %0, i64 160
  %132 = mul nsw i64 %128, %10
  tail call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %131, i64 noundef %132, ptr noundef %6)
  %133 = getelementptr inbounds i8, ptr %0, i64 224
  %134 = mul nsw i64 %128, %12
  tail call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %133, i64 noundef %134, ptr noundef %6)
  %135 = getelementptr inbounds i8, ptr %0, i64 288
  tail call void @_ZN11alglib_impl17rmatrixgrowrowstoEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %135, i64 noundef %134, i64 noundef %10, ptr noundef %6)
  %136 = getelementptr inbounds i8, ptr %0, i64 152
  %137 = load ptr, ptr %136, align 8, !tbaa !27
  %138 = add nsw i64 %128, -1
  %139 = getelementptr inbounds double, ptr %137, i64 %138
  store double %2, ptr %139, align 8, !tbaa !28
  br i1 %.not.not368, label %.preheader361, label %.lr.ph393

.lr.ph393:                                        ; preds = %126
  %140 = getelementptr inbounds i8, ptr %1, i64 56
  %141 = getelementptr inbounds i8, ptr %0, i64 80
  %142 = add nsw i64 %10, -1
  %xtraiter505 = and i64 %10, 3
  %143 = icmp ult i64 %142, 3
  br i1 %143, label %.preheader362.unr-lcssa, label %.lr.ph393.new

.lr.ph393.new:                                    ; preds = %.lr.ph393
  %unroll_iter508 = and i64 %10, 9223372036854775804
  br label %154

.preheader362.unr-lcssa:                          ; preds = %154, %.lr.ph393
  %.1322392.unr = phi i64 [ 0, %.lr.ph393 ], [ %178, %154 ]
  %lcmp.mod507.not = icmp eq i64 %xtraiter505, 0
  br i1 %lcmp.mod507.not, label %.preheader362, label %.epil.preheader504

.epil.preheader504:                               ; preds = %.preheader362.unr-lcssa, %.epil.preheader504
  %.1322392.epil = phi i64 [ %149, %.epil.preheader504 ], [ %.1322392.unr, %.preheader362.unr-lcssa ]
  %epil.iter506 = phi i64 [ %epil.iter506.next, %.epil.preheader504 ], [ 0, %.preheader362.unr-lcssa ]
  %144 = load ptr, ptr %140, align 8, !tbaa !27
  %145 = getelementptr inbounds double, ptr %144, i64 %.1322392.epil
  %146 = load double, ptr %145, align 8, !tbaa !28
  %147 = load ptr, ptr %141, align 8, !tbaa !27
  %148 = getelementptr inbounds double, ptr %147, i64 %.1322392.epil
  store double %146, ptr %148, align 8, !tbaa !28
  %149 = add nuw nsw i64 %.1322392.epil, 1
  %epil.iter506.next = add i64 %epil.iter506, 1
  %epil.iter506.cmp.not = icmp eq i64 %epil.iter506.next, %xtraiter505
  br i1 %epil.iter506.cmp.not, label %.preheader362, label %.epil.preheader504, !llvm.loop !42

.preheader362:                                    ; preds = %.epil.preheader504, %.preheader362.unr-lcssa
  br i1 %.not.not368, label %.preheader361, label %.lr.ph396

.lr.ph396:                                        ; preds = %.preheader362
  %150 = getelementptr inbounds i8, ptr %3, i64 56
  %151 = getelementptr inbounds i8, ptr %0, i64 216
  %152 = mul nsw i64 %138, %10
  %xtraiter511 = and i64 %10, 3
  %153 = icmp ult i64 %142, 3
  br i1 %153, label %.preheader361.loopexit.unr-lcssa, label %.lr.ph396.new

.lr.ph396.new:                                    ; preds = %.lr.ph396
  %unroll_iter514 = and i64 %10, 9223372036854775804
  br label %190

154:                                              ; preds = %154, %.lr.ph393.new
  %.1322392 = phi i64 [ 0, %.lr.ph393.new ], [ %178, %154 ]
  %niter509 = phi i64 [ 0, %.lr.ph393.new ], [ %niter509.next.3, %154 ]
  %155 = load ptr, ptr %140, align 8, !tbaa !27
  %156 = getelementptr inbounds double, ptr %155, i64 %.1322392
  %157 = load double, ptr %156, align 8, !tbaa !28
  %158 = load ptr, ptr %141, align 8, !tbaa !27
  %159 = getelementptr inbounds double, ptr %158, i64 %.1322392
  store double %157, ptr %159, align 8, !tbaa !28
  %160 = or disjoint i64 %.1322392, 1
  %161 = load ptr, ptr %140, align 8, !tbaa !27
  %162 = getelementptr inbounds double, ptr %161, i64 %160
  %163 = load double, ptr %162, align 8, !tbaa !28
  %164 = load ptr, ptr %141, align 8, !tbaa !27
  %165 = getelementptr inbounds double, ptr %164, i64 %160
  store double %163, ptr %165, align 8, !tbaa !28
  %166 = or disjoint i64 %.1322392, 2
  %167 = load ptr, ptr %140, align 8, !tbaa !27
  %168 = getelementptr inbounds double, ptr %167, i64 %166
  %169 = load double, ptr %168, align 8, !tbaa !28
  %170 = load ptr, ptr %141, align 8, !tbaa !27
  %171 = getelementptr inbounds double, ptr %170, i64 %166
  store double %169, ptr %171, align 8, !tbaa !28
  %172 = or disjoint i64 %.1322392, 3
  %173 = load ptr, ptr %140, align 8, !tbaa !27
  %174 = getelementptr inbounds double, ptr %173, i64 %172
  %175 = load double, ptr %174, align 8, !tbaa !28
  %176 = load ptr, ptr %141, align 8, !tbaa !27
  %177 = getelementptr inbounds double, ptr %176, i64 %172
  store double %175, ptr %177, align 8, !tbaa !28
  %178 = add nuw nsw i64 %.1322392, 4
  %niter509.next.3 = add i64 %niter509, 4
  %niter509.ncmp.3 = icmp eq i64 %niter509.next.3, %unroll_iter508
  br i1 %niter509.ncmp.3, label %.preheader362.unr-lcssa, label %154, !llvm.loop !43

.preheader361.loopexit.unr-lcssa:                 ; preds = %190, %.lr.ph396
  %.2323395.unr = phi i64 [ 0, %.lr.ph396 ], [ %218, %190 ]
  %lcmp.mod513.not = icmp eq i64 %xtraiter511, 0
  br i1 %lcmp.mod513.not, label %.preheader361, label %.epil.preheader510

.epil.preheader510:                               ; preds = %.preheader361.loopexit.unr-lcssa, %.epil.preheader510
  %.2323395.epil = phi i64 [ %185, %.epil.preheader510 ], [ %.2323395.unr, %.preheader361.loopexit.unr-lcssa ]
  %epil.iter512 = phi i64 [ %epil.iter512.next, %.epil.preheader510 ], [ 0, %.preheader361.loopexit.unr-lcssa ]
  %179 = load ptr, ptr %150, align 8, !tbaa !27
  %180 = getelementptr inbounds double, ptr %179, i64 %.2323395.epil
  %181 = load double, ptr %180, align 8, !tbaa !28
  %182 = load ptr, ptr %151, align 8, !tbaa !27
  %183 = getelementptr double, ptr %182, i64 %152
  %184 = getelementptr double, ptr %183, i64 %.2323395.epil
  store double %181, ptr %184, align 8, !tbaa !28
  %185 = add nuw nsw i64 %.2323395.epil, 1
  %epil.iter512.next = add i64 %epil.iter512, 1
  %epil.iter512.cmp.not = icmp eq i64 %epil.iter512.next, %xtraiter511
  br i1 %epil.iter512.cmp.not, label %.preheader361, label %.epil.preheader510, !llvm.loop !44

.preheader361:                                    ; preds = %.preheader361.loopexit.unr-lcssa, %.epil.preheader510, %126, %.preheader362
  br i1 %.not.not340376, label %._crit_edge405, label %.lr.ph399

.lr.ph399:                                        ; preds = %.preheader361
  %186 = getelementptr inbounds i8, ptr %4, i64 56
  %187 = getelementptr inbounds i8, ptr %0, i64 280
  %188 = mul nsw i64 %138, %12
  %xtraiter517 = and i64 %12, 3
  %189 = icmp ult i64 %12, 4
  br i1 %189, label %.preheader360.unr-lcssa, label %.lr.ph399.new

.lr.ph399.new:                                    ; preds = %.lr.ph399
  %unroll_iter520 = and i64 %12, 9223372036854775804
  br label %263

190:                                              ; preds = %190, %.lr.ph396.new
  %.2323395 = phi i64 [ 0, %.lr.ph396.new ], [ %218, %190 ]
  %niter515 = phi i64 [ 0, %.lr.ph396.new ], [ %niter515.next.3, %190 ]
  %191 = load ptr, ptr %150, align 8, !tbaa !27
  %192 = getelementptr inbounds double, ptr %191, i64 %.2323395
  %193 = load double, ptr %192, align 8, !tbaa !28
  %194 = load ptr, ptr %151, align 8, !tbaa !27
  %195 = getelementptr double, ptr %194, i64 %152
  %196 = getelementptr double, ptr %195, i64 %.2323395
  store double %193, ptr %196, align 8, !tbaa !28
  %197 = or disjoint i64 %.2323395, 1
  %198 = load ptr, ptr %150, align 8, !tbaa !27
  %199 = getelementptr inbounds double, ptr %198, i64 %197
  %200 = load double, ptr %199, align 8, !tbaa !28
  %201 = load ptr, ptr %151, align 8, !tbaa !27
  %202 = getelementptr double, ptr %201, i64 %152
  %203 = getelementptr double, ptr %202, i64 %197
  store double %200, ptr %203, align 8, !tbaa !28
  %204 = or disjoint i64 %.2323395, 2
  %205 = load ptr, ptr %150, align 8, !tbaa !27
  %206 = getelementptr inbounds double, ptr %205, i64 %204
  %207 = load double, ptr %206, align 8, !tbaa !28
  %208 = load ptr, ptr %151, align 8, !tbaa !27
  %209 = getelementptr double, ptr %208, i64 %152
  %210 = getelementptr double, ptr %209, i64 %204
  store double %207, ptr %210, align 8, !tbaa !28
  %211 = or disjoint i64 %.2323395, 3
  %212 = load ptr, ptr %150, align 8, !tbaa !27
  %213 = getelementptr inbounds double, ptr %212, i64 %211
  %214 = load double, ptr %213, align 8, !tbaa !28
  %215 = load ptr, ptr %151, align 8, !tbaa !27
  %216 = getelementptr double, ptr %215, i64 %152
  %217 = getelementptr double, ptr %216, i64 %211
  store double %214, ptr %217, align 8, !tbaa !28
  %218 = add nuw nsw i64 %.2323395, 4
  %niter515.next.3 = add i64 %niter515, 4
  %niter515.ncmp.3 = icmp eq i64 %niter515.next.3, %unroll_iter514
  br i1 %niter515.ncmp.3, label %.preheader361.loopexit.unr-lcssa, label %190, !llvm.loop !45

.preheader360.unr-lcssa:                          ; preds = %263, %.lr.ph399
  %.4398.unr = phi i64 [ 0, %.lr.ph399 ], [ %291, %263 ]
  %lcmp.mod519.not = icmp eq i64 %xtraiter517, 0
  br i1 %lcmp.mod519.not, label %.preheader360, label %.epil.preheader516

.epil.preheader516:                               ; preds = %.preheader360.unr-lcssa, %.epil.preheader516
  %.4398.epil = phi i64 [ %225, %.epil.preheader516 ], [ %.4398.unr, %.preheader360.unr-lcssa ]
  %epil.iter518 = phi i64 [ %epil.iter518.next, %.epil.preheader516 ], [ 0, %.preheader360.unr-lcssa ]
  %219 = load ptr, ptr %186, align 8, !tbaa !27
  %220 = getelementptr inbounds double, ptr %219, i64 %.4398.epil
  %221 = load double, ptr %220, align 8, !tbaa !28
  %222 = load ptr, ptr %187, align 8, !tbaa !27
  %223 = getelementptr double, ptr %222, i64 %188
  %224 = getelementptr double, ptr %223, i64 %.4398.epil
  store double %221, ptr %224, align 8, !tbaa !28
  %225 = add nuw nsw i64 %.4398.epil, 1
  %epil.iter518.next = add i64 %epil.iter518, 1
  %epil.iter518.cmp.not = icmp eq i64 %epil.iter518.next, %xtraiter517
  br i1 %epil.iter518.cmp.not, label %.preheader360, label %.epil.preheader516, !llvm.loop !46

.preheader360:                                    ; preds = %.epil.preheader516, %.preheader360.unr-lcssa
  br i1 %.not.not340376, label %._crit_edge405, label %.preheader359.lr.ph

.preheader359.lr.ph:                              ; preds = %.preheader360
  %226 = getelementptr inbounds i8, ptr %5, i64 72
  %227 = getelementptr inbounds i8, ptr %0, i64 360
  %228 = mul nsw i64 %138, %12
  br i1 %.not.not368, label %._crit_edge405, label %.preheader359.us.preheader

.preheader359.us.preheader:                       ; preds = %.preheader359.lr.ph
  %xtraiter523 = and i64 %10, 1
  %229 = icmp eq i64 %10, 1
  %unroll_iter526 = and i64 %10, 9223372036854775806
  %lcmp.mod525.not = icmp eq i64 %xtraiter523, 0
  br label %.preheader359.us

.preheader359.us:                                 ; preds = %.preheader359.us.preheader, %._crit_edge.us406
  %.5404.us = phi i64 [ %262, %._crit_edge.us406 ], [ 0, %.preheader359.us.preheader ]
  br i1 %229, label %._crit_edge.us406.unr-lcssa, label %.preheader359.us.new

.preheader359.us.new:                             ; preds = %.preheader359.us, %.preheader359.us.new
  %.3324401.us = phi i64 [ %251, %.preheader359.us.new ], [ 0, %.preheader359.us ]
  %niter527 = phi i64 [ %niter527.next.1, %.preheader359.us.new ], [ 0, %.preheader359.us ]
  %230 = load ptr, ptr %226, align 8, !tbaa !27
  %231 = getelementptr inbounds ptr, ptr %230, i64 %.5404.us
  %232 = load ptr, ptr %231, align 8, !tbaa !36
  %233 = getelementptr inbounds double, ptr %232, i64 %.3324401.us
  %234 = load double, ptr %233, align 8, !tbaa !28
  %235 = load ptr, ptr %227, align 8, !tbaa !27
  %236 = getelementptr ptr, ptr %235, i64 %228
  %237 = getelementptr ptr, ptr %236, i64 %.5404.us
  %238 = load ptr, ptr %237, align 8, !tbaa !36
  %239 = getelementptr inbounds double, ptr %238, i64 %.3324401.us
  store double %234, ptr %239, align 8, !tbaa !28
  %240 = or disjoint i64 %.3324401.us, 1
  %241 = load ptr, ptr %226, align 8, !tbaa !27
  %242 = getelementptr inbounds ptr, ptr %241, i64 %.5404.us
  %243 = load ptr, ptr %242, align 8, !tbaa !36
  %244 = getelementptr inbounds double, ptr %243, i64 %240
  %245 = load double, ptr %244, align 8, !tbaa !28
  %246 = load ptr, ptr %227, align 8, !tbaa !27
  %247 = getelementptr ptr, ptr %246, i64 %228
  %248 = getelementptr ptr, ptr %247, i64 %.5404.us
  %249 = load ptr, ptr %248, align 8, !tbaa !36
  %250 = getelementptr inbounds double, ptr %249, i64 %240
  store double %245, ptr %250, align 8, !tbaa !28
  %251 = add nuw nsw i64 %.3324401.us, 2
  %niter527.next.1 = add i64 %niter527, 2
  %niter527.ncmp.1 = icmp eq i64 %niter527.next.1, %unroll_iter526
  br i1 %niter527.ncmp.1, label %._crit_edge.us406.unr-lcssa, label %.preheader359.us.new, !llvm.loop !47

._crit_edge.us406.unr-lcssa:                      ; preds = %.preheader359.us.new, %.preheader359.us
  %.3324401.us.unr = phi i64 [ 0, %.preheader359.us ], [ %251, %.preheader359.us.new ]
  br i1 %lcmp.mod525.not, label %._crit_edge.us406, label %._crit_edge.us406.epilog-lcssa

._crit_edge.us406.epilog-lcssa:                   ; preds = %._crit_edge.us406.unr-lcssa
  %252 = load ptr, ptr %226, align 8, !tbaa !27
  %253 = getelementptr inbounds ptr, ptr %252, i64 %.5404.us
  %254 = load ptr, ptr %253, align 8, !tbaa !36
  %255 = getelementptr inbounds double, ptr %254, i64 %.3324401.us.unr
  %256 = load double, ptr %255, align 8, !tbaa !28
  %257 = load ptr, ptr %227, align 8, !tbaa !27
  %258 = getelementptr ptr, ptr %257, i64 %228
  %259 = getelementptr ptr, ptr %258, i64 %.5404.us
  %260 = load ptr, ptr %259, align 8, !tbaa !36
  %261 = getelementptr inbounds double, ptr %260, i64 %.3324401.us.unr
  store double %256, ptr %261, align 8, !tbaa !28
  br label %._crit_edge.us406

._crit_edge.us406:                                ; preds = %._crit_edge.us406.unr-lcssa, %._crit_edge.us406.epilog-lcssa
  %262 = add nuw nsw i64 %.5404.us, 1
  %exitcond454.not = icmp eq i64 %262, %12
  br i1 %exitcond454.not, label %._crit_edge405, label %.preheader359.us, !llvm.loop !48

263:                                              ; preds = %263, %.lr.ph399.new
  %.4398 = phi i64 [ 0, %.lr.ph399.new ], [ %291, %263 ]
  %niter521 = phi i64 [ 0, %.lr.ph399.new ], [ %niter521.next.3, %263 ]
  %264 = load ptr, ptr %186, align 8, !tbaa !27
  %265 = getelementptr inbounds double, ptr %264, i64 %.4398
  %266 = load double, ptr %265, align 8, !tbaa !28
  %267 = load ptr, ptr %187, align 8, !tbaa !27
  %268 = getelementptr double, ptr %267, i64 %188
  %269 = getelementptr double, ptr %268, i64 %.4398
  store double %266, ptr %269, align 8, !tbaa !28
  %270 = or disjoint i64 %.4398, 1
  %271 = load ptr, ptr %186, align 8, !tbaa !27
  %272 = getelementptr inbounds double, ptr %271, i64 %270
  %273 = load double, ptr %272, align 8, !tbaa !28
  %274 = load ptr, ptr %187, align 8, !tbaa !27
  %275 = getelementptr double, ptr %274, i64 %188
  %276 = getelementptr double, ptr %275, i64 %270
  store double %273, ptr %276, align 8, !tbaa !28
  %277 = or disjoint i64 %.4398, 2
  %278 = load ptr, ptr %186, align 8, !tbaa !27
  %279 = getelementptr inbounds double, ptr %278, i64 %277
  %280 = load double, ptr %279, align 8, !tbaa !28
  %281 = load ptr, ptr %187, align 8, !tbaa !27
  %282 = getelementptr double, ptr %281, i64 %188
  %283 = getelementptr double, ptr %282, i64 %277
  store double %280, ptr %283, align 8, !tbaa !28
  %284 = or disjoint i64 %.4398, 3
  %285 = load ptr, ptr %186, align 8, !tbaa !27
  %286 = getelementptr inbounds double, ptr %285, i64 %284
  %287 = load double, ptr %286, align 8, !tbaa !28
  %288 = load ptr, ptr %187, align 8, !tbaa !27
  %289 = getelementptr double, ptr %288, i64 %188
  %290 = getelementptr double, ptr %289, i64 %284
  store double %287, ptr %290, align 8, !tbaa !28
  %291 = add nuw nsw i64 %.4398, 4
  %niter521.next.3 = add i64 %niter521, 4
  %niter521.ncmp.3 = icmp eq i64 %niter521.next.3, %unroll_iter520
  br i1 %niter521.ncmp.3, label %.preheader360.unr-lcssa, label %263, !llvm.loop !49

._crit_edge405:                                   ; preds = %._crit_edge.us406, %.preheader361, %.preheader359.lr.ph, %.preheader360
  %292 = getelementptr inbounds i8, ptr %0, i64 496
  %293 = load i64, ptr %292, align 8, !tbaa !50
  %.not.not346407 = icmp sgt i64 %293, 0
  br i1 %.not.not346407, label %.lr.ph410, label %.critedge

.lr.ph410:                                        ; preds = %._crit_edge405
  %294 = getelementptr inbounds i8, ptr %0, i64 424
  br label %.backedge

.backedge:                                        ; preds = %.backedge.backedge, %.lr.ph410
  %.6409 = phi i64 [ 0, %.lr.ph410 ], [ %.6409.be, %.backedge.backedge ]
  %.0319408 = phi i1 [ false, %.lr.ph410 ], [ %.0319408.be, %.backedge.backedge ]
  br i1 %.0319408, label %.thread, label %295

295:                                              ; preds = %.backedge
  %296 = load ptr, ptr %294, align 8, !tbaa !27
  %297 = getelementptr inbounds double, ptr %296, i64 %.6409
  %298 = load double, ptr %297, align 8, !tbaa !28
  %299 = fcmp oeq double %298, %2
  %300 = add nuw nsw i64 %.6409, 1
  %exitcond455.not = icmp eq i64 %300, %293
  br i1 %exitcond455.not, label %._crit_edge, label %.backedge.backedge

.backedge.backedge:                               ; preds = %295, %.thread
  %.6409.be = phi i64 [ %300, %295 ], [ %301, %.thread ]
  %.0319408.be = phi i1 [ %299, %295 ], [ true, %.thread ]
  br label %.backedge, !llvm.loop !51

.thread:                                          ; preds = %.backedge
  %301 = add nuw nsw i64 %.6409, 1
  %exitcond455.not464 = icmp eq i64 %301, %293
  br i1 %exitcond455.not464, label %.loopexit358, label %.backedge.backedge

._crit_edge:                                      ; preds = %295
  br i1 %299, label %.loopexit358, label %.critedge

.critedge:                                        ; preds = %._crit_edge405, %._crit_edge
  tail call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef nonnull %292, ptr noundef %6)
  %302 = load i64, ptr %292, align 8, !tbaa !50
  %303 = getelementptr inbounds i8, ptr %0, i64 368
  tail call void @_ZN11alglib_impl13rvectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %303, i64 noundef %302, ptr noundef %6)
  %304 = getelementptr inbounds i8, ptr %0, i64 432
  tail call void @_ZN11alglib_impl13ivectorgrowtoEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %304, i64 noundef %302, ptr noundef %6)
  %305 = getelementptr inbounds i8, ptr %0, i64 424
  %306 = load ptr, ptr %305, align 8, !tbaa !27
  %307 = add nsw i64 %302, -1
  %308 = getelementptr inbounds double, ptr %306, i64 %307
  store double %2, ptr %308, align 8, !tbaa !28
  %309 = getelementptr inbounds i8, ptr %0, i64 488
  %310 = load ptr, ptr %309, align 8, !tbaa !27
  %311 = getelementptr inbounds i64, ptr %310, i64 %307
  store i64 %138, ptr %311, align 8, !tbaa !52
  %312 = icmp sgt i64 %302, 1
  br i1 %312, label %.lr.ph414.preheader, label %.loopexit358

.lr.ph414.preheader:                              ; preds = %.critedge
  %313 = add nsw i64 %302, -2
  br label %.lr.ph414

.lr.ph414:                                        ; preds = %.lr.ph414.preheader, %321
  %.7412 = phi i64 [ %331, %321 ], [ %313, %.lr.ph414.preheader ]
  %314 = load ptr, ptr %305, align 8, !tbaa !27
  %315 = getelementptr inbounds double, ptr %314, i64 %.7412
  %316 = load double, ptr %315, align 8, !tbaa !28
  %317 = add nuw nsw i64 %.7412, 1
  %318 = getelementptr inbounds double, ptr %314, i64 %317
  %319 = load double, ptr %318, align 8, !tbaa !28
  %320 = fcmp ugt double %316, %319
  br i1 %320, label %321, label %.loopexit358

321:                                              ; preds = %.lr.ph414
  store double %319, ptr %315, align 8, !tbaa !28
  %322 = load ptr, ptr %305, align 8, !tbaa !27
  %323 = getelementptr inbounds double, ptr %322, i64 %317
  store double %316, ptr %323, align 8, !tbaa !28
  %324 = load ptr, ptr %309, align 8, !tbaa !27
  %325 = getelementptr inbounds i64, ptr %324, i64 %.7412
  %326 = load i64, ptr %325, align 8, !tbaa !52
  %327 = getelementptr inbounds i64, ptr %324, i64 %317
  %328 = load i64, ptr %327, align 8, !tbaa !52
  store i64 %328, ptr %325, align 8, !tbaa !52
  %329 = load ptr, ptr %309, align 8, !tbaa !27
  %330 = getelementptr inbounds i64, ptr %329, i64 %317
  store i64 %326, ptr %330, align 8, !tbaa !52
  %331 = add nsw i64 %.7412, -1
  %332 = icmp sgt i64 %.7412, 0
  br i1 %332, label %.lr.ph414, label %.loopexit358, !llvm.loop !53

.loopexit358:                                     ; preds = %.thread, %.lr.ph414, %321, %.critedge, %._crit_edge
  %.0320 = phi i64 [ %293, %._crit_edge ], [ %302, %.critedge ], [ %302, %321 ], [ %302, %.lr.ph414 ], [ %293, %.thread ]
  %333 = getelementptr inbounds i8, ptr %0, i64 3376
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %333, i64 noundef %.0320, ptr noundef %6)
  %334 = getelementptr inbounds i8, ptr %0, i64 3440
  %335 = mul nsw i64 %.0320, %10
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %334, i64 noundef %335, ptr noundef %6)
  br i1 %.not.not340376, label %.loopexit357, label %.preheader356.lr.ph

.preheader356.lr.ph:                              ; preds = %.loopexit358
  %.not.not348421 = icmp sgt i64 %.0320, 0
  %336 = getelementptr inbounds i8, ptr %0, i64 280
  %337 = getelementptr inbounds i8, ptr %0, i64 488
  %338 = getelementptr inbounds i8, ptr %0, i64 3432
  %339 = getelementptr inbounds i8, ptr %0, i64 360
  %340 = getelementptr inbounds i8, ptr %0, i64 3496
  %.not425 = icmp slt i64 %.0320, 4
  %341 = getelementptr inbounds i8, ptr %0, i64 424
  %342 = getelementptr inbounds i8, ptr %0, i64 512
  %343 = getelementptr inbounds i8, ptr %0, i64 536
  %344 = getelementptr inbounds i8, ptr %0, i64 537
  %345 = getelementptr inbounds i8, ptr %0, i64 552
  %346 = getelementptr inbounds i8, ptr %0, i64 544
  %.not349428 = icmp slt i64 %.0320, 7
  %347 = add i64 %.0320, -3
  %348 = add nsw i64 %.0320, -7
  %xtraiter529 = and i64 %10, 1
  %349 = icmp eq i64 %10, 1
  %unroll_iter532 = and i64 %10, 9223372036854775806
  %lcmp.mod531.not = icmp eq i64 %xtraiter529, 0
  br label %.preheader356

.preheader356:                                    ; preds = %.preheader356.lr.ph, %._crit_edge435
  %.0318437 = phi i64 [ 0, %.preheader356.lr.ph ], [ %527, %._crit_edge435 ]
  br i1 %.not.not348421, label %.lr.ph423, label %._crit_edge435

.lr.ph423:                                        ; preds = %.preheader356, %._crit_edge420
  %.8422 = phi i64 [ %402, %._crit_edge420 ], [ 0, %.preheader356 ]
  %350 = load ptr, ptr %336, align 8, !tbaa !27
  %351 = load ptr, ptr %337, align 8, !tbaa !27
  %352 = getelementptr inbounds i64, ptr %351, i64 %.8422
  %353 = load i64, ptr %352, align 8, !tbaa !52
  %354 = mul nsw i64 %353, %12
  %355 = getelementptr double, ptr %350, i64 %354
  %356 = getelementptr double, ptr %355, i64 %.0318437
  %357 = load double, ptr %356, align 8, !tbaa !28
  %358 = load ptr, ptr %338, align 8, !tbaa !27
  %359 = getelementptr inbounds double, ptr %358, i64 %.8422
  store double %357, ptr %359, align 8, !tbaa !28
  br i1 %.not.not368, label %._crit_edge420, label %.lr.ph419

.lr.ph419:                                        ; preds = %.lr.ph423
  %360 = mul nuw nsw i64 %.8422, %10
  br i1 %349, label %._crit_edge420.loopexit.unr-lcssa, label %.lr.ph419.new

.lr.ph419.new:                                    ; preds = %.lr.ph419, %.lr.ph419.new
  %.4325417 = phi i64 [ %388, %.lr.ph419.new ], [ 0, %.lr.ph419 ]
  %niter533 = phi i64 [ %niter533.next.1, %.lr.ph419.new ], [ 0, %.lr.ph419 ]
  %361 = load ptr, ptr %339, align 8, !tbaa !27
  %362 = load ptr, ptr %337, align 8, !tbaa !27
  %363 = getelementptr inbounds i64, ptr %362, i64 %.8422
  %364 = load i64, ptr %363, align 8, !tbaa !52
  %365 = mul nsw i64 %364, %12
  %366 = getelementptr ptr, ptr %361, i64 %365
  %367 = getelementptr ptr, ptr %366, i64 %.0318437
  %368 = load ptr, ptr %367, align 8, !tbaa !36
  %369 = getelementptr inbounds double, ptr %368, i64 %.4325417
  %370 = load double, ptr %369, align 8, !tbaa !28
  %371 = load ptr, ptr %340, align 8, !tbaa !27
  %372 = getelementptr double, ptr %371, i64 %360
  %373 = getelementptr double, ptr %372, i64 %.4325417
  store double %370, ptr %373, align 8, !tbaa !28
  %374 = or disjoint i64 %.4325417, 1
  %375 = load ptr, ptr %339, align 8, !tbaa !27
  %376 = load ptr, ptr %337, align 8, !tbaa !27
  %377 = getelementptr inbounds i64, ptr %376, i64 %.8422
  %378 = load i64, ptr %377, align 8, !tbaa !52
  %379 = mul nsw i64 %378, %12
  %380 = getelementptr ptr, ptr %375, i64 %379
  %381 = getelementptr ptr, ptr %380, i64 %.0318437
  %382 = load ptr, ptr %381, align 8, !tbaa !36
  %383 = getelementptr inbounds double, ptr %382, i64 %374
  %384 = load double, ptr %383, align 8, !tbaa !28
  %385 = load ptr, ptr %340, align 8, !tbaa !27
  %386 = getelementptr double, ptr %385, i64 %360
  %387 = getelementptr double, ptr %386, i64 %374
  store double %384, ptr %387, align 8, !tbaa !28
  %388 = add nuw nsw i64 %.4325417, 2
  %niter533.next.1 = add i64 %niter533, 2
  %niter533.ncmp.1 = icmp eq i64 %niter533.next.1, %unroll_iter532
  br i1 %niter533.ncmp.1, label %._crit_edge420.loopexit.unr-lcssa, label %.lr.ph419.new, !llvm.loop !54

._crit_edge420.loopexit.unr-lcssa:                ; preds = %.lr.ph419.new, %.lr.ph419
  %.4325417.unr = phi i64 [ 0, %.lr.ph419 ], [ %388, %.lr.ph419.new ]
  br i1 %lcmp.mod531.not, label %._crit_edge420, label %._crit_edge420.loopexit.epilog-lcssa

._crit_edge420.loopexit.epilog-lcssa:             ; preds = %._crit_edge420.loopexit.unr-lcssa
  %389 = load ptr, ptr %339, align 8, !tbaa !27
  %390 = load ptr, ptr %337, align 8, !tbaa !27
  %391 = getelementptr inbounds i64, ptr %390, i64 %.8422
  %392 = load i64, ptr %391, align 8, !tbaa !52
  %393 = mul nsw i64 %392, %12
  %394 = getelementptr ptr, ptr %389, i64 %393
  %395 = getelementptr ptr, ptr %394, i64 %.0318437
  %396 = load ptr, ptr %395, align 8, !tbaa !36
  %397 = getelementptr inbounds double, ptr %396, i64 %.4325417.unr
  %398 = load double, ptr %397, align 8, !tbaa !28
  %399 = load ptr, ptr %340, align 8, !tbaa !27
  %400 = getelementptr double, ptr %399, i64 %360
  %401 = getelementptr double, ptr %400, i64 %.4325417.unr
  store double %398, ptr %401, align 8, !tbaa !28
  br label %._crit_edge420

._crit_edge420:                                   ; preds = %._crit_edge420.loopexit.epilog-lcssa, %._crit_edge420.loopexit.unr-lcssa, %.lr.ph423
  %402 = add nuw nsw i64 %.8422, 1
  %exitcond457.not = icmp eq i64 %402, %.0320
  br i1 %exitcond457.not, label %._crit_edge424, label %.lr.ph423, !llvm.loop !55

._crit_edge424:                                   ; preds = %._crit_edge420
  %403 = icmp ne i64 %.0318437, 0
  %brmerge = or i1 %403, %.not425
  br i1 %brmerge, label %.loopexit, label %.lr.ph427

.lr.ph427:                                        ; preds = %._crit_edge424, %457
  %.0315426 = phi i64 [ %407, %457 ], [ 0, %._crit_edge424 ]
  %404 = load ptr, ptr %338, align 8, !tbaa !27
  %405 = getelementptr inbounds double, ptr %404, i64 %.0315426
  %406 = load double, ptr %405, align 8, !tbaa !28
  %407 = add nuw nsw i64 %.0315426, 1
  %408 = getelementptr inbounds double, ptr %404, i64 %407
  %409 = load double, ptr %408, align 8, !tbaa !28
  %410 = add nuw nsw i64 %.0315426, 2
  %411 = getelementptr inbounds double, ptr %404, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !28
  %413 = add nuw nsw i64 %.0315426, 3
  %414 = getelementptr inbounds double, ptr %404, i64 %413
  %415 = load double, ptr %414, align 8, !tbaa !28
  %416 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %417 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %406, ptr noundef %6)
  %418 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %417, double noundef 1.000000e+00, ptr noundef %6)
  %419 = fmul double %416, %418
  %420 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %421 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %409, ptr noundef %6)
  %422 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %421, double noundef 1.000000e+00, ptr noundef %6)
  %423 = fmul double %420, %422
  %424 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %425 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %412, ptr noundef %6)
  %426 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %425, double noundef 1.000000e+00, ptr noundef %6)
  %427 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %428 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %415, ptr noundef %6)
  %429 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %428, double noundef 1.000000e+00, ptr noundef %6)
  %430 = fadd double %419, %423
  %431 = fadd double %406, %430
  %432 = fcmp olt double %409, %431
  %433 = fcmp olt double %409, %412
  %or.cond = select i1 %432, i1 %433, i1 false
  br i1 %or.cond, label %434, label %457

434:                                              ; preds = %.lr.ph427
  %435 = fmul double %427, %429
  %436 = fmul double %424, %426
  %437 = load ptr, ptr %341, align 8, !tbaa !27
  %438 = getelementptr inbounds double, ptr %437, i64 %407
  %439 = load double, ptr %438, align 8, !tbaa !28
  %440 = getelementptr inbounds double, ptr %437, i64 %.0315426
  %441 = load double, ptr %440, align 8, !tbaa !28
  %442 = fsub double %439, %441
  %443 = getelementptr inbounds double, ptr %437, i64 %410
  %444 = load double, ptr %443, align 8, !tbaa !28
  %445 = fsub double %444, %439
  %446 = getelementptr inbounds double, ptr %437, i64 %413
  %447 = load double, ptr %446, align 8, !tbaa !28
  %448 = fsub double %447, %444
  call void @_ZN11alglib_implL24optserv_testc0continuityEdddddddddddbPdS0_PNS_8ae_stateE(double noundef %406, double noundef %409, double noundef %412, double noundef %415, double noundef %419, double noundef %423, double noundef %436, double noundef %435, double noundef %442, double noundef %445, double noundef %448, i1 noundef zeroext true, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef %6)
  %449 = load double, ptr %8, align 8, !tbaa !28
  %450 = load double, ptr @_ZN11alglib_implL20optserv_ogminrating0E, align 8, !tbaa !28
  %451 = fcmp ogt double %449, %450
  br i1 %451, label %452, label %457

452:                                              ; preds = %434
  %453 = load double, ptr %342, align 8, !tbaa !56
  %454 = fcmp ogt double %449, %453
  br i1 %454, label %455, label %457

455:                                              ; preds = %452
  store double %449, ptr %342, align 8, !tbaa !56
  store i8 1, ptr %343, align 8, !tbaa !57
  store i8 1, ptr %344, align 1, !tbaa !58
  %456 = load double, ptr %9, align 8, !tbaa !28
  store double %456, ptr %345, align 8, !tbaa !59
  store i64 0, ptr %346, align 8, !tbaa !60
  br label %457

457:                                              ; preds = %434, %452, %455, %.lr.ph427
  %exitcond458.not = icmp eq i64 %407, %347
  br i1 %exitcond458.not, label %.loopexit, label %.lr.ph427, !llvm.loop !61

.loopexit:                                        ; preds = %457, %._crit_edge424
  br i1 %.not349428, label %.preheader, label %.lr.ph431

.preheader:                                       ; preds = %485, %.loopexit
  br i1 %.not425, label %._crit_edge435, label %.lr.ph434

.lr.ph431:                                        ; preds = %.loopexit, %485
  %.1316429 = phi i64 [ %486, %485 ], [ 0, %.loopexit ]
  %458 = load ptr, ptr %338, align 8, !tbaa !27
  %459 = getelementptr inbounds double, ptr %458, i64 %.1316429
  %460 = getelementptr inbounds i8, ptr %459, i64 16
  %461 = load double, ptr %460, align 8, !tbaa !28
  %462 = getelementptr inbounds i8, ptr %459, i64 24
  %463 = load double, ptr %462, align 8, !tbaa !28
  %464 = getelementptr inbounds i8, ptr %459, i64 32
  %465 = load double, ptr %464, align 8, !tbaa !28
  %466 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %467 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %461, ptr noundef %6)
  %468 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %467, double noundef 1.000000e+00, ptr noundef %6)
  %469 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %470 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %463, ptr noundef %6)
  %471 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %470, double noundef 1.000000e+00, ptr noundef %6)
  br i1 %403, label %479, label %472

472:                                              ; preds = %.lr.ph431
  %473 = fmul double %469, %471
  %474 = fmul double %466, %468
  %475 = fadd double %474, %473
  %476 = fadd double %461, %475
  %477 = fcmp olt double %463, %476
  %478 = fcmp olt double %463, %465
  %or.cond354 = select i1 %477, i1 %478, i1 false
  br i1 %or.cond354, label %483, label %485

479:                                              ; preds = %.lr.ph431
  %480 = fmul double %461, %465
  %481 = call noundef i64 @_ZN11alglib_impl7ae_signEdPNS_8ae_stateE(double noundef %480, ptr noundef %6)
  %482 = icmp sgt i64 %481, 0
  br i1 %482, label %485, label %483

483:                                              ; preds = %472, %479
  call void @_ZN11alglib_implL25optserv_c1continuitytest0EPNS_17smoothnessmonitorElllPNS_8ae_stateE(ptr noundef %0, i64 noundef %.0318437, i64 noundef %.1316429, i64 noundef %.0320, ptr noundef %6)
  %484 = add nuw nsw i64 %.1316429, 1
  call void @_ZN11alglib_implL25optserv_c1continuitytest0EPNS_17smoothnessmonitorElllPNS_8ae_stateE(ptr noundef %0, i64 noundef %.0318437, i64 noundef %484, i64 noundef %.0320, ptr noundef %6)
  br label %485

485:                                              ; preds = %479, %472, %483
  %486 = add nuw i64 %.1316429, 1
  %exitcond459.not = icmp eq i64 %.1316429, %348
  br i1 %exitcond459.not, label %.preheader, label %.lr.ph431, !llvm.loop !62

.lr.ph434:                                        ; preds = %.preheader, %526
  %.2317433 = phi i64 [ %490, %526 ], [ 0, %.preheader ]
  %487 = load ptr, ptr %338, align 8, !tbaa !27
  %488 = getelementptr inbounds double, ptr %487, i64 %.2317433
  %489 = load double, ptr %488, align 8, !tbaa !28
  %490 = add nuw nsw i64 %.2317433, 1
  %491 = getelementptr inbounds double, ptr %487, i64 %490
  %492 = load double, ptr %491, align 8, !tbaa !28
  %493 = getelementptr inbounds i8, ptr %488, i64 16
  %494 = load double, ptr %493, align 8, !tbaa !28
  %495 = getelementptr inbounds i8, ptr %488, i64 24
  %496 = load double, ptr %495, align 8, !tbaa !28
  %497 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %498 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %489, ptr noundef %6)
  %499 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %498, double noundef 1.000000e+00, ptr noundef %6)
  %500 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %501 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %492, ptr noundef %6)
  %502 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %501, double noundef 1.000000e+00, ptr noundef %6)
  %503 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %504 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %494, ptr noundef %6)
  %505 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %504, double noundef 1.000000e+00, ptr noundef %6)
  %506 = fmul double %503, %505
  %507 = load double, ptr @_ZN11alglib_implL21optserv_ognoiselevelfE, align 8, !tbaa !28
  %508 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %496, ptr noundef %6)
  %509 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %508, double noundef 1.000000e+00, ptr noundef %6)
  %510 = fmul double %507, %509
  br i1 %403, label %521, label %511

511:                                              ; preds = %.lr.ph434
  %512 = fmul double %500, %502
  %513 = fmul double %497, %499
  %514 = fadd double %513, %512
  %515 = fadd double %489, %514
  %516 = fcmp olt double %492, %515
  br i1 %516, label %517, label %526

517:                                              ; preds = %511
  %518 = fadd double %496, %506
  %519 = fadd double %518, %510
  %520 = fcmp olt double %494, %519
  br i1 %520, label %525, label %526

521:                                              ; preds = %.lr.ph434
  %522 = fmul double %489, %496
  %523 = call noundef i64 @_ZN11alglib_impl7ae_signEdPNS_8ae_stateE(double noundef %522, ptr noundef %6)
  %524 = icmp sgt i64 %523, 0
  br i1 %524, label %526, label %525

525:                                              ; preds = %521, %517
  call void @_ZN11alglib_implL25optserv_c1continuitytest1EPNS_17smoothnessmonitorElllPNS_8ae_stateE(ptr noundef nonnull %0, i64 noundef %.0318437, i64 noundef %.2317433, i64 noundef %.0320, ptr noundef %6)
  br label %526

526:                                              ; preds = %521, %511, %517, %525
  %exitcond460.not = icmp eq i64 %490, %347
  br i1 %exitcond460.not, label %._crit_edge435, label %.lr.ph434, !llvm.loop !63

._crit_edge435:                                   ; preds = %526, %.preheader356, %.preheader
  %527 = add nuw nsw i64 %.0318437, 1
  %exitcond461.not = icmp eq i64 %527, %12
  br i1 %exitcond461.not, label %.loopexit357, label %.preheader356, !llvm.loop !64

.loopexit357:                                     ; preds = %._crit_edge435, %.loopexit358, %7, %16, %20, %125
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #4
  ret void
}

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

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

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

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

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

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


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