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

; 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::idwbuilder" = type { i64, %"struct.alglib_impl::ae_vector", i64, i64, double, double, double, double, double, double, %"struct.alglib_impl::ae_vector", i64, i64, i64, %"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::kdtree", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%union.anon.1 = type { ptr }
%"struct.alglib_impl::kdtree" = type { i64, i64, i64, i64, %"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::kdtreerequestbuffer", i64 }
%"struct.alglib_impl::kdtreerequestbuffer" = type { %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", i64, double, i8, double, i64, %"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", double }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%union.anon.0 = type { ptr }
%"struct.alglib_impl::idwreport" = type { double, double, double, double }
%"struct.alglib_impl::idwmodel" = type { i64, i64, %"struct.alglib_impl::ae_vector", i64, i64, double, double, double, double, double, double, %"struct.alglib_impl::kdtree", i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::idwcalcbuffer" }
%"struct.alglib_impl::idwcalcbuffer" = type { %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_matrix", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::kdtreerequestbuffer" }

@_ZN11alglib_implL6idw_w0E = external hidden global double, align 8
@.str.129 = external hidden unnamed_addr constant [31 x i8], align 1
@_ZN11alglib_implL8idw_mepsE = external hidden global double, align 8
@.str.130 = external hidden unnamed_addr constant [53 x i8], align 1

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

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

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

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

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

48:                                               ; preds = %4
  %49 = load i64, ptr %18, align 8, !tbaa !19
  %50 = load ptr, ptr %6, align 8, !tbaa !5
  %51 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %50, i32 0, i32 0
  store i64 %49, ptr %51, align 8, !tbaa !27
  %52 = load i64, ptr %19, align 8, !tbaa !19
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %53, i32 0, i32 1
  store i64 %52, ptr %54, align 8, !tbaa !30
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %55, i32 0, i32 2
  %57 = load i64, ptr %19, align 8, !tbaa !19
  %58 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %56, i64 noundef %57, ptr noundef %58)
  store i64 0, ptr %9, align 8, !tbaa !19
  br label %59

59:                                               ; preds = %71, %48
  %60 = load i64, ptr %9, align 8, !tbaa !19
  %61 = load i64, ptr %19, align 8, !tbaa !19
  %62 = sub nsw i64 %61, 1
  %63 = icmp sle i64 %60, %62
  br i1 %63, label %64, label %74

64:                                               ; preds = %59
  %65 = load ptr, ptr %6, align 8, !tbaa !5
  %66 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %65, i32 0, i32 2
  %67 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %66, i32 0, i32 4
  %68 = load ptr, ptr %67, align 8, !tbaa !31
  %69 = load i64, ptr %9, align 8, !tbaa !19
  %70 = getelementptr inbounds double, ptr %68, i64 %69
  store double 0.000000e+00, ptr %70, align 8, !tbaa !32
  br label %71

71:                                               ; preds = %64
  %72 = load i64, ptr %9, align 8, !tbaa !19
  %73 = add nsw i64 %72, 1
  store i64 %73, ptr %9, align 8, !tbaa !19
  br label %59, !llvm.loop !33

74:                                               ; preds = %59
  %75 = load ptr, ptr %6, align 8, !tbaa !5
  %76 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %75, i32 0, i32 3
  store i64 0, ptr %76, align 8, !tbaa !35
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %77, i32 0, i32 4
  store i64 0, ptr %78, align 8, !tbaa !36
  %79 = load ptr, ptr %6, align 8, !tbaa !5
  %80 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %79, i32 0, i32 5
  store double 1.000000e+00, ptr %80, align 8, !tbaa !37
  %81 = load ptr, ptr %6, align 8, !tbaa !5
  %82 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %81, i32 0, i32 6
  store double 5.000000e-01, ptr %82, align 8, !tbaa !38
  %83 = load ptr, ptr %6, align 8, !tbaa !5
  %84 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %83, i32 0, i32 7
  store double 0.000000e+00, ptr %84, align 8, !tbaa !39
  %85 = load ptr, ptr %6, align 8, !tbaa !5
  %86 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %85, i32 0, i32 8
  store double 0.000000e+00, ptr %86, align 8, !tbaa !40
  %87 = load ptr, ptr %6, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %87, i32 0, i32 9
  store double 1.000000e+00, ptr %88, align 8, !tbaa !41
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %89, i32 0, i32 10
  store double 2.000000e+00, ptr %90, align 8, !tbaa !42
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  %92 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %91, i32 0, i32 12
  store i64 0, ptr %92, align 8, !tbaa !43
  %93 = load ptr, ptr %6, align 8, !tbaa !5
  %94 = load ptr, ptr %6, align 8, !tbaa !5
  %95 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %94, i32 0, i32 14
  %96 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef %93, ptr noundef %95, ptr noundef %96)
  store i32 1, ptr %24, align 4
  br label %1176

97:                                               ; preds = %4
  %98 = load ptr, ptr %5, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %98, i32 0, i32 11
  %100 = load i64, ptr %99, align 8, !tbaa !21
  %101 = icmp sgt i64 %100, 0
  %102 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %101, ptr noundef @.str.129, ptr noundef %102)
  %103 = load ptr, ptr %5, align 8, !tbaa !5
  %104 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %103, i32 0, i32 22
  %105 = load i64, ptr %19, align 8, !tbaa !19
  %106 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %104, i64 noundef %105, ptr noundef %106)
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %107

107:                                              ; preds = %119, %97
  %108 = load i64, ptr %11, align 8, !tbaa !19
  %109 = load i64, ptr %19, align 8, !tbaa !19
  %110 = sub nsw i64 %109, 1
  %111 = icmp sle i64 %108, %110
  br i1 %111, label %112, label %122

112:                                              ; preds = %107
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  %114 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %113, i32 0, i32 22
  %115 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %114, i32 0, i32 4
  %116 = load ptr, ptr %115, align 8, !tbaa !31
  %117 = load i64, ptr %11, align 8, !tbaa !19
  %118 = getelementptr inbounds double, ptr %116, i64 %117
  store double 0.000000e+00, ptr %118, align 8, !tbaa !32
  br label %119

119:                                              ; preds = %112
  %120 = load i64, ptr %11, align 8, !tbaa !19
  %121 = add nsw i64 %120, 1
  store i64 %121, ptr %11, align 8, !tbaa !19
  br label %107, !llvm.loop !44

122:                                              ; preds = %107
  store i64 0, ptr %9, align 8, !tbaa !19
  br label %123

123:                                              ; preds = %168, %122
  %124 = load i64, ptr %9, align 8, !tbaa !19
  %125 = load i64, ptr %17, align 8, !tbaa !19
  %126 = sub nsw i64 %125, 1
  %127 = icmp sle i64 %124, %126
  br i1 %127, label %128, label %171

128:                                              ; preds = %123
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %129

129:                                              ; preds = %164, %128
  %130 = load i64, ptr %11, align 8, !tbaa !19
  %131 = load i64, ptr %19, align 8, !tbaa !19
  %132 = sub nsw i64 %131, 1
  %133 = icmp sle i64 %130, %132
  br i1 %133, label %134, label %167

134:                                              ; preds = %129
  %135 = load ptr, ptr %5, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %135, i32 0, i32 22
  %137 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %136, i32 0, i32 4
  %138 = load ptr, ptr %137, align 8, !tbaa !31
  %139 = load i64, ptr %11, align 8, !tbaa !19
  %140 = getelementptr inbounds double, ptr %138, i64 %139
  %141 = load double, ptr %140, align 8, !tbaa !32
  %142 = load ptr, ptr %5, align 8, !tbaa !5
  %143 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %142, i32 0, i32 10
  %144 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %143, i32 0, i32 4
  %145 = load ptr, ptr %144, align 8, !tbaa !31
  %146 = load i64, ptr %9, align 8, !tbaa !19
  %147 = load i64, ptr %18, align 8, !tbaa !19
  %148 = load i64, ptr %19, align 8, !tbaa !19
  %149 = add nsw i64 %147, %148
  %150 = mul nsw i64 %146, %149
  %151 = load i64, ptr %18, align 8, !tbaa !19
  %152 = add nsw i64 %150, %151
  %153 = load i64, ptr %11, align 8, !tbaa !19
  %154 = add nsw i64 %152, %153
  %155 = getelementptr inbounds double, ptr %145, i64 %154
  %156 = load double, ptr %155, align 8, !tbaa !32
  %157 = fadd double %141, %156
  %158 = load ptr, ptr %5, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %158, i32 0, i32 22
  %160 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %159, i32 0, i32 4
  %161 = load ptr, ptr %160, align 8, !tbaa !31
  %162 = load i64, ptr %11, align 8, !tbaa !19
  %163 = getelementptr inbounds double, ptr %161, i64 %162
  store double %157, ptr %163, align 8, !tbaa !32
  br label %164

164:                                              ; preds = %134
  %165 = load i64, ptr %11, align 8, !tbaa !19
  %166 = add nsw i64 %165, 1
  store i64 %166, ptr %11, align 8, !tbaa !19
  br label %129, !llvm.loop !45

167:                                              ; preds = %129
  br label %168

168:                                              ; preds = %167
  %169 = load i64, ptr %9, align 8, !tbaa !19
  %170 = add nsw i64 %169, 1
  store i64 %170, ptr %9, align 8, !tbaa !19
  br label %123, !llvm.loop !46

171:                                              ; preds = %123
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %172

172:                                              ; preds = %194, %171
  %173 = load i64, ptr %11, align 8, !tbaa !19
  %174 = load i64, ptr %19, align 8, !tbaa !19
  %175 = sub nsw i64 %174, 1
  %176 = icmp sle i64 %173, %175
  br i1 %176, label %177, label %197

177:                                              ; preds = %172
  %178 = load ptr, ptr %5, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %178, i32 0, i32 22
  %180 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %179, i32 0, i32 4
  %181 = load ptr, ptr %180, align 8, !tbaa !31
  %182 = load i64, ptr %11, align 8, !tbaa !19
  %183 = getelementptr inbounds double, ptr %181, i64 %182
  %184 = load double, ptr %183, align 8, !tbaa !32
  %185 = load i64, ptr %17, align 8, !tbaa !19
  %186 = sitofp i64 %185 to double
  %187 = fdiv double %184, %186
  %188 = load ptr, ptr %5, align 8, !tbaa !5
  %189 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %188, i32 0, i32 22
  %190 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %189, i32 0, i32 4
  %191 = load ptr, ptr %190, align 8, !tbaa !31
  %192 = load i64, ptr %11, align 8, !tbaa !19
  %193 = getelementptr inbounds double, ptr %191, i64 %192
  store double %187, ptr %193, align 8, !tbaa !32
  br label %194

194:                                              ; preds = %177
  %195 = load i64, ptr %11, align 8, !tbaa !19
  %196 = add nsw i64 %195, 1
  store i64 %196, ptr %11, align 8, !tbaa !19
  br label %172, !llvm.loop !47

197:                                              ; preds = %172
  %198 = load ptr, ptr %6, align 8, !tbaa !5
  %199 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %198, i32 0, i32 2
  %200 = load i64, ptr %19, align 8, !tbaa !19
  %201 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %199, i64 noundef %200, ptr noundef %201)
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %202

202:                                              ; preds = %221, %197
  %203 = load i64, ptr %11, align 8, !tbaa !19
  %204 = load i64, ptr %19, align 8, !tbaa !19
  %205 = sub nsw i64 %204, 1
  %206 = icmp sle i64 %203, %205
  br i1 %206, label %207, label %224

207:                                              ; preds = %202
  %208 = load ptr, ptr %5, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %208, i32 0, i32 22
  %210 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %209, i32 0, i32 4
  %211 = load ptr, ptr %210, align 8, !tbaa !31
  %212 = load i64, ptr %11, align 8, !tbaa !19
  %213 = getelementptr inbounds double, ptr %211, i64 %212
  %214 = load double, ptr %213, align 8, !tbaa !32
  %215 = load ptr, ptr %6, align 8, !tbaa !5
  %216 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %215, i32 0, i32 2
  %217 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %216, i32 0, i32 4
  %218 = load ptr, ptr %217, align 8, !tbaa !31
  %219 = load i64, ptr %11, align 8, !tbaa !19
  %220 = getelementptr inbounds double, ptr %218, i64 %219
  store double %214, ptr %220, align 8, !tbaa !32
  br label %221

221:                                              ; preds = %207
  %222 = load i64, ptr %11, align 8, !tbaa !19
  %223 = add nsw i64 %222, 1
  store i64 %223, ptr %11, align 8, !tbaa !19
  br label %202, !llvm.loop !48

224:                                              ; preds = %202
  %225 = load ptr, ptr %5, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %225, i32 0, i32 2
  %227 = load i64, ptr %226, align 8, !tbaa !49
  %228 = icmp ne i64 %227, 0
  br i1 %228, label %229, label %281

229:                                              ; preds = %224
  %230 = load ptr, ptr %5, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %230, i32 0, i32 0
  %232 = load i64, ptr %231, align 8, !tbaa !50
  %233 = icmp eq i64 %232, 0
  br i1 %233, label %234, label %258

234:                                              ; preds = %229
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %235

235:                                              ; preds = %254, %234
  %236 = load i64, ptr %11, align 8, !tbaa !19
  %237 = load i64, ptr %19, align 8, !tbaa !19
  %238 = sub nsw i64 %237, 1
  %239 = icmp sle i64 %236, %238
  br i1 %239, label %240, label %257

240:                                              ; preds = %235
  %241 = load ptr, ptr %5, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %241, i32 0, i32 1
  %243 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %242, i32 0, i32 4
  %244 = load ptr, ptr %243, align 8, !tbaa !31
  %245 = load i64, ptr %11, align 8, !tbaa !19
  %246 = getelementptr inbounds double, ptr %244, i64 %245
  %247 = load double, ptr %246, align 8, !tbaa !32
  %248 = load ptr, ptr %6, align 8, !tbaa !5
  %249 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %248, i32 0, i32 2
  %250 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %249, i32 0, i32 4
  %251 = load ptr, ptr %250, align 8, !tbaa !31
  %252 = load i64, ptr %11, align 8, !tbaa !19
  %253 = getelementptr inbounds double, ptr %251, i64 %252
  store double %247, ptr %253, align 8, !tbaa !32
  br label %254

254:                                              ; preds = %240
  %255 = load i64, ptr %11, align 8, !tbaa !19
  %256 = add nsw i64 %255, 1
  store i64 %256, ptr %11, align 8, !tbaa !19
  br label %235, !llvm.loop !51

257:                                              ; preds = %235
  br label %258

258:                                              ; preds = %257, %229
  %259 = load ptr, ptr %5, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %259, i32 0, i32 0
  %261 = load i64, ptr %260, align 8, !tbaa !50
  %262 = icmp eq i64 %261, 3
  br i1 %262, label %263, label %280

263:                                              ; preds = %258
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %264

264:                                              ; preds = %276, %263
  %265 = load i64, ptr %11, align 8, !tbaa !19
  %266 = load i64, ptr %19, align 8, !tbaa !19
  %267 = sub nsw i64 %266, 1
  %268 = icmp sle i64 %265, %267
  br i1 %268, label %269, label %279

269:                                              ; preds = %264
  %270 = load ptr, ptr %6, align 8, !tbaa !5
  %271 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %270, i32 0, i32 2
  %272 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %271, i32 0, i32 4
  %273 = load ptr, ptr %272, align 8, !tbaa !31
  %274 = load i64, ptr %11, align 8, !tbaa !19
  %275 = getelementptr inbounds double, ptr %273, i64 %274
  store double 0.000000e+00, ptr %275, align 8, !tbaa !32
  br label %276

276:                                              ; preds = %269
  %277 = load i64, ptr %11, align 8, !tbaa !19
  %278 = add nsw i64 %277, 1
  store i64 %278, ptr %11, align 8, !tbaa !19
  br label %264, !llvm.loop !52

279:                                              ; preds = %264
  br label %280

280:                                              ; preds = %279, %258
  br label %281

281:                                              ; preds = %280, %224
  %282 = load ptr, ptr %5, align 8, !tbaa !5
  %283 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %282, i32 0, i32 2
  %284 = load i64, ptr %283, align 8, !tbaa !49
  %285 = icmp eq i64 %284, 0
  br i1 %285, label %286, label %423

286:                                              ; preds = %281
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %287, i32 0, i32 3
  store i64 0, ptr %288, align 8, !tbaa !35
  %289 = load i64, ptr %18, align 8, !tbaa !19
  %290 = load ptr, ptr %6, align 8, !tbaa !5
  %291 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %290, i32 0, i32 0
  store i64 %289, ptr %291, align 8, !tbaa !27
  %292 = load i64, ptr %19, align 8, !tbaa !19
  %293 = load ptr, ptr %6, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %293, i32 0, i32 1
  store i64 %292, ptr %294, align 8, !tbaa !30
  %295 = load ptr, ptr %6, align 8, !tbaa !5
  %296 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %295, i32 0, i32 4
  store i64 1, ptr %296, align 8, !tbaa !36
  %297 = load ptr, ptr %6, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %297, i32 0, i32 5
  store double 1.000000e+00, ptr %298, align 8, !tbaa !37
  %299 = load ptr, ptr %6, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %299, i32 0, i32 6
  store double 5.000000e-01, ptr %300, align 8, !tbaa !38
  %301 = load ptr, ptr %6, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %301, i32 0, i32 7
  store double 0.000000e+00, ptr %302, align 8, !tbaa !39
  %303 = load ptr, ptr %6, align 8, !tbaa !5
  %304 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %303, i32 0, i32 8
  store double 0.000000e+00, ptr %304, align 8, !tbaa !40
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %305, i32 0, i32 9
  store double 1.000000e+00, ptr %306, align 8, !tbaa !41
  %307 = load ptr, ptr %5, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %307, i32 0, i32 9
  %309 = load double, ptr %308, align 8, !tbaa !53
  %310 = load ptr, ptr %6, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %310, i32 0, i32 10
  store double %309, ptr %311, align 8, !tbaa !42
  %312 = load ptr, ptr %6, align 8, !tbaa !5
  %313 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %312, i32 0, i32 13
  %314 = load i64, ptr %17, align 8, !tbaa !19
  %315 = load i64, ptr %18, align 8, !tbaa !19
  %316 = load i64, ptr %19, align 8, !tbaa !19
  %317 = add nsw i64 %315, %316
  %318 = mul nsw i64 %314, %317
  %319 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %313, i64 noundef %318, ptr noundef %319)
  store i64 0, ptr %9, align 8, !tbaa !19
  br label %320

320:                                              ; preds = %408, %286
  %321 = load i64, ptr %9, align 8, !tbaa !19
  %322 = load i64, ptr %17, align 8, !tbaa !19
  %323 = sub nsw i64 %322, 1
  %324 = icmp sle i64 %321, %323
  br i1 %324, label %325, label %411

325:                                              ; preds = %320
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %326

326:                                              ; preds = %357, %325
  %327 = load i64, ptr %11, align 8, !tbaa !19
  %328 = load i64, ptr %18, align 8, !tbaa !19
  %329 = sub nsw i64 %328, 1
  %330 = icmp sle i64 %327, %329
  br i1 %330, label %331, label %360

331:                                              ; preds = %326
  %332 = load ptr, ptr %5, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %332, i32 0, i32 10
  %334 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %333, i32 0, i32 4
  %335 = load ptr, ptr %334, align 8, !tbaa !31
  %336 = load i64, ptr %9, align 8, !tbaa !19
  %337 = load i64, ptr %18, align 8, !tbaa !19
  %338 = load i64, ptr %19, align 8, !tbaa !19
  %339 = add nsw i64 %337, %338
  %340 = mul nsw i64 %336, %339
  %341 = load i64, ptr %11, align 8, !tbaa !19
  %342 = add nsw i64 %340, %341
  %343 = getelementptr inbounds double, ptr %335, i64 %342
  %344 = load double, ptr %343, align 8, !tbaa !32
  %345 = load ptr, ptr %6, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %345, i32 0, i32 13
  %347 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %346, i32 0, i32 4
  %348 = load ptr, ptr %347, align 8, !tbaa !31
  %349 = load i64, ptr %9, align 8, !tbaa !19
  %350 = load i64, ptr %18, align 8, !tbaa !19
  %351 = load i64, ptr %19, align 8, !tbaa !19
  %352 = add nsw i64 %350, %351
  %353 = mul nsw i64 %349, %352
  %354 = load i64, ptr %11, align 8, !tbaa !19
  %355 = add nsw i64 %353, %354
  %356 = getelementptr inbounds double, ptr %348, i64 %355
  store double %344, ptr %356, align 8, !tbaa !32
  br label %357

357:                                              ; preds = %331
  %358 = load i64, ptr %11, align 8, !tbaa !19
  %359 = add nsw i64 %358, 1
  store i64 %359, ptr %11, align 8, !tbaa !19
  br label %326, !llvm.loop !54

360:                                              ; preds = %326
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %361

361:                                              ; preds = %404, %360
  %362 = load i64, ptr %11, align 8, !tbaa !19
  %363 = load i64, ptr %19, align 8, !tbaa !19
  %364 = sub nsw i64 %363, 1
  %365 = icmp sle i64 %362, %364
  br i1 %365, label %366, label %407

366:                                              ; preds = %361
  %367 = load ptr, ptr %5, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", 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 !31
  %371 = load i64, ptr %9, align 8, !tbaa !19
  %372 = load i64, ptr %18, align 8, !tbaa !19
  %373 = load i64, ptr %19, align 8, !tbaa !19
  %374 = add nsw i64 %372, %373
  %375 = mul nsw i64 %371, %374
  %376 = load i64, ptr %18, align 8, !tbaa !19
  %377 = add nsw i64 %375, %376
  %378 = load i64, ptr %11, align 8, !tbaa !19
  %379 = add nsw i64 %377, %378
  %380 = getelementptr inbounds double, ptr %370, i64 %379
  %381 = load double, ptr %380, align 8, !tbaa !32
  %382 = load ptr, ptr %6, align 8, !tbaa !5
  %383 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %382, i32 0, i32 2
  %384 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %383, i32 0, i32 4
  %385 = load ptr, ptr %384, align 8, !tbaa !31
  %386 = load i64, ptr %11, align 8, !tbaa !19
  %387 = getelementptr inbounds double, ptr %385, i64 %386
  %388 = load double, ptr %387, align 8, !tbaa !32
  %389 = fsub double %381, %388
  %390 = load ptr, ptr %6, align 8, !tbaa !5
  %391 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %390, i32 0, i32 13
  %392 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %391, i32 0, i32 4
  %393 = load ptr, ptr %392, align 8, !tbaa !31
  %394 = load i64, ptr %9, align 8, !tbaa !19
  %395 = load i64, ptr %18, align 8, !tbaa !19
  %396 = load i64, ptr %19, align 8, !tbaa !19
  %397 = add nsw i64 %395, %396
  %398 = mul nsw i64 %394, %397
  %399 = load i64, ptr %18, align 8, !tbaa !19
  %400 = add nsw i64 %398, %399
  %401 = load i64, ptr %11, align 8, !tbaa !19
  %402 = add nsw i64 %400, %401
  %403 = getelementptr inbounds double, ptr %393, i64 %402
  store double %389, ptr %403, align 8, !tbaa !32
  br label %404

