; 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::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%union.anon.1 = 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.840 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.841 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.842 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.843 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.844 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.845 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.846 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.847 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.848 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.849 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.850 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.851 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.852 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.853 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.854 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.855 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.856 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.857 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.858 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.859 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.860 = external hidden unnamed_addr constant [56 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_impl21spline2dbuildclampedvEPKNS_9ae_vectorElS2_lS2_lS2_lS2_lS2_lS2_S2_lPNS_19spline2dinterpolantEPNS_8ae_stateE(ptr noundef %0, i64 noundef %1, ptr noundef %2, i64 noundef %3, ptr noundef %4, i64 noundef %5, ptr noundef %6, i64 noundef %7, ptr noundef %8, i64 noundef %9, ptr noundef %10, i64 noundef %11, ptr noundef %12, ptr noundef %13, i64 noundef %14, ptr noundef %15, ptr noundef %16) #3 {
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i64, align 8
  %26 = alloca ptr, align 8
  %27 = alloca i64, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i64, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i64, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca %"struct.alglib_impl::ae_frame", align 8
  %36 = alloca %"struct.alglib_impl::ae_vector", align 8
  %37 = alloca %"struct.alglib_impl::ae_vector", align 8
  %38 = alloca %"struct.alglib_impl::ae_vector", align 8
  %39 = alloca %"struct.alglib_impl::ae_vector", align 8
  %40 = alloca %"struct.alglib_impl::ae_vector", align 8
  %41 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %42 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %43 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %44 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %45 = alloca %"struct.alglib_impl::ae_vector", align 8
  %46 = alloca %"struct.alglib_impl::ae_vector", align 8
  %47 = alloca %"struct.alglib_impl::ae_vector", align 8
  %48 = alloca %"struct.alglib_impl::ae_vector", align 8
  %49 = alloca %"struct.alglib_impl::ae_vector", align 8
  %50 = alloca %"struct.alglib_impl::ae_vector", align 8
  %51 = alloca i64, align 8
  %52 = alloca i64, align 8
  %53 = alloca i64, align 8
  %54 = alloca i64, align 8
  %55 = alloca i8, align 1
  store ptr %0, ptr %18, align 8, !tbaa !5
  store i64 %1, ptr %19, align 8, !tbaa !9
  store ptr %2, ptr %20, align 8, !tbaa !5
  store i64 %3, ptr %21, align 8, !tbaa !9
  store ptr %4, ptr %22, align 8, !tbaa !5
  store i64 %5, ptr %23, align 8, !tbaa !9
  store ptr %6, ptr %24, align 8, !tbaa !5
  store i64 %7, ptr %25, align 8, !tbaa !9
  store ptr %8, ptr %26, align 8, !tbaa !5
  store i64 %9, ptr %27, align 8, !tbaa !9
  store ptr %10, ptr %28, align 8, !tbaa !5
  store i64 %11, ptr %29, align 8, !tbaa !9
  store ptr %12, ptr %30, align 8, !tbaa !5
  store ptr %13, ptr %31, align 8, !tbaa !5
  store i64 %14, ptr %32, align 8, !tbaa !9
  store ptr %15, ptr %33, align 8, !tbaa !5
  store ptr %16, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %46) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %47) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %48) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %49) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %50) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr %55) #4
  %56 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %56, ptr noundef %35)
  call void @llvm.memset.p0.i64(ptr align 8 %36, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %37, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %38, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %39, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %40, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %41, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %42, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %43, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %44, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %45, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %46, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %47, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %48, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %49, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %50, i8 0, i64 64, i1 false)
  %57 = load ptr, ptr %22, align 8, !tbaa !5
  %58 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef %36, ptr noundef %57, ptr noundef %58, i1 noundef zeroext true)
  %59 = load ptr, ptr %24, align 8, !tbaa !5
  %60 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef %37, ptr noundef %59, ptr noundef %60, i1 noundef zeroext true)
  %61 = load ptr, ptr %26, align 8, !tbaa !5
  %62 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef %38, ptr noundef %61, ptr noundef %62, i1 noundef zeroext true)
  %63 = load ptr, ptr %28, align 8, !tbaa !5
  %64 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef %39, ptr noundef %63, ptr noundef %64, i1 noundef zeroext true)
  %65 = load ptr, ptr %31, align 8, !tbaa !5
  %66 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef %40, ptr noundef %65, ptr noundef %66, i1 noundef zeroext true)
  %67 = load ptr, ptr %33, align 8, !tbaa !5
  call void @_ZN11alglib_impl26_spline2dinterpolant_clearEPv(ptr noundef %67)
  %68 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef %41, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %68, i1 noundef zeroext true)
  %69 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef %42, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %69, i1 noundef zeroext true)
  %70 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef %43, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %70, i1 noundef zeroext true)
  %71 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef %44, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %71, i1 noundef zeroext true)
  %72 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %45, i64 noundef 0, i64 noundef 3, ptr noundef %72, i1 noundef zeroext true)
  %73 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %46, i64 noundef 0, i64 noundef 3, ptr noundef %73, i1 noundef zeroext true)
  %74 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %47, i64 noundef 0, i64 noundef 3, ptr noundef %74, i1 noundef zeroext true)
  %75 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %48, i64 noundef 0, i64 noundef 3, ptr noundef %75, i1 noundef zeroext true)
  %76 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %49, i64 noundef 0, i64 noundef 3, ptr noundef %76, i1 noundef zeroext true)
  %77 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %50, i64 noundef 0, i64 noundef 3, ptr noundef %77, i1 noundef zeroext true)
  %78 = load i64, ptr %23, align 8, !tbaa !9
  %79 = load i64, ptr %25, align 8, !tbaa !9
  %80 = load i64, ptr %27, align 8, !tbaa !9
  %81 = load i64, ptr %29, align 8, !tbaa !9
  %82 = load ptr, ptr %34, align 8, !tbaa !5
  %83 = call noundef i64 @_ZN11alglib_impl5imin4EllllPNS_8ae_stateE(i64 noundef %78, i64 noundef %79, i64 noundef %80, i64 noundef %81, ptr noundef %82)
  %84 = icmp eq i64 %83, 0
  br i1 %84, label %85, label %93

85:                                               ; preds = %17
  %86 = load i64, ptr %23, align 8, !tbaa !9
  %87 = load i64, ptr %25, align 8, !tbaa !9
  %88 = load i64, ptr %27, align 8, !tbaa !9
  %89 = load i64, ptr %29, align 8, !tbaa !9
  %90 = load ptr, ptr %34, align 8, !tbaa !5
  %91 = call noundef i64 @_ZN11alglib_impl5imax4EllllPNS_8ae_stateE(i64 noundef %86, i64 noundef %87, i64 noundef %88, i64 noundef %89, ptr noundef %90)
  %92 = icmp eq i64 %91, 0
  br label %93

93:                                               ; preds = %85, %17
  %94 = phi i1 [ false, %17 ], [ %92, %85 ]
  %95 = zext i1 %94 to i8
  store i8 %95, ptr %55, align 1, !tbaa !11
  %96 = load i64, ptr %19, align 8, !tbaa !9
  %97 = icmp sge i64 %96, 2
  %98 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %97, ptr noundef @.str.840, ptr noundef %98)
  %99 = load i64, ptr %21, align 8, !tbaa !9
  %100 = icmp sge i64 %99, 2
  %101 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %100, ptr noundef @.str.841, ptr noundef %101)
  %102 = load i64, ptr %32, align 8, !tbaa !9
  %103 = icmp sge i64 %102, 1
  %104 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %103, ptr noundef @.str.842, ptr noundef %104)
  %105 = load ptr, ptr %18, align 8, !tbaa !5
  %106 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %105, i32 0, i32 0
  %107 = load i64, ptr %106, align 8, !tbaa !13
  %108 = load i64, ptr %19, align 8, !tbaa !9
  %109 = icmp sge i64 %107, %108
  br i1 %109, label %110, label %116

110:                                              ; preds = %93
  %111 = load ptr, ptr %20, align 8, !tbaa !5
  %112 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %111, i32 0, i32 0
  %113 = load i64, ptr %112, align 8, !tbaa !13
  %114 = load i64, ptr %21, align 8, !tbaa !9
  %115 = icmp sge i64 %113, %114
  br label %116

116:                                              ; preds = %110, %93
  %117 = phi i1 [ false, %93 ], [ %115, %110 ]
  %118 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %117, ptr noundef @.str.843, ptr noundef %118)
  %119 = load ptr, ptr %18, align 8, !tbaa !5
  %120 = load i64, ptr %19, align 8, !tbaa !9
  %121 = load ptr, ptr %34, align 8, !tbaa !5
  %122 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %119, i64 noundef %120, ptr noundef %121)
  br i1 %122, label %123, label %128

123:                                              ; preds = %116
  %124 = load ptr, ptr %20, align 8, !tbaa !5
  %125 = load i64, ptr %21, align 8, !tbaa !9
  %126 = load ptr, ptr %34, align 8, !tbaa !5
  %127 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %124, i64 noundef %125, ptr noundef %126)
  br label %128

128:                                              ; preds = %123, %116
  %129 = phi i1 [ false, %116 ], [ %127, %123 ]
  %130 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %129, ptr noundef @.str.844, ptr noundef %130)
  %131 = load i64, ptr %23, align 8, !tbaa !9
  %132 = icmp eq i64 %131, 0
  br i1 %132, label %140, label %133

133:                                              ; preds = %128
  %134 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %36, i32 0, i32 0
  %135 = load i64, ptr %134, align 8, !tbaa !13
  %136 = load i64, ptr %19, align 8, !tbaa !9
  %137 = load i64, ptr %32, align 8, !tbaa !9
  %138 = mul nsw i64 %136, %137
  %139 = icmp sge i64 %135, %138
  br label %140

140:                                              ; preds = %133, %128
  %141 = phi i1 [ true, %128 ], [ %139, %133 ]
  %142 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %141, ptr noundef @.str.845, ptr noundef %142)
  %143 = load i64, ptr %23, align 8, !tbaa !9
  %144 = icmp eq i64 %143, 0
  br i1 %144, label %151, label %145

145:                                              ; preds = %140
  %146 = load i64, ptr %19, align 8, !tbaa !9
  %147 = load i64, ptr %32, align 8, !tbaa !9
  %148 = mul nsw i64 %146, %147
  %149 = load ptr, ptr %34, align 8, !tbaa !5
  %150 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %36, i64 noundef %148, ptr noundef %149)
  br label %151

151:                                              ; preds = %145, %140
  %152 = phi i1 [ true, %140 ], [ %150, %145 ]
  %153 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %152, ptr noundef @.str.846, ptr noundef %153)
  %154 = load i64, ptr %25, align 8, !tbaa !9
  %155 = icmp eq i64 %154, 0
  br i1 %155, label %163, label %156

156:                                              ; preds = %151
  %157 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %37, i32 0, i32 0
  %158 = load i64, ptr %157, align 8, !tbaa !13
  %159 = load i64, ptr %19, align 8, !tbaa !9
  %160 = load i64, ptr %32, align 8, !tbaa !9
  %161 = mul nsw i64 %159, %160
  %162 = icmp sge i64 %158, %161
  br label %163

163:                                              ; preds = %156, %151
  %164 = phi i1 [ true, %151 ], [ %162, %156 ]
  %165 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %164, ptr noundef @.str.847, ptr noundef %165)
  %166 = load i64, ptr %25, align 8, !tbaa !9
  %167 = icmp eq i64 %166, 0
  br i1 %167, label %174, label %168

168:                                              ; preds = %163
  %169 = load i64, ptr %19, align 8, !tbaa !9
  %170 = load i64, ptr %32, align 8, !tbaa !9
  %171 = mul nsw i64 %169, %170
  %172 = load ptr, ptr %34, align 8, !tbaa !5
  %173 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %37, i64 noundef %171, ptr noundef %172)
  br label %174

174:                                              ; preds = %168, %163
  %175 = phi i1 [ true, %163 ], [ %173, %168 ]
  %176 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %175, ptr noundef @.str.848, ptr noundef %176)
  %177 = load i64, ptr %27, align 8, !tbaa !9
  %178 = icmp eq i64 %177, 0
  br i1 %178, label %186, label %179

179:                                              ; preds = %174
  %180 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %38, i32 0, i32 0
  %181 = load i64, ptr %180, align 8, !tbaa !13
  %182 = load i64, ptr %21, align 8, !tbaa !9
  %183 = load i64, ptr %32, align 8, !tbaa !9
  %184 = mul nsw i64 %182, %183
  %185 = icmp sge i64 %181, %184
  br label %186

186:                                              ; preds = %179, %174
  %187 = phi i1 [ true, %174 ], [ %185, %179 ]
  %188 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %187, ptr noundef @.str.849, ptr noundef %188)
  %189 = load i64, ptr %27, align 8, !tbaa !9
  %190 = icmp eq i64 %189, 0
  br i1 %190, label %197, label %191

