; LLVM IR from Dimandragon/non-parametric-dsp :: 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::ae_frame" = type { %"struct.alglib_impl::ae_dyn_block" }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%"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::spline2dinterpolant" = type { i64, i8, i64, i64, 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" }

@.str.832 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.833 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.834 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.835 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.836 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.837 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.838 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.839 = external hidden unnamed_addr constant [81 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 nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

; 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) #2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl31spline2dbuildbilinearmissingbufEPKNS_9ae_vectorElS2_lS2_S2_lPNS_19spline2dinterpolantEPNS_8ae_stateE(ptr noundef %0, i64 noundef %1, ptr noundef %2, i64 noundef %3, ptr noundef %4, ptr noundef %5, i64 noundef %6, ptr noundef %7, ptr noundef %8) #3 {
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca %"struct.alglib_impl::ae_frame", align 8
  %20 = alloca %"struct.alglib_impl::ae_vector", align 8
  %21 = alloca double, align 8
  %22 = alloca i8, align 1
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  store ptr %0, ptr %10, align 8, !tbaa !5
  store i64 %1, ptr %11, align 8, !tbaa !9
  store ptr %2, ptr %12, align 8, !tbaa !5
  store i64 %3, ptr %13, align 8, !tbaa !9
  store ptr %4, ptr %14, align 8, !tbaa !5
  store ptr %5, ptr %15, align 8, !tbaa !5
  store i64 %6, ptr %16, align 8, !tbaa !9
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  %27 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %27, ptr noundef %19)
  call void @llvm.memset.p0.i64(ptr align 8 %20, i8 0, i64 64, i1 false)
  %28 = load ptr, ptr %14, align 8, !tbaa !5
  %29 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef %20, ptr noundef %28, ptr noundef %29, i1 noundef zeroext true)
  %30 = load i64, ptr %11, align 8, !tbaa !9
  %31 = icmp sge i64 %30, 2
  %32 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %31, ptr noundef @.str.832, ptr noundef %32)
  %33 = load i64, ptr %13, align 8, !tbaa !9
  %34 = icmp sge i64 %33, 2
  %35 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %34, ptr noundef @.str.833, ptr noundef %35)
  %36 = load i64, ptr %16, align 8, !tbaa !9
  %37 = icmp sge i64 %36, 1
  %38 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %37, ptr noundef @.str.834, ptr noundef %38)
  %39 = load ptr, ptr %10, align 8, !tbaa !5
  %40 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %39, i32 0, i32 0
  %41 = load i64, ptr %40, align 8, !tbaa !11
  %42 = load i64, ptr %11, align 8, !tbaa !9
  %43 = icmp sge i64 %41, %42
  br i1 %43, label %44, label %50

44:                                               ; preds = %9
  %45 = load ptr, ptr %12, align 8, !tbaa !5
  %46 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 0
  %47 = load i64, ptr %46, align 8, !tbaa !11
  %48 = load i64, ptr %13, align 8, !tbaa !9
  %49 = icmp sge i64 %47, %48
  br label %50

50:                                               ; preds = %44, %9
  %51 = phi i1 [ false, %9 ], [ %49, %44 ]
  %52 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %51, ptr noundef @.str.835, ptr noundef %52)
  %53 = load ptr, ptr %10, align 8, !tbaa !5
  %54 = load i64, ptr %11, align 8, !tbaa !9
  %55 = load ptr, ptr %18, align 8, !tbaa !5
  %56 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %53, i64 noundef %54, ptr noundef %55)
  br i1 %56, label %57, label %62

57:                                               ; preds = %50
  %58 = load ptr, ptr %12, align 8, !tbaa !5
  %59 = load i64, ptr %13, align 8, !tbaa !9
  %60 = load ptr, ptr %18, align 8, !tbaa !5
  %61 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %58, i64 noundef %59, ptr noundef %60)
  br label %62

62:                                               ; preds = %57, %50
  %63 = phi i1 [ false, %50 ], [ %61, %57 ]
  %64 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %63, ptr noundef @.str.836, ptr noundef %64)
  %65 = load i64, ptr %11, align 8, !tbaa !9
  %66 = load i64, ptr %13, align 8, !tbaa !9
  %67 = mul nsw i64 %65, %66
  %68 = load i64, ptr %16, align 8, !tbaa !9
  %69 = mul nsw i64 %67, %68
  store i64 %69, ptr %25, align 8, !tbaa !9
  %70 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 0
  %71 = load i64, ptr %70, align 8, !tbaa !11
  %72 = load i64, ptr %25, align 8, !tbaa !9
  %73 = icmp sge i64 %71, %72
  %74 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %73, ptr noundef @.str.837, ptr noundef %74)
  %75 = load ptr, ptr %15, align 8, !tbaa !5
  %76 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %75, i32 0, i32 0
  %77 = load i64, ptr %76, align 8, !tbaa !11
  %78 = load i64, ptr %11, align 8, !tbaa !9
  %79 = load i64, ptr %13, align 8, !tbaa !9
  %80 = mul nsw i64 %78, %79
  %81 = icmp sge i64 %77, %80
  %82 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %81, ptr noundef @.str.838, ptr noundef %82)
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %83

83:                                               ; preds = %109, %62
  %84 = load i64, ptr %23, align 8, !tbaa !9
  %85 = load i64, ptr %25, align 8, !tbaa !9
  %86 = sub nsw i64 %85, 1
  %87 = icmp sle i64 %84, %86
  br i1 %87, label %88, label %112

88:                                               ; preds = %83
  %89 = load ptr, ptr %15, align 8, !tbaa !5
  %90 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %89, i32 0, i32 4
  %91 = load ptr, ptr %90, align 8, !tbaa !15
  %92 = load i64, ptr %23, align 8, !tbaa !9
  %93 = load i64, ptr %16, align 8, !tbaa !9
  %94 = sdiv i64 %92, %93
  %95 = getelementptr inbounds i8, ptr %91, i64 %94
  %96 = load i8, ptr %95, align 1, !tbaa !16, !range !17, !noundef !18
  %97 = trunc i8 %96 to i1
  br i1 %97, label %108, label %98

98:                                               ; preds = %88
  %99 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 4
  %100 = load ptr, ptr %99, align 8, !tbaa !15
  %101 = load i64, ptr %23, align 8, !tbaa !9
  %102 = getelementptr inbounds double, ptr %100, i64 %101
  %103 = load double, ptr %102, align 8, !tbaa !19
  %104 = load ptr, ptr %18, align 8, !tbaa !5
  %105 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %103, ptr noundef %104)
  br i1 %105, label %108, label %106

106:                                              ; preds = %98
  %107 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.839, ptr noundef %107)
  br label %108

108:                                              ; preds = %106, %98, %88
  br label %109

109:                                              ; preds = %108
  %110 = load i64, ptr %23, align 8, !tbaa !9
  %111 = add nsw i64 %110, 1
  store i64 %111, ptr %23, align 8, !tbaa !9
  br label %83, !llvm.loop !21

112:                                              ; preds = %83
  %113 = load i64, ptr %11, align 8, !tbaa !9
  %114 = load ptr, ptr %17, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %114, i32 0, i32 2
  store i64 %113, ptr %115, align 8, !tbaa !23
  %116 = load i64, ptr %13, align 8, !tbaa !9
  %117 = load ptr, ptr %17, align 8, !tbaa !5
  %118 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %117, i32 0, i32 3
  store i64 %116, ptr %118, align 8, !tbaa !25
  %119 = load i64, ptr %16, align 8, !tbaa !9
  %120 = load ptr, ptr %17, align 8, !tbaa !5
  %121 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %120, i32 0, i32 4
  store i64 %119, ptr %121, align 8, !tbaa !26
  %122 = load ptr, ptr %17, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %122, i32 0, i32 0
  store i64 -1, ptr %123, align 8, !tbaa !27
  %124 = load ptr, ptr %17, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %124, i32 0, i32 1
  store i8 1, ptr %125, align 8, !tbaa !28
  %126 = load ptr, ptr %17, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %126, i32 0, i32 5
  %128 = load ptr, ptr %17, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %128, i32 0, i32 2
  %130 = load i64, ptr %129, align 8, !tbaa !23
  %131 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %127, i64 noundef %130, ptr noundef %131)
  %132 = load ptr, ptr %17, align 8, !tbaa !5
  %133 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %132, i32 0, i32 6
  %134 = load ptr, ptr %17, align 8, !tbaa !5
  %135 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %134, i32 0, i32 3
  %136 = load i64, ptr %135, align 8, !tbaa !25
  %137 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %133, i64 noundef %136, ptr noundef %137)
  %138 = load i64, ptr %25, align 8, !tbaa !9
  %139 = load ptr, ptr %17, align 8, !tbaa !5
  %140 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %139, i32 0, i32 7
  %141 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl10rsetallocvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %138, double noundef 0.000000e+00, ptr noundef %140, ptr noundef %141)
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %142

142:                                              ; preds = %162, %112
  %143 = load i64, ptr %23, align 8, !tbaa !9
  %144 = load ptr, ptr %17, align 8, !tbaa !5
  %145 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %144, i32 0, i32 2
  %146 = load i64, ptr %145, align 8, !tbaa !23
  %147 = sub nsw i64 %146, 1
  %148 = icmp sle i64 %143, %147
  br i1 %148, label %149, label %165

149:                                              ; preds = %142
  %150 = load ptr, ptr %10, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %150, i32 0, i32 4
  %152 = load ptr, ptr %151, align 8, !tbaa !15
  %153 = load i64, ptr %23, align 8, !tbaa !9
  %154 = getelementptr inbounds double, ptr %152, i64 %153
  %155 = load double, ptr %154, align 8, !tbaa !19
  %156 = load ptr, ptr %17, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %156, i32 0, i32 5
  %158 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %157, i32 0, i32 4
  %159 = load ptr, ptr %158, align 8, !tbaa !15
  %160 = load i64, ptr %23, align 8, !tbaa !9
  %161 = getelementptr inbounds double, ptr %159, i64 %160
  store double %155, ptr %161, align 8, !tbaa !19
  br label %162

162:                                              ; preds = %149
  %163 = load i64, ptr %23, align 8, !tbaa !9
  %164 = add nsw i64 %163, 1
  store i64 %164, ptr %23, align 8, !tbaa !9
  br label %142, !llvm.loop !29

165:                                              ; preds = %142
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %166

166:                                              ; preds = %186, %165
  %167 = load i64, ptr %23, align 8, !tbaa !9
  %168 = load ptr, ptr %17, align 8, !tbaa !5
  %169 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %168, i32 0, i32 3
  %170 = load i64, ptr %169, align 8, !tbaa !25
  %171 = sub nsw i64 %170, 1
  %172 = icmp sle i64 %167, %171
  br i1 %172, label %173, label %189

173:                                              ; preds = %166
  %174 = load ptr, ptr %12, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %174, i32 0, i32 4
  %176 = load ptr, ptr %175, align 8, !tbaa !15
  %177 = load i64, ptr %23, align 8, !tbaa !9
  %178 = getelementptr inbounds double, ptr %176, i64 %177
  %179 = load double, ptr %178, align 8, !tbaa !19
  %180 = load ptr, ptr %17, align 8, !tbaa !5
  %181 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %180, i32 0, i32 6
  %182 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %181, i32 0, i32 4
  %183 = load ptr, ptr %182, align 8, !tbaa !15
  %184 = load i64, ptr %23, align 8, !tbaa !9
  %185 = getelementptr inbounds double, ptr %183, i64 %184
  store double %179, ptr %185, align 8, !tbaa !19
  br label %186

186:                                              ; preds = %173
  %187 = load i64, ptr %23, align 8, !tbaa !9
  %188 = add nsw i64 %187, 1
  store i64 %188, ptr %23, align 8, !tbaa !9
  br label %166, !llvm.loop !30

189:                                              ; preds = %166
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %190

190:                                              ; preds = %218, %189
  %191 = load i64, ptr %23, align 8, !tbaa !9
  %192 = load i64, ptr %25, align 8, !tbaa !9
  %193 = sub nsw i64 %192, 1
  %194 = icmp sle i64 %191, %193
  br i1 %194, label %195, label %221

195:                                              ; preds = %190
  %196 = load ptr, ptr %15, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %196, i32 0, i32 4
  %198 = load ptr, ptr %197, align 8, !tbaa !15
  %199 = load i64, ptr %23, align 8, !tbaa !9
  %200 = load i64, ptr %16, align 8, !tbaa !9
  %201 = sdiv i64 %199, %200
  %202 = getelementptr inbounds i8, ptr %198, i64 %201
  %203 = load i8, ptr %202, align 1, !tbaa !16, !range !17, !noundef !18
  %204 = trunc i8 %203 to i1
  br i1 %204, label %217, label %205

205:                                              ; preds = %195
  %206 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 4
  %207 = load ptr, ptr %206, align 8, !tbaa !15
  %208 = load i64, ptr %23, align 8, !tbaa !9
  %209 = getelementptr inbounds double, ptr %207, i64 %208
  %210 = load double, ptr %209, align 8, !tbaa !19
  %211 = load ptr, ptr %17, align 8, !tbaa !5
  %212 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %211, i32 0, i32 7
  %213 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %212, i32 0, i32 4
  %214 = load ptr, ptr %213, align 8, !tbaa !15
  %215 = load i64, ptr %23, align 8, !tbaa !9
  %216 = getelementptr inbounds double, ptr %214, i64 %215
  store double %210, ptr %216, align 8, !tbaa !19
  br label %217

217:                                              ; preds = %205, %195
  br label %218

218:                                              ; preds = %217
  %219 = load i64, ptr %23, align 8, !tbaa !9
  %220 = add nsw i64 %219, 1
  store i64 %220, ptr %23, align 8, !tbaa !9
  br label %190, !llvm.loop !31