404:                                              ; preds = %366
  %405 = load i64, ptr %11, align 8, !tbaa !19
  %406 = add nsw i64 %405, 1
  store i64 %406, ptr %11, align 8, !tbaa !19
  br label %361, !llvm.loop !55

407:                                              ; preds = %361
  br label %408

408:                                              ; preds = %407
  %409 = load i64, ptr %9, align 8, !tbaa !19
  %410 = add nsw i64 %409, 1
  store i64 %410, ptr %9, align 8, !tbaa !19
  br label %320, !llvm.loop !56

411:                                              ; preds = %320
  %412 = load i64, ptr %17, align 8, !tbaa !19
  %413 = load ptr, ptr %6, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %413, i32 0, i32 12
  store i64 %412, ptr %414, align 8, !tbaa !43
  %415 = load ptr, ptr %6, align 8, !tbaa !5
  %416 = load ptr, ptr %6, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %416, i32 0, i32 14
  %418 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef %415, ptr noundef %417, ptr noundef %418)
  %419 = load ptr, ptr %5, align 8, !tbaa !5
  %420 = load ptr, ptr %6, align 8, !tbaa !5
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL23idw_errormetricsviacalcEPNS_10idwbuilderEPNS_8idwmodelEPNS_9idwreportEPNS_8ae_stateE(ptr noundef %419, ptr noundef %420, ptr noundef %421, ptr noundef %422)
  store i32 1, ptr %24, align 4
  br label %1176

423:                                              ; preds = %281
  %424 = load ptr, ptr %5, align 8, !tbaa !5
  %425 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %424, i32 0, i32 2
  %426 = load i64, ptr %425, align 8, !tbaa !49
  %427 = icmp eq i64 %426, 1
  br i1 %427, label %428, label %563

428:                                              ; preds = %423
  %429 = load ptr, ptr %6, align 8, !tbaa !5
  %430 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %429, i32 0, i32 3
  store i64 1, ptr %430, align 8, !tbaa !35
  %431 = load i64, ptr %18, align 8, !tbaa !19
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %432, i32 0, i32 0
  store i64 %431, ptr %433, align 8, !tbaa !27
  %434 = load i64, ptr %19, align 8, !tbaa !19
  %435 = load ptr, ptr %6, align 8, !tbaa !5
  %436 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %435, i32 0, i32 1
  store i64 %434, ptr %436, align 8, !tbaa !30
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %437, i32 0, i32 4
  store i64 1, ptr %438, align 8, !tbaa !36
  %439 = load ptr, ptr %5, align 8, !tbaa !5
  %440 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %439, i32 0, i32 4
  %441 = load double, ptr %440, align 8, !tbaa !57
  %442 = load ptr, ptr %6, align 8, !tbaa !5
  %443 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %442, i32 0, i32 5
  store double %441, ptr %443, align 8, !tbaa !37
  %444 = load ptr, ptr %6, align 8, !tbaa !5
  %445 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %444, i32 0, i32 6
  store double 1.000000e+00, ptr %445, align 8, !tbaa !38
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %446, i32 0, i32 7
  store double 0.000000e+00, ptr %447, align 8, !tbaa !39
  %448 = load ptr, ptr %6, align 8, !tbaa !5
  %449 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %448, i32 0, i32 8
  store double 0.000000e+00, ptr %449, align 8, !tbaa !40
  %450 = load ptr, ptr %6, align 8, !tbaa !5
  %451 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %450, i32 0, i32 9
  store double 1.000000e+00, ptr %451, align 8, !tbaa !41
  %452 = load ptr, ptr %6, align 8, !tbaa !5
  %453 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %452, i32 0, i32 10
  store double 0.000000e+00, ptr %453, align 8, !tbaa !42
  %454 = load ptr, ptr %5, align 8, !tbaa !5
  %455 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %454, i32 0, i32 14
  %456 = load i64, ptr %17, align 8, !tbaa !19
  %457 = load i64, ptr %18, align 8, !tbaa !19
  %458 = load i64, ptr %19, align 8, !tbaa !19
  %459 = add nsw i64 %457, %458
  %460 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %455, i64 noundef %456, i64 noundef %459, ptr noundef %460)
  store i64 0, ptr %9, align 8, !tbaa !19
  br label %461

461:                                              ; preds = %543, %428
  %462 = load i64, ptr %9, align 8, !tbaa !19
  %463 = load i64, ptr %17, align 8, !tbaa !19
  %464 = sub nsw i64 %463, 1
  %465 = icmp sle i64 %462, %464
  br i1 %465, label %466, label %546

466:                                              ; preds = %461
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %467

467:                                              ; preds = %495, %466
  %468 = load i64, ptr %11, align 8, !tbaa !19
  %469 = load i64, ptr %18, align 8, !tbaa !19
  %470 = sub nsw i64 %469, 1
  %471 = icmp sle i64 %468, %470
  br i1 %471, label %472, label %498

472:                                              ; preds = %467
  %473 = load ptr, ptr %5, align 8, !tbaa !5
  %474 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %473, i32 0, i32 10
  %475 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %474, i32 0, i32 4
  %476 = load ptr, ptr %475, align 8, !tbaa !31
  %477 = load i64, ptr %9, align 8, !tbaa !19
  %478 = load i64, ptr %18, align 8, !tbaa !19
  %479 = load i64, ptr %19, align 8, !tbaa !19
  %480 = add nsw i64 %478, %479
  %481 = mul nsw i64 %477, %480
  %482 = load i64, ptr %11, align 8, !tbaa !19
  %483 = add nsw i64 %481, %482
  %484 = getelementptr inbounds double, ptr %476, i64 %483
  %485 = load double, ptr %484, align 8, !tbaa !32
  %486 = load ptr, ptr %5, align 8, !tbaa !5
  %487 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %486, i32 0, i32 14
  %488 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %487, i32 0, i32 6
  %489 = load ptr, ptr %488, align 8, !tbaa !31
  %490 = load i64, ptr %9, align 8, !tbaa !19
  %491 = getelementptr inbounds ptr, ptr %489, i64 %490
  %492 = load ptr, ptr %491, align 8, !tbaa !5
  %493 = load i64, ptr %11, align 8, !tbaa !19
  %494 = getelementptr inbounds double, ptr %492, i64 %493
  store double %485, ptr %494, align 8, !tbaa !32
  br label %495

495:                                              ; preds = %472
  %496 = load i64, ptr %11, align 8, !tbaa !19
  %497 = add nsw i64 %496, 1
  store i64 %497, ptr %11, align 8, !tbaa !19
  br label %467, !llvm.loop !58

498:                                              ; preds = %467
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %499

499:                                              ; preds = %539, %498
  %500 = load i64, ptr %11, align 8, !tbaa !19
  %501 = load i64, ptr %19, align 8, !tbaa !19
  %502 = sub nsw i64 %501, 1
  %503 = icmp sle i64 %500, %502
  br i1 %503, label %504, label %542

504:                                              ; preds = %499
  %505 = load ptr, ptr %5, align 8, !tbaa !5
  %506 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %505, i32 0, i32 10
  %507 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %506, i32 0, i32 4
  %508 = load ptr, ptr %507, align 8, !tbaa !31
  %509 = load i64, ptr %9, align 8, !tbaa !19
  %510 = load i64, ptr %18, align 8, !tbaa !19
  %511 = load i64, ptr %19, align 8, !tbaa !19
  %512 = add nsw i64 %510, %511
  %513 = mul nsw i64 %509, %512
  %514 = load i64, ptr %18, align 8, !tbaa !19
  %515 = add nsw i64 %513, %514
  %516 = load i64, ptr %11, align 8, !tbaa !19
  %517 = add nsw i64 %515, %516
  %518 = getelementptr inbounds double, ptr %508, i64 %517
  %519 = load double, ptr %518, align 8, !tbaa !32
  %520 = load ptr, ptr %6, align 8, !tbaa !5
  %521 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %520, i32 0, i32 2
  %522 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %521, i32 0, i32 4
  %523 = load ptr, ptr %522, align 8, !tbaa !31
  %524 = load i64, ptr %11, align 8, !tbaa !19
  %525 = getelementptr inbounds double, ptr %523, i64 %524
  %526 = load double, ptr %525, align 8, !tbaa !32
  %527 = fsub double %519, %526
  %528 = load ptr, ptr %5, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %528, i32 0, i32 14
  %530 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %529, i32 0, i32 6
  %531 = load ptr, ptr %530, align 8, !tbaa !31
  %532 = load i64, ptr %9, align 8, !tbaa !19
  %533 = getelementptr inbounds ptr, ptr %531, i64 %532
  %534 = load ptr, ptr %533, align 8, !tbaa !5
  %535 = load i64, ptr %18, align 8, !tbaa !19
  %536 = load i64, ptr %11, align 8, !tbaa !19
  %537 = add nsw i64 %535, %536
  %538 = getelementptr inbounds double, ptr %534, i64 %537
  store double %527, ptr %538, align 8, !tbaa !32
  br label %539

539:                                              ; preds = %504
  %540 = load i64, ptr %11, align 8, !tbaa !19
  %541 = add nsw i64 %540, 1
  store i64 %541, ptr %11, align 8, !tbaa !19
  br label %499, !llvm.loop !59

542:                                              ; preds = %499
  br label %543

543:                                              ; preds = %542
  %544 = load i64, ptr %9, align 8, !tbaa !19
  %545 = add nsw i64 %544, 1
  store i64 %545, ptr %9, align 8, !tbaa !19
  br label %461, !llvm.loop !60

546:                                              ; preds = %461
  %547 = load ptr, ptr %5, align 8, !tbaa !5
  %548 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %547, i32 0, i32 14
  %549 = load i64, ptr %17, align 8, !tbaa !19
  %550 = load i64, ptr %18, align 8, !tbaa !19
  %551 = load i64, ptr %19, align 8, !tbaa !19
  %552 = load ptr, ptr %6, align 8, !tbaa !5
  %553 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %552, i32 0, i32 11
  %554 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl11kdtreebuildEPNS_9ae_matrixEllllPNS_6kdtreeEPNS_8ae_stateE(ptr noundef %548, i64 noundef %549, i64 noundef %550, i64 noundef %551, i64 noundef 2, ptr noundef %553, ptr noundef %554)
  %555 = load ptr, ptr %6, align 8, !tbaa !5
  %556 = load ptr, ptr %6, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %556, i32 0, i32 14
  %558 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef %555, ptr noundef %557, ptr noundef %558)
  %559 = load ptr, ptr %5, align 8, !tbaa !5
  %560 = load ptr, ptr %6, align 8, !tbaa !5
  %561 = load ptr, ptr %7, align 8, !tbaa !5
  %562 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_implL23idw_errormetricsviacalcEPNS_10idwbuilderEPNS_8idwmodelEPNS_9idwreportEPNS_8ae_stateE(ptr noundef %559, ptr noundef %560, ptr noundef %561, ptr noundef %562)
  store i32 1, ptr %24, align 4
  br label %1176

563:                                              ; preds = %423
  %564 = load ptr, ptr %5, align 8, !tbaa !5
  %565 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %564, i32 0, i32 2
  %566 = load i64, ptr %565, align 8, !tbaa !49
  %567 = icmp eq i64 %566, 2
  br i1 %567, label %568, label %1174

568:                                              ; preds = %563
  %569 = load ptr, ptr %5, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %569, i32 0, i32 3
  %571 = load i64, ptr %570, align 8, !tbaa !61
  %572 = icmp sge i64 %571, 1
  %573 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %572, ptr noundef @.str.129, ptr noundef %573)
  %574 = load ptr, ptr %6, align 8, !tbaa !5
  %575 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %574, i32 0, i32 3
  store i64 2, ptr %575, align 8, !tbaa !35
  %576 = load i64, ptr %18, align 8, !tbaa !19
  %577 = load ptr, ptr %6, align 8, !tbaa !5
  %578 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %577, i32 0, i32 0
  store i64 %576, ptr %578, align 8, !tbaa !27
  %579 = load i64, ptr %19, align 8, !tbaa !19
  %580 = load ptr, ptr %6, align 8, !tbaa !5
  %581 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %580, i32 0, i32 1
  store i64 %579, ptr %581, align 8, !tbaa !30
  %582 = load ptr, ptr %5, align 8, !tbaa !5
  %583 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %582, i32 0, i32 3
  %584 = load i64, ptr %583, align 8, !tbaa !61
  %585 = load ptr, ptr %6, align 8, !tbaa !5
  %586 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %585, i32 0, i32 4
  store i64 %584, ptr %586, align 8, !tbaa !36
  %587 = load ptr, ptr %5, align 8, !tbaa !5
  %588 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %587, i32 0, i32 4
  %589 = load double, ptr %588, align 8, !tbaa !57
  %590 = load ptr, ptr %6, align 8, !tbaa !5
  %591 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %590, i32 0, i32 5
  store double %589, ptr %591, align 8, !tbaa !37
  %592 = load ptr, ptr %6, align 8, !tbaa !5
  %593 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %592, i32 0, i32 6
  store double 5.000000e-01, ptr %593, align 8, !tbaa !38
  %594 = load ptr, ptr %5, align 8, !tbaa !5
  %595 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %594, i32 0, i32 6
  %596 = load double, ptr %595, align 8, !tbaa !62
  %597 = load ptr, ptr %6, align 8, !tbaa !5
  %598 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %597, i32 0, i32 7
  store double %596, ptr %598, align 8, !tbaa !39
  %599 = load ptr, ptr %6, align 8, !tbaa !5
  %600 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %599, i32 0, i32 9
  store double 1.000000e+00, ptr %600, align 8, !tbaa !41
  %601 = load double, ptr @_ZN11alglib_implL8idw_mepsE, align 8, !tbaa !32
  %602 = load ptr, ptr %6, align 8, !tbaa !5
  %603 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %602, i32 0, i32 8
  store double %601, ptr %603, align 8, !tbaa !40
  %604 = load ptr, ptr %6, align 8, !tbaa !5
  %605 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %604, i32 0, i32 10
  store double 0.000000e+00, ptr %605, align 8, !tbaa !42
  %606 = load ptr, ptr %5, align 8, !tbaa !5
  %607 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %606, i32 0, i32 14
  %608 = load i64, ptr %17, align 8, !tbaa !19
  %609 = load i64, ptr %18, align 8, !tbaa !19
  %610 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %607, i64 noundef %608, i64 noundef %609, ptr noundef %610)
  %611 = load ptr, ptr %5, align 8, !tbaa !5
  %612 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %611, i32 0, i32 15
  %613 = load i64, ptr %17, align 8, !tbaa !19
  %614 = load i64, ptr %18, align 8, !tbaa !19
  %615 = load i64, ptr %19, align 8, !tbaa !19
  %616 = load ptr, ptr %5, align 8, !tbaa !5
  %617 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %616, i32 0, i32 3
  %618 = load i64, ptr %617, align 8, !tbaa !61
  %619 = add nsw i64 %618, 1
  %620 = mul nsw i64 %615, %619
  %621 = add nsw i64 %614, %620
  %622 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %612, i64 noundef %613, i64 noundef %621, ptr noundef %622)
  %623 = load ptr, ptr %5, align 8, !tbaa !5
  %624 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %623, i32 0, i32 16
  %625 = load i64, ptr %17, align 8, !tbaa !19
  %626 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %624, i64 noundef %625, ptr noundef %626)
  store i64 0, ptr %9, align 8, !tbaa !19
  br label %627

627:                                              ; preds = %727, %568
  %628 = load i64, ptr %9, align 8, !tbaa !19
  %629 = load i64, ptr %17, align 8, !tbaa !19
  %630 = sub nsw i64 %629, 1
  %631 = icmp sle i64 %628, %630
  br i1 %631, label %632, label %730

632:                                              ; preds = %627
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %633

633:                                              ; preds = %672, %632
  %634 = load i64, ptr %11, align 8, !tbaa !19
  %635 = load i64, ptr %18, align 8, !tbaa !19
  %636 = sub nsw i64 %635, 1
  %637 = icmp sle i64 %634, %636
  br i1 %637, label %638, label %675

638:                                              ; preds = %633
  %639 = load ptr, ptr %5, align 8, !tbaa !5
  %640 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %639, i32 0, i32 10
  %641 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %640, i32 0, i32 4
  %642 = load ptr, ptr %641, align 8, !tbaa !31
  %643 = load i64, ptr %9, align 8, !tbaa !19
  %644 = load i64, ptr %18, align 8, !tbaa !19
  %645 = load i64, ptr %19, align 8, !tbaa !19
  %646 = add nsw i64 %644, %645
  %647 = mul nsw i64 %643, %646
  %648 = load i64, ptr %11, align 8, !tbaa !19
  %649 = add nsw i64 %647, %648
  %650 = getelementptr inbounds double, ptr %642, i64 %649
  %651 = load double, ptr %650, align 8, !tbaa !32
  store double %651, ptr %15, align 8, !tbaa !32
  %652 = load double, ptr %15, align 8, !tbaa !32
  %653 = load ptr, ptr %5, align 8, !tbaa !5
  %654 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %653, i32 0, i32 14
  %655 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %654, i32 0, i32 6
  %656 = load ptr, ptr %655, align 8, !tbaa !31
  %657 = load i64, ptr %9, align 8, !tbaa !19
  %658 = getelementptr inbounds ptr, ptr %656, i64 %657
  %659 = load ptr, ptr %658, align 8, !tbaa !5
  %660 = load i64, ptr %11, align 8, !tbaa !19
  %661 = getelementptr inbounds double, ptr %659, i64 %660
  store double %652, ptr %661, align 8, !tbaa !32
  %662 = load double, ptr %15, align 8, !tbaa !32
  %663 = load ptr, ptr %5, align 8, !tbaa !5
  %664 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %663, i32 0, i32 15
  %665 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %664, i32 0, i32 6
  %666 = load ptr, ptr %665, align 8, !tbaa !31
  %667 = load i64, ptr %9, align 8, !tbaa !19
  %668 = getelementptr inbounds ptr, ptr %666, i64 %667
  %669 = load ptr, ptr %668, align 8, !tbaa !5
  %670 = load i64, ptr %11, align 8, !tbaa !19
  %671 = getelementptr inbounds double, ptr %669, i64 %670
  store double %662, ptr %671, align 8, !tbaa !32
  br label %672

672:                                              ; preds = %638
  %673 = load i64, ptr %11, align 8, !tbaa !19
  %674 = add nsw i64 %673, 1
  store i64 %674, ptr %11, align 8, !tbaa !19
  br label %633, !llvm.loop !63

675:                                              ; preds = %633
  %676 = load i64, ptr %9, align 8, !tbaa !19
  %677 = load ptr, ptr %5, align 8, !tbaa !5
  %678 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %677, i32 0, i32 16
  %679 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %678, i32 0, i32 4
  %680 = load ptr, ptr %679, align 8, !tbaa !31
  %681 = load i64, ptr %9, align 8, !tbaa !19
  %682 = getelementptr inbounds i64, ptr %680, i64 %681
  store i64 %676, ptr %682, align 8, !tbaa !19
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %683

683:                                              ; preds = %723, %675
  %684 = load i64, ptr %11, align 8, !tbaa !19
  %685 = load i64, ptr %19, align 8, !tbaa !19
  %686 = sub nsw i64 %685, 1
  %687 = icmp sle i64 %684, %686
  br i1 %687, label %688, label %726

688:                                              ; preds = %683
  %689 = load ptr, ptr %5, align 8, !tbaa !5
  %690 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %689, i32 0, i32 10
  %691 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %690, i32 0, i32 4
  %692 = load ptr, ptr %691, align 8, !tbaa !31
  %693 = load i64, ptr %9, align 8, !tbaa !19
  %694 = load i64, ptr %18, align 8, !tbaa !19
  %695 = load i64, ptr %19, align 8, !tbaa !19
  %696 = add nsw i64 %694, %695
  %697 = mul nsw i64 %693, %696
  %698 = load i64, ptr %18, align 8, !tbaa !19
  %699 = add nsw i64 %697, %698
  %700 = load i64, ptr %11, align 8, !tbaa !19
  %701 = add nsw i64 %699, %700
  %702 = getelementptr inbounds double, ptr %692, i64 %701
  %703 = load double, ptr %702, align 8, !tbaa !32
  %704 = load ptr, ptr %6, align 8, !tbaa !5
  %705 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %704, i32 0, i32 2
  %706 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %705, i32 0, i32 4
  %707 = load ptr, ptr %706, align 8, !tbaa !31
  %708 = load i64, ptr %11, align 8, !tbaa !19
  %709 = getelementptr inbounds double, ptr %707, i64 %708
  %710 = load double, ptr %709, align 8, !tbaa !32
  %711 = fsub double %703, %710
  %712 = load ptr, ptr %5, align 8, !tbaa !5
  %713 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %712, i32 0, i32 15
  %714 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %713, i32 0, i32 6
  %715 = load ptr, ptr %714, align 8, !tbaa !31
  %716 = load i64, ptr %9, align 8, !tbaa !19
  %717 = getelementptr inbounds ptr, ptr %715, i64 %716
  %718 = load ptr, ptr %717, align 8, !tbaa !5
  %719 = load i64, ptr %18, align 8, !tbaa !19
  %720 = load i64, ptr %11, align 8, !tbaa !19
  %721 = add nsw i64 %719, %720
  %722 = getelementptr inbounds double, ptr %718, i64 %721
  store double %711, ptr %722, align 8, !tbaa !32
  br label %723