191:                                              ; preds = %186
  %192 = load i64, ptr %21, align 8, !tbaa !9
  %193 = load i64, ptr %32, align 8, !tbaa !9
  %194 = mul nsw i64 %192, %193
  %195 = load ptr, ptr %34, align 8, !tbaa !5
  %196 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %38, i64 noundef %194, ptr noundef %195)
  br label %197

197:                                              ; preds = %191, %186
  %198 = phi i1 [ true, %186 ], [ %196, %191 ]
  %199 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %198, ptr noundef @.str.850, ptr noundef %199)
  %200 = load i64, ptr %29, align 8, !tbaa !9
  %201 = icmp eq i64 %200, 0
  br i1 %201, label %209, label %202

202:                                              ; preds = %197
  %203 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %39, i32 0, i32 0
  %204 = load i64, ptr %203, align 8, !tbaa !13
  %205 = load i64, ptr %21, align 8, !tbaa !9
  %206 = load i64, ptr %32, align 8, !tbaa !9
  %207 = mul nsw i64 %205, %206
  %208 = icmp sge i64 %204, %207
  br label %209

209:                                              ; preds = %202, %197
  %210 = phi i1 [ true, %197 ], [ %208, %202 ]
  %211 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %210, ptr noundef @.str.851, ptr noundef %211)
  %212 = load i64, ptr %29, align 8, !tbaa !9
  %213 = icmp eq i64 %212, 0
  br i1 %213, label %220, label %214

214:                                              ; preds = %209
  %215 = load i64, ptr %21, align 8, !tbaa !9
  %216 = load i64, ptr %32, align 8, !tbaa !9
  %217 = mul nsw i64 %215, %216
  %218 = load ptr, ptr %34, align 8, !tbaa !5
  %219 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %39, i64 noundef %217, ptr noundef %218)
  br label %220

220:                                              ; preds = %214, %209
  %221 = phi i1 [ true, %209 ], [ %219, %214 ]
  %222 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %221, ptr noundef @.str.852, ptr noundef %222)
  %223 = load i8, ptr %55, align 1, !tbaa !11, !range !16, !noundef !17
  %224 = trunc i8 %223 to i1
  br i1 %224, label %232, label %225

225:                                              ; preds = %220
  %226 = load ptr, ptr %30, align 8, !tbaa !5
  %227 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %226, i32 0, i32 0
  %228 = load i64, ptr %227, align 8, !tbaa !13
  %229 = load i64, ptr %32, align 8, !tbaa !9
  %230 = mul nsw i64 4, %229
  %231 = icmp sge i64 %228, %230
  br label %232

232:                                              ; preds = %225, %220
  %233 = phi i1 [ true, %220 ], [ %231, %225 ]
  %234 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %233, ptr noundef @.str.853, ptr noundef %234)
  %235 = load i8, ptr %55, align 1, !tbaa !11, !range !16, !noundef !17
  %236 = trunc i8 %235 to i1
  br i1 %236, label %243, label %237

237:                                              ; preds = %232
  %238 = load ptr, ptr %30, align 8, !tbaa !5
  %239 = load i64, ptr %32, align 8, !tbaa !9
  %240 = mul nsw i64 4, %239
  %241 = load ptr, ptr %34, align 8, !tbaa !5
  %242 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %238, i64 noundef %240, ptr noundef %241)
  br label %243

243:                                              ; preds = %237, %232
  %244 = phi i1 [ true, %232 ], [ %242, %237 ]
  %245 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %244, ptr noundef @.str.854, ptr noundef %245)
  %246 = load i64, ptr %23, align 8, !tbaa !9
  %247 = icmp eq i64 %246, 0
  br i1 %247, label %254, label %248

248:                                              ; preds = %243
  %249 = load i64, ptr %23, align 8, !tbaa !9
  %250 = icmp eq i64 %249, 1
  br i1 %250, label %254, label %251

251:                                              ; preds = %248
  %252 = load i64, ptr %23, align 8, !tbaa !9
  %253 = icmp eq i64 %252, 2
  br label %254

254:                                              ; preds = %251, %248, %243
  %255 = phi i1 [ true, %248 ], [ true, %243 ], [ %253, %251 ]
  %256 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %255, ptr noundef @.str.855, ptr noundef %256)
  %257 = load i64, ptr %25, align 8, !tbaa !9
  %258 = icmp eq i64 %257, 0
  br i1 %258, label %265, label %259

259:                                              ; preds = %254
  %260 = load i64, ptr %25, align 8, !tbaa !9
  %261 = icmp eq i64 %260, 1
  br i1 %261, label %265, label %262

262:                                              ; preds = %259
  %263 = load i64, ptr %25, align 8, !tbaa !9
  %264 = icmp eq i64 %263, 2
  br label %265

265:                                              ; preds = %262, %259, %254
  %266 = phi i1 [ true, %259 ], [ true, %254 ], [ %264, %262 ]
  %267 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %266, ptr noundef @.str.856, ptr noundef %267)
  %268 = load i64, ptr %27, align 8, !tbaa !9
  %269 = icmp eq i64 %268, 0
  br i1 %269, label %276, label %270

270:                                              ; preds = %265
  %271 = load i64, ptr %27, align 8, !tbaa !9
  %272 = icmp eq i64 %271, 1
  br i1 %272, label %276, label %273

273:                                              ; preds = %270
  %274 = load i64, ptr %27, align 8, !tbaa !9
  %275 = icmp eq i64 %274, 2
  br label %276

276:                                              ; preds = %273, %270, %265
  %277 = phi i1 [ true, %270 ], [ true, %265 ], [ %275, %273 ]
  %278 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %277, ptr noundef @.str.857, ptr noundef %278)
  %279 = load i64, ptr %29, align 8, !tbaa !9
  %280 = icmp eq i64 %279, 0
  br i1 %280, label %287, label %281

281:                                              ; preds = %276
  %282 = load i64, ptr %29, align 8, !tbaa !9
  %283 = icmp eq i64 %282, 1
  br i1 %283, label %287, label %284

284:                                              ; preds = %281
  %285 = load i64, ptr %29, align 8, !tbaa !9
  %286 = icmp eq i64 %285, 2
  br label %287

287:                                              ; preds = %284, %281, %276
  %288 = phi i1 [ true, %281 ], [ true, %276 ], [ %286, %284 ]
  %289 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %288, ptr noundef @.str.858, ptr noundef %289)
  %290 = load i64, ptr %19, align 8, !tbaa !9
  %291 = load i64, ptr %21, align 8, !tbaa !9
  %292 = mul nsw i64 %290, %291
  %293 = load i64, ptr %32, align 8, !tbaa !9
  %294 = mul nsw i64 %292, %293
  store i64 %294, ptr %53, align 8, !tbaa !9
  %295 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %40, i32 0, i32 0
  %296 = load i64, ptr %295, align 8, !tbaa !13
  %297 = load i64, ptr %53, align 8, !tbaa !9
  %298 = icmp sge i64 %296, %297
  %299 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %298, ptr noundef @.str.859, ptr noundef %299)
  %300 = load i64, ptr %53, align 8, !tbaa !9
  %301 = load ptr, ptr %34, align 8, !tbaa !5
  %302 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %40, i64 noundef %300, ptr noundef %301)
  %303 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %302, ptr noundef @.str.860, ptr noundef %303)
  %304 = load i64, ptr %32, align 8, !tbaa !9
  %305 = load ptr, ptr %33, align 8, !tbaa !5
  %306 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %305, i32 0, i32 4
  store i64 %304, ptr %306, align 8, !tbaa !18
  %307 = load i64, ptr %19, align 8, !tbaa !9
  %308 = load ptr, ptr %33, align 8, !tbaa !5
  %309 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %308, i32 0, i32 2
  store i64 %307, ptr %309, align 8, !tbaa !20
  %310 = load i64, ptr %21, align 8, !tbaa !9
  %311 = load ptr, ptr %33, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %311, i32 0, i32 3
  store i64 %310, ptr %312, align 8, !tbaa !21
  %313 = load ptr, ptr %33, align 8, !tbaa !5
  %314 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %313, i32 0, i32 0
  store i64 -3, ptr %314, align 8, !tbaa !22
  %315 = load ptr, ptr %33, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %315, i32 0, i32 1
  store i8 0, ptr %316, align 8, !tbaa !23
  %317 = load i64, ptr %53, align 8, !tbaa !9
  %318 = mul nsw i64 4, %317
  store i64 %318, ptr %53, align 8, !tbaa !9
  %319 = load ptr, ptr %33, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %319, i32 0, i32 5
  %321 = load ptr, ptr %33, 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 !20
  %324 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %320, i64 noundef %323, ptr noundef %324)
  %325 = load ptr, ptr %33, align 8, !tbaa !5
  %326 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %325, i32 0, i32 6
  %327 = load ptr, ptr %33, align 8, !tbaa !5
  %328 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %327, i32 0, i32 3
  %329 = load i64, ptr %328, align 8, !tbaa !21
  %330 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %326, i64 noundef %329, ptr noundef %330)
  %331 = load ptr, ptr %33, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %331, i32 0, i32 7
  %333 = load i64, ptr %53, align 8, !tbaa !9
  %334 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %332, i64 noundef %333, ptr noundef %334)
  %335 = load ptr, ptr %33, align 8, !tbaa !5
  %336 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %335, i32 0, i32 3
  %337 = load i64, ptr %336, align 8, !tbaa !21
  %338 = load ptr, ptr %33, align 8, !tbaa !5
  %339 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %338, i32 0, i32 2
  %340 = load i64, ptr %339, align 8, !tbaa !20
  %341 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef %41, i64 noundef %337, i64 noundef %340, ptr noundef %341)
  %342 = load i64, ptr %19, align 8, !tbaa !9
  %343 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %45, i64 noundef %342, ptr noundef %343)
  %344 = load i64, ptr %19, align 8, !tbaa !9
  %345 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %46, i64 noundef %344, ptr noundef %345)
  %346 = load i64, ptr %21, align 8, !tbaa !9
  %347 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %47, i64 noundef %346, ptr noundef %347)
  %348 = load i64, ptr %21, align 8, !tbaa !9
  %349 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %48, i64 noundef %348, ptr noundef %349)
  %350 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %49, i64 noundef 4, ptr noundef %350)
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %351

351:                                              ; preds = %371, %287
  %352 = load i64, ptr %51, align 8, !tbaa !9
  %353 = load ptr, ptr %33, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %353, i32 0, i32 2
  %355 = load i64, ptr %354, align 8, !tbaa !20
  %356 = sub nsw i64 %355, 1
  %357 = icmp sle i64 %352, %356
  br i1 %357, label %358, label %374

358:                                              ; preds = %351
  %359 = load ptr, ptr %18, align 8, !tbaa !5
  %360 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %359, i32 0, i32 4
  %361 = load ptr, ptr %360, align 8, !tbaa !24
  %362 = load i64, ptr %51, align 8, !tbaa !9
  %363 = getelementptr inbounds double, ptr %361, i64 %362
  %364 = load double, ptr %363, align 8, !tbaa !25
  %365 = load ptr, ptr %33, align 8, !tbaa !5
  %366 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %365, i32 0, i32 5
  %367 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %366, i32 0, i32 4
  %368 = load ptr, ptr %367, align 8, !tbaa !24
  %369 = load i64, ptr %51, align 8, !tbaa !9
  %370 = getelementptr inbounds double, ptr %368, i64 %369
  store double %364, ptr %370, align 8, !tbaa !25
  br label %371

371:                                              ; preds = %358
  %372 = load i64, ptr %51, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  store i64 %373, ptr %51, align 8, !tbaa !9
  br label %351, !llvm.loop !27

374:                                              ; preds = %351
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %375

375:                                              ; preds = %395, %374
  %376 = load i64, ptr %51, align 8, !tbaa !9
  %377 = load ptr, ptr %33, align 8, !tbaa !5
  %378 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %377, i32 0, i32 3
  %379 = load i64, ptr %378, align 8, !tbaa !21
  %380 = sub nsw i64 %379, 1
  %381 = icmp sle i64 %376, %380
  br i1 %381, label %382, label %398

382:                                              ; preds = %375
  %383 = load ptr, ptr %20, align 8, !tbaa !5
  %384 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %383, i32 0, i32 4
  %385 = load ptr, ptr %384, align 8, !tbaa !24
  %386 = load i64, ptr %51, align 8, !tbaa !9
  %387 = getelementptr inbounds double, ptr %385, i64 %386
  %388 = load double, ptr %387, align 8, !tbaa !25
  %389 = load ptr, ptr %33, align 8, !tbaa !5
  %390 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %389, i32 0, i32 6
  %391 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %390, i32 0, i32 4
  %392 = load ptr, ptr %391, align 8, !tbaa !24
  %393 = load i64, ptr %51, align 8, !tbaa !9
  %394 = getelementptr inbounds double, ptr %392, i64 %393
  store double %388, ptr %394, align 8, !tbaa !25
  br label %395