221:                                              ; preds = %190
  %222 = load ptr, ptr %17, align 8, !tbaa !5
  %223 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %222, i32 0, i32 2
  %224 = load i64, ptr %223, align 8, !tbaa !23
  %225 = load ptr, ptr %17, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %225, i32 0, i32 3
  %227 = load i64, ptr %226, align 8, !tbaa !25
  %228 = mul nsw i64 %224, %227
  %229 = load ptr, ptr %15, align 8, !tbaa !5
  %230 = load ptr, ptr %17, align 8, !tbaa !5
  %231 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %230, i32 0, i32 8
  %232 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl11bcopyallocvElPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %228, ptr noundef %229, ptr noundef %231, ptr noundef %232)
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %233

233:                                              ; preds = %462, %221
  %234 = load i64, ptr %24, align 8, !tbaa !9
  %235 = load ptr, ptr %17, align 8, !tbaa !5
  %236 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %235, i32 0, i32 2
  %237 = load i64, ptr %236, align 8, !tbaa !23
  %238 = sub nsw i64 %237, 1
  %239 = icmp sle i64 %234, %238
  br i1 %239, label %240, label %465

240:                                              ; preds = %233
  %241 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %241, ptr %25, align 8, !tbaa !9
  %242 = load i64, ptr %24, align 8, !tbaa !9
  %243 = add nsw i64 %242, 1
  store i64 %243, ptr %23, align 8, !tbaa !9
  br label %244

244:                                              ; preds = %270, %240
  %245 = load i64, ptr %23, align 8, !tbaa !9
  %246 = load ptr, ptr %17, align 8, !tbaa !5
  %247 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %246, i32 0, i32 2
  %248 = load i64, ptr %247, align 8, !tbaa !23
  %249 = sub nsw i64 %248, 1
  %250 = icmp sle i64 %245, %249
  br i1 %250, label %251, label %273

251:                                              ; preds = %244
  %252 = load ptr, ptr %17, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %252, i32 0, i32 5
  %254 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %253, i32 0, i32 4
  %255 = load ptr, ptr %254, align 8, !tbaa !15
  %256 = load i64, ptr %23, align 8, !tbaa !9
  %257 = getelementptr inbounds double, ptr %255, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !19
  %259 = load ptr, ptr %17, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %259, i32 0, i32 5
  %261 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %260, i32 0, i32 4
  %262 = load ptr, ptr %261, align 8, !tbaa !15
  %263 = load i64, ptr %25, align 8, !tbaa !9
  %264 = getelementptr inbounds double, ptr %262, i64 %263
  %265 = load double, ptr %264, align 8, !tbaa !19
  %266 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %258, double noundef %265)
  br i1 %266, label %267, label %269

267:                                              ; preds = %251
  %268 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %268, ptr %25, align 8, !tbaa !9
  br label %269

269:                                              ; preds = %267, %251
  br label %270

270:                                              ; preds = %269
  %271 = load i64, ptr %23, align 8, !tbaa !9
  %272 = add nsw i64 %271, 1
  store i64 %272, ptr %23, align 8, !tbaa !9
  br label %244, !llvm.loop !32

273:                                              ; preds = %244
  %274 = load i64, ptr %25, align 8, !tbaa !9
  %275 = load i64, ptr %24, align 8, !tbaa !9
  %276 = icmp ne i64 %274, %275
  br i1 %276, label %277, label %461

277:                                              ; preds = %273
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %278

278:                                              ; preds = %430, %277
  %279 = load i64, ptr %23, align 8, !tbaa !9
  %280 = load ptr, ptr %17, align 8, !tbaa !5
  %281 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %280, i32 0, i32 3
  %282 = load i64, ptr %281, align 8, !tbaa !25
  %283 = sub nsw i64 %282, 1
  %284 = icmp sle i64 %279, %283
  br i1 %284, label %285, label %433

285:                                              ; preds = %278
  store i64 0, ptr %26, align 8, !tbaa !9
  br label %286

286:                                              ; preds = %369, %285
  %287 = load i64, ptr %26, align 8, !tbaa !9
  %288 = load ptr, ptr %17, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %288, i32 0, i32 4
  %290 = load i64, ptr %289, align 8, !tbaa !26
  %291 = sub nsw i64 %290, 1
  %292 = icmp sle i64 %287, %291
  br i1 %292, label %293, label %372

293:                                              ; preds = %286
  %294 = load ptr, ptr %17, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %294, i32 0, i32 7
  %296 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %295, i32 0, i32 4
  %297 = load ptr, ptr %296, align 8, !tbaa !15
  %298 = load ptr, ptr %17, align 8, !tbaa !5
  %299 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %298, i32 0, i32 4
  %300 = load i64, ptr %299, align 8, !tbaa !26
  %301 = load i64, ptr %23, align 8, !tbaa !9
  %302 = load ptr, ptr %17, align 8, !tbaa !5
  %303 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %302, i32 0, i32 2
  %304 = load i64, ptr %303, align 8, !tbaa !23
  %305 = mul nsw i64 %301, %304
  %306 = load i64, ptr %24, align 8, !tbaa !9
  %307 = add nsw i64 %305, %306
  %308 = mul nsw i64 %300, %307
  %309 = load i64, ptr %26, align 8, !tbaa !9
  %310 = add nsw i64 %308, %309
  %311 = getelementptr inbounds double, ptr %297, i64 %310
  %312 = load double, ptr %311, align 8, !tbaa !19
  store double %312, ptr %21, align 8, !tbaa !19
  %313 = load ptr, ptr %17, align 8, !tbaa !5
  %314 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %313, i32 0, i32 7
  %315 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %314, i32 0, i32 4
  %316 = load ptr, ptr %315, align 8, !tbaa !15
  %317 = load ptr, ptr %17, align 8, !tbaa !5
  %318 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %317, i32 0, i32 4
  %319 = load i64, ptr %318, align 8, !tbaa !26
  %320 = load i64, ptr %23, align 8, !tbaa !9
  %321 = load ptr, ptr %17, align 8, !tbaa !5
  %322 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %321, i32 0, i32 2
  %323 = load i64, ptr %322, align 8, !tbaa !23
  %324 = mul nsw i64 %320, %323
  %325 = load i64, ptr %25, align 8, !tbaa !9
  %326 = add nsw i64 %324, %325
  %327 = mul nsw i64 %319, %326
  %328 = load i64, ptr %26, align 8, !tbaa !9
  %329 = add nsw i64 %327, %328
  %330 = getelementptr inbounds double, ptr %316, i64 %329
  %331 = load double, ptr %330, align 8, !tbaa !19
  %332 = load ptr, ptr %17, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %332, i32 0, i32 7
  %334 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %333, i32 0, i32 4
  %335 = load ptr, ptr %334, align 8, !tbaa !15
  %336 = load ptr, ptr %17, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %336, i32 0, i32 4
  %338 = load i64, ptr %337, align 8, !tbaa !26
  %339 = load i64, ptr %23, align 8, !tbaa !9
  %340 = load ptr, ptr %17, align 8, !tbaa !5
  %341 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %340, i32 0, i32 2
  %342 = load i64, ptr %341, align 8, !tbaa !23
  %343 = mul nsw i64 %339, %342
  %344 = load i64, ptr %24, align 8, !tbaa !9
  %345 = add nsw i64 %343, %344
  %346 = mul nsw i64 %338, %345
  %347 = load i64, ptr %26, align 8, !tbaa !9
  %348 = add nsw i64 %346, %347
  %349 = getelementptr inbounds double, ptr %335, i64 %348
  store double %331, ptr %349, align 8, !tbaa !19
  %350 = load double, ptr %21, align 8, !tbaa !19
  %351 = load ptr, ptr %17, align 8, !tbaa !5
  %352 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %351, i32 0, i32 7
  %353 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %352, i32 0, i32 4
  %354 = load ptr, ptr %353, align 8, !tbaa !15
  %355 = load ptr, ptr %17, align 8, !tbaa !5
  %356 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %355, i32 0, i32 4
  %357 = load i64, ptr %356, align 8, !tbaa !26
  %358 = load i64, ptr %23, align 8, !tbaa !9
  %359 = load ptr, ptr %17, align 8, !tbaa !5
  %360 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %359, i32 0, i32 2
  %361 = load i64, ptr %360, align 8, !tbaa !23
  %362 = mul nsw i64 %358, %361
  %363 = load i64, ptr %25, align 8, !tbaa !9
  %364 = add nsw i64 %362, %363
  %365 = mul nsw i64 %357, %364
  %366 = load i64, ptr %26, align 8, !tbaa !9
  %367 = add nsw i64 %365, %366
  %368 = getelementptr inbounds double, ptr %354, i64 %367
  store double %350, ptr %368, align 8, !tbaa !19
  br label %369

369:                                              ; preds = %293
  %370 = load i64, ptr %26, align 8, !tbaa !9
  %371 = add nsw i64 %370, 1
  store i64 %371, ptr %26, align 8, !tbaa !9
  br label %286, !llvm.loop !33

372:                                              ; preds = %286
  %373 = load ptr, ptr %17, align 8, !tbaa !5
  %374 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %373, i32 0, i32 8
  %375 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %374, i32 0, i32 4
  %376 = load ptr, ptr %375, align 8, !tbaa !15
  %377 = load i64, ptr %23, align 8, !tbaa !9
  %378 = load ptr, ptr %17, align 8, !tbaa !5
  %379 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %378, i32 0, i32 2
  %380 = load i64, ptr %379, align 8, !tbaa !23
  %381 = mul nsw i64 %377, %380
  %382 = load i64, ptr %24, align 8, !tbaa !9
  %383 = add nsw i64 %381, %382
  %384 = getelementptr inbounds i8, ptr %376, i64 %383
  %385 = load i8, ptr %384, align 1, !tbaa !16, !range !17, !noundef !18
  %386 = trunc i8 %385 to i1
  %387 = zext i1 %386 to i8
  store i8 %387, ptr %22, align 1, !tbaa !16
  %388 = load ptr, ptr %17, align 8, !tbaa !5
  %389 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %388, i32 0, i32 8
  %390 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %389, i32 0, i32 4
  %391 = load ptr, ptr %390, align 8, !tbaa !15
  %392 = load i64, ptr %23, align 8, !tbaa !9
  %393 = load ptr, ptr %17, align 8, !tbaa !5
  %394 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %393, i32 0, i32 2
  %395 = load i64, ptr %394, align 8, !tbaa !23
  %396 = mul nsw i64 %392, %395
  %397 = load i64, ptr %25, align 8, !tbaa !9
  %398 = add nsw i64 %396, %397
  %399 = getelementptr inbounds i8, ptr %391, i64 %398
  %400 = load i8, ptr %399, align 1, !tbaa !16, !range !17, !noundef !18
  %401 = trunc i8 %400 to i1
  %402 = load ptr, ptr %17, align 8, !tbaa !5
  %403 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %402, i32 0, i32 8
  %404 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %403, i32 0, i32 4
  %405 = load ptr, ptr %404, align 8, !tbaa !15
  %406 = load i64, ptr %23, align 8, !tbaa !9
  %407 = load ptr, ptr %17, align 8, !tbaa !5
  %408 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %407, i32 0, i32 2
  %409 = load i64, ptr %408, align 8, !tbaa !23
  %410 = mul nsw i64 %406, %409
  %411 = load i64, ptr %24, align 8, !tbaa !9
  %412 = add nsw i64 %410, %411
  %413 = getelementptr inbounds i8, ptr %405, i64 %412
  %414 = zext i1 %401 to i8
  store i8 %414, ptr %413, align 1, !tbaa !16
  %415 = load i8, ptr %22, align 1, !tbaa !16, !range !17, !noundef !18
  %416 = trunc i8 %415 to i1
  %417 = load ptr, ptr %17, align 8, !tbaa !5
  %418 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %417, i32 0, i32 8
  %419 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %418, i32 0, i32 4
  %420 = load ptr, ptr %419, align 8, !tbaa !15
  %421 = load i64, ptr %23, align 8, !tbaa !9
  %422 = load ptr, ptr %17, align 8, !tbaa !5
  %423 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %422, i32 0, i32 2
  %424 = load i64, ptr %423, align 8, !tbaa !23
  %425 = mul nsw i64 %421, %424
  %426 = load i64, ptr %25, align 8, !tbaa !9
  %427 = add nsw i64 %425, %426
  %428 = getelementptr inbounds i8, ptr %420, i64 %427
  %429 = zext i1 %416 to i8
  store i8 %429, ptr %428, align 1, !tbaa !16
  br label %430

430:                                              ; preds = %372
  %431 = load i64, ptr %23, align 8, !tbaa !9
  %432 = add nsw i64 %431, 1
  store i64 %432, ptr %23, align 8, !tbaa !9
  br label %278, !llvm.loop !34

433:                                              ; preds = %278
  %434 = load ptr, ptr %17, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %434, i32 0, i32 5
  %436 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %435, i32 0, i32 4
  %437 = load ptr, ptr %436, align 8, !tbaa !15
  %438 = load i64, ptr %24, align 8, !tbaa !9
  %439 = getelementptr inbounds double, ptr %437, i64 %438
  %440 = load double, ptr %439, align 8, !tbaa !19
  store double %440, ptr %21, align 8, !tbaa !19
  %441 = load ptr, ptr %17, align 8, !tbaa !5
  %442 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %441, i32 0, i32 5
  %443 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %442, i32 0, i32 4
  %444 = load ptr, ptr %443, align 8, !tbaa !15
  %445 = load i64, ptr %25, align 8, !tbaa !9
  %446 = getelementptr inbounds double, ptr %444, i64 %445
  %447 = load double, ptr %446, align 8, !tbaa !19
  %448 = load ptr, ptr %17, align 8, !tbaa !5
  %449 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %448, i32 0, i32 5
  %450 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %449, i32 0, i32 4
  %451 = load ptr, ptr %450, align 8, !tbaa !15
  %452 = load i64, ptr %24, align 8, !tbaa !9
  %453 = getelementptr inbounds double, ptr %451, i64 %452
  store double %447, ptr %453, align 8, !tbaa !19
  %454 = load double, ptr %21, align 8, !tbaa !19
  %455 = load ptr, ptr %17, align 8, !tbaa !5
  %456 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %455, i32 0, i32 5
  %457 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %456, i32 0, i32 4
  %458 = load ptr, ptr %457, align 8, !tbaa !15
  %459 = load i64, ptr %25, align 8, !tbaa !9
  %460 = getelementptr inbounds double, ptr %458, i64 %459
  store double %454, ptr %460, align 8, !tbaa !19
  br label %461

