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

@.str.124 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [37 x i8], align 1
@_ZN11alglib_implL6idw_w0E = external hidden global double, align 8
@.str.127 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [34 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
define dso_local void @_ZN11alglib_impl12idwtscalcbufEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_9ae_vectorES5_PNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #2 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca i8, align 1
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  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
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  %35 = load ptr, ptr %6, align 8, !tbaa !5
  %36 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %35, i32 0, i32 0
  %37 = load i64, ptr %36, align 8, !tbaa !9
  store i64 %37, ptr %16, align 8, !tbaa !20
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %38, i32 0, i32 1
  %40 = load i64, ptr %39, align 8, !tbaa !21
  store i64 %40, ptr %17, align 8, !tbaa !20
  %41 = load ptr, ptr %8, align 8, !tbaa !5
  %42 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %41, i32 0, i32 0
  %43 = load i64, ptr %42, align 8, !tbaa !22
  %44 = load i64, ptr %16, align 8, !tbaa !20
  %45 = icmp sge i64 %43, %44
  %46 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %45, ptr noundef @.str.124, ptr noundef %46)
  %47 = load ptr, ptr %8, align 8, !tbaa !5
  %48 = load i64, ptr %16, align 8, !tbaa !20
  %49 = load ptr, ptr %10, align 8, !tbaa !5
  %50 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %47, i64 noundef %48, ptr noundef %49)
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %50, ptr noundef @.str.125, ptr noundef %51)
  store double 0.000000e+00, ptr %30, align 8, !tbaa !23
  store double 0.000000e+00, ptr %31, align 8, !tbaa !23
  store double 0.000000e+00, ptr %32, align 8, !tbaa !23
  store double 0.000000e+00, ptr %33, align 8, !tbaa !23
  %52 = load ptr, ptr %9, align 8, !tbaa !5
  %53 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %52, i32 0, i32 0
  %54 = load i64, ptr %53, align 8, !tbaa !22
  %55 = load i64, ptr %17, align 8, !tbaa !20
  %56 = icmp slt i64 %54, %55
  br i1 %56, label %57, label %61

57:                                               ; preds = %5
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  %59 = load i64, ptr %17, align 8, !tbaa !20
  %60 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %58, i64 noundef %59, ptr noundef %60)
  br label %61

61:                                               ; preds = %57, %5
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %62, i32 0, i32 4
  %64 = load i64, ptr %63, align 8, !tbaa !24
  %65 = icmp eq i64 %64, 0
  br i1 %65, label %66, label %89

66:                                               ; preds = %61
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %67

67:                                               ; preds = %85, %66
  %68 = load i64, ptr %12, align 8, !tbaa !20
  %69 = load i64, ptr %17, align 8, !tbaa !20
  %70 = sub nsw i64 %69, 1
  %71 = icmp sle i64 %68, %70
  br i1 %71, label %72, label %88

72:                                               ; preds = %67
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %73, i32 0, i32 2
  %75 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %74, i32 0, i32 4
  %76 = load ptr, ptr %75, align 8, !tbaa !25
  %77 = load i64, ptr %12, align 8, !tbaa !20
  %78 = getelementptr inbounds double, ptr %76, i64 %77
  %79 = load double, ptr %78, align 8, !tbaa !23
  %80 = load ptr, ptr %9, align 8, !tbaa !5
  %81 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %80, i32 0, i32 4
  %82 = load ptr, ptr %81, align 8, !tbaa !25
  %83 = load i64, ptr %12, align 8, !tbaa !20
  %84 = getelementptr inbounds double, ptr %82, i64 %83
  store double %79, ptr %84, align 8, !tbaa !23
  br label %85

85:                                               ; preds = %72
  %86 = load i64, ptr %12, align 8, !tbaa !20
  %87 = add nsw i64 %86, 1
  store i64 %87, ptr %12, align 8, !tbaa !20
  br label %67, !llvm.loop !26

88:                                               ; preds = %67
  store i32 1, ptr %34, align 4
  br label %965

89:                                               ; preds = %61
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  %91 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %90, i32 0, i32 3
  %92 = load i64, ptr %91, align 8, !tbaa !28
  %93 = icmp eq i64 %92, 0
  br i1 %93, label %94, label %268

94:                                               ; preds = %89
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %95, i32 0, i32 12
  %97 = load i64, ptr %96, align 8, !tbaa !29
  store i64 %97, ptr %18, align 8, !tbaa !20
  %98 = load i64, ptr %18, align 8, !tbaa !20
  %99 = icmp sgt i64 %98, 0
  %100 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %99, ptr noundef @.str.126, ptr noundef %100)
  store double 1.000000e-50, ptr %24, align 8, !tbaa !23
  %101 = load i64, ptr %16, align 8, !tbaa !20
  %102 = load i64, ptr %17, align 8, !tbaa !20
  %103 = add nsw i64 %101, %102
  store i64 %103, ptr %13, align 8, !tbaa !20
  %104 = load ptr, ptr %6, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %104, i32 0, i32 10
  %106 = load double, ptr %105, align 8, !tbaa !30
  store double %106, ptr %22, align 8, !tbaa !23
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %107

107:                                              ; preds = %125, %94
  %108 = load i64, ptr %12, align 8, !tbaa !20
  %109 = load i64, ptr %17, align 8, !tbaa !20
  %110 = sub nsw i64 %109, 1
  %111 = icmp sle i64 %108, %110
  br i1 %111, label %112, label %128

112:                                              ; preds = %107
  %113 = load ptr, ptr %9, align 8, !tbaa !5
  %114 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %113, i32 0, i32 4
  %115 = load ptr, ptr %114, align 8, !tbaa !25
  %116 = load i64, ptr %12, align 8, !tbaa !20
  %117 = getelementptr inbounds double, ptr %115, i64 %116
  store double 0.000000e+00, ptr %117, align 8, !tbaa !23
  %118 = load double, ptr %24, align 8, !tbaa !23
  %119 = load ptr, ptr %7, align 8, !tbaa !5
  %120 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %119, i32 0, i32 2
  %121 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %120, i32 0, i32 4
  %122 = load ptr, ptr %121, align 8, !tbaa !25
  %123 = load i64, ptr %12, align 8, !tbaa !20
  %124 = getelementptr inbounds double, ptr %122, i64 %123
  store double %118, ptr %124, align 8, !tbaa !23
  br label %125

125:                                              ; preds = %112
  %126 = load i64, ptr %12, align 8, !tbaa !20
  %127 = add nsw i64 %126, 1
  store i64 %127, ptr %12, align 8, !tbaa !20
  br label %107, !llvm.loop !31

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

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

134:                                              ; preds = %129
  store double 0.000000e+00, ptr %19, align 8, !tbaa !23
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %135

135:                                              ; preds = %163, %134
  %136 = load i64, ptr %12, align 8, !tbaa !20
  %137 = load i64, ptr %16, align 8, !tbaa !20
  %138 = sub nsw i64 %137, 1
  %139 = icmp sle i64 %136, %138
  br i1 %139, label %140, label %166

140:                                              ; preds = %135
  %141 = load ptr, ptr %6, align 8, !tbaa !5
  %142 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %141, i32 0, i32 13
  %143 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %142, i32 0, i32 4
  %144 = load ptr, ptr %143, align 8, !tbaa !25
  %145 = load i64, ptr %11, align 8, !tbaa !20
  %146 = load i64, ptr %13, align 8, !tbaa !20
  %147 = mul nsw i64 %145, %146
  %148 = load i64, ptr %12, align 8, !tbaa !20
  %149 = add nsw i64 %147, %148
  %150 = getelementptr inbounds double, ptr %144, i64 %149
  %151 = load double, ptr %150, align 8, !tbaa !23
  %152 = load ptr, ptr %8, align 8, !tbaa !5
  %153 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %152, i32 0, i32 4
  %154 = load ptr, ptr %153, align 8, !tbaa !25
  %155 = load i64, ptr %12, align 8, !tbaa !20
  %156 = getelementptr inbounds double, ptr %154, i64 %155
  %157 = load double, ptr %156, align 8, !tbaa !23
  %158 = fsub double %151, %157
  store double %158, ptr %20, align 8, !tbaa !23
  %159 = load double, ptr %19, align 8, !tbaa !23
  %160 = load double, ptr %20, align 8, !tbaa !23
  %161 = load double, ptr %20, align 8, !tbaa !23
  %162 = call double @llvm.fmuladd.f64(double %160, double %161, double %159)
  store double %162, ptr %19, align 8, !tbaa !23
  br label %163

163:                                              ; preds = %140
  %164 = load i64, ptr %12, align 8, !tbaa !20
  %165 = add nsw i64 %164, 1
  store i64 %165, ptr %12, align 8, !tbaa !20
  br label %135, !llvm.loop !32

166:                                              ; preds = %135
  %167 = load double, ptr %19, align 8, !tbaa !23
  %168 = load double, ptr %22, align 8, !tbaa !23
  %169 = fmul double %168, 5.000000e-01
  %170 = load ptr, ptr %10, align 8, !tbaa !5
  %171 = call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef %167, double noundef %169, ptr noundef %170)
  store double %171, ptr %19, align 8, !tbaa !23
  %172 = load double, ptr %24, align 8, !tbaa !23
  %173 = load double, ptr %19, align 8, !tbaa !23
  %174 = fadd double %172, %173
  %175 = fdiv double 1.000000e+00, %174
  store double %175, ptr %19, align 8, !tbaa !23
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %176

176:                                              ; preds = %223, %166
  %177 = load i64, ptr %12, align 8, !tbaa !20
  %178 = load i64, ptr %17, align 8, !tbaa !20
  %179 = sub nsw i64 %178, 1
  %180 = icmp sle i64 %177, %179
  br i1 %180, label %181, label %226

181:                                              ; preds = %176
  %182 = load ptr, ptr %9, align 8, !tbaa !5
  %183 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %182, i32 0, i32 4
  %184 = load ptr, ptr %183, align 8, !tbaa !25
  %185 = load i64, ptr %12, align 8, !tbaa !20
  %186 = getelementptr inbounds double, ptr %184, i64 %185
  %187 = load double, ptr %186, align 8, !tbaa !23
  %188 = load double, ptr %19, align 8, !tbaa !23
  %189 = load ptr, ptr %6, align 8, !tbaa !5
  %190 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %189, i32 0, i32 13
  %191 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %190, i32 0, i32 4
  %192 = load ptr, ptr %191, align 8, !tbaa !25
  %193 = load i64, ptr %11, align 8, !tbaa !20
  %194 = load i64, ptr %13, align 8, !tbaa !20
  %195 = mul nsw i64 %193, %194
  %196 = load i64, ptr %16, align 8, !tbaa !20
  %197 = add nsw i64 %195, %196
  %198 = load i64, ptr %12, align 8, !tbaa !20
  %199 = add nsw i64 %197, %198
  %200 = getelementptr inbounds double, ptr %192, i64 %199
  %201 = load double, ptr %200, align 8, !tbaa !23
  %202 = call double @llvm.fmuladd.f64(double %188, double %201, double %187)
  %203 = load ptr, ptr %9, align 8, !tbaa !5
  %204 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %203, i32 0, i32 4
  %205 = load ptr, ptr %204, align 8, !tbaa !25
  %206 = load i64, ptr %12, align 8, !tbaa !20
  %207 = getelementptr inbounds double, ptr %205, i64 %206
  store double %202, ptr %207, align 8, !tbaa !23
  %208 = load ptr, ptr %7, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %208, i32 0, i32 2
  %210 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %209, i32 0, i32 4
  %211 = load ptr, ptr %210, align 8, !tbaa !25
  %212 = load i64, ptr %12, align 8, !tbaa !20
  %213 = getelementptr inbounds double, ptr %211, i64 %212
  %214 = load double, ptr %213, align 8, !tbaa !23
  %215 = load double, ptr %19, align 8, !tbaa !23
  %216 = fadd double %214, %215
  %217 = load ptr, ptr %7, align 8, !tbaa !5
  %218 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %217, i32 0, i32 2
  %219 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %218, i32 0, i32 4
  %220 = load ptr, ptr %219, align 8, !tbaa !25
  %221 = load i64, ptr %12, align 8, !tbaa !20
  %222 = getelementptr inbounds double, ptr %220, i64 %221
  store double %216, ptr %222, align 8, !tbaa !23
  br label %223

223:                                              ; preds = %181
  %224 = load i64, ptr %12, align 8, !tbaa !20
  %225 = add nsw i64 %224, 1
  store i64 %225, ptr %12, align 8, !tbaa !20
  br label %176, !llvm.loop !33

226:                                              ; preds = %176
  br label %227

227:                                              ; preds = %226
  %228 = load i64, ptr %11, align 8, !tbaa !20
  %229 = add nsw i64 %228, 1
  store i64 %229, ptr %11, align 8, !tbaa !20
  br label %129, !llvm.loop !34

230:                                              ; preds = %129
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %231

231:                                              ; preds = %264, %230
  %232 = load i64, ptr %12, align 8, !tbaa !20
  %233 = load i64, ptr %17, align 8, !tbaa !20
  %234 = sub nsw i64 %233, 1
  %235 = icmp sle i64 %232, %234
  br i1 %235, label %236, label %267

236:                                              ; preds = %231
  %237 = load ptr, ptr %9, align 8, !tbaa !5
  %238 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %237, i32 0, i32 4
  %239 = load ptr, ptr %238, align 8, !tbaa !25
  %240 = load i64, ptr %12, align 8, !tbaa !20
  %241 = getelementptr inbounds double, ptr %239, i64 %240
  %242 = load double, ptr %241, align 8, !tbaa !23
  %243 = load ptr, ptr %7, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %243, i32 0, i32 2
  %245 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %244, i32 0, i32 4
  %246 = load ptr, ptr %245, align 8, !tbaa !25
  %247 = load i64, ptr %12, align 8, !tbaa !20
  %248 = getelementptr inbounds double, ptr %246, i64 %247
  %249 = load double, ptr %248, align 8, !tbaa !23
  %250 = fdiv double %242, %249
  %251 = load ptr, ptr %6, align 8, !tbaa !5
  %252 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %251, i32 0, i32 2
  %253 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %252, i32 0, i32 4
  %254 = load ptr, ptr %253, align 8, !tbaa !25
  %255 = load i64, ptr %12, align 8, !tbaa !20
  %256 = getelementptr inbounds double, ptr %254, i64 %255
  %257 = load double, ptr %256, align 8, !tbaa !23
  %258 = fadd double %250, %257
  %259 = load ptr, ptr %9, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %259, i32 0, i32 4
  %261 = load ptr, ptr %260, align 8, !tbaa !25
  %262 = load i64, ptr %12, align 8, !tbaa !20
  %263 = getelementptr inbounds double, ptr %261, i64 %262
  store double %258, ptr %263, align 8, !tbaa !23
  br label %264

264:                                              ; preds = %236
  %265 = load i64, ptr %12, align 8, !tbaa !20
  %266 = add nsw i64 %265, 1
  store i64 %266, ptr %12, align 8, !tbaa !20
  br label %231, !llvm.loop !35

267:                                              ; preds = %231
  store i32 1, ptr %34, align 4
  br label %965

268:                                              ; preds = %89
  %269 = load ptr, ptr %6, align 8, !tbaa !5
  %270 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %269, i32 0, i32 3
  %271 = load i64, ptr %270, align 8, !tbaa !28
  %272 = icmp eq i64 %271, 1
  br i1 %272, label %273, label %436

273:                                              ; preds = %268
  store double 1.000000e-50, ptr %24, align 8, !tbaa !23
  %274 = load ptr, ptr %6, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %274, i32 0, i32 5
  %276 = load double, ptr %275, align 8, !tbaa !36
  store double %276, ptr %23, align 8, !tbaa !23
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %277

277:                                              ; preds = %295, %273
  %278 = load i64, ptr %12, align 8, !tbaa !20
  %279 = load i64, ptr %17, align 8, !tbaa !20
  %280 = sub nsw i64 %279, 1
  %281 = icmp sle i64 %278, %280
  br i1 %281, label %282, label %298

282:                                              ; preds = %277
  %283 = load ptr, ptr %9, align 8, !tbaa !5
  %284 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %283, i32 0, i32 4
  %285 = load ptr, ptr %284, align 8, !tbaa !25
  %286 = load i64, ptr %12, align 8, !tbaa !20
  %287 = getelementptr inbounds double, ptr %285, i64 %286
  store double 0.000000e+00, ptr %287, align 8, !tbaa !23
  %288 = load double, ptr %24, align 8, !tbaa !23
  %289 = load ptr, ptr %7, align 8, !tbaa !5
  %290 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %289, i32 0, i32 2
  %291 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %290, i32 0, i32 4
  %292 = load ptr, ptr %291, align 8, !tbaa !25
  %293 = load i64, ptr %12, align 8, !tbaa !20
  %294 = getelementptr inbounds double, ptr %292, i64 %293
  store double %288, ptr %294, align 8, !tbaa !23
  br label %295

295:                                              ; preds = %282
  %296 = load i64, ptr %12, align 8, !tbaa !20
  %297 = add nsw i64 %296, 1
  store i64 %297, ptr %12, align 8, !tbaa !20
  br label %277, !llvm.loop !37