395:                                              ; preds = %382
  %396 = load i64, ptr %51, align 8, !tbaa !9
  %397 = add nsw i64 %396, 1
  store i64 %397, ptr %51, align 8, !tbaa !9
  br label %375, !llvm.loop !29

398:                                              ; preds = %375
  %399 = load ptr, ptr %33, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %399, i32 0, i32 5
  %401 = load i64, ptr %19, align 8, !tbaa !9
  %402 = load ptr, ptr %33, align 8, !tbaa !5
  %403 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %402, i32 0, i32 6
  %404 = load i64, ptr %21, align 8, !tbaa !9
  %405 = load i64, ptr %23, align 8, !tbaa !9
  %406 = icmp ne i64 %405, 0
  %407 = load i64, ptr %25, align 8, !tbaa !9
  %408 = icmp ne i64 %407, 0
  %409 = load i64, ptr %27, align 8, !tbaa !9
  %410 = icmp ne i64 %409, 0
  %411 = load i64, ptr %29, align 8, !tbaa !9
  %412 = icmp ne i64 %411, 0
  %413 = load i64, ptr %32, align 8, !tbaa !9
  %414 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_implL17spline2d_sortgridEPNS_9ae_vectorElS1_lS1_bS1_bS1_bS1_bS1_lS1_S1_S1_bPNS_8ae_stateE(ptr noundef %400, i64 noundef %401, ptr noundef %403, i64 noundef %404, ptr noundef %36, i1 noundef zeroext %406, ptr noundef %37, i1 noundef zeroext %408, ptr noundef %38, i1 noundef zeroext %410, ptr noundef %39, i1 noundef zeroext %412, ptr noundef %40, i64 noundef %413, ptr noundef %50, ptr noundef %50, ptr noundef %50, i1 noundef zeroext false, ptr noundef %414)
  store i64 0, ptr %54, align 8, !tbaa !9
  br label %415

415:                                              ; preds = %759, %398
  %416 = load i64, ptr %54, align 8, !tbaa !9
  %417 = load ptr, ptr %33, align 8, !tbaa !5
  %418 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %417, i32 0, i32 4
  %419 = load i64, ptr %418, align 8, !tbaa !18
  %420 = sub nsw i64 %419, 1
  %421 = icmp sle i64 %416, %420
  br i1 %421, label %422, label %762

422:                                              ; preds = %415
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %423

423:                                              ; preds = %467, %422
  %424 = load i64, ptr %51, align 8, !tbaa !9
  %425 = load ptr, ptr %33, align 8, !tbaa !5
  %426 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %425, i32 0, i32 3
  %427 = load i64, ptr %426, align 8, !tbaa !21
  %428 = sub nsw i64 %427, 1
  %429 = icmp sle i64 %424, %428
  br i1 %429, label %430, label %470

430:                                              ; preds = %423
  store i64 0, ptr %52, align 8, !tbaa !9
  br label %431

431:                                              ; preds = %463, %430
  %432 = load i64, ptr %52, align 8, !tbaa !9
  %433 = load ptr, ptr %33, align 8, !tbaa !5
  %434 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %433, i32 0, i32 2
  %435 = load i64, ptr %434, align 8, !tbaa !20
  %436 = sub nsw i64 %435, 1
  %437 = icmp sle i64 %432, %436
  br i1 %437, label %438, label %466

438:                                              ; preds = %431
  %439 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %40, i32 0, i32 4
  %440 = load ptr, ptr %439, align 8, !tbaa !24
  %441 = load ptr, ptr %33, align 8, !tbaa !5
  %442 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %441, i32 0, i32 4
  %443 = load i64, ptr %442, align 8, !tbaa !18
  %444 = load i64, ptr %51, align 8, !tbaa !9
  %445 = load ptr, ptr %33, align 8, !tbaa !5
  %446 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %445, i32 0, i32 2
  %447 = load i64, ptr %446, align 8, !tbaa !20
  %448 = mul nsw i64 %444, %447
  %449 = load i64, ptr %52, align 8, !tbaa !9
  %450 = add nsw i64 %448, %449
  %451 = mul nsw i64 %443, %450
  %452 = load i64, ptr %54, align 8, !tbaa !9
  %453 = add nsw i64 %451, %452
  %454 = getelementptr inbounds double, ptr %440, i64 %453
  %455 = load double, ptr %454, align 8, !tbaa !25
  %456 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %41, i32 0, i32 6
  %457 = load ptr, ptr %456, align 8, !tbaa !24
  %458 = load i64, ptr %51, align 8, !tbaa !9
  %459 = getelementptr inbounds ptr, ptr %457, i64 %458
  %460 = load ptr, ptr %459, align 8, !tbaa !5
  %461 = load i64, ptr %52, align 8, !tbaa !9
  %462 = getelementptr inbounds double, ptr %460, i64 %461
  store double %455, ptr %462, align 8, !tbaa !25
  br label %463

463:                                              ; preds = %438
  %464 = load i64, ptr %52, align 8, !tbaa !9
  %465 = add nsw i64 %464, 1
  store i64 %465, ptr %52, align 8, !tbaa !9
  br label %431, !llvm.loop !30

466:                                              ; preds = %431
  br label %467

467:                                              ; preds = %466
  %468 = load i64, ptr %51, align 8, !tbaa !9
  %469 = add nsw i64 %468, 1
  store i64 %469, ptr %51, align 8, !tbaa !9
  br label %423, !llvm.loop !31

470:                                              ; preds = %423
  %471 = load i64, ptr %23, align 8, !tbaa !9
  %472 = icmp ne i64 %471, 0
  br i1 %472, label %473, label %499

473:                                              ; preds = %470
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %474

474:                                              ; preds = %495, %473
  %475 = load i64, ptr %51, align 8, !tbaa !9
  %476 = load ptr, ptr %33, align 8, !tbaa !5
  %477 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %476, i32 0, i32 2
  %478 = load i64, ptr %477, align 8, !tbaa !20
  %479 = sub nsw i64 %478, 1
  %480 = icmp sle i64 %475, %479
  br i1 %480, label %481, label %498

481:                                              ; preds = %474
  %482 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %36, i32 0, i32 4
  %483 = load ptr, ptr %482, align 8, !tbaa !24
  %484 = load i64, ptr %51, align 8, !tbaa !9
  %485 = load i64, ptr %32, align 8, !tbaa !9
  %486 = mul nsw i64 %484, %485
  %487 = load i64, ptr %54, align 8, !tbaa !9
  %488 = add nsw i64 %486, %487
  %489 = getelementptr inbounds double, ptr %483, i64 %488
  %490 = load double, ptr %489, align 8, !tbaa !25
  %491 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %45, i32 0, i32 4
  %492 = load ptr, ptr %491, align 8, !tbaa !24
  %493 = load i64, ptr %51, align 8, !tbaa !9
  %494 = getelementptr inbounds double, ptr %492, i64 %493
  store double %490, ptr %494, align 8, !tbaa !25
  br label %495

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

498:                                              ; preds = %474
  br label %499

499:                                              ; preds = %498, %470
  %500 = load i64, ptr %25, align 8, !tbaa !9
  %501 = icmp ne i64 %500, 0
  br i1 %501, label %502, label %528

502:                                              ; preds = %499
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %503

503:                                              ; preds = %524, %502
  %504 = load i64, ptr %51, align 8, !tbaa !9
  %505 = load ptr, ptr %33, align 8, !tbaa !5
  %506 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %505, i32 0, i32 2
  %507 = load i64, ptr %506, align 8, !tbaa !20
  %508 = sub nsw i64 %507, 1
  %509 = icmp sle i64 %504, %508
  br i1 %509, label %510, label %527

510:                                              ; preds = %503
  %511 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %37, i32 0, i32 4
  %512 = load ptr, ptr %511, align 8, !tbaa !24
  %513 = load i64, ptr %51, align 8, !tbaa !9
  %514 = load i64, ptr %32, align 8, !tbaa !9
  %515 = mul nsw i64 %513, %514
  %516 = load i64, ptr %54, align 8, !tbaa !9
  %517 = add nsw i64 %515, %516
  %518 = getelementptr inbounds double, ptr %512, i64 %517
  %519 = load double, ptr %518, align 8, !tbaa !25
  %520 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %46, i32 0, i32 4
  %521 = load ptr, ptr %520, align 8, !tbaa !24
  %522 = load i64, ptr %51, align 8, !tbaa !9
  %523 = getelementptr inbounds double, ptr %521, i64 %522
  store double %519, ptr %523, align 8, !tbaa !25
  br label %524

524:                                              ; preds = %510
  %525 = load i64, ptr %51, align 8, !tbaa !9
  %526 = add nsw i64 %525, 1
  store i64 %526, ptr %51, align 8, !tbaa !9
  br label %503, !llvm.loop !33

527:                                              ; preds = %503
  br label %528

528:                                              ; preds = %527, %499
  %529 = load i64, ptr %27, align 8, !tbaa !9
  %530 = icmp ne i64 %529, 0
  br i1 %530, label %531, label %557

531:                                              ; preds = %528
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %532

532:                                              ; preds = %553, %531
  %533 = load i64, ptr %51, align 8, !tbaa !9
  %534 = load ptr, ptr %33, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %534, i32 0, i32 3
  %536 = load i64, ptr %535, align 8, !tbaa !21
  %537 = sub nsw i64 %536, 1
  %538 = icmp sle i64 %533, %537
  br i1 %538, label %539, label %556

539:                                              ; preds = %532
  %540 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %38, i32 0, i32 4
  %541 = load ptr, ptr %540, align 8, !tbaa !24
  %542 = load i64, ptr %51, align 8, !tbaa !9
  %543 = load i64, ptr %32, align 8, !tbaa !9
  %544 = mul nsw i64 %542, %543
  %545 = load i64, ptr %54, align 8, !tbaa !9
  %546 = add nsw i64 %544, %545
  %547 = getelementptr inbounds double, ptr %541, i64 %546
  %548 = load double, ptr %547, align 8, !tbaa !25
  %549 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %47, i32 0, i32 4
  %550 = load ptr, ptr %549, align 8, !tbaa !24
  %551 = load i64, ptr %51, align 8, !tbaa !9
  %552 = getelementptr inbounds double, ptr %550, i64 %551
  store double %548, ptr %552, align 8, !tbaa !25
  br label %553

553:                                              ; preds = %539
  %554 = load i64, ptr %51, align 8, !tbaa !9
  %555 = add nsw i64 %554, 1
  store i64 %555, ptr %51, align 8, !tbaa !9
  br label %532, !llvm.loop !34

556:                                              ; preds = %532
  br label %557

557:                                              ; preds = %556, %528
  %558 = load i64, ptr %29, align 8, !tbaa !9
  %559 = icmp ne i64 %558, 0
  br i1 %559, label %560, label %586

560:                                              ; preds = %557
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %561

561:                                              ; preds = %582, %560
  %562 = load i64, ptr %51, align 8, !tbaa !9
  %563 = load ptr, ptr %33, align 8, !tbaa !5
  %564 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %563, i32 0, i32 3
  %565 = load i64, ptr %564, align 8, !tbaa !21
  %566 = sub nsw i64 %565, 1
  %567 = icmp sle i64 %562, %566
  br i1 %567, label %568, label %585

568:                                              ; preds = %561
  %569 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %39, i32 0, i32 4
  %570 = load ptr, ptr %569, align 8, !tbaa !24
  %571 = load i64, ptr %51, align 8, !tbaa !9
  %572 = load i64, ptr %32, align 8, !tbaa !9
  %573 = mul nsw i64 %571, %572
  %574 = load i64, ptr %54, align 8, !tbaa !9
  %575 = add nsw i64 %573, %574
  %576 = getelementptr inbounds double, ptr %570, i64 %575
  %577 = load double, ptr %576, align 8, !tbaa !25
  %578 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %48, i32 0, i32 4
  %579 = load ptr, ptr %578, align 8, !tbaa !24
  %580 = load i64, ptr %51, align 8, !tbaa !9
  %581 = getelementptr inbounds double, ptr %579, i64 %580
  store double %577, ptr %581, align 8, !tbaa !25
  br label %582

582:                                              ; preds = %568
  %583 = load i64, ptr %51, align 8, !tbaa !9
  %584 = add nsw i64 %583, 1
  store i64 %584, ptr %51, align 8, !tbaa !9
  br label %561, !llvm.loop !35

585:                                              ; preds = %561
  br label %586

586:                                              ; preds = %585, %557
  %587 = load i8, ptr %55, align 1, !tbaa !11, !range !16, !noundef !17
  %588 = trunc i8 %587 to i1
  br i1 %588, label %612, label %589

589:                                              ; preds = %586
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %590