723:                                              ; preds = %688
  %724 = load i64, ptr %11, align 8, !tbaa !19
  %725 = add nsw i64 %724, 1
  store i64 %725, ptr %11, align 8, !tbaa !19
  br label %683, !llvm.loop !64

726:                                              ; preds = %683
  br label %727

727:                                              ; preds = %726
  %728 = load i64, ptr %9, align 8, !tbaa !19
  %729 = add nsw i64 %728, 1
  store i64 %729, ptr %9, align 8, !tbaa !19
  br label %627, !llvm.loop !65

730:                                              ; preds = %627
  %731 = load ptr, ptr %5, align 8, !tbaa !5
  %732 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %731, i32 0, i32 14
  %733 = load ptr, ptr %5, align 8, !tbaa !5
  %734 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %733, i32 0, i32 16
  %735 = load i64, ptr %17, align 8, !tbaa !19
  %736 = load i64, ptr %18, align 8, !tbaa !19
  %737 = load ptr, ptr %5, align 8, !tbaa !5
  %738 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %737, i32 0, i32 21
  %739 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl17kdtreebuildtaggedEPNS_9ae_matrixEPNS_9ae_vectorEllllPNS_6kdtreeEPNS_8ae_stateE(ptr noundef %732, ptr noundef %734, i64 noundef %735, i64 noundef %736, i64 noundef 0, i64 noundef 2, ptr noundef %738, ptr noundef %739)
  %740 = load ptr, ptr %5, align 8, !tbaa !5
  %741 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %740, i32 0, i32 18
  %742 = load i64, ptr %18, align 8, !tbaa !19
  %743 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %741, i64 noundef %742, ptr noundef %743)
  %744 = load ptr, ptr %5, align 8, !tbaa !5
  %745 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %744, i32 0, i32 19
  %746 = load i64, ptr %19, align 8, !tbaa !19
  %747 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %745, i64 noundef %746, ptr noundef %747)
  %748 = load ptr, ptr %5, align 8, !tbaa !5
  %749 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %748, i32 0, i32 20
  %750 = load i64, ptr %19, align 8, !tbaa !19
  %751 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %749, i64 noundef %750, ptr noundef %751)
  store i64 0, ptr %13, align 8, !tbaa !19
  br label %752

752:                                              ; preds = %1022, %730
  %753 = load i64, ptr %13, align 8, !tbaa !19
  %754 = load ptr, ptr %5, align 8, !tbaa !5
  %755 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %754, i32 0, i32 3
  %756 = load i64, ptr %755, align 8, !tbaa !61
  %757 = sub nsw i64 %756, 1
  %758 = icmp sle i64 %753, %757
  br i1 %758, label %759, label %1025

759:                                              ; preds = %752
  %760 = load ptr, ptr %6, align 8, !tbaa !5
  %761 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %760, i32 0, i32 5
  %762 = load double, ptr %761, align 8, !tbaa !37
  %763 = load ptr, ptr %6, align 8, !tbaa !5
  %764 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %763, i32 0, i32 6
  %765 = load double, ptr %764, align 8, !tbaa !38
  %766 = load i64, ptr %13, align 8, !tbaa !19
  %767 = sitofp i64 %766 to double
  %768 = load ptr, ptr %8, align 8, !tbaa !5
  %769 = call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef %765, double noundef %767, ptr noundef %768)
  %770 = fmul double %762, %769
  store double %770, ptr %20, align 8, !tbaa !32
  %771 = load ptr, ptr %6, align 8, !tbaa !5
  %772 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %771, i32 0, i32 7
  %773 = load double, ptr %772, align 8, !tbaa !39
  %774 = load ptr, ptr %6, align 8, !tbaa !5
  %775 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %774, i32 0, i32 9
  %776 = load double, ptr %775, align 8, !tbaa !41
  %777 = load i64, ptr %13, align 8, !tbaa !19
  %778 = sitofp i64 %777 to double
  %779 = load ptr, ptr %8, align 8, !tbaa !5
  %780 = call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef %776, double noundef %778, ptr noundef %779)
  %781 = fmul double %773, %780
  store double %781, ptr %21, align 8, !tbaa !32
  %782 = load i64, ptr %13, align 8, !tbaa !19
  %783 = load ptr, ptr %5, align 8, !tbaa !5
  %784 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %783, i32 0, i32 3
  %785 = load i64, ptr %784, align 8, !tbaa !61
  %786 = sub nsw i64 %785, 1
  %787 = icmp eq i64 %782, %786
  br i1 %787, label %788, label %792

788:                                              ; preds = %759
  %789 = load ptr, ptr %6, align 8, !tbaa !5
  %790 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %789, i32 0, i32 8
  %791 = load double, ptr %790, align 8, !tbaa !40
  store double %791, ptr %21, align 8, !tbaa !32
  br label %792

792:                                              ; preds = %788, %759
  store i64 0, ptr %9, align 8, !tbaa !19
  br label %793

793:                                              ; preds = %1018, %792
  %794 = load i64, ptr %9, align 8, !tbaa !19
  %795 = load i64, ptr %17, align 8, !tbaa !19
  %796 = sub nsw i64 %795, 1
  %797 = icmp sle i64 %794, %796
  br i1 %797, label %798, label %1021

798:                                              ; preds = %793
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %799

799:                                              ; preds = %821, %798
  %800 = load i64, ptr %11, align 8, !tbaa !19
  %801 = load i64, ptr %18, align 8, !tbaa !19
  %802 = sub nsw i64 %801, 1
  %803 = icmp sle i64 %800, %802
  br i1 %803, label %804, label %824

804:                                              ; preds = %799
  %805 = load ptr, ptr %5, align 8, !tbaa !5
  %806 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %805, i32 0, i32 15
  %807 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %806, i32 0, i32 6
  %808 = load ptr, ptr %807, align 8, !tbaa !31
  %809 = load i64, ptr %9, align 8, !tbaa !19
  %810 = getelementptr inbounds ptr, ptr %808, i64 %809
  %811 = load ptr, ptr %810, align 8, !tbaa !5
  %812 = load i64, ptr %11, align 8, !tbaa !19
  %813 = getelementptr inbounds double, ptr %811, i64 %812
  %814 = load double, ptr %813, align 8, !tbaa !32
  %815 = load ptr, ptr %5, align 8, !tbaa !5
  %816 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %815, i32 0, i32 18
  %817 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %816, i32 0, i32 4
  %818 = load ptr, ptr %817, align 8, !tbaa !31
  %819 = load i64, ptr %11, align 8, !tbaa !19
  %820 = getelementptr inbounds double, ptr %818, i64 %819
  store double %814, ptr %820, align 8, !tbaa !32
  br label %821

821:                                              ; preds = %804
  %822 = load i64, ptr %11, align 8, !tbaa !19
  %823 = add nsw i64 %822, 1
  store i64 %823, ptr %11, align 8, !tbaa !19
  br label %799, !llvm.loop !66

824:                                              ; preds = %799
  %825 = load ptr, ptr %5, align 8, !tbaa !5
  %826 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %825, i32 0, i32 21
  %827 = load ptr, ptr %5, align 8, !tbaa !5
  %828 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %827, i32 0, i32 18
  %829 = load double, ptr %20, align 8, !tbaa !32
  %830 = load ptr, ptr %8, align 8, !tbaa !5
  %831 = call noundef i64 @_ZN11alglib_impl14kdtreequeryrnnEPNS_6kdtreeEPNS_9ae_vectorEdbPNS_8ae_stateE(ptr noundef %826, ptr noundef %828, double noundef %829, i1 noundef zeroext true, ptr noundef %830)
  store i64 %831, ptr %12, align 8, !tbaa !19
  %832 = load ptr, ptr %5, align 8, !tbaa !5
  %833 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %832, i32 0, i32 21
  %834 = load ptr, ptr %5, align 8, !tbaa !5
  %835 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %834, i32 0, i32 16
  %836 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl22kdtreequeryresultstagsEPNS_6kdtreeEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %833, ptr noundef %835, ptr noundef %836)
  %837 = load ptr, ptr %5, align 8, !tbaa !5
  %838 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %837, i32 0, i32 21
  %839 = load ptr, ptr %5, align 8, !tbaa !5
  %840 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %839, i32 0, i32 17
  %841 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl27kdtreequeryresultsdistancesEPNS_6kdtreeEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %838, ptr noundef %840, ptr noundef %841)
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %842

842:                                              ; preds = %861, %824
  %843 = load i64, ptr %11, align 8, !tbaa !19
  %844 = load i64, ptr %19, align 8, !tbaa !19
  %845 = sub nsw i64 %844, 1
  %846 = icmp sle i64 %843, %845
  br i1 %846, label %847, label %864

847:                                              ; preds = %842
  %848 = load ptr, ptr %5, align 8, !tbaa !5
  %849 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %848, i32 0, i32 19
  %850 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %849, i32 0, i32 4
  %851 = load ptr, ptr %850, align 8, !tbaa !31
  %852 = load i64, ptr %11, align 8, !tbaa !19
  %853 = getelementptr inbounds double, ptr %851, i64 %852
  store double 0.000000e+00, ptr %853, align 8, !tbaa !32
  %854 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !32
  %855 = load ptr, ptr %5, align 8, !tbaa !5
  %856 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %855, i32 0, i32 20
  %857 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %856, i32 0, i32 4
  %858 = load ptr, ptr %857, align 8, !tbaa !31
  %859 = load i64, ptr %11, align 8, !tbaa !19
  %860 = getelementptr inbounds double, ptr %858, i64 %859
  store double %854, ptr %860, align 8, !tbaa !32
  br label %861

861:                                              ; preds = %847
  %862 = load i64, ptr %11, align 8, !tbaa !19
  %863 = add nsw i64 %862, 1
  store i64 %863, ptr %11, align 8, !tbaa !19
  br label %842, !llvm.loop !67

864:                                              ; preds = %842
  store i64 0, ptr %10, align 8, !tbaa !19
  br label %865

865:                                              ; preds = %955, %864
  %866 = load i64, ptr %10, align 8, !tbaa !19
  %867 = load i64, ptr %12, align 8, !tbaa !19
  %868 = sub nsw i64 %867, 1
  %869 = icmp sle i64 %866, %868
  br i1 %869, label %870, label %958

870:                                              ; preds = %865
  %871 = load ptr, ptr %5, align 8, !tbaa !5
  %872 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %871, i32 0, i32 17
  %873 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %872, i32 0, i32 4
  %874 = load ptr, ptr %873, align 8, !tbaa !31
  %875 = load i64, ptr %10, align 8, !tbaa !19
  %876 = getelementptr inbounds double, ptr %874, i64 %875
  %877 = load double, ptr %876, align 8, !tbaa !32
  %878 = load double, ptr %20, align 8, !tbaa !32
  %879 = fdiv double %877, %878
  store double %879, ptr %16, align 8, !tbaa !32
  %880 = load double, ptr %16, align 8, !tbaa !32
  %881 = load double, ptr %16, align 8, !tbaa !32
  %882 = fmul double %880, %881
  store double %882, ptr %16, align 8, !tbaa !32
  %883 = load double, ptr %16, align 8, !tbaa !32
  %884 = fsub double 1.000000e+00, %883
  %885 = load double, ptr %16, align 8, !tbaa !32
  %886 = fsub double 1.000000e+00, %885
  %887 = fmul double %884, %886
  %888 = load double, ptr %16, align 8, !tbaa !32
  %889 = load double, ptr %21, align 8, !tbaa !32
  %890 = fadd double %888, %889
  %891 = fdiv double %887, %890
  store double %891, ptr %15, align 8, !tbaa !32
  %892 = load ptr, ptr %5, align 8, !tbaa !5
  %893 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %892, i32 0, i32 16
  %894 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %893, i32 0, i32 4
  %895 = load ptr, ptr %894, align 8, !tbaa !31
  %896 = load i64, ptr %10, align 8, !tbaa !19
  %897 = getelementptr inbounds i64, ptr %895, i64 %896
  %898 = load i64, ptr %897, align 8, !tbaa !19
  store i64 %898, ptr %14, align 8, !tbaa !19
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %899

899:                                              ; preds = %951, %870
  %900 = load i64, ptr %11, align 8, !tbaa !19
  %901 = load i64, ptr %19, align 8, !tbaa !19
  %902 = sub nsw i64 %901, 1
  %903 = icmp sle i64 %900, %902
  br i1 %903, label %904, label %954

904:                                              ; preds = %899
  %905 = load ptr, ptr %5, align 8, !tbaa !5
  %906 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %905, i32 0, i32 19
  %907 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %906, i32 0, i32 4
  %908 = load ptr, ptr %907, align 8, !tbaa !31
  %909 = load i64, ptr %11, align 8, !tbaa !19
  %910 = getelementptr inbounds double, ptr %908, i64 %909
  %911 = load double, ptr %910, align 8, !tbaa !32
  %912 = load double, ptr %15, align 8, !tbaa !32
  %913 = load ptr, ptr %5, align 8, !tbaa !5
  %914 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %913, i32 0, i32 15
  %915 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %914, i32 0, i32 6
  %916 = load ptr, ptr %915, align 8, !tbaa !31
  %917 = load i64, ptr %14, align 8, !tbaa !19
  %918 = getelementptr inbounds ptr, ptr %916, i64 %917
  %919 = load ptr, ptr %918, align 8, !tbaa !5
  %920 = load i64, ptr %18, align 8, !tbaa !19
  %921 = load i64, ptr %13, align 8, !tbaa !19
  %922 = load i64, ptr %19, align 8, !tbaa !19
  %923 = mul nsw i64 %921, %922
  %924 = add nsw i64 %920, %923
  %925 = load i64, ptr %11, align 8, !tbaa !19
  %926 = add nsw i64 %924, %925
  %927 = getelementptr inbounds double, ptr %919, i64 %926
  %928 = load double, ptr %927, align 8, !tbaa !32
  %929 = call double @llvm.fmuladd.f64(double %912, double %928, double %911)
  %930 = load ptr, ptr %5, align 8, !tbaa !5
  %931 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %930, i32 0, i32 19
  %932 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %931, i32 0, i32 4
  %933 = load ptr, ptr %932, align 8, !tbaa !31
  %934 = load i64, ptr %11, align 8, !tbaa !19
  %935 = getelementptr inbounds double, ptr %933, i64 %934
  store double %929, ptr %935, align 8, !tbaa !32
  %936 = load ptr, ptr %5, align 8, !tbaa !5
  %937 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %936, i32 0, i32 20
  %938 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %937, i32 0, i32 4
  %939 = load ptr, ptr %938, align 8, !tbaa !31
  %940 = load i64, ptr %11, align 8, !tbaa !19
  %941 = getelementptr inbounds double, ptr %939, i64 %940
  %942 = load double, ptr %941, align 8, !tbaa !32
  %943 = load double, ptr %15, align 8, !tbaa !32
  %944 = fadd double %942, %943
  %945 = load ptr, ptr %5, align 8, !tbaa !5
  %946 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %945, i32 0, i32 20
  %947 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %946, i32 0, i32 4
  %948 = load ptr, ptr %947, align 8, !tbaa !31
  %949 = load i64, ptr %11, align 8, !tbaa !19
  %950 = getelementptr inbounds double, ptr %948, i64 %949
  store double %944, ptr %950, align 8, !tbaa !32
  br label %951

951:                                              ; preds = %904
  %952 = load i64, ptr %11, align 8, !tbaa !19
  %953 = add nsw i64 %952, 1
  store i64 %953, ptr %11, align 8, !tbaa !19
  br label %899, !llvm.loop !68

954:                                              ; preds = %899
  br label %955

955:                                              ; preds = %954
  %956 = load i64, ptr %10, align 8, !tbaa !19
  %957 = add nsw i64 %956, 1
  store i64 %957, ptr %10, align 8, !tbaa !19
  br label %865, !llvm.loop !69

958:                                              ; preds = %865
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %959

959:                                              ; preds = %1014, %958
  %960 = load i64, ptr %11, align 8, !tbaa !19
  %961 = load i64, ptr %19, align 8, !tbaa !19
  %962 = sub nsw i64 %961, 1
  %963 = icmp sle i64 %960, %962
  br i1 %963, label %964, label %1017

964:                                              ; preds = %959
  %965 = load ptr, ptr %5, align 8, !tbaa !5
  %966 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %965, i32 0, i32 15
  %967 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %966, i32 0, i32 6
  %968 = load ptr, ptr %967, align 8, !tbaa !31
  %969 = load i64, ptr %9, align 8, !tbaa !19
  %970 = getelementptr inbounds ptr, ptr %968, i64 %969
  %971 = load ptr, ptr %970, align 8, !tbaa !5
  %972 = load i64, ptr %18, align 8, !tbaa !19
  %973 = load i64, ptr %13, align 8, !tbaa !19
  %974 = load i64, ptr %19, align 8, !tbaa !19
  %975 = mul nsw i64 %973, %974
  %976 = add nsw i64 %972, %975
  %977 = load i64, ptr %11, align 8, !tbaa !19
  %978 = add nsw i64 %976, %977
  %979 = getelementptr inbounds double, ptr %971, i64 %978
  %980 = load double, ptr %979, align 8, !tbaa !32
  store double %980, ptr %15, align 8, !tbaa !32
  %981 = load double, ptr %15, align 8, !tbaa !32
  %982 = load ptr, ptr %5, align 8, !tbaa !5
  %983 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %982, i32 0, i32 19
  %984 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %983, i32 0, i32 4
  %985 = load ptr, ptr %984, align 8, !tbaa !31
  %986 = load i64, ptr %11, align 8, !tbaa !19
  %987 = getelementptr inbounds double, ptr %985, i64 %986
  %988 = load double, ptr %987, align 8, !tbaa !32
  %989 = load ptr, ptr %5, align 8, !tbaa !5
  %990 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %989, i32 0, i32 20
  %991 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %990, i32 0, i32 4
  %992 = load ptr, ptr %991, align 8, !tbaa !31
  %993 = load i64, ptr %11, align 8, !tbaa !19
  %994 = getelementptr inbounds double, ptr %992, i64 %993
  %995 = load double, ptr %994, align 8, !tbaa !32
  %996 = fdiv double %988, %995
  %997 = fsub double %981, %996
  %998 = load ptr, ptr %5, align 8, !tbaa !5
  %999 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %998, i32 0, i32 15
  %1000 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %999, i32 0, i32 6
  %1001 = load ptr, ptr %1000, align 8, !tbaa !31
  %1002 = load i64, ptr %9, align 8, !tbaa !19
  %1003 = getelementptr inbounds ptr, ptr %1001, i64 %1002
  %1004 = load ptr, ptr %1003, align 8, !tbaa !5
  %1005 = load i64, ptr %18, align 8, !tbaa !19
  %1006 = load i64, ptr %13, align 8, !tbaa !19
  %1007 = add nsw i64 %1006, 1
  %1008 = load i64, ptr %19, align 8, !tbaa !19
  %1009 = mul nsw i64 %1007, %1008
  %1010 = add nsw i64 %1005, %1009
  %1011 = load i64, ptr %11, align 8, !tbaa !19
  %1012 = add nsw i64 %1010, %1011
  %1013 = getelementptr inbounds double, ptr %1004, i64 %1012
  store double %997, ptr %1013, align 8, !tbaa !32
  br label %1014

1014:                                             ; preds = %964
  %1015 = load i64, ptr %11, align 8, !tbaa !19
  %1016 = add nsw i64 %1015, 1
  store i64 %1016, ptr %11, align 8, !tbaa !19
  br label %959, !llvm.loop !70

1017:                                             ; preds = %959
  br label %1018

1018:                                             ; preds = %1017
  %1019 = load i64, ptr %9, align 8, !tbaa !19
  %1020 = add nsw i64 %1019, 1
  store i64 %1020, ptr %9, align 8, !tbaa !19
  br label %793, !llvm.loop !71

1021:                                             ; preds = %793
  br label %1022

1022:                                             ; preds = %1021
  %1023 = load i64, ptr %13, align 8, !tbaa !19
  %1024 = add nsw i64 %1023, 1
  store i64 %1024, ptr %13, align 8, !tbaa !19
  br label %752, !llvm.loop !72

1025:                                             ; preds = %752
  %1026 = load ptr, ptr %5, align 8, !tbaa !5
  %1027 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %1026, i32 0, i32 15
  %1028 = load i64, ptr %17, align 8, !tbaa !19
  %1029 = load i64, ptr %18, align 8, !tbaa !19
  %1030 = load i64, ptr %19, align 8, !tbaa !19
  %1031 = load ptr, ptr %5, align 8, !tbaa !5
  %1032 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %1031, i32 0, i32 3
  %1033 = load i64, ptr %1032, align 8, !tbaa !61
  %1034 = mul nsw i64 %1030, %1033
  %1035 = load ptr, ptr %6, align 8, !tbaa !5
  %1036 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %1035, i32 0, i32 11
  %1037 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl11kdtreebuildEPNS_9ae_matrixEllllPNS_6kdtreeEPNS_8ae_stateE(ptr noundef %1027, i64 noundef %1028, i64 noundef %1029, i64 noundef %1034, i64 noundef 2, ptr noundef %1036, ptr noundef %1037)
  %1038 = load ptr, ptr %7, align 8, !tbaa !5
  %1039 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1038, i32 0, i32 0
  store double 0.000000e+00, ptr %1039, align 8, !tbaa !22
  %1040 = load ptr, ptr %7, align 8, !tbaa !5
  %1041 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1040, i32 0, i32 1
  store double 0.000000e+00, ptr %1041, align 8, !tbaa !24
  %1042 = load ptr, ptr %7, align 8, !tbaa !5
  %1043 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1042, i32 0, i32 2
  store double 0.000000e+00, ptr %1043, align 8, !tbaa !25
  store double 0.000000e+00, ptr %22, align 8, !tbaa !32
  store double 0.000000e+00, ptr %23, align 8, !tbaa !32
  store i64 0, ptr %9, align 8, !tbaa !19
  br label %1044

1044:                                             ; preds = %1136, %1025
  %1045 = load i64, ptr %9, align 8, !tbaa !19
  %1046 = load i64, ptr %17, align 8, !tbaa !19
  %1047 = sub nsw i64 %1046, 1
  %1048 = icmp sle i64 %1045, %1047
  br i1 %1048, label %1049, label %1139