298:                                              ; preds = %277
  %299 = load ptr, ptr %6, align 8, !tbaa !5
  %300 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %299, i32 0, i32 11
  %301 = load ptr, ptr %7, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %301, i32 0, i32 6
  %303 = load ptr, ptr %8, align 8, !tbaa !5
  %304 = load double, ptr %23, align 8, !tbaa !23
  %305 = load ptr, ptr %10, align 8, !tbaa !5
  %306 = call noundef i64 @_ZN11alglib_impl16kdtreetsqueryrnnEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEdbPNS_8ae_stateE(ptr noundef %300, ptr noundef %302, ptr noundef %303, double noundef %304, i1 noundef zeroext true, ptr noundef %305)
  store i64 %306, ptr %14, align 8, !tbaa !20
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %307, i32 0, i32 11
  %309 = load ptr, ptr %7, align 8, !tbaa !5
  %310 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %309, i32 0, i32 6
  %311 = load ptr, ptr %7, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %311, i32 0, i32 4
  %313 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl22kdtreetsqueryresultsxyEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_matrixEPNS_8ae_stateE(ptr noundef %308, ptr noundef %310, ptr noundef %312, ptr noundef %313)
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %314, i32 0, i32 11
  %316 = load ptr, ptr %7, align 8, !tbaa !5
  %317 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %316, i32 0, i32 6
  %318 = load ptr, ptr %7, align 8, !tbaa !5
  %319 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %318, i32 0, i32 5
  %320 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl29kdtreetsqueryresultsdistancesEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %315, ptr noundef %317, ptr noundef %319, ptr noundef %320)
  store i64 0, ptr %11, align 8, !tbaa !20
  br label %321

321:                                              ; preds = %395, %298
  %322 = load i64, ptr %11, align 8, !tbaa !20
  %323 = load i64, ptr %14, align 8, !tbaa !20
  %324 = sub nsw i64 %323, 1
  %325 = icmp sle i64 %322, %324
  br i1 %325, label %326, label %398

326:                                              ; preds = %321
  %327 = load ptr, ptr %7, align 8, !tbaa !5
  %328 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %327, i32 0, i32 5
  %329 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %328, i32 0, i32 4
  %330 = load ptr, ptr %329, align 8, !tbaa !25
  %331 = load i64, ptr %11, align 8, !tbaa !20
  %332 = getelementptr inbounds double, ptr %330, i64 %331
  %333 = load double, ptr %332, align 8, !tbaa !23
  store double %333, ptr %19, align 8, !tbaa !23
  %334 = load double, ptr %23, align 8, !tbaa !23
  %335 = load double, ptr %19, align 8, !tbaa !23
  %336 = fsub double %334, %335
  %337 = load double, ptr %23, align 8, !tbaa !23
  %338 = load double, ptr %19, align 8, !tbaa !23
  %339 = load double, ptr %24, align 8, !tbaa !23
  %340 = call double @llvm.fmuladd.f64(double %337, double %338, double %339)
  %341 = fdiv double %336, %340
  store double %341, ptr %19, align 8, !tbaa !23
  %342 = load double, ptr %19, align 8, !tbaa !23
  %343 = load double, ptr %19, align 8, !tbaa !23
  %344 = fmul double %342, %343
  store double %344, ptr %19, align 8, !tbaa !23
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %345

345:                                              ; preds = %391, %326
  %346 = load i64, ptr %12, align 8, !tbaa !20
  %347 = load i64, ptr %17, align 8, !tbaa !20
  %348 = sub nsw i64 %347, 1
  %349 = icmp sle i64 %346, %348
  br i1 %349, label %350, label %394

350:                                              ; preds = %345
  %351 = load ptr, ptr %9, align 8, !tbaa !5
  %352 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %351, i32 0, i32 4
  %353 = load ptr, ptr %352, align 8, !tbaa !25
  %354 = load i64, ptr %12, align 8, !tbaa !20
  %355 = getelementptr inbounds double, ptr %353, i64 %354
  %356 = load double, ptr %355, align 8, !tbaa !23
  %357 = load double, ptr %19, align 8, !tbaa !23
  %358 = load ptr, ptr %7, align 8, !tbaa !5
  %359 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %358, i32 0, i32 4
  %360 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %359, i32 0, i32 6
  %361 = load ptr, ptr %360, align 8, !tbaa !25
  %362 = load i64, ptr %11, align 8, !tbaa !20
  %363 = getelementptr inbounds ptr, ptr %361, i64 %362
  %364 = load ptr, ptr %363, align 8, !tbaa !5
  %365 = load i64, ptr %16, align 8, !tbaa !20
  %366 = load i64, ptr %12, align 8, !tbaa !20
  %367 = add nsw i64 %365, %366
  %368 = getelementptr inbounds double, ptr %364, i64 %367
  %369 = load double, ptr %368, align 8, !tbaa !23
  %370 = call double @llvm.fmuladd.f64(double %357, double %369, double %356)
  %371 = load ptr, ptr %9, align 8, !tbaa !5
  %372 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %371, i32 0, i32 4
  %373 = load ptr, ptr %372, align 8, !tbaa !25
  %374 = load i64, ptr %12, align 8, !tbaa !20
  %375 = getelementptr inbounds double, ptr %373, i64 %374
  store double %370, ptr %375, align 8, !tbaa !23
  %376 = load ptr, ptr %7, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %376, i32 0, i32 2
  %378 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %377, i32 0, i32 4
  %379 = load ptr, ptr %378, align 8, !tbaa !25
  %380 = load i64, ptr %12, align 8, !tbaa !20
  %381 = getelementptr inbounds double, ptr %379, i64 %380
  %382 = load double, ptr %381, align 8, !tbaa !23
  %383 = load double, ptr %19, align 8, !tbaa !23
  %384 = fadd double %382, %383
  %385 = load ptr, ptr %7, align 8, !tbaa !5
  %386 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %385, i32 0, i32 2
  %387 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %386, i32 0, i32 4
  %388 = load ptr, ptr %387, align 8, !tbaa !25
  %389 = load i64, ptr %12, align 8, !tbaa !20
  %390 = getelementptr inbounds double, ptr %388, i64 %389
  store double %384, ptr %390, align 8, !tbaa !23
  br label %391

391:                                              ; preds = %350
  %392 = load i64, ptr %12, align 8, !tbaa !20
  %393 = add nsw i64 %392, 1
  store i64 %393, ptr %12, align 8, !tbaa !20
  br label %345, !llvm.loop !38

394:                                              ; preds = %345
  br label %395

395:                                              ; preds = %394
  %396 = load i64, ptr %11, align 8, !tbaa !20
  %397 = add nsw i64 %396, 1
  store i64 %397, ptr %11, align 8, !tbaa !20
  br label %321, !llvm.loop !39

398:                                              ; preds = %321
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %399

399:                                              ; preds = %432, %398
  %400 = load i64, ptr %12, align 8, !tbaa !20
  %401 = load i64, ptr %17, align 8, !tbaa !20
  %402 = sub nsw i64 %401, 1
  %403 = icmp sle i64 %400, %402
  br i1 %403, label %404, label %435

404:                                              ; preds = %399
  %405 = load ptr, ptr %9, align 8, !tbaa !5
  %406 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %405, i32 0, i32 4
  %407 = load ptr, ptr %406, align 8, !tbaa !25
  %408 = load i64, ptr %12, align 8, !tbaa !20
  %409 = getelementptr inbounds double, ptr %407, i64 %408
  %410 = load double, ptr %409, align 8, !tbaa !23
  %411 = load ptr, ptr %7, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %411, i32 0, i32 2
  %413 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %412, i32 0, i32 4
  %414 = load ptr, ptr %413, align 8, !tbaa !25
  %415 = load i64, ptr %12, align 8, !tbaa !20
  %416 = getelementptr inbounds double, ptr %414, i64 %415
  %417 = load double, ptr %416, align 8, !tbaa !23
  %418 = fdiv double %410, %417
  %419 = load ptr, ptr %6, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %419, i32 0, i32 2
  %421 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %420, i32 0, i32 4
  %422 = load ptr, ptr %421, align 8, !tbaa !25
  %423 = load i64, ptr %12, align 8, !tbaa !20
  %424 = getelementptr inbounds double, ptr %422, i64 %423
  %425 = load double, ptr %424, align 8, !tbaa !23
  %426 = fadd double %418, %425
  %427 = load ptr, ptr %9, align 8, !tbaa !5
  %428 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %427, i32 0, i32 4
  %429 = load ptr, ptr %428, align 8, !tbaa !25
  %430 = load i64, ptr %12, align 8, !tbaa !20
  %431 = getelementptr inbounds double, ptr %429, i64 %430
  store double %426, ptr %431, align 8, !tbaa !23
  br label %432

432:                                              ; preds = %404
  %433 = load i64, ptr %12, align 8, !tbaa !20
  %434 = add nsw i64 %433, 1
  store i64 %434, ptr %12, align 8, !tbaa !20
  br label %399, !llvm.loop !40

435:                                              ; preds = %399
  store i32 1, ptr %34, align 4
  br label %965

436:                                              ; preds = %268
  %437 = load ptr, ptr %6, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %437, i32 0, i32 3
  %439 = load i64, ptr %438, align 8, !tbaa !28
  %440 = icmp eq i64 %439, 2
  br i1 %440, label %441, label %963

441:                                              ; preds = %436
  %442 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %443 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %442, double noundef 1.000000e+00)
  %444 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %443, ptr noundef @.str.127, ptr noundef %444)
  %445 = load ptr, ptr %6, align 8, !tbaa !5
  %446 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %445, i32 0, i32 6
  %447 = load double, ptr %446, align 8, !tbaa !41
  %448 = fdiv double 1.000000e+00, %447
  store double %448, ptr %27, align 8, !tbaa !23
  %449 = load ptr, ptr %6, align 8, !tbaa !5
  %450 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %449, i32 0, i32 5
  %451 = load double, ptr %450, align 8, !tbaa !36
  %452 = fdiv double 1.000000e+00, %451
  store double %452, ptr %28, align 8, !tbaa !23
  %453 = load ptr, ptr %6, align 8, !tbaa !5
  %454 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %453, i32 0, i32 9
  %455 = load double, ptr %454, align 8, !tbaa !42
  store double %455, ptr %26, align 8, !tbaa !23
  %456 = load i64, ptr %17, align 8, !tbaa !20
  %457 = icmp eq i64 %456, 1
  br i1 %457, label %458, label %466

458:                                              ; preds = %441
  %459 = load ptr, ptr %6, align 8, !tbaa !5
  %460 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %459, i32 0, i32 4
  %461 = load i64, ptr %460, align 8, !tbaa !24
  %462 = icmp sge i64 %461, 3
  br i1 %462, label %463, label %466

463:                                              ; preds = %458
  %464 = load double, ptr %26, align 8, !tbaa !23
  %465 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %464, double noundef 1.000000e+00)
  br label %466

466:                                              ; preds = %463, %458, %441
  %467 = phi i1 [ false, %458 ], [ false, %441 ], [ %465, %463 ]
  %468 = zext i1 %467 to i8
  store i8 %468, ptr %29, align 1, !tbaa !43
  %469 = load i8, ptr %29, align 1, !tbaa !43, !range !44, !noundef !45
  %470 = trunc i8 %469 to i1
  br i1 %470, label %471, label %499

471:                                              ; preds = %466
  store double 0.000000e+00, ptr %30, align 8, !tbaa !23
  %472 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  store double %472, ptr %31, align 8, !tbaa !23
  store double 0.000000e+00, ptr %32, align 8, !tbaa !23
  %473 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  store double %473, ptr %33, align 8, !tbaa !23
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %474

474:                                              ; preds = %495, %471
  %475 = load i64, ptr %12, align 8, !tbaa !20
  %476 = load ptr, ptr %6, align 8, !tbaa !5
  %477 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %476, i32 0, i32 4
  %478 = load i64, ptr %477, align 8, !tbaa !24
  %479 = sub nsw i64 %478, 1
  %480 = icmp sle i64 %475, %479
  br i1 %480, label %481, label %498

481:                                              ; preds = %474
  %482 = load ptr, ptr %7, align 8, !tbaa !5
  %483 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %482, i32 0, i32 2
  %484 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %483, i32 0, i32 4
  %485 = load ptr, ptr %484, align 8, !tbaa !25
  %486 = load i64, ptr %12, align 8, !tbaa !20
  %487 = getelementptr inbounds double, ptr %485, i64 %486
  store double 0.000000e+00, ptr %487, align 8, !tbaa !23
  %488 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %489 = load ptr, ptr %7, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %489, i32 0, i32 3
  %491 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %490, i32 0, i32 4
  %492 = load ptr, ptr %491, align 8, !tbaa !25
  %493 = load i64, ptr %12, align 8, !tbaa !20
  %494 = getelementptr inbounds double, ptr %492, i64 %493
  store double %488, ptr %494, align 8, !tbaa !23
  br label %495

495:                                              ; preds = %481
  %496 = load i64, ptr %12, align 8, !tbaa !20
  %497 = add nsw i64 %496, 1
  store i64 %497, ptr %12, align 8, !tbaa !20
  br label %474, !llvm.loop !46

498:                                              ; preds = %474
  br label %539

499:                                              ; preds = %466
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %500

500:                                              ; preds = %516, %499
  %501 = load i64, ptr %12, align 8, !tbaa !20
  %502 = load i64, ptr %17, align 8, !tbaa !20
  %503 = load ptr, ptr %6, align 8, !tbaa !5
  %504 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %503, i32 0, i32 4
  %505 = load i64, ptr %504, align 8, !tbaa !24
  %506 = mul nsw i64 %502, %505
  %507 = sub nsw i64 %506, 1
  %508 = icmp sle i64 %501, %507
  br i1 %508, label %509, label %519

509:                                              ; preds = %500
  %510 = load ptr, ptr %7, align 8, !tbaa !5
  %511 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %510, i32 0, i32 2
  %512 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %511, i32 0, i32 4
  %513 = load ptr, ptr %512, align 8, !tbaa !25
  %514 = load i64, ptr %12, align 8, !tbaa !20
  %515 = getelementptr inbounds double, ptr %513, i64 %514
  store double 0.000000e+00, ptr %515, align 8, !tbaa !23
  br label %516

516:                                              ; preds = %509
  %517 = load i64, ptr %12, align 8, !tbaa !20
  %518 = add nsw i64 %517, 1
  store i64 %518, ptr %12, align 8, !tbaa !20
  br label %500, !llvm.loop !47

519:                                              ; preds = %500
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %520

520:                                              ; preds = %535, %519
  %521 = load i64, ptr %12, align 8, !tbaa !20
  %522 = load ptr, ptr %6, align 8, !tbaa !5
  %523 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %522, i32 0, i32 4
  %524 = load i64, ptr %523, align 8, !tbaa !24
  %525 = sub nsw i64 %524, 1
  %526 = icmp sle i64 %521, %525
  br i1 %526, label %527, label %538

527:                                              ; preds = %520
  %528 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %529 = load ptr, ptr %7, align 8, !tbaa !5
  %530 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %529, i32 0, i32 3
  %531 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %530, i32 0, i32 4
  %532 = load ptr, ptr %531, align 8, !tbaa !25
  %533 = load i64, ptr %12, align 8, !tbaa !20
  %534 = getelementptr inbounds double, ptr %532, i64 %533
  store double %528, ptr %534, align 8, !tbaa !23
  br label %535

535:                                              ; preds = %527
  %536 = load i64, ptr %12, align 8, !tbaa !20
  %537 = add nsw i64 %536, 1
  store i64 %537, ptr %12, align 8, !tbaa !20
  br label %520, !llvm.loop !48

538:                                              ; preds = %520
  br label %539

539:                                              ; preds = %538, %498
  %540 = load ptr, ptr %6, align 8, !tbaa !5
  %541 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %540, i32 0, i32 11
  %542 = load ptr, ptr %7, align 8, !tbaa !5
  %543 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %542, i32 0, i32 6
  %544 = load ptr, ptr %8, align 8, !tbaa !5
  %545 = load ptr, ptr %6, align 8, !tbaa !5
  %546 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %545, i32 0, i32 5
  %547 = load double, ptr %546, align 8, !tbaa !36
  %548 = load ptr, ptr %10, align 8, !tbaa !5
  %549 = call noundef i64 @_ZN11alglib_impl17kdtreetsqueryrnnuEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEdbPNS_8ae_stateE(ptr noundef %541, ptr noundef %543, ptr noundef %544, double noundef %547, i1 noundef zeroext true, ptr noundef %548)
  store i64 %549, ptr %14, align 8, !tbaa !20
  %550 = load ptr, ptr %6, align 8, !tbaa !5
  %551 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %550, i32 0, i32 11
  %552 = load ptr, ptr %7, align 8, !tbaa !5
  %553 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %552, i32 0, i32 6
  %554 = load ptr, ptr %7, align 8, !tbaa !5
  %555 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %554, i32 0, i32 4
  %556 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl22kdtreetsqueryresultsxyEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_matrixEPNS_8ae_stateE(ptr noundef %551, ptr noundef %553, ptr noundef %555, ptr noundef %556)
  %557 = load ptr, ptr %6, align 8, !tbaa !5
  %558 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %557, i32 0, i32 11
  %559 = load ptr, ptr %7, align 8, !tbaa !5
  %560 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %559, i32 0, i32 6
  %561 = load ptr, ptr %7, align 8, !tbaa !5
  %562 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %561, i32 0, i32 5
  %563 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl29kdtreetsqueryresultsdistancesEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %558, ptr noundef %560, ptr noundef %562, ptr noundef %563)
  store i64 0, ptr %11, align 8, !tbaa !20
  br label %564

564:                                              ; preds = %856, %539
  %565 = load i64, ptr %11, align 8, !tbaa !20
  %566 = load i64, ptr %14, align 8, !tbaa !20
  %567 = sub nsw i64 %566, 1
  %568 = icmp sle i64 %565, %567
  br i1 %568, label %569, label %859