461:                                              ; preds = %433, %273
  br label %462

462:                                              ; preds = %461
  %463 = load i64, ptr %24, align 8, !tbaa !9
  %464 = add nsw i64 %463, 1
  store i64 %464, ptr %24, align 8, !tbaa !9
  br label %233, !llvm.loop !35

465:                                              ; preds = %233
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %466

466:                                              ; preds = %695, %465
  %467 = load i64, ptr %23, align 8, !tbaa !9
  %468 = load ptr, ptr %17, align 8, !tbaa !5
  %469 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %468, i32 0, i32 3
  %470 = load i64, ptr %469, align 8, !tbaa !25
  %471 = sub nsw i64 %470, 1
  %472 = icmp sle i64 %467, %471
  br i1 %472, label %473, label %698

473:                                              ; preds = %466
  %474 = load i64, ptr %23, align 8, !tbaa !9
  store i64 %474, ptr %25, align 8, !tbaa !9
  %475 = load i64, ptr %23, align 8, !tbaa !9
  %476 = add nsw i64 %475, 1
  store i64 %476, ptr %24, align 8, !tbaa !9
  br label %477

477:                                              ; preds = %503, %473
  %478 = load i64, ptr %24, align 8, !tbaa !9
  %479 = load ptr, ptr %17, align 8, !tbaa !5
  %480 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %479, i32 0, i32 3
  %481 = load i64, ptr %480, align 8, !tbaa !25
  %482 = sub nsw i64 %481, 1
  %483 = icmp sle i64 %478, %482
  br i1 %483, label %484, label %506

484:                                              ; preds = %477
  %485 = load ptr, ptr %17, align 8, !tbaa !5
  %486 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %485, i32 0, i32 6
  %487 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %486, i32 0, i32 4
  %488 = load ptr, ptr %487, align 8, !tbaa !15
  %489 = load i64, ptr %24, align 8, !tbaa !9
  %490 = getelementptr inbounds double, ptr %488, i64 %489
  %491 = load double, ptr %490, align 8, !tbaa !19
  %492 = load ptr, ptr %17, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %492, i32 0, i32 6
  %494 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %493, i32 0, i32 4
  %495 = load ptr, ptr %494, align 8, !tbaa !15
  %496 = load i64, ptr %25, align 8, !tbaa !9
  %497 = getelementptr inbounds double, ptr %495, i64 %496
  %498 = load double, ptr %497, align 8, !tbaa !19
  %499 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %491, double noundef %498)
  br i1 %499, label %500, label %502

500:                                              ; preds = %484
  %501 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %501, ptr %25, align 8, !tbaa !9
  br label %502

502:                                              ; preds = %500, %484
  br label %503

503:                                              ; preds = %502
  %504 = load i64, ptr %24, align 8, !tbaa !9
  %505 = add nsw i64 %504, 1
  store i64 %505, ptr %24, align 8, !tbaa !9
  br label %477, !llvm.loop !36

506:                                              ; preds = %477
  %507 = load i64, ptr %25, align 8, !tbaa !9
  %508 = load i64, ptr %23, align 8, !tbaa !9
  %509 = icmp ne i64 %507, %508
  br i1 %509, label %510, label %694

510:                                              ; preds = %506
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %511

511:                                              ; preds = %663, %510
  %512 = load i64, ptr %24, align 8, !tbaa !9
  %513 = load ptr, ptr %17, align 8, !tbaa !5
  %514 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %513, i32 0, i32 2
  %515 = load i64, ptr %514, align 8, !tbaa !23
  %516 = sub nsw i64 %515, 1
  %517 = icmp sle i64 %512, %516
  br i1 %517, label %518, label %666

518:                                              ; preds = %511
  store i64 0, ptr %26, align 8, !tbaa !9
  br label %519

519:                                              ; preds = %602, %518
  %520 = load i64, ptr %26, align 8, !tbaa !9
  %521 = load ptr, ptr %17, align 8, !tbaa !5
  %522 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %521, i32 0, i32 4
  %523 = load i64, ptr %522, align 8, !tbaa !26
  %524 = sub nsw i64 %523, 1
  %525 = icmp sle i64 %520, %524
  br i1 %525, label %526, label %605

526:                                              ; preds = %519
  %527 = load ptr, ptr %17, align 8, !tbaa !5
  %528 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %527, i32 0, i32 7
  %529 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %528, i32 0, i32 4
  %530 = load ptr, ptr %529, align 8, !tbaa !15
  %531 = load ptr, ptr %17, align 8, !tbaa !5
  %532 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %531, i32 0, i32 4
  %533 = load i64, ptr %532, align 8, !tbaa !26
  %534 = load i64, ptr %23, align 8, !tbaa !9
  %535 = load ptr, ptr %17, align 8, !tbaa !5
  %536 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %535, i32 0, i32 2
  %537 = load i64, ptr %536, align 8, !tbaa !23
  %538 = mul nsw i64 %534, %537
  %539 = load i64, ptr %24, align 8, !tbaa !9
  %540 = add nsw i64 %538, %539
  %541 = mul nsw i64 %533, %540
  %542 = load i64, ptr %26, align 8, !tbaa !9
  %543 = add nsw i64 %541, %542
  %544 = getelementptr inbounds double, ptr %530, i64 %543
  %545 = load double, ptr %544, align 8, !tbaa !19
  store double %545, ptr %21, align 8, !tbaa !19
  %546 = load ptr, ptr %17, align 8, !tbaa !5
  %547 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %546, i32 0, i32 7
  %548 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %547, i32 0, i32 4
  %549 = load ptr, ptr %548, align 8, !tbaa !15
  %550 = load ptr, ptr %17, align 8, !tbaa !5
  %551 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %550, i32 0, i32 4
  %552 = load i64, ptr %551, align 8, !tbaa !26
  %553 = load i64, ptr %25, align 8, !tbaa !9
  %554 = load ptr, ptr %17, align 8, !tbaa !5
  %555 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %554, i32 0, i32 2
  %556 = load i64, ptr %555, align 8, !tbaa !23
  %557 = mul nsw i64 %553, %556
  %558 = load i64, ptr %24, align 8, !tbaa !9
  %559 = add nsw i64 %557, %558
  %560 = mul nsw i64 %552, %559
  %561 = load i64, ptr %26, align 8, !tbaa !9
  %562 = add nsw i64 %560, %561
  %563 = getelementptr inbounds double, ptr %549, i64 %562
  %564 = load double, ptr %563, align 8, !tbaa !19
  %565 = load ptr, ptr %17, align 8, !tbaa !5
  %566 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %565, i32 0, i32 7
  %567 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %566, i32 0, i32 4
  %568 = load ptr, ptr %567, align 8, !tbaa !15
  %569 = load ptr, ptr %17, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %569, i32 0, i32 4
  %571 = load i64, ptr %570, align 8, !tbaa !26
  %572 = load i64, ptr %23, align 8, !tbaa !9
  %573 = load ptr, ptr %17, align 8, !tbaa !5
  %574 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %573, i32 0, i32 2
  %575 = load i64, ptr %574, align 8, !tbaa !23
  %576 = mul nsw i64 %572, %575
  %577 = load i64, ptr %24, align 8, !tbaa !9
  %578 = add nsw i64 %576, %577
  %579 = mul nsw i64 %571, %578
  %580 = load i64, ptr %26, align 8, !tbaa !9
  %581 = add nsw i64 %579, %580
  %582 = getelementptr inbounds double, ptr %568, i64 %581
  store double %564, ptr %582, align 8, !tbaa !19
  %583 = load double, ptr %21, align 8, !tbaa !19
  %584 = load ptr, ptr %17, align 8, !tbaa !5
  %585 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %584, i32 0, i32 7
  %586 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %585, i32 0, i32 4
  %587 = load ptr, ptr %586, align 8, !tbaa !15
  %588 = load ptr, ptr %17, align 8, !tbaa !5
  %589 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %588, i32 0, i32 4
  %590 = load i64, ptr %589, align 8, !tbaa !26
  %591 = load i64, ptr %25, align 8, !tbaa !9
  %592 = load ptr, ptr %17, align 8, !tbaa !5
  %593 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %592, i32 0, i32 2
  %594 = load i64, ptr %593, align 8, !tbaa !23
  %595 = mul nsw i64 %591, %594
  %596 = load i64, ptr %24, align 8, !tbaa !9
  %597 = add nsw i64 %595, %596
  %598 = mul nsw i64 %590, %597
  %599 = load i64, ptr %26, align 8, !tbaa !9
  %600 = add nsw i64 %598, %599
  %601 = getelementptr inbounds double, ptr %587, i64 %600
  store double %583, ptr %601, align 8, !tbaa !19
  br label %602

602:                                              ; preds = %526
  %603 = load i64, ptr %26, align 8, !tbaa !9
  %604 = add nsw i64 %603, 1
  store i64 %604, ptr %26, align 8, !tbaa !9
  br label %519, !llvm.loop !37

605:                                              ; preds = %519
  %606 = load ptr, ptr %17, align 8, !tbaa !5
  %607 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %606, i32 0, i32 8
  %608 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %607, i32 0, i32 4
  %609 = load ptr, ptr %608, align 8, !tbaa !15
  %610 = load i64, ptr %23, align 8, !tbaa !9
  %611 = load ptr, ptr %17, align 8, !tbaa !5
  %612 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %611, i32 0, i32 2
  %613 = load i64, ptr %612, align 8, !tbaa !23
  %614 = mul nsw i64 %610, %613
  %615 = load i64, ptr %24, align 8, !tbaa !9
  %616 = add nsw i64 %614, %615
  %617 = getelementptr inbounds i8, ptr %609, i64 %616
  %618 = load i8, ptr %617, align 1, !tbaa !16, !range !17, !noundef !18
  %619 = trunc i8 %618 to i1
  %620 = zext i1 %619 to i8
  store i8 %620, ptr %22, align 1, !tbaa !16
  %621 = load ptr, ptr %17, align 8, !tbaa !5
  %622 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %621, i32 0, i32 8
  %623 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %622, i32 0, i32 4
  %624 = load ptr, ptr %623, align 8, !tbaa !15
  %625 = load i64, ptr %25, align 8, !tbaa !9
  %626 = load ptr, ptr %17, align 8, !tbaa !5
  %627 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %626, i32 0, i32 2
  %628 = load i64, ptr %627, align 8, !tbaa !23
  %629 = mul nsw i64 %625, %628
  %630 = load i64, ptr %24, align 8, !tbaa !9
  %631 = add nsw i64 %629, %630
  %632 = getelementptr inbounds i8, ptr %624, i64 %631
  %633 = load i8, ptr %632, align 1, !tbaa !16, !range !17, !noundef !18
  %634 = trunc i8 %633 to i1
  %635 = load ptr, ptr %17, align 8, !tbaa !5
  %636 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %635, i32 0, i32 8
  %637 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %636, i32 0, i32 4
  %638 = load ptr, ptr %637, align 8, !tbaa !15
  %639 = load i64, ptr %23, align 8, !tbaa !9
  %640 = load ptr, ptr %17, align 8, !tbaa !5
  %641 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %640, i32 0, i32 2
  %642 = load i64, ptr %641, align 8, !tbaa !23
  %643 = mul nsw i64 %639, %642
  %644 = load i64, ptr %24, align 8, !tbaa !9
  %645 = add nsw i64 %643, %644
  %646 = getelementptr inbounds i8, ptr %638, i64 %645
  %647 = zext i1 %634 to i8
  store i8 %647, ptr %646, align 1, !tbaa !16
  %648 = load i8, ptr %22, align 1, !tbaa !16, !range !17, !noundef !18
  %649 = trunc i8 %648 to i1
  %650 = load ptr, ptr %17, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %650, i32 0, i32 8
  %652 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %651, i32 0, i32 4
  %653 = load ptr, ptr %652, align 8, !tbaa !15
  %654 = load i64, ptr %25, align 8, !tbaa !9
  %655 = load ptr, ptr %17, align 8, !tbaa !5
  %656 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %655, i32 0, i32 2
  %657 = load i64, ptr %656, align 8, !tbaa !23
  %658 = mul nsw i64 %654, %657
  %659 = load i64, ptr %24, align 8, !tbaa !9
  %660 = add nsw i64 %658, %659
  %661 = getelementptr inbounds i8, ptr %653, i64 %660
  %662 = zext i1 %649 to i8
  store i8 %662, ptr %661, align 1, !tbaa !16
  br label %663

663:                                              ; preds = %605
  %664 = load i64, ptr %24, align 8, !tbaa !9
  %665 = add nsw i64 %664, 1
  store i64 %665, ptr %24, align 8, !tbaa !9
  br label %511, !llvm.loop !38

666:                                              ; preds = %511
  %667 = load ptr, ptr %17, align 8, !tbaa !5
  %668 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %667, i32 0, i32 6
  %669 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %668, i32 0, i32 4
  %670 = load ptr, ptr %669, align 8, !tbaa !15
  %671 = load i64, ptr %23, align 8, !tbaa !9
  %672 = getelementptr inbounds double, ptr %670, i64 %671
  %673 = load double, ptr %672, align 8, !tbaa !19
  store double %673, ptr %21, align 8, !tbaa !19
  %674 = load ptr, ptr %17, align 8, !tbaa !5
  %675 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %674, i32 0, i32 6
  %676 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %675, i32 0, i32 4
  %677 = load ptr, ptr %676, align 8, !tbaa !15
  %678 = load i64, ptr %25, align 8, !tbaa !9
  %679 = getelementptr inbounds double, ptr %677, i64 %678
  %680 = load double, ptr %679, align 8, !tbaa !19
  %681 = load ptr, ptr %17, align 8, !tbaa !5
  %682 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %681, i32 0, i32 6
  %683 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %682, i32 0, i32 4
  %684 = load ptr, ptr %683, align 8, !tbaa !15
  %685 = load i64, ptr %23, align 8, !tbaa !9
  %686 = getelementptr inbounds double, ptr %684, i64 %685
  store double %680, ptr %686, align 8, !tbaa !19
  %687 = load double, ptr %21, align 8, !tbaa !19
  %688 = load ptr, ptr %17, align 8, !tbaa !5
  %689 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %688, i32 0, i32 6
  %690 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %689, i32 0, i32 4
  %691 = load ptr, ptr %690, align 8, !tbaa !15
  %692 = load i64, ptr %25, align 8, !tbaa !9
  %693 = getelementptr inbounds double, ptr %691, i64 %692
  store double %687, ptr %693, align 8, !tbaa !19
  br label %694