1049:                                             ; preds = %1044
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %1050

1050:                                             ; preds = %1132, %1049
  %1051 = load i64, ptr %11, align 8, !tbaa !19
  %1052 = load i64, ptr %19, align 8, !tbaa !19
  %1053 = sub nsw i64 %1052, 1
  %1054 = icmp sle i64 %1051, %1053
  br i1 %1054, label %1055, label %1135

1055:                                             ; preds = %1050
  %1056 = load ptr, ptr %5, align 8, !tbaa !5
  %1057 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %1056, i32 0, i32 15
  %1058 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %1057, i32 0, i32 6
  %1059 = load ptr, ptr %1058, align 8, !tbaa !31
  %1060 = load i64, ptr %9, align 8, !tbaa !19
  %1061 = getelementptr inbounds ptr, ptr %1059, i64 %1060
  %1062 = load ptr, ptr %1061, align 8, !tbaa !5
  %1063 = load i64, ptr %18, align 8, !tbaa !19
  %1064 = load ptr, ptr %5, align 8, !tbaa !5
  %1065 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %1064, i32 0, i32 3
  %1066 = load i64, ptr %1065, align 8, !tbaa !61
  %1067 = load i64, ptr %19, align 8, !tbaa !19
  %1068 = mul nsw i64 %1066, %1067
  %1069 = add nsw i64 %1063, %1068
  %1070 = load i64, ptr %11, align 8, !tbaa !19
  %1071 = add nsw i64 %1069, %1070
  %1072 = getelementptr inbounds double, ptr %1062, i64 %1071
  %1073 = load double, ptr %1072, align 8, !tbaa !32
  %1074 = load ptr, ptr %8, align 8, !tbaa !5
  %1075 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %1073, ptr noundef %1074)
  store double %1075, ptr %15, align 8, !tbaa !32
  %1076 = load ptr, ptr %7, align 8, !tbaa !5
  %1077 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1076, i32 0, i32 0
  %1078 = load double, ptr %1077, align 8, !tbaa !22
  %1079 = load double, ptr %15, align 8, !tbaa !32
  %1080 = load double, ptr %15, align 8, !tbaa !32
  %1081 = call double @llvm.fmuladd.f64(double %1079, double %1080, double %1078)
  %1082 = load ptr, ptr %7, align 8, !tbaa !5
  %1083 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1082, i32 0, i32 0
  store double %1081, ptr %1083, align 8, !tbaa !22
  %1084 = load ptr, ptr %7, align 8, !tbaa !5
  %1085 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1084, i32 0, i32 1
  %1086 = load double, ptr %1085, align 8, !tbaa !24
  %1087 = load double, ptr %15, align 8, !tbaa !32
  %1088 = fadd double %1086, %1087
  %1089 = load ptr, ptr %7, align 8, !tbaa !5
  %1090 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1089, i32 0, i32 1
  store double %1088, ptr %1090, align 8, !tbaa !24
  %1091 = load ptr, ptr %7, align 8, !tbaa !5
  %1092 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1091, i32 0, i32 2
  %1093 = load double, ptr %1092, align 8, !tbaa !25
  %1094 = load double, ptr %15, align 8, !tbaa !32
  %1095 = load ptr, ptr %8, align 8, !tbaa !5
  %1096 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %1094, ptr noundef %1095)
  %1097 = load ptr, ptr %8, align 8, !tbaa !5
  %1098 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %1093, double noundef %1096, ptr noundef %1097)
  %1099 = load ptr, ptr %7, align 8, !tbaa !5
  %1100 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1099, i32 0, i32 2
  store double %1098, ptr %1100, align 8, !tbaa !25
  %1101 = load double, ptr %22, align 8, !tbaa !32
  %1102 = load double, ptr %15, align 8, !tbaa !32
  %1103 = load double, ptr %15, align 8, !tbaa !32
  %1104 = call double @llvm.fmuladd.f64(double %1102, double %1103, double %1101)
  store double %1104, ptr %22, align 8, !tbaa !32
  %1105 = load double, ptr %23, align 8, !tbaa !32
  %1106 = load ptr, ptr %5, align 8, !tbaa !5
  %1107 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %1106, i32 0, i32 10
  %1108 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1107, i32 0, i32 4
  %1109 = load ptr, ptr %1108, align 8, !tbaa !31
  %1110 = load i64, ptr %9, align 8, !tbaa !19
  %1111 = load i64, ptr %18, align 8, !tbaa !19
  %1112 = load i64, ptr %19, align 8, !tbaa !19
  %1113 = add nsw i64 %1111, %1112
  %1114 = mul nsw i64 %1110, %1113
  %1115 = load i64, ptr %18, align 8, !tbaa !19
  %1116 = add nsw i64 %1114, %1115
  %1117 = load i64, ptr %11, align 8, !tbaa !19
  %1118 = add nsw i64 %1116, %1117
  %1119 = getelementptr inbounds double, ptr %1109, i64 %1118
  %1120 = load double, ptr %1119, align 8, !tbaa !32
  %1121 = load ptr, ptr %5, align 8, !tbaa !5
  %1122 = getelementptr inbounds %"struct.alglib_impl::idwbuilder", ptr %1121, i32 0, i32 22
  %1123 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %1122, i32 0, i32 4
  %1124 = load ptr, ptr %1123, align 8, !tbaa !31
  %1125 = load i64, ptr %11, align 8, !tbaa !19
  %1126 = getelementptr inbounds double, ptr %1124, i64 %1125
  %1127 = load double, ptr %1126, align 8, !tbaa !32
  %1128 = fsub double %1120, %1127
  %1129 = load ptr, ptr %8, align 8, !tbaa !5
  %1130 = call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef %1128, ptr noundef %1129)
  %1131 = fadd double %1105, %1130
  store double %1131, ptr %23, align 8, !tbaa !32
  br label %1132

1132:                                             ; preds = %1055
  %1133 = load i64, ptr %11, align 8, !tbaa !19
  %1134 = add nsw i64 %1133, 1
  store i64 %1134, ptr %11, align 8, !tbaa !19
  br label %1050, !llvm.loop !73

1135:                                             ; preds = %1050
  br label %1136

1136:                                             ; preds = %1135
  %1137 = load i64, ptr %9, align 8, !tbaa !19
  %1138 = add nsw i64 %1137, 1
  store i64 %1138, ptr %9, align 8, !tbaa !19
  br label %1044, !llvm.loop !74

1139:                                             ; preds = %1044
  %1140 = load ptr, ptr %7, align 8, !tbaa !5
  %1141 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1140, i32 0, i32 0
  %1142 = load double, ptr %1141, align 8, !tbaa !22
  %1143 = load i64, ptr %17, align 8, !tbaa !19
  %1144 = load i64, ptr %19, align 8, !tbaa !19
  %1145 = mul nsw i64 %1143, %1144
  %1146 = sitofp i64 %1145 to double
  %1147 = fdiv double %1142, %1146
  %1148 = load ptr, ptr %8, align 8, !tbaa !5
  %1149 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %1147, ptr noundef %1148)
  %1150 = load ptr, ptr %7, align 8, !tbaa !5
  %1151 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1150, i32 0, i32 0
  store double %1149, ptr %1151, align 8, !tbaa !22
  %1152 = load ptr, ptr %7, align 8, !tbaa !5
  %1153 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1152, i32 0, i32 1
  %1154 = load double, ptr %1153, align 8, !tbaa !24
  %1155 = load i64, ptr %17, align 8, !tbaa !19
  %1156 = load i64, ptr %19, align 8, !tbaa !19
  %1157 = mul nsw i64 %1155, %1156
  %1158 = sitofp i64 %1157 to double
  %1159 = fdiv double %1154, %1158
  %1160 = load ptr, ptr %7, align 8, !tbaa !5
  %1161 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1160, i32 0, i32 1
  store double %1159, ptr %1161, align 8, !tbaa !24
  %1162 = load double, ptr %22, align 8, !tbaa !32
  %1163 = load double, ptr %23, align 8, !tbaa !32
  %1164 = load ptr, ptr %8, align 8, !tbaa !5
  %1165 = call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %1163, double noundef 1.000000e+00, ptr noundef %1164)
  %1166 = fdiv double %1162, %1165
  %1167 = fsub double 1.000000e+00, %1166
  %1168 = load ptr, ptr %7, align 8, !tbaa !5
  %1169 = getelementptr inbounds %"struct.alglib_impl::idwreport", ptr %1168, i32 0, i32 3
  store double %1167, ptr %1169, align 8, !tbaa !26
  %1170 = load ptr, ptr %6, align 8, !tbaa !5
  %1171 = load ptr, ptr %6, align 8, !tbaa !5
  %1172 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %1171, i32 0, i32 14
  %1173 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef %1170, ptr noundef %1172, ptr noundef %1173)
  store i32 1, ptr %24, align 4
  br label %1176

1174:                                             ; preds = %563
  %1175 = load ptr, ptr %8, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.130, ptr noundef %1175)
  store i32 0, ptr %24, align 4
  br label %1176

1176:                                             ; preds = %1174, %1139, %546, %411, %74
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  %1177 = load i32, ptr %24, align 4
  switch i32 %1177, label %1179 [
    i32 0, label %1178
    i32 1, label %1178
  ]

1178:                                             ; preds = %1176, %1176
  ret void

1179:                                             ; preds = %1176
  unreachable
}

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl15_idwmodel_clearEPv(ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl16_idwreport_clearEPv(ptr noundef) #2

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

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

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

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

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

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !11, i64 208}
!10 = !{!"_ZTSN11alglib_impl10idwbuilderE", !11, i64 0, !12, i64 8, !11, i64 72, !11, i64 80, !15, i64 88, !15, i64 96, !15, i64 104, !15, i64 112, !15, i64 120, !15, i64 128, !12, i64 136, !11, i64 200, !11, i64 208, !11, i64 216, !16, i64 224, !16, i64 304, !12, i64 384, !12, i64 448, !12, i64 512, !12, i64 576, !12, i64 640, !17, i64 704, !12, i64 1704}
!11 = !{!"long", !7, i64 0}
!12 = !{!"_ZTSN11alglib_impl9ae_vectorE", !11, i64 0, !11, i64 8, !13, i64 16, !14, i64 24, !7, i64 56}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!15 = !{!"double", !7, i64 0}
!16 = !{!"_ZTSN11alglib_impl9ae_matrixE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !13, i64 32, !14, i64 40, !7, i64 72}
!17 = !{!"_ZTSN11alglib_impl6kdtreeE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !16, i64 32, !12, i64 112, !12, i64 176, !12, i64 240, !12, i64 304, !12, i64 368, !18, i64 432, !11, i64 992}
!18 = !{!"_ZTSN11alglib_impl19kdtreerequestbufferE", !12, i64 0, !12, i64 64, !12, i64 128, !11, i64 192, !15, i64 200, !13, i64 208, !15, i64 216, !11, i64 224, !12, i64 232, !12, i64 296, !12, i64 360, !12, i64 424, !12, i64 488, !15, i64 552}
!19 = !{!11, !11, i64 0}
!20 = !{!10, !11, i64 216}
!21 = !{!10, !11, i64 200}
!22 = !{!23, !15, i64 0}
!23 = !{!"_ZTSN11alglib_impl9idwreportE", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24}
!24 = !{!23, !15, i64 8}
!25 = !{!23, !15, i64 16}
!26 = !{!23, !15, i64 24}
!27 = !{!28, !11, i64 0}
!28 = !{!"_ZTSN11alglib_impl8idwmodelE", !11, i64 0, !11, i64 8, !12, i64 16, !11, i64 80, !11, i64 88, !15, i64 96, !15, i64 104, !15, i64 112, !15, i64 120, !15, i64 128, !15, i64 136, !17, i64 144, !11, i64 1144, !12, i64 1152, !29, i64 1216}
!29 = !{!"_ZTSN11alglib_impl13idwcalcbufferE", !12, i64 0, !12, i64 64, !12, i64 128, !12, i64 192, !16, i64 256, !12, i64 336, !18, i64 400}
!30 = !{!28, !11, i64 8}
!31 = !{!7, !7, i64 0}
!32 = !{!15, !15, i64 0}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.mustprogress"}
!35 = !{!28, !11, i64 80}
!36 = !{!28, !11, i64 88}
!37 = !{!28, !15, i64 96}
!38 = !{!28, !15, i64 104}
!39 = !{!28, !15, i64 112}
!40 = !{!28, !15, i64 120}
!41 = !{!28, !15, i64 128}
!42 = !{!28, !15, i64 136}
!43 = !{!28, !11, i64 1144}
!44 = distinct !{!44, !34}
!45 = distinct !{!45, !34}
!46 = distinct !{!46, !34}
!47 = distinct !{!47, !34}
!48 = distinct !{!48, !34}
!49 = !{!10, !11, i64 72}
!50 = !{!10, !11, i64 0}
!51 = distinct !{!51, !34}
!52 = distinct !{!52, !34}
!53 = !{!10, !15, i64 128}
!54 = distinct !{!54, !34}
!55 = distinct !{!55, !34}
!56 = distinct !{!56, !34}
!57 = !{!10, !15, i64 88}
!58 = distinct !{!58, !34}
!59 = distinct !{!59, !34}
!60 = distinct !{!60, !34}
!61 = !{!10, !11, i64 80}
!62 = !{!10, !15, i64 104}
!63 = distinct !{!63, !34}
!64 = distinct !{!64, !34}
!65 = distinct !{!65, !34}
!66 = distinct !{!66, !34}
!67 = distinct !{!67, !34}
!68 = distinct !{!68, !34}
!69 = distinct !{!69, !34}
!70 = distinct !{!70, !34}
!71 = distinct !{!71, !34}
!72 = distinct !{!72, !34}
!73 = distinct !{!73, !34}
!74 = distinct !{!74, !34}


; 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_implL6idw_w0E = external hidden local_unnamed_addr global double, align 8
@.str.129 = external hidden unnamed_addr constant [31 x i8], align 1
@_ZN11alglib_implL8idw_mepsE = external hidden local_unnamed_addr global double, align 8
@.str.130 = external hidden unnamed_addr constant [53 x i8], align 1

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl6idwfitEPNS_10idwbuilderEPNS_8idwmodelEPNS_9idwreportEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #1 {
  tail call void @_ZN11alglib_impl15_idwmodel_clearEPv(ptr noundef %1)
  tail call void @_ZN11alglib_impl16_idwreport_clearEPv(ptr noundef %2)
  %5 = getelementptr inbounds i8, ptr %0, i64 208
  %6 = load i64, ptr %5, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 216
  %8 = load i64, ptr %7, align 8, !tbaa !18
  %9 = getelementptr inbounds i8, ptr %0, i64 200
  %10 = load i64, ptr %9, align 8, !tbaa !19
  %11 = getelementptr inbounds i8, ptr %2, i64 8
  %12 = getelementptr inbounds i8, ptr %2, i64 16
  %13 = getelementptr inbounds i8, ptr %2, i64 24
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %2, i8 0, i64 24, i1 false)
  store double 1.000000e+00, ptr %13, align 8, !tbaa !20
  %14 = icmp eq i64 %10, 0
  br i1 %14, label %15, label %43

15:                                               ; preds = %4
  store i64 %6, ptr %1, align 8, !tbaa !22
  %16 = getelementptr inbounds i8, ptr %1, i64 8
  store i64 %8, ptr %16, align 8, !tbaa !25
  %17 = getelementptr inbounds i8, ptr %1, i64 16
  tail call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %17, i64 noundef %8, ptr noundef %3)
  %.not499.not611 = icmp sgt i64 %8, 0
  br i1 %.not499.not611, label %.lr.ph614, label %._crit_edge615

.lr.ph614:                                        ; preds = %15
  %18 = getelementptr inbounds i8, ptr %1, i64 72
  %19 = add nsw i64 %8, -1
  %xtraiter742 = and i64 %8, 3
  %20 = icmp ult i64 %19, 3
  br i1 %20, label %._crit_edge615.loopexit.unr-lcssa, label %.lr.ph614.new

.lr.ph614.new:                                    ; preds = %.lr.ph614
  %unroll_iter745 = and i64 %8, 9223372036854775804
  br label %21

21:                                               ; preds = %21, %.lr.ph614.new
  %.0460612 = phi i64 [ 0, %.lr.ph614.new ], [ %33, %21 ]
  %niter746 = phi i64 [ 0, %.lr.ph614.new ], [ %niter746.next.3, %21 ]
  %22 = load ptr, ptr %18, align 8, !tbaa !26
  %23 = getelementptr inbounds double, ptr %22, i64 %.0460612
  store double 0.000000e+00, ptr %23, align 8, !tbaa !27
  %24 = or disjoint i64 %.0460612, 1
  %25 = load ptr, ptr %18, align 8, !tbaa !26
  %26 = getelementptr inbounds double, ptr %25, i64 %24
  store double 0.000000e+00, ptr %26, align 8, !tbaa !27
  %27 = or disjoint i64 %.0460612, 2
  %28 = load ptr, ptr %18, align 8, !tbaa !26
  %29 = getelementptr inbounds double, ptr %28, i64 %27
  store double 0.000000e+00, ptr %29, align 8, !tbaa !27
  %30 = or disjoint i64 %.0460612, 3
  %31 = load ptr, ptr %18, align 8, !tbaa !26
  %32 = getelementptr inbounds double, ptr %31, i64 %30
  store double 0.000000e+00, ptr %32, align 8, !tbaa !27
  %33 = add nuw nsw i64 %.0460612, 4
  %niter746.next.3 = add i64 %niter746, 4
  %niter746.ncmp.3 = icmp eq i64 %niter746.next.3, %unroll_iter745
  br i1 %niter746.ncmp.3, label %._crit_edge615.loopexit.unr-lcssa, label %21, !llvm.loop !28

._crit_edge615.loopexit.unr-lcssa:                ; preds = %21, %.lr.ph614
  %.0460612.unr = phi i64 [ 0, %.lr.ph614 ], [ %33, %21 ]
  %lcmp.mod744.not = icmp eq i64 %xtraiter742, 0
  br i1 %lcmp.mod744.not, label %._crit_edge615, label %.epil.preheader741

.epil.preheader741:                               ; preds = %._crit_edge615.loopexit.unr-lcssa, %.epil.preheader741
  %.0460612.epil = phi i64 [ %36, %.epil.preheader741 ], [ %.0460612.unr, %._crit_edge615.loopexit.unr-lcssa ]
  %epil.iter743 = phi i64 [ %epil.iter743.next, %.epil.preheader741 ], [ 0, %._crit_edge615.loopexit.unr-lcssa ]
  %34 = load ptr, ptr %18, align 8, !tbaa !26
  %35 = getelementptr inbounds double, ptr %34, i64 %.0460612.epil
  store double 0.000000e+00, ptr %35, align 8, !tbaa !27
  %36 = add nuw nsw i64 %.0460612.epil, 1
  %epil.iter743.next = add i64 %epil.iter743, 1
  %epil.iter743.cmp.not = icmp eq i64 %epil.iter743.next, %xtraiter742
  br i1 %epil.iter743.cmp.not, label %._crit_edge615, label %.epil.preheader741, !llvm.loop !30

._crit_edge615:                                   ; preds = %._crit_edge615.loopexit.unr-lcssa, %.epil.preheader741, %15
  %37 = getelementptr inbounds i8, ptr %1, i64 80
  %38 = getelementptr inbounds i8, ptr %1, i64 96
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %37, i8 0, i64 16, i1 false)
  store <2 x double> <double 1.000000e+00, double 5.000000e-01>, ptr %38, align 8, !tbaa !27
  %39 = getelementptr inbounds i8, ptr %1, i64 112
  %40 = getelementptr inbounds i8, ptr %1, i64 128
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %39, i8 0, i64 16, i1 false)
  store <2 x double> <double 1.000000e+00, double 2.000000e+00>, ptr %40, align 8, !tbaa !27
  %41 = getelementptr inbounds i8, ptr %1, i64 1144
  store i64 0, ptr %41, align 8, !tbaa !32
  %42 = getelementptr inbounds i8, ptr %1, i64 1216
  tail call void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef nonnull %1, ptr noundef nonnull %42, ptr noundef %3)
  br label %721

43:                                               ; preds = %4
  %44 = icmp sgt i64 %10, 0
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %44, ptr noundef nonnull @.str.129, ptr noundef %3)
  %45 = getelementptr inbounds i8, ptr %0, i64 1704
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %45, i64 noundef %8, ptr noundef %3)
  %.not.not513 = icmp sgt i64 %8, 0
  br i1 %.not.not513, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %43
  %46 = getelementptr inbounds i8, ptr %0, i64 1760
  %47 = add nsw i64 %8, -1
  %xtraiter = and i64 %8, 3
  %48 = icmp ult i64 %47, 3
  br i1 %48, label %.preheader512.unr-lcssa, label %.lr.ph.new

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