569:                                              ; preds = %564
  %570 = load ptr, ptr %6, align 8, !tbaa !5
  %571 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %570, i32 0, i32 7
  %572 = load double, ptr %571, align 8, !tbaa !49
  store double %572, ptr %25, align 8, !tbaa !23
  %573 = load ptr, ptr %7, align 8, !tbaa !5
  %574 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %573, i32 0, i32 5
  %575 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %574, i32 0, i32 4
  %576 = load ptr, ptr %575, align 8, !tbaa !25
  %577 = load i64, ptr %11, align 8, !tbaa !20
  %578 = getelementptr inbounds double, ptr %576, i64 %577
  %579 = load double, ptr %578, align 8, !tbaa !23
  %580 = load double, ptr %28, align 8, !tbaa !23
  %581 = fmul double %579, %580
  store double %581, ptr %20, align 8, !tbaa !23
  %582 = load i8, ptr %29, align 1, !tbaa !43, !range !44, !noundef !45
  %583 = trunc i8 %582 to i1
  br i1 %583, label %584, label %744

584:                                              ; preds = %569
  %585 = load double, ptr %20, align 8, !tbaa !23
  %586 = load double, ptr %20, align 8, !tbaa !23
  %587 = fmul double %585, %586
  store double %587, ptr %19, align 8, !tbaa !23
  %588 = load double, ptr %19, align 8, !tbaa !23
  %589 = fsub double 1.000000e+00, %588
  %590 = load double, ptr %19, align 8, !tbaa !23
  %591 = fsub double 1.000000e+00, %590
  %592 = fmul double %589, %591
  %593 = load double, ptr %19, align 8, !tbaa !23
  %594 = load double, ptr %25, align 8, !tbaa !23
  %595 = fadd double %593, %594
  %596 = fdiv double %592, %595
  store double %596, ptr %19, align 8, !tbaa !23
  %597 = load ptr, ptr %7, align 8, !tbaa !5
  %598 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %597, i32 0, i32 4
  %599 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %598, i32 0, i32 6
  %600 = load ptr, ptr %599, align 8, !tbaa !25
  %601 = load i64, ptr %11, align 8, !tbaa !20
  %602 = getelementptr inbounds ptr, ptr %600, i64 %601
  %603 = load ptr, ptr %602, align 8, !tbaa !5
  %604 = load i64, ptr %16, align 8, !tbaa !20
  %605 = add nsw i64 %604, 0
  %606 = getelementptr inbounds double, ptr %603, i64 %605
  %607 = load double, ptr %606, align 8, !tbaa !23
  store double %607, ptr %21, align 8, !tbaa !23
  %608 = load double, ptr %30, align 8, !tbaa !23
  %609 = load double, ptr %19, align 8, !tbaa !23
  %610 = load double, ptr %21, align 8, !tbaa !23
  %611 = call double @llvm.fmuladd.f64(double %609, double %610, double %608)
  store double %611, ptr %30, align 8, !tbaa !23
  %612 = load double, ptr %31, align 8, !tbaa !23
  %613 = load double, ptr %19, align 8, !tbaa !23
  %614 = fadd double %612, %613
  store double %614, ptr %31, align 8, !tbaa !23
  %615 = load double, ptr %20, align 8, !tbaa !23
  %616 = load double, ptr %27, align 8, !tbaa !23
  %617 = fmul double %615, %616
  store double %617, ptr %20, align 8, !tbaa !23
  %618 = load double, ptr %20, align 8, !tbaa !23
  %619 = fcmp oge double %618, 1.000000e+00
  br i1 %619, label %620, label %621

620:                                              ; preds = %584
  br label %856

621:                                              ; preds = %584
  %622 = load double, ptr %20, align 8, !tbaa !23
  %623 = load double, ptr %20, align 8, !tbaa !23
  %624 = fmul double %622, %623
  store double %624, ptr %19, align 8, !tbaa !23
  %625 = load double, ptr %19, align 8, !tbaa !23
  %626 = fsub double 1.000000e+00, %625
  %627 = load double, ptr %19, align 8, !tbaa !23
  %628 = fsub double 1.000000e+00, %627
  %629 = fmul double %626, %628
  %630 = load double, ptr %19, align 8, !tbaa !23
  %631 = load double, ptr %25, align 8, !tbaa !23
  %632 = fadd double %630, %631
  %633 = fdiv double %629, %632
  store double %633, ptr %19, align 8, !tbaa !23
  %634 = load ptr, ptr %7, align 8, !tbaa !5
  %635 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %634, i32 0, i32 4
  %636 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %635, i32 0, i32 6
  %637 = load ptr, ptr %636, align 8, !tbaa !25
  %638 = load i64, ptr %11, align 8, !tbaa !20
  %639 = getelementptr inbounds ptr, ptr %637, i64 %638
  %640 = load ptr, ptr %639, align 8, !tbaa !5
  %641 = load i64, ptr %16, align 8, !tbaa !20
  %642 = add nsw i64 %641, 1
  %643 = getelementptr inbounds double, ptr %640, i64 %642
  %644 = load double, ptr %643, align 8, !tbaa !23
  store double %644, ptr %21, align 8, !tbaa !23
  %645 = load double, ptr %32, align 8, !tbaa !23
  %646 = load double, ptr %19, align 8, !tbaa !23
  %647 = load double, ptr %21, align 8, !tbaa !23
  %648 = call double @llvm.fmuladd.f64(double %646, double %647, double %645)
  store double %648, ptr %32, align 8, !tbaa !23
  %649 = load double, ptr %33, align 8, !tbaa !23
  %650 = load double, ptr %19, align 8, !tbaa !23
  %651 = fadd double %649, %650
  store double %651, ptr %33, align 8, !tbaa !23
  %652 = load double, ptr %20, align 8, !tbaa !23
  %653 = load double, ptr %27, align 8, !tbaa !23
  %654 = fmul double %652, %653
  store double %654, ptr %20, align 8, !tbaa !23
  %655 = load double, ptr %20, align 8, !tbaa !23
  %656 = fcmp oge double %655, 1.000000e+00
  br i1 %656, label %657, label %658

657:                                              ; preds = %621
  br label %856

658:                                              ; preds = %621
  store i64 2, ptr %15, align 8, !tbaa !20
  br label %659

659:                                              ; preds = %740, %658
  %660 = load i64, ptr %15, align 8, !tbaa !20
  %661 = load ptr, ptr %6, align 8, !tbaa !5
  %662 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %661, i32 0, i32 4
  %663 = load i64, ptr %662, align 8, !tbaa !24
  %664 = sub nsw i64 %663, 1
  %665 = icmp sle i64 %660, %664
  br i1 %665, label %666, label %743

666:                                              ; preds = %659
  %667 = load i64, ptr %15, align 8, !tbaa !20
  %668 = load ptr, ptr %6, align 8, !tbaa !5
  %669 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %668, i32 0, i32 4
  %670 = load i64, ptr %669, align 8, !tbaa !24
  %671 = sub nsw i64 %670, 1
  %672 = icmp eq i64 %667, %671
  br i1 %672, label %673, label %677

673:                                              ; preds = %666
  %674 = load ptr, ptr %6, align 8, !tbaa !5
  %675 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %674, i32 0, i32 8
  %676 = load double, ptr %675, align 8, !tbaa !50
  store double %676, ptr %25, align 8, !tbaa !23
  br label %677

677:                                              ; preds = %673, %666
  %678 = load double, ptr %20, align 8, !tbaa !23
  %679 = load double, ptr %20, align 8, !tbaa !23
  %680 = fmul double %678, %679
  store double %680, ptr %19, align 8, !tbaa !23
  %681 = load double, ptr %19, align 8, !tbaa !23
  %682 = fsub double 1.000000e+00, %681
  %683 = load double, ptr %19, align 8, !tbaa !23
  %684 = fsub double 1.000000e+00, %683
  %685 = fmul double %682, %684
  %686 = load double, ptr %19, align 8, !tbaa !23
  %687 = load double, ptr %25, align 8, !tbaa !23
  %688 = fadd double %686, %687
  %689 = fdiv double %685, %688
  store double %689, ptr %19, align 8, !tbaa !23
  %690 = load ptr, ptr %7, align 8, !tbaa !5
  %691 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %690, i32 0, i32 4
  %692 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %691, i32 0, i32 6
  %693 = load ptr, ptr %692, align 8, !tbaa !25
  %694 = load i64, ptr %11, align 8, !tbaa !20
  %695 = getelementptr inbounds ptr, ptr %693, i64 %694
  %696 = load ptr, ptr %695, align 8, !tbaa !5
  %697 = load i64, ptr %16, align 8, !tbaa !20
  %698 = load i64, ptr %15, align 8, !tbaa !20
  %699 = add nsw i64 %697, %698
  %700 = getelementptr inbounds double, ptr %696, i64 %699
  %701 = load double, ptr %700, align 8, !tbaa !23
  store double %701, ptr %21, align 8, !tbaa !23
  %702 = load ptr, ptr %7, align 8, !tbaa !5
  %703 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %702, i32 0, i32 2
  %704 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %703, i32 0, i32 4
  %705 = load ptr, ptr %704, align 8, !tbaa !25
  %706 = load i64, ptr %15, align 8, !tbaa !20
  %707 = getelementptr inbounds double, ptr %705, i64 %706
  %708 = load double, ptr %707, align 8, !tbaa !23
  %709 = load double, ptr %19, align 8, !tbaa !23
  %710 = load double, ptr %21, align 8, !tbaa !23
  %711 = call double @llvm.fmuladd.f64(double %709, double %710, double %708)
  %712 = load ptr, ptr %7, align 8, !tbaa !5
  %713 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %712, i32 0, i32 2
  %714 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %713, i32 0, i32 4
  %715 = load ptr, ptr %714, align 8, !tbaa !25
  %716 = load i64, ptr %15, align 8, !tbaa !20
  %717 = getelementptr inbounds double, ptr %715, i64 %716
  store double %711, ptr %717, align 8, !tbaa !23
  %718 = load ptr, ptr %7, align 8, !tbaa !5
  %719 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %718, i32 0, i32 3
  %720 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %719, i32 0, i32 4
  %721 = load ptr, ptr %720, align 8, !tbaa !25
  %722 = load i64, ptr %15, align 8, !tbaa !20
  %723 = getelementptr inbounds double, ptr %721, i64 %722
  %724 = load double, ptr %723, align 8, !tbaa !23
  %725 = load double, ptr %19, align 8, !tbaa !23
  %726 = fadd double %724, %725
  %727 = load ptr, ptr %7, align 8, !tbaa !5
  %728 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %727, i32 0, i32 3
  %729 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %728, i32 0, i32 4
  %730 = load ptr, ptr %729, align 8, !tbaa !25
  %731 = load i64, ptr %15, align 8, !tbaa !20
  %732 = getelementptr inbounds double, ptr %730, i64 %731
  store double %726, ptr %732, align 8, !tbaa !23
  %733 = load double, ptr %20, align 8, !tbaa !23
  %734 = load double, ptr %27, align 8, !tbaa !23
  %735 = fmul double %733, %734
  store double %735, ptr %20, align 8, !tbaa !23
  %736 = load double, ptr %20, align 8, !tbaa !23
  %737 = fcmp oge double %736, 1.000000e+00
  br i1 %737, label %738, label %739

738:                                              ; preds = %677
  br label %743

739:                                              ; preds = %677
  br label %740

740:                                              ; preds = %739
  %741 = load i64, ptr %15, align 8, !tbaa !20
  %742 = add nsw i64 %741, 1
  store i64 %742, ptr %15, align 8, !tbaa !20
  br label %659, !llvm.loop !51

743:                                              ; preds = %738, %659
  br label %855

744:                                              ; preds = %569
  store i64 0, ptr %15, align 8, !tbaa !20
  br label %745

745:                                              ; preds = %851, %744
  %746 = load i64, ptr %15, align 8, !tbaa !20
  %747 = load ptr, ptr %6, align 8, !tbaa !5
  %748 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %747, i32 0, i32 4
  %749 = load i64, ptr %748, align 8, !tbaa !24
  %750 = sub nsw i64 %749, 1
  %751 = icmp sle i64 %746, %750
  br i1 %751, label %752, label %854

752:                                              ; preds = %745
  %753 = load i64, ptr %15, align 8, !tbaa !20
  %754 = load ptr, ptr %6, align 8, !tbaa !5
  %755 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %754, i32 0, i32 4
  %756 = load i64, ptr %755, align 8, !tbaa !24
  %757 = sub nsw i64 %756, 1
  %758 = icmp eq i64 %753, %757
  br i1 %758, label %759, label %763

759:                                              ; preds = %752
  %760 = load ptr, ptr %6, align 8, !tbaa !5
  %761 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %760, i32 0, i32 8
  %762 = load double, ptr %761, align 8, !tbaa !50
  store double %762, ptr %25, align 8, !tbaa !23
  br label %763

763:                                              ; preds = %759, %752
  %764 = load double, ptr %20, align 8, !tbaa !23
  %765 = fcmp oge double %764, 1.000000e+00
  br i1 %765, label %766, label %767

766:                                              ; preds = %763
  br label %854

767:                                              ; preds = %763
  %768 = load double, ptr %20, align 8, !tbaa !23
  %769 = load double, ptr %20, align 8, !tbaa !23
  %770 = fmul double %768, %769
  store double %770, ptr %19, align 8, !tbaa !23
  %771 = load double, ptr %19, align 8, !tbaa !23
  %772 = fsub double 1.000000e+00, %771
  %773 = load double, ptr %19, align 8, !tbaa !23
  %774 = fsub double 1.000000e+00, %773
  %775 = fmul double %772, %774
  %776 = load double, ptr %19, align 8, !tbaa !23
  %777 = load double, ptr %25, align 8, !tbaa !23
  %778 = fadd double %776, %777
  %779 = fdiv double %775, %778
  store double %779, ptr %19, align 8, !tbaa !23
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %780

780:                                              ; preds = %826, %767
  %781 = load i64, ptr %12, align 8, !tbaa !20
  %782 = load i64, ptr %17, align 8, !tbaa !20
  %783 = sub nsw i64 %782, 1
  %784 = icmp sle i64 %781, %783
  br i1 %784, label %785, label %829

785:                                              ; preds = %780
  %786 = load ptr, ptr %7, align 8, !tbaa !5
  %787 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %786, i32 0, i32 4
  %788 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %787, i32 0, i32 6
  %789 = load ptr, ptr %788, align 8, !tbaa !25
  %790 = load i64, ptr %11, align 8, !tbaa !20
  %791 = getelementptr inbounds ptr, ptr %789, i64 %790
  %792 = load ptr, ptr %791, align 8, !tbaa !5
  %793 = load i64, ptr %16, align 8, !tbaa !20
  %794 = load i64, ptr %15, align 8, !tbaa !20
  %795 = load i64, ptr %17, align 8, !tbaa !20
  %796 = mul nsw i64 %794, %795
  %797 = add nsw i64 %793, %796
  %798 = load i64, ptr %12, align 8, !tbaa !20
  %799 = add nsw i64 %797, %798
  %800 = getelementptr inbounds double, ptr %792, i64 %799
  %801 = load double, ptr %800, align 8, !tbaa !23
  store double %801, ptr %21, align 8, !tbaa !23
  %802 = load ptr, ptr %7, align 8, !tbaa !5
  %803 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %802, i32 0, i32 2
  %804 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %803, i32 0, i32 4
  %805 = load ptr, ptr %804, align 8, !tbaa !25
  %806 = load i64, ptr %15, align 8, !tbaa !20
  %807 = load i64, ptr %17, align 8, !tbaa !20
  %808 = mul nsw i64 %806, %807
  %809 = load i64, ptr %12, align 8, !tbaa !20
  %810 = add nsw i64 %808, %809
  %811 = getelementptr inbounds double, ptr %805, i64 %810
  %812 = load double, ptr %811, align 8, !tbaa !23
  %813 = load double, ptr %19, align 8, !tbaa !23
  %814 = load double, ptr %21, align 8, !tbaa !23
  %815 = call double @llvm.fmuladd.f64(double %813, double %814, double %812)
  %816 = load ptr, ptr %7, align 8, !tbaa !5
  %817 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %816, i32 0, i32 2
  %818 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %817, i32 0, i32 4
  %819 = load ptr, ptr %818, align 8, !tbaa !25
  %820 = load i64, ptr %15, align 8, !tbaa !20
  %821 = load i64, ptr %17, align 8, !tbaa !20
  %822 = mul nsw i64 %820, %821
  %823 = load i64, ptr %12, align 8, !tbaa !20
  %824 = add nsw i64 %822, %823
  %825 = getelementptr inbounds double, ptr %819, i64 %824
  store double %815, ptr %825, align 8, !tbaa !23
  br label %826

826:                                              ; preds = %785
  %827 = load i64, ptr %12, align 8, !tbaa !20
  %828 = add nsw i64 %827, 1
  store i64 %828, ptr %12, align 8, !tbaa !20
  br label %780, !llvm.loop !52

829:                                              ; preds = %780
  %830 = load ptr, ptr %7, align 8, !tbaa !5
  %831 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %830, i32 0, i32 3
  %832 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %831, i32 0, i32 4
  %833 = load ptr, ptr %832, align 8, !tbaa !25
  %834 = load i64, ptr %15, align 8, !tbaa !20
  %835 = getelementptr inbounds double, ptr %833, i64 %834
  %836 = load double, ptr %835, align 8, !tbaa !23
  %837 = load double, ptr %19, align 8, !tbaa !23
  %838 = fadd double %836, %837
  %839 = load ptr, ptr %7, align 8, !tbaa !5
  %840 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %839, i32 0, i32 3
  %841 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %840, i32 0, i32 4
  %842 = load ptr, ptr %841, align 8, !tbaa !25
  %843 = load i64, ptr %15, align 8, !tbaa !20
  %844 = getelementptr inbounds double, ptr %842, i64 %843
  store double %838, ptr %844, align 8, !tbaa !23
  %845 = load double, ptr %25, align 8, !tbaa !23
  %846 = load double, ptr %26, align 8, !tbaa !23
  %847 = fmul double %845, %846
  store double %847, ptr %25, align 8, !tbaa !23
  %848 = load double, ptr %20, align 8, !tbaa !23
  %849 = load double, ptr %27, align 8, !tbaa !23
  %850 = fmul double %848, %849
  store double %850, ptr %20, align 8, !tbaa !23
  br label %851