590:                                              ; preds = %608, %589
  %591 = load i64, ptr %51, align 8, !tbaa !9
  %592 = icmp sle i64 %591, 3
  br i1 %592, label %593, label %611

593:                                              ; preds = %590
  %594 = load ptr, ptr %30, align 8, !tbaa !5
  %595 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %594, i32 0, i32 4
  %596 = load ptr, ptr %595, align 8, !tbaa !24
  %597 = load i64, ptr %51, align 8, !tbaa !9
  %598 = load i64, ptr %32, align 8, !tbaa !9
  %599 = mul nsw i64 %597, %598
  %600 = load i64, ptr %54, align 8, !tbaa !9
  %601 = add nsw i64 %599, %600
  %602 = getelementptr inbounds double, ptr %596, i64 %601
  %603 = load double, ptr %602, align 8, !tbaa !25
  %604 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %49, i32 0, i32 4
  %605 = load ptr, ptr %604, align 8, !tbaa !24
  %606 = load i64, ptr %51, align 8, !tbaa !9
  %607 = getelementptr inbounds double, ptr %605, i64 %606
  store double %603, ptr %607, align 8, !tbaa !25
  br label %608

608:                                              ; preds = %593
  %609 = load i64, ptr %51, align 8, !tbaa !9
  %610 = add nsw i64 %609, 1
  store i64 %610, ptr %51, align 8, !tbaa !9
  br label %590, !llvm.loop !36

611:                                              ; preds = %590
  br label %612

612:                                              ; preds = %611, %586
  %613 = load ptr, ptr %33, align 8, !tbaa !5
  %614 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %613, i32 0, i32 5
  %615 = load ptr, ptr %33, align 8, !tbaa !5
  %616 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %615, i32 0, i32 6
  %617 = load ptr, ptr %33, align 8, !tbaa !5
  %618 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %617, i32 0, i32 3
  %619 = load i64, ptr %618, align 8, !tbaa !21
  %620 = load ptr, ptr %33, align 8, !tbaa !5
  %621 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %620, i32 0, i32 2
  %622 = load i64, ptr %621, align 8, !tbaa !20
  %623 = load i64, ptr %23, align 8, !tbaa !9
  %624 = load i64, ptr %25, align 8, !tbaa !9
  %625 = load i64, ptr %27, align 8, !tbaa !9
  %626 = load i64, ptr %29, align 8, !tbaa !9
  %627 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_implL31spline2d_bicubiccalcderivativesEPKNS_9ae_matrixEPKNS_9ae_vectorES5_llS5_lS5_lS5_lS5_lS5_PS0_S6_S6_PNS_8ae_stateE(ptr noundef %41, ptr noundef %614, ptr noundef %616, i64 noundef %619, i64 noundef %622, ptr noundef %45, i64 noundef %623, ptr noundef %46, i64 noundef %624, ptr noundef %47, i64 noundef %625, ptr noundef %48, i64 noundef %626, ptr noundef %49, ptr noundef %42, ptr noundef %43, ptr noundef %44, ptr noundef %627)
  store i64 0, ptr %51, align 8, !tbaa !9
  br label %628

628:                                              ; preds = %755, %612
  %629 = load i64, ptr %51, align 8, !tbaa !9
  %630 = load ptr, ptr %33, align 8, !tbaa !5
  %631 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %630, i32 0, i32 3
  %632 = load i64, ptr %631, align 8, !tbaa !21
  %633 = sub nsw i64 %632, 1
  %634 = icmp sle i64 %629, %633
  br i1 %634, label %635, label %758

635:                                              ; preds = %628
  store i64 0, ptr %52, align 8, !tbaa !9
  br label %636

636:                                              ; preds = %751, %635
  %637 = load i64, ptr %52, align 8, !tbaa !9
  %638 = load ptr, ptr %33, align 8, !tbaa !5
  %639 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %638, i32 0, i32 2
  %640 = load i64, ptr %639, align 8, !tbaa !20
  %641 = sub nsw i64 %640, 1
  %642 = icmp sle i64 %637, %641
  br i1 %642, label %643, label %754

643:                                              ; preds = %636
  %644 = load ptr, ptr %33, align 8, !tbaa !5
  %645 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %644, i32 0, i32 4
  %646 = load i64, ptr %645, align 8, !tbaa !18
  %647 = load i64, ptr %51, align 8, !tbaa !9
  %648 = load ptr, ptr %33, align 8, !tbaa !5
  %649 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %648, i32 0, i32 2
  %650 = load i64, ptr %649, align 8, !tbaa !20
  %651 = mul nsw i64 %647, %650
  %652 = load i64, ptr %52, align 8, !tbaa !9
  %653 = add nsw i64 %651, %652
  %654 = mul nsw i64 %646, %653
  %655 = load i64, ptr %54, align 8, !tbaa !9
  %656 = add nsw i64 %654, %655
  store i64 %656, ptr %53, align 8, !tbaa !9
  %657 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %41, i32 0, i32 6
  %658 = load ptr, ptr %657, align 8, !tbaa !24
  %659 = load i64, ptr %51, align 8, !tbaa !9
  %660 = getelementptr inbounds ptr, ptr %658, i64 %659
  %661 = load ptr, ptr %660, align 8, !tbaa !5
  %662 = load i64, ptr %52, align 8, !tbaa !9
  %663 = getelementptr inbounds double, ptr %661, i64 %662
  %664 = load double, ptr %663, align 8, !tbaa !25
  %665 = load ptr, ptr %33, align 8, !tbaa !5
  %666 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %665, i32 0, i32 7
  %667 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %666, i32 0, i32 4
  %668 = load ptr, ptr %667, align 8, !tbaa !24
  %669 = load i64, ptr %53, align 8, !tbaa !9
  %670 = getelementptr inbounds double, ptr %668, i64 %669
  store double %664, ptr %670, align 8, !tbaa !25
  %671 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %42, i32 0, i32 6
  %672 = load ptr, ptr %671, align 8, !tbaa !24
  %673 = load i64, ptr %51, align 8, !tbaa !9
  %674 = getelementptr inbounds ptr, ptr %672, i64 %673
  %675 = load ptr, ptr %674, align 8, !tbaa !5
  %676 = load i64, ptr %52, align 8, !tbaa !9
  %677 = getelementptr inbounds double, ptr %675, i64 %676
  %678 = load double, ptr %677, align 8, !tbaa !25
  %679 = load ptr, ptr %33, align 8, !tbaa !5
  %680 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %679, i32 0, i32 7
  %681 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %680, i32 0, i32 4
  %682 = load ptr, ptr %681, align 8, !tbaa !24
  %683 = load ptr, ptr %33, align 8, !tbaa !5
  %684 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %683, i32 0, i32 2
  %685 = load i64, ptr %684, align 8, !tbaa !20
  %686 = load ptr, ptr %33, align 8, !tbaa !5
  %687 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %686, i32 0, i32 3
  %688 = load i64, ptr %687, align 8, !tbaa !21
  %689 = mul nsw i64 %685, %688
  %690 = load ptr, ptr %33, align 8, !tbaa !5
  %691 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %690, i32 0, i32 4
  %692 = load i64, ptr %691, align 8, !tbaa !18
  %693 = mul nsw i64 %689, %692
  %694 = load i64, ptr %53, align 8, !tbaa !9
  %695 = add nsw i64 %693, %694
  %696 = getelementptr inbounds double, ptr %682, i64 %695
  store double %678, ptr %696, align 8, !tbaa !25
  %697 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %43, i32 0, i32 6
  %698 = load ptr, ptr %697, align 8, !tbaa !24
  %699 = load i64, ptr %51, align 8, !tbaa !9
  %700 = getelementptr inbounds ptr, ptr %698, i64 %699
  %701 = load ptr, ptr %700, align 8, !tbaa !5
  %702 = load i64, ptr %52, align 8, !tbaa !9
  %703 = getelementptr inbounds double, ptr %701, i64 %702
  %704 = load double, ptr %703, align 8, !tbaa !25
  %705 = load ptr, ptr %33, align 8, !tbaa !5
  %706 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %705, i32 0, i32 7
  %707 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %706, i32 0, i32 4
  %708 = load ptr, ptr %707, align 8, !tbaa !24
  %709 = load ptr, ptr %33, align 8, !tbaa !5
  %710 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %709, i32 0, i32 2
  %711 = load i64, ptr %710, align 8, !tbaa !20
  %712 = mul nsw i64 2, %711
  %713 = load ptr, ptr %33, 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 !21
  %716 = mul nsw i64 %712, %715
  %717 = load ptr, ptr %33, align 8, !tbaa !5
  %718 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %717, i32 0, i32 4
  %719 = load i64, ptr %718, align 8, !tbaa !18
  %720 = mul nsw i64 %716, %719
  %721 = load i64, ptr %53, align 8, !tbaa !9
  %722 = add nsw i64 %720, %721
  %723 = getelementptr inbounds double, ptr %708, i64 %722
  store double %704, ptr %723, align 8, !tbaa !25
  %724 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %44, i32 0, i32 6
  %725 = load ptr, ptr %724, align 8, !tbaa !24
  %726 = load i64, ptr %51, align 8, !tbaa !9
  %727 = getelementptr inbounds ptr, ptr %725, i64 %726
  %728 = load ptr, ptr %727, align 8, !tbaa !5
  %729 = load i64, ptr %52, align 8, !tbaa !9
  %730 = getelementptr inbounds double, ptr %728, i64 %729
  %731 = load double, ptr %730, align 8, !tbaa !25
  %732 = load ptr, ptr %33, align 8, !tbaa !5
  %733 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %732, i32 0, i32 7
  %734 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %733, i32 0, i32 4
  %735 = load ptr, ptr %734, align 8, !tbaa !24
  %736 = load ptr, ptr %33, align 8, !tbaa !5
  %737 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %736, i32 0, i32 2
  %738 = load i64, ptr %737, align 8, !tbaa !20
  %739 = mul nsw i64 3, %738
  %740 = load ptr, ptr %33, align 8, !tbaa !5
  %741 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %740, i32 0, i32 3
  %742 = load i64, ptr %741, align 8, !tbaa !21
  %743 = mul nsw i64 %739, %742
  %744 = load ptr, ptr %33, align 8, !tbaa !5
  %745 = getelementptr inbounds %"struct.alglib_impl::spline2dinterpolant", ptr %744, i32 0, i32 4
  %746 = load i64, ptr %745, align 8, !tbaa !18
  %747 = mul nsw i64 %743, %746
  %748 = load i64, ptr %53, align 8, !tbaa !9
  %749 = add nsw i64 %747, %748
  %750 = getelementptr inbounds double, ptr %735, i64 %749
  store double %731, ptr %750, align 8, !tbaa !25
  br label %751

751:                                              ; preds = %643
  %752 = load i64, ptr %52, align 8, !tbaa !9
  %753 = add nsw i64 %752, 1
  store i64 %753, ptr %52, align 8, !tbaa !9
  br label %636, !llvm.loop !37

754:                                              ; preds = %636
  br label %755

755:                                              ; preds = %754
  %756 = load i64, ptr %51, align 8, !tbaa !9
  %757 = add nsw i64 %756, 1
  store i64 %757, ptr %51, align 8, !tbaa !9
  br label %628, !llvm.loop !38

758:                                              ; preds = %628
  br label %759

759:                                              ; preds = %758
  %760 = load i64, ptr %54, align 8, !tbaa !9
  %761 = add nsw i64 %760, 1
  store i64 %761, ptr %54, align 8, !tbaa !9
  br label %415, !llvm.loop !39

762:                                              ; preds = %415
  %763 = load ptr, ptr %34, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %763)
  call void @llvm.lifetime.end.p0(i64 1, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #4
  ret void
}

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_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i1 noundef zeroext) #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_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #2

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

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

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

declare noundef i64 @_ZN11alglib_impl5imin4EllllPNS_8ae_stateE(i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) #2

declare noundef i64 @_ZN11alglib_impl5imax4EllllPNS_8ae_stateE(i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) #2

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

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

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, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"_ZTSN11alglib_impl9ae_vectorE", !10, i64 0, !10, i64 8, !12, i64 16, !15, i64 24, !7, i64 56}
!15 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!16 = !{i8 0, i8 2}
!17 = !{}
!18 = !{!19, !10, i64 32}
!19 = !{!"_ZTSN11alglib_impl19spline2dinterpolantE", !10, i64 0, !12, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !14, i64 40, !14, i64 104, !14, i64 168, !14, i64 232, !14, i64 296}
!20 = !{!19, !10, i64 16}
!21 = !{!19, !10, i64 24}
!22 = !{!19, !10, i64 0}
!23 = !{!19, !12, i64 8}
!24 = !{!7, !7, i64 0}
!25 = !{!26, !26, i64 0}
!26 = !{!"double", !7, i64 0}
!27 = distinct !{!27, !28}
!28 = !{!"llvm.loop.mustprogress"}
!29 = distinct !{!29, !28}
!30 = distinct !{!30, !28}
!31 = distinct !{!31, !28}
!32 = distinct !{!32, !28}
!33 = distinct !{!33, !28}
!34 = distinct !{!34, !28}
!35 = distinct !{!35, !28}
!36 = distinct !{!36, !28}
!37 = distinct !{!37, !28}
!38 = distinct !{!38, !28}
!39 = distinct !{!39, !28}