.preheader512.unr-lcssa:                          ; preds = %87, %.lr.ph
  %.0463514.unr = phi i64 [ 0, %.lr.ph ], [ %99, %87 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader512, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader512.unr-lcssa, %.epil.preheader
  %.0463514.epil = phi i64 [ %51, %.epil.preheader ], [ %.0463514.unr, %.preheader512.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader512.unr-lcssa ]
  %49 = load ptr, ptr %46, align 8, !tbaa !26
  %50 = getelementptr inbounds double, ptr %49, i64 %.0463514.epil
  store double 0.000000e+00, ptr %50, align 8, !tbaa !27
  %51 = add nuw nsw i64 %.0463514.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 %.preheader512, label %.epil.preheader, !llvm.loop !33

.preheader512:                                    ; preds = %.epil.preheader, %.preheader512.unr-lcssa
  br i1 %44, label %.preheader511.lr.ph, label %.preheader510

.preheader511.lr.ph:                              ; preds = %.preheader512
  %52 = getelementptr inbounds i8, ptr %0, i64 1760
  %53 = getelementptr inbounds i8, ptr %0, i64 192
  %54 = add nsw i64 %8, %6
  br i1 %.not.not513, label %.preheader511.us.preheader, label %._crit_edge.thread

.preheader511.us.preheader:                       ; preds = %.preheader511.lr.ph
  %xtraiter661 = and i64 %8, 1
  %55 = icmp eq i64 %47, 0
  %unroll_iter664 = and i64 %8, 9223372036854775806
  %lcmp.mod663.not = icmp eq i64 %xtraiter661, 0
  br label %.preheader511.us

.preheader511.us:                                 ; preds = %.preheader511.us.preheader, %._crit_edge.us
  %.1461519.us = phi i64 [ %86, %._crit_edge.us ], [ 0, %.preheader511.us.preheader ]
  %56 = mul nsw i64 %.1461519.us, %54
  br i1 %55, label %._crit_edge.us.unr-lcssa, label %.preheader511.us.new

.preheader511.us.new:                             ; preds = %.preheader511.us, %.preheader511.us.new
  %.1464516.us = phi i64 [ %76, %.preheader511.us.new ], [ 0, %.preheader511.us ]
  %niter665 = phi i64 [ %niter665.next.1, %.preheader511.us.new ], [ 0, %.preheader511.us ]
  %57 = load ptr, ptr %52, align 8, !tbaa !26
  %58 = getelementptr inbounds double, ptr %57, i64 %.1464516.us
  %59 = load double, ptr %58, align 8, !tbaa !27
  %60 = load ptr, ptr %53, align 8, !tbaa !26
  %61 = getelementptr double, ptr %60, i64 %56
  %62 = getelementptr double, ptr %61, i64 %6
  %63 = getelementptr double, ptr %62, i64 %.1464516.us
  %64 = load double, ptr %63, align 8, !tbaa !27
  %65 = fadd double %59, %64
  store double %65, ptr %58, align 8, !tbaa !27
  %66 = or disjoint i64 %.1464516.us, 1
  %67 = load ptr, ptr %52, align 8, !tbaa !26
  %68 = getelementptr inbounds double, ptr %67, i64 %66
  %69 = load double, ptr %68, align 8, !tbaa !27
  %70 = load ptr, ptr %53, align 8, !tbaa !26
  %71 = getelementptr double, ptr %70, i64 %56
  %72 = getelementptr double, ptr %71, i64 %6
  %73 = getelementptr double, ptr %72, i64 %66
  %74 = load double, ptr %73, align 8, !tbaa !27
  %75 = fadd double %69, %74
  store double %75, ptr %68, align 8, !tbaa !27
  %76 = add nuw nsw i64 %.1464516.us, 2
  %niter665.next.1 = add i64 %niter665, 2
  %niter665.ncmp.1 = icmp eq i64 %niter665.next.1, %unroll_iter664
  br i1 %niter665.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.preheader511.us.new, !llvm.loop !34

._crit_edge.us.unr-lcssa:                         ; preds = %.preheader511.us.new, %.preheader511.us
  %.1464516.us.unr = phi i64 [ 0, %.preheader511.us ], [ %76, %.preheader511.us.new ]
  br i1 %lcmp.mod663.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %77 = load ptr, ptr %52, align 8, !tbaa !26
  %78 = getelementptr inbounds double, ptr %77, i64 %.1464516.us.unr
  %79 = load double, ptr %78, align 8, !tbaa !27
  %80 = load ptr, ptr %53, align 8, !tbaa !26
  %81 = getelementptr double, ptr %80, i64 %56
  %82 = getelementptr double, ptr %81, i64 %6
  %83 = getelementptr double, ptr %82, i64 %.1464516.us.unr
  %84 = load double, ptr %83, align 8, !tbaa !27
  %85 = fadd double %79, %84
  store double %85, ptr %78, align 8, !tbaa !27
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %86 = add nuw nsw i64 %.1461519.us, 1
  %exitcond623.not = icmp eq i64 %86, %10
  br i1 %exitcond623.not, label %.preheader510, label %.preheader511.us, !llvm.loop !35

87:                                               ; preds = %87, %.lr.ph.new
  %.0463514 = phi i64 [ 0, %.lr.ph.new ], [ %99, %87 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %87 ]
  %88 = load ptr, ptr %46, align 8, !tbaa !26
  %89 = getelementptr inbounds double, ptr %88, i64 %.0463514
  store double 0.000000e+00, ptr %89, align 8, !tbaa !27
  %90 = or disjoint i64 %.0463514, 1
  %91 = load ptr, ptr %46, align 8, !tbaa !26
  %92 = getelementptr inbounds double, ptr %91, i64 %90
  store double 0.000000e+00, ptr %92, align 8, !tbaa !27
  %93 = or disjoint i64 %.0463514, 2
  %94 = load ptr, ptr %46, align 8, !tbaa !26
  %95 = getelementptr inbounds double, ptr %94, i64 %93
  store double 0.000000e+00, ptr %95, align 8, !tbaa !27
  %96 = or disjoint i64 %.0463514, 3
  %97 = load ptr, ptr %46, align 8, !tbaa !26
  %98 = getelementptr inbounds double, ptr %97, i64 %96
  store double 0.000000e+00, ptr %98, align 8, !tbaa !27
  %99 = add nuw nsw i64 %.0463514, 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 %.preheader512.unr-lcssa, label %87, !llvm.loop !36

.preheader510:                                    ; preds = %._crit_edge.us, %.preheader512
  br i1 %.not.not513, label %.lr.ph522, label %._crit_edge.thread

.lr.ph522:                                        ; preds = %.preheader510
  %100 = getelementptr inbounds i8, ptr %0, i64 1760
  %101 = sitofp i64 %10 to double
  %xtraiter667 = and i64 %8, 3
  %102 = icmp ult i64 %47, 3
  br i1 %102, label %._crit_edge.unr-lcssa, label %.lr.ph522.new

.lr.ph522.new:                                    ; preds = %.lr.ph522
  %unroll_iter670 = and i64 %8, 9223372036854775804
  br label %103

103:                                              ; preds = %103, %.lr.ph522.new
  %.2465521 = phi i64 [ 0, %.lr.ph522.new ], [ %123, %103 ]
  %niter671 = phi i64 [ 0, %.lr.ph522.new ], [ %niter671.next.3, %103 ]
  %104 = load ptr, ptr %100, align 8, !tbaa !26
  %105 = getelementptr inbounds double, ptr %104, i64 %.2465521
  %106 = load double, ptr %105, align 8, !tbaa !27
  %107 = fdiv double %106, %101
  store double %107, ptr %105, align 8, !tbaa !27
  %108 = or disjoint i64 %.2465521, 1
  %109 = load ptr, ptr %100, align 8, !tbaa !26
  %110 = getelementptr inbounds double, ptr %109, i64 %108
  %111 = load double, ptr %110, align 8, !tbaa !27
  %112 = fdiv double %111, %101
  store double %112, ptr %110, align 8, !tbaa !27
  %113 = or disjoint i64 %.2465521, 2
  %114 = load ptr, ptr %100, align 8, !tbaa !26
  %115 = getelementptr inbounds double, ptr %114, i64 %113
  %116 = load double, ptr %115, align 8, !tbaa !27
  %117 = fdiv double %116, %101
  store double %117, ptr %115, align 8, !tbaa !27
  %118 = or disjoint i64 %.2465521, 3
  %119 = load ptr, ptr %100, align 8, !tbaa !26
  %120 = getelementptr inbounds double, ptr %119, i64 %118
  %121 = load double, ptr %120, align 8, !tbaa !27
  %122 = fdiv double %121, %101
  store double %122, ptr %120, align 8, !tbaa !27
  %123 = add nuw nsw i64 %.2465521, 4
  %niter671.next.3 = add i64 %niter671, 4
  %niter671.ncmp.3 = icmp eq i64 %niter671.next.3, %unroll_iter670
  br i1 %niter671.ncmp.3, label %._crit_edge.unr-lcssa, label %103, !llvm.loop !37

._crit_edge.thread:                               ; preds = %43, %.preheader510, %.preheader511.lr.ph
  %124 = getelementptr inbounds i8, ptr %1, i64 16
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %124, i64 noundef %8, ptr noundef %3)
  br label %._crit_edge527

._crit_edge.unr-lcssa:                            ; preds = %103, %.lr.ph522
  %.2465521.unr = phi i64 [ 0, %.lr.ph522 ], [ %123, %103 ]
  %lcmp.mod669.not = icmp eq i64 %xtraiter667, 0
  br i1 %lcmp.mod669.not, label %._crit_edge, label %.epil.preheader666

.epil.preheader666:                               ; preds = %._crit_edge.unr-lcssa, %.epil.preheader666
  %.2465521.epil = phi i64 [ %129, %.epil.preheader666 ], [ %.2465521.unr, %._crit_edge.unr-lcssa ]
  %epil.iter668 = phi i64 [ %epil.iter668.next, %.epil.preheader666 ], [ 0, %._crit_edge.unr-lcssa ]
  %125 = load ptr, ptr %100, align 8, !tbaa !26
  %126 = getelementptr inbounds double, ptr %125, i64 %.2465521.epil
  %127 = load double, ptr %126, align 8, !tbaa !27
  %128 = fdiv double %127, %101
  store double %128, ptr %126, align 8, !tbaa !27
  %129 = add nuw nsw i64 %.2465521.epil, 1
  %epil.iter668.next = add i64 %epil.iter668, 1
  %epil.iter668.cmp.not = icmp eq i64 %epil.iter668.next, %xtraiter667
  br i1 %epil.iter668.cmp.not, label %._crit_edge, label %.epil.preheader666, !llvm.loop !38

._crit_edge:                                      ; preds = %.epil.preheader666, %._crit_edge.unr-lcssa
  %130 = getelementptr inbounds i8, ptr %1, i64 16
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %130, i64 noundef %8, ptr noundef %3)
  br i1 %.not.not513, label %.lr.ph526, label %._crit_edge527

.lr.ph526:                                        ; preds = %._crit_edge
  %131 = getelementptr inbounds i8, ptr %0, i64 1760
  %132 = getelementptr inbounds i8, ptr %1, i64 72
  %xtraiter673 = and i64 %8, 3
  %133 = icmp ult i64 %47, 3
  br i1 %133, label %._crit_edge527.loopexit.unr-lcssa, label %.lr.ph526.new

.lr.ph526.new:                                    ; preds = %.lr.ph526
  %unroll_iter676 = and i64 %8, 9223372036854775804
  br label %134

134:                                              ; preds = %134, %.lr.ph526.new
  %.3466524 = phi i64 [ 0, %.lr.ph526.new ], [ %158, %134 ]
  %niter677 = phi i64 [ 0, %.lr.ph526.new ], [ %niter677.next.3, %134 ]
  %135 = load ptr, ptr %131, align 8, !tbaa !26
  %136 = getelementptr inbounds double, ptr %135, i64 %.3466524
  %137 = load double, ptr %136, align 8, !tbaa !27
  %138 = load ptr, ptr %132, align 8, !tbaa !26
  %139 = getelementptr inbounds double, ptr %138, i64 %.3466524
  store double %137, ptr %139, align 8, !tbaa !27
  %140 = or disjoint i64 %.3466524, 1
  %141 = load ptr, ptr %131, align 8, !tbaa !26
  %142 = getelementptr inbounds double, ptr %141, i64 %140
  %143 = load double, ptr %142, align 8, !tbaa !27
  %144 = load ptr, ptr %132, align 8, !tbaa !26
  %145 = getelementptr inbounds double, ptr %144, i64 %140
  store double %143, ptr %145, align 8, !tbaa !27
  %146 = or disjoint i64 %.3466524, 2
  %147 = load ptr, ptr %131, align 8, !tbaa !26
  %148 = getelementptr inbounds double, ptr %147, i64 %146
  %149 = load double, ptr %148, align 8, !tbaa !27
  %150 = load ptr, ptr %132, align 8, !tbaa !26
  %151 = getelementptr inbounds double, ptr %150, i64 %146
  store double %149, ptr %151, align 8, !tbaa !27
  %152 = or disjoint i64 %.3466524, 3
  %153 = load ptr, ptr %131, align 8, !tbaa !26
  %154 = getelementptr inbounds double, ptr %153, i64 %152
  %155 = load double, ptr %154, align 8, !tbaa !27
  %156 = load ptr, ptr %132, align 8, !tbaa !26
  %157 = getelementptr inbounds double, ptr %156, i64 %152
  store double %155, ptr %157, align 8, !tbaa !27
  %158 = add nuw nsw i64 %.3466524, 4
  %niter677.next.3 = add i64 %niter677, 4
  %niter677.ncmp.3 = icmp eq i64 %niter677.next.3, %unroll_iter676
  br i1 %niter677.ncmp.3, label %._crit_edge527.loopexit.unr-lcssa, label %134, !llvm.loop !39

._crit_edge527.loopexit.unr-lcssa:                ; preds = %134, %.lr.ph526
  %.3466524.unr = phi i64 [ 0, %.lr.ph526 ], [ %158, %134 ]
  %lcmp.mod675.not = icmp eq i64 %xtraiter673, 0
  br i1 %lcmp.mod675.not, label %._crit_edge527, label %.epil.preheader672

.epil.preheader672:                               ; preds = %._crit_edge527.loopexit.unr-lcssa, %.epil.preheader672
  %.3466524.epil = phi i64 [ %164, %.epil.preheader672 ], [ %.3466524.unr, %._crit_edge527.loopexit.unr-lcssa ]
  %epil.iter674 = phi i64 [ %epil.iter674.next, %.epil.preheader672 ], [ 0, %._crit_edge527.loopexit.unr-lcssa ]
  %159 = load ptr, ptr %131, align 8, !tbaa !26
  %160 = getelementptr inbounds double, ptr %159, i64 %.3466524.epil
  %161 = load double, ptr %160, align 8, !tbaa !27
  %162 = load ptr, ptr %132, align 8, !tbaa !26
  %163 = getelementptr inbounds double, ptr %162, i64 %.3466524.epil
  store double %161, ptr %163, align 8, !tbaa !27
  %164 = add nuw nsw i64 %.3466524.epil, 1
  %epil.iter674.next = add i64 %epil.iter674, 1
  %epil.iter674.cmp.not = icmp eq i64 %epil.iter674.next, %xtraiter673
  br i1 %epil.iter674.cmp.not, label %._crit_edge527, label %.epil.preheader672, !llvm.loop !40

._crit_edge527:                                   ; preds = %._crit_edge527.loopexit.unr-lcssa, %.epil.preheader672, %._crit_edge.thread, %._crit_edge
  %165 = getelementptr inbounds i8, ptr %0, i64 72
  %166 = load i64, ptr %165, align 8, !tbaa !41
  %.not = icmp eq i64 %166, 0
  br i1 %.not, label %.thread, label %167

167:                                              ; preds = %._crit_edge527
  %168 = load i64, ptr %0, align 8, !tbaa !42
  switch i64 %168, label %._crit_edge531 [
    i64 0, label %.preheader509
    i64 3, label %.preheader508
  ]

.preheader509:                                    ; preds = %167
  br i1 %.not.not513, label %.lr.ph530, label %._crit_edge531

.lr.ph530:                                        ; preds = %.preheader509
  %169 = getelementptr inbounds i8, ptr %0, i64 64
  %170 = getelementptr inbounds i8, ptr %1, i64 72
  %171 = add nsw i64 %8, -1
  %xtraiter685 = and i64 %8, 3
  %172 = icmp ult i64 %171, 3
  br i1 %172, label %._crit_edge531.loopexit.unr-lcssa, label %.lr.ph530.new

.lr.ph530.new:                                    ; preds = %.lr.ph530
  %unroll_iter688 = and i64 %8, 9223372036854775804
  br label %173

173:                                              ; preds = %173, %.lr.ph530.new
  %.4467529 = phi i64 [ 0, %.lr.ph530.new ], [ %197, %173 ]
  %niter689 = phi i64 [ 0, %.lr.ph530.new ], [ %niter689.next.3, %173 ]
  %174 = load ptr, ptr %169, align 8, !tbaa !26
  %175 = getelementptr inbounds double, ptr %174, i64 %.4467529
  %176 = load double, ptr %175, align 8, !tbaa !27
  %177 = load ptr, ptr %170, align 8, !tbaa !26
  %178 = getelementptr inbounds double, ptr %177, i64 %.4467529
  store double %176, ptr %178, align 8, !tbaa !27
  %179 = or disjoint i64 %.4467529, 1
  %180 = load ptr, ptr %169, align 8, !tbaa !26
  %181 = getelementptr inbounds double, ptr %180, i64 %179
  %182 = load double, ptr %181, align 8, !tbaa !27
  %183 = load ptr, ptr %170, align 8, !tbaa !26
  %184 = getelementptr inbounds double, ptr %183, i64 %179
  store double %182, ptr %184, align 8, !tbaa !27
  %185 = or disjoint i64 %.4467529, 2
  %186 = load ptr, ptr %169, align 8, !tbaa !26
  %187 = getelementptr inbounds double, ptr %186, i64 %185
  %188 = load double, ptr %187, align 8, !tbaa !27
  %189 = load ptr, ptr %170, align 8, !tbaa !26
  %190 = getelementptr inbounds double, ptr %189, i64 %185
  store double %188, ptr %190, align 8, !tbaa !27
  %191 = or disjoint i64 %.4467529, 3
  %192 = load ptr, ptr %169, align 8, !tbaa !26
  %193 = getelementptr inbounds double, ptr %192, i64 %191
  %194 = load double, ptr %193, align 8, !tbaa !27
  %195 = load ptr, ptr %170, align 8, !tbaa !26
  %196 = getelementptr inbounds double, ptr %195, i64 %191
  store double %194, ptr %196, align 8, !tbaa !27
  %197 = add nuw nsw i64 %.4467529, 4
  %niter689.next.3 = add i64 %niter689, 4
  %niter689.ncmp.3 = icmp eq i64 %niter689.next.3, %unroll_iter688
  br i1 %niter689.ncmp.3, label %._crit_edge531.loopexit.unr-lcssa, label %173, !llvm.loop !43

.preheader508:                                    ; preds = %167
  br i1 %.not.not513, label %.lr.ph534, label %._crit_edge531

.lr.ph534:                                        ; preds = %.preheader508
  %198 = getelementptr inbounds i8, ptr %1, i64 72
  %199 = add nsw i64 %8, -1
  %xtraiter679 = and i64 %8, 3
  %200 = icmp ult i64 %199, 3
  br i1 %200, label %._crit_edge531.loopexit659.unr-lcssa, label %.lr.ph534.new

.lr.ph534.new:                                    ; preds = %.lr.ph534
  %unroll_iter682 = and i64 %8, 9223372036854775804
  br label %201

201:                                              ; preds = %201, %.lr.ph534.new
  %.5468533 = phi i64 [ 0, %.lr.ph534.new ], [ %213, %201 ]
  %niter683 = phi i64 [ 0, %.lr.ph534.new ], [ %niter683.next.3, %201 ]
  %202 = load ptr, ptr %198, align 8, !tbaa !26
  %203 = getelementptr inbounds double, ptr %202, i64 %.5468533
  store double 0.000000e+00, ptr %203, align 8, !tbaa !27
  %204 = or disjoint i64 %.5468533, 1
  %205 = load ptr, ptr %198, align 8, !tbaa !26
  %206 = getelementptr inbounds double, ptr %205, i64 %204
  store double 0.000000e+00, ptr %206, align 8, !tbaa !27
  %207 = or disjoint i64 %.5468533, 2
  %208 = load ptr, ptr %198, align 8, !tbaa !26
  %209 = getelementptr inbounds double, ptr %208, i64 %207
  store double 0.000000e+00, ptr %209, align 8, !tbaa !27
  %210 = or disjoint i64 %.5468533, 3
  %211 = load ptr, ptr %198, align 8, !tbaa !26
  %212 = getelementptr inbounds double, ptr %211, i64 %210
  store double 0.000000e+00, ptr %212, align 8, !tbaa !27
  %213 = add nuw nsw i64 %.5468533, 4
  %niter683.next.3 = add i64 %niter683, 4
  %niter683.ncmp.3 = icmp eq i64 %niter683.next.3, %unroll_iter682
  br i1 %niter683.ncmp.3, label %._crit_edge531.loopexit659.unr-lcssa, label %201, !llvm.loop !44

._crit_edge531.loopexit.unr-lcssa:                ; preds = %173, %.lr.ph530
  %.4467529.unr = phi i64 [ 0, %.lr.ph530 ], [ %197, %173 ]
  %lcmp.mod687.not = icmp eq i64 %xtraiter685, 0
  br i1 %lcmp.mod687.not, label %._crit_edge531, label %.epil.preheader684

.epil.preheader684:                               ; preds = %._crit_edge531.loopexit.unr-lcssa, %.epil.preheader684
  %.4467529.epil = phi i64 [ %219, %.epil.preheader684 ], [ %.4467529.unr, %._crit_edge531.loopexit.unr-lcssa ]
  %epil.iter686 = phi i64 [ %epil.iter686.next, %.epil.preheader684 ], [ 0, %._crit_edge531.loopexit.unr-lcssa ]
  %214 = load ptr, ptr %169, align 8, !tbaa !26
  %215 = getelementptr inbounds double, ptr %214, i64 %.4467529.epil
  %216 = load double, ptr %215, align 8, !tbaa !27
  %217 = load ptr, ptr %170, align 8, !tbaa !26
  %218 = getelementptr inbounds double, ptr %217, i64 %.4467529.epil
  store double %216, ptr %218, align 8, !tbaa !27
  %219 = add nuw nsw i64 %.4467529.epil, 1
  %epil.iter686.next = add i64 %epil.iter686, 1
  %epil.iter686.cmp.not = icmp eq i64 %epil.iter686.next, %xtraiter685
  br i1 %epil.iter686.cmp.not, label %._crit_edge531, label %.epil.preheader684, !llvm.loop !45

._crit_edge531.loopexit659.unr-lcssa:             ; preds = %201, %.lr.ph534
  %.5468533.unr = phi i64 [ 0, %.lr.ph534 ], [ %213, %201 ]
  %lcmp.mod681.not = icmp eq i64 %xtraiter679, 0
  br i1 %lcmp.mod681.not, label %._crit_edge531, label %.epil.preheader678

.epil.preheader678:                               ; preds = %._crit_edge531.loopexit659.unr-lcssa, %.epil.preheader678
  %.5468533.epil = phi i64 [ %222, %.epil.preheader678 ], [ %.5468533.unr, %._crit_edge531.loopexit659.unr-lcssa ]
  %epil.iter680 = phi i64 [ %epil.iter680.next, %.epil.preheader678 ], [ 0, %._crit_edge531.loopexit659.unr-lcssa ]
  %220 = load ptr, ptr %198, align 8, !tbaa !26
  %221 = getelementptr inbounds double, ptr %220, i64 %.5468533.epil
  store double 0.000000e+00, ptr %221, align 8, !tbaa !27
  %222 = add nuw nsw i64 %.5468533.epil, 1
  %epil.iter680.next = add i64 %epil.iter680, 1
  %epil.iter680.cmp.not = icmp eq i64 %epil.iter680.next, %xtraiter679
  br i1 %epil.iter680.cmp.not, label %._crit_edge531, label %.epil.preheader678, !llvm.loop !46