851:                                              ; preds = %829
  %852 = load i64, ptr %15, align 8, !tbaa !20
  %853 = add nsw i64 %852, 1
  store i64 %853, ptr %15, align 8, !tbaa !20
  br label %745, !llvm.loop !53

854:                                              ; preds = %766, %745
  br label %855

855:                                              ; preds = %854, %743
  br label %856

856:                                              ; preds = %855, %657, %620
  %857 = load i64, ptr %11, align 8, !tbaa !20
  %858 = add nsw i64 %857, 1
  store i64 %858, ptr %11, align 8, !tbaa !20
  br label %564, !llvm.loop !54

859:                                              ; preds = %564
  %860 = load i8, ptr %29, align 1, !tbaa !43, !range !44, !noundef !45
  %861 = trunc i8 %860 to i1
  br i1 %861, label %862, label %887

862:                                              ; preds = %859
  %863 = load double, ptr %30, align 8, !tbaa !23
  %864 = load ptr, ptr %7, align 8, !tbaa !5
  %865 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %864, i32 0, i32 2
  %866 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %865, i32 0, i32 4
  %867 = load ptr, ptr %866, align 8, !tbaa !25
  %868 = getelementptr inbounds double, ptr %867, i64 0
  store double %863, ptr %868, align 8, !tbaa !23
  %869 = load double, ptr %31, align 8, !tbaa !23
  %870 = load ptr, ptr %7, align 8, !tbaa !5
  %871 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %870, i32 0, i32 3
  %872 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %871, i32 0, i32 4
  %873 = load ptr, ptr %872, align 8, !tbaa !25
  %874 = getelementptr inbounds double, ptr %873, i64 0
  store double %869, ptr %874, align 8, !tbaa !23
  %875 = load double, ptr %32, align 8, !tbaa !23
  %876 = load ptr, ptr %7, align 8, !tbaa !5
  %877 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %876, i32 0, i32 2
  %878 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %877, i32 0, i32 4
  %879 = load ptr, ptr %878, align 8, !tbaa !25
  %880 = getelementptr inbounds double, ptr %879, i64 1
  store double %875, ptr %880, align 8, !tbaa !23
  %881 = load double, ptr %33, align 8, !tbaa !23
  %882 = load ptr, ptr %7, align 8, !tbaa !5
  %883 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %882, i32 0, i32 3
  %884 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %883, i32 0, i32 4
  %885 = load ptr, ptr %884, align 8, !tbaa !25
  %886 = getelementptr inbounds double, ptr %885, i64 1
  store double %881, ptr %886, align 8, !tbaa !23
  br label %887

887:                                              ; preds = %862, %859
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %888

888:                                              ; preds = %906, %887
  %889 = load i64, ptr %12, align 8, !tbaa !20
  %890 = load i64, ptr %17, align 8, !tbaa !20
  %891 = sub nsw i64 %890, 1
  %892 = icmp sle i64 %889, %891
  br i1 %892, label %893, label %909

893:                                              ; preds = %888
  %894 = load ptr, ptr %6, align 8, !tbaa !5
  %895 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %894, i32 0, i32 2
  %896 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %895, i32 0, i32 4
  %897 = load ptr, ptr %896, align 8, !tbaa !25
  %898 = load i64, ptr %12, align 8, !tbaa !20
  %899 = getelementptr inbounds double, ptr %897, i64 %898
  %900 = load double, ptr %899, align 8, !tbaa !23
  %901 = load ptr, ptr %9, align 8, !tbaa !5
  %902 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %901, i32 0, i32 4
  %903 = load ptr, ptr %902, align 8, !tbaa !25
  %904 = load i64, ptr %12, align 8, !tbaa !20
  %905 = getelementptr inbounds double, ptr %903, i64 %904
  store double %900, ptr %905, align 8, !tbaa !23
  br label %906

906:                                              ; preds = %893
  %907 = load i64, ptr %12, align 8, !tbaa !20
  %908 = add nsw i64 %907, 1
  store i64 %908, ptr %12, align 8, !tbaa !20
  br label %888, !llvm.loop !55

909:                                              ; preds = %888
  store i64 0, ptr %15, align 8, !tbaa !20
  br label %910

910:                                              ; preds = %959, %909
  %911 = load i64, ptr %15, align 8, !tbaa !20
  %912 = load ptr, ptr %6, align 8, !tbaa !5
  %913 = getelementptr inbounds %"struct.alglib_impl::idwmodel", ptr %912, i32 0, i32 4
  %914 = load i64, ptr %913, align 8, !tbaa !24
  %915 = sub nsw i64 %914, 1
  %916 = icmp sle i64 %911, %915
  br i1 %916, label %917, label %962

917:                                              ; preds = %910
  store i64 0, ptr %12, align 8, !tbaa !20
  br label %918

918:                                              ; preds = %955, %917
  %919 = load i64, ptr %12, align 8, !tbaa !20
  %920 = load i64, ptr %17, align 8, !tbaa !20
  %921 = sub nsw i64 %920, 1
  %922 = icmp sle i64 %919, %921
  br i1 %922, label %923, label %958

923:                                              ; preds = %918
  %924 = load ptr, ptr %9, align 8, !tbaa !5
  %925 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %924, i32 0, i32 4
  %926 = load ptr, ptr %925, align 8, !tbaa !25
  %927 = load i64, ptr %12, align 8, !tbaa !20
  %928 = getelementptr inbounds double, ptr %926, i64 %927
  %929 = load double, ptr %928, align 8, !tbaa !23
  %930 = load ptr, ptr %7, align 8, !tbaa !5
  %931 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %930, i32 0, i32 2
  %932 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %931, i32 0, i32 4
  %933 = load ptr, ptr %932, align 8, !tbaa !25
  %934 = load i64, ptr %15, align 8, !tbaa !20
  %935 = load i64, ptr %17, align 8, !tbaa !20
  %936 = mul nsw i64 %934, %935
  %937 = load i64, ptr %12, align 8, !tbaa !20
  %938 = add nsw i64 %936, %937
  %939 = getelementptr inbounds double, ptr %933, i64 %938
  %940 = load double, ptr %939, align 8, !tbaa !23
  %941 = load ptr, ptr %7, align 8, !tbaa !5
  %942 = getelementptr inbounds %"struct.alglib_impl::idwcalcbuffer", ptr %941, i32 0, i32 3
  %943 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %942, i32 0, i32 4
  %944 = load ptr, ptr %943, align 8, !tbaa !25
  %945 = load i64, ptr %15, align 8, !tbaa !20
  %946 = getelementptr inbounds double, ptr %944, i64 %945
  %947 = load double, ptr %946, align 8, !tbaa !23
  %948 = fdiv double %940, %947
  %949 = fadd double %929, %948
  %950 = load ptr, ptr %9, align 8, !tbaa !5
  %951 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %950, i32 0, i32 4
  %952 = load ptr, ptr %951, align 8, !tbaa !25
  %953 = load i64, ptr %12, align 8, !tbaa !20
  %954 = getelementptr inbounds double, ptr %952, i64 %953
  store double %949, ptr %954, align 8, !tbaa !23
  br label %955

955:                                              ; preds = %923
  %956 = load i64, ptr %12, align 8, !tbaa !20
  %957 = add nsw i64 %956, 1
  store i64 %957, ptr %12, align 8, !tbaa !20
  br label %918, !llvm.loop !56

958:                                              ; preds = %918
  br label %959

959:                                              ; preds = %958
  %960 = load i64, ptr %15, align 8, !tbaa !20
  %961 = add nsw i64 %960, 1
  store i64 %961, ptr %15, align 8, !tbaa !20
  br label %910, !llvm.loop !57

962:                                              ; preds = %910
  store i32 1, ptr %34, align 4
  br label %965

963:                                              ; preds = %436
  %964 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.128, ptr noundef %964)
  store i32 0, ptr %34, align 4
  br label %965

965:                                              ; preds = %963, %962, %435, %267, %88
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 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
  %966 = load i32, ptr %34, align 4
  switch i32 %966, label %968 [
    i32 0, label %967
    i32 1, label %967
  ]

967:                                              ; preds = %965, %965
  ret void

968:                                              ; preds = %965
  unreachable
}

declare noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPNS_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

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

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

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

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

declare noundef i64 @_ZN11alglib_impl17kdtreetsqueryrnnuEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEdbPNS_8ae_stateE(ptr noundef, ptr noundef, ptr noundef, double noundef, i1 noundef zeroext, 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 0}
!10 = !{!"_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, !16, i64 144, !11, i64 1144, !12, i64 1152, !19, i64 1216}
!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_impl6kdtreeE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !17, i64 32, !12, i64 112, !12, i64 176, !12, i64 240, !12, i64 304, !12, i64 368, !18, i64 432, !11, i64 992}
!17 = !{!"_ZTSN11alglib_impl9ae_matrixE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !13, i64 32, !14, i64 40, !7, i64 72}
!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 = !{!"_ZTSN11alglib_impl13idwcalcbufferE", !12, i64 0, !12, i64 64, !12, i64 128, !12, i64 192, !17, i64 256, !12, i64 336, !18, i64 400}
!20 = !{!11, !11, i64 0}
!21 = !{!10, !11, i64 8}
!22 = !{!12, !11, i64 0}
!23 = !{!15, !15, i64 0}
!24 = !{!10, !11, i64 88}
!25 = !{!7, !7, i64 0}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = !{!10, !11, i64 80}
!29 = !{!10, !11, i64 1144}
!30 = !{!10, !15, i64 136}
!31 = distinct !{!31, !27}
!32 = distinct !{!32, !27}
!33 = distinct !{!33, !27}
!34 = distinct !{!34, !27}
!35 = distinct !{!35, !27}
!36 = !{!10, !15, i64 96}
!37 = distinct !{!37, !27}
!38 = distinct !{!38, !27}
!39 = distinct !{!39, !27}
!40 = distinct !{!40, !27}
!41 = !{!10, !15, i64 104}
!42 = !{!10, !15, i64 128}
!43 = !{!13, !13, i64 0}
!44 = !{i8 0, i8 2}
!45 = !{}
!46 = distinct !{!46, !27}
!47 = distinct !{!47, !27}
!48 = distinct !{!48, !27}
!49 = !{!10, !15, i64 112}
!50 = !{!10, !15, i64 120}
!51 = distinct !{!51, !27}
!52 = distinct !{!52, !27}
!53 = distinct !{!53, !27}
!54 = distinct !{!54, !27}
!55 = distinct !{!55, !27}
!56 = distinct !{!56, !27}
!57 = distinct !{!57, !27}


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

@.str.124 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.126 = external hidden unnamed_addr constant [37 x i8], align 1
@_ZN11alglib_implL6idw_w0E = external hidden local_unnamed_addr global double, align 8
@.str.127 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.128 = external hidden unnamed_addr constant [34 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
define dso_local void @_ZN11alglib_impl12idwtscalcbufEPNS_8idwmodelEPNS_13idwcalcbufferEPNS_9ae_vectorES5_PNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #1 {
  %6 = load i64, ptr %0, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 8
  %8 = load i64, ptr %7, align 8, !tbaa !19
  %.fr = freeze i64 %8
  %9 = load i64, ptr %2, align 8, !tbaa !20
  %10 = icmp sge i64 %9, %6
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %10, ptr noundef nonnull @.str.124, ptr noundef %4)
  %11 = tail call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %2, i64 noundef %6, ptr noundef %4)
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %11, ptr noundef nonnull @.str.125, ptr noundef %4)
  %12 = load i64, ptr %3, align 8, !tbaa !20
  %13 = icmp slt i64 %12, %.fr
  br i1 %13, label %14, label %15

14:                                               ; preds = %5
  tail call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %3, i64 noundef %.fr, ptr noundef %4)
  br label %15

15:                                               ; preds = %14, %5
  %16 = getelementptr inbounds i8, ptr %0, i64 88
  %17 = load i64, ptr %16, align 8, !tbaa !21
  %18 = icmp eq i64 %17, 0
  br i1 %18, label %.preheader, label %48

.preheader:                                       ; preds = %15
  %.not.not387491 = icmp sgt i64 %.fr, 0
  br i1 %.not.not387491, label %.lr.ph493, label %.loopexit

.lr.ph493:                                        ; preds = %.preheader
  %19 = getelementptr inbounds i8, ptr %0, i64 72
  %20 = getelementptr inbounds i8, ptr %3, i64 56
  %21 = add nsw i64 %.fr, -1
  %xtraiter613 = and i64 %.fr, 3
  %22 = icmp ult i64 %21, 3
  br i1 %22, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph493.new

.lr.ph493.new:                                    ; preds = %.lr.ph493
  %unroll_iter616 = and i64 %.fr, 9223372036854775804
  br label %23

23:                                               ; preds = %23, %.lr.ph493.new
  %.0346492 = phi i64 [ 0, %.lr.ph493.new ], [ %47, %23 ]
  %niter617 = phi i64 [ 0, %.lr.ph493.new ], [ %niter617.next.3, %23 ]
  %24 = load ptr, ptr %19, align 8, !tbaa !22
  %25 = getelementptr inbounds double, ptr %24, i64 %.0346492
  %26 = load double, ptr %25, align 8, !tbaa !23
  %27 = load ptr, ptr %20, align 8, !tbaa !22
  %28 = getelementptr inbounds double, ptr %27, i64 %.0346492
  store double %26, ptr %28, align 8, !tbaa !23
  %29 = or disjoint i64 %.0346492, 1
  %30 = load ptr, ptr %19, align 8, !tbaa !22
  %31 = getelementptr inbounds double, ptr %30, i64 %29
  %32 = load double, ptr %31, align 8, !tbaa !23
  %33 = load ptr, ptr %20, align 8, !tbaa !22
  %34 = getelementptr inbounds double, ptr %33, i64 %29
  store double %32, ptr %34, align 8, !tbaa !23
  %35 = or disjoint i64 %.0346492, 2
  %36 = load ptr, ptr %19, align 8, !tbaa !22
  %37 = getelementptr inbounds double, ptr %36, i64 %35
  %38 = load double, ptr %37, align 8, !tbaa !23
  %39 = load ptr, ptr %20, align 8, !tbaa !22
  %40 = getelementptr inbounds double, ptr %39, i64 %35
  store double %38, ptr %40, align 8, !tbaa !23
  %41 = or disjoint i64 %.0346492, 3
  %42 = load ptr, ptr %19, align 8, !tbaa !22
  %43 = getelementptr inbounds double, ptr %42, i64 %41
  %44 = load double, ptr %43, align 8, !tbaa !23
  %45 = load ptr, ptr %20, align 8, !tbaa !22
  %46 = getelementptr inbounds double, ptr %45, i64 %41
  store double %44, ptr %46, align 8, !tbaa !23
  %47 = add nuw nsw i64 %.0346492, 4
  %niter617.next.3 = add i64 %niter617, 4
  %niter617.ncmp.3 = icmp eq i64 %niter617.next.3, %unroll_iter616
  br i1 %niter617.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %23, !llvm.loop !24

48:                                               ; preds = %15
  %49 = getelementptr inbounds i8, ptr %0, i64 80
  %50 = load i64, ptr %49, align 8, !tbaa !26
  switch i64 %50, label %576 [
    i64 0, label %51
    i64 1, label %170
    i64 2, label %253
  ]

51:                                               ; preds = %48
  %52 = getelementptr inbounds i8, ptr %0, i64 1144
  %53 = load i64, ptr %52, align 8, !tbaa !27
  %54 = icmp sgt i64 %53, 0
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %54, ptr noundef nonnull @.str.126, ptr noundef %4)
  %55 = add nsw i64 %.fr, %6
  %56 = getelementptr inbounds i8, ptr %0, i64 136
  %57 = load double, ptr %56, align 8, !tbaa !28
  %.not.not382471 = icmp sgt i64 %.fr, 0
  br i1 %.not.not382471, label %.lr.ph474, label %.preheader391

.lr.ph474:                                        ; preds = %51
  %58 = getelementptr inbounds i8, ptr %3, i64 56
  %59 = getelementptr inbounds i8, ptr %1, i64 184
  %xtraiter594 = and i64 %.fr, 1
  %60 = icmp eq i64 %.fr, 1
  br i1 %60, label %.preheader391.loopexit.unr-lcssa, label %.lr.ph474.new

.lr.ph474.new:                                    ; preds = %.lr.ph474
  %unroll_iter597 = and i64 %.fr, 9223372036854775806
  br label %71

.preheader391.loopexit.unr-lcssa:                 ; preds = %71, %.lr.ph474
  %.1347472.unr = phi i64 [ 0, %.lr.ph474 ], [ %81, %71 ]
  %lcmp.mod596.not = icmp eq i64 %xtraiter594, 0
  br i1 %lcmp.mod596.not, label %.preheader391, label %.preheader391.loopexit.epilog-lcssa

.preheader391.loopexit.epilog-lcssa:              ; preds = %.preheader391.loopexit.unr-lcssa
  %61 = load ptr, ptr %58, align 8, !tbaa !22
  %62 = getelementptr inbounds double, ptr %61, i64 %.1347472.unr
  store double 0.000000e+00, ptr %62, align 8, !tbaa !23
  %63 = load ptr, ptr %59, align 8, !tbaa !22
  %64 = getelementptr inbounds double, ptr %63, i64 %.1347472.unr
  store double 1.000000e-50, ptr %64, align 8, !tbaa !23
  br label %.preheader391