694:                                              ; preds = %666, %506
  br label %695

695:                                              ; preds = %694
  %696 = load i64, ptr %23, align 8, !tbaa !9
  %697 = add nsw i64 %696, 1
  store i64 %697, ptr %23, align 8, !tbaa !9
  br label %466, !llvm.loop !39

698:                                              ; preds = %466
  %699 = load ptr, ptr %17, align 8, !tbaa !5
  %700 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %699, i32 0, i32 3
  %701 = load i64, ptr %700, align 8, !tbaa !25
  %702 = sub nsw i64 %701, 1
  %703 = load ptr, ptr %17, align 8, !tbaa !5
  %704 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %703, i32 0, i32 2
  %705 = load i64, ptr %704, align 8, !tbaa !23
  %706 = sub nsw i64 %705, 1
  %707 = mul nsw i64 %702, %706
  %708 = load ptr, ptr %17, align 8, !tbaa !5
  %709 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %708, i32 0, i32 9
  %710 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl10bsetallocvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %707, i1 noundef zeroext true, ptr noundef %709, ptr noundef %710)
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %711

711:                                              ; preds = %809, %698
  %712 = load i64, ptr %23, align 8, !tbaa !9
  %713 = load ptr, ptr %17, align 8, !tbaa !5
  %714 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %713, i32 0, i32 3
  %715 = load i64, ptr %714, align 8, !tbaa !25
  %716 = sub nsw i64 %715, 2
  %717 = icmp sle i64 %712, %716
  br i1 %717, label %718, label %812

718:                                              ; preds = %711
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %719

719:                                              ; preds = %805, %718
  %720 = load i64, ptr %24, align 8, !tbaa !9
  %721 = load ptr, ptr %17, align 8, !tbaa !5
  %722 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %721, i32 0, i32 2
  %723 = load i64, ptr %722, align 8, !tbaa !23
  %724 = sub nsw i64 %723, 2
  %725 = icmp sle i64 %720, %724
  br i1 %725, label %726, label %808

726:                                              ; preds = %719
  %727 = load ptr, ptr %17, align 8, !tbaa !5
  %728 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %727, i32 0, i32 8
  %729 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %728, i32 0, i32 4
  %730 = load ptr, ptr %729, align 8, !tbaa !15
  %731 = load i64, ptr %23, align 8, !tbaa !9
  %732 = load ptr, ptr %17, align 8, !tbaa !5
  %733 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %732, i32 0, i32 2
  %734 = load i64, ptr %733, align 8, !tbaa !23
  %735 = mul nsw i64 %731, %734
  %736 = load i64, ptr %24, align 8, !tbaa !9
  %737 = add nsw i64 %735, %736
  %738 = getelementptr inbounds i8, ptr %730, i64 %737
  %739 = load i8, ptr %738, align 1, !tbaa !16, !range !17, !noundef !18
  %740 = trunc i8 %739 to i1
  br i1 %740, label %804, label %741

741:                                              ; preds = %726
  %742 = load ptr, ptr %17, align 8, !tbaa !5
  %743 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %742, i32 0, i32 8
  %744 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %743, i32 0, i32 4
  %745 = load ptr, ptr %744, align 8, !tbaa !15
  %746 = load i64, ptr %23, align 8, !tbaa !9
  %747 = add nsw i64 %746, 1
  %748 = load ptr, ptr %17, align 8, !tbaa !5
  %749 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %748, i32 0, i32 2
  %750 = load i64, ptr %749, align 8, !tbaa !23
  %751 = mul nsw i64 %747, %750
  %752 = load i64, ptr %24, align 8, !tbaa !9
  %753 = add nsw i64 %751, %752
  %754 = getelementptr inbounds i8, ptr %745, i64 %753
  %755 = load i8, ptr %754, align 1, !tbaa !16, !range !17, !noundef !18
  %756 = trunc i8 %755 to i1
  br i1 %756, label %804, label %757

757:                                              ; preds = %741
  %758 = load ptr, ptr %17, align 8, !tbaa !5
  %759 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %758, i32 0, i32 8
  %760 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %759, i32 0, i32 4
  %761 = load ptr, ptr %760, align 8, !tbaa !15
  %762 = load i64, ptr %23, align 8, !tbaa !9
  %763 = load ptr, ptr %17, align 8, !tbaa !5
  %764 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %763, i32 0, i32 2
  %765 = load i64, ptr %764, align 8, !tbaa !23
  %766 = mul nsw i64 %762, %765
  %767 = load i64, ptr %24, align 8, !tbaa !9
  %768 = add nsw i64 %767, 1
  %769 = add nsw i64 %766, %768
  %770 = getelementptr inbounds i8, ptr %761, i64 %769
  %771 = load i8, ptr %770, align 1, !tbaa !16, !range !17, !noundef !18
  %772 = trunc i8 %771 to i1
  br i1 %772, label %804, label %773

773:                                              ; preds = %757
  %774 = load ptr, ptr %17, align 8, !tbaa !5
  %775 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %774, i32 0, i32 8
  %776 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %775, i32 0, i32 4
  %777 = load ptr, ptr %776, align 8, !tbaa !15
  %778 = load i64, ptr %23, align 8, !tbaa !9
  %779 = add nsw i64 %778, 1
  %780 = load ptr, ptr %17, align 8, !tbaa !5
  %781 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %780, i32 0, i32 2
  %782 = load i64, ptr %781, align 8, !tbaa !23
  %783 = mul nsw i64 %779, %782
  %784 = load i64, ptr %24, align 8, !tbaa !9
  %785 = add nsw i64 %784, 1
  %786 = add nsw i64 %783, %785
  %787 = getelementptr inbounds i8, ptr %777, i64 %786
  %788 = load i8, ptr %787, align 1, !tbaa !16, !range !17, !noundef !18
  %789 = trunc i8 %788 to i1
  br i1 %789, label %804, label %790

790:                                              ; preds = %773
  %791 = load ptr, ptr %17, align 8, !tbaa !5
  %792 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %791, i32 0, i32 9
  %793 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %792, i32 0, i32 4
  %794 = load ptr, ptr %793, align 8, !tbaa !15
  %795 = load i64, ptr %23, align 8, !tbaa !9
  %796 = load ptr, ptr %17, align 8, !tbaa !5
  %797 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %796, i32 0, i32 2
  %798 = load i64, ptr %797, align 8, !tbaa !23
  %799 = sub nsw i64 %798, 1
  %800 = mul nsw i64 %795, %799
  %801 = load i64, ptr %24, align 8, !tbaa !9
  %802 = add nsw i64 %800, %801
  %803 = getelementptr inbounds i8, ptr %794, i64 %802
  store i8 0, ptr %803, align 1, !tbaa !16
  br label %804

804:                                              ; preds = %790, %773, %757, %741, %726
  br label %805

805:                                              ; preds = %804
  %806 = load i64, ptr %24, align 8, !tbaa !9
  %807 = add nsw i64 %806, 1
  store i64 %807, ptr %24, align 8, !tbaa !9
  br label %719, !llvm.loop !40

808:                                              ; preds = %719
  br label %809

809:                                              ; preds = %808
  %810 = load i64, ptr %23, align 8, !tbaa !9
  %811 = add nsw i64 %810, 1
  store i64 %811, ptr %23, align 8, !tbaa !9
  br label %711, !llvm.loop !41

812:                                              ; preds = %711
  %813 = load ptr, ptr %17, align 8, !tbaa !5
  %814 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %813, i32 0, i32 3
  %815 = load i64, ptr %814, align 8, !tbaa !25
  %816 = load ptr, ptr %17, align 8, !tbaa !5
  %817 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %816, i32 0, i32 2
  %818 = load i64, ptr %817, align 8, !tbaa !23
  %819 = mul nsw i64 %815, %818
  %820 = load ptr, ptr %17, align 8, !tbaa !5
  %821 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %820, i32 0, i32 8
  %822 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl5bsetvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %819, i1 noundef zeroext true, ptr noundef %821, ptr noundef %822)
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %823

823:                                              ; preds = %912, %812
  %824 = load i64, ptr %23, align 8, !tbaa !9
  %825 = load ptr, ptr %17, align 8, !tbaa !5
  %826 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %825, i32 0, i32 3
  %827 = load i64, ptr %826, align 8, !tbaa !25
  %828 = sub nsw i64 %827, 2
  %829 = icmp sle i64 %824, %828
  br i1 %829, label %830, label %915

830:                                              ; preds = %823
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %831

831:                                              ; preds = %908, %830
  %832 = load i64, ptr %24, align 8, !tbaa !9
  %833 = load ptr, ptr %17, align 8, !tbaa !5
  %834 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %833, i32 0, i32 2
  %835 = load i64, ptr %834, align 8, !tbaa !23
  %836 = sub nsw i64 %835, 2
  %837 = icmp sle i64 %832, %836
  br i1 %837, label %838, label %911

838:                                              ; preds = %831
  %839 = load ptr, ptr %17, align 8, !tbaa !5
  %840 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %839, i32 0, i32 9
  %841 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %840, i32 0, i32 4
  %842 = load ptr, ptr %841, align 8, !tbaa !15
  %843 = load i64, ptr %23, align 8, !tbaa !9
  %844 = load ptr, ptr %17, align 8, !tbaa !5
  %845 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %844, i32 0, i32 2
  %846 = load i64, ptr %845, align 8, !tbaa !23
  %847 = sub nsw i64 %846, 1
  %848 = mul nsw i64 %843, %847
  %849 = load i64, ptr %24, align 8, !tbaa !9
  %850 = add nsw i64 %848, %849
  %851 = getelementptr inbounds i8, ptr %842, i64 %850
  %852 = load i8, ptr %851, align 1, !tbaa !16, !range !17, !noundef !18
  %853 = trunc i8 %852 to i1
  br i1 %853, label %907, label %854

854:                                              ; preds = %838
  %855 = load ptr, ptr %17, align 8, !tbaa !5
  %856 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %855, i32 0, i32 8
  %857 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %856, i32 0, i32 4
  %858 = load ptr, ptr %857, align 8, !tbaa !15
  %859 = load i64, ptr %23, align 8, !tbaa !9
  %860 = load ptr, ptr %17, align 8, !tbaa !5
  %861 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %860, i32 0, i32 2
  %862 = load i64, ptr %861, align 8, !tbaa !23
  %863 = mul nsw i64 %859, %862
  %864 = load i64, ptr %24, align 8, !tbaa !9
  %865 = add nsw i64 %863, %864
  %866 = getelementptr inbounds i8, ptr %858, i64 %865
  store i8 0, ptr %866, align 1, !tbaa !16
  %867 = load ptr, ptr %17, align 8, !tbaa !5
  %868 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %867, i32 0, i32 8
  %869 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %868, i32 0, i32 4
  %870 = load ptr, ptr %869, align 8, !tbaa !15
  %871 = load i64, ptr %23, align 8, !tbaa !9
  %872 = add nsw i64 %871, 1
  %873 = load ptr, ptr %17, align 8, !tbaa !5
  %874 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %873, i32 0, i32 2
  %875 = load i64, ptr %874, align 8, !tbaa !23
  %876 = mul nsw i64 %872, %875
  %877 = load i64, ptr %24, align 8, !tbaa !9
  %878 = add nsw i64 %876, %877
  %879 = getelementptr inbounds i8, ptr %870, i64 %878
  store i8 0, ptr %879, align 1, !tbaa !16
  %880 = load ptr, ptr %17, align 8, !tbaa !5
  %881 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %880, i32 0, i32 8
  %882 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %881, i32 0, i32 4
  %883 = load ptr, ptr %882, align 8, !tbaa !15
  %884 = load i64, ptr %23, align 8, !tbaa !9
  %885 = load ptr, ptr %17, align 8, !tbaa !5
  %886 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %885, i32 0, i32 2
  %887 = load i64, ptr %886, align 8, !tbaa !23
  %888 = mul nsw i64 %884, %887
  %889 = load i64, ptr %24, align 8, !tbaa !9
  %890 = add nsw i64 %889, 1
  %891 = add nsw i64 %888, %890
  %892 = getelementptr inbounds i8, ptr %883, i64 %891
  store i8 0, ptr %892, align 1, !tbaa !16
  %893 = load ptr, ptr %17, align 8, !tbaa !5
  %894 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %893, i32 0, i32 8
  %895 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %894, i32 0, i32 4
  %896 = load ptr, ptr %895, align 8, !tbaa !15
  %897 = load i64, ptr %23, align 8, !tbaa !9
  %898 = add nsw i64 %897, 1
  %899 = load ptr, ptr %17, align 8, !tbaa !5
  %900 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %899, i32 0, i32 2
  %901 = load i64, ptr %900, align 8, !tbaa !23
  %902 = mul nsw i64 %898, %901
  %903 = load i64, ptr %24, align 8, !tbaa !9
  %904 = add nsw i64 %903, 1
  %905 = add nsw i64 %902, %904
  %906 = getelementptr inbounds i8, ptr %896, i64 %905
  store i8 0, ptr %906, align 1, !tbaa !16
  br label %907

907:                                              ; preds = %854, %838
  br label %908

908:                                              ; preds = %907
  %909 = load i64, ptr %24, align 8, !tbaa !9
  %910 = add nsw i64 %909, 1
  store i64 %910, ptr %24, align 8, !tbaa !9
  br label %831, !llvm.loop !42