; 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 }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%union.anon.1 = type { ptr }

@.str.840 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.841 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.842 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.843 = external hidden unnamed_addr constant [71 x i8], align 1
@.str.844 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.845 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.846 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.847 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.848 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.849 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.850 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.851 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.852 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.853 = external hidden unnamed_addr constant [57 x i8], align 1
@.str.854 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.855 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.856 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.857 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.858 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.859 = external hidden unnamed_addr constant [66 x i8], align 1
@.str.860 = external hidden unnamed_addr constant [56 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_impl21spline2dbuildclampedvEPKNS_9ae_vectorElS2_lS2_lS2_lS2_lS2_lS2_S2_lPNS_19spline2dinterpolantEPNS_8ae_stateE(ptr noundef %0, i64 noundef %1, ptr noundef %2, i64 noundef %3, ptr noundef %4, i64 noundef %5, ptr noundef %6, i64 noundef %7, ptr noundef %8, i64 noundef %9, ptr noundef %10, i64 noundef %11, ptr noundef %12, ptr noundef %13, i64 noundef %14, ptr noundef %15, ptr noundef %16) local_unnamed_addr #3 {
  %18 = alloca %"struct.alglib_impl::ae_frame", align 8
  %19 = alloca %"struct.alglib_impl::ae_vector", align 8
  %20 = alloca %"struct.alglib_impl::ae_vector", align 8
  %21 = alloca %"struct.alglib_impl::ae_vector", align 8
  %22 = alloca %"struct.alglib_impl::ae_vector", align 8
  %23 = alloca %"struct.alglib_impl::ae_vector", align 8
  %24 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %25 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %26 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %27 = alloca %"struct.alglib_impl::ae_matrix", align 8
  %28 = alloca %"struct.alglib_impl::ae_vector", align 8
  %29 = alloca %"struct.alglib_impl::ae_vector", align 8
  %30 = alloca %"struct.alglib_impl::ae_vector", align 8
  %31 = alloca %"struct.alglib_impl::ae_vector", align 8
  %32 = alloca %"struct.alglib_impl::ae_vector", align 8
  %33 = alloca %"struct.alglib_impl::ae_vector", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %18) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %19) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %20) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %21) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %22) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %23) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %24) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %25) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %26) #4
  call void @llvm.lifetime.start.p0(i64 80, ptr nonnull %27) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %28) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %29) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %30) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %31) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %32) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %33) #4
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %16, ptr noundef nonnull %18)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %19, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %20, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %21, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %22, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %23, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %24, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %25, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %26, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(80) %27, i8 0, i64 80, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %28, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %29, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %30, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %31, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %32, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %33, i8 0, i64 64, i1 false)
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef nonnull %19, ptr noundef %4, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef nonnull %20, ptr noundef %6, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef nonnull %21, ptr noundef %8, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef nonnull %22, ptr noundef %10, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl19ae_vector_init_copyEPNS_9ae_vectorEPKS0_PNS_8ae_stateEb(ptr noundef nonnull %23, ptr noundef %13, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl26_spline2dinterpolant_clearEPv(ptr noundef %15)
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef nonnull %24, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef nonnull %25, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef nonnull %26, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_matrix_initEPNS_9ae_matrixElllPNS_8ae_stateEb(ptr noundef nonnull %27, i64 noundef 0, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %28, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %29, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %30, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %31, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %32, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %33, i64 noundef 0, i64 noundef 3, ptr noundef %16, i1 noundef zeroext true)
  %34 = call noundef i64 @_ZN11alglib_impl5imin4EllllPNS_8ae_stateE(i64 noundef %5, i64 noundef %7, i64 noundef %9, i64 noundef %11, ptr noundef %16)
  %35 = icmp eq i64 %34, 0
  br i1 %35, label %36, label %39

36:                                               ; preds = %17
  %37 = call noundef i64 @_ZN11alglib_impl5imax4EllllPNS_8ae_stateE(i64 noundef %5, i64 noundef %7, i64 noundef %9, i64 noundef %11, ptr noundef %16)
  %38 = icmp eq i64 %37, 0
  br label %39

39:                                               ; preds = %36, %17
  %40 = phi i1 [ false, %17 ], [ %38, %36 ]
  %41 = icmp sgt i64 %1, 1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %41, ptr noundef nonnull @.str.840, ptr noundef %16)
  %42 = icmp sgt i64 %3, 1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %42, ptr noundef nonnull @.str.841, ptr noundef %16)
  %43 = icmp sgt i64 %14, 0
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %43, ptr noundef nonnull @.str.842, ptr noundef %16)
  %44 = load i64, ptr %0, align 8, !tbaa !5
  %.not = icmp slt i64 %44, %1
  br i1 %.not, label %48, label %45

45:                                               ; preds = %39
  %46 = load i64, ptr %2, align 8, !tbaa !5
  %47 = icmp sge i64 %46, %3
  br label %48

48:                                               ; preds = %45, %39
  %49 = phi i1 [ false, %39 ], [ %47, %45 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %49, ptr noundef nonnull @.str.843, ptr noundef %16)
  %50 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %0, i64 noundef %1, ptr noundef %16)
  br i1 %50, label %51, label %53

51:                                               ; preds = %48
  %52 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %2, i64 noundef %3, ptr noundef %16)
  br label %53

53:                                               ; preds = %51, %48
  %54 = phi i1 [ false, %48 ], [ %52, %51 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %54, ptr noundef nonnull @.str.844, ptr noundef %16)
  %55 = icmp eq i64 %5, 0
  %56 = load i64, ptr %19, align 8
  %57 = mul i64 %14, %1
  %58 = icmp sge i64 %56, %57
  %59 = select i1 %55, i1 true, i1 %58
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %59, ptr noundef nonnull @.str.845, ptr noundef %16)
  br i1 %55, label %62, label %60

60:                                               ; preds = %53
  %61 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %19, i64 noundef %57, ptr noundef %16)
  br label %62

62:                                               ; preds = %60, %53
  %63 = phi i1 [ true, %53 ], [ %61, %60 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %63, ptr noundef nonnull @.str.846, ptr noundef %16)
  %64 = icmp eq i64 %7, 0
  %65 = load i64, ptr %20, align 8
  %66 = icmp sge i64 %65, %57
  %67 = select i1 %64, i1 true, i1 %66
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %67, ptr noundef nonnull @.str.847, ptr noundef %16)
  br i1 %64, label %70, label %68

68:                                               ; preds = %62
  %69 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %20, i64 noundef %57, ptr noundef %16)
  br label %70

70:                                               ; preds = %68, %62
  %71 = phi i1 [ true, %62 ], [ %69, %68 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %71, ptr noundef nonnull @.str.848, ptr noundef %16)
  %72 = icmp eq i64 %9, 0
  %73 = load i64, ptr %21, align 8
  %74 = mul nsw i64 %14, %3
  %75 = icmp sge i64 %73, %74
  %76 = select i1 %72, i1 true, i1 %75
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %76, ptr noundef nonnull @.str.849, ptr noundef %16)
  br i1 %72, label %79, label %77

77:                                               ; preds = %70
  %78 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %21, i64 noundef %74, ptr noundef %16)
  br label %79

79:                                               ; preds = %77, %70
  %80 = phi i1 [ true, %70 ], [ %78, %77 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %80, ptr noundef nonnull @.str.850, ptr noundef %16)
  %81 = icmp eq i64 %11, 0
  %82 = load i64, ptr %22, align 8
  %83 = icmp sge i64 %82, %74
  %84 = select i1 %81, i1 true, i1 %83
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %84, ptr noundef nonnull @.str.851, ptr noundef %16)
  br i1 %81, label %87, label %85

85:                                               ; preds = %79
  %86 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %22, i64 noundef %74, ptr noundef %16)
  br label %87

87:                                               ; preds = %85, %79
  %88 = phi i1 [ true, %79 ], [ %86, %85 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %88, ptr noundef nonnull @.str.852, ptr noundef %16)
  br i1 %40, label %.critedge, label %89

89:                                               ; preds = %87
  %90 = load i64, ptr %12, align 8, !tbaa !5
  %91 = shl nsw i64 %14, 2
  %92 = icmp sge i64 %90, %91
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %92, ptr noundef nonnull @.str.853, ptr noundef %16)
  %93 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %12, i64 noundef %91, ptr noundef %16)
  br label %94

.critedge:                                        ; preds = %87
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext true, ptr noundef nonnull @.str.853, ptr noundef %16)
  br label %94

94:                                               ; preds = %.critedge, %89
  %95 = phi i1 [ %93, %89 ], [ true, %.critedge ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %95, ptr noundef nonnull @.str.854, ptr noundef %16)
  %spec.select = icmp ult i64 %5, 3
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %spec.select, ptr noundef nonnull @.str.855, ptr noundef %16)
  %96 = icmp ult i64 %7, 3
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %96, ptr noundef nonnull @.str.856, ptr noundef %16)
  %97 = icmp ult i64 %9, 3
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %97, ptr noundef nonnull @.str.857, ptr noundef %16)
  %98 = icmp ult i64 %11, 3
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %98, ptr noundef nonnull @.str.858, ptr noundef %16)
  %99 = mul i64 %57, %3
  %100 = load i64, ptr %23, align 8, !tbaa !5
  %101 = icmp sge i64 %100, %99
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %101, ptr noundef nonnull @.str.859, ptr noundef %16)
  %102 = call noundef zeroext i1 @_ZN11alglib_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %23, i64 noundef %99, ptr noundef %16)
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %102, ptr noundef nonnull @.str.860, ptr noundef %16)
  %103 = getelementptr inbounds i8, ptr %15, i64 32
  store i64 %14, ptr %103, align 8, !tbaa !13
  %104 = getelementptr inbounds i8, ptr %15, i64 16
  store i64 %1, ptr %104, align 8, !tbaa !15
  %105 = getelementptr inbounds i8, ptr %15, i64 24
  store i64 %3, ptr %105, align 8, !tbaa !16
  store i64 -3, ptr %15, align 8, !tbaa !17
  %106 = getelementptr inbounds i8, ptr %15, i64 8
  store i8 0, ptr %106, align 8, !tbaa !18
  %107 = shl nsw i64 %99, 2
  %108 = getelementptr inbounds i8, ptr %15, i64 40
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %108, i64 noundef %1, ptr noundef %16)
  %109 = getelementptr inbounds i8, ptr %15, i64 104
  %110 = load i64, ptr %105, align 8, !tbaa !16
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %109, i64 noundef %110, ptr noundef %16)
  %111 = getelementptr inbounds i8, ptr %15, i64 168
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %111, i64 noundef %107, ptr noundef %16)
  %112 = load i64, ptr %105, align 8, !tbaa !16
  %113 = load i64, ptr %104, align 8, !tbaa !15
  call void @_ZN11alglib_impl20ae_matrix_set_lengthEPNS_9ae_matrixEllPNS_8ae_stateE(ptr noundef nonnull %24, i64 noundef %112, i64 noundef %113, ptr noundef %16)
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %28, i64 noundef %1, ptr noundef %16)
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %29, i64 noundef %1, ptr noundef %16)
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %30, i64 noundef %3, ptr noundef %16)
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %31, i64 noundef %3, ptr noundef %16)
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %32, i64 noundef 4, ptr noundef %16)
  %114 = load i64, ptr %104, align 8, !tbaa !15
  %.not288.not311 = icmp sgt i64 %114, 0
  br i1 %.not288.not311, label %.lr.ph, label %.preheader310

.lr.ph:                                           ; preds = %94
  %115 = getelementptr inbounds i8, ptr %0, i64 56
  %116 = getelementptr inbounds i8, ptr %15, i64 96
  %xtraiter = and i64 %114, 3
  %117 = icmp ult i64 %114, 4
  br i1 %117, label %.preheader310.loopexit.unr-lcssa, label %.lr.ph.new

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