.preheader391:                                    ; preds = %.preheader391.loopexit.epilog-lcssa, %.preheader391.loopexit.unr-lcssa, %51
  br i1 %54, label %.preheader390.lr.ph, label %.preheader388

.preheader390.lr.ph:                              ; preds = %.preheader391
  %.not.not385475 = icmp sgt i64 %6, 0
  %65 = getelementptr inbounds i8, ptr %0, i64 1208
  %66 = getelementptr inbounds i8, ptr %2, i64 56
  %67 = fmul double %57, 5.000000e-01
  %68 = getelementptr inbounds i8, ptr %3, i64 56
  %69 = getelementptr inbounds i8, ptr %1, i64 184
  %xtraiter600 = and i64 %6, 3
  %70 = icmp ult i64 %6, 4
  %unroll_iter604 = and i64 %6, 9223372036854775804
  %lcmp.mod602.not = icmp eq i64 %xtraiter600, 0
  br label %.preheader390

71:                                               ; preds = %71, %.lr.ph474.new
  %.1347472 = phi i64 [ 0, %.lr.ph474.new ], [ %81, %71 ]
  %niter598 = phi i64 [ 0, %.lr.ph474.new ], [ %niter598.next.1, %71 ]
  %72 = load ptr, ptr %58, align 8, !tbaa !22
  %73 = getelementptr inbounds double, ptr %72, i64 %.1347472
  store double 0.000000e+00, ptr %73, align 8, !tbaa !23
  %74 = load ptr, ptr %59, align 8, !tbaa !22
  %75 = getelementptr inbounds double, ptr %74, i64 %.1347472
  store double 1.000000e-50, ptr %75, align 8, !tbaa !23
  %76 = or disjoint i64 %.1347472, 1
  %77 = load ptr, ptr %58, align 8, !tbaa !22
  %78 = getelementptr inbounds double, ptr %77, i64 %76
  store double 0.000000e+00, ptr %78, align 8, !tbaa !23
  %79 = load ptr, ptr %59, align 8, !tbaa !22
  %80 = getelementptr inbounds double, ptr %79, i64 %76
  store double 1.000000e-50, ptr %80, align 8, !tbaa !23
  %81 = add nuw nsw i64 %.1347472, 2
  %niter598.next.1 = add i64 %niter598, 2
  %niter598.ncmp.1 = icmp eq i64 %niter598.next.1, %unroll_iter597
  br i1 %niter598.ncmp.1, label %.preheader391.loopexit.unr-lcssa, label %71, !llvm.loop !29

.preheader390:                                    ; preds = %.preheader390.lr.ph, %._crit_edge485
  %.0343487 = phi i64 [ 0, %.preheader390.lr.ph ], [ %144, %._crit_edge485 ]
  br i1 %.not.not385475, label %.lr.ph478, label %._crit_edge479

.lr.ph478:                                        ; preds = %.preheader390
  %82 = load ptr, ptr %65, align 8, !tbaa !22
  %83 = mul nsw i64 %.0343487, %55
  %84 = getelementptr double, ptr %82, i64 %83
  %85 = load ptr, ptr %66, align 8, !tbaa !22
  br i1 %70, label %._crit_edge479.loopexit.unr-lcssa, label %.lr.ph478.new

.preheader388:                                    ; preds = %._crit_edge485, %.preheader391
  br i1 %.not.not382471, label %.lr.ph490, label %.loopexit

.lr.ph490:                                        ; preds = %.preheader388
  %86 = getelementptr inbounds i8, ptr %3, i64 56
  %87 = getelementptr inbounds i8, ptr %1, i64 184
  %88 = getelementptr inbounds i8, ptr %0, i64 72
  %xtraiter607 = and i64 %.fr, 1
  %89 = icmp eq i64 %.fr, 1
  br i1 %89, label %.loopexit.loopexit543.unr-lcssa, label %.lr.ph490.new

.lr.ph490.new:                                    ; preds = %.lr.ph490
  %unroll_iter610 = and i64 %.fr, 9223372036854775806
  br label %145

.lr.ph478.new:                                    ; preds = %.lr.ph478, %.lr.ph478.new
  %.2348477 = phi i64 [ %117, %.lr.ph478.new ], [ 0, %.lr.ph478 ]
  %.0356476 = phi double [ %116, %.lr.ph478.new ], [ 0.000000e+00, %.lr.ph478 ]
  %niter605 = phi i64 [ %niter605.next.3, %.lr.ph478.new ], [ 0, %.lr.ph478 ]
  %90 = getelementptr double, ptr %84, i64 %.2348477
  %91 = load double, ptr %90, align 8, !tbaa !23
  %92 = getelementptr inbounds double, ptr %85, i64 %.2348477
  %93 = load double, ptr %92, align 8, !tbaa !23
  %94 = fsub double %91, %93
  %95 = tail call double @llvm.fmuladd.f64(double %94, double %94, double %.0356476)
  %96 = or disjoint i64 %.2348477, 1
  %97 = getelementptr double, ptr %84, i64 %96
  %98 = load double, ptr %97, align 8, !tbaa !23
  %99 = getelementptr inbounds double, ptr %85, i64 %96
  %100 = load double, ptr %99, align 8, !tbaa !23
  %101 = fsub double %98, %100
  %102 = tail call double @llvm.fmuladd.f64(double %101, double %101, double %95)
  %103 = or disjoint i64 %.2348477, 2
  %104 = getelementptr double, ptr %84, i64 %103
  %105 = load double, ptr %104, align 8, !tbaa !23
  %106 = getelementptr inbounds double, ptr %85, i64 %103
  %107 = load double, ptr %106, align 8, !tbaa !23
  %108 = fsub double %105, %107
  %109 = tail call double @llvm.fmuladd.f64(double %108, double %108, double %102)
  %110 = or disjoint i64 %.2348477, 3
  %111 = getelementptr double, ptr %84, i64 %110
  %112 = load double, ptr %111, align 8, !tbaa !23
  %113 = getelementptr inbounds double, ptr %85, i64 %110
  %114 = load double, ptr %113, align 8, !tbaa !23
  %115 = fsub double %112, %114
  %116 = tail call double @llvm.fmuladd.f64(double %115, double %115, double %109)
  %117 = add nuw nsw i64 %.2348477, 4
  %niter605.next.3 = add i64 %niter605, 4
  %niter605.ncmp.3 = icmp eq i64 %niter605.next.3, %unroll_iter604
  br i1 %niter605.ncmp.3, label %._crit_edge479.loopexit.unr-lcssa, label %.lr.ph478.new, !llvm.loop !30

._crit_edge479.loopexit.unr-lcssa:                ; preds = %.lr.ph478.new, %.lr.ph478
  %.lcssa.ph = phi double [ poison, %.lr.ph478 ], [ %116, %.lr.ph478.new ]
  %.2348477.unr = phi i64 [ 0, %.lr.ph478 ], [ %117, %.lr.ph478.new ]
  %.0356476.unr = phi double [ 0.000000e+00, %.lr.ph478 ], [ %116, %.lr.ph478.new ]
  br i1 %lcmp.mod602.not, label %._crit_edge479, label %.epil.preheader599

.epil.preheader599:                               ; preds = %._crit_edge479.loopexit.unr-lcssa, %.epil.preheader599
  %.2348477.epil = phi i64 [ %124, %.epil.preheader599 ], [ %.2348477.unr, %._crit_edge479.loopexit.unr-lcssa ]
  %.0356476.epil = phi double [ %123, %.epil.preheader599 ], [ %.0356476.unr, %._crit_edge479.loopexit.unr-lcssa ]
  %epil.iter601 = phi i64 [ %epil.iter601.next, %.epil.preheader599 ], [ 0, %._crit_edge479.loopexit.unr-lcssa ]
  %118 = getelementptr double, ptr %84, i64 %.2348477.epil
  %119 = load double, ptr %118, align 8, !tbaa !23
  %120 = getelementptr inbounds double, ptr %85, i64 %.2348477.epil
  %121 = load double, ptr %120, align 8, !tbaa !23
  %122 = fsub double %119, %121
  %123 = tail call double @llvm.fmuladd.f64(double %122, double %122, double %.0356476.epil)
  %124 = add nuw nsw i64 %.2348477.epil, 1
  %epil.iter601.next = add i64 %epil.iter601, 1
  %epil.iter601.cmp.not = icmp eq i64 %epil.iter601.next, %xtraiter600
  br i1 %epil.iter601.cmp.not, label %._crit_edge479, label %.epil.preheader599, !llvm.loop !31

._crit_edge479:                                   ; preds = %._crit_edge479.loopexit.unr-lcssa, %.epil.preheader599, %.preheader390
  %.0356.lcssa = phi double [ 0.000000e+00, %.preheader390 ], [ %.lcssa.ph, %._crit_edge479.loopexit.unr-lcssa ], [ %123, %.epil.preheader599 ]
  %125 = tail call noundef double @_ZN11alglib_impl6ae_powEddPNS_8ae_stateE(double noundef %.0356.lcssa, double noundef %67, ptr noundef %4)
  %126 = fadd double %125, 1.000000e-50
  %127 = fdiv double 1.000000e+00, %126
  br i1 %.not.not382471, label %.lr.ph484, label %._crit_edge485

.lr.ph484:                                        ; preds = %._crit_edge479
  %128 = mul nsw i64 %.0343487, %55
  br label %129

129:                                              ; preds = %.lr.ph484, %129
  %.3482 = phi i64 [ 0, %.lr.ph484 ], [ %143, %129 ]
  %130 = load ptr, ptr %68, align 8, !tbaa !22
  %131 = getelementptr inbounds double, ptr %130, i64 %.3482
  %132 = load double, ptr %131, align 8, !tbaa !23
  %133 = load ptr, ptr %65, align 8, !tbaa !22
  %134 = getelementptr double, ptr %133, i64 %128
  %135 = getelementptr double, ptr %134, i64 %6
  %136 = getelementptr double, ptr %135, i64 %.3482
  %137 = load double, ptr %136, align 8, !tbaa !23
  %138 = tail call double @llvm.fmuladd.f64(double %127, double %137, double %132)
  store double %138, ptr %131, align 8, !tbaa !23
  %139 = load ptr, ptr %69, align 8, !tbaa !22
  %140 = getelementptr inbounds double, ptr %139, i64 %.3482
  %141 = load double, ptr %140, align 8, !tbaa !23
  %142 = fadd double %127, %141
  store double %142, ptr %140, align 8, !tbaa !23
  %143 = add nuw nsw i64 %.3482, 1
  %exitcond519.not = icmp eq i64 %143, %.fr
  br i1 %exitcond519.not, label %._crit_edge485, label %129, !llvm.loop !33

._crit_edge485:                                   ; preds = %129, %._crit_edge479
  %144 = add nuw nsw i64 %.0343487, 1
  %exitcond520.not = icmp eq i64 %144, %53
  br i1 %exitcond520.not, label %.preheader388, label %.preheader390, !llvm.loop !34

145:                                              ; preds = %145, %.lr.ph490.new
  %.4489 = phi i64 [ 0, %.lr.ph490.new ], [ %169, %145 ]
  %niter611 = phi i64 [ 0, %.lr.ph490.new ], [ %niter611.next.1, %145 ]
  %146 = load ptr, ptr %86, align 8, !tbaa !22
  %147 = getelementptr inbounds double, ptr %146, i64 %.4489
  %148 = load double, ptr %147, align 8, !tbaa !23
  %149 = load ptr, ptr %87, align 8, !tbaa !22
  %150 = getelementptr inbounds double, ptr %149, i64 %.4489
  %151 = load double, ptr %150, align 8, !tbaa !23
  %152 = fdiv double %148, %151
  %153 = load ptr, ptr %88, align 8, !tbaa !22
  %154 = getelementptr inbounds double, ptr %153, i64 %.4489
  %155 = load double, ptr %154, align 8, !tbaa !23
  %156 = fadd double %152, %155
  store double %156, ptr %147, align 8, !tbaa !23
  %157 = or disjoint i64 %.4489, 1
  %158 = load ptr, ptr %86, align 8, !tbaa !22
  %159 = getelementptr inbounds double, ptr %158, i64 %157
  %160 = load double, ptr %159, align 8, !tbaa !23
  %161 = load ptr, ptr %87, align 8, !tbaa !22
  %162 = getelementptr inbounds double, ptr %161, i64 %157
  %163 = load double, ptr %162, align 8, !tbaa !23
  %164 = fdiv double %160, %163
  %165 = load ptr, ptr %88, align 8, !tbaa !22
  %166 = getelementptr inbounds double, ptr %165, i64 %157
  %167 = load double, ptr %166, align 8, !tbaa !23
  %168 = fadd double %164, %167
  store double %168, ptr %159, align 8, !tbaa !23
  %169 = add nuw nsw i64 %.4489, 2
  %niter611.next.1 = add i64 %niter611, 2
  %niter611.ncmp.1 = icmp eq i64 %niter611.next.1, %unroll_iter610
  br i1 %niter611.ncmp.1, label %.loopexit.loopexit543.unr-lcssa, label %145, !llvm.loop !35

170:                                              ; preds = %48
  %171 = getelementptr inbounds i8, ptr %0, i64 96
  %172 = load double, ptr %171, align 8, !tbaa !36
  %.not.not378454 = icmp sgt i64 %.fr, 0
  br i1 %.not.not378454, label %.lr.ph457, label %._crit_edge458

.lr.ph457:                                        ; preds = %170
  %173 = getelementptr inbounds i8, ptr %3, i64 56
  %174 = getelementptr inbounds i8, ptr %1, i64 184
  %xtraiter582 = and i64 %.fr, 1
  %175 = icmp eq i64 %.fr, 1
  br i1 %175, label %._crit_edge458.loopexit.unr-lcssa, label %.lr.ph457.new

.lr.ph457.new:                                    ; preds = %.lr.ph457
  %unroll_iter585 = and i64 %.fr, 9223372036854775806
  br label %176

176:                                              ; preds = %176, %.lr.ph457.new
  %.5455 = phi i64 [ 0, %.lr.ph457.new ], [ %186, %176 ]
  %niter586 = phi i64 [ 0, %.lr.ph457.new ], [ %niter586.next.1, %176 ]
  %177 = load ptr, ptr %173, align 8, !tbaa !22
  %178 = getelementptr inbounds double, ptr %177, i64 %.5455
  store double 0.000000e+00, ptr %178, align 8, !tbaa !23
  %179 = load ptr, ptr %174, align 8, !tbaa !22
  %180 = getelementptr inbounds double, ptr %179, i64 %.5455
  store double 1.000000e-50, ptr %180, align 8, !tbaa !23
  %181 = or disjoint i64 %.5455, 1
  %182 = load ptr, ptr %173, align 8, !tbaa !22
  %183 = getelementptr inbounds double, ptr %182, i64 %181
  store double 0.000000e+00, ptr %183, align 8, !tbaa !23
  %184 = load ptr, ptr %174, align 8, !tbaa !22
  %185 = getelementptr inbounds double, ptr %184, i64 %181
  store double 1.000000e-50, ptr %185, align 8, !tbaa !23
  %186 = add nuw nsw i64 %.5455, 2
  %niter586.next.1 = add i64 %niter586, 2
  %niter586.ncmp.1 = icmp eq i64 %niter586.next.1, %unroll_iter585
  br i1 %niter586.ncmp.1, label %._crit_edge458.loopexit.unr-lcssa, label %176, !llvm.loop !37

._crit_edge458.loopexit.unr-lcssa:                ; preds = %176, %.lr.ph457
  %.5455.unr = phi i64 [ 0, %.lr.ph457 ], [ %186, %176 ]
  %lcmp.mod584.not = icmp eq i64 %xtraiter582, 0
  br i1 %lcmp.mod584.not, label %._crit_edge458, label %._crit_edge458.loopexit.epilog-lcssa

._crit_edge458.loopexit.epilog-lcssa:             ; preds = %._crit_edge458.loopexit.unr-lcssa
  %187 = load ptr, ptr %173, align 8, !tbaa !22
  %188 = getelementptr inbounds double, ptr %187, i64 %.5455.unr
  store double 0.000000e+00, ptr %188, align 8, !tbaa !23
  %189 = load ptr, ptr %174, align 8, !tbaa !22
  %190 = getelementptr inbounds double, ptr %189, i64 %.5455.unr
  store double 1.000000e-50, ptr %190, align 8, !tbaa !23
  br label %._crit_edge458

._crit_edge458:                                   ; preds = %._crit_edge458.loopexit.epilog-lcssa, %._crit_edge458.loopexit.unr-lcssa, %170
  %191 = getelementptr inbounds i8, ptr %0, i64 144
  %192 = getelementptr inbounds i8, ptr %1, i64 400
  %193 = tail call noundef i64 @_ZN11alglib_impl16kdtreetsqueryrnnEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEdbPNS_8ae_stateE(ptr noundef nonnull %191, ptr noundef nonnull %192, ptr noundef nonnull %2, double noundef %172, i1 noundef zeroext true, ptr noundef %4)
  %194 = getelementptr inbounds i8, ptr %1, i64 256
  tail call void @_ZN11alglib_impl22kdtreetsqueryresultsxyEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_matrixEPNS_8ae_stateE(ptr noundef nonnull %191, ptr noundef nonnull %192, ptr noundef nonnull %194, ptr noundef %4)
  %195 = getelementptr inbounds i8, ptr %1, i64 336
  tail call void @_ZN11alglib_impl29kdtreetsqueryresultsdistancesEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %191, ptr noundef nonnull %192, ptr noundef nonnull %195, ptr noundef %4)
  %.not.not379464 = icmp sgt i64 %193, 0
  br i1 %.not.not379464, label %.lr.ph467, label %.preheader392