911:                                              ; preds = %831
  br label %912

912:                                              ; preds = %911
  %913 = load i64, ptr %23, align 8, !tbaa !9
  %914 = add nsw i64 %913, 1
  store i64 %914, ptr %23, align 8, !tbaa !9
  br label %823, !llvm.loop !43

915:                                              ; preds = %823
  %916 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %916)
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 1, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %19) #4
  ret void
}

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

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

declare void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef, ptr noundef) #2

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) #2

declare void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef, ptr noundef, ptr noundef, i1 noundef zeroext) #2

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

declare noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #2

declare void @_ZN11alglib_impl10rsetallocvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, ptr noundef) #2

declare void @_ZN11alglib_impl10bsetallocvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, i1 noundef zeroext, ptr noundef, ptr noundef) #2

declare void @_ZN11alglib_impl5bsetvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, i1 noundef zeroext, ptr noundef, ptr noundef) #2

declare void @_ZN11alglib_impl11bcopyallocvElPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTSN11alglib_impl9ae_vectorE", !10, i64 0, !10, 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 = !{!7, !7, i64 0}
!16 = !{!13, !13, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = !{!20, !20, i64 0}
!20 = !{!"double", !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!24, !10, i64 16}
!24 = !{!"_ZTSN11alglib_impl19spline2dinterpolantE", !10, i64 0, !13, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !12, i64 40, !12, i64 104, !12, i64 168, !12, i64 232, !12, i64 296}
!25 = !{!24, !10, i64 24}
!26 = !{!24, !10, i64 32}
!27 = !{!24, !10, i64 0}
!28 = !{!24, !13, i64 8}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !22}
!37 = distinct !{!37, !22}
!38 = distinct !{!38, !22}
!39 = distinct !{!39, !22}
!40 = distinct !{!40, !22}
!41 = distinct !{!41, !22}
!42 = distinct !{!42, !22}
!43 = distinct !{!43, !22}


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

%"struct.alglib_impl::ae_frame" = type { %"struct.alglib_impl::ae_dyn_block" }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%union.anon.0 = type { ptr }

@.str.832 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.833 = external hidden unnamed_addr constant [47 x i8], align 1
@.str.834 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.835 = external hidden unnamed_addr constant [78 x i8], align 1
@.str.836 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.837 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.838 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.839 = external hidden unnamed_addr constant [81 x i8], align 1

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl31spline2dbuildbilinearmissingbufEPKNS_9ae_vectorElS2_lS2_S2_lPNS_19spline2dinterpolantEPNS_8ae_stateE(ptr noundef %0, i64 noundef %1, ptr noundef %2, i64 noundef %3, ptr noundef %4, ptr noundef %5, i64 noundef %6, ptr noundef %7, ptr noundef %8) local_unnamed_addr #3 {
  %10 = alloca %"struct.alglib_impl::ae_frame", align 8
  %11 = alloca %"struct.alglib_impl::ae_vector", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #4
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %8, ptr noundef nonnull %10)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %11, i8 0, i64 64, i1 false)
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef nonnull %11, ptr noundef %4, ptr noundef %8, i1 noundef zeroext true)
  %12 = icmp sgt i64 %1, 1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %12, ptr noundef nonnull @.str.832, ptr noundef %8)
  %13 = icmp sgt i64 %3, 1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %13, ptr noundef nonnull @.str.833, ptr noundef %8)
  %14 = icmp sgt i64 %6, 0
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %14, ptr noundef nonnull @.str.834, ptr noundef %8)
  %15 = load i64, ptr %0, align 8, !tbaa !5
  %.not = icmp slt i64 %15, %1
  br i1 %.not, label %19, label %16

16:                                               ; preds = %9
  %17 = load i64, ptr %2, align 8, !tbaa !5
  %18 = icmp sge i64 %17, %3
  br label %19

19:                                               ; preds = %16, %9
  %20 = phi i1 [ false, %9 ], [ %18, %16 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %20, ptr noundef nonnull @.str.835, ptr noundef %8)
  %21 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %0, i64 noundef %1, ptr noundef %8)
  br i1 %21, label %22, label %24

22:                                               ; preds = %19
  %23 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %2, i64 noundef %3, ptr noundef %8)
  br label %24

24:                                               ; preds = %22, %19
  %25 = phi i1 [ false, %19 ], [ %23, %22 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %25, ptr noundef nonnull @.str.836, ptr noundef %8)
  %26 = mul nsw i64 %3, %1
  %27 = mul nsw i64 %26, %6
  %28 = load i64, ptr %11, align 8, !tbaa !5
  %29 = icmp sge i64 %28, %27
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %29, ptr noundef nonnull @.str.837, ptr noundef %8)
  %30 = load i64, ptr %5, align 8, !tbaa !5
  %31 = icmp sge i64 %30, %26
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %31, ptr noundef nonnull @.str.838, ptr noundef %8)
  %.not301.not332 = icmp sgt i64 %27, 0
  br i1 %.not301.not332, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %24
  %32 = getelementptr inbounds i8, ptr %5, i64 56
  %33 = getelementptr inbounds i8, ptr %11, i64 56
  br label %34

34:                                               ; preds = %.lr.ph, %46
  %.0294333 = phi i64 [ 0, %.lr.ph ], [ %47, %46 ]
  %35 = load ptr, ptr %32, align 8, !tbaa !13
  %36 = sdiv i64 %.0294333, %6
  %37 = getelementptr inbounds i8, ptr %35, i64 %36
  %38 = load i8, ptr %37, align 1, !tbaa !14, !range !15, !noundef !16
  %39 = trunc nuw i8 %38 to i1
  br i1 %39, label %46, label %40

40:                                               ; preds = %34
  %41 = load ptr, ptr %33, align 8, !tbaa !13
  %42 = getelementptr inbounds double, ptr %41, i64 %.0294333
  %43 = load double, ptr %42, align 8, !tbaa !17
  %44 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %43, ptr noundef %8)
  br i1 %44, label %46, label %45

45:                                               ; preds = %40
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.839, ptr noundef %8)
  br label %46

46:                                               ; preds = %34, %40, %45
  %47 = add nuw nsw i64 %.0294333, 1
  %exitcond.not = icmp eq i64 %47, %27
  br i1 %exitcond.not, label %._crit_edge, label %34, !llvm.loop !19

._crit_edge:                                      ; preds = %46, %24
  %48 = getelementptr inbounds i8, ptr %7, i64 16
  store i64 %1, ptr %48, align 8, !tbaa !21
  %49 = getelementptr inbounds i8, ptr %7, i64 24
  store i64 %3, ptr %49, align 8, !tbaa !23
  %50 = getelementptr inbounds i8, ptr %7, i64 32
  store i64 %6, ptr %50, align 8, !tbaa !24
  store i64 -1, ptr %7, align 8, !tbaa !25
  %51 = getelementptr inbounds i8, ptr %7, i64 8
  store i8 1, ptr %51, align 8, !tbaa !26
  %52 = getelementptr inbounds i8, ptr %7, i64 40
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %52, i64 noundef %1, ptr noundef %8)
  %53 = getelementptr inbounds i8, ptr %7, i64 104
  %54 = load i64, ptr %49, align 8, !tbaa !23
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %53, i64 noundef %54, ptr noundef %8)
  %55 = getelementptr inbounds i8, ptr %7, i64 168
  call void @_ZN11alglib_impl10rsetallocvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %27, double noundef 0.000000e+00, ptr noundef nonnull %55, ptr noundef %8)
  %56 = load i64, ptr %48, align 8, !tbaa !21
  %.not302.not334 = icmp sgt i64 %56, 0
  br i1 %.not302.not334, label %.lr.ph337, label %.preheader327

.lr.ph337:                                        ; preds = %._crit_edge
  %57 = getelementptr inbounds i8, ptr %0, i64 56
  %58 = getelementptr inbounds i8, ptr %7, i64 96
  %xtraiter = and i64 %56, 3
  %59 = icmp ult i64 %56, 4
  br i1 %59, label %.preheader327.loopexit.unr-lcssa, label %.lr.ph337.new

.lr.ph337.new:                                    ; preds = %.lr.ph337
  %unroll_iter = and i64 %56, 9223372036854775804
  br label %70

.preheader327.loopexit.unr-lcssa:                 ; preds = %70, %.lr.ph337
  %.1295335.unr = phi i64 [ 0, %.lr.ph337 ], [ %94, %70 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader327, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader327.loopexit.unr-lcssa, %.epil.preheader
  %.1295335.epil = phi i64 [ %65, %.epil.preheader ], [ %.1295335.unr, %.preheader327.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader327.loopexit.unr-lcssa ]
  %60 = load ptr, ptr %57, align 8, !tbaa !13
  %61 = getelementptr inbounds double, ptr %60, i64 %.1295335.epil
  %62 = load double, ptr %61, align 8, !tbaa !17
  %63 = load ptr, ptr %58, align 8, !tbaa !13
  %64 = getelementptr inbounds double, ptr %63, i64 %.1295335.epil
  store double %62, ptr %64, align 8, !tbaa !17
  %65 = add nuw nsw i64 %.1295335.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 %.preheader327, label %.epil.preheader, !llvm.loop !27

.preheader327:                                    ; preds = %.preheader327.loopexit.unr-lcssa, %.epil.preheader, %._crit_edge
  %66 = load i64, ptr %49, align 8, !tbaa !23
  %.not303.not338 = icmp sgt i64 %66, 0
  br i1 %.not303.not338, label %.lr.ph340, label %.preheader326

.lr.ph340:                                        ; preds = %.preheader327
  %67 = getelementptr inbounds i8, ptr %2, i64 56
  %68 = getelementptr inbounds i8, ptr %7, i64 160
  %xtraiter441 = and i64 %66, 3
  %69 = icmp ult i64 %66, 4
  br i1 %69, label %.preheader326.loopexit.unr-lcssa, label %.lr.ph340.new

.lr.ph340.new:                                    ; preds = %.lr.ph340
  %unroll_iter444 = and i64 %66, 9223372036854775804
  br label %104

70:                                               ; preds = %70, %.lr.ph337.new
  %.1295335 = phi i64 [ 0, %.lr.ph337.new ], [ %94, %70 ]
  %niter = phi i64 [ 0, %.lr.ph337.new ], [ %niter.next.3, %70 ]
  %71 = load ptr, ptr %57, align 8, !tbaa !13
  %72 = getelementptr inbounds double, ptr %71, i64 %.1295335
  %73 = load double, ptr %72, align 8, !tbaa !17
  %74 = load ptr, ptr %58, align 8, !tbaa !13
  %75 = getelementptr inbounds double, ptr %74, i64 %.1295335
  store double %73, ptr %75, align 8, !tbaa !17
  %76 = or disjoint i64 %.1295335, 1
  %77 = load ptr, ptr %57, align 8, !tbaa !13
  %78 = getelementptr inbounds double, ptr %77, i64 %76
  %79 = load double, ptr %78, align 8, !tbaa !17
  %80 = load ptr, ptr %58, align 8, !tbaa !13
  %81 = getelementptr inbounds double, ptr %80, i64 %76
  store double %79, ptr %81, align 8, !tbaa !17
  %82 = or disjoint i64 %.1295335, 2
  %83 = load ptr, ptr %57, align 8, !tbaa !13
  %84 = getelementptr inbounds double, ptr %83, i64 %82
  %85 = load double, ptr %84, align 8, !tbaa !17
  %86 = load ptr, ptr %58, align 8, !tbaa !13
  %87 = getelementptr inbounds double, ptr %86, i64 %82
  store double %85, ptr %87, align 8, !tbaa !17
  %88 = or disjoint i64 %.1295335, 3
  %89 = load ptr, ptr %57, align 8, !tbaa !13
  %90 = getelementptr inbounds double, ptr %89, i64 %88
  %91 = load double, ptr %90, align 8, !tbaa !17
  %92 = load ptr, ptr %58, align 8, !tbaa !13
  %93 = getelementptr inbounds double, ptr %92, i64 %88
  store double %91, ptr %93, align 8, !tbaa !17
  %94 = add nuw nsw i64 %.1295335, 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 %.preheader327.loopexit.unr-lcssa, label %70, !llvm.loop !29

.preheader326.loopexit.unr-lcssa:                 ; preds = %104, %.lr.ph340
  %.2296339.unr = phi i64 [ 0, %.lr.ph340 ], [ %128, %104 ]
  %lcmp.mod443.not = icmp eq i64 %xtraiter441, 0
  br i1 %lcmp.mod443.not, label %.preheader326, label %.epil.preheader440

.epil.preheader440:                               ; preds = %.preheader326.loopexit.unr-lcssa, %.epil.preheader440
  %.2296339.epil = phi i64 [ %100, %.epil.preheader440 ], [ %.2296339.unr, %.preheader326.loopexit.unr-lcssa ]
  %epil.iter442 = phi i64 [ %epil.iter442.next, %.epil.preheader440 ], [ 0, %.preheader326.loopexit.unr-lcssa ]
  %95 = load ptr, ptr %67, align 8, !tbaa !13
  %96 = getelementptr inbounds double, ptr %95, i64 %.2296339.epil
  %97 = load double, ptr %96, align 8, !tbaa !17
  %98 = load ptr, ptr %68, align 8, !tbaa !13
  %99 = getelementptr inbounds double, ptr %98, i64 %.2296339.epil
  store double %97, ptr %99, align 8, !tbaa !17
  %100 = add nuw nsw i64 %.2296339.epil, 1
  %epil.iter442.next = add i64 %epil.iter442, 1
  %epil.iter442.cmp.not = icmp eq i64 %epil.iter442.next, %xtraiter441
  br i1 %epil.iter442.cmp.not, label %.preheader326, label %.epil.preheader440, !llvm.loop !30

.preheader326:                                    ; preds = %.preheader326.loopexit.unr-lcssa, %.epil.preheader440, %.preheader327
  br i1 %.not301.not332, label %.lr.ph344, label %._crit_edge345

.lr.ph344:                                        ; preds = %.preheader326
  %101 = getelementptr inbounds i8, ptr %5, i64 56
  %102 = getelementptr inbounds i8, ptr %11, i64 56
  %103 = getelementptr inbounds i8, ptr %7, i64 224
  br label %129

104:                                              ; preds = %104, %.lr.ph340.new
  %.2296339 = phi i64 [ 0, %.lr.ph340.new ], [ %128, %104 ]
  %niter445 = phi i64 [ 0, %.lr.ph340.new ], [ %niter445.next.3, %104 ]
  %105 = load ptr, ptr %67, align 8, !tbaa !13
  %106 = getelementptr inbounds double, ptr %105, i64 %.2296339
  %107 = load double, ptr %106, align 8, !tbaa !17
  %108 = load ptr, ptr %68, align 8, !tbaa !13
  %109 = getelementptr inbounds double, ptr %108, i64 %.2296339
  store double %107, ptr %109, align 8, !tbaa !17
  %110 = or disjoint i64 %.2296339, 1
  %111 = load ptr, ptr %67, align 8, !tbaa !13
  %112 = getelementptr inbounds double, ptr %111, i64 %110
  %113 = load double, ptr %112, align 8, !tbaa !17
  %114 = load ptr, ptr %68, align 8, !tbaa !13
  %115 = getelementptr inbounds double, ptr %114, i64 %110
  store double %113, ptr %115, align 8, !tbaa !17
  %116 = or disjoint i64 %.2296339, 2
  %117 = load ptr, ptr %67, align 8, !tbaa !13
  %118 = getelementptr inbounds double, ptr %117, i64 %116
  %119 = load double, ptr %118, align 8, !tbaa !17
  %120 = load ptr, ptr %68, align 8, !tbaa !13
  %121 = getelementptr inbounds double, ptr %120, i64 %116
  store double %119, ptr %121, align 8, !tbaa !17
  %122 = or disjoint i64 %.2296339, 3
  %123 = load ptr, ptr %67, align 8, !tbaa !13
  %124 = getelementptr inbounds double, ptr %123, i64 %122
  %125 = load double, ptr %124, align 8, !tbaa !17
  %126 = load ptr, ptr %68, align 8, !tbaa !13
  %127 = getelementptr inbounds double, ptr %126, i64 %122
  store double %125, ptr %127, align 8, !tbaa !17
  %128 = add nuw nsw i64 %.2296339, 4
  %niter445.next.3 = add i64 %niter445, 4
  %niter445.ncmp.3 = icmp eq i64 %niter445.next.3, %unroll_iter444
  br i1 %niter445.ncmp.3, label %.preheader326.loopexit.unr-lcssa, label %104, !llvm.loop !31

129:                                              ; preds = %.lr.ph344, %141
  %.3297343 = phi i64 [ 0, %.lr.ph344 ], [ %142, %141 ]
  %130 = load ptr, ptr %101, align 8, !tbaa !13
  %131 = sdiv i64 %.3297343, %6
  %132 = getelementptr inbounds i8, ptr %130, i64 %131
  %133 = load i8, ptr %132, align 1, !tbaa !14, !range !15, !noundef !16
  %134 = trunc nuw i8 %133 to i1
  br i1 %134, label %141, label %135

135:                                              ; preds = %129
  %136 = load ptr, ptr %102, align 8, !tbaa !13
  %137 = getelementptr inbounds double, ptr %136, i64 %.3297343
  %138 = load double, ptr %137, align 8, !tbaa !17
  %139 = load ptr, ptr %103, align 8, !tbaa !13
  %140 = getelementptr inbounds double, ptr %139, i64 %.3297343
  store double %138, ptr %140, align 8, !tbaa !17
  br label %141

141:                                              ; preds = %129, %135
  %142 = add nuw nsw i64 %.3297343, 1
  %exitcond407.not = icmp eq i64 %142, %27
  br i1 %exitcond407.not, label %._crit_edge345, label %129, !llvm.loop !32

._crit_edge345:                                   ; preds = %141, %.preheader326
  %143 = mul nsw i64 %66, %56
  %144 = getelementptr inbounds i8, ptr %7, i64 232
  call void @_ZN11alglib_impl11bcopyallocvElPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef %143, ptr noundef nonnull %5, ptr noundef nonnull %144, ptr noundef %8)
  %145 = load i64, ptr %48, align 8, !tbaa !21
  %.not305.not361 = icmp sgt i64 %145, 0
  br i1 %.not305.not361, label %.lr.ph365, label %.preheader323