.preheader310.loopexit.unr-lcssa:                 ; preds = %128, %.lr.ph
  %.0312.unr = phi i64 [ 0, %.lr.ph ], [ %152, %128 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader310, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader310.loopexit.unr-lcssa, %.epil.preheader
  %.0312.epil = phi i64 [ %123, %.epil.preheader ], [ %.0312.unr, %.preheader310.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader310.loopexit.unr-lcssa ]
  %118 = load ptr, ptr %115, align 8, !tbaa !19
  %119 = getelementptr inbounds double, ptr %118, i64 %.0312.epil
  %120 = load double, ptr %119, align 8, !tbaa !20
  %121 = load ptr, ptr %116, align 8, !tbaa !19
  %122 = getelementptr inbounds double, ptr %121, i64 %.0312.epil
  store double %120, ptr %122, align 8, !tbaa !20
  %123 = add nuw nsw i64 %.0312.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 %.preheader310, label %.epil.preheader, !llvm.loop !22

.preheader310:                                    ; preds = %.preheader310.loopexit.unr-lcssa, %.epil.preheader, %94
  %124 = load i64, ptr %105, align 8, !tbaa !16
  %.not289.not313 = icmp sgt i64 %124, 0
  br i1 %.not289.not313, label %.lr.ph315, label %._crit_edge

.lr.ph315:                                        ; preds = %.preheader310
  %125 = getelementptr inbounds i8, ptr %2, i64 56
  %126 = getelementptr inbounds i8, ptr %15, i64 160
  %xtraiter365 = and i64 %124, 3
  %127 = icmp ult i64 %124, 4
  br i1 %127, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph315.new

.lr.ph315.new:                                    ; preds = %.lr.ph315
  %unroll_iter368 = and i64 %124, 9223372036854775804
  br label %153

128:                                              ; preds = %128, %.lr.ph.new
  %.0312 = phi i64 [ 0, %.lr.ph.new ], [ %152, %128 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %128 ]
  %129 = load ptr, ptr %115, align 8, !tbaa !19
  %130 = getelementptr inbounds double, ptr %129, i64 %.0312
  %131 = load double, ptr %130, align 8, !tbaa !20
  %132 = load ptr, ptr %116, align 8, !tbaa !19
  %133 = getelementptr inbounds double, ptr %132, i64 %.0312
  store double %131, ptr %133, align 8, !tbaa !20
  %134 = or disjoint i64 %.0312, 1
  %135 = load ptr, ptr %115, align 8, !tbaa !19
  %136 = getelementptr inbounds double, ptr %135, i64 %134
  %137 = load double, ptr %136, align 8, !tbaa !20
  %138 = load ptr, ptr %116, align 8, !tbaa !19
  %139 = getelementptr inbounds double, ptr %138, i64 %134
  store double %137, ptr %139, align 8, !tbaa !20
  %140 = or disjoint i64 %.0312, 2
  %141 = load ptr, ptr %115, align 8, !tbaa !19
  %142 = getelementptr inbounds double, ptr %141, i64 %140
  %143 = load double, ptr %142, align 8, !tbaa !20
  %144 = load ptr, ptr %116, align 8, !tbaa !19
  %145 = getelementptr inbounds double, ptr %144, i64 %140
  store double %143, ptr %145, align 8, !tbaa !20
  %146 = or disjoint i64 %.0312, 3
  %147 = load ptr, ptr %115, align 8, !tbaa !19
  %148 = getelementptr inbounds double, ptr %147, i64 %146
  %149 = load double, ptr %148, align 8, !tbaa !20
  %150 = load ptr, ptr %116, align 8, !tbaa !19
  %151 = getelementptr inbounds double, ptr %150, i64 %146
  store double %149, ptr %151, align 8, !tbaa !20
  %152 = add nuw nsw i64 %.0312, 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 %.preheader310.loopexit.unr-lcssa, label %128, !llvm.loop !24

153:                                              ; preds = %153, %.lr.ph315.new
  %.1314 = phi i64 [ 0, %.lr.ph315.new ], [ %177, %153 ]
  %niter369 = phi i64 [ 0, %.lr.ph315.new ], [ %niter369.next.3, %153 ]
  %154 = load ptr, ptr %125, align 8, !tbaa !19
  %155 = getelementptr inbounds double, ptr %154, i64 %.1314
  %156 = load double, ptr %155, align 8, !tbaa !20
  %157 = load ptr, ptr %126, align 8, !tbaa !19
  %158 = getelementptr inbounds double, ptr %157, i64 %.1314
  store double %156, ptr %158, align 8, !tbaa !20
  %159 = or disjoint i64 %.1314, 1
  %160 = load ptr, ptr %125, align 8, !tbaa !19
  %161 = getelementptr inbounds double, ptr %160, i64 %159
  %162 = load double, ptr %161, align 8, !tbaa !20
  %163 = load ptr, ptr %126, align 8, !tbaa !19
  %164 = getelementptr inbounds double, ptr %163, i64 %159
  store double %162, ptr %164, align 8, !tbaa !20
  %165 = or disjoint i64 %.1314, 2
  %166 = load ptr, ptr %125, align 8, !tbaa !19
  %167 = getelementptr inbounds double, ptr %166, i64 %165
  %168 = load double, ptr %167, align 8, !tbaa !20
  %169 = load ptr, ptr %126, align 8, !tbaa !19
  %170 = getelementptr inbounds double, ptr %169, i64 %165
  store double %168, ptr %170, align 8, !tbaa !20
  %171 = or disjoint i64 %.1314, 3
  %172 = load ptr, ptr %125, align 8, !tbaa !19
  %173 = getelementptr inbounds double, ptr %172, i64 %171
  %174 = load double, ptr %173, align 8, !tbaa !20
  %175 = load ptr, ptr %126, align 8, !tbaa !19
  %176 = getelementptr inbounds double, ptr %175, i64 %171
  store double %174, ptr %176, align 8, !tbaa !20
  %177 = add nuw nsw i64 %.1314, 4
  %niter369.next.3 = add i64 %niter369, 4
  %niter369.ncmp.3 = icmp eq i64 %niter369.next.3, %unroll_iter368
  br i1 %niter369.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %153, !llvm.loop !26

._crit_edge.loopexit.unr-lcssa:                   ; preds = %153, %.lr.ph315
  %.1314.unr = phi i64 [ 0, %.lr.ph315 ], [ %177, %153 ]
  %lcmp.mod367.not = icmp eq i64 %xtraiter365, 0
  br i1 %lcmp.mod367.not, label %._crit_edge, label %.epil.preheader364

.epil.preheader364:                               ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader364
  %.1314.epil = phi i64 [ %183, %.epil.preheader364 ], [ %.1314.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter366 = phi i64 [ %epil.iter366.next, %.epil.preheader364 ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %178 = load ptr, ptr %125, align 8, !tbaa !19
  %179 = getelementptr inbounds double, ptr %178, i64 %.1314.epil
  %180 = load double, ptr %179, align 8, !tbaa !20
  %181 = load ptr, ptr %126, align 8, !tbaa !19
  %182 = getelementptr inbounds double, ptr %181, i64 %.1314.epil
  store double %180, ptr %182, align 8, !tbaa !20
  %183 = add nuw nsw i64 %.1314.epil, 1
  %epil.iter366.next = add i64 %epil.iter366, 1
  %epil.iter366.cmp.not = icmp eq i64 %epil.iter366.next, %xtraiter365
  br i1 %epil.iter366.cmp.not, label %._crit_edge, label %.epil.preheader364, !llvm.loop !27

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader364, %.preheader310
  %184 = icmp ne i64 %5, 0
  %185 = icmp ne i64 %7, 0
  %186 = icmp ne i64 %9, 0
  %187 = icmp ne i64 %11, 0
  call void @_ZN11alglib_implL17spline2d_sortgridEPNS_9ae_vectorElS1_lS1_bS1_bS1_bS1_bS1_lS1_S1_S1_bPNS_8ae_stateE(ptr noundef nonnull %108, i64 noundef %1, ptr noundef nonnull %109, i64 noundef %3, ptr noundef nonnull %19, i1 noundef zeroext %184, ptr noundef nonnull %20, i1 noundef zeroext %185, ptr noundef nonnull %21, i1 noundef zeroext %186, ptr noundef nonnull %22, i1 noundef zeroext %187, ptr noundef nonnull %23, i64 noundef %14, ptr noundef nonnull %33, ptr noundef nonnull %33, ptr noundef nonnull %33, i1 noundef zeroext false, ptr noundef %16)
  %188 = load i64, ptr %103, align 8, !tbaa !13
  %.not290.not346 = icmp sgt i64 %188, 0
  br i1 %.not290.not346, label %.preheader309.lr.ph, label %._crit_edge349

.preheader309.lr.ph:                              ; preds = %._crit_edge
  %189 = getelementptr inbounds i8, ptr %23, i64 56
  %190 = getelementptr inbounds i8, ptr %24, i64 72
  %191 = getelementptr inbounds i8, ptr %19, i64 56
  %192 = getelementptr inbounds i8, ptr %28, i64 56
  %193 = getelementptr inbounds i8, ptr %20, i64 56
  %194 = getelementptr inbounds i8, ptr %29, i64 56
  %195 = getelementptr inbounds i8, ptr %21, i64 56
  %196 = getelementptr inbounds i8, ptr %30, i64 56
  %197 = getelementptr inbounds i8, ptr %22, i64 56
  %198 = getelementptr inbounds i8, ptr %31, i64 56
  %199 = getelementptr inbounds i8, ptr %12, i64 56
  %200 = getelementptr inbounds i8, ptr %32, i64 56
  %201 = getelementptr inbounds i8, ptr %15, i64 224
  %202 = getelementptr inbounds i8, ptr %25, i64 72
  %203 = getelementptr inbounds i8, ptr %26, i64 72
  %204 = getelementptr inbounds i8, ptr %27, i64 72
  %.pre = load i64, ptr %105, align 8, !tbaa !16
  %.idx = shl i64 %14, 4
  %.idx363 = mul i64 %14, 24
  br label %.preheader309

.preheader309:                                    ; preds = %.preheader309.lr.ph, %._crit_edge345
  %205 = phi i64 [ %.pre, %.preheader309.lr.ph ], [ %364, %._crit_edge345 ]
  %206 = phi i64 [ %188, %.preheader309.lr.ph ], [ %410, %._crit_edge345 ]
  %.0281347 = phi i64 [ 0, %.preheader309.lr.ph ], [ %409, %._crit_edge345 ]
  %.not291.not320 = icmp sgt i64 %205, 0
  br i1 %.not291.not320, label %.preheader299.lr.ph, label %._crit_edge322

.preheader299.lr.ph:                              ; preds = %.preheader309
  %207 = load i64, ptr %104, align 8, !tbaa !15
  %.not298.not316 = icmp sgt i64 %207, 0
  br i1 %.not298.not316, label %.preheader299.us.preheader, label %._crit_edge322

.preheader299.us.preheader:                       ; preds = %.preheader299.lr.ph
  %xtraiter371 = and i64 %207, 1
  %208 = icmp eq i64 %207, 1
  %unroll_iter374 = and i64 %207, 9223372036854775806
  %lcmp.mod373.not = icmp eq i64 %xtraiter371, 0
  br label %.preheader299.us

.preheader299.us:                                 ; preds = %.preheader299.us.preheader, %._crit_edge319.us
  %.2321.us = phi i64 [ %242, %._crit_edge319.us ], [ 0, %.preheader299.us.preheader ]
  %209 = mul nuw nsw i64 %207, %.2321.us
  br i1 %208, label %._crit_edge319.us.unr-lcssa, label %.preheader299.us.new

.preheader299.us.new:                             ; preds = %.preheader299.us, %.preheader299.us.new
  %.0282317.us = phi i64 [ %231, %.preheader299.us.new ], [ 0, %.preheader299.us ]
  %niter375 = phi i64 [ %niter375.next.1, %.preheader299.us.new ], [ 0, %.preheader299.us ]
  %210 = load ptr, ptr %189, align 8, !tbaa !19
  %211 = add nuw nsw i64 %209, %.0282317.us
  %212 = mul nsw i64 %211, %206
  %213 = getelementptr double, ptr %210, i64 %212
  %214 = getelementptr double, ptr %213, i64 %.0281347
  %215 = load double, ptr %214, align 8, !tbaa !20
  %216 = load ptr, ptr %190, align 8, !tbaa !19
  %217 = getelementptr inbounds ptr, ptr %216, i64 %.2321.us
  %218 = load ptr, ptr %217, align 8, !tbaa !28
  %219 = getelementptr inbounds double, ptr %218, i64 %.0282317.us
  store double %215, ptr %219, align 8, !tbaa !20
  %220 = or disjoint i64 %.0282317.us, 1
  %221 = load ptr, ptr %189, align 8, !tbaa !19
  %222 = add nuw nsw i64 %209, %220
  %223 = mul nsw i64 %222, %206
  %224 = getelementptr double, ptr %221, i64 %223
  %225 = getelementptr double, ptr %224, i64 %.0281347
  %226 = load double, ptr %225, align 8, !tbaa !20
  %227 = load ptr, ptr %190, align 8, !tbaa !19
  %228 = getelementptr inbounds ptr, ptr %227, i64 %.2321.us
  %229 = load ptr, ptr %228, align 8, !tbaa !28
  %230 = getelementptr inbounds double, ptr %229, i64 %220
  store double %226, ptr %230, align 8, !tbaa !20
  %231 = add nuw nsw i64 %.0282317.us, 2
  %niter375.next.1 = add i64 %niter375, 2
  %niter375.ncmp.1 = icmp eq i64 %niter375.next.1, %unroll_iter374
  br i1 %niter375.ncmp.1, label %._crit_edge319.us.unr-lcssa, label %.preheader299.us.new, !llvm.loop !29

._crit_edge319.us.unr-lcssa:                      ; preds = %.preheader299.us.new, %.preheader299.us
  %.0282317.us.unr = phi i64 [ 0, %.preheader299.us ], [ %231, %.preheader299.us.new ]
  br i1 %lcmp.mod373.not, label %._crit_edge319.us, label %._crit_edge319.us.epilog-lcssa

._crit_edge319.us.epilog-lcssa:                   ; preds = %._crit_edge319.us.unr-lcssa
  %232 = load ptr, ptr %189, align 8, !tbaa !19
  %233 = add nuw nsw i64 %209, %.0282317.us.unr
  %234 = mul nsw i64 %233, %206
  %235 = getelementptr double, ptr %232, i64 %234
  %236 = getelementptr double, ptr %235, i64 %.0281347
  %237 = load double, ptr %236, align 8, !tbaa !20
  %238 = load ptr, ptr %190, align 8, !tbaa !19
  %239 = getelementptr inbounds ptr, ptr %238, i64 %.2321.us
  %240 = load ptr, ptr %239, align 8, !tbaa !28
  %241 = getelementptr inbounds double, ptr %240, i64 %.0282317.us.unr
  store double %237, ptr %241, align 8, !tbaa !20
  br label %._crit_edge319.us

._crit_edge319.us:                                ; preds = %._crit_edge319.us.unr-lcssa, %._crit_edge319.us.epilog-lcssa
  %242 = add nuw nsw i64 %.2321.us, 1
  %exitcond355.not = icmp eq i64 %242, %205
  br i1 %exitcond355.not, label %._crit_edge322, label %.preheader299.us, !llvm.loop !30

._crit_edge322:                                   ; preds = %._crit_edge319.us, %.preheader299.lr.ph, %.preheader309
  br i1 %184, label %.preheader307, label %.loopexit308

.preheader307:                                    ; preds = %._crit_edge322
  %243 = load i64, ptr %104, align 8, !tbaa !15
  %.not292.not323 = icmp sgt i64 %243, 0
  br i1 %.not292.not323, label %.lr.ph325.preheader, label %.loopexit308

.lr.ph325.preheader:                              ; preds = %.preheader307
  %xtraiter376 = and i64 %243, 1
  %244 = icmp eq i64 %243, 1
  br i1 %244, label %.loopexit308.loopexit.unr-lcssa, label %.lr.ph325.preheader.new

.lr.ph325.preheader.new:                          ; preds = %.lr.ph325.preheader
  %unroll_iter379 = and i64 %243, 9223372036854775806
  br label %.lr.ph325

.lr.ph325:                                        ; preds = %.lr.ph325, %.lr.ph325.preheader.new
  %.3324 = phi i64 [ 0, %.lr.ph325.preheader.new ], [ %260, %.lr.ph325 ]
  %niter380 = phi i64 [ 0, %.lr.ph325.preheader.new ], [ %niter380.next.1, %.lr.ph325 ]
  %245 = load ptr, ptr %191, align 8, !tbaa !19
  %246 = mul nsw i64 %.3324, %14
  %247 = getelementptr double, ptr %245, i64 %246
  %248 = getelementptr double, ptr %247, i64 %.0281347
  %249 = load double, ptr %248, align 8, !tbaa !20
  %250 = load ptr, ptr %192, align 8, !tbaa !19
  %251 = getelementptr inbounds double, ptr %250, i64 %.3324
  store double %249, ptr %251, align 8, !tbaa !20
  %252 = or disjoint i64 %.3324, 1
  %253 = load ptr, ptr %191, align 8, !tbaa !19
  %254 = mul nsw i64 %252, %14
  %255 = getelementptr double, ptr %253, i64 %254
  %256 = getelementptr double, ptr %255, i64 %.0281347
  %257 = load double, ptr %256, align 8, !tbaa !20
  %258 = load ptr, ptr %192, align 8, !tbaa !19
  %259 = getelementptr inbounds double, ptr %258, i64 %252
  store double %257, ptr %259, align 8, !tbaa !20
  %260 = add nuw nsw i64 %.3324, 2
  %niter380.next.1 = add i64 %niter380, 2
  %niter380.ncmp.1 = icmp eq i64 %niter380.next.1, %unroll_iter379
  br i1 %niter380.ncmp.1, label %.loopexit308.loopexit.unr-lcssa, label %.lr.ph325, !llvm.loop !31

.loopexit308.loopexit.unr-lcssa:                  ; preds = %.lr.ph325, %.lr.ph325.preheader
  %.3324.unr = phi i64 [ 0, %.lr.ph325.preheader ], [ %260, %.lr.ph325 ]
  %lcmp.mod378.not = icmp eq i64 %xtraiter376, 0
  br i1 %lcmp.mod378.not, label %.loopexit308, label %.lr.ph325.epil

.lr.ph325.epil:                                   ; preds = %.loopexit308.loopexit.unr-lcssa
  %261 = load ptr, ptr %191, align 8, !tbaa !19
  %262 = mul nsw i64 %.3324.unr, %14
  %263 = getelementptr double, ptr %261, i64 %262
  %264 = getelementptr double, ptr %263, i64 %.0281347
  %265 = load double, ptr %264, align 8, !tbaa !20
  %266 = load ptr, ptr %192, align 8, !tbaa !19
  %267 = getelementptr inbounds double, ptr %266, i64 %.3324.unr
  store double %265, ptr %267, align 8, !tbaa !20
  br label %.loopexit308

.loopexit308:                                     ; preds = %.lr.ph325.epil, %.loopexit308.loopexit.unr-lcssa, %.preheader307, %._crit_edge322
  br i1 %185, label %.preheader305, label %.loopexit306

.preheader305:                                    ; preds = %.loopexit308
  %268 = load i64, ptr %104, align 8, !tbaa !15
  %.not293.not326 = icmp sgt i64 %268, 0
  br i1 %.not293.not326, label %.lr.ph328.preheader, label %.loopexit306

.lr.ph328.preheader:                              ; preds = %.preheader305
  %xtraiter381 = and i64 %268, 1
  %269 = icmp eq i64 %268, 1
  br i1 %269, label %.loopexit306.loopexit.unr-lcssa, label %.lr.ph328.preheader.new

.lr.ph328.preheader.new:                          ; preds = %.lr.ph328.preheader
  %unroll_iter384 = and i64 %268, 9223372036854775806
  br label %.lr.ph328

.lr.ph328:                                        ; preds = %.lr.ph328, %.lr.ph328.preheader.new
  %.4327 = phi i64 [ 0, %.lr.ph328.preheader.new ], [ %285, %.lr.ph328 ]
  %niter385 = phi i64 [ 0, %.lr.ph328.preheader.new ], [ %niter385.next.1, %.lr.ph328 ]
  %270 = load ptr, ptr %193, align 8, !tbaa !19
  %271 = mul nsw i64 %.4327, %14
  %272 = getelementptr double, ptr %270, i64 %271
  %273 = getelementptr double, ptr %272, i64 %.0281347
  %274 = load double, ptr %273, align 8, !tbaa !20
  %275 = load ptr, ptr %194, align 8, !tbaa !19
  %276 = getelementptr inbounds double, ptr %275, i64 %.4327
  store double %274, ptr %276, align 8, !tbaa !20
  %277 = or disjoint i64 %.4327, 1
  %278 = load ptr, ptr %193, align 8, !tbaa !19
  %279 = mul nsw i64 %277, %14
  %280 = getelementptr double, ptr %278, i64 %279
  %281 = getelementptr double, ptr %280, i64 %.0281347
  %282 = load double, ptr %281, align 8, !tbaa !20
  %283 = load ptr, ptr %194, align 8, !tbaa !19
  %284 = getelementptr inbounds double, ptr %283, i64 %277
  store double %282, ptr %284, align 8, !tbaa !20
  %285 = add nuw nsw i64 %.4327, 2
  %niter385.next.1 = add i64 %niter385, 2
  %niter385.ncmp.1 = icmp eq i64 %niter385.next.1, %unroll_iter384
  br i1 %niter385.ncmp.1, label %.loopexit306.loopexit.unr-lcssa, label %.lr.ph328, !llvm.loop !32

.loopexit306.loopexit.unr-lcssa:                  ; preds = %.lr.ph328, %.lr.ph328.preheader
  %.4327.unr = phi i64 [ 0, %.lr.ph328.preheader ], [ %285, %.lr.ph328 ]
  %lcmp.mod383.not = icmp eq i64 %xtraiter381, 0
  br i1 %lcmp.mod383.not, label %.loopexit306, label %.lr.ph328.epil

.lr.ph328.epil:                                   ; preds = %.loopexit306.loopexit.unr-lcssa
  %286 = load ptr, ptr %193, align 8, !tbaa !19
  %287 = mul nsw i64 %.4327.unr, %14
  %288 = getelementptr double, ptr %286, i64 %287
  %289 = getelementptr double, ptr %288, i64 %.0281347
  %290 = load double, ptr %289, align 8, !tbaa !20
  %291 = load ptr, ptr %194, align 8, !tbaa !19
  %292 = getelementptr inbounds double, ptr %291, i64 %.4327.unr
  store double %290, ptr %292, align 8, !tbaa !20
  br label %.loopexit306

.loopexit306:                                     ; preds = %.lr.ph328.epil, %.loopexit306.loopexit.unr-lcssa, %.preheader305, %.loopexit308
  %or.cond = and i1 %186, %.not291.not320
  br i1 %or.cond, label %.lr.ph331.preheader, label %.loopexit304

.lr.ph331.preheader:                              ; preds = %.loopexit306
  %xtraiter386 = and i64 %205, 1
  %293 = icmp eq i64 %205, 1
  br i1 %293, label %.loopexit304.loopexit.unr-lcssa, label %.lr.ph331.preheader.new

.lr.ph331.preheader.new:                          ; preds = %.lr.ph331.preheader
  %unroll_iter389 = and i64 %205, 9223372036854775806
  br label %.lr.ph331

.lr.ph331:                                        ; preds = %.lr.ph331, %.lr.ph331.preheader.new
  %.5330 = phi i64 [ 0, %.lr.ph331.preheader.new ], [ %309, %.lr.ph331 ]
  %niter390 = phi i64 [ 0, %.lr.ph331.preheader.new ], [ %niter390.next.1, %.lr.ph331 ]
  %294 = load ptr, ptr %195, align 8, !tbaa !19
  %295 = mul nsw i64 %.5330, %14
  %296 = getelementptr double, ptr %294, i64 %295
  %297 = getelementptr double, ptr %296, i64 %.0281347
  %298 = load double, ptr %297, align 8, !tbaa !20
  %299 = load ptr, ptr %196, align 8, !tbaa !19
  %300 = getelementptr inbounds double, ptr %299, i64 %.5330
  store double %298, ptr %300, align 8, !tbaa !20
  %301 = or disjoint i64 %.5330, 1
  %302 = load ptr, ptr %195, align 8, !tbaa !19
  %303 = mul nsw i64 %301, %14
  %304 = getelementptr double, ptr %302, i64 %303
  %305 = getelementptr double, ptr %304, i64 %.0281347
  %306 = load double, ptr %305, align 8, !tbaa !20
  %307 = load ptr, ptr %196, align 8, !tbaa !19
  %308 = getelementptr inbounds double, ptr %307, i64 %301
  store double %306, ptr %308, align 8, !tbaa !20
  %309 = add nuw nsw i64 %.5330, 2
  %niter390.next.1 = add i64 %niter390, 2
  %niter390.ncmp.1 = icmp eq i64 %niter390.next.1, %unroll_iter389
  br i1 %niter390.ncmp.1, label %.loopexit304.loopexit.unr-lcssa, label %.lr.ph331, !llvm.loop !33

.loopexit304.loopexit.unr-lcssa:                  ; preds = %.lr.ph331, %.lr.ph331.preheader
  %.5330.unr = phi i64 [ 0, %.lr.ph331.preheader ], [ %309, %.lr.ph331 ]
  %lcmp.mod388.not = icmp eq i64 %xtraiter386, 0
  br i1 %lcmp.mod388.not, label %.loopexit304, label %.lr.ph331.epil

.lr.ph331.epil:                                   ; preds = %.loopexit304.loopexit.unr-lcssa
  %310 = load ptr, ptr %195, align 8, !tbaa !19
  %311 = mul nsw i64 %.5330.unr, %14
  %312 = getelementptr double, ptr %310, i64 %311
  %313 = getelementptr double, ptr %312, i64 %.0281347
  %314 = load double, ptr %313, align 8, !tbaa !20
  %315 = load ptr, ptr %196, align 8, !tbaa !19
  %316 = getelementptr inbounds double, ptr %315, i64 %.5330.unr
  store double %314, ptr %316, align 8, !tbaa !20
  br label %.loopexit304

.loopexit304:                                     ; preds = %.lr.ph331.epil, %.loopexit304.loopexit.unr-lcssa, %.loopexit306
  %or.cond350 = and i1 %187, %.not291.not320
  br i1 %or.cond350, label %.lr.ph334.preheader, label %.loopexit302

.lr.ph334.preheader:                              ; preds = %.loopexit304
  %xtraiter391 = and i64 %205, 1
  %317 = icmp eq i64 %205, 1
  br i1 %317, label %.loopexit302.loopexit.unr-lcssa, label %.lr.ph334.preheader.new

.lr.ph334.preheader.new:                          ; preds = %.lr.ph334.preheader
  %unroll_iter394 = and i64 %205, 9223372036854775806
  br label %.lr.ph334

.lr.ph334:                                        ; preds = %.lr.ph334, %.lr.ph334.preheader.new
  %.6333 = phi i64 [ 0, %.lr.ph334.preheader.new ], [ %333, %.lr.ph334 ]
  %niter395 = phi i64 [ 0, %.lr.ph334.preheader.new ], [ %niter395.next.1, %.lr.ph334 ]
  %318 = load ptr, ptr %197, align 8, !tbaa !19
  %319 = mul nsw i64 %.6333, %14
  %320 = getelementptr double, ptr %318, i64 %319
  %321 = getelementptr double, ptr %320, i64 %.0281347
  %322 = load double, ptr %321, align 8, !tbaa !20
  %323 = load ptr, ptr %198, align 8, !tbaa !19
  %324 = getelementptr inbounds double, ptr %323, i64 %.6333
  store double %322, ptr %324, align 8, !tbaa !20
  %325 = or disjoint i64 %.6333, 1
  %326 = load ptr, ptr %197, align 8, !tbaa !19
  %327 = mul nsw i64 %325, %14
  %328 = getelementptr double, ptr %326, i64 %327
  %329 = getelementptr double, ptr %328, i64 %.0281347
  %330 = load double, ptr %329, align 8, !tbaa !20
  %331 = load ptr, ptr %198, align 8, !tbaa !19
  %332 = getelementptr inbounds double, ptr %331, i64 %325
  store double %330, ptr %332, align 8, !tbaa !20
  %333 = add nuw nsw i64 %.6333, 2
  %niter395.next.1 = add i64 %niter395, 2
  %niter395.ncmp.1 = icmp eq i64 %niter395.next.1, %unroll_iter394
  br i1 %niter395.ncmp.1, label %.loopexit302.loopexit.unr-lcssa, label %.lr.ph334, !llvm.loop !34

.loopexit302.loopexit.unr-lcssa:                  ; preds = %.lr.ph334, %.lr.ph334.preheader
  %.6333.unr = phi i64 [ 0, %.lr.ph334.preheader ], [ %333, %.lr.ph334 ]
  %lcmp.mod393.not = icmp eq i64 %xtraiter391, 0
  br i1 %lcmp.mod393.not, label %.loopexit302, label %.lr.ph334.epil

.lr.ph334.epil:                                   ; preds = %.loopexit302.loopexit.unr-lcssa
  %334 = load ptr, ptr %197, align 8, !tbaa !19
  %335 = mul nsw i64 %.6333.unr, %14
  %336 = getelementptr double, ptr %334, i64 %335
  %337 = getelementptr double, ptr %336, i64 %.0281347
  %338 = load double, ptr %337, align 8, !tbaa !20
  %339 = load ptr, ptr %198, align 8, !tbaa !19
  %340 = getelementptr inbounds double, ptr %339, i64 %.6333.unr
  store double %338, ptr %340, align 8, !tbaa !20
  br label %.loopexit302

.loopexit302:                                     ; preds = %.lr.ph334.epil, %.loopexit302.loopexit.unr-lcssa, %.loopexit304
  br i1 %40, label %.loopexit, label %.preheader300.preheader

.preheader300.preheader:                          ; preds = %.loopexit302
  %341 = load ptr, ptr %199, align 8, !tbaa !19
  %342 = getelementptr double, ptr %341, i64 %.0281347
  %343 = load double, ptr %342, align 8, !tbaa !20
  %344 = load ptr, ptr %200, align 8, !tbaa !19
  store double %343, ptr %344, align 8, !tbaa !20
  %345 = load ptr, ptr %199, align 8, !tbaa !19
  %346 = getelementptr double, ptr %345, i64 %14
  %347 = getelementptr double, ptr %346, i64 %.0281347
  %348 = load double, ptr %347, align 8, !tbaa !20
  %349 = load ptr, ptr %200, align 8, !tbaa !19
  %350 = getelementptr inbounds i8, ptr %349, i64 8
  store double %348, ptr %350, align 8, !tbaa !20
  %351 = load ptr, ptr %199, align 8, !tbaa !19
  %352 = getelementptr i8, ptr %351, i64 %.idx
  %353 = getelementptr double, ptr %352, i64 %.0281347
  %354 = load double, ptr %353, align 8, !tbaa !20
  %355 = load ptr, ptr %200, align 8, !tbaa !19
  %356 = getelementptr inbounds i8, ptr %355, i64 16
  store double %354, ptr %356, align 8, !tbaa !20
  %357 = load ptr, ptr %199, align 8, !tbaa !19
  %358 = getelementptr i8, ptr %357, i64 %.idx363
  %359 = getelementptr double, ptr %358, i64 %.0281347
  %360 = load double, ptr %359, align 8, !tbaa !20
  %361 = load ptr, ptr %200, align 8, !tbaa !19
  %362 = getelementptr inbounds i8, ptr %361, i64 24
  store double %360, ptr %362, align 8, !tbaa !20
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader300.preheader, %.loopexit302
  %363 = load i64, ptr %104, align 8, !tbaa !15
  call void @_ZN11alglib_implL31spline2d_bicubiccalcderivativesEPKNS_9ae_matrixEPKNS_9ae_vectorES5_llS5_lS5_lS5_lS5_lS5_PS0_S6_S6_PNS_8ae_stateE(ptr noundef nonnull %24, ptr noundef nonnull %108, ptr noundef nonnull %109, i64 noundef %205, i64 noundef %363, ptr noundef nonnull %28, i64 noundef %5, ptr noundef nonnull %29, i64 noundef %7, ptr noundef nonnull %30, i64 noundef %9, ptr noundef nonnull %31, i64 noundef %11, ptr noundef nonnull %32, ptr noundef nonnull %25, ptr noundef nonnull %26, ptr noundef nonnull %27, ptr noundef %16)
  %364 = load i64, ptr %105, align 8, !tbaa !16
  %.not296.not343 = icmp sgt i64 %364, 0
  br i1 %.not296.not343, label %.preheader.lr.ph, label %._crit_edge345

.preheader.lr.ph:                                 ; preds = %.loopexit
  %365 = load i64, ptr %104, align 8, !tbaa !15
  %.not297.not338 = icmp sgt i64 %365, 0
  br i1 %.not297.not338, label %.preheader.lr.ph.split.us, label %._crit_edge345

.preheader.lr.ph.split.us:                        ; preds = %.preheader.lr.ph
  %366 = mul nuw nsw i64 %365, %364
  %factor.op.mul = mul i64 %364, 3
  %factor.op.mul336.reass = mul i64 %factor.op.mul, %365
  %factor.op.mul342 = shl nuw i64 %364, 1
  %factor.op.mul.reass = mul i64 %factor.op.mul342, %365
  %367 = load i64, ptr %103, align 8, !tbaa !13
  %368 = mul nsw i64 %366, %367
  %369 = mul nsw i64 %factor.op.mul.reass, %367
  %370 = mul nsw i64 %factor.op.mul336.reass, %367
  br label %.preheader.us

.preheader.us:                                    ; preds = %._crit_edge341.us, %.preheader.lr.ph.split.us
  %.8344.us = phi i64 [ 0, %.preheader.lr.ph.split.us ], [ %408, %._crit_edge341.us ]
  %371 = mul nuw nsw i64 %365, %.8344.us
  br label %372

372:                                              ; preds = %.preheader.us, %372
  %.1283339.us = phi i64 [ 0, %.preheader.us ], [ %407, %372 ]
  %373 = add nuw nsw i64 %371, %.1283339.us
  %374 = mul nsw i64 %367, %373
  %375 = add nsw i64 %374, %.0281347
  %376 = load ptr, ptr %190, align 8, !tbaa !19
  %377 = getelementptr inbounds ptr, ptr %376, i64 %.8344.us
  %378 = load ptr, ptr %377, align 8, !tbaa !28
  %379 = getelementptr inbounds double, ptr %378, i64 %.1283339.us
  %380 = load double, ptr %379, align 8, !tbaa !20
  %381 = load ptr, ptr %201, align 8, !tbaa !19
  %382 = getelementptr inbounds double, ptr %381, i64 %375
  store double %380, ptr %382, align 8, !tbaa !20
  %383 = load ptr, ptr %202, align 8, !tbaa !19
  %384 = getelementptr inbounds ptr, ptr %383, i64 %.8344.us
  %385 = load ptr, ptr %384, align 8, !tbaa !28
  %386 = getelementptr inbounds double, ptr %385, i64 %.1283339.us
  %387 = load double, ptr %386, align 8, !tbaa !20
  %388 = load ptr, ptr %201, align 8, !tbaa !19
  %389 = getelementptr double, ptr %388, i64 %368
  %390 = getelementptr double, ptr %389, i64 %375
  store double %387, ptr %390, align 8, !tbaa !20
  %391 = load ptr, ptr %203, align 8, !tbaa !19
  %392 = getelementptr inbounds ptr, ptr %391, i64 %.8344.us
  %393 = load ptr, ptr %392, align 8, !tbaa !28
  %394 = getelementptr inbounds double, ptr %393, i64 %.1283339.us
  %395 = load double, ptr %394, align 8, !tbaa !20
  %396 = load ptr, ptr %201, align 8, !tbaa !19
  %397 = getelementptr double, ptr %396, i64 %369
  %398 = getelementptr double, ptr %397, i64 %375
  store double %395, ptr %398, align 8, !tbaa !20
  %399 = load ptr, ptr %204, align 8, !tbaa !19
  %400 = getelementptr inbounds ptr, ptr %399, i64 %.8344.us
  %401 = load ptr, ptr %400, align 8, !tbaa !28
  %402 = getelementptr inbounds double, ptr %401, i64 %.1283339.us
  %403 = load double, ptr %402, align 8, !tbaa !20
  %404 = load ptr, ptr %201, align 8, !tbaa !19
  %405 = getelementptr double, ptr %404, i64 %370
  %406 = getelementptr double, ptr %405, i64 %375
  store double %403, ptr %406, align 8, !tbaa !20
  %407 = add nuw nsw i64 %.1283339.us, 1
  %exitcond361.not = icmp eq i64 %407, %365
  br i1 %exitcond361.not, label %._crit_edge341.us, label %372, !llvm.loop !35

._crit_edge341.us:                                ; preds = %372
  %408 = add nuw nsw i64 %.8344.us, 1
  %exitcond362.not = icmp eq i64 %408, %364
  br i1 %exitcond362.not, label %._crit_edge345, label %.preheader.us, !llvm.loop !36

._crit_edge345:                                   ; preds = %._crit_edge341.us, %.preheader.lr.ph, %.loopexit
  %409 = add nuw nsw i64 %.0281347, 1
  %410 = load i64, ptr %103, align 8, !tbaa !13
  %.not290.not = icmp slt i64 %409, %410
  br i1 %.not290.not, label %.preheader309, label %._crit_edge349, !llvm.loop !37

._crit_edge349:                                   ; preds = %._crit_edge345, %._crit_edge
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %16)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %33) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %32) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %31) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %30) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %29) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %28) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %27) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %26) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %25) #4
  call void @llvm.lifetime.end.p0(i64 80, ptr nonnull %24) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %23) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %22) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %21) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %20) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %19) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %18) #4
  ret void
}

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_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i1 noundef zeroext) 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_impl14isfinitevectorEPKNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare noundef i64 @_ZN11alglib_impl5imin4EllllPNS_8ae_stateE(i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare noundef i64 @_ZN11alglib_impl5imax4EllllPNS_8ae_stateE(i64 noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

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

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 = !{!14, !7, i64 32}
!14 = !{!"_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}
!15 = !{!14, !7, i64 16}
!16 = !{!14, !7, i64 24}
!17 = !{!14, !7, i64 0}
!18 = !{!14, !10, i64 8}
!19 = !{!8, !8, i64 0}
!20 = !{!21, !21, i64 0}
!21 = !{!"double", !8, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.unroll.disable"}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !23}
!28 = !{!12, !12, i64 0}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}


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