._crit_edge531:                                   ; preds = %._crit_edge531.loopexit659.unr-lcssa, %.epil.preheader678, %._crit_edge531.loopexit.unr-lcssa, %.epil.preheader684, %.preheader508, %.preheader509, %167
  switch i64 %166, label %720 [
    i64 0, label %.thread
    i64 1, label %298
    i64 2, label %390
  ]

.thread:                                          ; preds = %._crit_edge527, %._crit_edge531
  %223 = getelementptr inbounds i8, ptr %1, i64 80
  store i64 0, ptr %223, align 8, !tbaa !47
  store i64 %6, ptr %1, align 8, !tbaa !22
  %224 = getelementptr inbounds i8, ptr %1, i64 8
  store i64 %8, ptr %224, align 8, !tbaa !25
  %225 = getelementptr inbounds i8, ptr %1, i64 88
  store i64 1, ptr %225, align 8, !tbaa !48
  %226 = getelementptr inbounds i8, ptr %1, i64 96
  store <2 x double> <double 1.000000e+00, double 5.000000e-01>, ptr %226, align 8, !tbaa !27
  %227 = getelementptr inbounds i8, ptr %1, i64 112
  %228 = getelementptr inbounds i8, ptr %1, i64 128
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %227, i8 0, i64 16, i1 false)
  store double 1.000000e+00, ptr %228, align 8, !tbaa !49
  %229 = getelementptr inbounds i8, ptr %0, i64 128
  %230 = load double, ptr %229, align 8, !tbaa !50
  %231 = getelementptr inbounds i8, ptr %1, i64 136
  store double %230, ptr %231, align 8, !tbaa !51
  %232 = getelementptr inbounds i8, ptr %1, i64 1152
  %233 = add nsw i64 %8, %6
  %234 = mul nsw i64 %10, %233
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %232, i64 noundef %234, ptr noundef %3)
  br i1 %44, label %.preheader500.lr.ph, label %._crit_edge610

.preheader500.lr.ph:                              ; preds = %.thread
  %.not496.not601 = icmp sgt i64 %6, 0
  %235 = getelementptr inbounds i8, ptr %0, i64 192
  %236 = getelementptr inbounds i8, ptr %1, i64 1208
  %237 = getelementptr inbounds i8, ptr %1, i64 72
  %xtraiter730 = and i64 %6, 1
  %238 = icmp eq i64 %6, 1
  %unroll_iter733 = and i64 %6, 9223372036854775806
  %lcmp.mod732.not = icmp eq i64 %xtraiter730, 0
  %xtraiter736 = and i64 %8, 1
  %239 = icmp eq i64 %8, 1
  %unroll_iter739 = and i64 %8, 9223372036854775806
  %lcmp.mod738.not = icmp eq i64 %xtraiter736, 0
  br label %.preheader500

.preheader500:                                    ; preds = %.preheader500.lr.ph, %._crit_edge607
  %.2609 = phi i64 [ 0, %.preheader500.lr.ph ], [ %295, %._crit_edge607 ]
  br i1 %.not496.not601, label %.lr.ph603, label %.preheader

.lr.ph603:                                        ; preds = %.preheader500
  %240 = mul nsw i64 %.2609, %233
  br i1 %238, label %.preheader.loopexit.unr-lcssa, label %.lr.ph603.new

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph603.new, %.lr.ph603
  %.6469602.unr = phi i64 [ 0, %.lr.ph603 ], [ %262, %.lr.ph603.new ]
  br i1 %lcmp.mod732.not, label %.preheader, label %.preheader.loopexit.epilog-lcssa

.preheader.loopexit.epilog-lcssa:                 ; preds = %.preheader.loopexit.unr-lcssa
  %241 = load ptr, ptr %235, align 8, !tbaa !26
  %242 = add nsw i64 %.6469602.unr, %240
  %243 = getelementptr inbounds double, ptr %241, i64 %242
  %244 = load double, ptr %243, align 8, !tbaa !27
  %245 = load ptr, ptr %236, align 8, !tbaa !26
  %246 = getelementptr inbounds double, ptr %245, i64 %242
  store double %244, ptr %246, align 8, !tbaa !27
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.epilog-lcssa, %.preheader.loopexit.unr-lcssa, %.preheader500
  br i1 %.not.not513, label %.lr.ph606, label %._crit_edge607

.lr.ph606:                                        ; preds = %.preheader
  %247 = mul nsw i64 %.2609, %233
  %248 = add nsw i64 %247, %6
  br i1 %239, label %._crit_edge607.loopexit.unr-lcssa, label %.lr.ph606.new

.lr.ph603.new:                                    ; preds = %.lr.ph603, %.lr.ph603.new
  %.6469602 = phi i64 [ %262, %.lr.ph603.new ], [ 0, %.lr.ph603 ]
  %niter734 = phi i64 [ %niter734.next.1, %.lr.ph603.new ], [ 0, %.lr.ph603 ]
  %249 = load ptr, ptr %235, align 8, !tbaa !26
  %250 = add nsw i64 %.6469602, %240
  %251 = getelementptr inbounds double, ptr %249, i64 %250
  %252 = load double, ptr %251, align 8, !tbaa !27
  %253 = load ptr, ptr %236, align 8, !tbaa !26
  %254 = getelementptr inbounds double, ptr %253, i64 %250
  store double %252, ptr %254, align 8, !tbaa !27
  %255 = or disjoint i64 %.6469602, 1
  %256 = load ptr, ptr %235, align 8, !tbaa !26
  %257 = add nsw i64 %255, %240
  %258 = getelementptr inbounds double, ptr %256, i64 %257
  %259 = load double, ptr %258, align 8, !tbaa !27
  %260 = load ptr, ptr %236, align 8, !tbaa !26
  %261 = getelementptr inbounds double, ptr %260, i64 %257
  store double %259, ptr %261, align 8, !tbaa !27
  %262 = add nuw nsw i64 %.6469602, 2
  %niter734.next.1 = add i64 %niter734, 2
  %niter734.ncmp.1 = icmp eq i64 %niter734.next.1, %unroll_iter733
  br i1 %niter734.ncmp.1, label %.preheader.loopexit.unr-lcssa, label %.lr.ph603.new, !llvm.loop !52

.lr.ph606.new:                                    ; preds = %.lr.ph606, %.lr.ph606.new
  %.7605 = phi i64 [ %284, %.lr.ph606.new ], [ 0, %.lr.ph606 ]
  %niter740 = phi i64 [ %niter740.next.1, %.lr.ph606.new ], [ 0, %.lr.ph606 ]
  %263 = load ptr, ptr %235, align 8, !tbaa !26
  %264 = add nsw i64 %248, %.7605
  %265 = getelementptr inbounds double, ptr %263, i64 %264
  %266 = load double, ptr %265, align 8, !tbaa !27
  %267 = load ptr, ptr %237, align 8, !tbaa !26
  %268 = getelementptr inbounds double, ptr %267, i64 %.7605
  %269 = load double, ptr %268, align 8, !tbaa !27
  %270 = fsub double %266, %269
  %271 = load ptr, ptr %236, align 8, !tbaa !26
  %272 = getelementptr inbounds double, ptr %271, i64 %264
  store double %270, ptr %272, align 8, !tbaa !27
  %273 = or disjoint i64 %.7605, 1
  %274 = load ptr, ptr %235, align 8, !tbaa !26
  %275 = add nsw i64 %248, %273
  %276 = getelementptr inbounds double, ptr %274, i64 %275
  %277 = load double, ptr %276, align 8, !tbaa !27
  %278 = load ptr, ptr %237, align 8, !tbaa !26
  %279 = getelementptr inbounds double, ptr %278, i64 %273
  %280 = load double, ptr %279, align 8, !tbaa !27
  %281 = fsub double %277, %280
  %282 = load ptr, ptr %236, align 8, !tbaa !26
  %283 = getelementptr inbounds double, ptr %282, i64 %275
  store double %281, ptr %283, align 8, !tbaa !27
  %284 = add nuw nsw i64 %.7605, 2
  %niter740.next.1 = add i64 %niter740, 2
  %niter740.ncmp.1 = icmp eq i64 %niter740.next.1, %unroll_iter739
  br i1 %niter740.ncmp.1, label %._crit_edge607.loopexit.unr-lcssa, label %.lr.ph606.new, !llvm.loop !53

._crit_edge607.loopexit.unr-lcssa:                ; preds = %.lr.ph606.new, %.lr.ph606
  %.7605.unr = phi i64 [ 0, %.lr.ph606 ], [ %284, %.lr.ph606.new ]
  br i1 %lcmp.mod738.not, label %._crit_edge607, label %._crit_edge607.loopexit.epilog-lcssa

._crit_edge607.loopexit.epilog-lcssa:             ; preds = %._crit_edge607.loopexit.unr-lcssa
  %285 = load ptr, ptr %235, align 8, !tbaa !26
  %286 = add nsw i64 %248, %.7605.unr
  %287 = getelementptr inbounds double, ptr %285, i64 %286
  %288 = load double, ptr %287, align 8, !tbaa !27
  %289 = load ptr, ptr %237, align 8, !tbaa !26
  %290 = getelementptr inbounds double, ptr %289, i64 %.7605.unr
  %291 = load double, ptr %290, align 8, !tbaa !27
  %292 = fsub double %288, %291
  %293 = load ptr, ptr %236, align 8, !tbaa !26
  %294 = getelementptr inbounds double, ptr %293, i64 %286
  store double %292, ptr %294, align 8, !tbaa !27
  br label %._crit_edge607

._crit_edge607:                                   ; preds = %._crit_edge607.loopexit.epilog-lcssa, %._crit_edge607.loopexit.unr-lcssa, %.preheader
  %295 = add nuw nsw i64 %.2609, 1
  %exitcond644.not = icmp eq i64 %295, %10
  br i1 %exitcond644.not, label %._crit_edge610, label %.preheader500, !llvm.loop !54

._crit_edge610:                                   ; preds = %._crit_edge607, %.thread
  %296 = getelementptr inbounds i8, ptr %1, i64 1144
  store i64 %10, ptr %296, align 8, !tbaa !32
  %297 = getelementptr inbounds i8, ptr %1, i64 1216
  tail call void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef %1, ptr noundef nonnull %297, ptr noundef %3)
  tail call void @_ZN11alglib_implL23idw_errormetricsviacalcEPNS_10idwbuilderEPNS_8idwmodelEPNS_9idwreportEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef %3)
  br label %721

298:                                              ; preds = %._crit_edge531
  %299 = getelementptr inbounds i8, ptr %1, i64 80
  store i64 1, ptr %299, align 8, !tbaa !47
  store i64 %6, ptr %1, align 8, !tbaa !22
  %300 = getelementptr inbounds i8, ptr %1, i64 8
  store i64 %8, ptr %300, align 8, !tbaa !25
  %301 = getelementptr inbounds i8, ptr %1, i64 88
  store i64 1, ptr %301, align 8, !tbaa !48
  %302 = getelementptr inbounds i8, ptr %0, i64 88
  %303 = load double, ptr %302, align 8, !tbaa !55
  %304 = getelementptr inbounds i8, ptr %1, i64 96
  store double %303, ptr %304, align 8, !tbaa !56
  %305 = getelementptr inbounds i8, ptr %1, i64 104
  store double 1.000000e+00, ptr %305, align 8, !tbaa !57
  %306 = getelementptr inbounds i8, ptr %1, i64 112
  %307 = getelementptr inbounds i8, ptr %1, i64 128
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %306, i8 0, i64 16, i1 false)
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %307, align 8, !tbaa !27
  %308 = getelementptr inbounds i8, ptr %0, i64 224
  %309 = add nsw i64 %8, %6
  tail call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %308, i64 noundef %10, i64 noundef %309, ptr noundef %3)
  br i1 %44, label %.preheader502.lr.ph, label %._crit_edge600

.preheader502.lr.ph:                              ; preds = %298
  %.not493.not591 = icmp sgt i64 %6, 0
  %310 = getelementptr inbounds i8, ptr %0, i64 192
  %311 = getelementptr inbounds i8, ptr %0, i64 296
  %312 = getelementptr inbounds i8, ptr %1, i64 72
  %xtraiter718 = and i64 %6, 1
  %313 = icmp eq i64 %6, 1
  %unroll_iter721 = and i64 %6, 9223372036854775806
  %lcmp.mod720.not = icmp eq i64 %xtraiter718, 0
  %xtraiter724 = and i64 %8, 1
  %314 = icmp eq i64 %8, 1
  %unroll_iter727 = and i64 %8, 9223372036854775806
  %lcmp.mod726.not = icmp eq i64 %xtraiter724, 0
  br label %.preheader502

.preheader502:                                    ; preds = %.preheader502.lr.ph, %._crit_edge597
  %.3599 = phi i64 [ 0, %.preheader502.lr.ph ], [ %387, %._crit_edge597 ]
  br i1 %.not493.not591, label %.lr.ph593, label %.preheader501

.lr.ph593:                                        ; preds = %.preheader502
  %315 = mul nsw i64 %.3599, %309
  br i1 %313, label %.preheader501.loopexit.unr-lcssa, label %.lr.ph593.new

.preheader501.loopexit.unr-lcssa:                 ; preds = %.lr.ph593.new, %.lr.ph593
  %.8592.unr = phi i64 [ 0, %.lr.ph593 ], [ %342, %.lr.ph593.new ]
  br i1 %lcmp.mod720.not, label %.preheader501, label %.preheader501.loopexit.epilog-lcssa

.preheader501.loopexit.epilog-lcssa:              ; preds = %.preheader501.loopexit.unr-lcssa
  %316 = load ptr, ptr %310, align 8, !tbaa !26
  %317 = getelementptr double, ptr %316, i64 %315
  %318 = getelementptr double, ptr %317, i64 %.8592.unr
  %319 = load double, ptr %318, align 8, !tbaa !27
  %320 = load ptr, ptr %311, align 8, !tbaa !26
  %321 = getelementptr inbounds ptr, ptr %320, i64 %.3599
  %322 = load ptr, ptr %321, align 8, !tbaa !58
  %323 = getelementptr inbounds double, ptr %322, i64 %.8592.unr
  store double %319, ptr %323, align 8, !tbaa !27
  br label %.preheader501

.preheader501:                                    ; preds = %.preheader501.loopexit.epilog-lcssa, %.preheader501.loopexit.unr-lcssa, %.preheader502
  br i1 %.not.not513, label %.lr.ph596, label %._crit_edge597

.lr.ph596:                                        ; preds = %.preheader501
  %324 = mul nsw i64 %.3599, %309
  br i1 %314, label %._crit_edge597.loopexit.unr-lcssa, label %.lr.ph596.new

.lr.ph593.new:                                    ; preds = %.lr.ph593, %.lr.ph593.new
  %.8592 = phi i64 [ %342, %.lr.ph593.new ], [ 0, %.lr.ph593 ]
  %niter722 = phi i64 [ %niter722.next.1, %.lr.ph593.new ], [ 0, %.lr.ph593 ]
  %325 = load ptr, ptr %310, align 8, !tbaa !26
  %326 = getelementptr double, ptr %325, i64 %315
  %327 = getelementptr double, ptr %326, i64 %.8592
  %328 = load double, ptr %327, align 8, !tbaa !27
  %329 = load ptr, ptr %311, align 8, !tbaa !26
  %330 = getelementptr inbounds ptr, ptr %329, i64 %.3599
  %331 = load ptr, ptr %330, align 8, !tbaa !58
  %332 = getelementptr inbounds double, ptr %331, i64 %.8592
  store double %328, ptr %332, align 8, !tbaa !27
  %333 = or disjoint i64 %.8592, 1
  %334 = load ptr, ptr %310, align 8, !tbaa !26
  %335 = getelementptr double, ptr %334, i64 %315
  %336 = getelementptr double, ptr %335, i64 %333
  %337 = load double, ptr %336, align 8, !tbaa !27
  %338 = load ptr, ptr %311, align 8, !tbaa !26
  %339 = getelementptr inbounds ptr, ptr %338, i64 %.3599
  %340 = load ptr, ptr %339, align 8, !tbaa !58
  %341 = getelementptr inbounds double, ptr %340, i64 %333
  store double %337, ptr %341, align 8, !tbaa !27
  %342 = add nuw nsw i64 %.8592, 2
  %niter722.next.1 = add i64 %niter722, 2
  %niter722.ncmp.1 = icmp eq i64 %niter722.next.1, %unroll_iter721
  br i1 %niter722.ncmp.1, label %.preheader501.loopexit.unr-lcssa, label %.lr.ph593.new, !llvm.loop !59

.lr.ph596.new:                                    ; preds = %.lr.ph596, %.lr.ph596.new
  %.9595 = phi i64 [ %372, %.lr.ph596.new ], [ 0, %.lr.ph596 ]
  %niter728 = phi i64 [ %niter728.next.1, %.lr.ph596.new ], [ 0, %.lr.ph596 ]
  %343 = load ptr, ptr %310, align 8, !tbaa !26
  %344 = getelementptr double, ptr %343, i64 %324
  %345 = getelementptr double, ptr %344, i64 %6
  %346 = getelementptr double, ptr %345, i64 %.9595
  %347 = load double, ptr %346, align 8, !tbaa !27
  %348 = load ptr, ptr %312, align 8, !tbaa !26
  %349 = getelementptr inbounds double, ptr %348, i64 %.9595
  %350 = load double, ptr %349, align 8, !tbaa !27
  %351 = fsub double %347, %350
  %352 = load ptr, ptr %311, align 8, !tbaa !26
  %353 = getelementptr inbounds ptr, ptr %352, i64 %.3599
  %354 = load ptr, ptr %353, align 8, !tbaa !58
  %355 = getelementptr double, ptr %354, i64 %6
  %356 = getelementptr double, ptr %355, i64 %.9595
  store double %351, ptr %356, align 8, !tbaa !27
  %357 = or disjoint i64 %.9595, 1
  %358 = load ptr, ptr %310, align 8, !tbaa !26
  %359 = getelementptr double, ptr %358, i64 %324
  %360 = getelementptr double, ptr %359, i64 %6
  %361 = getelementptr double, ptr %360, i64 %357
  %362 = load double, ptr %361, align 8, !tbaa !27
  %363 = load ptr, ptr %312, align 8, !tbaa !26
  %364 = getelementptr inbounds double, ptr %363, i64 %357
  %365 = load double, ptr %364, align 8, !tbaa !27
  %366 = fsub double %362, %365
  %367 = load ptr, ptr %311, align 8, !tbaa !26
  %368 = getelementptr inbounds ptr, ptr %367, i64 %.3599
  %369 = load ptr, ptr %368, align 8, !tbaa !58
  %370 = getelementptr double, ptr %369, i64 %6
  %371 = getelementptr double, ptr %370, i64 %357
  store double %366, ptr %371, align 8, !tbaa !27
  %372 = add nuw nsw i64 %.9595, 2
  %niter728.next.1 = add i64 %niter728, 2
  %niter728.ncmp.1 = icmp eq i64 %niter728.next.1, %unroll_iter727
  br i1 %niter728.ncmp.1, label %._crit_edge597.loopexit.unr-lcssa, label %.lr.ph596.new, !llvm.loop !60

._crit_edge597.loopexit.unr-lcssa:                ; preds = %.lr.ph596.new, %.lr.ph596
  %.9595.unr = phi i64 [ 0, %.lr.ph596 ], [ %372, %.lr.ph596.new ]
  br i1 %lcmp.mod726.not, label %._crit_edge597, label %._crit_edge597.loopexit.epilog-lcssa

._crit_edge597.loopexit.epilog-lcssa:             ; preds = %._crit_edge597.loopexit.unr-lcssa
  %373 = load ptr, ptr %310, align 8, !tbaa !26
  %374 = getelementptr double, ptr %373, i64 %324
  %375 = getelementptr double, ptr %374, i64 %6
  %376 = getelementptr double, ptr %375, i64 %.9595.unr
  %377 = load double, ptr %376, align 8, !tbaa !27
  %378 = load ptr, ptr %312, align 8, !tbaa !26
  %379 = getelementptr inbounds double, ptr %378, i64 %.9595.unr
  %380 = load double, ptr %379, align 8, !tbaa !27
  %381 = fsub double %377, %380
  %382 = load ptr, ptr %311, align 8, !tbaa !26
  %383 = getelementptr inbounds ptr, ptr %382, i64 %.3599
  %384 = load ptr, ptr %383, align 8, !tbaa !58
  %385 = getelementptr double, ptr %384, i64 %6
  %386 = getelementptr double, ptr %385, i64 %.9595.unr
  store double %381, ptr %386, align 8, !tbaa !27
  br label %._crit_edge597

._crit_edge597:                                   ; preds = %._crit_edge597.loopexit.epilog-lcssa, %._crit_edge597.loopexit.unr-lcssa, %.preheader501
  %387 = add nuw nsw i64 %.3599, 1
  %exitcond641.not = icmp eq i64 %387, %10
  br i1 %exitcond641.not, label %._crit_edge600, label %.preheader502, !llvm.loop !61

._crit_edge600:                                   ; preds = %._crit_edge597, %298
  %388 = getelementptr inbounds i8, ptr %1, i64 144
  tail call void @_ZN11alglib_impl11kdtreebuildEPNS_9ae_matrixEllllPNS_6kdtreeEPNS_8ae_stateE(ptr noundef nonnull %308, i64 noundef %10, i64 noundef %6, i64 noundef %8, i64 noundef 2, ptr noundef nonnull %388, ptr noundef %3)
  %389 = getelementptr inbounds i8, ptr %1, i64 1216
  tail call void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef %1, ptr noundef nonnull %389, ptr noundef %3)
  tail call void @_ZN11alglib_implL23idw_errormetricsviacalcEPNS_10idwbuilderEPNS_8idwmodelEPNS_9idwreportEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef nonnull %2, ptr noundef %3)
  br label %721