.lr.ph365:                                        ; preds = %._crit_edge345
  %146 = getelementptr inbounds i8, ptr %7, i64 96
  %147 = getelementptr inbounds i8, ptr %7, i64 224
  %148 = getelementptr inbounds i8, ptr %7, i64 288
  br label %154

.preheader323:                                    ; preds = %._crit_edge351.thread, %._crit_edge345
  %149 = phi i64 [ %145, %._crit_edge345 ], [ %255, %._crit_edge351.thread ]
  %150 = load i64, ptr %49, align 8, !tbaa !23
  %.not306.not380 = icmp sgt i64 %150, 0
  br i1 %.not306.not380, label %.lr.ph382, label %._crit_edge383

.lr.ph382:                                        ; preds = %.preheader323
  %151 = getelementptr inbounds i8, ptr %7, i64 160
  %152 = getelementptr inbounds i8, ptr %7, i64 224
  %153 = getelementptr inbounds i8, ptr %7, i64 288
  br label %256

154:                                              ; preds = %.lr.ph365, %._crit_edge351.thread
  %155 = phi i64 [ %145, %.lr.ph365 ], [ %255, %._crit_edge351.thread ]
  %.0290362 = phi i64 [ 0, %.lr.ph365 ], [ %156, %._crit_edge351.thread ]
  %156 = add nuw nsw i64 %.0290362, 1
  %.not315.not346 = icmp slt i64 %156, %155
  br i1 %.not315.not346, label %.lr.ph350, label %._crit_edge351.thread

.lr.ph350:                                        ; preds = %154, %.lr.ph350
  %.0288348 = phi i64 [ %spec.select, %.lr.ph350 ], [ %.0290362, %154 ]
  %.4298347 = phi i64 [ %163, %.lr.ph350 ], [ %156, %154 ]
  %157 = load ptr, ptr %146, align 8, !tbaa !13
  %158 = getelementptr inbounds double, ptr %157, i64 %.4298347
  %159 = load double, ptr %158, align 8, !tbaa !17
  %160 = getelementptr inbounds double, ptr %157, i64 %.0288348
  %161 = load double, ptr %160, align 8, !tbaa !17
  %162 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %159, double noundef %161)
  %spec.select = select i1 %162, i64 %.4298347, i64 %.0288348
  %163 = add nuw nsw i64 %.4298347, 1
  %164 = load i64, ptr %48, align 8, !tbaa !21
  %.not315.not = icmp slt i64 %163, %164
  br i1 %.not315.not, label %.lr.ph350, label %._crit_edge351, !llvm.loop !33

._crit_edge351:                                   ; preds = %.lr.ph350
  %.not316 = icmp eq i64 %spec.select, %.0290362
  br i1 %.not316, label %._crit_edge351.thread, label %.preheader325

.preheader325:                                    ; preds = %._crit_edge351
  %165 = load i64, ptr %49, align 8, !tbaa !23
  %.not317.not358 = icmp sgt i64 %165, 0
  br i1 %.not317.not358, label %.preheader324.lr.ph, label %._crit_edge360

.preheader324.lr.ph:                              ; preds = %.preheader325
  %166 = load i64, ptr %50, align 8, !tbaa !24
  %.not318.not354 = icmp sgt i64 %166, 0
  br i1 %.not318.not354, label %.preheader324.us.preheader, label %.preheader324.preheader

.preheader324.preheader:                          ; preds = %.preheader324.lr.ph
  %xtraiter446 = and i64 %165, 1
  %167 = icmp eq i64 %165, 1
  br i1 %167, label %._crit_edge360.loopexit437.unr-lcssa, label %.preheader324.preheader.new

.preheader324.preheader.new:                      ; preds = %.preheader324.preheader
  %unroll_iter449 = and i64 %165, 9223372036854775806
  br label %.preheader324

.preheader324.us.preheader:                       ; preds = %.preheader324.lr.ph
  %xtraiter452 = and i64 %166, 1
  %168 = icmp eq i64 %166, 1
  %unroll_iter455 = and i64 %166, 9223372036854775806
  %lcmp.mod454.not = icmp eq i64 %xtraiter452, 0
  br label %.preheader324.us

.preheader324.us:                                 ; preds = %.preheader324.us.preheader, %._crit_edge357.us
  %.5359.us = phi i64 [ %215, %._crit_edge357.us ], [ 0, %.preheader324.us.preheader ]
  %169 = mul nsw i64 %.5359.us, %164
  %170 = add nsw i64 %169, %.0290362
  %171 = mul nsw i64 %166, %170
  %172 = add nsw i64 %169, %spec.select
  %173 = mul nsw i64 %166, %172
  br i1 %168, label %._crit_edge357.us.unr-lcssa, label %.preheader324.us.new

.preheader324.us.new:                             ; preds = %.preheader324.us, %.preheader324.us.new
  %.0355.us = phi i64 [ %195, %.preheader324.us.new ], [ 0, %.preheader324.us ]
  %niter456 = phi i64 [ %niter456.next.1, %.preheader324.us.new ], [ 0, %.preheader324.us ]
  %174 = load ptr, ptr %147, align 8, !tbaa !13
  %175 = getelementptr double, ptr %174, i64 %171
  %176 = getelementptr double, ptr %175, i64 %.0355.us
  %177 = load double, ptr %176, align 8, !tbaa !17
  %178 = getelementptr double, ptr %174, i64 %173
  %179 = getelementptr double, ptr %178, i64 %.0355.us
  %180 = load double, ptr %179, align 8, !tbaa !17
  store double %180, ptr %176, align 8, !tbaa !17
  %181 = load ptr, ptr %147, align 8, !tbaa !13
  %182 = getelementptr double, ptr %181, i64 %173
  %183 = getelementptr double, ptr %182, i64 %.0355.us
  store double %177, ptr %183, align 8, !tbaa !17
  %184 = or disjoint i64 %.0355.us, 1
  %185 = load ptr, ptr %147, align 8, !tbaa !13
  %186 = getelementptr double, ptr %185, i64 %171
  %187 = getelementptr double, ptr %186, i64 %184
  %188 = load double, ptr %187, align 8, !tbaa !17
  %189 = getelementptr double, ptr %185, i64 %173
  %190 = getelementptr double, ptr %189, i64 %184
  %191 = load double, ptr %190, align 8, !tbaa !17
  store double %191, ptr %187, align 8, !tbaa !17
  %192 = load ptr, ptr %147, align 8, !tbaa !13
  %193 = getelementptr double, ptr %192, i64 %173
  %194 = getelementptr double, ptr %193, i64 %184
  store double %188, ptr %194, align 8, !tbaa !17
  %195 = add nuw nsw i64 %.0355.us, 2
  %niter456.next.1 = add i64 %niter456, 2
  %niter456.ncmp.1 = icmp eq i64 %niter456.next.1, %unroll_iter455
  br i1 %niter456.ncmp.1, label %._crit_edge357.us.unr-lcssa, label %.preheader324.us.new, !llvm.loop !34

._crit_edge357.us.unr-lcssa:                      ; preds = %.preheader324.us.new, %.preheader324.us
  %.0355.us.unr = phi i64 [ 0, %.preheader324.us ], [ %195, %.preheader324.us.new ]
  br i1 %lcmp.mod454.not, label %._crit_edge357.us, label %._crit_edge357.us.epilog-lcssa

._crit_edge357.us.epilog-lcssa:                   ; preds = %._crit_edge357.us.unr-lcssa
  %196 = load ptr, ptr %147, align 8, !tbaa !13
  %197 = getelementptr double, ptr %196, i64 %171
  %198 = getelementptr double, ptr %197, i64 %.0355.us.unr
  %199 = load double, ptr %198, align 8, !tbaa !17
  %200 = getelementptr double, ptr %196, i64 %173
  %201 = getelementptr double, ptr %200, i64 %.0355.us.unr
  %202 = load double, ptr %201, align 8, !tbaa !17
  store double %202, ptr %198, align 8, !tbaa !17
  %203 = load ptr, ptr %147, align 8, !tbaa !13
  %204 = getelementptr double, ptr %203, i64 %173
  %205 = getelementptr double, ptr %204, i64 %.0355.us.unr
  store double %199, ptr %205, align 8, !tbaa !17
  br label %._crit_edge357.us

._crit_edge357.us:                                ; preds = %._crit_edge357.us.unr-lcssa, %._crit_edge357.us.epilog-lcssa
  %206 = load ptr, ptr %148, align 8, !tbaa !13
  %207 = getelementptr i8, ptr %206, i64 %169
  %208 = getelementptr i8, ptr %207, i64 %.0290362
  %209 = load i8, ptr %208, align 1, !tbaa !14, !range !15, !noundef !16
  %210 = getelementptr i8, ptr %207, i64 %spec.select
  %211 = load i8, ptr %210, align 1, !tbaa !14, !range !15, !noundef !16
  store i8 %211, ptr %208, align 1, !tbaa !14
  %212 = load ptr, ptr %148, align 8, !tbaa !13
  %213 = getelementptr i8, ptr %212, i64 %169
  %214 = getelementptr i8, ptr %213, i64 %spec.select
  store i8 %209, ptr %214, align 1, !tbaa !14
  %215 = add nuw nsw i64 %.5359.us, 1
  %exitcond410.not = icmp eq i64 %215, %165
  br i1 %exitcond410.not, label %._crit_edge360, label %.preheader324.us, !llvm.loop !35