.lr.ph467:                                        ; preds = %._crit_edge458
  %196 = getelementptr inbounds i8, ptr %1, i64 392
  %197 = getelementptr inbounds i8, ptr %3, i64 56
  %198 = getelementptr inbounds i8, ptr %1, i64 328
  %199 = getelementptr inbounds i8, ptr %1, i64 184
  br label %204

.preheader392:                                    ; preds = %._crit_edge463, %._crit_edge458
  br i1 %.not.not378454, label %.lr.ph470, label %.loopexit

.lr.ph470:                                        ; preds = %.preheader392
  %200 = getelementptr inbounds i8, ptr %3, i64 56
  %201 = getelementptr inbounds i8, ptr %1, i64 184
  %202 = getelementptr inbounds i8, ptr %0, i64 72
  %xtraiter588 = and i64 %.fr, 1
  %203 = icmp eq i64 %.fr, 1
  br i1 %203, label %.loopexit.loopexit544.unr-lcssa, label %.lr.ph470.new

.lr.ph470.new:                                    ; preds = %.lr.ph470
  %unroll_iter591 = and i64 %.fr, 9223372036854775806
  br label %228

204:                                              ; preds = %.lr.ph467, %._crit_edge463
  %.1344465 = phi i64 [ 0, %.lr.ph467 ], [ %227, %._crit_edge463 ]
  %205 = load ptr, ptr %196, align 8, !tbaa !22
  %206 = getelementptr inbounds double, ptr %205, i64 %.1344465
  %207 = load double, ptr %206, align 8, !tbaa !23
  %208 = fsub double %172, %207
  %209 = tail call double @llvm.fmuladd.f64(double %172, double %207, double 1.000000e-50)
  %210 = fdiv double %208, %209
  %211 = fmul double %210, %210
  br i1 %.not.not378454, label %.lr.ph462, label %._crit_edge463

.lr.ph462:                                        ; preds = %204, %.lr.ph462
  %.6460 = phi i64 [ %226, %.lr.ph462 ], [ 0, %204 ]
  %212 = load ptr, ptr %197, align 8, !tbaa !22
  %213 = getelementptr inbounds double, ptr %212, i64 %.6460
  %214 = load double, ptr %213, align 8, !tbaa !23
  %215 = load ptr, ptr %198, align 8, !tbaa !22
  %216 = getelementptr inbounds ptr, ptr %215, i64 %.1344465
  %217 = load ptr, ptr %216, align 8, !tbaa !38
  %218 = getelementptr double, ptr %217, i64 %6
  %219 = getelementptr double, ptr %218, i64 %.6460
  %220 = load double, ptr %219, align 8, !tbaa !23
  %221 = tail call double @llvm.fmuladd.f64(double %211, double %220, double %214)
  store double %221, ptr %213, align 8, !tbaa !23
  %222 = load ptr, ptr %199, align 8, !tbaa !22
  %223 = getelementptr inbounds double, ptr %222, i64 %.6460
  %224 = load double, ptr %223, align 8, !tbaa !23
  %225 = fadd double %211, %224
  store double %225, ptr %223, align 8, !tbaa !23
  %226 = add nuw nsw i64 %.6460, 1
  %exitcond514.not = icmp eq i64 %226, %.fr
  br i1 %exitcond514.not, label %._crit_edge463, label %.lr.ph462, !llvm.loop !39

._crit_edge463:                                   ; preds = %.lr.ph462, %204
  %227 = add nuw nsw i64 %.1344465, 1
  %exitcond515.not = icmp eq i64 %227, %193
  br i1 %exitcond515.not, label %.preheader392, label %204, !llvm.loop !40

228:                                              ; preds = %228, %.lr.ph470.new
  %.7469 = phi i64 [ 0, %.lr.ph470.new ], [ %252, %228 ]
  %niter592 = phi i64 [ 0, %.lr.ph470.new ], [ %niter592.next.1, %228 ]
  %229 = load ptr, ptr %200, align 8, !tbaa !22
  %230 = getelementptr inbounds double, ptr %229, i64 %.7469
  %231 = load double, ptr %230, align 8, !tbaa !23
  %232 = load ptr, ptr %201, align 8, !tbaa !22
  %233 = getelementptr inbounds double, ptr %232, i64 %.7469
  %234 = load double, ptr %233, align 8, !tbaa !23
  %235 = fdiv double %231, %234
  %236 = load ptr, ptr %202, align 8, !tbaa !22
  %237 = getelementptr inbounds double, ptr %236, i64 %.7469
  %238 = load double, ptr %237, align 8, !tbaa !23
  %239 = fadd double %235, %238
  store double %239, ptr %230, align 8, !tbaa !23
  %240 = or disjoint i64 %.7469, 1
  %241 = load ptr, ptr %200, align 8, !tbaa !22
  %242 = getelementptr inbounds double, ptr %241, i64 %240
  %243 = load double, ptr %242, align 8, !tbaa !23
  %244 = load ptr, ptr %201, align 8, !tbaa !22
  %245 = getelementptr inbounds double, ptr %244, i64 %240
  %246 = load double, ptr %245, align 8, !tbaa !23
  %247 = fdiv double %243, %246
  %248 = load ptr, ptr %202, align 8, !tbaa !22
  %249 = getelementptr inbounds double, ptr %248, i64 %240
  %250 = load double, ptr %249, align 8, !tbaa !23
  %251 = fadd double %247, %250
  store double %251, ptr %242, align 8, !tbaa !23
  %252 = add nuw nsw i64 %.7469, 2
  %niter592.next.1 = add i64 %niter592, 2
  %niter592.ncmp.1 = icmp eq i64 %niter592.next.1, %unroll_iter591
  br i1 %niter592.ncmp.1, label %.loopexit.loopexit544.unr-lcssa, label %228, !llvm.loop !41

253:                                              ; preds = %48
  %254 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %255 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %254, double noundef 1.000000e+00)
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %255, ptr noundef nonnull @.str.127, ptr noundef %4)
  %256 = getelementptr inbounds i8, ptr %0, i64 104
  %257 = load double, ptr %256, align 8, !tbaa !42
  %258 = fdiv double 1.000000e+00, %257
  %259 = getelementptr inbounds i8, ptr %0, i64 96
  %260 = load double, ptr %259, align 8, !tbaa !36
  %261 = fdiv double 1.000000e+00, %260
  %262 = getelementptr inbounds i8, ptr %0, i64 128
  %263 = load double, ptr %262, align 8, !tbaa !43
  %264 = icmp eq i64 %.fr, 1
  %.pre = load i64, ptr %16, align 8, !tbaa !21
  %265 = icmp sgt i64 %.pre, 2
  %or.cond534 = select i1 %264, i1 %265, i1 false
  br i1 %or.cond534, label %266, label %.preheader404

266:                                              ; preds = %253
  %267 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %263, double noundef 1.000000e+00)
  %.pre523 = load i64, ptr %16, align 8, !tbaa !21
  br i1 %267, label %272, label %.preheader404

.preheader404:                                    ; preds = %253, %266
  %268 = phi i64 [ %.pre, %253 ], [ %.pre523, %266 ]
  %269 = mul nsw i64 %268, %.fr
  %.not.not405 = icmp sgt i64 %269, 0
  br i1 %.not.not405, label %.lr.ph, label %.preheader402

.lr.ph:                                           ; preds = %.preheader404
  %270 = getelementptr inbounds i8, ptr %1, i64 184
  %xtraiter = and i64 %269, 3
  %271 = icmp ult i64 %269, 4
  br i1 %271, label %.preheader402.loopexit.unr-lcssa, label %.lr.ph.new

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

272:                                              ; preds = %266
  %273 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %.not.not370410 = icmp sgt i64 %.pre523, 0
  br i1 %.not.not370410, label %.lr.ph412, label %.loopexit401

.lr.ph412:                                        ; preds = %272
  %274 = getelementptr inbounds i8, ptr %1, i64 184
  %275 = getelementptr inbounds i8, ptr %1, i64 248
  %xtraiter558 = and i64 %.pre523, 1
  %276 = icmp eq i64 %.pre523, 1
  br i1 %276, label %.loopexit401.loopexit.unr-lcssa, label %.lr.ph412.new

.lr.ph412.new:                                    ; preds = %.lr.ph412
  %unroll_iter561 = and i64 %.pre523, 9223372036854775806
  br label %277

277:                                              ; preds = %277, %.lr.ph412.new
  %.8411 = phi i64 [ 0, %.lr.ph412.new ], [ %289, %277 ]
  %niter562 = phi i64 [ 0, %.lr.ph412.new ], [ %niter562.next.1, %277 ]
  %278 = load ptr, ptr %274, align 8, !tbaa !22
  %279 = getelementptr inbounds double, ptr %278, i64 %.8411
  store double 0.000000e+00, ptr %279, align 8, !tbaa !23
  %280 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %281 = load ptr, ptr %275, align 8, !tbaa !22
  %282 = getelementptr inbounds double, ptr %281, i64 %.8411
  store double %280, ptr %282, align 8, !tbaa !23
  %283 = or disjoint i64 %.8411, 1
  %284 = load ptr, ptr %274, align 8, !tbaa !22
  %285 = getelementptr inbounds double, ptr %284, i64 %283
  store double 0.000000e+00, ptr %285, align 8, !tbaa !23
  %286 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %287 = load ptr, ptr %275, align 8, !tbaa !22
  %288 = getelementptr inbounds double, ptr %287, i64 %283
  store double %286, ptr %288, align 8, !tbaa !23
  %289 = add nuw nsw i64 %.8411, 2
  %niter562.next.1 = add i64 %niter562, 2
  %niter562.ncmp.1 = icmp eq i64 %niter562.next.1, %unroll_iter561
  br i1 %niter562.ncmp.1, label %.loopexit401.loopexit.unr-lcssa, label %277, !llvm.loop !44

.preheader402.loopexit.unr-lcssa:                 ; preds = %295, %.lr.ph
  %.9406.unr = phi i64 [ 0, %.lr.ph ], [ %307, %295 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader402, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader402.loopexit.unr-lcssa, %.epil.preheader
  %.9406.epil = phi i64 [ %292, %.epil.preheader ], [ %.9406.unr, %.preheader402.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader402.loopexit.unr-lcssa ]
  %290 = load ptr, ptr %270, align 8, !tbaa !22
  %291 = getelementptr inbounds double, ptr %290, i64 %.9406.epil
  store double 0.000000e+00, ptr %291, align 8, !tbaa !23
  %292 = add nuw nsw i64 %.9406.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 %.preheader402, label %.epil.preheader, !llvm.loop !45

.preheader402:                                    ; preds = %.preheader402.loopexit.unr-lcssa, %.epil.preheader, %.preheader404
  %.not.not369407 = icmp sgt i64 %268, 0
  br i1 %.not.not369407, label %.lr.ph409, label %.loopexit401

.lr.ph409:                                        ; preds = %.preheader402
  %293 = getelementptr inbounds i8, ptr %1, i64 248
  %.pre524 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %xtraiter552 = and i64 %268, 3
  %294 = icmp ult i64 %268, 4
  br i1 %294, label %.loopexit401.loopexit550.unr-lcssa, label %.lr.ph409.new

.lr.ph409.new:                                    ; preds = %.lr.ph409
  %unroll_iter555 = and i64 %268, 9223372036854775804
  br label %308

295:                                              ; preds = %295, %.lr.ph.new
  %.9406 = phi i64 [ 0, %.lr.ph.new ], [ %307, %295 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %295 ]
  %296 = load ptr, ptr %270, align 8, !tbaa !22
  %297 = getelementptr inbounds double, ptr %296, i64 %.9406
  store double 0.000000e+00, ptr %297, align 8, !tbaa !23
  %298 = or disjoint i64 %.9406, 1
  %299 = load ptr, ptr %270, align 8, !tbaa !22
  %300 = getelementptr inbounds double, ptr %299, i64 %298
  store double 0.000000e+00, ptr %300, align 8, !tbaa !23
  %301 = or disjoint i64 %.9406, 2
  %302 = load ptr, ptr %270, align 8, !tbaa !22
  %303 = getelementptr inbounds double, ptr %302, i64 %301
  store double 0.000000e+00, ptr %303, align 8, !tbaa !23
  %304 = or disjoint i64 %.9406, 3
  %305 = load ptr, ptr %270, align 8, !tbaa !22
  %306 = getelementptr inbounds double, ptr %305, i64 %304
  store double 0.000000e+00, ptr %306, align 8, !tbaa !23
  %307 = add nuw nsw i64 %.9406, 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 %.preheader402.loopexit.unr-lcssa, label %295, !llvm.loop !46

308:                                              ; preds = %308, %.lr.ph409.new
  %.10408 = phi i64 [ 0, %.lr.ph409.new ], [ %320, %308 ]
  %niter556 = phi i64 [ 0, %.lr.ph409.new ], [ %niter556.next.3, %308 ]
  %309 = load ptr, ptr %293, align 8, !tbaa !22
  %310 = getelementptr inbounds double, ptr %309, i64 %.10408
  store double %.pre524, ptr %310, align 8, !tbaa !23
  %311 = or disjoint i64 %.10408, 1
  %312 = load ptr, ptr %293, align 8, !tbaa !22
  %313 = getelementptr inbounds double, ptr %312, i64 %311
  store double %.pre524, ptr %313, align 8, !tbaa !23
  %314 = or disjoint i64 %.10408, 2
  %315 = load ptr, ptr %293, align 8, !tbaa !22
  %316 = getelementptr inbounds double, ptr %315, i64 %314
  store double %.pre524, ptr %316, align 8, !tbaa !23
  %317 = or disjoint i64 %.10408, 3
  %318 = load ptr, ptr %293, align 8, !tbaa !22
  %319 = getelementptr inbounds double, ptr %318, i64 %317
  store double %.pre524, ptr %319, align 8, !tbaa !23
  %320 = add nuw nsw i64 %.10408, 4
  %niter556.next.3 = add i64 %niter556, 4
  %niter556.ncmp.3 = icmp eq i64 %niter556.next.3, %unroll_iter555
  br i1 %niter556.ncmp.3, label %.loopexit401.loopexit550.unr-lcssa, label %308, !llvm.loop !47

.loopexit401.loopexit.unr-lcssa:                  ; preds = %277, %.lr.ph412
  %.8411.unr = phi i64 [ 0, %.lr.ph412 ], [ %289, %277 ]
  %lcmp.mod560.not = icmp eq i64 %xtraiter558, 0
  br i1 %lcmp.mod560.not, label %.loopexit401, label %.loopexit401.loopexit.epilog-lcssa

.loopexit401.loopexit.epilog-lcssa:               ; preds = %.loopexit401.loopexit.unr-lcssa
  %321 = load ptr, ptr %274, align 8, !tbaa !22
  %322 = getelementptr inbounds double, ptr %321, i64 %.8411.unr
  store double 0.000000e+00, ptr %322, align 8, !tbaa !23
  %323 = load double, ptr @_ZN11alglib_implL6idw_w0E, align 8, !tbaa !23
  %324 = load ptr, ptr %275, align 8, !tbaa !22
  %325 = getelementptr inbounds double, ptr %324, i64 %.8411.unr
  store double %323, ptr %325, align 8, !tbaa !23
  br label %.loopexit401

.loopexit401.loopexit550.unr-lcssa:               ; preds = %308, %.lr.ph409
  %.10408.unr = phi i64 [ 0, %.lr.ph409 ], [ %320, %308 ]
  %lcmp.mod554.not = icmp eq i64 %xtraiter552, 0
  br i1 %lcmp.mod554.not, label %.loopexit401, label %.epil.preheader551

.epil.preheader551:                               ; preds = %.loopexit401.loopexit550.unr-lcssa, %.epil.preheader551
  %.10408.epil = phi i64 [ %328, %.epil.preheader551 ], [ %.10408.unr, %.loopexit401.loopexit550.unr-lcssa ]
  %epil.iter553 = phi i64 [ %epil.iter553.next, %.epil.preheader551 ], [ 0, %.loopexit401.loopexit550.unr-lcssa ]
  %326 = load ptr, ptr %293, align 8, !tbaa !22
  %327 = getelementptr inbounds double, ptr %326, i64 %.10408.epil
  store double %.pre524, ptr %327, align 8, !tbaa !23
  %328 = add nuw nsw i64 %.10408.epil, 1
  %epil.iter553.next = add i64 %epil.iter553, 1
  %epil.iter553.cmp.not = icmp eq i64 %epil.iter553.next, %xtraiter552
  br i1 %epil.iter553.cmp.not, label %.loopexit401, label %.epil.preheader551, !llvm.loop !48

.loopexit401:                                     ; preds = %.loopexit401.loopexit550.unr-lcssa, %.epil.preheader551, %.loopexit401.loopexit.epilog-lcssa, %.loopexit401.loopexit.unr-lcssa, %.preheader402, %272
  %329 = phi i1 [ true, %272 ], [ false, %.preheader402 ], [ true, %.loopexit401.loopexit.unr-lcssa ], [ true, %.loopexit401.loopexit.epilog-lcssa ], [ false, %.epil.preheader551 ], [ false, %.loopexit401.loopexit550.unr-lcssa ]
  %.0 = phi double [ %273, %272 ], [ 0.000000e+00, %.preheader402 ], [ %273, %.loopexit401.loopexit.unr-lcssa ], [ %273, %.loopexit401.loopexit.epilog-lcssa ], [ 0.000000e+00, %.epil.preheader551 ], [ 0.000000e+00, %.loopexit401.loopexit550.unr-lcssa ]
  %330 = getelementptr inbounds i8, ptr %0, i64 144
  %331 = getelementptr inbounds i8, ptr %1, i64 400
  %332 = load double, ptr %259, align 8, !tbaa !36
  %333 = tail call noundef i64 @_ZN11alglib_impl17kdtreetsqueryrnnuEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEdbPNS_8ae_stateE(ptr noundef nonnull %330, ptr noundef nonnull %331, ptr noundef nonnull %2, double noundef %332, i1 noundef zeroext true, ptr noundef %4)
  %334 = getelementptr inbounds i8, ptr %1, i64 256
  tail call void @_ZN11alglib_impl22kdtreetsqueryresultsxyEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_matrixEPNS_8ae_stateE(ptr noundef nonnull %330, ptr noundef nonnull %331, ptr noundef nonnull %334, ptr noundef %4)
  %335 = getelementptr inbounds i8, ptr %1, i64 336
  tail call void @_ZN11alglib_impl29kdtreetsqueryresultsdistancesEPNS_6kdtreeEPNS_19kdtreerequestbufferEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %330, ptr noundef nonnull %331, ptr noundef nonnull %335, ptr noundef %4)
  %.not.not371428 = icmp sgt i64 %333, 0
  br i1 %.not.not371428, label %.lr.ph436, label %._crit_edge