390:                                              ; preds = %._crit_edge531
  %391 = getelementptr inbounds i8, ptr %0, i64 80
  %392 = load i64, ptr %391, align 8, !tbaa !62
  %393 = icmp sgt i64 %392, 0
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %393, ptr noundef nonnull @.str.129, ptr noundef %3)
  %394 = getelementptr inbounds i8, ptr %1, i64 80
  store i64 2, ptr %394, align 8, !tbaa !47
  store i64 %6, ptr %1, align 8, !tbaa !22
  %395 = getelementptr inbounds i8, ptr %1, i64 8
  store i64 %8, ptr %395, align 8, !tbaa !25
  %396 = load i64, ptr %391, align 8, !tbaa !62
  %397 = getelementptr inbounds i8, ptr %1, i64 88
  store i64 %396, ptr %397, align 8, !tbaa !48
  %398 = getelementptr inbounds i8, ptr %0, i64 88
  %399 = load double, ptr %398, align 8, !tbaa !55
  %400 = getelementptr inbounds i8, ptr %1, i64 96
  store double %399, ptr %400, align 8, !tbaa !56
  %401 = getelementptr inbounds i8, ptr %1, i64 104
  store double 5.000000e-01, ptr %401, align 8, !tbaa !57
  %402 = getelementptr inbounds i8, ptr %0, i64 104
  %403 = load double, ptr %402, align 8, !tbaa !63
  %404 = getelementptr inbounds i8, ptr %1, i64 112
  store double %403, ptr %404, align 8, !tbaa !64
  %405 = getelementptr inbounds i8, ptr %1, i64 128
  %406 = load double, ptr @_ZN11alglib_implL8idw_mepsE, align 8, !tbaa !27
  %407 = getelementptr inbounds i8, ptr %1, i64 120
  store double %406, ptr %407, align 8, !tbaa !65
  store <2 x double> <double 1.000000e+00, double 0.000000e+00>, ptr %405, align 8, !tbaa !27
  %408 = getelementptr inbounds i8, ptr %0, i64 224
  tail call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %408, i64 noundef %10, i64 noundef %6, ptr noundef %3)
  %409 = getelementptr inbounds i8, ptr %0, i64 304
  %410 = load i64, ptr %391, align 8, !tbaa !62
  %411 = add nsw i64 %410, 1
  %412 = mul nsw i64 %411, %8
  %413 = add nsw i64 %412, %6
  tail call void @_ZN11alglib_impl23rmatrixsetlengthatleastEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %409, i64 noundef %10, i64 noundef %413, ptr noundef %3)
  %414 = getelementptr inbounds i8, ptr %0, i64 384
  tail call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %414, i64 noundef %10, ptr noundef %3)
  br i1 %44, label %.preheader507.lr.ph, label %._crit_edge546

.preheader507.lr.ph:                              ; preds = %390
  %.not490.not535 = icmp sgt i64 %6, 0
  %415 = getelementptr inbounds i8, ptr %0, i64 192
  %416 = add nsw i64 %8, %6
  %417 = getelementptr inbounds i8, ptr %0, i64 296
  %418 = getelementptr inbounds i8, ptr %0, i64 376
  %419 = getelementptr inbounds i8, ptr %0, i64 440
  %420 = getelementptr inbounds i8, ptr %1, i64 72
  %xtraiter691 = and i64 %6, 1
  %421 = icmp eq i64 %6, 1
  %unroll_iter694 = and i64 %6, 9223372036854775806
  %lcmp.mod693.not = icmp eq i64 %xtraiter691, 0
  %xtraiter697 = and i64 %8, 1
  %422 = icmp eq i64 %8, 1
  %unroll_iter700 = and i64 %8, 9223372036854775806
  %lcmp.mod699.not = icmp eq i64 %xtraiter697, 0
  br label %.preheader507

.preheader507:                                    ; preds = %.preheader507.lr.ph, %._crit_edge543
  %.4545 = phi i64 [ 0, %.preheader507.lr.ph ], [ %509, %._crit_edge543 ]
  br i1 %.not490.not535, label %.lr.ph537, label %._crit_edge538

.lr.ph537:                                        ; preds = %.preheader507
  %423 = mul nsw i64 %.4545, %416
  br i1 %421, label %._crit_edge538.loopexit.unr-lcssa, label %.lr.ph537.new

.lr.ph537.new:                                    ; preds = %.lr.ph537, %.lr.ph537.new
  %.10536 = phi i64 [ %449, %.lr.ph537.new ], [ 0, %.lr.ph537 ]
  %niter695 = phi i64 [ %niter695.next.1, %.lr.ph537.new ], [ 0, %.lr.ph537 ]
  %424 = load ptr, ptr %415, align 8, !tbaa !26
  %425 = getelementptr double, ptr %424, i64 %423
  %426 = getelementptr double, ptr %425, i64 %.10536
  %427 = load double, ptr %426, align 8, !tbaa !27
  %428 = load ptr, ptr %417, align 8, !tbaa !26
  %429 = getelementptr inbounds ptr, ptr %428, i64 %.4545
  %430 = load ptr, ptr %429, align 8, !tbaa !58
  %431 = getelementptr inbounds double, ptr %430, i64 %.10536
  store double %427, ptr %431, align 8, !tbaa !27
  %432 = load ptr, ptr %418, align 8, !tbaa !26
  %433 = getelementptr inbounds ptr, ptr %432, i64 %.4545
  %434 = load ptr, ptr %433, align 8, !tbaa !58
  %435 = getelementptr inbounds double, ptr %434, i64 %.10536
  store double %427, ptr %435, align 8, !tbaa !27
  %436 = or disjoint i64 %.10536, 1
  %437 = load ptr, ptr %415, align 8, !tbaa !26
  %438 = getelementptr double, ptr %437, i64 %423
  %439 = getelementptr double, ptr %438, i64 %436
  %440 = load double, ptr %439, align 8, !tbaa !27
  %441 = load ptr, ptr %417, align 8, !tbaa !26
  %442 = getelementptr inbounds ptr, ptr %441, i64 %.4545
  %443 = load ptr, ptr %442, align 8, !tbaa !58
  %444 = getelementptr inbounds double, ptr %443, i64 %436
  store double %440, ptr %444, align 8, !tbaa !27
  %445 = load ptr, ptr %418, align 8, !tbaa !26
  %446 = getelementptr inbounds ptr, ptr %445, i64 %.4545
  %447 = load ptr, ptr %446, align 8, !tbaa !58
  %448 = getelementptr inbounds double, ptr %447, i64 %436
  store double %440, ptr %448, align 8, !tbaa !27
  %449 = add nuw nsw i64 %.10536, 2
  %niter695.next.1 = add i64 %niter695, 2
  %niter695.ncmp.1 = icmp eq i64 %niter695.next.1, %unroll_iter694
  br i1 %niter695.ncmp.1, label %._crit_edge538.loopexit.unr-lcssa, label %.lr.ph537.new, !llvm.loop !66

._crit_edge538.loopexit.unr-lcssa:                ; preds = %.lr.ph537.new, %.lr.ph537
  %.10536.unr = phi i64 [ 0, %.lr.ph537 ], [ %449, %.lr.ph537.new ]
  br i1 %lcmp.mod693.not, label %._crit_edge538, label %._crit_edge538.loopexit.epilog-lcssa

._crit_edge538.loopexit.epilog-lcssa:             ; preds = %._crit_edge538.loopexit.unr-lcssa
  %450 = load ptr, ptr %415, align 8, !tbaa !26
  %451 = getelementptr double, ptr %450, i64 %423
  %452 = getelementptr double, ptr %451, i64 %.10536.unr
  %453 = load double, ptr %452, align 8, !tbaa !27
  %454 = load ptr, ptr %417, align 8, !tbaa !26
  %455 = getelementptr inbounds ptr, ptr %454, i64 %.4545
  %456 = load ptr, ptr %455, align 8, !tbaa !58
  %457 = getelementptr inbounds double, ptr %456, i64 %.10536.unr
  store double %453, ptr %457, align 8, !tbaa !27
  %458 = load ptr, ptr %418, align 8, !tbaa !26
  %459 = getelementptr inbounds ptr, ptr %458, i64 %.4545
  %460 = load ptr, ptr %459, align 8, !tbaa !58
  %461 = getelementptr inbounds double, ptr %460, i64 %.10536.unr
  store double %453, ptr %461, align 8, !tbaa !27
  br label %._crit_edge538

._crit_edge538:                                   ; preds = %._crit_edge538.loopexit.epilog-lcssa, %._crit_edge538.loopexit.unr-lcssa, %.preheader507
  %462 = load ptr, ptr %419, align 8, !tbaa !26
  %463 = getelementptr inbounds i64, ptr %462, i64 %.4545
  store i64 %.4545, ptr %463, align 8, !tbaa !67
  br i1 %.not.not513, label %.lr.ph542, label %._crit_edge543

.lr.ph542:                                        ; preds = %._crit_edge538
  %464 = mul nsw i64 %.4545, %416
  br i1 %422, label %._crit_edge543.loopexit.unr-lcssa, label %.lr.ph542.new

.lr.ph542.new:                                    ; preds = %.lr.ph542, %.lr.ph542.new
  %.11540 = phi i64 [ %494, %.lr.ph542.new ], [ 0, %.lr.ph542 ]
  %niter701 = phi i64 [ %niter701.next.1, %.lr.ph542.new ], [ 0, %.lr.ph542 ]
  %465 = load ptr, ptr %415, align 8, !tbaa !26
  %466 = getelementptr double, ptr %465, i64 %464
  %467 = getelementptr double, ptr %466, i64 %6
  %468 = getelementptr double, ptr %467, i64 %.11540
  %469 = load double, ptr %468, align 8, !tbaa !27
  %470 = load ptr, ptr %420, align 8, !tbaa !26
  %471 = getelementptr inbounds double, ptr %470, i64 %.11540
  %472 = load double, ptr %471, align 8, !tbaa !27
  %473 = fsub double %469, %472
  %474 = load ptr, ptr %418, align 8, !tbaa !26
  %475 = getelementptr inbounds ptr, ptr %474, i64 %.4545
  %476 = load ptr, ptr %475, align 8, !tbaa !58
  %477 = getelementptr double, ptr %476, i64 %6
  %478 = getelementptr double, ptr %477, i64 %.11540
  store double %473, ptr %478, align 8, !tbaa !27
  %479 = or disjoint i64 %.11540, 1
  %480 = load ptr, ptr %415, align 8, !tbaa !26
  %481 = getelementptr double, ptr %480, i64 %464
  %482 = getelementptr double, ptr %481, i64 %6
  %483 = getelementptr double, ptr %482, i64 %479
  %484 = load double, ptr %483, align 8, !tbaa !27
  %485 = load ptr, ptr %420, align 8, !tbaa !26
  %486 = getelementptr inbounds double, ptr %485, i64 %479
  %487 = load double, ptr %486, align 8, !tbaa !27
  %488 = fsub double %484, %487
  %489 = load ptr, ptr %418, align 8, !tbaa !26
  %490 = getelementptr inbounds ptr, ptr %489, i64 %.4545
  %491 = load ptr, ptr %490, align 8, !tbaa !58
  %492 = getelementptr double, ptr %491, i64 %6
  %493 = getelementptr double, ptr %492, i64 %479
  store double %488, ptr %493, align 8, !tbaa !27
  %494 = add nuw nsw i64 %.11540, 2
  %niter701.next.1 = add i64 %niter701, 2
  %niter701.ncmp.1 = icmp eq i64 %niter701.next.1, %unroll_iter700
  br i1 %niter701.ncmp.1, label %._crit_edge543.loopexit.unr-lcssa, label %.lr.ph542.new, !llvm.loop !68

._crit_edge543.loopexit.unr-lcssa:                ; preds = %.lr.ph542.new, %.lr.ph542
  %.11540.unr = phi i64 [ 0, %.lr.ph542 ], [ %494, %.lr.ph542.new ]
  br i1 %lcmp.mod699.not, label %._crit_edge543, label %._crit_edge543.loopexit.epilog-lcssa

._crit_edge543.loopexit.epilog-lcssa:             ; preds = %._crit_edge543.loopexit.unr-lcssa
  %495 = load ptr, ptr %415, align 8, !tbaa !26
  %496 = getelementptr double, ptr %495, i64 %464
  %497 = getelementptr double, ptr %496, i64 %6
  %498 = getelementptr double, ptr %497, i64 %.11540.unr
  %499 = load double, ptr %498, align 8, !tbaa !27
  %500 = load ptr, ptr %420, align 8, !tbaa !26
  %501 = getelementptr inbounds double, ptr %500, i64 %.11540.unr
  %502 = load double, ptr %501, align 8, !tbaa !27
  %503 = fsub double %499, %502
  %504 = load ptr, ptr %418, align 8, !tbaa !26
  %505 = getelementptr inbounds ptr, ptr %504, i64 %.4545
  %506 = load ptr, ptr %505, align 8, !tbaa !58
  %507 = getelementptr double, ptr %506, i64 %6
  %508 = getelementptr double, ptr %507, i64 %.11540.unr
  store double %503, ptr %508, align 8, !tbaa !27
  br label %._crit_edge543

._crit_edge543:                                   ; preds = %._crit_edge543.loopexit.epilog-lcssa, %._crit_edge543.loopexit.unr-lcssa, %._crit_edge538
  %509 = add nuw nsw i64 %.4545, 1
  %exitcond630.not = icmp eq i64 %509, %10
  br i1 %exitcond630.not, label %._crit_edge546, label %.preheader507, !llvm.loop !69

._crit_edge546:                                   ; preds = %._crit_edge543, %390
  %510 = getelementptr inbounds i8, ptr %0, i64 704
  tail call void @_ZN11alglib_impl17kdtreebuildtaggedEPNS_9ae_matrixEPNS_9ae_vectorEllllPNS_6kdtreeEPNS_8ae_stateE(ptr noundef nonnull %408, ptr noundef nonnull %414, i64 noundef %10, i64 noundef %6, i64 noundef 0, i64 noundef 2, ptr noundef nonnull %510, ptr noundef %3)
  %511 = getelementptr inbounds i8, ptr %0, i64 512
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %511, i64 noundef %6, ptr noundef %3)
  %512 = getelementptr inbounds i8, ptr %0, i64 576
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %512, i64 noundef %8, ptr noundef %3)
  %513 = getelementptr inbounds i8, ptr %0, i64 640
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %513, i64 noundef %8, ptr noundef %3)
  %514 = load i64, ptr %391, align 8, !tbaa !62
  %.not481.not570 = icmp sgt i64 %514, 0
  br i1 %.not481.not570, label %.lr.ph573, label %._crit_edge574

.lr.ph573:                                        ; preds = %._crit_edge546
  %.not485.not547 = icmp sgt i64 %6, 0
  %515 = getelementptr inbounds i8, ptr %0, i64 376
  %516 = getelementptr inbounds i8, ptr %0, i64 568
  %517 = getelementptr inbounds i8, ptr %0, i64 448
  %518 = getelementptr inbounds i8, ptr %0, i64 632
  %519 = getelementptr inbounds i8, ptr %0, i64 696
  %520 = getelementptr inbounds i8, ptr %0, i64 504
  %521 = getelementptr inbounds i8, ptr %0, i64 440
  %522 = add i64 %8, -1
  %xtraiter702 = and i64 %6, 1
  %523 = icmp eq i64 %6, 1
  %unroll_iter705 = and i64 %6, 9223372036854775806
  %lcmp.mod704.not = icmp eq i64 %xtraiter702, 0
  %xtraiter707 = and i64 %8, 1
  %524 = icmp eq i64 %522, 0
  %unroll_iter710 = and i64 %8, 9223372036854775806
  %lcmp.mod709.not = icmp eq i64 %xtraiter707, 0
  %xtraiter712 = and i64 %8, 1
  %525 = icmp eq i64 %522, 0
  %unroll_iter715 = and i64 %8, 9223372036854775806
  %lcmp.mod714.not = icmp eq i64 %xtraiter712, 0
  br label %526

526:                                              ; preds = %.lr.ph573, %._crit_edge569
  %.0470571 = phi i64 [ 0, %.lr.ph573 ], [ %.pre-phi, %._crit_edge569 ]
  %527 = load double, ptr %400, align 8, !tbaa !56
  %528 = load double, ptr %401, align 8, !tbaa !57
  %529 = uitofp nneg i64 %.0470571 to double
  %530 = tail call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef %528, double noundef %529, ptr noundef %3)
  %531 = fmul double %527, %530
  %532 = load double, ptr %404, align 8, !tbaa !64
  %533 = load double, ptr %405, align 8, !tbaa !49
  %534 = tail call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef %533, double noundef %529, ptr noundef %3)
  %535 = fmul double %532, %534
  %536 = load i64, ptr %391, align 8, !tbaa !62
  %537 = add nsw i64 %536, -1
  %538 = icmp eq i64 %.0470571, %537
  br i1 %538, label %539, label %541

539:                                              ; preds = %526
  %540 = load double, ptr %407, align 8, !tbaa !65
  br label %541

541:                                              ; preds = %539, %526
  %.0459 = phi double [ %540, %539 ], [ %535, %526 ]
  br i1 %44, label %.preheader506.lr.ph, label %.._crit_edge569_crit_edge

.._crit_edge569_crit_edge:                        ; preds = %541
  %.pre647 = add nuw nsw i64 %.0470571, 1
  br label %._crit_edge569

.preheader506.lr.ph:                              ; preds = %541
  %542 = mul nsw i64 %.0470571, %8
  %543 = add nuw nsw i64 %.0470571, 1
  %544 = mul nsw i64 %543, %8
  br label %.preheader506

.preheader506:                                    ; preds = %.preheader506.lr.ph, %._crit_edge566
  %.5568 = phi i64 [ 0, %.preheader506.lr.ph ], [ %668, %._crit_edge566 ]
  br i1 %.not485.not547, label %.lr.ph549.preheader, label %._crit_edge550

.lr.ph549.preheader:                              ; preds = %.preheader506
  br i1 %523, label %._crit_edge550.loopexit.unr-lcssa, label %.lr.ph549

.lr.ph549:                                        ; preds = %.lr.ph549.preheader, %.lr.ph549
  %.12548 = phi i64 [ %560, %.lr.ph549 ], [ 0, %.lr.ph549.preheader ]
  %niter706 = phi i64 [ %niter706.next.1, %.lr.ph549 ], [ 0, %.lr.ph549.preheader ]
  %545 = load ptr, ptr %515, align 8, !tbaa !26
  %546 = getelementptr inbounds ptr, ptr %545, i64 %.5568
  %547 = load ptr, ptr %546, align 8, !tbaa !58
  %548 = getelementptr inbounds double, ptr %547, i64 %.12548
  %549 = load double, ptr %548, align 8, !tbaa !27
  %550 = load ptr, ptr %516, align 8, !tbaa !26
  %551 = getelementptr inbounds double, ptr %550, i64 %.12548
  store double %549, ptr %551, align 8, !tbaa !27
  %552 = or disjoint i64 %.12548, 1
  %553 = load ptr, ptr %515, align 8, !tbaa !26
  %554 = getelementptr inbounds ptr, ptr %553, i64 %.5568
  %555 = load ptr, ptr %554, align 8, !tbaa !58
  %556 = getelementptr inbounds double, ptr %555, i64 %552
  %557 = load double, ptr %556, align 8, !tbaa !27
  %558 = load ptr, ptr %516, align 8, !tbaa !26
  %559 = getelementptr inbounds double, ptr %558, i64 %552
  store double %557, ptr %559, align 8, !tbaa !27
  %560 = add nuw nsw i64 %.12548, 2
  %niter706.next.1 = add i64 %niter706, 2
  %niter706.ncmp.1 = icmp eq i64 %niter706.next.1, %unroll_iter705
  br i1 %niter706.ncmp.1, label %._crit_edge550.loopexit.unr-lcssa, label %.lr.ph549, !llvm.loop !70

._crit_edge550.loopexit.unr-lcssa:                ; preds = %.lr.ph549, %.lr.ph549.preheader
  %.12548.unr = phi i64 [ 0, %.lr.ph549.preheader ], [ %560, %.lr.ph549 ]
  br i1 %lcmp.mod704.not, label %._crit_edge550, label %.lr.ph549.epil

.lr.ph549.epil:                                   ; preds = %._crit_edge550.loopexit.unr-lcssa
  %561 = load ptr, ptr %515, align 8, !tbaa !26
  %562 = getelementptr inbounds ptr, ptr %561, i64 %.5568
  %563 = load ptr, ptr %562, align 8, !tbaa !58
  %564 = getelementptr inbounds double, ptr %563, i64 %.12548.unr
  %565 = load double, ptr %564, align 8, !tbaa !27
  %566 = load ptr, ptr %516, align 8, !tbaa !26
  %567 = getelementptr inbounds double, ptr %566, i64 %.12548.unr
  store double %565, ptr %567, align 8, !tbaa !27
  br label %._crit_edge550

._crit_edge550:                                   ; preds = %.lr.ph549.epil, %._crit_edge550.loopexit.unr-lcssa, %.preheader506
  %568 = tail call noundef i64 @_ZN11alglib_impl14kdtreequeryrnnEPNS_6kdtreeEPNS_9ae_vectorEdbPNS_8ae_stateE(ptr noundef nonnull %510, ptr noundef nonnull %511, double noundef %531, i1 noundef zeroext true, ptr noundef %3)
  tail call void @_ZN11alglib_impl22kdtreequeryresultstagsEPNS_6kdtreeEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %510, ptr noundef nonnull %414, ptr noundef %3)
  tail call void @_ZN11alglib_impl27kdtreequeryresultsdistancesEPNS_6kdtreeEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %510, ptr noundef nonnull %517, ptr noundef %3)
  br i1 %.not.not513, label %.lr.ph554.preheader, label %.preheader505

.lr.ph554.preheader:                              ; preds = %._crit_edge550
  br i1 %524, label %.preheader505.loopexit.unr-lcssa, label %.lr.ph554

.preheader505.loopexit.unr-lcssa:                 ; preds = %.lr.ph554, %.lr.ph554.preheader
  %.13552.unr = phi i64 [ 0, %.lr.ph554.preheader ], [ %585, %.lr.ph554 ]
  br i1 %lcmp.mod709.not, label %.preheader505, label %.lr.ph554.epil