.preheader324:                                    ; preds = %.preheader324, %.preheader324.preheader.new
  %.5359 = phi i64 [ 0, %.preheader324.preheader.new ], [ %237, %.preheader324 ]
  %niter450 = phi i64 [ 0, %.preheader324.preheader.new ], [ %niter450.next.1, %.preheader324 ]
  %216 = load ptr, ptr %148, align 8, !tbaa !13
  %217 = mul nsw i64 %.5359, %164
  %218 = getelementptr i8, ptr %216, i64 %217
  %219 = getelementptr i8, ptr %218, i64 %.0290362
  %220 = load i8, ptr %219, align 1, !tbaa !14, !range !15, !noundef !16
  %221 = getelementptr i8, ptr %218, i64 %spec.select
  %222 = load i8, ptr %221, align 1, !tbaa !14, !range !15, !noundef !16
  store i8 %222, ptr %219, align 1, !tbaa !14
  %223 = load ptr, ptr %148, align 8, !tbaa !13
  %224 = getelementptr i8, ptr %223, i64 %217
  %225 = getelementptr i8, ptr %224, i64 %spec.select
  store i8 %220, ptr %225, align 1, !tbaa !14
  %226 = or disjoint i64 %.5359, 1
  %227 = load ptr, ptr %148, align 8, !tbaa !13
  %228 = mul nsw i64 %226, %164
  %229 = getelementptr i8, ptr %227, i64 %228
  %230 = getelementptr i8, ptr %229, i64 %.0290362
  %231 = load i8, ptr %230, align 1, !tbaa !14, !range !15, !noundef !16
  %232 = getelementptr i8, ptr %229, i64 %spec.select
  %233 = load i8, ptr %232, align 1, !tbaa !14, !range !15, !noundef !16
  store i8 %233, ptr %230, align 1, !tbaa !14
  %234 = load ptr, ptr %148, align 8, !tbaa !13
  %235 = getelementptr i8, ptr %234, i64 %228
  %236 = getelementptr i8, ptr %235, i64 %spec.select
  store i8 %231, ptr %236, align 1, !tbaa !14
  %237 = add nuw nsw i64 %.5359, 2
  %niter450.next.1 = add i64 %niter450, 2
  %niter450.ncmp.1 = icmp eq i64 %niter450.next.1, %unroll_iter449
  br i1 %niter450.ncmp.1, label %._crit_edge360.loopexit437.unr-lcssa, label %.preheader324, !llvm.loop !35

._crit_edge360.loopexit437.unr-lcssa:             ; preds = %.preheader324, %.preheader324.preheader
  %.5359.unr = phi i64 [ 0, %.preheader324.preheader ], [ %237, %.preheader324 ]
  %lcmp.mod448.not = icmp eq i64 %xtraiter446, 0
  br i1 %lcmp.mod448.not, label %._crit_edge360, label %.preheader324.epil

.preheader324.epil:                               ; preds = %._crit_edge360.loopexit437.unr-lcssa
  %238 = load ptr, ptr %148, align 8, !tbaa !13
  %239 = mul nsw i64 %.5359.unr, %164
  %240 = getelementptr i8, ptr %238, i64 %239
  %241 = getelementptr i8, ptr %240, i64 %.0290362
  %242 = load i8, ptr %241, align 1, !tbaa !14, !range !15, !noundef !16
  %243 = getelementptr i8, ptr %240, i64 %spec.select
  %244 = load i8, ptr %243, align 1, !tbaa !14, !range !15, !noundef !16
  store i8 %244, ptr %241, align 1, !tbaa !14
  %245 = load ptr, ptr %148, align 8, !tbaa !13
  %246 = getelementptr i8, ptr %245, i64 %239
  %247 = getelementptr i8, ptr %246, i64 %spec.select
  store i8 %242, ptr %247, align 1, !tbaa !14
  br label %._crit_edge360

._crit_edge360:                                   ; preds = %.preheader324.epil, %._crit_edge360.loopexit437.unr-lcssa, %._crit_edge357.us, %.preheader325
  %248 = load ptr, ptr %146, align 8, !tbaa !13
  %249 = getelementptr inbounds double, ptr %248, i64 %.0290362
  %250 = load double, ptr %249, align 8, !tbaa !17
  %251 = getelementptr inbounds double, ptr %248, i64 %spec.select
  %252 = load double, ptr %251, align 8, !tbaa !17
  store double %252, ptr %249, align 8, !tbaa !17
  %253 = load ptr, ptr %146, align 8, !tbaa !13
  %254 = getelementptr inbounds double, ptr %253, i64 %spec.select
  store double %250, ptr %254, align 8, !tbaa !17
  br label %._crit_edge351.thread

._crit_edge351.thread:                            ; preds = %154, %._crit_edge351, %._crit_edge360
  %255 = phi i64 [ %164, %._crit_edge351 ], [ %164, %._crit_edge360 ], [ %155, %154 ]
  %.not305.not = icmp slt i64 %156, %255
  br i1 %.not305.not, label %154, label %.preheader323, !llvm.loop !36

256:                                              ; preds = %.lr.ph382, %._crit_edge371.thread
  %257 = phi i64 [ %150, %.lr.ph382 ], [ %359, %._crit_edge371.thread ]
  %.6381 = phi i64 [ 0, %.lr.ph382 ], [ %258, %._crit_edge371.thread ]
  %258 = add nuw nsw i64 %.6381, 1
  %.not311.not366 = icmp slt i64 %258, %257
  br i1 %.not311.not366, label %.lr.ph370, label %._crit_edge371.thread

.lr.ph370:                                        ; preds = %256, %.lr.ph370
  %.2368 = phi i64 [ %spec.select319, %.lr.ph370 ], [ %.6381, %256 ]
  %.1291367 = phi i64 [ %265, %.lr.ph370 ], [ %258, %256 ]
  %259 = load ptr, ptr %151, align 8, !tbaa !13
  %260 = getelementptr inbounds double, ptr %259, i64 %.1291367
  %261 = load double, ptr %260, align 8, !tbaa !17
  %262 = getelementptr inbounds double, ptr %259, i64 %.2368
  %263 = load double, ptr %262, align 8, !tbaa !17
  %264 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %261, double noundef %263)
  %spec.select319 = select i1 %264, i64 %.1291367, i64 %.2368
  %265 = add nuw nsw i64 %.1291367, 1
  %266 = load i64, ptr %49, align 8, !tbaa !23
  %.not311.not = icmp slt i64 %265, %266
  br i1 %.not311.not, label %.lr.ph370, label %._crit_edge371, !llvm.loop !37

._crit_edge371:                                   ; preds = %.lr.ph370
  %.not312 = icmp eq i64 %spec.select319, %.6381
  br i1 %.not312, label %._crit_edge371.thread, label %.preheader322

.preheader322:                                    ; preds = %._crit_edge371
  %267 = load i64, ptr %48, align 8, !tbaa !21
  %.not313.not377 = icmp sgt i64 %267, 0
  br i1 %.not313.not377, label %.preheader321.lr.ph, label %._crit_edge379

.preheader321.lr.ph:                              ; preds = %.preheader322
  %268 = load i64, ptr %50, align 8, !tbaa !24
  %.not314.not373 = icmp sgt i64 %268, 0
  %269 = mul nuw nsw i64 %267, %.6381
  %270 = mul nsw i64 %267, %spec.select319
  br i1 %.not314.not373, label %.preheader321.us.preheader, label %.preheader321.preheader

.preheader321.preheader:                          ; preds = %.preheader321.lr.ph
  %xtraiter457 = and i64 %267, 1
  %271 = icmp eq i64 %267, 1
  br i1 %271, label %._crit_edge379.loopexit435.unr-lcssa, label %.preheader321.preheader.new

.preheader321.preheader.new:                      ; preds = %.preheader321.preheader
  %unroll_iter460 = and i64 %267, 9223372036854775806
  br label %.preheader321

.preheader321.us.preheader:                       ; preds = %.preheader321.lr.ph
  %xtraiter463 = and i64 %268, 1
  %272 = icmp eq i64 %268, 1
  %unroll_iter466 = and i64 %268, 9223372036854775806
  %lcmp.mod465.not = icmp eq i64 %xtraiter463, 0
  br label %.preheader321.us

.preheader321.us:                                 ; preds = %.preheader321.us.preheader, %._crit_edge376.us
  %.2292378.us = phi i64 [ %319, %._crit_edge376.us ], [ 0, %.preheader321.us.preheader ]
  %273 = add nuw nsw i64 %269, %.2292378.us
  %274 = mul nuw nsw i64 %268, %273
  %275 = add nsw i64 %270, %.2292378.us
  %276 = mul nsw i64 %268, %275
  br i1 %272, label %._crit_edge376.us.unr-lcssa, label %.preheader321.us.new

.preheader321.us.new:                             ; preds = %.preheader321.us, %.preheader321.us.new
  %.1374.us = phi i64 [ %298, %.preheader321.us.new ], [ 0, %.preheader321.us ]
  %niter467 = phi i64 [ %niter467.next.1, %.preheader321.us.new ], [ 0, %.preheader321.us ]
  %277 = load ptr, ptr %152, align 8, !tbaa !13
  %278 = getelementptr double, ptr %277, i64 %274
  %279 = getelementptr double, ptr %278, i64 %.1374.us
  %280 = load double, ptr %279, align 8, !tbaa !17
  %281 = getelementptr double, ptr %277, i64 %276
  %282 = getelementptr double, ptr %281, i64 %.1374.us
  %283 = load double, ptr %282, align 8, !tbaa !17
  store double %283, ptr %279, align 8, !tbaa !17
  %284 = load ptr, ptr %152, align 8, !tbaa !13
  %285 = getelementptr double, ptr %284, i64 %276
  %286 = getelementptr double, ptr %285, i64 %.1374.us
  store double %280, ptr %286, align 8, !tbaa !17
  %287 = or disjoint i64 %.1374.us, 1
  %288 = load ptr, ptr %152, align 8, !tbaa !13
  %289 = getelementptr double, ptr %288, i64 %274
  %290 = getelementptr double, ptr %289, i64 %287
  %291 = load double, ptr %290, align 8, !tbaa !17
  %292 = getelementptr double, ptr %288, i64 %276
  %293 = getelementptr double, ptr %292, i64 %287
  %294 = load double, ptr %293, align 8, !tbaa !17
  store double %294, ptr %290, align 8, !tbaa !17
  %295 = load ptr, ptr %152, align 8, !tbaa !13
  %296 = getelementptr double, ptr %295, i64 %276
  %297 = getelementptr double, ptr %296, i64 %287
  store double %291, ptr %297, align 8, !tbaa !17
  %298 = add nuw nsw i64 %.1374.us, 2
  %niter467.next.1 = add i64 %niter467, 2
  %niter467.ncmp.1 = icmp eq i64 %niter467.next.1, %unroll_iter466
  br i1 %niter467.ncmp.1, label %._crit_edge376.us.unr-lcssa, label %.preheader321.us.new, !llvm.loop !38

._crit_edge376.us.unr-lcssa:                      ; preds = %.preheader321.us.new, %.preheader321.us
  %.1374.us.unr = phi i64 [ 0, %.preheader321.us ], [ %298, %.preheader321.us.new ]
  br i1 %lcmp.mod465.not, label %._crit_edge376.us, label %._crit_edge376.us.epilog-lcssa

._crit_edge376.us.epilog-lcssa:                   ; preds = %._crit_edge376.us.unr-lcssa
  %299 = load ptr, ptr %152, align 8, !tbaa !13
  %300 = getelementptr double, ptr %299, i64 %274
  %301 = getelementptr double, ptr %300, i64 %.1374.us.unr
  %302 = load double, ptr %301, align 8, !tbaa !17
  %303 = getelementptr double, ptr %299, i64 %276
  %304 = getelementptr double, ptr %303, i64 %.1374.us.unr
  %305 = load double, ptr %304, align 8, !tbaa !17
  store double %305, ptr %301, align 8, !tbaa !17
  %306 = load ptr, ptr %152, align 8, !tbaa !13
  %307 = getelementptr double, ptr %306, i64 %276
  %308 = getelementptr double, ptr %307, i64 %.1374.us.unr
  store double %302, ptr %308, align 8, !tbaa !17
  br label %._crit_edge376.us

._crit_edge376.us:                                ; preds = %._crit_edge376.us.unr-lcssa, %._crit_edge376.us.epilog-lcssa
  %309 = load ptr, ptr %153, align 8, !tbaa !13
  %310 = getelementptr i8, ptr %309, i64 %269
  %311 = getelementptr i8, ptr %310, i64 %.2292378.us
  %312 = load i8, ptr %311, align 1, !tbaa !14, !range !15, !noundef !16
  %313 = getelementptr i8, ptr %309, i64 %270
  %314 = getelementptr i8, ptr %313, i64 %.2292378.us
  %315 = load i8, ptr %314, align 1, !tbaa !14, !range !15, !noundef !16
  store i8 %315, ptr %311, align 1, !tbaa !14
  %316 = load ptr, ptr %153, align 8, !tbaa !13
  %317 = getelementptr i8, ptr %316, i64 %270
  %318 = getelementptr i8, ptr %317, i64 %.2292378.us
  store i8 %312, ptr %318, align 1, !tbaa !14
  %319 = add nuw nsw i64 %.2292378.us, 1
  %exitcond413.not = icmp eq i64 %319, %267
  br i1 %exitcond413.not, label %._crit_edge379, label %.preheader321.us, !llvm.loop !39