.lr.ph436:                                        ; preds = %.loopexit401
  %336 = getelementptr inbounds i8, ptr %0, i64 112
  %337 = getelementptr inbounds i8, ptr %1, i64 392
  %338 = getelementptr inbounds i8, ptr %0, i64 120
  %.not.not376413 = icmp sgt i64 %.fr, 0
  %339 = getelementptr inbounds i8, ptr %1, i64 328
  %340 = getelementptr inbounds i8, ptr %1, i64 184
  %341 = getelementptr inbounds i8, ptr %1, i64 248
  br i1 %329, label %.lr.ph436.split.us, label %.lr.ph436.split

.lr.ph436.split.us:                               ; preds = %.lr.ph436, %.loopexit398.us
  %.1435.us = phi double [ %.2.us, %.loopexit398.us ], [ %.0, %.lr.ph436 ]
  %.1335434.us = phi double [ %.2336.us, %.loopexit398.us ], [ 0.000000e+00, %.lr.ph436 ]
  %.1338433.us = phi double [ %358, %.loopexit398.us ], [ %.0, %.lr.ph436 ]
  %.1341432.us = phi double [ %357, %.loopexit398.us ], [ 0.000000e+00, %.lr.ph436 ]
  %.2345429.us = phi i64 [ %400, %.loopexit398.us ], [ 0, %.lr.ph436 ]
  %342 = load double, ptr %336, align 8, !tbaa !49
  %343 = load ptr, ptr %337, align 8, !tbaa !22
  %344 = getelementptr inbounds double, ptr %343, i64 %.2345429.us
  %345 = load double, ptr %344, align 8, !tbaa !23
  %346 = fmul double %261, %345
  %347 = fmul double %346, %346
  %348 = fsub double 1.000000e+00, %347
  %349 = fmul double %348, %348
  %350 = fadd double %342, %347
  %351 = fdiv double %349, %350
  %352 = load ptr, ptr %339, align 8, !tbaa !22
  %353 = getelementptr inbounds ptr, ptr %352, i64 %.2345429.us
  %354 = load ptr, ptr %353, align 8, !tbaa !38
  %355 = getelementptr inbounds double, ptr %354, i64 %6
  %356 = load double, ptr %355, align 8, !tbaa !23
  %357 = tail call double @llvm.fmuladd.f64(double %351, double %356, double %.1341432.us)
  %358 = fadd double %.1338433.us, %351
  %359 = fmul double %258, %346
  %360 = fcmp ult double %359, 1.000000e+00
  br i1 %360, label %361, label %.loopexit398.us

361:                                              ; preds = %.lr.ph436.split.us
  %362 = fmul double %359, %359
  %363 = fsub double 1.000000e+00, %362
  %364 = fmul double %363, %363
  %365 = fadd double %342, %362
  %366 = fdiv double %364, %365
  %367 = getelementptr i8, ptr %355, i64 8
  %368 = load double, ptr %367, align 8, !tbaa !23
  %369 = tail call double @llvm.fmuladd.f64(double %366, double %368, double %.1335434.us)
  %370 = fadd double %.1435.us, %366
  %371 = fmul double %258, %359
  %372 = fcmp ult double %371, 1.000000e+00
  br i1 %372, label %.preheader397.us, label %.loopexit398.us

373:                                              ; preds = %377, %.lr.ph426.us
  %.0349425.us = phi i64 [ 2, %.lr.ph426.us ], [ %399, %377 ]
  %.0352424.us = phi double [ %342, %.lr.ph426.us ], [ %.1353.us, %377 ]
  %.0357423.us = phi double [ %371, %.lr.ph426.us ], [ %397, %377 ]
  %374 = icmp eq i64 %.0349425.us, %402
  br i1 %374, label %375, label %377

375:                                              ; preds = %373
  %376 = load double, ptr %338, align 8, !tbaa !50
  br label %377

377:                                              ; preds = %375, %373
  %.1353.us = phi double [ %376, %375 ], [ %.0352424.us, %373 ]
  %378 = fmul double %.0357423.us, %.0357423.us
  %379 = fsub double 1.000000e+00, %378
  %380 = fmul double %379, %379
  %381 = fadd double %378, %.1353.us
  %382 = fdiv double %380, %381
  %383 = load ptr, ptr %339, align 8, !tbaa !22
  %384 = getelementptr inbounds ptr, ptr %383, i64 %.2345429.us
  %385 = load ptr, ptr %384, align 8, !tbaa !38
  %386 = getelementptr double, ptr %385, i64 %6
  %387 = getelementptr double, ptr %386, i64 %.0349425.us
  %388 = load double, ptr %387, align 8, !tbaa !23
  %389 = load ptr, ptr %340, align 8, !tbaa !22
  %390 = getelementptr inbounds double, ptr %389, i64 %.0349425.us
  %391 = load double, ptr %390, align 8, !tbaa !23
  %392 = tail call double @llvm.fmuladd.f64(double %382, double %388, double %391)
  store double %392, ptr %390, align 8, !tbaa !23
  %393 = load ptr, ptr %341, align 8, !tbaa !22
  %394 = getelementptr inbounds double, ptr %393, i64 %.0349425.us
  %395 = load double, ptr %394, align 8, !tbaa !23
  %396 = fadd double %382, %395
  store double %396, ptr %394, align 8, !tbaa !23
  %397 = fmul double %258, %.0357423.us
  %398 = fcmp ult double %397, 1.000000e+00
  %399 = add nuw nsw i64 %.0349425.us, 1
  %.not.not377.us = icmp slt i64 %399, %401
  %or.cond = select i1 %398, i1 %.not.not377.us, i1 false
  br i1 %or.cond, label %373, label %.loopexit398.us, !llvm.loop !51

.loopexit398.us:                                  ; preds = %377, %.preheader397.us, %361, %.lr.ph436.split.us
  %.2336.us = phi double [ %.1335434.us, %.lr.ph436.split.us ], [ %369, %361 ], [ %369, %.preheader397.us ], [ %369, %377 ]
  %.2.us = phi double [ %.1435.us, %.lr.ph436.split.us ], [ %370, %361 ], [ %370, %.preheader397.us ], [ %370, %377 ]
  %400 = add nuw nsw i64 %.2345429.us, 1
  %exitcond509.not = icmp eq i64 %400, %333
  br i1 %exitcond509.not, label %._crit_edge, label %.lr.ph436.split.us, !llvm.loop !52

.preheader397.us:                                 ; preds = %361
  %401 = load i64, ptr %16, align 8, !tbaa !21
  %.not.not377422.us = icmp sgt i64 %401, 2
  br i1 %.not.not377422.us, label %.lr.ph426.us, label %.loopexit398.us

.lr.ph426.us:                                     ; preds = %.preheader397.us
  %402 = add nsw i64 %401, -1
  br label %373

.lr.ph436.split:                                  ; preds = %.lr.ph436
  %403 = load i64, ptr %16, align 8, !tbaa !21
  %.not.not375416 = icmp sgt i64 %403, 0
  %404 = add nsw i64 %403, -1
  %xtraiter564 = and i64 %.fr, 1
  %405 = icmp eq i64 %.fr, 1
  %unroll_iter567 = and i64 %.fr, 9223372036854775806
  %lcmp.mod566.not = icmp eq i64 %xtraiter564, 0
  br label %.preheader399

.preheader399:                                    ; preds = %.lr.ph436.split, %.loopexit400
  %.2345429 = phi i64 [ 0, %.lr.ph436.split ], [ %485, %.loopexit400 ]
  br i1 %.not.not375416, label %.lr.ph420, label %.loopexit400

.lr.ph420:                                        ; preds = %.preheader399
  %406 = load ptr, ptr %337, align 8, !tbaa !22
  %407 = getelementptr inbounds double, ptr %406, i64 %.2345429
  %408 = load double, ptr %407, align 8, !tbaa !23
  %409 = fmul double %261, %408
  %410 = load double, ptr %336, align 8, !tbaa !49
  br i1 %.not.not376413, label %.lr.ph420.split.us, label %.lr.ph420.split

.lr.ph420.split.us:                               ; preds = %.lr.ph420, %._crit_edge.us
  %.1350419.us = phi i64 [ %466, %._crit_edge.us ], [ 0, %.lr.ph420 ]
  %.2354418.us = phi double [ %464, %._crit_edge.us ], [ %410, %.lr.ph420 ]
  %.1358417.us = phi double [ %465, %._crit_edge.us ], [ %409, %.lr.ph420 ]
  %411 = icmp eq i64 %.1350419.us, %404
  br i1 %411, label %412, label %414

412:                                              ; preds = %.lr.ph420.split.us
  %413 = load double, ptr %338, align 8, !tbaa !50
  br label %414

414:                                              ; preds = %412, %.lr.ph420.split.us
  %.3355.us = phi double [ %413, %412 ], [ %.2354418.us, %.lr.ph420.split.us ]
  %415 = fcmp ult double %.1358417.us, 1.000000e+00
  br i1 %415, label %.lr.ph415.us, label %.loopexit400

.lr.ph415.us:                                     ; preds = %414
  %416 = fmul double %.1358417.us, %.1358417.us
  %417 = fsub double 1.000000e+00, %416
  %418 = fmul double %417, %417
  %419 = fadd double %416, %.3355.us
  %420 = fdiv double %418, %419
  %421 = mul nuw nsw i64 %.1350419.us, %.fr
  br i1 %405, label %._crit_edge.us.unr-lcssa, label %.lr.ph415.us.new

.lr.ph415.us.new:                                 ; preds = %.lr.ph415.us, %.lr.ph415.us.new
  %.11414.us = phi i64 [ %447, %.lr.ph415.us.new ], [ 0, %.lr.ph415.us ]
  %niter568 = phi i64 [ %niter568.next.1, %.lr.ph415.us.new ], [ 0, %.lr.ph415.us ]
  %422 = load ptr, ptr %339, align 8, !tbaa !22
  %423 = getelementptr inbounds ptr, ptr %422, i64 %.2345429
  %424 = load ptr, ptr %423, align 8, !tbaa !38
  %425 = getelementptr double, ptr %424, i64 %6
  %426 = getelementptr double, ptr %425, i64 %421
  %427 = getelementptr double, ptr %426, i64 %.11414.us
  %428 = load double, ptr %427, align 8, !tbaa !23
  %429 = load ptr, ptr %340, align 8, !tbaa !22
  %430 = getelementptr double, ptr %429, i64 %421
  %431 = getelementptr double, ptr %430, i64 %.11414.us
  %432 = load double, ptr %431, align 8, !tbaa !23
  %433 = tail call double @llvm.fmuladd.f64(double %420, double %428, double %432)
  store double %433, ptr %431, align 8, !tbaa !23
  %434 = or disjoint i64 %.11414.us, 1
  %435 = load ptr, ptr %339, align 8, !tbaa !22
  %436 = getelementptr inbounds ptr, ptr %435, i64 %.2345429
  %437 = load ptr, ptr %436, align 8, !tbaa !38
  %438 = getelementptr double, ptr %437, i64 %6
  %439 = getelementptr double, ptr %438, i64 %421
  %440 = getelementptr double, ptr %439, i64 %434
  %441 = load double, ptr %440, align 8, !tbaa !23
  %442 = load ptr, ptr %340, align 8, !tbaa !22
  %443 = getelementptr double, ptr %442, i64 %421
  %444 = getelementptr double, ptr %443, i64 %434
  %445 = load double, ptr %444, align 8, !tbaa !23
  %446 = tail call double @llvm.fmuladd.f64(double %420, double %441, double %445)
  store double %446, ptr %444, align 8, !tbaa !23
  %447 = add nuw nsw i64 %.11414.us, 2
  %niter568.next.1 = add i64 %niter568, 2
  %niter568.ncmp.1 = icmp eq i64 %niter568.next.1, %unroll_iter567
  br i1 %niter568.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.lr.ph415.us.new, !llvm.loop !53

._crit_edge.us.unr-lcssa:                         ; preds = %.lr.ph415.us.new, %.lr.ph415.us
  %.11414.us.unr = phi i64 [ 0, %.lr.ph415.us ], [ %447, %.lr.ph415.us.new ]
  br i1 %lcmp.mod566.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %448 = load ptr, ptr %339, align 8, !tbaa !22
  %449 = getelementptr inbounds ptr, ptr %448, i64 %.2345429
  %450 = load ptr, ptr %449, align 8, !tbaa !38
  %451 = getelementptr double, ptr %450, i64 %6
  %452 = getelementptr double, ptr %451, i64 %421
  %453 = getelementptr double, ptr %452, i64 %.11414.us.unr
  %454 = load double, ptr %453, align 8, !tbaa !23
  %455 = load ptr, ptr %340, align 8, !tbaa !22
  %456 = getelementptr double, ptr %455, i64 %421
  %457 = getelementptr double, ptr %456, i64 %.11414.us.unr
  %458 = load double, ptr %457, align 8, !tbaa !23
  %459 = tail call double @llvm.fmuladd.f64(double %420, double %454, double %458)
  store double %459, ptr %457, align 8, !tbaa !23
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %460 = load ptr, ptr %341, align 8, !tbaa !22
  %461 = getelementptr inbounds double, ptr %460, i64 %.1350419.us
  %462 = load double, ptr %461, align 8, !tbaa !23
  %463 = fadd double %420, %462
  store double %463, ptr %461, align 8, !tbaa !23
  %464 = fmul double %263, %.3355.us
  %465 = fmul double %258, %.1358417.us
  %466 = add nuw nsw i64 %.1350419.us, 1
  %exitcond507.not = icmp eq i64 %466, %403
  br i1 %exitcond507.not, label %.loopexit400, label %.lr.ph420.split.us, !llvm.loop !54

.lr.ph420.split:                                  ; preds = %.lr.ph420, %472
  %.1350419 = phi i64 [ %484, %472 ], [ 0, %.lr.ph420 ]
  %.2354418 = phi double [ %482, %472 ], [ %410, %.lr.ph420 ]
  %.1358417 = phi double [ %483, %472 ], [ %409, %.lr.ph420 ]
  %467 = icmp eq i64 %.1350419, %404
  br i1 %467, label %468, label %470

468:                                              ; preds = %.lr.ph420.split
  %469 = load double, ptr %338, align 8, !tbaa !50
  br label %470

470:                                              ; preds = %468, %.lr.ph420.split
  %.3355 = phi double [ %469, %468 ], [ %.2354418, %.lr.ph420.split ]
  %471 = fcmp ult double %.1358417, 1.000000e+00
  br i1 %471, label %472, label %.loopexit400

472:                                              ; preds = %470
  %473 = fmul double %.1358417, %.1358417
  %474 = fsub double 1.000000e+00, %473
  %475 = fmul double %474, %474
  %476 = fadd double %473, %.3355
  %477 = fdiv double %475, %476
  %478 = load ptr, ptr %341, align 8, !tbaa !22
  %479 = getelementptr inbounds double, ptr %478, i64 %.1350419
  %480 = load double, ptr %479, align 8, !tbaa !23
  %481 = fadd double %477, %480
  store double %481, ptr %479, align 8, !tbaa !23
  %482 = fmul double %263, %.3355
  %483 = fmul double %258, %.1358417
  %484 = add nuw nsw i64 %.1350419, 1
  %exitcond505.not = icmp eq i64 %484, %403
  br i1 %exitcond505.not, label %.loopexit400, label %.lr.ph420.split, !llvm.loop !54

.loopexit400:                                     ; preds = %470, %472, %414, %._crit_edge.us, %.preheader399
  %485 = add nuw nsw i64 %.2345429, 1
  %exitcond508.not = icmp eq i64 %485, %333
  br i1 %exitcond508.not, label %._crit_edge, label %.preheader399, !llvm.loop !52

._crit_edge:                                      ; preds = %.loopexit400, %.loopexit398.us, %.loopexit401
  %.1341.lcssa = phi double [ 0.000000e+00, %.loopexit401 ], [ %357, %.loopexit398.us ], [ 0.000000e+00, %.loopexit400 ]
  %.1338.lcssa = phi double [ %.0, %.loopexit401 ], [ %358, %.loopexit398.us ], [ %.0, %.loopexit400 ]
  %.1335.lcssa = phi double [ 0.000000e+00, %.loopexit401 ], [ %.2336.us, %.loopexit398.us ], [ 0.000000e+00, %.loopexit400 ]
  %.1.lcssa = phi double [ %.0, %.loopexit401 ], [ %.2.us, %.loopexit398.us ], [ %.0, %.loopexit400 ]
  br i1 %329, label %486, label %495