.lr.ph554.epil:                                   ; preds = %.preheader505.loopexit.unr-lcssa
  %569 = load ptr, ptr %518, align 8, !tbaa !26
  %570 = getelementptr inbounds double, ptr %569, i64 %.13552.unr
  store double 0.000000e+00, ptr %570, align 8, !tbaa !27
  %571 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !27
  %572 = load ptr, ptr %519, align 8, !tbaa !26
  %573 = getelementptr inbounds double, ptr %572, i64 %.13552.unr
  store double %571, ptr %573, align 8, !tbaa !27
  br label %.preheader505

.preheader505:                                    ; preds = %.lr.ph554.epil, %.preheader505.loopexit.unr-lcssa, %._crit_edge550
  %.not487.not560 = icmp sgt i64 %568, 0
  br i1 %.not487.not560, label %.lr.ph562, label %.preheader504

.lr.ph554:                                        ; preds = %.lr.ph554.preheader, %.lr.ph554
  %.13552 = phi i64 [ %585, %.lr.ph554 ], [ 0, %.lr.ph554.preheader ]
  %niter711 = phi i64 [ %niter711.next.1, %.lr.ph554 ], [ 0, %.lr.ph554.preheader ]
  %574 = load ptr, ptr %518, align 8, !tbaa !26
  %575 = getelementptr inbounds double, ptr %574, i64 %.13552
  store double 0.000000e+00, ptr %575, align 8, !tbaa !27
  %576 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !27
  %577 = load ptr, ptr %519, align 8, !tbaa !26
  %578 = getelementptr inbounds double, ptr %577, i64 %.13552
  store double %576, ptr %578, align 8, !tbaa !27
  %579 = or disjoint i64 %.13552, 1
  %580 = load ptr, ptr %518, align 8, !tbaa !26
  %581 = getelementptr inbounds double, ptr %580, i64 %579
  store double 0.000000e+00, ptr %581, align 8, !tbaa !27
  %582 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !27
  %583 = load ptr, ptr %519, align 8, !tbaa !26
  %584 = getelementptr inbounds double, ptr %583, i64 %579
  store double %582, ptr %584, align 8, !tbaa !27
  %585 = add nuw nsw i64 %.13552, 2
  %niter711.next.1 = add i64 %niter711, 2
  %niter711.ncmp.1 = icmp eq i64 %niter711.next.1, %unroll_iter710
  br i1 %niter711.ncmp.1, label %.preheader505.loopexit.unr-lcssa, label %.lr.ph554, !llvm.loop !71

.preheader504:                                    ; preds = %._crit_edge559, %.preheader505
  br i1 %.not.not513, label %.lr.ph565.preheader, label %._crit_edge566

.lr.ph565.preheader:                              ; preds = %.preheader504
  br i1 %525, label %._crit_edge566.loopexit.unr-lcssa, label %.lr.ph565

.lr.ph562:                                        ; preds = %.preheader505, %._crit_edge559
  %.0462561 = phi i64 [ %614, %._crit_edge559 ], [ 0, %.preheader505 ]
  %586 = load ptr, ptr %520, align 8, !tbaa !26
  %587 = getelementptr inbounds double, ptr %586, i64 %.0462561
  %588 = load double, ptr %587, align 8, !tbaa !27
  %589 = fdiv double %588, %531
  %590 = fmul double %589, %589
  %591 = fsub double 1.000000e+00, %590
  %592 = fmul double %591, %591
  %593 = fadd double %.0459, %590
  %594 = fdiv double %592, %593
  %595 = load ptr, ptr %521, align 8, !tbaa !26
  %596 = getelementptr inbounds i64, ptr %595, i64 %.0462561
  %597 = load i64, ptr %596, align 8, !tbaa !67
  br i1 %.not.not513, label %.lr.ph558, label %._crit_edge559

.lr.ph558:                                        ; preds = %.lr.ph562, %.lr.ph558
  %.14556 = phi i64 [ %613, %.lr.ph558 ], [ 0, %.lr.ph562 ]
  %598 = load ptr, ptr %518, align 8, !tbaa !26
  %599 = getelementptr inbounds double, ptr %598, i64 %.14556
  %600 = load double, ptr %599, align 8, !tbaa !27
  %601 = load ptr, ptr %515, align 8, !tbaa !26
  %602 = getelementptr inbounds ptr, ptr %601, i64 %597
  %603 = load ptr, ptr %602, align 8, !tbaa !58
  %604 = getelementptr double, ptr %603, i64 %6
  %605 = getelementptr double, ptr %604, i64 %542
  %606 = getelementptr double, ptr %605, i64 %.14556
  %607 = load double, ptr %606, align 8, !tbaa !27
  %608 = tail call double @llvm.fmuladd.f64(double %594, double %607, double %600)
  store double %608, ptr %599, align 8, !tbaa !27
  %609 = load ptr, ptr %519, align 8, !tbaa !26
  %610 = getelementptr inbounds double, ptr %609, i64 %.14556
  %611 = load double, ptr %610, align 8, !tbaa !27
  %612 = fadd double %594, %611
  store double %612, ptr %610, align 8, !tbaa !27
  %613 = add nuw nsw i64 %.14556, 1
  %exitcond633.not = icmp eq i64 %613, %8
  br i1 %exitcond633.not, label %._crit_edge559, label %.lr.ph558, !llvm.loop !72

._crit_edge559:                                   ; preds = %.lr.ph558, %.lr.ph562
  %614 = add nuw nsw i64 %.0462561, 1
  %exitcond634.not = icmp eq i64 %614, %568
  br i1 %exitcond634.not, label %.preheader504, label %.lr.ph562, !llvm.loop !73

.lr.ph565:                                        ; preds = %.lr.ph565.preheader, %.lr.ph565
  %.15564 = phi i64 [ %650, %.lr.ph565 ], [ 0, %.lr.ph565.preheader ]
  %niter716 = phi i64 [ %niter716.next.1, %.lr.ph565 ], [ 0, %.lr.ph565.preheader ]
  %615 = load ptr, ptr %515, align 8, !tbaa !26
  %616 = getelementptr inbounds ptr, ptr %615, i64 %.5568
  %617 = load ptr, ptr %616, align 8, !tbaa !58
  %618 = getelementptr double, ptr %617, i64 %6
  %619 = getelementptr double, ptr %618, i64 %542
  %620 = getelementptr double, ptr %619, i64 %.15564
  %621 = load double, ptr %620, align 8, !tbaa !27
  %622 = load ptr, ptr %518, align 8, !tbaa !26
  %623 = getelementptr inbounds double, ptr %622, i64 %.15564
  %624 = load double, ptr %623, align 8, !tbaa !27
  %625 = load ptr, ptr %519, align 8, !tbaa !26
  %626 = getelementptr inbounds double, ptr %625, i64 %.15564
  %627 = load double, ptr %626, align 8, !tbaa !27
  %628 = fdiv double %624, %627
  %629 = fsub double %621, %628
  %630 = getelementptr double, ptr %618, i64 %544
  %631 = getelementptr double, ptr %630, i64 %.15564
  store double %629, ptr %631, align 8, !tbaa !27
  %632 = or disjoint i64 %.15564, 1
  %633 = load ptr, ptr %515, align 8, !tbaa !26
  %634 = getelementptr inbounds ptr, ptr %633, i64 %.5568
  %635 = load ptr, ptr %634, align 8, !tbaa !58
  %636 = getelementptr double, ptr %635, i64 %6
  %637 = getelementptr double, ptr %636, i64 %542
  %638 = getelementptr double, ptr %637, i64 %632
  %639 = load double, ptr %638, align 8, !tbaa !27
  %640 = load ptr, ptr %518, align 8, !tbaa !26
  %641 = getelementptr inbounds double, ptr %640, i64 %632
  %642 = load double, ptr %641, align 8, !tbaa !27
  %643 = load ptr, ptr %519, align 8, !tbaa !26
  %644 = getelementptr inbounds double, ptr %643, i64 %632
  %645 = load double, ptr %644, align 8, !tbaa !27
  %646 = fdiv double %642, %645
  %647 = fsub double %639, %646
  %648 = getelementptr double, ptr %636, i64 %544
  %649 = getelementptr double, ptr %648, i64 %632
  store double %647, ptr %649, align 8, !tbaa !27
  %650 = add nuw nsw i64 %.15564, 2
  %niter716.next.1 = add i64 %niter716, 2
  %niter716.ncmp.1 = icmp eq i64 %niter716.next.1, %unroll_iter715
  br i1 %niter716.ncmp.1, label %._crit_edge566.loopexit.unr-lcssa, label %.lr.ph565, !llvm.loop !74

._crit_edge566.loopexit.unr-lcssa:                ; preds = %.lr.ph565, %.lr.ph565.preheader
  %.15564.unr = phi i64 [ 0, %.lr.ph565.preheader ], [ %650, %.lr.ph565 ]
  br i1 %lcmp.mod714.not, label %._crit_edge566, label %.lr.ph565.epil

.lr.ph565.epil:                                   ; preds = %._crit_edge566.loopexit.unr-lcssa
  %651 = load ptr, ptr %515, align 8, !tbaa !26
  %652 = getelementptr inbounds ptr, ptr %651, i64 %.5568
  %653 = load ptr, ptr %652, align 8, !tbaa !58
  %654 = getelementptr double, ptr %653, i64 %6
  %655 = getelementptr double, ptr %654, i64 %542
  %656 = getelementptr double, ptr %655, i64 %.15564.unr
  %657 = load double, ptr %656, align 8, !tbaa !27
  %658 = load ptr, ptr %518, align 8, !tbaa !26
  %659 = getelementptr inbounds double, ptr %658, i64 %.15564.unr
  %660 = load double, ptr %659, align 8, !tbaa !27
  %661 = load ptr, ptr %519, align 8, !tbaa !26
  %662 = getelementptr inbounds double, ptr %661, i64 %.15564.unr
  %663 = load double, ptr %662, align 8, !tbaa !27
  %664 = fdiv double %660, %663
  %665 = fsub double %657, %664
  %666 = getelementptr double, ptr %654, i64 %544
  %667 = getelementptr double, ptr %666, i64 %.15564.unr
  store double %665, ptr %667, align 8, !tbaa !27
  br label %._crit_edge566

._crit_edge566:                                   ; preds = %.lr.ph565.epil, %._crit_edge566.loopexit.unr-lcssa, %.preheader504
  %668 = add nuw nsw i64 %.5568, 1
  %exitcond636.not = icmp eq i64 %668, %10
  br i1 %exitcond636.not, label %._crit_edge569.loopexit, label %.preheader506, !llvm.loop !75

._crit_edge569.loopexit:                          ; preds = %._crit_edge566
  %.pre = load i64, ptr %391, align 8, !tbaa !62
  br label %._crit_edge569

._crit_edge569:                                   ; preds = %.._crit_edge569_crit_edge, %._crit_edge569.loopexit
  %.pre-phi = phi i64 [ %.pre647, %.._crit_edge569_crit_edge ], [ %543, %._crit_edge569.loopexit ]
  %669 = phi i64 [ %536, %.._crit_edge569_crit_edge ], [ %.pre, %._crit_edge569.loopexit ]
  %.not481.not = icmp slt i64 %.pre-phi, %669
  br i1 %.not481.not, label %526, label %._crit_edge574, !llvm.loop !76

._crit_edge574:                                   ; preds = %._crit_edge569, %._crit_edge546
  %.lcssa = phi i64 [ %514, %._crit_edge546 ], [ %669, %._crit_edge569 ]
  %670 = mul nsw i64 %.lcssa, %8
  %671 = getelementptr inbounds i8, ptr %1, i64 144
  tail call void @_ZN11alglib_impl11kdtreebuildEPNS_9ae_matrixEllllPNS_6kdtreeEPNS_8ae_stateE(ptr noundef nonnull %409, i64 noundef %10, i64 noundef %6, i64 noundef %670, i64 noundef 2, ptr noundef nonnull %671, ptr noundef %3)
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %2, i8 0, i64 24, i1 false)
  br i1 %44, label %.preheader503.lr.ph, label %._crit_edge587

.preheader503.lr.ph:                              ; preds = %._crit_edge574
  %672 = getelementptr inbounds i8, ptr %0, i64 376
  %673 = getelementptr inbounds i8, ptr %0, i64 192
  %674 = add nsw i64 %8, %6
  %675 = getelementptr inbounds i8, ptr %0, i64 1760
  br i1 %.not.not513, label %.preheader503.us, label %._crit_edge587

.preheader503.us:                                 ; preds = %.preheader503.lr.ph, %._crit_edge580.us
  %.0586.us = phi double [ %706, %._crit_edge580.us ], [ 0.000000e+00, %.preheader503.lr.ph ]
  %.0457585.us = phi double [ %695, %._crit_edge580.us ], [ 0.000000e+00, %.preheader503.lr.ph ]
  %.6584.us = phi i64 [ %708, %._crit_edge580.us ], [ 0, %.preheader503.lr.ph ]
  %676 = mul nsw i64 %.6584.us, %674
  br label %677

677:                                              ; preds = %.preheader503.us, %677
  %.1578.us = phi double [ %.0586.us, %.preheader503.us ], [ %706, %677 ]
  %.1458577.us = phi double [ %.0457585.us, %.preheader503.us ], [ %695, %677 ]
  %.16576.us = phi i64 [ 0, %.preheader503.us ], [ %707, %677 ]
  %678 = load ptr, ptr %672, align 8, !tbaa !26
  %679 = getelementptr inbounds ptr, ptr %678, i64 %.6584.us
  %680 = load ptr, ptr %679, align 8, !tbaa !58
  %681 = load i64, ptr %391, align 8, !tbaa !62
  %682 = mul nsw i64 %681, %8
  %683 = getelementptr double, ptr %680, i64 %6
  %684 = getelementptr double, ptr %683, i64 %682
  %685 = getelementptr double, ptr %684, i64 %.16576.us
  %686 = load double, ptr %685, align 8, !tbaa !27
  %687 = tail call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %686, ptr noundef %3)
  %688 = load double, ptr %2, align 8, !tbaa !77
  %689 = tail call double @llvm.fmuladd.f64(double %687, double %687, double %688)
  store double %689, ptr %2, align 8, !tbaa !77
  %690 = load double, ptr %11, align 8, !tbaa !78
  %691 = fadd double %687, %690
  store double %691, ptr %11, align 8, !tbaa !78
  %692 = load double, ptr %12, align 8, !tbaa !79
  %693 = tail call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %687, ptr noundef %3)
  %694 = tail call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %692, double noundef %693, ptr noundef %3)
  store double %694, ptr %12, align 8, !tbaa !79
  %695 = tail call double @llvm.fmuladd.f64(double %687, double %687, double %.1458577.us)
  %696 = load ptr, ptr %673, align 8, !tbaa !26
  %697 = getelementptr double, ptr %696, i64 %676
  %698 = getelementptr double, ptr %697, i64 %6
  %699 = getelementptr double, ptr %698, i64 %.16576.us
  %700 = load double, ptr %699, align 8, !tbaa !27
  %701 = load ptr, ptr %675, align 8, !tbaa !26
  %702 = getelementptr inbounds double, ptr %701, i64 %.16576.us
  %703 = load double, ptr %702, align 8, !tbaa !27
  %704 = fsub double %700, %703
  %705 = tail call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef %704, ptr noundef %3)
  %706 = fadd double %.1578.us, %705
  %707 = add nuw nsw i64 %.16576.us, 1
  %exitcond637.not = icmp eq i64 %707, %8
  br i1 %exitcond637.not, label %._crit_edge580.us, label %677, !llvm.loop !80

._crit_edge580.us:                                ; preds = %677
  %708 = add nuw nsw i64 %.6584.us, 1
  %exitcond638.not = icmp eq i64 %708, %10
  br i1 %exitcond638.not, label %._crit_edge587.loopexit, label %.preheader503.us, !llvm.loop !81

._crit_edge587.loopexit:                          ; preds = %._crit_edge580.us
  %.pre646 = load double, ptr %2, align 8, !tbaa !77
  br label %._crit_edge587

._crit_edge587:                                   ; preds = %.preheader503.lr.ph, %._crit_edge587.loopexit, %._crit_edge574
  %709 = phi double [ 0.000000e+00, %._crit_edge574 ], [ %.pre646, %._crit_edge587.loopexit ], [ 0.000000e+00, %.preheader503.lr.ph ]
  %.0457.lcssa = phi double [ 0.000000e+00, %._crit_edge574 ], [ %695, %._crit_edge587.loopexit ], [ 0.000000e+00, %.preheader503.lr.ph ]
  %.0.lcssa = phi double [ 0.000000e+00, %._crit_edge574 ], [ %706, %._crit_edge587.loopexit ], [ 0.000000e+00, %.preheader503.lr.ph ]
  %710 = mul nsw i64 %10, %8
  %711 = sitofp i64 %710 to double
  %712 = fdiv double %709, %711
  %713 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %712, ptr noundef %3)
  store double %713, ptr %2, align 8, !tbaa !77
  %714 = load double, ptr %11, align 8, !tbaa !78
  %715 = fdiv double %714, %711
  store double %715, ptr %11, align 8, !tbaa !78
  %716 = tail call noundef double @_ZN11alglib_impl8coalesceEddPNS_8ae_stateE(double noundef %.0.lcssa, double noundef 1.000000e+00, ptr noundef %3)
  %717 = fdiv double %.0457.lcssa, %716
  %718 = fsub double 1.000000e+00, %717
  store double %718, ptr %13, align 8, !tbaa !20
  %719 = getelementptr inbounds i8, ptr %1, i64 1216
  tail call void @_ZN11alglib_impl19idwcreatecalcbufferEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_8ae_stateE(ptr noundef nonnull %1, ptr noundef nonnull %719, ptr noundef %3)
  br label %721

720:                                              ; preds = %._crit_edge531
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.130, ptr noundef %3)
  br label %721

721:                                              ; preds = %720, %._crit_edge587, %._crit_edge600, %._crit_edge610, %._crit_edge615
  ret void
}

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

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl15_idwmodel_clearEPv(ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl16_idwreport_clearEPv(ptr noundef) local_unnamed_addr #1

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #3

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

!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 208}
!6 = !{!"_ZTSN11alglib_impl10idwbuilderE", !7, i64 0, !10, i64 8, !7, i64 72, !7, i64 80, !14, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !10, i64 136, !7, i64 200, !7, i64 208, !7, i64 216, !15, i64 224, !15, i64 304, !10, i64 384, !10, i64 448, !10, i64 512, !10, i64 576, !10, i64 640, !16, i64 704, !10, i64 1704}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !11, i64 16, !12, i64 24, !8, i64 56}
!11 = !{!"bool", !8, i64 0}
!12 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"double", !8, i64 0}
!15 = !{!"_ZTSN11alglib_impl9ae_matrixE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !11, i64 32, !12, i64 40, !8, i64 72}
!16 = !{!"_ZTSN11alglib_impl6kdtreeE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !15, i64 32, !10, i64 112, !10, i64 176, !10, i64 240, !10, i64 304, !10, i64 368, !17, i64 432, !7, i64 992}
!17 = !{!"_ZTSN11alglib_impl19kdtreerequestbufferE", !10, i64 0, !10, i64 64, !10, i64 128, !7, i64 192, !14, i64 200, !11, i64 208, !14, i64 216, !7, i64 224, !10, i64 232, !10, i64 296, !10, i64 360, !10, i64 424, !10, i64 488, !14, i64 552}
!18 = !{!6, !7, i64 216}
!19 = !{!6, !7, i64 200}
!20 = !{!21, !14, i64 24}
!21 = !{!"_ZTSN11alglib_impl9idwreportE", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!22 = !{!23, !7, i64 0}
!23 = !{!"_ZTSN11alglib_impl8idwmodelE", !7, i64 0, !7, i64 8, !10, i64 16, !7, i64 80, !7, i64 88, !14, i64 96, !14, i64 104, !14, i64 112, !14, i64 120, !14, i64 128, !14, i64 136, !16, i64 144, !7, i64 1144, !10, i64 1152, !24, i64 1216}
!24 = !{!"_ZTSN11alglib_impl13idwcalcbufferE", !10, i64 0, !10, i64 64, !10, i64 128, !10, i64 192, !15, i64 256, !10, i64 336, !17, i64 400}
!25 = !{!23, !7, i64 8}
!26 = !{!8, !8, i64 0}
!27 = !{!14, !14, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.unroll.disable"}
!32 = !{!23, !7, i64 1144}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !29}
!35 = distinct !{!35, !29}
!36 = distinct !{!36, !29}
!37 = distinct !{!37, !29}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !29}
!40 = distinct !{!40, !31}
!41 = !{!6, !7, i64 72}
!42 = !{!6, !7, i64 0}
!43 = distinct !{!43, !29}
!44 = distinct !{!44, !29}
!45 = distinct !{!45, !31}
!46 = distinct !{!46, !31}
!47 = !{!23, !7, i64 80}
!48 = !{!23, !7, i64 88}
!49 = !{!23, !14, i64 128}
!50 = !{!6, !14, i64 128}
!51 = !{!23, !14, i64 136}
!52 = distinct !{!52, !29}
!53 = distinct !{!53, !29}
!54 = distinct !{!54, !29}
!55 = !{!6, !14, i64 88}
!56 = !{!23, !14, i64 96}
!57 = !{!23, !14, i64 104}
!58 = !{!13, !13, i64 0}
!59 = distinct !{!59, !29}
!60 = distinct !{!60, !29}
!61 = distinct !{!61, !29}
!62 = !{!6, !7, i64 80}
!63 = !{!6, !14, i64 104}
!64 = !{!23, !14, i64 112}
!65 = !{!23, !14, i64 120}
!66 = distinct !{!66, !29}
!67 = !{!7, !7, i64 0}
!68 = distinct !{!68, !29}
!69 = distinct !{!69, !29}
!70 = distinct !{!70, !29}
!71 = distinct !{!71, !29}
!72 = distinct !{!72, !29}
!73 = distinct !{!73, !29}
!74 = distinct !{!74, !29}
!75 = distinct !{!75, !29}
!76 = distinct !{!76, !29}
!77 = !{!21, !14, i64 0}
!78 = !{!21, !14, i64 8}
!79 = !{!21, !14, i64 16}
!80 = distinct !{!80, !29}
!81 = distinct !{!81, !29}


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