.preheader321:                                    ; preds = %.preheader321, %.preheader321.preheader.new
  %.2292378 = phi i64 [ 0, %.preheader321.preheader.new ], [ %341, %.preheader321 ]
  %niter461 = phi i64 [ 0, %.preheader321.preheader.new ], [ %niter461.next.1, %.preheader321 ]
  %320 = load ptr, ptr %153, align 8, !tbaa !13
  %321 = getelementptr i8, ptr %320, i64 %269
  %322 = getelementptr i8, ptr %321, i64 %.2292378
  %323 = load i8, ptr %322, align 1, !tbaa !14, !range !15, !noundef !16
  %324 = getelementptr i8, ptr %320, i64 %270
  %325 = getelementptr i8, ptr %324, i64 %.2292378
  %326 = load i8, ptr %325, align 1, !tbaa !14, !range !15, !noundef !16
  store i8 %326, ptr %322, align 1, !tbaa !14
  %327 = load ptr, ptr %153, align 8, !tbaa !13
  %328 = getelementptr i8, ptr %327, i64 %270
  %329 = getelementptr i8, ptr %328, i64 %.2292378
  store i8 %323, ptr %329, align 1, !tbaa !14
  %330 = or disjoint i64 %.2292378, 1
  %331 = load ptr, ptr %153, align 8, !tbaa !13
  %332 = getelementptr i8, ptr %331, i64 %269
  %333 = getelementptr i8, ptr %332, i64 %330
  %334 = load i8, ptr %333, align 1, !tbaa !14, !range !15, !noundef !16
  %335 = getelementptr i8, ptr %331, i64 %270
  %336 = getelementptr i8, ptr %335, i64 %330
  %337 = load i8, ptr %336, align 1, !tbaa !14, !range !15, !noundef !16
  store i8 %337, ptr %333, align 1, !tbaa !14
  %338 = load ptr, ptr %153, align 8, !tbaa !13
  %339 = getelementptr i8, ptr %338, i64 %270
  %340 = getelementptr i8, ptr %339, i64 %330
  store i8 %334, ptr %340, align 1, !tbaa !14
  %341 = add nuw nsw i64 %.2292378, 2
  %niter461.next.1 = add i64 %niter461, 2
  %niter461.ncmp.1 = icmp eq i64 %niter461.next.1, %unroll_iter460
  br i1 %niter461.ncmp.1, label %._crit_edge379.loopexit435.unr-lcssa, label %.preheader321, !llvm.loop !39

._crit_edge379.loopexit435.unr-lcssa:             ; preds = %.preheader321, %.preheader321.preheader
  %.2292378.unr = phi i64 [ 0, %.preheader321.preheader ], [ %341, %.preheader321 ]
  %lcmp.mod459.not = icmp eq i64 %xtraiter457, 0
  br i1 %lcmp.mod459.not, label %._crit_edge379, label %.preheader321.epil

.preheader321.epil:                               ; preds = %._crit_edge379.loopexit435.unr-lcssa
  %342 = load ptr, ptr %153, align 8, !tbaa !13
  %343 = getelementptr i8, ptr %342, i64 %269
  %344 = getelementptr i8, ptr %343, i64 %.2292378.unr
  %345 = load i8, ptr %344, align 1, !tbaa !14, !range !15, !noundef !16
  %346 = getelementptr i8, ptr %342, i64 %270
  %347 = getelementptr i8, ptr %346, i64 %.2292378.unr
  %348 = load i8, ptr %347, align 1, !tbaa !14, !range !15, !noundef !16
  store i8 %348, ptr %344, align 1, !tbaa !14
  %349 = load ptr, ptr %153, align 8, !tbaa !13
  %350 = getelementptr i8, ptr %349, i64 %270
  %351 = getelementptr i8, ptr %350, i64 %.2292378.unr
  store i8 %345, ptr %351, align 1, !tbaa !14
  br label %._crit_edge379

._crit_edge379:                                   ; preds = %.preheader321.epil, %._crit_edge379.loopexit435.unr-lcssa, %._crit_edge376.us, %.preheader322
  %352 = load ptr, ptr %151, align 8, !tbaa !13
  %353 = getelementptr inbounds double, ptr %352, i64 %.6381
  %354 = load double, ptr %353, align 8, !tbaa !17
  %355 = getelementptr inbounds double, ptr %352, i64 %spec.select319
  %356 = load double, ptr %355, align 8, !tbaa !17
  store double %356, ptr %353, align 8, !tbaa !17
  %357 = load ptr, ptr %151, align 8, !tbaa !13
  %358 = getelementptr inbounds double, ptr %357, i64 %spec.select319
  store double %354, ptr %358, align 8, !tbaa !17
  br label %._crit_edge371.thread

._crit_edge371.thread:                            ; preds = %256, %._crit_edge371, %._crit_edge379
  %359 = phi i64 [ %266, %._crit_edge371 ], [ %266, %._crit_edge379 ], [ %257, %256 ]
  %.not306.not = icmp slt i64 %258, %359
  br i1 %.not306.not, label %256, label %._crit_edge383.loopexit, !llvm.loop !40

._crit_edge383.loopexit:                          ; preds = %._crit_edge371.thread
  %.pre = load i64, ptr %48, align 8, !tbaa !21
  br label %._crit_edge383

._crit_edge383:                                   ; preds = %._crit_edge383.loopexit, %.preheader323
  %360 = phi i64 [ %149, %.preheader323 ], [ %.pre, %._crit_edge383.loopexit ]
  %.lcssa328 = phi i64 [ %150, %.preheader323 ], [ %359, %._crit_edge383.loopexit ]
  %361 = add nsw i64 %.lcssa328, -1
  %362 = add nsw i64 %360, -1
  %363 = mul nsw i64 %362, %361
  %364 = getelementptr inbounds i8, ptr %7, i64 296
  call void @_ZN11alglib_impl10bsetallocvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %363, i1 noundef zeroext true, ptr noundef nonnull %364, ptr noundef %8)
  %365 = load i64, ptr %49, align 8, !tbaa !23
  %.not307389 = icmp slt i64 %365, 2
  %.pre418 = load i64, ptr %48, align 8, !tbaa !21
  br i1 %.not307389, label %._crit_edge391, label %.preheader320.lr.ph

.preheader320.lr.ph:                              ; preds = %._crit_edge383
  %.not310385 = icmp slt i64 %.pre418, 2
  %366 = getelementptr inbounds i8, ptr %7, i64 288
  %367 = getelementptr inbounds i8, ptr %7, i64 352
  %368 = add i64 %.pre418, -1
  br i1 %.not310385, label %._crit_edge391, label %.preheader320.preheader

.preheader320.preheader:                          ; preds = %.preheader320.lr.ph
  %369 = add nsw i64 %365, -2
  br label %.preheader320

.preheader320:                                    ; preds = %.preheader320.preheader, %._crit_edge388
  %.7390 = phi i64 [ %371, %._crit_edge388 ], [ 0, %.preheader320.preheader ]
  %370 = mul nuw nsw i64 %.pre418, %.7390
  %371 = add nuw i64 %.7390, 1
  %372 = mul nuw nsw i64 %.pre418, %371
  %373 = mul nsw i64 %368, %.7390
  br label %374

374:                                              ; preds = %.preheader320, %398
  %.3293386 = phi i64 [ 0, %.preheader320 ], [ %399, %398 ]
  %375 = load ptr, ptr %366, align 8, !tbaa !13
  %376 = getelementptr i8, ptr %375, i64 %370
  %377 = getelementptr i8, ptr %376, i64 %.3293386
  %378 = load i8, ptr %377, align 1, !tbaa !14, !range !15, !noundef !16
  %379 = trunc nuw i8 %378 to i1
  br i1 %379, label %398, label %380

380:                                              ; preds = %374
  %381 = getelementptr i8, ptr %375, i64 %372
  %382 = getelementptr i8, ptr %381, i64 %.3293386
  %383 = load i8, ptr %382, align 1, !tbaa !14, !range !15, !noundef !16
  %384 = trunc nuw i8 %383 to i1
  br i1 %384, label %398, label %385

385:                                              ; preds = %380
  %386 = add nuw nsw i64 %.3293386, 1
  %387 = getelementptr i8, ptr %376, i64 %386
  %388 = load i8, ptr %387, align 1, !tbaa !14, !range !15, !noundef !16
  %389 = trunc nuw i8 %388 to i1
  br i1 %389, label %398, label %390

390:                                              ; preds = %385
  %391 = getelementptr i8, ptr %381, i64 %386
  %392 = load i8, ptr %391, align 1, !tbaa !14, !range !15, !noundef !16
  %393 = trunc nuw i8 %392 to i1
  br i1 %393, label %398, label %394

394:                                              ; preds = %390
  %395 = load ptr, ptr %367, align 8, !tbaa !13
  %396 = getelementptr i8, ptr %395, i64 %373
  %397 = getelementptr i8, ptr %396, i64 %.3293386
  store i8 0, ptr %397, align 1, !tbaa !14
  br label %398

398:                                              ; preds = %374, %380, %385, %390, %394
  %399 = add nuw i64 %.3293386, 1
  %exitcond414.not = icmp eq i64 %399, %368
  br i1 %exitcond414.not, label %._crit_edge388, label %374, !llvm.loop !41

._crit_edge388:                                   ; preds = %398
  %exitcond415.not = icmp eq i64 %.7390, %369
  br i1 %exitcond415.not, label %._crit_edge391, label %.preheader320, !llvm.loop !42

._crit_edge391:                                   ; preds = %._crit_edge388, %.preheader320.lr.ph, %._crit_edge383
  %400 = mul nsw i64 %.pre418, %365
  call void @_ZN11alglib_impl5bsetvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %400, i1 noundef zeroext true, ptr noundef nonnull %144, ptr noundef %8)
  %401 = load i64, ptr %49, align 8, !tbaa !23
  %.not308397 = icmp slt i64 %401, 2
  br i1 %.not308397, label %._crit_edge399, label %.preheader.lr.ph

.preheader.lr.ph:                                 ; preds = %._crit_edge391
  %402 = load i64, ptr %48, align 8, !tbaa !21
  %.not309393 = icmp slt i64 %402, 2
  %403 = getelementptr inbounds i8, ptr %7, i64 352
  %404 = add i64 %402, -1
  %405 = getelementptr inbounds i8, ptr %7, i64 288
  br i1 %.not309393, label %._crit_edge399, label %.preheader.preheader

.preheader.preheader:                             ; preds = %.preheader.lr.ph
  %406 = add nsw i64 %401, -2
  br label %.preheader

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge396
  %.8398 = phi i64 [ %409, %._crit_edge396 ], [ 0, %.preheader.preheader ]
  %407 = mul nsw i64 %404, %.8398
  %408 = mul nuw nsw i64 %402, %.8398
  %409 = add nuw i64 %.8398, 1
  %410 = mul nuw nsw i64 %402, %409
  br label %411

411:                                              ; preds = %.preheader, %431
  %.4394 = phi i64 [ 0, %.preheader ], [ %.pre-phi, %431 ]
  %412 = load ptr, ptr %403, align 8, !tbaa !13
  %413 = getelementptr i8, ptr %412, i64 %407
  %414 = getelementptr i8, ptr %413, i64 %.4394
  %415 = load i8, ptr %414, align 1, !tbaa !14, !range !15, !noundef !16
  %416 = trunc nuw i8 %415 to i1
  br i1 %416, label %._crit_edge419, label %417

._crit_edge419:                                   ; preds = %411
  %.pre420 = add nuw i64 %.4394, 1
  br label %431

417:                                              ; preds = %411
  %418 = load ptr, ptr %405, align 8, !tbaa !13
  %419 = getelementptr i8, ptr %418, i64 %408
  %420 = getelementptr i8, ptr %419, i64 %.4394
  store i8 0, ptr %420, align 1, !tbaa !14
  %421 = load ptr, ptr %405, align 8, !tbaa !13
  %422 = getelementptr i8, ptr %421, i64 %410
  %423 = getelementptr i8, ptr %422, i64 %.4394
  store i8 0, ptr %423, align 1, !tbaa !14
  %424 = load ptr, ptr %405, align 8, !tbaa !13
  %425 = add nuw i64 %.4394, 1
  %426 = getelementptr i8, ptr %424, i64 %408
  %427 = getelementptr i8, ptr %426, i64 %425
  store i8 0, ptr %427, align 1, !tbaa !14
  %428 = load ptr, ptr %405, align 8, !tbaa !13
  %429 = getelementptr i8, ptr %428, i64 %410
  %430 = getelementptr i8, ptr %429, i64 %425
  store i8 0, ptr %430, align 1, !tbaa !14
  br label %431

431:                                              ; preds = %._crit_edge419, %417
  %.pre-phi = phi i64 [ %.pre420, %._crit_edge419 ], [ %425, %417 ]
  %exitcond416.not = icmp eq i64 %.pre-phi, %404
  br i1 %exitcond416.not, label %._crit_edge396, label %411, !llvm.loop !43

._crit_edge396:                                   ; preds = %431
  %exitcond417.not = icmp eq i64 %.8398, %406
  br i1 %exitcond417.not, label %._crit_edge399, label %.preheader, !llvm.loop !44

._crit_edge399:                                   ; preds = %._crit_edge396, %.preheader.lr.ph, %._crit_edge391
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %8)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %10) #4
  ret void
}

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

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

declare void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef, ptr noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #2

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

declare noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl10rsetallocvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl10bsetallocvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, i1 noundef zeroext, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl5bsetvElbPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, i1 noundef zeroext, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl11bcopyallocvElPKNS_9ae_vectorEPS0_PNS_8ae_stateE(i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 0}
!6 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !10, i64 16, !11, i64 24, !8, i64 56}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"bool", !8, i64 0}
!11 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !12, i64 0, !12, i64 8, !12, i64 16, !12, i64 24}
!12 = !{!"any pointer", !8, i64 0}
!13 = !{!8, !8, i64 0}
!14 = !{!10, !10, i64 0}
!15 = !{i8 0, i8 2}
!16 = !{}
!17 = !{!18, !18, i64 0}
!18 = !{!"double", !8, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!22, !7, i64 16}
!22 = !{!"_ZTSN11alglib_impl19spline2dinterpolantE", !7, i64 0, !10, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !6, i64 40, !6, i64 104, !6, i64 168, !6, i64 232, !6, i64 296}
!23 = !{!22, !7, i64 24}
!24 = !{!22, !7, i64 32}
!25 = !{!22, !7, i64 0}
!26 = !{!22, !10, i64 8}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.unroll.disable"}
!29 = distinct !{!29, !20}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!40 = distinct !{!40, !20}
!41 = distinct !{!41, !20}
!42 = distinct !{!42, !20}
!43 = distinct !{!43, !20}
!44 = distinct !{!44, !20}


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