486:                                              ; preds = %._crit_edge
  %487 = getelementptr inbounds i8, ptr %1, i64 184
  %488 = load ptr, ptr %487, align 8, !tbaa !22
  store double %.1341.lcssa, ptr %488, align 8, !tbaa !23
  %489 = getelementptr inbounds i8, ptr %1, i64 248
  %490 = load ptr, ptr %489, align 8, !tbaa !22
  store double %.1338.lcssa, ptr %490, align 8, !tbaa !23
  %491 = load ptr, ptr %487, align 8, !tbaa !22
  %492 = getelementptr inbounds i8, ptr %491, i64 8
  store double %.1335.lcssa, ptr %492, align 8, !tbaa !23
  %493 = load ptr, ptr %489, align 8, !tbaa !22
  %494 = getelementptr inbounds i8, ptr %493, i64 8
  store double %.1.lcssa, ptr %494, align 8, !tbaa !23
  br label %495

495:                                              ; preds = %486, %._crit_edge
  %.not.not372444 = icmp sgt i64 %.fr, 0
  br i1 %.not.not372444, label %.lr.ph447, label %.loopexit

.lr.ph447:                                        ; preds = %495
  %496 = getelementptr inbounds i8, ptr %0, i64 72
  %497 = getelementptr inbounds i8, ptr %3, i64 56
  %498 = add nsw i64 %.fr, -1
  %xtraiter570 = and i64 %.fr, 3
  %499 = icmp ult i64 %498, 3
  br i1 %499, label %.preheader395.unr-lcssa, label %.lr.ph447.new

.lr.ph447.new:                                    ; preds = %.lr.ph447
  %unroll_iter573 = and i64 %.fr, 9223372036854775804
  br label %551

.preheader395.unr-lcssa:                          ; preds = %551, %.lr.ph447
  %.12445.unr = phi i64 [ 0, %.lr.ph447 ], [ %575, %551 ]
  %lcmp.mod572.not = icmp eq i64 %xtraiter570, 0
  br i1 %lcmp.mod572.not, label %.preheader395, label %.epil.preheader569

.epil.preheader569:                               ; preds = %.preheader395.unr-lcssa, %.epil.preheader569
  %.12445.epil = phi i64 [ %505, %.epil.preheader569 ], [ %.12445.unr, %.preheader395.unr-lcssa ]
  %epil.iter571 = phi i64 [ %epil.iter571.next, %.epil.preheader569 ], [ 0, %.preheader395.unr-lcssa ]
  %500 = load ptr, ptr %496, align 8, !tbaa !22
  %501 = getelementptr inbounds double, ptr %500, i64 %.12445.epil
  %502 = load double, ptr %501, align 8, !tbaa !23
  %503 = load ptr, ptr %497, align 8, !tbaa !22
  %504 = getelementptr inbounds double, ptr %503, i64 %.12445.epil
  store double %502, ptr %504, align 8, !tbaa !23
  %505 = add nuw nsw i64 %.12445.epil, 1
  %epil.iter571.next = add i64 %epil.iter571, 1
  %epil.iter571.cmp.not = icmp eq i64 %epil.iter571.next, %xtraiter570
  br i1 %epil.iter571.cmp.not, label %.preheader395, label %.epil.preheader569, !llvm.loop !55

.preheader395:                                    ; preds = %.epil.preheader569, %.preheader395.unr-lcssa
  %506 = load i64, ptr %16, align 8, !tbaa !21
  %.not.not373452 = icmp sgt i64 %506, 0
  br i1 %.not.not373452, label %.preheader394.lr.ph, label %.loopexit

.preheader394.lr.ph:                              ; preds = %.preheader395
  %507 = getelementptr inbounds i8, ptr %3, i64 56
  %508 = getelementptr inbounds i8, ptr %1, i64 184
  %509 = getelementptr inbounds i8, ptr %1, i64 248
  br i1 %.not.not372444, label %.preheader394.us.preheader, label %.loopexit

.preheader394.us.preheader:                       ; preds = %.preheader394.lr.ph
  %xtraiter576 = and i64 %.fr, 1
  %510 = icmp eq i64 %498, 0
  %unroll_iter579 = and i64 %.fr, 9223372036854775806
  %lcmp.mod578.not = icmp eq i64 %xtraiter576, 0
  br label %.preheader394.us

.preheader394.us:                                 ; preds = %.preheader394.us.preheader, %._crit_edge451.us
  %.2351453.us = phi i64 [ %550, %._crit_edge451.us ], [ 0, %.preheader394.us.preheader ]
  %511 = mul nuw nsw i64 %.2351453.us, %.fr
  br i1 %510, label %._crit_edge451.us.unr-lcssa, label %.preheader394.us.new

.preheader394.us.new:                             ; preds = %.preheader394.us, %.preheader394.us.new
  %.13449.us = phi i64 [ %537, %.preheader394.us.new ], [ 0, %.preheader394.us ]
  %niter580 = phi i64 [ %niter580.next.1, %.preheader394.us.new ], [ 0, %.preheader394.us ]
  %512 = load ptr, ptr %507, align 8, !tbaa !22
  %513 = getelementptr inbounds double, ptr %512, i64 %.13449.us
  %514 = load double, ptr %513, align 8, !tbaa !23
  %515 = load ptr, ptr %508, align 8, !tbaa !22
  %516 = getelementptr double, ptr %515, i64 %511
  %517 = getelementptr double, ptr %516, i64 %.13449.us
  %518 = load double, ptr %517, align 8, !tbaa !23
  %519 = load ptr, ptr %509, align 8, !tbaa !22
  %520 = getelementptr inbounds double, ptr %519, i64 %.2351453.us
  %521 = load double, ptr %520, align 8, !tbaa !23
  %522 = fdiv double %518, %521
  %523 = fadd double %514, %522
  store double %523, ptr %513, align 8, !tbaa !23
  %524 = or disjoint i64 %.13449.us, 1
  %525 = load ptr, ptr %507, align 8, !tbaa !22
  %526 = getelementptr inbounds double, ptr %525, i64 %524
  %527 = load double, ptr %526, align 8, !tbaa !23
  %528 = load ptr, ptr %508, align 8, !tbaa !22
  %529 = getelementptr double, ptr %528, i64 %511
  %530 = getelementptr double, ptr %529, i64 %524
  %531 = load double, ptr %530, align 8, !tbaa !23
  %532 = load ptr, ptr %509, align 8, !tbaa !22
  %533 = getelementptr inbounds double, ptr %532, i64 %.2351453.us
  %534 = load double, ptr %533, align 8, !tbaa !23
  %535 = fdiv double %531, %534
  %536 = fadd double %527, %535
  store double %536, ptr %526, align 8, !tbaa !23
  %537 = add nuw nsw i64 %.13449.us, 2
  %niter580.next.1 = add i64 %niter580, 2
  %niter580.ncmp.1 = icmp eq i64 %niter580.next.1, %unroll_iter579
  br i1 %niter580.ncmp.1, label %._crit_edge451.us.unr-lcssa, label %.preheader394.us.new, !llvm.loop !56

._crit_edge451.us.unr-lcssa:                      ; preds = %.preheader394.us.new, %.preheader394.us
  %.13449.us.unr = phi i64 [ 0, %.preheader394.us ], [ %537, %.preheader394.us.new ]
  br i1 %lcmp.mod578.not, label %._crit_edge451.us, label %._crit_edge451.us.epilog-lcssa

._crit_edge451.us.epilog-lcssa:                   ; preds = %._crit_edge451.us.unr-lcssa
  %538 = load ptr, ptr %507, align 8, !tbaa !22
  %539 = getelementptr inbounds double, ptr %538, i64 %.13449.us.unr
  %540 = load double, ptr %539, align 8, !tbaa !23
  %541 = load ptr, ptr %508, align 8, !tbaa !22
  %542 = getelementptr double, ptr %541, i64 %511
  %543 = getelementptr double, ptr %542, i64 %.13449.us.unr
  %544 = load double, ptr %543, align 8, !tbaa !23
  %545 = load ptr, ptr %509, align 8, !tbaa !22
  %546 = getelementptr inbounds double, ptr %545, i64 %.2351453.us
  %547 = load double, ptr %546, align 8, !tbaa !23
  %548 = fdiv double %544, %547
  %549 = fadd double %540, %548
  store double %549, ptr %539, align 8, !tbaa !23
  br label %._crit_edge451.us

._crit_edge451.us:                                ; preds = %._crit_edge451.us.unr-lcssa, %._crit_edge451.us.epilog-lcssa
  %550 = add nuw nsw i64 %.2351453.us, 1
  %exitcond512.not = icmp eq i64 %550, %506
  br i1 %exitcond512.not, label %.loopexit, label %.preheader394.us, !llvm.loop !57

551:                                              ; preds = %551, %.lr.ph447.new
  %.12445 = phi i64 [ 0, %.lr.ph447.new ], [ %575, %551 ]
  %niter574 = phi i64 [ 0, %.lr.ph447.new ], [ %niter574.next.3, %551 ]
  %552 = load ptr, ptr %496, align 8, !tbaa !22
  %553 = getelementptr inbounds double, ptr %552, i64 %.12445
  %554 = load double, ptr %553, align 8, !tbaa !23
  %555 = load ptr, ptr %497, align 8, !tbaa !22
  %556 = getelementptr inbounds double, ptr %555, i64 %.12445
  store double %554, ptr %556, align 8, !tbaa !23
  %557 = or disjoint i64 %.12445, 1
  %558 = load ptr, ptr %496, align 8, !tbaa !22
  %559 = getelementptr inbounds double, ptr %558, i64 %557
  %560 = load double, ptr %559, align 8, !tbaa !23
  %561 = load ptr, ptr %497, align 8, !tbaa !22
  %562 = getelementptr inbounds double, ptr %561, i64 %557
  store double %560, ptr %562, align 8, !tbaa !23
  %563 = or disjoint i64 %.12445, 2
  %564 = load ptr, ptr %496, align 8, !tbaa !22
  %565 = getelementptr inbounds double, ptr %564, i64 %563
  %566 = load double, ptr %565, align 8, !tbaa !23
  %567 = load ptr, ptr %497, align 8, !tbaa !22
  %568 = getelementptr inbounds double, ptr %567, i64 %563
  store double %566, ptr %568, align 8, !tbaa !23
  %569 = or disjoint i64 %.12445, 3
  %570 = load ptr, ptr %496, align 8, !tbaa !22
  %571 = getelementptr inbounds double, ptr %570, i64 %569
  %572 = load double, ptr %571, align 8, !tbaa !23
  %573 = load ptr, ptr %497, align 8, !tbaa !22
  %574 = getelementptr inbounds double, ptr %573, i64 %569
  store double %572, ptr %574, align 8, !tbaa !23
  %575 = add nuw nsw i64 %.12445, 4
  %niter574.next.3 = add i64 %niter574, 4
  %niter574.ncmp.3 = icmp eq i64 %niter574.next.3, %unroll_iter573
  br i1 %niter574.ncmp.3, label %.preheader395.unr-lcssa, label %551, !llvm.loop !58

576:                                              ; preds = %48
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.128, ptr noundef %4)
  br label %.loopexit

.loopexit.loopexit.unr-lcssa:                     ; preds = %23, %.lr.ph493
  %.0346492.unr = phi i64 [ 0, %.lr.ph493 ], [ %47, %23 ]
  %lcmp.mod615.not = icmp eq i64 %xtraiter613, 0
  br i1 %lcmp.mod615.not, label %.loopexit, label %.epil.preheader612

.epil.preheader612:                               ; preds = %.loopexit.loopexit.unr-lcssa, %.epil.preheader612
  %.0346492.epil = phi i64 [ %582, %.epil.preheader612 ], [ %.0346492.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter614 = phi i64 [ %epil.iter614.next, %.epil.preheader612 ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %577 = load ptr, ptr %19, align 8, !tbaa !22
  %578 = getelementptr inbounds double, ptr %577, i64 %.0346492.epil
  %579 = load double, ptr %578, align 8, !tbaa !23
  %580 = load ptr, ptr %20, align 8, !tbaa !22
  %581 = getelementptr inbounds double, ptr %580, i64 %.0346492.epil
  store double %579, ptr %581, align 8, !tbaa !23
  %582 = add nuw nsw i64 %.0346492.epil, 1
  %epil.iter614.next = add i64 %epil.iter614, 1
  %epil.iter614.cmp.not = icmp eq i64 %epil.iter614.next, %xtraiter613
  br i1 %epil.iter614.cmp.not, label %.loopexit, label %.epil.preheader612, !llvm.loop !59

.loopexit.loopexit543.unr-lcssa:                  ; preds = %145, %.lr.ph490
  %.4489.unr = phi i64 [ 0, %.lr.ph490 ], [ %169, %145 ]
  %lcmp.mod609.not = icmp eq i64 %xtraiter607, 0
  br i1 %lcmp.mod609.not, label %.loopexit, label %.loopexit.loopexit543.epilog-lcssa

.loopexit.loopexit543.epilog-lcssa:               ; preds = %.loopexit.loopexit543.unr-lcssa
  %583 = load ptr, ptr %86, align 8, !tbaa !22
  %584 = getelementptr inbounds double, ptr %583, i64 %.4489.unr
  %585 = load double, ptr %584, align 8, !tbaa !23
  %586 = load ptr, ptr %87, align 8, !tbaa !22
  %587 = getelementptr inbounds double, ptr %586, i64 %.4489.unr
  %588 = load double, ptr %587, align 8, !tbaa !23
  %589 = fdiv double %585, %588
  %590 = load ptr, ptr %88, align 8, !tbaa !22
  %591 = getelementptr inbounds double, ptr %590, i64 %.4489.unr
  %592 = load double, ptr %591, align 8, !tbaa !23
  %593 = fadd double %589, %592
  store double %593, ptr %584, align 8, !tbaa !23
  br label %.loopexit

.loopexit.loopexit544.unr-lcssa:                  ; preds = %228, %.lr.ph470
  %.7469.unr = phi i64 [ 0, %.lr.ph470 ], [ %252, %228 ]
  %lcmp.mod590.not = icmp eq i64 %xtraiter588, 0
  br i1 %lcmp.mod590.not, label %.loopexit, label %.loopexit.loopexit544.epilog-lcssa

.loopexit.loopexit544.epilog-lcssa:               ; preds = %.loopexit.loopexit544.unr-lcssa
  %594 = load ptr, ptr %200, align 8, !tbaa !22
  %595 = getelementptr inbounds double, ptr %594, i64 %.7469.unr
  %596 = load double, ptr %595, align 8, !tbaa !23
  %597 = load ptr, ptr %201, align 8, !tbaa !22
  %598 = getelementptr inbounds double, ptr %597, i64 %.7469.unr
  %599 = load double, ptr %598, align 8, !tbaa !23
  %600 = fdiv double %596, %599
  %601 = load ptr, ptr %202, align 8, !tbaa !22
  %602 = getelementptr inbounds double, ptr %601, i64 %.7469.unr
  %603 = load double, ptr %602, align 8, !tbaa !23
  %604 = fadd double %600, %603
  store double %604, ptr %595, align 8, !tbaa !23
  br label %.loopexit

.loopexit:                                        ; preds = %._crit_edge451.us, %.loopexit.loopexit544.epilog-lcssa, %.loopexit.loopexit544.unr-lcssa, %.loopexit.loopexit543.epilog-lcssa, %.loopexit.loopexit543.unr-lcssa, %.loopexit.loopexit.unr-lcssa, %.epil.preheader612, %495, %.preheader394.lr.ph, %.preheader395, %.preheader392, %.preheader388, %.preheader, %576
  ret void
}

declare noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPNS_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

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

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

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

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

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

attributes #0 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress 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) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSN11alglib_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, !15, i64 144, !7, i64 1144, !10, i64 1152, !18, i64 1216}
!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_impl6kdtreeE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !16, i64 32, !10, i64 112, !10, i64 176, !10, i64 240, !10, i64 304, !10, i64 368, !17, i64 432, !7, i64 992}
!16 = !{!"_ZTSN11alglib_impl9ae_matrixE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !11, i64 32, !12, i64 40, !8, i64 72}
!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 = !{!"_ZTSN11alglib_impl13idwcalcbufferE", !10, i64 0, !10, i64 64, !10, i64 128, !10, i64 192, !16, i64 256, !10, i64 336, !17, i64 400}
!19 = !{!6, !7, i64 8}
!20 = !{!10, !7, i64 0}
!21 = !{!6, !7, i64 88}
!22 = !{!8, !8, i64 0}
!23 = !{!14, !14, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = !{!6, !7, i64 80}
!27 = !{!6, !7, i64 1144}
!28 = !{!6, !14, i64 136}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.unroll.disable"}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = !{!6, !14, i64 96}
!37 = distinct !{!37, !25}
!38 = !{!13, !13, i64 0}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = !{!6, !14, i64 104}
!43 = !{!6, !14, i64 128}
!44 = distinct !{!44, !25}
!45 = distinct !{!45, !32}
!46 = distinct !{!46, !25}
!47 = distinct !{!47, !25}
!48 = distinct !{!48, !32}
!49 = !{!6, !14, i64 112}
!50 = !{!6, !14, i64 120}
!51 = distinct !{!51, !25}
!52 = distinct !{!52, !25}
!53 = distinct !{!53, !25}
!54 = distinct !{!54, !25}
!55 = distinct !{!55, !32}
!56 = distinct !{!56, !25}
!57 = distinct !{!57, !25}
!58 = distinct !{!58, !25}
!59 = distinct !{!59, !32}


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