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

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

%"struct.alglib_impl::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::spline3dinterpolant" = type { i64, i64, i64, i64, i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }

@.str.330 = external hidden unnamed_addr constant [63 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_impl19spline3dlintransxyzEPNS_19spline3dinterpolantEddddddPNS_8ae_stateE(ptr noundef %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, double noundef %5, double noundef %6, ptr noundef %7) #3 {
  %9 = alloca ptr, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca ptr, align 8
  %17 = alloca %"struct.alglib_impl::ae_frame", align 8
  %18 = alloca %"struct.alglib_impl::ae_vector", 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 i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  store ptr %0, ptr %9, align 8, !tbaa !5
  store double %1, ptr %10, align 8, !tbaa !9
  store double %2, ptr %11, align 8, !tbaa !9
  store double %3, ptr %12, align 8, !tbaa !9
  store double %4, ptr %13, align 8, !tbaa !9
  store double %5, ptr %14, align 8, !tbaa !9
  store double %6, ptr %15, align 8, !tbaa !9
  store ptr %7, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %17) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %18) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  %27 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %27, ptr noundef %17)
  call void @llvm.memset.p0.i64(ptr align 8 %18, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %19, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %20, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %21, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %22, i8 0, i64 64, i1 false)
  %28 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %18, i64 noundef 0, i64 noundef 3, ptr noundef %28, i1 noundef zeroext true)
  %29 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %19, i64 noundef 0, i64 noundef 3, ptr noundef %29, i1 noundef zeroext true)
  %30 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %20, i64 noundef 0, i64 noundef 3, ptr noundef %30, i1 noundef zeroext true)
  %31 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %21, i64 noundef 0, i64 noundef 3, ptr noundef %31, i1 noundef zeroext true)
  %32 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %22, i64 noundef 0, i64 noundef 3, ptr noundef %32, i1 noundef zeroext true)
  %33 = load ptr, ptr %9, align 8, !tbaa !5
  %34 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %33, i32 0, i32 1
  %35 = load i64, ptr %34, align 8, !tbaa !11
  %36 = icmp eq i64 %35, -3
  br i1 %36, label %42, label %37

37:                                               ; preds = %8
  %38 = load ptr, ptr %9, align 8, !tbaa !5
  %39 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %38, i32 0, i32 1
  %40 = load i64, ptr %39, align 8, !tbaa !11
  %41 = icmp eq i64 %40, -1
  br label %42

42:                                               ; preds = %37, %8
  %43 = phi i1 [ true, %8 ], [ %41, %37 ]
  %44 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %43, ptr noundef @.str.330, ptr noundef %44)
  %45 = load ptr, ptr %9, align 8, !tbaa !5
  %46 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %45, i32 0, i32 2
  %47 = load i64, ptr %46, align 8, !tbaa !17
  %48 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %18, i64 noundef %47, ptr noundef %48)
  %49 = load ptr, ptr %9, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %49, i32 0, i32 3
  %51 = load i64, ptr %50, align 8, !tbaa !18
  %52 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %19, i64 noundef %51, ptr noundef %52)
  %53 = load ptr, ptr %9, align 8, !tbaa !5
  %54 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %53, i32 0, i32 4
  %55 = load i64, ptr %54, align 8, !tbaa !19
  %56 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %20, i64 noundef %55, ptr noundef %56)
  %57 = load ptr, ptr %9, align 8, !tbaa !5
  %58 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %57, i32 0, i32 3
  %59 = load i64, ptr %58, align 8, !tbaa !18
  %60 = load ptr, ptr %9, align 8, !tbaa !5
  %61 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %60, i32 0, i32 2
  %62 = load i64, ptr %61, align 8, !tbaa !17
  %63 = mul nsw i64 %59, %62
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %64, i32 0, i32 4
  %66 = load i64, ptr %65, align 8, !tbaa !19
  %67 = mul nsw i64 %63, %66
  %68 = load ptr, ptr %9, align 8, !tbaa !5
  %69 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %68, i32 0, i32 5
  %70 = load i64, ptr %69, align 8, !tbaa !20
  %71 = mul nsw i64 %67, %70
  %72 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %21, i64 noundef %71, ptr noundef %72)
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %73

73:                                               ; preds = %92, %42
  %74 = load i64, ptr %24, align 8, !tbaa !21
  %75 = load ptr, ptr %9, align 8, !tbaa !5
  %76 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %75, i32 0, i32 2
  %77 = load i64, ptr %76, align 8, !tbaa !17
  %78 = sub nsw i64 %77, 1
  %79 = icmp sle i64 %74, %78
  br i1 %79, label %80, label %95

80:                                               ; preds = %73
  %81 = load ptr, ptr %9, align 8, !tbaa !5
  %82 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %81, i32 0, i32 6
  %83 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %82, i32 0, i32 4
  %84 = load ptr, ptr %83, align 8, !tbaa !22
  %85 = load i64, ptr %24, align 8, !tbaa !21
  %86 = getelementptr inbounds double, ptr %84, i64 %85
  %87 = load double, ptr %86, align 8, !tbaa !9
  %88 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %18, i32 0, i32 4
  %89 = load ptr, ptr %88, align 8, !tbaa !22
  %90 = load i64, ptr %24, align 8, !tbaa !21
  %91 = getelementptr inbounds double, ptr %89, i64 %90
  store double %87, ptr %91, align 8, !tbaa !9
  br label %92

92:                                               ; preds = %80
  %93 = load i64, ptr %24, align 8, !tbaa !21
  %94 = add nsw i64 %93, 1
  store i64 %94, ptr %24, align 8, !tbaa !21
  br label %73, !llvm.loop !23

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

96:                                               ; preds = %115, %95
  %97 = load i64, ptr %23, align 8, !tbaa !21
  %98 = load ptr, ptr %9, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %98, i32 0, i32 3
  %100 = load i64, ptr %99, align 8, !tbaa !18
  %101 = sub nsw i64 %100, 1
  %102 = icmp sle i64 %97, %101
  br i1 %102, label %103, label %118

103:                                              ; preds = %96
  %104 = load ptr, ptr %9, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %104, i32 0, i32 7
  %106 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %105, i32 0, i32 4
  %107 = load ptr, ptr %106, align 8, !tbaa !22
  %108 = load i64, ptr %23, align 8, !tbaa !21
  %109 = getelementptr inbounds double, ptr %107, i64 %108
  %110 = load double, ptr %109, align 8, !tbaa !9
  %111 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %19, i32 0, i32 4
  %112 = load ptr, ptr %111, align 8, !tbaa !22
  %113 = load i64, ptr %23, align 8, !tbaa !21
  %114 = getelementptr inbounds double, ptr %112, i64 %113
  store double %110, ptr %114, align 8, !tbaa !9
  br label %115

115:                                              ; preds = %103
  %116 = load i64, ptr %23, align 8, !tbaa !21
  %117 = add nsw i64 %116, 1
  store i64 %117, ptr %23, align 8, !tbaa !21
  br label %96, !llvm.loop !25

118:                                              ; preds = %96
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %119

119:                                              ; preds = %138, %118
  %120 = load i64, ptr %23, align 8, !tbaa !21
  %121 = load ptr, ptr %9, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %121, i32 0, i32 4
  %123 = load i64, ptr %122, align 8, !tbaa !19
  %124 = sub nsw i64 %123, 1
  %125 = icmp sle i64 %120, %124
  br i1 %125, label %126, label %141

126:                                              ; preds = %119
  %127 = load ptr, ptr %9, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %127, i32 0, i32 8
  %129 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %128, i32 0, i32 4
  %130 = load ptr, ptr %129, align 8, !tbaa !22
  %131 = load i64, ptr %23, align 8, !tbaa !21
  %132 = getelementptr inbounds double, ptr %130, i64 %131
  %133 = load double, ptr %132, align 8, !tbaa !9
  %134 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 4
  %135 = load ptr, ptr %134, align 8, !tbaa !22
  %136 = load i64, ptr %23, align 8, !tbaa !21
  %137 = getelementptr inbounds double, ptr %135, i64 %136
  store double %133, ptr %137, align 8, !tbaa !9
  br label %138

138:                                              ; preds = %126
  %139 = load i64, ptr %23, align 8, !tbaa !21
  %140 = add nsw i64 %139, 1
  store i64 %140, ptr %23, align 8, !tbaa !21
  br label %119, !llvm.loop !26

141:                                              ; preds = %119
  %142 = load double, ptr %10, align 8, !tbaa !9
  %143 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %142, double noundef 0.000000e+00)
  br i1 %143, label %144, label %176

144:                                              ; preds = %141
  %145 = load double, ptr %12, align 8, !tbaa !9
  %146 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %145, double noundef 0.000000e+00)
  br i1 %146, label %147, label %176

147:                                              ; preds = %144
  %148 = load double, ptr %14, align 8, !tbaa !9
  %149 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %148, double noundef 0.000000e+00)
  br i1 %149, label %150, label %176

150:                                              ; preds = %147
  %151 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %21, i32 0, i32 4
  %152 = load ptr, ptr %151, align 8, !tbaa !22
  %153 = getelementptr inbounds double, ptr %152, i64 0
  %154 = load ptr, ptr %9, align 8, !tbaa !5
  %155 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %154, i32 0, i32 9
  %156 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %155, i32 0, i32 4
  %157 = load ptr, ptr %156, align 8, !tbaa !22
  %158 = getelementptr inbounds double, ptr %157, i64 0
  %159 = load ptr, ptr %9, align 8, !tbaa !5
  %160 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %159, i32 0, i32 3
  %161 = load i64, ptr %160, align 8, !tbaa !18
  %162 = load ptr, ptr %9, align 8, !tbaa !5
  %163 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %162, i32 0, i32 2
  %164 = load i64, ptr %163, align 8, !tbaa !17
  %165 = mul nsw i64 %161, %164
  %166 = load ptr, ptr %9, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %166, i32 0, i32 4
  %168 = load i64, ptr %167, align 8, !tbaa !19
  %169 = mul nsw i64 %165, %168
  %170 = load ptr, ptr %9, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %170, i32 0, i32 5
  %172 = load i64, ptr %171, align 8, !tbaa !20
  %173 = mul nsw i64 %169, %172
  %174 = sub nsw i64 %173, 1
  %175 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %174)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %153, i64 noundef 1, ptr noundef %158, i64 noundef 1, i64 noundef %175)
  br label %176

176:                                              ; preds = %150, %147, %144, %141
  %177 = load double, ptr %10, align 8, !tbaa !9
  %178 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %177, double noundef 0.000000e+00)
  br i1 %178, label %179, label %274

179:                                              ; preds = %176
  %180 = load double, ptr %12, align 8, !tbaa !9
  %181 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %180, double noundef 0.000000e+00)
  br i1 %181, label %182, label %274

182:                                              ; preds = %179
  %183 = load double, ptr %14, align 8, !tbaa !9
  %184 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %183, double noundef 0.000000e+00)
  br i1 %184, label %185, label %274

185:                                              ; preds = %182
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %186

186:                                              ; preds = %270, %185
  %187 = load i64, ptr %23, align 8, !tbaa !21
  %188 = load ptr, ptr %9, align 8, !tbaa !5
  %189 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %188, i32 0, i32 3
  %190 = load i64, ptr %189, align 8, !tbaa !18
  %191 = sub nsw i64 %190, 1
  %192 = icmp sle i64 %187, %191
  br i1 %192, label %193, label %273

193:                                              ; preds = %186
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %194

194:                                              ; preds = %266, %193
  %195 = load i64, ptr %24, align 8, !tbaa !21
  %196 = load ptr, ptr %9, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %196, i32 0, i32 4
  %198 = load i64, ptr %197, align 8, !tbaa !19
  %199 = sub nsw i64 %198, 1
  %200 = icmp sle i64 %195, %199
  br i1 %200, label %201, label %269

201:                                              ; preds = %194
  %202 = load ptr, ptr %9, align 8, !tbaa !5
  %203 = load double, ptr %11, align 8, !tbaa !9
  %204 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %19, i32 0, i32 4
  %205 = load ptr, ptr %204, align 8, !tbaa !22
  %206 = load i64, ptr %23, align 8, !tbaa !21
  %207 = getelementptr inbounds double, ptr %205, i64 %206
  %208 = load double, ptr %207, align 8, !tbaa !9
  %209 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 4
  %210 = load ptr, ptr %209, align 8, !tbaa !22
  %211 = load i64, ptr %24, align 8, !tbaa !21
  %212 = getelementptr inbounds double, ptr %210, i64 %211
  %213 = load double, ptr %212, align 8, !tbaa !9
  %214 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %202, double noundef %203, double noundef %208, double noundef %213, ptr noundef %22, ptr noundef %214)
  store i64 0, ptr %25, align 8, !tbaa !21
  br label %215

215:                                              ; preds = %262, %201
  %216 = load i64, ptr %25, align 8, !tbaa !21
  %217 = load ptr, ptr %9, align 8, !tbaa !5
  %218 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %217, i32 0, i32 2
  %219 = load i64, ptr %218, align 8, !tbaa !17
  %220 = sub nsw i64 %219, 1
  %221 = icmp sle i64 %216, %220
  br i1 %221, label %222, label %265

222:                                              ; preds = %215
  store i64 0, ptr %26, align 8, !tbaa !21
  br label %223

223:                                              ; preds = %258, %222
  %224 = load i64, ptr %26, align 8, !tbaa !21
  %225 = load ptr, ptr %9, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %225, i32 0, i32 5
  %227 = load i64, ptr %226, align 8, !tbaa !20
  %228 = sub nsw i64 %227, 1
  %229 = icmp sle i64 %224, %228
  br i1 %229, label %230, label %261

230:                                              ; preds = %223
  %231 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %22, i32 0, i32 4
  %232 = load ptr, ptr %231, align 8, !tbaa !22
  %233 = load i64, ptr %26, align 8, !tbaa !21
  %234 = getelementptr inbounds double, ptr %232, i64 %233
  %235 = load double, ptr %234, align 8, !tbaa !9
  %236 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %21, i32 0, i32 4
  %237 = load ptr, ptr %236, align 8, !tbaa !22
  %238 = load ptr, ptr %9, align 8, !tbaa !5
  %239 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %238, i32 0, i32 5
  %240 = load i64, ptr %239, align 8, !tbaa !20
  %241 = load ptr, ptr %9, align 8, !tbaa !5
  %242 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %241, i32 0, i32 2
  %243 = load i64, ptr %242, align 8, !tbaa !17
  %244 = load ptr, ptr %9, align 8, !tbaa !5
  %245 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %244, i32 0, i32 3
  %246 = load i64, ptr %245, align 8, !tbaa !18
  %247 = load i64, ptr %24, align 8, !tbaa !21
  %248 = mul nsw i64 %246, %247
  %249 = load i64, ptr %23, align 8, !tbaa !21
  %250 = add nsw i64 %248, %249
  %251 = mul nsw i64 %243, %250
  %252 = load i64, ptr %25, align 8, !tbaa !21
  %253 = add nsw i64 %251, %252
  %254 = mul nsw i64 %240, %253
  %255 = load i64, ptr %26, align 8, !tbaa !21
  %256 = add nsw i64 %254, %255
  %257 = getelementptr inbounds double, ptr %237, i64 %256
  store double %235, ptr %257, align 8, !tbaa !9
  br label %258

258:                                              ; preds = %230
  %259 = load i64, ptr %26, align 8, !tbaa !21
  %260 = add nsw i64 %259, 1
  store i64 %260, ptr %26, align 8, !tbaa !21
  br label %223, !llvm.loop !27

261:                                              ; preds = %223
  br label %262

262:                                              ; preds = %261
  %263 = load i64, ptr %25, align 8, !tbaa !21
  %264 = add nsw i64 %263, 1
  store i64 %264, ptr %25, align 8, !tbaa !21
  br label %215, !llvm.loop !28

265:                                              ; preds = %215
  br label %266

266:                                              ; preds = %265
  %267 = load i64, ptr %24, align 8, !tbaa !21
  %268 = add nsw i64 %267, 1
  store i64 %268, ptr %24, align 8, !tbaa !21
  br label %194, !llvm.loop !29

269:                                              ; preds = %194
  br label %270

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

273:                                              ; preds = %186
  store double 1.000000e+00, ptr %10, align 8, !tbaa !9
  store double 0.000000e+00, ptr %11, align 8, !tbaa !9
  br label %274

274:                                              ; preds = %273, %182, %179, %176
  %275 = load double, ptr %10, align 8, !tbaa !9
  %276 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %275, double noundef 0.000000e+00)
  br i1 %276, label %277, label %372

277:                                              ; preds = %274
  %278 = load double, ptr %12, align 8, !tbaa !9
  %279 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %278, double noundef 0.000000e+00)
  br i1 %279, label %280, label %372

280:                                              ; preds = %277
  %281 = load double, ptr %14, align 8, !tbaa !9
  %282 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %281, double noundef 0.000000e+00)
  br i1 %282, label %283, label %372

283:                                              ; preds = %280
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %284

284:                                              ; preds = %368, %283
  %285 = load i64, ptr %23, align 8, !tbaa !21
  %286 = load ptr, ptr %9, align 8, !tbaa !5
  %287 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %286, i32 0, i32 2
  %288 = load i64, ptr %287, align 8, !tbaa !17
  %289 = sub nsw i64 %288, 1
  %290 = icmp sle i64 %285, %289
  br i1 %290, label %291, label %371

291:                                              ; preds = %284
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %292

292:                                              ; preds = %364, %291
  %293 = load i64, ptr %24, align 8, !tbaa !21
  %294 = load ptr, ptr %9, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %294, i32 0, i32 4
  %296 = load i64, ptr %295, align 8, !tbaa !19
  %297 = sub nsw i64 %296, 1
  %298 = icmp sle i64 %293, %297
  br i1 %298, label %299, label %367

299:                                              ; preds = %292
  %300 = load ptr, ptr %9, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %18, i32 0, i32 4
  %302 = load ptr, ptr %301, align 8, !tbaa !22
  %303 = load i64, ptr %23, align 8, !tbaa !21
  %304 = getelementptr inbounds double, ptr %302, i64 %303
  %305 = load double, ptr %304, align 8, !tbaa !9
  %306 = load double, ptr %13, align 8, !tbaa !9
  %307 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 4
  %308 = load ptr, ptr %307, align 8, !tbaa !22
  %309 = load i64, ptr %24, align 8, !tbaa !21
  %310 = getelementptr inbounds double, ptr %308, i64 %309
  %311 = load double, ptr %310, align 8, !tbaa !9
  %312 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %300, double noundef %305, double noundef %306, double noundef %311, ptr noundef %22, ptr noundef %312)
  store i64 0, ptr %25, align 8, !tbaa !21
  br label %313

313:                                              ; preds = %360, %299
  %314 = load i64, ptr %25, align 8, !tbaa !21
  %315 = load ptr, ptr %9, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %315, i32 0, i32 3
  %317 = load i64, ptr %316, align 8, !tbaa !18
  %318 = sub nsw i64 %317, 1
  %319 = icmp sle i64 %314, %318
  br i1 %319, label %320, label %363

320:                                              ; preds = %313
  store i64 0, ptr %26, align 8, !tbaa !21
  br label %321

321:                                              ; preds = %356, %320
  %322 = load i64, ptr %26, align 8, !tbaa !21
  %323 = load ptr, ptr %9, align 8, !tbaa !5
  %324 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %323, i32 0, i32 5
  %325 = load i64, ptr %324, align 8, !tbaa !20
  %326 = sub nsw i64 %325, 1
  %327 = icmp sle i64 %322, %326
  br i1 %327, label %328, label %359

328:                                              ; preds = %321
  %329 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %22, i32 0, i32 4
  %330 = load ptr, ptr %329, align 8, !tbaa !22
  %331 = load i64, ptr %26, align 8, !tbaa !21
  %332 = getelementptr inbounds double, ptr %330, i64 %331
  %333 = load double, ptr %332, align 8, !tbaa !9
  %334 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %21, i32 0, i32 4
  %335 = load ptr, ptr %334, align 8, !tbaa !22
  %336 = load ptr, ptr %9, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %336, i32 0, i32 5
  %338 = load i64, ptr %337, align 8, !tbaa !20
  %339 = load ptr, ptr %9, align 8, !tbaa !5
  %340 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %339, i32 0, i32 2
  %341 = load i64, ptr %340, align 8, !tbaa !17
  %342 = load ptr, ptr %9, align 8, !tbaa !5
  %343 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %342, i32 0, i32 3
  %344 = load i64, ptr %343, align 8, !tbaa !18
  %345 = load i64, ptr %24, align 8, !tbaa !21
  %346 = mul nsw i64 %344, %345
  %347 = load i64, ptr %25, align 8, !tbaa !21
  %348 = add nsw i64 %346, %347
  %349 = mul nsw i64 %341, %348
  %350 = load i64, ptr %23, align 8, !tbaa !21
  %351 = add nsw i64 %349, %350
  %352 = mul nsw i64 %338, %351
  %353 = load i64, ptr %26, align 8, !tbaa !21
  %354 = add nsw i64 %352, %353
  %355 = getelementptr inbounds double, ptr %335, i64 %354
  store double %333, ptr %355, align 8, !tbaa !9
  br label %356

356:                                              ; preds = %328
  %357 = load i64, ptr %26, align 8, !tbaa !21
  %358 = add nsw i64 %357, 1
  store i64 %358, ptr %26, align 8, !tbaa !21
  br label %321, !llvm.loop !31

359:                                              ; preds = %321
  br label %360

360:                                              ; preds = %359
  %361 = load i64, ptr %25, align 8, !tbaa !21
  %362 = add nsw i64 %361, 1
  store i64 %362, ptr %25, align 8, !tbaa !21
  br label %313, !llvm.loop !32

363:                                              ; preds = %313
  br label %364

364:                                              ; preds = %363
  %365 = load i64, ptr %24, align 8, !tbaa !21
  %366 = add nsw i64 %365, 1
  store i64 %366, ptr %24, align 8, !tbaa !21
  br label %292, !llvm.loop !33

367:                                              ; preds = %292
  br label %368

368:                                              ; preds = %367
  %369 = load i64, ptr %23, align 8, !tbaa !21
  %370 = add nsw i64 %369, 1
  store i64 %370, ptr %23, align 8, !tbaa !21
  br label %284, !llvm.loop !34

371:                                              ; preds = %284
  store double 1.000000e+00, ptr %12, align 8, !tbaa !9
  store double 0.000000e+00, ptr %13, align 8, !tbaa !9
  br label %372

372:                                              ; preds = %371, %280, %277, %274
  %373 = load double, ptr %10, align 8, !tbaa !9
  %374 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %373, double noundef 0.000000e+00)
  br i1 %374, label %375, label %470

375:                                              ; preds = %372
  %376 = load double, ptr %12, align 8, !tbaa !9
  %377 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %376, double noundef 0.000000e+00)
  br i1 %377, label %378, label %470

378:                                              ; preds = %375
  %379 = load double, ptr %14, align 8, !tbaa !9
  %380 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %379, double noundef 0.000000e+00)
  br i1 %380, label %381, label %470

381:                                              ; preds = %378
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %382

382:                                              ; preds = %466, %381
  %383 = load i64, ptr %23, align 8, !tbaa !21
  %384 = load ptr, ptr %9, align 8, !tbaa !5
  %385 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %384, i32 0, i32 2
  %386 = load i64, ptr %385, align 8, !tbaa !17
  %387 = sub nsw i64 %386, 1
  %388 = icmp sle i64 %383, %387
  br i1 %388, label %389, label %469

389:                                              ; preds = %382
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %390

390:                                              ; preds = %462, %389
  %391 = load i64, ptr %24, align 8, !tbaa !21
  %392 = load ptr, ptr %9, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %392, i32 0, i32 3
  %394 = load i64, ptr %393, align 8, !tbaa !18
  %395 = sub nsw i64 %394, 1
  %396 = icmp sle i64 %391, %395
  br i1 %396, label %397, label %465

397:                                              ; preds = %390
  %398 = load ptr, ptr %9, align 8, !tbaa !5
  %399 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %18, i32 0, i32 4
  %400 = load ptr, ptr %399, align 8, !tbaa !22
  %401 = load i64, ptr %23, align 8, !tbaa !21
  %402 = getelementptr inbounds double, ptr %400, i64 %401
  %403 = load double, ptr %402, align 8, !tbaa !9
  %404 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %19, i32 0, i32 4
  %405 = load ptr, ptr %404, align 8, !tbaa !22
  %406 = load i64, ptr %24, align 8, !tbaa !21
  %407 = getelementptr inbounds double, ptr %405, i64 %406
  %408 = load double, ptr %407, align 8, !tbaa !9
  %409 = load double, ptr %15, align 8, !tbaa !9
  %410 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %398, double noundef %403, double noundef %408, double noundef %409, ptr noundef %22, ptr noundef %410)
  store i64 0, ptr %25, align 8, !tbaa !21
  br label %411

411:                                              ; preds = %458, %397
  %412 = load i64, ptr %25, align 8, !tbaa !21
  %413 = load ptr, ptr %9, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %413, i32 0, i32 4
  %415 = load i64, ptr %414, align 8, !tbaa !19
  %416 = sub nsw i64 %415, 1
  %417 = icmp sle i64 %412, %416
  br i1 %417, label %418, label %461

418:                                              ; preds = %411
  store i64 0, ptr %26, align 8, !tbaa !21
  br label %419

419:                                              ; preds = %454, %418
  %420 = load i64, ptr %26, align 8, !tbaa !21
  %421 = load ptr, ptr %9, align 8, !tbaa !5
  %422 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %421, i32 0, i32 5
  %423 = load i64, ptr %422, align 8, !tbaa !20
  %424 = sub nsw i64 %423, 1
  %425 = icmp sle i64 %420, %424
  br i1 %425, label %426, label %457

426:                                              ; preds = %419
  %427 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %22, i32 0, i32 4
  %428 = load ptr, ptr %427, align 8, !tbaa !22
  %429 = load i64, ptr %26, align 8, !tbaa !21
  %430 = getelementptr inbounds double, ptr %428, i64 %429
  %431 = load double, ptr %430, align 8, !tbaa !9
  %432 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %21, i32 0, i32 4
  %433 = load ptr, ptr %432, align 8, !tbaa !22
  %434 = load ptr, ptr %9, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %434, i32 0, i32 5
  %436 = load i64, ptr %435, align 8, !tbaa !20
  %437 = load ptr, ptr %9, align 8, !tbaa !5
  %438 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %437, i32 0, i32 2
  %439 = load i64, ptr %438, align 8, !tbaa !17
  %440 = load ptr, ptr %9, align 8, !tbaa !5
  %441 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %440, i32 0, i32 3
  %442 = load i64, ptr %441, align 8, !tbaa !18
  %443 = load i64, ptr %25, align 8, !tbaa !21
  %444 = mul nsw i64 %442, %443
  %445 = load i64, ptr %24, align 8, !tbaa !21
  %446 = add nsw i64 %444, %445
  %447 = mul nsw i64 %439, %446
  %448 = load i64, ptr %23, align 8, !tbaa !21
  %449 = add nsw i64 %447, %448
  %450 = mul nsw i64 %436, %449
  %451 = load i64, ptr %26, align 8, !tbaa !21
  %452 = add nsw i64 %450, %451
  %453 = getelementptr inbounds double, ptr %433, i64 %452
  store double %431, ptr %453, align 8, !tbaa !9
  br label %454

454:                                              ; preds = %426
  %455 = load i64, ptr %26, align 8, !tbaa !21
  %456 = add nsw i64 %455, 1
  store i64 %456, ptr %26, align 8, !tbaa !21
  br label %419, !llvm.loop !35

457:                                              ; preds = %419
  br label %458

458:                                              ; preds = %457
  %459 = load i64, ptr %25, align 8, !tbaa !21
  %460 = add nsw i64 %459, 1
  store i64 %460, ptr %25, align 8, !tbaa !21
  br label %411, !llvm.loop !36

461:                                              ; preds = %411
  br label %462

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

465:                                              ; preds = %390
  br label %466

466:                                              ; preds = %465
  %467 = load i64, ptr %23, align 8, !tbaa !21
  %468 = add nsw i64 %467, 1
  store i64 %468, ptr %23, align 8, !tbaa !21
  br label %382, !llvm.loop !38

469:                                              ; preds = %382
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  store double 0.000000e+00, ptr %15, align 8, !tbaa !9
  br label %470

470:                                              ; preds = %469, %378, %375, %372
  %471 = load double, ptr %10, align 8, !tbaa !9
  %472 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %471, double noundef 0.000000e+00)
  br i1 %472, label %473, label %564

473:                                              ; preds = %470
  %474 = load double, ptr %12, align 8, !tbaa !9
  %475 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %474, double noundef 0.000000e+00)
  br i1 %475, label %476, label %564

476:                                              ; preds = %473
  %477 = load double, ptr %14, align 8, !tbaa !9
  %478 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %477, double noundef 0.000000e+00)
  br i1 %478, label %479, label %564

479:                                              ; preds = %476
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %480

480:                                              ; preds = %560, %479
  %481 = load i64, ptr %23, align 8, !tbaa !21
  %482 = load ptr, ptr %9, align 8, !tbaa !5
  %483 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %482, i32 0, i32 4
  %484 = load i64, ptr %483, align 8, !tbaa !19
  %485 = sub nsw i64 %484, 1
  %486 = icmp sle i64 %481, %485
  br i1 %486, label %487, label %563

487:                                              ; preds = %480
  %488 = load ptr, ptr %9, align 8, !tbaa !5
  %489 = load double, ptr %11, align 8, !tbaa !9
  %490 = load double, ptr %13, align 8, !tbaa !9
  %491 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 4
  %492 = load ptr, ptr %491, align 8, !tbaa !22
  %493 = load i64, ptr %23, align 8, !tbaa !21
  %494 = getelementptr inbounds double, ptr %492, i64 %493
  %495 = load double, ptr %494, align 8, !tbaa !9
  %496 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %488, double noundef %489, double noundef %490, double noundef %495, ptr noundef %22, ptr noundef %496)
  store i64 0, ptr %25, align 8, !tbaa !21
  br label %497

497:                                              ; preds = %556, %487
  %498 = load i64, ptr %25, align 8, !tbaa !21
  %499 = load ptr, ptr %9, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %499, i32 0, i32 3
  %501 = load i64, ptr %500, align 8, !tbaa !18
  %502 = sub nsw i64 %501, 1
  %503 = icmp sle i64 %498, %502
  br i1 %503, label %504, label %559

504:                                              ; preds = %497
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %505

505:                                              ; preds = %552, %504
  %506 = load i64, ptr %24, align 8, !tbaa !21
  %507 = load ptr, ptr %9, align 8, !tbaa !5
  %508 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %507, i32 0, i32 2
  %509 = load i64, ptr %508, align 8, !tbaa !17
  %510 = sub nsw i64 %509, 1
  %511 = icmp sle i64 %506, %510
  br i1 %511, label %512, label %555

512:                                              ; preds = %505
  store i64 0, ptr %26, align 8, !tbaa !21
  br label %513

513:                                              ; preds = %548, %512
  %514 = load i64, ptr %26, align 8, !tbaa !21
  %515 = load ptr, ptr %9, align 8, !tbaa !5
  %516 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %515, i32 0, i32 5
  %517 = load i64, ptr %516, align 8, !tbaa !20
  %518 = sub nsw i64 %517, 1
  %519 = icmp sle i64 %514, %518
  br i1 %519, label %520, label %551

520:                                              ; preds = %513
  %521 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %22, i32 0, i32 4
  %522 = load ptr, ptr %521, align 8, !tbaa !22
  %523 = load i64, ptr %26, align 8, !tbaa !21
  %524 = getelementptr inbounds double, ptr %522, i64 %523
  %525 = load double, ptr %524, align 8, !tbaa !9
  %526 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %21, i32 0, i32 4
  %527 = load ptr, ptr %526, align 8, !tbaa !22
  %528 = load ptr, ptr %9, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %528, i32 0, i32 5
  %530 = load i64, ptr %529, align 8, !tbaa !20
  %531 = load ptr, ptr %9, align 8, !tbaa !5
  %532 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %531, i32 0, i32 2
  %533 = load i64, ptr %532, align 8, !tbaa !17
  %534 = load ptr, ptr %9, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %534, i32 0, i32 3
  %536 = load i64, ptr %535, align 8, !tbaa !18
  %537 = load i64, ptr %23, align 8, !tbaa !21
  %538 = mul nsw i64 %536, %537
  %539 = load i64, ptr %25, align 8, !tbaa !21
  %540 = add nsw i64 %538, %539
  %541 = mul nsw i64 %533, %540
  %542 = load i64, ptr %24, align 8, !tbaa !21
  %543 = add nsw i64 %541, %542
  %544 = mul nsw i64 %530, %543
  %545 = load i64, ptr %26, align 8, !tbaa !21
  %546 = add nsw i64 %544, %545
  %547 = getelementptr inbounds double, ptr %527, i64 %546
  store double %525, ptr %547, align 8, !tbaa !9
  br label %548

548:                                              ; preds = %520
  %549 = load i64, ptr %26, align 8, !tbaa !21
  %550 = add nsw i64 %549, 1
  store i64 %550, ptr %26, align 8, !tbaa !21
  br label %513, !llvm.loop !39

551:                                              ; preds = %513
  br label %552

552:                                              ; preds = %551
  %553 = load i64, ptr %24, align 8, !tbaa !21
  %554 = add nsw i64 %553, 1
  store i64 %554, ptr %24, align 8, !tbaa !21
  br label %505, !llvm.loop !40

555:                                              ; preds = %505
  br label %556

556:                                              ; preds = %555
  %557 = load i64, ptr %25, align 8, !tbaa !21
  %558 = add nsw i64 %557, 1
  store i64 %558, ptr %25, align 8, !tbaa !21
  br label %497, !llvm.loop !41

559:                                              ; preds = %497
  br label %560

560:                                              ; preds = %559
  %561 = load i64, ptr %23, align 8, !tbaa !21
  %562 = add nsw i64 %561, 1
  store i64 %562, ptr %23, align 8, !tbaa !21
  br label %480, !llvm.loop !42

563:                                              ; preds = %480
  store double 1.000000e+00, ptr %10, align 8, !tbaa !9
  store double 0.000000e+00, ptr %11, align 8, !tbaa !9
  store double 1.000000e+00, ptr %12, align 8, !tbaa !9
  store double 0.000000e+00, ptr %13, align 8, !tbaa !9
  br label %564

564:                                              ; preds = %563, %476, %473, %470
  %565 = load double, ptr %10, align 8, !tbaa !9
  %566 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %565, double noundef 0.000000e+00)
  br i1 %566, label %567, label %658

567:                                              ; preds = %564
  %568 = load double, ptr %12, align 8, !tbaa !9
  %569 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %568, double noundef 0.000000e+00)
  br i1 %569, label %570, label %658

570:                                              ; preds = %567
  %571 = load double, ptr %14, align 8, !tbaa !9
  %572 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %571, double noundef 0.000000e+00)
  br i1 %572, label %573, label %658

573:                                              ; preds = %570
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %574

574:                                              ; preds = %654, %573
  %575 = load i64, ptr %23, align 8, !tbaa !21
  %576 = load ptr, ptr %9, align 8, !tbaa !5
  %577 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %576, i32 0, i32 3
  %578 = load i64, ptr %577, align 8, !tbaa !18
  %579 = sub nsw i64 %578, 1
  %580 = icmp sle i64 %575, %579
  br i1 %580, label %581, label %657

581:                                              ; preds = %574
  %582 = load ptr, ptr %9, align 8, !tbaa !5
  %583 = load double, ptr %11, align 8, !tbaa !9
  %584 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %19, i32 0, i32 4
  %585 = load ptr, ptr %584, align 8, !tbaa !22
  %586 = load i64, ptr %23, align 8, !tbaa !21
  %587 = getelementptr inbounds double, ptr %585, i64 %586
  %588 = load double, ptr %587, align 8, !tbaa !9
  %589 = load double, ptr %15, align 8, !tbaa !9
  %590 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %582, double noundef %583, double noundef %588, double noundef %589, ptr noundef %22, ptr noundef %590)
  store i64 0, ptr %25, align 8, !tbaa !21
  br label %591

591:                                              ; preds = %650, %581
  %592 = load i64, ptr %25, align 8, !tbaa !21
  %593 = load ptr, ptr %9, align 8, !tbaa !5
  %594 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %593, i32 0, i32 4
  %595 = load i64, ptr %594, align 8, !tbaa !19
  %596 = sub nsw i64 %595, 1
  %597 = icmp sle i64 %592, %596
  br i1 %597, label %598, label %653

598:                                              ; preds = %591
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %599

599:                                              ; preds = %646, %598
  %600 = load i64, ptr %24, align 8, !tbaa !21
  %601 = load ptr, ptr %9, align 8, !tbaa !5
  %602 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %601, i32 0, i32 2
  %603 = load i64, ptr %602, align 8, !tbaa !17
  %604 = sub nsw i64 %603, 1
  %605 = icmp sle i64 %600, %604
  br i1 %605, label %606, label %649

606:                                              ; preds = %599
  store i64 0, ptr %26, align 8, !tbaa !21
  br label %607

607:                                              ; preds = %642, %606
  %608 = load i64, ptr %26, align 8, !tbaa !21
  %609 = load ptr, ptr %9, align 8, !tbaa !5
  %610 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %609, i32 0, i32 5
  %611 = load i64, ptr %610, align 8, !tbaa !20
  %612 = sub nsw i64 %611, 1
  %613 = icmp sle i64 %608, %612
  br i1 %613, label %614, label %645

614:                                              ; preds = %607
  %615 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %22, i32 0, i32 4
  %616 = load ptr, ptr %615, align 8, !tbaa !22
  %617 = load i64, ptr %26, align 8, !tbaa !21
  %618 = getelementptr inbounds double, ptr %616, i64 %617
  %619 = load double, ptr %618, align 8, !tbaa !9
  %620 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %21, i32 0, i32 4
  %621 = load ptr, ptr %620, align 8, !tbaa !22
  %622 = load ptr, ptr %9, align 8, !tbaa !5
  %623 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %622, i32 0, i32 5
  %624 = load i64, ptr %623, align 8, !tbaa !20
  %625 = load ptr, ptr %9, align 8, !tbaa !5
  %626 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %625, i32 0, i32 2
  %627 = load i64, ptr %626, align 8, !tbaa !17
  %628 = load ptr, ptr %9, align 8, !tbaa !5
  %629 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %628, i32 0, i32 3
  %630 = load i64, ptr %629, align 8, !tbaa !18
  %631 = load i64, ptr %25, align 8, !tbaa !21
  %632 = mul nsw i64 %630, %631
  %633 = load i64, ptr %23, align 8, !tbaa !21
  %634 = add nsw i64 %632, %633
  %635 = mul nsw i64 %627, %634
  %636 = load i64, ptr %24, align 8, !tbaa !21
  %637 = add nsw i64 %635, %636
  %638 = mul nsw i64 %624, %637
  %639 = load i64, ptr %26, align 8, !tbaa !21
  %640 = add nsw i64 %638, %639
  %641 = getelementptr inbounds double, ptr %621, i64 %640
  store double %619, ptr %641, align 8, !tbaa !9
  br label %642

642:                                              ; preds = %614
  %643 = load i64, ptr %26, align 8, !tbaa !21
  %644 = add nsw i64 %643, 1
  store i64 %644, ptr %26, align 8, !tbaa !21
  br label %607, !llvm.loop !43

645:                                              ; preds = %607
  br label %646

646:                                              ; preds = %645
  %647 = load i64, ptr %24, align 8, !tbaa !21
  %648 = add nsw i64 %647, 1
  store i64 %648, ptr %24, align 8, !tbaa !21
  br label %599, !llvm.loop !44

649:                                              ; preds = %599
  br label %650

650:                                              ; preds = %649
  %651 = load i64, ptr %25, align 8, !tbaa !21
  %652 = add nsw i64 %651, 1
  store i64 %652, ptr %25, align 8, !tbaa !21
  br label %591, !llvm.loop !45

653:                                              ; preds = %591
  br label %654

654:                                              ; preds = %653
  %655 = load i64, ptr %23, align 8, !tbaa !21
  %656 = add nsw i64 %655, 1
  store i64 %656, ptr %23, align 8, !tbaa !21
  br label %574, !llvm.loop !46

657:                                              ; preds = %574
  store double 1.000000e+00, ptr %10, align 8, !tbaa !9
  store double 0.000000e+00, ptr %11, align 8, !tbaa !9
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  store double 0.000000e+00, ptr %15, align 8, !tbaa !9
  br label %658

658:                                              ; preds = %657, %570, %567, %564
  %659 = load double, ptr %10, align 8, !tbaa !9
  %660 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %659, double noundef 0.000000e+00)
  br i1 %660, label %661, label %752

661:                                              ; preds = %658
  %662 = load double, ptr %12, align 8, !tbaa !9
  %663 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %662, double noundef 0.000000e+00)
  br i1 %663, label %664, label %752

664:                                              ; preds = %661
  %665 = load double, ptr %14, align 8, !tbaa !9
  %666 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %665, double noundef 0.000000e+00)
  br i1 %666, label %667, label %752

667:                                              ; preds = %664
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %668

668:                                              ; preds = %748, %667
  %669 = load i64, ptr %23, align 8, !tbaa !21
  %670 = load ptr, ptr %9, align 8, !tbaa !5
  %671 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %670, i32 0, i32 2
  %672 = load i64, ptr %671, align 8, !tbaa !17
  %673 = sub nsw i64 %672, 1
  %674 = icmp sle i64 %669, %673
  br i1 %674, label %675, label %751

675:                                              ; preds = %668
  %676 = load ptr, ptr %9, align 8, !tbaa !5
  %677 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %18, i32 0, i32 4
  %678 = load ptr, ptr %677, align 8, !tbaa !22
  %679 = load i64, ptr %23, align 8, !tbaa !21
  %680 = getelementptr inbounds double, ptr %678, i64 %679
  %681 = load double, ptr %680, align 8, !tbaa !9
  %682 = load double, ptr %13, align 8, !tbaa !9
  %683 = load double, ptr %15, align 8, !tbaa !9
  %684 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %676, double noundef %681, double noundef %682, double noundef %683, ptr noundef %22, ptr noundef %684)
  store i64 0, ptr %25, align 8, !tbaa !21
  br label %685

685:                                              ; preds = %744, %675
  %686 = load i64, ptr %25, align 8, !tbaa !21
  %687 = load ptr, ptr %9, align 8, !tbaa !5
  %688 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %687, i32 0, i32 4
  %689 = load i64, ptr %688, align 8, !tbaa !19
  %690 = sub nsw i64 %689, 1
  %691 = icmp sle i64 %686, %690
  br i1 %691, label %692, label %747

692:                                              ; preds = %685
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %693

693:                                              ; preds = %740, %692
  %694 = load i64, ptr %24, align 8, !tbaa !21
  %695 = load ptr, ptr %9, align 8, !tbaa !5
  %696 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %695, i32 0, i32 3
  %697 = load i64, ptr %696, align 8, !tbaa !18
  %698 = sub nsw i64 %697, 1
  %699 = icmp sle i64 %694, %698
  br i1 %699, label %700, label %743

700:                                              ; preds = %693
  store i64 0, ptr %26, align 8, !tbaa !21
  br label %701

701:                                              ; preds = %736, %700
  %702 = load i64, ptr %26, align 8, !tbaa !21
  %703 = load ptr, ptr %9, align 8, !tbaa !5
  %704 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %703, i32 0, i32 5
  %705 = load i64, ptr %704, align 8, !tbaa !20
  %706 = sub nsw i64 %705, 1
  %707 = icmp sle i64 %702, %706
  br i1 %707, label %708, label %739

708:                                              ; preds = %701
  %709 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %22, i32 0, i32 4
  %710 = load ptr, ptr %709, align 8, !tbaa !22
  %711 = load i64, ptr %26, align 8, !tbaa !21
  %712 = getelementptr inbounds double, ptr %710, i64 %711
  %713 = load double, ptr %712, align 8, !tbaa !9
  %714 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %21, i32 0, i32 4
  %715 = load ptr, ptr %714, align 8, !tbaa !22
  %716 = load ptr, ptr %9, align 8, !tbaa !5
  %717 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %716, i32 0, i32 5
  %718 = load i64, ptr %717, align 8, !tbaa !20
  %719 = load ptr, ptr %9, align 8, !tbaa !5
  %720 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %719, i32 0, i32 2
  %721 = load i64, ptr %720, align 8, !tbaa !17
  %722 = load ptr, ptr %9, align 8, !tbaa !5
  %723 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %722, i32 0, i32 3
  %724 = load i64, ptr %723, align 8, !tbaa !18
  %725 = load i64, ptr %25, align 8, !tbaa !21
  %726 = mul nsw i64 %724, %725
  %727 = load i64, ptr %24, align 8, !tbaa !21
  %728 = add nsw i64 %726, %727
  %729 = mul nsw i64 %721, %728
  %730 = load i64, ptr %23, align 8, !tbaa !21
  %731 = add nsw i64 %729, %730
  %732 = mul nsw i64 %718, %731
  %733 = load i64, ptr %26, align 8, !tbaa !21
  %734 = add nsw i64 %732, %733
  %735 = getelementptr inbounds double, ptr %715, i64 %734
  store double %713, ptr %735, align 8, !tbaa !9
  br label %736

736:                                              ; preds = %708
  %737 = load i64, ptr %26, align 8, !tbaa !21
  %738 = add nsw i64 %737, 1
  store i64 %738, ptr %26, align 8, !tbaa !21
  br label %701, !llvm.loop !47

739:                                              ; preds = %701
  br label %740

740:                                              ; preds = %739
  %741 = load i64, ptr %24, align 8, !tbaa !21
  %742 = add nsw i64 %741, 1
  store i64 %742, ptr %24, align 8, !tbaa !21
  br label %693, !llvm.loop !48

743:                                              ; preds = %693
  br label %744

744:                                              ; preds = %743
  %745 = load i64, ptr %25, align 8, !tbaa !21
  %746 = add nsw i64 %745, 1
  store i64 %746, ptr %25, align 8, !tbaa !21
  br label %685, !llvm.loop !49

747:                                              ; preds = %685
  br label %748

748:                                              ; preds = %747
  %749 = load i64, ptr %23, align 8, !tbaa !21
  %750 = add nsw i64 %749, 1
  store i64 %750, ptr %23, align 8, !tbaa !21
  br label %668, !llvm.loop !50

751:                                              ; preds = %668
  store double 1.000000e+00, ptr %12, align 8, !tbaa !9
  store double 0.000000e+00, ptr %13, align 8, !tbaa !9
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  store double 0.000000e+00, ptr %15, align 8, !tbaa !9
  br label %752

752:                                              ; preds = %751, %664, %661, %658
  %753 = load double, ptr %10, align 8, !tbaa !9
  %754 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %753, double noundef 0.000000e+00)
  br i1 %754, label %755, label %842

755:                                              ; preds = %752
  %756 = load double, ptr %12, align 8, !tbaa !9
  %757 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %756, double noundef 0.000000e+00)
  br i1 %757, label %758, label %842

758:                                              ; preds = %755
  %759 = load double, ptr %14, align 8, !tbaa !9
  %760 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %759, double noundef 0.000000e+00)
  br i1 %760, label %761, label %842

761:                                              ; preds = %758
  %762 = load ptr, ptr %9, align 8, !tbaa !5
  %763 = load double, ptr %11, align 8, !tbaa !9
  %764 = load double, ptr %13, align 8, !tbaa !9
  %765 = load double, ptr %15, align 8, !tbaa !9
  %766 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %762, double noundef %763, double noundef %764, double noundef %765, ptr noundef %22, ptr noundef %766)
  store i64 0, ptr %25, align 8, !tbaa !21
  br label %767

767:                                              ; preds = %838, %761
  %768 = load i64, ptr %25, align 8, !tbaa !21
  %769 = load ptr, ptr %9, align 8, !tbaa !5
  %770 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %769, i32 0, i32 4
  %771 = load i64, ptr %770, align 8, !tbaa !19
  %772 = sub nsw i64 %771, 1
  %773 = icmp sle i64 %768, %772
  br i1 %773, label %774, label %841

774:                                              ; preds = %767
  store i64 0, ptr %24, align 8, !tbaa !21
  br label %775

775:                                              ; preds = %834, %774
  %776 = load i64, ptr %24, align 8, !tbaa !21
  %777 = load ptr, ptr %9, align 8, !tbaa !5
  %778 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %777, i32 0, i32 3
  %779 = load i64, ptr %778, align 8, !tbaa !18
  %780 = sub nsw i64 %779, 1
  %781 = icmp sle i64 %776, %780
  br i1 %781, label %782, label %837

782:                                              ; preds = %775
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %783

783:                                              ; preds = %830, %782
  %784 = load i64, ptr %23, align 8, !tbaa !21
  %785 = load ptr, ptr %9, align 8, !tbaa !5
  %786 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %785, i32 0, i32 2
  %787 = load i64, ptr %786, align 8, !tbaa !17
  %788 = sub nsw i64 %787, 1
  %789 = icmp sle i64 %784, %788
  br i1 %789, label %790, label %833

790:                                              ; preds = %783
  store i64 0, ptr %26, align 8, !tbaa !21
  br label %791

791:                                              ; preds = %826, %790
  %792 = load i64, ptr %26, align 8, !tbaa !21
  %793 = load ptr, ptr %9, align 8, !tbaa !5
  %794 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %793, i32 0, i32 5
  %795 = load i64, ptr %794, align 8, !tbaa !20
  %796 = sub nsw i64 %795, 1
  %797 = icmp sle i64 %792, %796
  br i1 %797, label %798, label %829

798:                                              ; preds = %791
  %799 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %22, i32 0, i32 4
  %800 = load ptr, ptr %799, align 8, !tbaa !22
  %801 = load i64, ptr %26, align 8, !tbaa !21
  %802 = getelementptr inbounds double, ptr %800, i64 %801
  %803 = load double, ptr %802, align 8, !tbaa !9
  %804 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %21, i32 0, i32 4
  %805 = load ptr, ptr %804, align 8, !tbaa !22
  %806 = load ptr, ptr %9, align 8, !tbaa !5
  %807 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %806, i32 0, i32 5
  %808 = load i64, ptr %807, align 8, !tbaa !20
  %809 = load ptr, ptr %9, align 8, !tbaa !5
  %810 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %809, i32 0, i32 2
  %811 = load i64, ptr %810, align 8, !tbaa !17
  %812 = load ptr, ptr %9, align 8, !tbaa !5
  %813 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %812, i32 0, i32 3
  %814 = load i64, ptr %813, align 8, !tbaa !18
  %815 = load i64, ptr %25, align 8, !tbaa !21
  %816 = mul nsw i64 %814, %815
  %817 = load i64, ptr %24, align 8, !tbaa !21
  %818 = add nsw i64 %816, %817
  %819 = mul nsw i64 %811, %818
  %820 = load i64, ptr %23, align 8, !tbaa !21
  %821 = add nsw i64 %819, %820
  %822 = mul nsw i64 %808, %821
  %823 = load i64, ptr %26, align 8, !tbaa !21
  %824 = add nsw i64 %822, %823
  %825 = getelementptr inbounds double, ptr %805, i64 %824
  store double %803, ptr %825, align 8, !tbaa !9
  br label %826

826:                                              ; preds = %798
  %827 = load i64, ptr %26, align 8, !tbaa !21
  %828 = add nsw i64 %827, 1
  store i64 %828, ptr %26, align 8, !tbaa !21
  br label %791, !llvm.loop !51

829:                                              ; preds = %791
  br label %830

830:                                              ; preds = %829
  %831 = load i64, ptr %23, align 8, !tbaa !21
  %832 = add nsw i64 %831, 1
  store i64 %832, ptr %23, align 8, !tbaa !21
  br label %783, !llvm.loop !52

833:                                              ; preds = %783
  br label %834

834:                                              ; preds = %833
  %835 = load i64, ptr %24, align 8, !tbaa !21
  %836 = add nsw i64 %835, 1
  store i64 %836, ptr %24, align 8, !tbaa !21
  br label %775, !llvm.loop !53

837:                                              ; preds = %775
  br label %838

838:                                              ; preds = %837
  %839 = load i64, ptr %25, align 8, !tbaa !21
  %840 = add nsw i64 %839, 1
  store i64 %840, ptr %25, align 8, !tbaa !21
  br label %767, !llvm.loop !54

841:                                              ; preds = %767
  store double 1.000000e+00, ptr %10, align 8, !tbaa !9
  store double 0.000000e+00, ptr %11, align 8, !tbaa !9
  store double 1.000000e+00, ptr %12, align 8, !tbaa !9
  store double 0.000000e+00, ptr %13, align 8, !tbaa !9
  store double 1.000000e+00, ptr %14, align 8, !tbaa !9
  store double 0.000000e+00, ptr %15, align 8, !tbaa !9
  br label %842

842:                                              ; preds = %841, %758, %755, %752
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %843

843:                                              ; preds = %864, %842
  %844 = load i64, ptr %23, align 8, !tbaa !21
  %845 = load ptr, ptr %9, align 8, !tbaa !5
  %846 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %845, i32 0, i32 2
  %847 = load i64, ptr %846, align 8, !tbaa !17
  %848 = sub nsw i64 %847, 1
  %849 = icmp sle i64 %844, %848
  br i1 %849, label %850, label %867

850:                                              ; preds = %843
  %851 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %18, i32 0, i32 4
  %852 = load ptr, ptr %851, align 8, !tbaa !22
  %853 = load i64, ptr %23, align 8, !tbaa !21
  %854 = getelementptr inbounds double, ptr %852, i64 %853
  %855 = load double, ptr %854, align 8, !tbaa !9
  %856 = load double, ptr %11, align 8, !tbaa !9
  %857 = fsub double %855, %856
  %858 = load double, ptr %10, align 8, !tbaa !9
  %859 = fdiv double %857, %858
  %860 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %18, i32 0, i32 4
  %861 = load ptr, ptr %860, align 8, !tbaa !22
  %862 = load i64, ptr %23, align 8, !tbaa !21
  %863 = getelementptr inbounds double, ptr %861, i64 %862
  store double %859, ptr %863, align 8, !tbaa !9
  br label %864

864:                                              ; preds = %850
  %865 = load i64, ptr %23, align 8, !tbaa !21
  %866 = add nsw i64 %865, 1
  store i64 %866, ptr %23, align 8, !tbaa !21
  br label %843, !llvm.loop !55

867:                                              ; preds = %843
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %868

868:                                              ; preds = %889, %867
  %869 = load i64, ptr %23, align 8, !tbaa !21
  %870 = load ptr, ptr %9, align 8, !tbaa !5
  %871 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %870, i32 0, i32 3
  %872 = load i64, ptr %871, align 8, !tbaa !18
  %873 = sub nsw i64 %872, 1
  %874 = icmp sle i64 %869, %873
  br i1 %874, label %875, label %892

875:                                              ; preds = %868
  %876 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %19, i32 0, i32 4
  %877 = load ptr, ptr %876, align 8, !tbaa !22
  %878 = load i64, ptr %23, align 8, !tbaa !21
  %879 = getelementptr inbounds double, ptr %877, i64 %878
  %880 = load double, ptr %879, align 8, !tbaa !9
  %881 = load double, ptr %13, align 8, !tbaa !9
  %882 = fsub double %880, %881
  %883 = load double, ptr %12, align 8, !tbaa !9
  %884 = fdiv double %882, %883
  %885 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %19, i32 0, i32 4
  %886 = load ptr, ptr %885, align 8, !tbaa !22
  %887 = load i64, ptr %23, align 8, !tbaa !21
  %888 = getelementptr inbounds double, ptr %886, i64 %887
  store double %884, ptr %888, align 8, !tbaa !9
  br label %889

889:                                              ; preds = %875
  %890 = load i64, ptr %23, align 8, !tbaa !21
  %891 = add nsw i64 %890, 1
  store i64 %891, ptr %23, align 8, !tbaa !21
  br label %868, !llvm.loop !56

892:                                              ; preds = %868
  store i64 0, ptr %23, align 8, !tbaa !21
  br label %893

893:                                              ; preds = %914, %892
  %894 = load i64, ptr %23, align 8, !tbaa !21
  %895 = load ptr, ptr %9, align 8, !tbaa !5
  %896 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %895, i32 0, i32 4
  %897 = load i64, ptr %896, align 8, !tbaa !19
  %898 = sub nsw i64 %897, 1
  %899 = icmp sle i64 %894, %898
  br i1 %899, label %900, label %917

900:                                              ; preds = %893
  %901 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 4
  %902 = load ptr, ptr %901, align 8, !tbaa !22
  %903 = load i64, ptr %23, align 8, !tbaa !21
  %904 = getelementptr inbounds double, ptr %902, i64 %903
  %905 = load double, ptr %904, align 8, !tbaa !9
  %906 = load double, ptr %15, align 8, !tbaa !9
  %907 = fsub double %905, %906
  %908 = load double, ptr %14, align 8, !tbaa !9
  %909 = fdiv double %907, %908
  %910 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %20, i32 0, i32 4
  %911 = load ptr, ptr %910, align 8, !tbaa !22
  %912 = load i64, ptr %23, align 8, !tbaa !21
  %913 = getelementptr inbounds double, ptr %911, i64 %912
  store double %909, ptr %913, align 8, !tbaa !9
  br label %914

914:                                              ; preds = %900
  %915 = load i64, ptr %23, align 8, !tbaa !21
  %916 = add nsw i64 %915, 1
  store i64 %916, ptr %23, align 8, !tbaa !21
  br label %893, !llvm.loop !57

917:                                              ; preds = %893
  %918 = load ptr, ptr %9, align 8, !tbaa !5
  %919 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %918, i32 0, i32 1
  %920 = load i64, ptr %919, align 8, !tbaa !11
  %921 = icmp eq i64 %920, -1
  br i1 %921, label %922, label %937

922:                                              ; preds = %917
  %923 = load ptr, ptr %9, align 8, !tbaa !5
  %924 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %923, i32 0, i32 2
  %925 = load i64, ptr %924, align 8, !tbaa !17
  %926 = load ptr, ptr %9, align 8, !tbaa !5
  %927 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %926, i32 0, i32 3
  %928 = load i64, ptr %927, align 8, !tbaa !18
  %929 = load ptr, ptr %9, align 8, !tbaa !5
  %930 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %929, i32 0, i32 4
  %931 = load i64, ptr %930, align 8, !tbaa !19
  %932 = load ptr, ptr %9, align 8, !tbaa !5
  %933 = getelementptr inbounds %"struct.alglib_impl::spline3dinterpolant", ptr %932, i32 0, i32 5
  %934 = load i64, ptr %933, align 8, !tbaa !20
  %935 = load ptr, ptr %9, align 8, !tbaa !5
  %936 = load ptr, ptr %16, align 8, !tbaa !5
  call void @_ZN11alglib_impl23spline3dbuildtrilinearvEPNS_9ae_vectorElS1_lS1_lS1_lPNS_19spline3dinterpolantEPNS_8ae_stateE(ptr noundef %18, i64 noundef %925, ptr noundef %19, i64 noundef %928, ptr noundef %20, i64 noundef %931, ptr noundef %21, i64 noundef %934, ptr noundef %935, ptr noundef %936)
  br label %937

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

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef, double 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 noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef, double noundef) #2

declare noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef, i64 noundef) #2

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

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) #2

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 = !{!"double", !7, i64 0}
!11 = !{!12, !13, i64 8}
!12 = !{!"_ZTSN11alglib_impl19spline3dinterpolantE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !14, i64 48, !14, i64 112, !14, i64 176, !14, i64 240}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSN11alglib_impl9ae_vectorE", !13, i64 0, !13, i64 8, !15, i64 16, !16, i64 24, !7, i64 56}
!15 = !{!"bool", !7, i64 0}
!16 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!17 = !{!12, !13, i64 16}
!18 = !{!12, !13, i64 24}
!19 = !{!12, !13, i64 32}
!20 = !{!12, !13, i64 40}
!21 = !{!13, !13, i64 0}
!22 = !{!7, !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = distinct !{!34, !24}
!35 = distinct !{!35, !24}
!36 = distinct !{!36, !24}
!37 = distinct !{!37, !24}
!38 = distinct !{!38, !24}
!39 = distinct !{!39, !24}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !24}
!42 = distinct !{!42, !24}
!43 = distinct !{!43, !24}
!44 = distinct !{!44, !24}
!45 = distinct !{!45, !24}
!46 = distinct !{!46, !24}
!47 = distinct !{!47, !24}
!48 = distinct !{!48, !24}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !24}
!52 = distinct !{!52, !24}
!53 = distinct !{!53, !24}
!54 = distinct !{!54, !24}
!55 = distinct !{!55, !24}
!56 = distinct !{!56, !24}
!57 = distinct !{!57, !24}


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

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

@.str.330 = external hidden unnamed_addr constant [63 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_impl19spline3dlintransxyzEPNS_19spline3dinterpolantEddddddPNS_8ae_stateE(ptr noundef %0, double noundef %1, double noundef %2, double noundef %3, double noundef %4, double noundef %5, double noundef %6, ptr noundef %7) local_unnamed_addr #3 {
  %9 = alloca %"struct.alglib_impl::ae_frame", align 8
  %10 = alloca %"struct.alglib_impl::ae_vector", align 8
  %11 = alloca %"struct.alglib_impl::ae_vector", align 8
  %12 = alloca %"struct.alglib_impl::ae_vector", align 8
  %13 = alloca %"struct.alglib_impl::ae_vector", align 8
  %14 = alloca %"struct.alglib_impl::ae_vector", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %11) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %12) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %13) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %14) #4
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %7, ptr noundef nonnull %9)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %10, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %11, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %12, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %13, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %14, i8 0, i64 64, i1 false)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %10, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %11, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %12, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %13, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %14, i64 noundef 0, i64 noundef 3, ptr noundef %7, i1 noundef zeroext true)
  %15 = getelementptr inbounds i8, ptr %0, i64 8
  %16 = load i64, ptr %15, align 8, !tbaa !5
  %17 = and i64 %16, -3
  %spec.select = icmp eq i64 %17, -3
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %spec.select, ptr noundef nonnull @.str.330, ptr noundef %7)
  %18 = getelementptr inbounds i8, ptr %0, i64 16
  %19 = load i64, ptr %18, align 8, !tbaa !14
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %10, i64 noundef %19, ptr noundef %7)
  %20 = getelementptr inbounds i8, ptr %0, i64 24
  %21 = load i64, ptr %20, align 8, !tbaa !15
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %11, i64 noundef %21, ptr noundef %7)
  %22 = getelementptr inbounds i8, ptr %0, i64 32
  %23 = load i64, ptr %22, align 8, !tbaa !16
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %12, i64 noundef %23, ptr noundef %7)
  %24 = load i64, ptr %20, align 8, !tbaa !15
  %25 = load i64, ptr %18, align 8, !tbaa !14
  %26 = mul nsw i64 %25, %24
  %27 = load i64, ptr %22, align 8, !tbaa !16
  %28 = mul nsw i64 %26, %27
  %29 = getelementptr inbounds i8, ptr %0, i64 40
  %30 = load i64, ptr %29, align 8, !tbaa !17
  %31 = mul nsw i64 %28, %30
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %13, i64 noundef %31, ptr noundef %7)
  %32 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not382 = icmp sgt i64 %32, 0
  br i1 %.not.not382, label %.lr.ph, label %.preheader379

.lr.ph:                                           ; preds = %8
  %33 = getelementptr inbounds i8, ptr %0, i64 104
  %34 = getelementptr inbounds i8, ptr %10, i64 56
  %xtraiter = and i64 %32, 3
  %35 = icmp ult i64 %32, 4
  br i1 %35, label %.preheader379.loopexit.unr-lcssa, label %.lr.ph.new

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

.preheader379.loopexit.unr-lcssa:                 ; preds = %46, %.lr.ph
  %.0277383.unr = phi i64 [ 0, %.lr.ph ], [ %70, %46 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader379, label %.epil.preheader

.epil.preheader:                                  ; preds = %.preheader379.loopexit.unr-lcssa, %.epil.preheader
  %.0277383.epil = phi i64 [ %41, %.epil.preheader ], [ %.0277383.unr, %.preheader379.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.preheader379.loopexit.unr-lcssa ]
  %36 = load ptr, ptr %33, align 8, !tbaa !18
  %37 = getelementptr inbounds double, ptr %36, i64 %.0277383.epil
  %38 = load double, ptr %37, align 8, !tbaa !19
  %39 = load ptr, ptr %34, align 8, !tbaa !18
  %40 = getelementptr inbounds double, ptr %39, i64 %.0277383.epil
  store double %38, ptr %40, align 8, !tbaa !19
  %41 = add nuw nsw i64 %.0277383.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 %.preheader379, label %.epil.preheader, !llvm.loop !21

.preheader379:                                    ; preds = %.preheader379.loopexit.unr-lcssa, %.epil.preheader, %8
  %42 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not317384 = icmp sgt i64 %42, 0
  br i1 %.not.not317384, label %.lr.ph386, label %.preheader378

.lr.ph386:                                        ; preds = %.preheader379
  %43 = getelementptr inbounds i8, ptr %0, i64 168
  %44 = getelementptr inbounds i8, ptr %11, i64 56
  %xtraiter589 = and i64 %42, 3
  %45 = icmp ult i64 %42, 4
  br i1 %45, label %.preheader378.loopexit.unr-lcssa, label %.lr.ph386.new

.lr.ph386.new:                                    ; preds = %.lr.ph386
  %unroll_iter592 = and i64 %42, 9223372036854775804
  br label %81

46:                                               ; preds = %46, %.lr.ph.new
  %.0277383 = phi i64 [ 0, %.lr.ph.new ], [ %70, %46 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %46 ]
  %47 = load ptr, ptr %33, align 8, !tbaa !18
  %48 = getelementptr inbounds double, ptr %47, i64 %.0277383
  %49 = load double, ptr %48, align 8, !tbaa !19
  %50 = load ptr, ptr %34, align 8, !tbaa !18
  %51 = getelementptr inbounds double, ptr %50, i64 %.0277383
  store double %49, ptr %51, align 8, !tbaa !19
  %52 = or disjoint i64 %.0277383, 1
  %53 = load ptr, ptr %33, align 8, !tbaa !18
  %54 = getelementptr inbounds double, ptr %53, i64 %52
  %55 = load double, ptr %54, align 8, !tbaa !19
  %56 = load ptr, ptr %34, align 8, !tbaa !18
  %57 = getelementptr inbounds double, ptr %56, i64 %52
  store double %55, ptr %57, align 8, !tbaa !19
  %58 = or disjoint i64 %.0277383, 2
  %59 = load ptr, ptr %33, align 8, !tbaa !18
  %60 = getelementptr inbounds double, ptr %59, i64 %58
  %61 = load double, ptr %60, align 8, !tbaa !19
  %62 = load ptr, ptr %34, align 8, !tbaa !18
  %63 = getelementptr inbounds double, ptr %62, i64 %58
  store double %61, ptr %63, align 8, !tbaa !19
  %64 = or disjoint i64 %.0277383, 3
  %65 = load ptr, ptr %33, align 8, !tbaa !18
  %66 = getelementptr inbounds double, ptr %65, i64 %64
  %67 = load double, ptr %66, align 8, !tbaa !19
  %68 = load ptr, ptr %34, align 8, !tbaa !18
  %69 = getelementptr inbounds double, ptr %68, i64 %64
  store double %67, ptr %69, align 8, !tbaa !19
  %70 = add nuw nsw i64 %.0277383, 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 %.preheader379.loopexit.unr-lcssa, label %46, !llvm.loop !23

.preheader378.loopexit.unr-lcssa:                 ; preds = %81, %.lr.ph386
  %.0284385.unr = phi i64 [ 0, %.lr.ph386 ], [ %105, %81 ]
  %lcmp.mod591.not = icmp eq i64 %xtraiter589, 0
  br i1 %lcmp.mod591.not, label %.preheader378, label %.epil.preheader588

.epil.preheader588:                               ; preds = %.preheader378.loopexit.unr-lcssa, %.epil.preheader588
  %.0284385.epil = phi i64 [ %76, %.epil.preheader588 ], [ %.0284385.unr, %.preheader378.loopexit.unr-lcssa ]
  %epil.iter590 = phi i64 [ %epil.iter590.next, %.epil.preheader588 ], [ 0, %.preheader378.loopexit.unr-lcssa ]
  %71 = load ptr, ptr %43, align 8, !tbaa !18
  %72 = getelementptr inbounds double, ptr %71, i64 %.0284385.epil
  %73 = load double, ptr %72, align 8, !tbaa !19
  %74 = load ptr, ptr %44, align 8, !tbaa !18
  %75 = getelementptr inbounds double, ptr %74, i64 %.0284385.epil
  store double %73, ptr %75, align 8, !tbaa !19
  %76 = add nuw nsw i64 %.0284385.epil, 1
  %epil.iter590.next = add i64 %epil.iter590, 1
  %epil.iter590.cmp.not = icmp eq i64 %epil.iter590.next, %xtraiter589
  br i1 %epil.iter590.cmp.not, label %.preheader378, label %.epil.preheader588, !llvm.loop !25

.preheader378:                                    ; preds = %.preheader378.loopexit.unr-lcssa, %.epil.preheader588, %.preheader379
  %77 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not318387 = icmp sgt i64 %77, 0
  br i1 %.not.not318387, label %.lr.ph389, label %._crit_edge

.lr.ph389:                                        ; preds = %.preheader378
  %78 = getelementptr inbounds i8, ptr %0, i64 232
  %79 = getelementptr inbounds i8, ptr %12, i64 56
  %xtraiter595 = and i64 %77, 3
  %80 = icmp ult i64 %77, 4
  br i1 %80, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph389.new

.lr.ph389.new:                                    ; preds = %.lr.ph389
  %unroll_iter598 = and i64 %77, 9223372036854775804
  br label %106

81:                                               ; preds = %81, %.lr.ph386.new
  %.0284385 = phi i64 [ 0, %.lr.ph386.new ], [ %105, %81 ]
  %niter593 = phi i64 [ 0, %.lr.ph386.new ], [ %niter593.next.3, %81 ]
  %82 = load ptr, ptr %43, align 8, !tbaa !18
  %83 = getelementptr inbounds double, ptr %82, i64 %.0284385
  %84 = load double, ptr %83, align 8, !tbaa !19
  %85 = load ptr, ptr %44, align 8, !tbaa !18
  %86 = getelementptr inbounds double, ptr %85, i64 %.0284385
  store double %84, ptr %86, align 8, !tbaa !19
  %87 = or disjoint i64 %.0284385, 1
  %88 = load ptr, ptr %43, align 8, !tbaa !18
  %89 = getelementptr inbounds double, ptr %88, i64 %87
  %90 = load double, ptr %89, align 8, !tbaa !19
  %91 = load ptr, ptr %44, align 8, !tbaa !18
  %92 = getelementptr inbounds double, ptr %91, i64 %87
  store double %90, ptr %92, align 8, !tbaa !19
  %93 = or disjoint i64 %.0284385, 2
  %94 = load ptr, ptr %43, align 8, !tbaa !18
  %95 = getelementptr inbounds double, ptr %94, i64 %93
  %96 = load double, ptr %95, align 8, !tbaa !19
  %97 = load ptr, ptr %44, align 8, !tbaa !18
  %98 = getelementptr inbounds double, ptr %97, i64 %93
  store double %96, ptr %98, align 8, !tbaa !19
  %99 = or disjoint i64 %.0284385, 3
  %100 = load ptr, ptr %43, align 8, !tbaa !18
  %101 = getelementptr inbounds double, ptr %100, i64 %99
  %102 = load double, ptr %101, align 8, !tbaa !19
  %103 = load ptr, ptr %44, align 8, !tbaa !18
  %104 = getelementptr inbounds double, ptr %103, i64 %99
  store double %102, ptr %104, align 8, !tbaa !19
  %105 = add nuw nsw i64 %.0284385, 4
  %niter593.next.3 = add i64 %niter593, 4
  %niter593.ncmp.3 = icmp eq i64 %niter593.next.3, %unroll_iter592
  br i1 %niter593.ncmp.3, label %.preheader378.loopexit.unr-lcssa, label %81, !llvm.loop !26

106:                                              ; preds = %106, %.lr.ph389.new
  %.1285388 = phi i64 [ 0, %.lr.ph389.new ], [ %130, %106 ]
  %niter599 = phi i64 [ 0, %.lr.ph389.new ], [ %niter599.next.3, %106 ]
  %107 = load ptr, ptr %78, align 8, !tbaa !18
  %108 = getelementptr inbounds double, ptr %107, i64 %.1285388
  %109 = load double, ptr %108, align 8, !tbaa !19
  %110 = load ptr, ptr %79, align 8, !tbaa !18
  %111 = getelementptr inbounds double, ptr %110, i64 %.1285388
  store double %109, ptr %111, align 8, !tbaa !19
  %112 = or disjoint i64 %.1285388, 1
  %113 = load ptr, ptr %78, align 8, !tbaa !18
  %114 = getelementptr inbounds double, ptr %113, i64 %112
  %115 = load double, ptr %114, align 8, !tbaa !19
  %116 = load ptr, ptr %79, align 8, !tbaa !18
  %117 = getelementptr inbounds double, ptr %116, i64 %112
  store double %115, ptr %117, align 8, !tbaa !19
  %118 = or disjoint i64 %.1285388, 2
  %119 = load ptr, ptr %78, align 8, !tbaa !18
  %120 = getelementptr inbounds double, ptr %119, i64 %118
  %121 = load double, ptr %120, align 8, !tbaa !19
  %122 = load ptr, ptr %79, align 8, !tbaa !18
  %123 = getelementptr inbounds double, ptr %122, i64 %118
  store double %121, ptr %123, align 8, !tbaa !19
  %124 = or disjoint i64 %.1285388, 3
  %125 = load ptr, ptr %78, align 8, !tbaa !18
  %126 = getelementptr inbounds double, ptr %125, i64 %124
  %127 = load double, ptr %126, align 8, !tbaa !19
  %128 = load ptr, ptr %79, align 8, !tbaa !18
  %129 = getelementptr inbounds double, ptr %128, i64 %124
  store double %127, ptr %129, align 8, !tbaa !19
  %130 = add nuw nsw i64 %.1285388, 4
  %niter599.next.3 = add i64 %niter599, 4
  %niter599.ncmp.3 = icmp eq i64 %niter599.next.3, %unroll_iter598
  br i1 %niter599.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %106, !llvm.loop !27

._crit_edge.loopexit.unr-lcssa:                   ; preds = %106, %.lr.ph389
  %.1285388.unr = phi i64 [ 0, %.lr.ph389 ], [ %130, %106 ]
  %lcmp.mod597.not = icmp eq i64 %xtraiter595, 0
  br i1 %lcmp.mod597.not, label %._crit_edge, label %.epil.preheader594

.epil.preheader594:                               ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader594
  %.1285388.epil = phi i64 [ %136, %.epil.preheader594 ], [ %.1285388.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter596 = phi i64 [ %epil.iter596.next, %.epil.preheader594 ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %131 = load ptr, ptr %78, align 8, !tbaa !18
  %132 = getelementptr inbounds double, ptr %131, i64 %.1285388.epil
  %133 = load double, ptr %132, align 8, !tbaa !19
  %134 = load ptr, ptr %79, align 8, !tbaa !18
  %135 = getelementptr inbounds double, ptr %134, i64 %.1285388.epil
  store double %133, ptr %135, align 8, !tbaa !19
  %136 = add nuw nsw i64 %.1285388.epil, 1
  %epil.iter596.next = add i64 %epil.iter596, 1
  %epil.iter596.cmp.not = icmp eq i64 %epil.iter596.next, %xtraiter595
  br i1 %epil.iter596.cmp.not, label %._crit_edge, label %.epil.preheader594, !llvm.loop !28

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.epil.preheader594, %.preheader378
  %137 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %1, double noundef 0.000000e+00)
  br i1 %137, label %138, label %156

138:                                              ; preds = %._crit_edge
  %139 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %3, double noundef 0.000000e+00)
  br i1 %139, label %140, label %156

140:                                              ; preds = %138
  %141 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %5, double noundef 0.000000e+00)
  br i1 %141, label %142, label %156

142:                                              ; preds = %140
  %143 = getelementptr inbounds i8, ptr %13, i64 56
  %144 = load ptr, ptr %143, align 8, !tbaa !18
  %145 = getelementptr inbounds i8, ptr %0, i64 296
  %146 = load ptr, ptr %145, align 8, !tbaa !18
  %147 = load i64, ptr %20, align 8, !tbaa !15
  %148 = load i64, ptr %18, align 8, !tbaa !14
  %149 = mul nsw i64 %148, %147
  %150 = load i64, ptr %22, align 8, !tbaa !16
  %151 = mul nsw i64 %149, %150
  %152 = load i64, ptr %29, align 8, !tbaa !17
  %153 = mul nsw i64 %151, %152
  %154 = add nsw i64 %153, -1
  %155 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %154)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %144, i64 noundef 1, ptr noundef %146, i64 noundef 1, i64 noundef %155)
  br label %156

156:                                              ; preds = %142, %140, %138, %._crit_edge
  %157 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %1, double noundef 0.000000e+00)
  br i1 %157, label %158, label %.loopexit377

158:                                              ; preds = %156
  %159 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %3, double noundef 0.000000e+00)
  br i1 %159, label %160, label %.loopexit377

160:                                              ; preds = %158
  %161 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %5, double noundef 0.000000e+00)
  br i1 %161, label %.preheader376, label %.loopexit377

.preheader376:                                    ; preds = %160
  %162 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not319402 = icmp sgt i64 %162, 0
  br i1 %.not.not319402, label %.preheader375.lr.ph, label %.loopexit377

.preheader375.lr.ph:                              ; preds = %.preheader376
  %163 = getelementptr inbounds i8, ptr %11, i64 56
  %164 = getelementptr inbounds i8, ptr %12, i64 56
  %165 = getelementptr inbounds i8, ptr %14, i64 56
  %166 = getelementptr inbounds i8, ptr %13, i64 56
  %167 = load i64, ptr %22, align 8, !tbaa !16
  %168 = icmp sgt i64 %167, 0
  br i1 %168, label %.preheader375, label %.loopexit377

.preheader375:                                    ; preds = %.preheader375.lr.ph, %._crit_edge401
  %169 = phi i64 [ %224, %._crit_edge401 ], [ %162, %.preheader375.lr.ph ]
  %170 = phi i64 [ %225, %._crit_edge401 ], [ %167, %.preheader375.lr.ph ]
  %.2286403 = phi i64 [ %226, %._crit_edge401 ], [ 0, %.preheader375.lr.ph ]
  %.not.not347397 = icmp sgt i64 %170, 0
  br i1 %.not.not347397, label %.lr.ph400, label %._crit_edge401

.lr.ph400:                                        ; preds = %.preheader375, %._crit_edge396
  %.1278398 = phi i64 [ %222, %._crit_edge396 ], [ 0, %.preheader375 ]
  %171 = load ptr, ptr %163, align 8, !tbaa !18
  %172 = getelementptr inbounds double, ptr %171, i64 %.2286403
  %173 = load double, ptr %172, align 8, !tbaa !19
  %174 = load ptr, ptr %164, align 8, !tbaa !18
  %175 = getelementptr inbounds double, ptr %174, i64 %.1278398
  %176 = load double, ptr %175, align 8, !tbaa !19
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %0, double noundef %2, double noundef %173, double noundef %176, ptr noundef nonnull %14, ptr noundef %7)
  %177 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not348394 = icmp sgt i64 %177, 0
  br i1 %.not.not348394, label %.preheader374.lr.ph, label %._crit_edge396

.preheader374.lr.ph:                              ; preds = %.lr.ph400
  %178 = load i64, ptr %29, align 8, !tbaa !17
  %.not.not349390 = icmp sgt i64 %178, 0
  br i1 %.not.not349390, label %.preheader374.lr.ph.split.us, label %._crit_edge396

.preheader374.lr.ph.split.us:                     ; preds = %.preheader374.lr.ph
  %179 = load i64, ptr %20, align 8, !tbaa !15
  %180 = mul nsw i64 %179, %.1278398
  %181 = add nsw i64 %180, %.2286403
  %182 = mul nsw i64 %181, %177
  %xtraiter601 = and i64 %178, 3
  %183 = icmp ult i64 %178, 4
  %unroll_iter604 = and i64 %178, 9223372036854775804
  %lcmp.mod603.not = icmp eq i64 %xtraiter601, 0
  br label %.preheader374.us

.preheader374.us:                                 ; preds = %._crit_edge393.us, %.preheader374.lr.ph.split.us
  %.0270395.us = phi i64 [ 0, %.preheader374.lr.ph.split.us ], [ %221, %._crit_edge393.us ]
  %184 = add nsw i64 %182, %.0270395.us
  %185 = mul nsw i64 %184, %178
  br i1 %183, label %._crit_edge393.us.unr-lcssa, label %.preheader374.us.new

.preheader374.us.new:                             ; preds = %.preheader374.us, %.preheader374.us.new
  %.0391.us = phi i64 [ %213, %.preheader374.us.new ], [ 0, %.preheader374.us ]
  %niter605 = phi i64 [ %niter605.next.3, %.preheader374.us.new ], [ 0, %.preheader374.us ]
  %186 = load ptr, ptr %165, align 8, !tbaa !18
  %187 = getelementptr inbounds double, ptr %186, i64 %.0391.us
  %188 = load double, ptr %187, align 8, !tbaa !19
  %189 = load ptr, ptr %166, align 8, !tbaa !18
  %190 = getelementptr double, ptr %189, i64 %185
  %191 = getelementptr double, ptr %190, i64 %.0391.us
  store double %188, ptr %191, align 8, !tbaa !19
  %192 = or disjoint i64 %.0391.us, 1
  %193 = load ptr, ptr %165, align 8, !tbaa !18
  %194 = getelementptr inbounds double, ptr %193, i64 %192
  %195 = load double, ptr %194, align 8, !tbaa !19
  %196 = load ptr, ptr %166, align 8, !tbaa !18
  %197 = getelementptr double, ptr %196, i64 %185
  %198 = getelementptr double, ptr %197, i64 %192
  store double %195, ptr %198, align 8, !tbaa !19
  %199 = or disjoint i64 %.0391.us, 2
  %200 = load ptr, ptr %165, align 8, !tbaa !18
  %201 = getelementptr inbounds double, ptr %200, i64 %199
  %202 = load double, ptr %201, align 8, !tbaa !19
  %203 = load ptr, ptr %166, align 8, !tbaa !18
  %204 = getelementptr double, ptr %203, i64 %185
  %205 = getelementptr double, ptr %204, i64 %199
  store double %202, ptr %205, align 8, !tbaa !19
  %206 = or disjoint i64 %.0391.us, 3
  %207 = load ptr, ptr %165, align 8, !tbaa !18
  %208 = getelementptr inbounds double, ptr %207, i64 %206
  %209 = load double, ptr %208, align 8, !tbaa !19
  %210 = load ptr, ptr %166, align 8, !tbaa !18
  %211 = getelementptr double, ptr %210, i64 %185
  %212 = getelementptr double, ptr %211, i64 %206
  store double %209, ptr %212, align 8, !tbaa !19
  %213 = add nuw nsw i64 %.0391.us, 4
  %niter605.next.3 = add i64 %niter605, 4
  %niter605.ncmp.3 = icmp eq i64 %niter605.next.3, %unroll_iter604
  br i1 %niter605.ncmp.3, label %._crit_edge393.us.unr-lcssa, label %.preheader374.us.new, !llvm.loop !29

._crit_edge393.us.unr-lcssa:                      ; preds = %.preheader374.us.new, %.preheader374.us
  %.0391.us.unr = phi i64 [ 0, %.preheader374.us ], [ %213, %.preheader374.us.new ]
  br i1 %lcmp.mod603.not, label %._crit_edge393.us, label %.epil.preheader600

.epil.preheader600:                               ; preds = %._crit_edge393.us.unr-lcssa, %.epil.preheader600
  %.0391.us.epil = phi i64 [ %220, %.epil.preheader600 ], [ %.0391.us.unr, %._crit_edge393.us.unr-lcssa ]
  %epil.iter602 = phi i64 [ %epil.iter602.next, %.epil.preheader600 ], [ 0, %._crit_edge393.us.unr-lcssa ]
  %214 = load ptr, ptr %165, align 8, !tbaa !18
  %215 = getelementptr inbounds double, ptr %214, i64 %.0391.us.epil
  %216 = load double, ptr %215, align 8, !tbaa !19
  %217 = load ptr, ptr %166, align 8, !tbaa !18
  %218 = getelementptr double, ptr %217, i64 %185
  %219 = getelementptr double, ptr %218, i64 %.0391.us.epil
  store double %216, ptr %219, align 8, !tbaa !19
  %220 = add nuw nsw i64 %.0391.us.epil, 1
  %epil.iter602.next = add i64 %epil.iter602, 1
  %epil.iter602.cmp.not = icmp eq i64 %epil.iter602.next, %xtraiter601
  br i1 %epil.iter602.cmp.not, label %._crit_edge393.us, label %.epil.preheader600, !llvm.loop !30

._crit_edge393.us:                                ; preds = %.epil.preheader600, %._crit_edge393.us.unr-lcssa
  %221 = add nuw nsw i64 %.0270395.us, 1
  %exitcond548.not = icmp eq i64 %221, %177
  br i1 %exitcond548.not, label %._crit_edge396, label %.preheader374.us, !llvm.loop !31

._crit_edge396:                                   ; preds = %._crit_edge393.us, %.preheader374.lr.ph, %.lr.ph400
  %222 = add nuw nsw i64 %.1278398, 1
  %223 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not347 = icmp slt i64 %222, %223
  br i1 %.not.not347, label %.lr.ph400, label %._crit_edge401.loopexit, !llvm.loop !32

._crit_edge401.loopexit:                          ; preds = %._crit_edge396
  %.pre = load i64, ptr %20, align 8, !tbaa !15
  br label %._crit_edge401

._crit_edge401:                                   ; preds = %._crit_edge401.loopexit, %.preheader375
  %224 = phi i64 [ %.pre, %._crit_edge401.loopexit ], [ %169, %.preheader375 ]
  %225 = phi i64 [ %223, %._crit_edge401.loopexit ], [ %170, %.preheader375 ]
  %226 = add nuw nsw i64 %.2286403, 1
  %.not.not319 = icmp slt i64 %226, %224
  br i1 %.not.not319, label %.preheader375, label %.loopexit377, !llvm.loop !33

.loopexit377:                                     ; preds = %._crit_edge401, %.preheader375.lr.ph, %.preheader376, %160, %158, %156
  %.0312 = phi double [ %2, %160 ], [ %2, %158 ], [ %2, %156 ], [ 0.000000e+00, %.preheader376 ], [ 0.000000e+00, %.preheader375.lr.ph ], [ 0.000000e+00, %._crit_edge401 ]
  %.0292 = phi double [ %1, %160 ], [ %1, %158 ], [ %1, %156 ], [ 1.000000e+00, %.preheader376 ], [ 1.000000e+00, %.preheader375.lr.ph ], [ 1.000000e+00, %._crit_edge401 ]
  %227 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %.0292, double noundef 0.000000e+00)
  br i1 %227, label %228, label %.loopexit373

228:                                              ; preds = %.loopexit377
  %229 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %3, double noundef 0.000000e+00)
  br i1 %229, label %230, label %.loopexit373

230:                                              ; preds = %228
  %231 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %5, double noundef 0.000000e+00)
  br i1 %231, label %.preheader372, label %.loopexit373

.preheader372:                                    ; preds = %230
  %232 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not320415 = icmp sgt i64 %232, 0
  br i1 %.not.not320415, label %.preheader371.lr.ph, label %.loopexit373

.preheader371.lr.ph:                              ; preds = %.preheader372
  %233 = getelementptr inbounds i8, ptr %10, i64 56
  %234 = getelementptr inbounds i8, ptr %12, i64 56
  %235 = getelementptr inbounds i8, ptr %14, i64 56
  %236 = getelementptr inbounds i8, ptr %13, i64 56
  %237 = load i64, ptr %22, align 8, !tbaa !16
  %238 = icmp sgt i64 %237, 0
  br i1 %238, label %.preheader371, label %.loopexit373

.preheader371:                                    ; preds = %.preheader371.lr.ph, %._crit_edge414
  %239 = phi i64 [ %294, %._crit_edge414 ], [ %232, %.preheader371.lr.ph ]
  %240 = phi i64 [ %295, %._crit_edge414 ], [ %237, %.preheader371.lr.ph ]
  %.3287416 = phi i64 [ %296, %._crit_edge414 ], [ 0, %.preheader371.lr.ph ]
  %.not.not344411 = icmp sgt i64 %240, 0
  br i1 %.not.not344411, label %.lr.ph413, label %._crit_edge414

.lr.ph413:                                        ; preds = %.preheader371, %._crit_edge410
  %.2279412 = phi i64 [ %292, %._crit_edge410 ], [ 0, %.preheader371 ]
  %241 = load ptr, ptr %233, align 8, !tbaa !18
  %242 = getelementptr inbounds double, ptr %241, i64 %.3287416
  %243 = load double, ptr %242, align 8, !tbaa !19
  %244 = load ptr, ptr %234, align 8, !tbaa !18
  %245 = getelementptr inbounds double, ptr %244, i64 %.2279412
  %246 = load double, ptr %245, align 8, !tbaa !19
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %0, double noundef %243, double noundef %4, double noundef %246, ptr noundef nonnull %14, ptr noundef %7)
  %247 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not345408 = icmp sgt i64 %247, 0
  br i1 %.not.not345408, label %.preheader370.lr.ph, label %._crit_edge410

.preheader370.lr.ph:                              ; preds = %.lr.ph413
  %248 = load i64, ptr %29, align 8, !tbaa !17
  %.not.not346404 = icmp sgt i64 %248, 0
  %249 = mul nuw nsw i64 %247, %.2279412
  br i1 %.not.not346404, label %.preheader370.lr.ph.split.us, label %._crit_edge410

.preheader370.lr.ph.split.us:                     ; preds = %.preheader370.lr.ph
  %250 = load i64, ptr %18, align 8, !tbaa !14
  %xtraiter607 = and i64 %248, 3
  %251 = icmp ult i64 %248, 4
  %unroll_iter610 = and i64 %248, 9223372036854775804
  %lcmp.mod609.not = icmp eq i64 %xtraiter607, 0
  br label %.preheader370.us

.preheader370.us:                                 ; preds = %._crit_edge407.us, %.preheader370.lr.ph.split.us
  %.1271409.us = phi i64 [ 0, %.preheader370.lr.ph.split.us ], [ %291, %._crit_edge407.us ]
  %252 = add nuw nsw i64 %249, %.1271409.us
  %253 = mul nsw i64 %250, %252
  %254 = add nsw i64 %253, %.3287416
  %255 = mul nsw i64 %254, %248
  br i1 %251, label %._crit_edge407.us.unr-lcssa, label %.preheader370.us.new

.preheader370.us.new:                             ; preds = %.preheader370.us, %.preheader370.us.new
  %.1405.us = phi i64 [ %283, %.preheader370.us.new ], [ 0, %.preheader370.us ]
  %niter611 = phi i64 [ %niter611.next.3, %.preheader370.us.new ], [ 0, %.preheader370.us ]
  %256 = load ptr, ptr %235, align 8, !tbaa !18
  %257 = getelementptr inbounds double, ptr %256, i64 %.1405.us
  %258 = load double, ptr %257, align 8, !tbaa !19
  %259 = load ptr, ptr %236, align 8, !tbaa !18
  %260 = getelementptr double, ptr %259, i64 %255
  %261 = getelementptr double, ptr %260, i64 %.1405.us
  store double %258, ptr %261, align 8, !tbaa !19
  %262 = or disjoint i64 %.1405.us, 1
  %263 = load ptr, ptr %235, align 8, !tbaa !18
  %264 = getelementptr inbounds double, ptr %263, i64 %262
  %265 = load double, ptr %264, align 8, !tbaa !19
  %266 = load ptr, ptr %236, align 8, !tbaa !18
  %267 = getelementptr double, ptr %266, i64 %255
  %268 = getelementptr double, ptr %267, i64 %262
  store double %265, ptr %268, align 8, !tbaa !19
  %269 = or disjoint i64 %.1405.us, 2
  %270 = load ptr, ptr %235, align 8, !tbaa !18
  %271 = getelementptr inbounds double, ptr %270, i64 %269
  %272 = load double, ptr %271, align 8, !tbaa !19
  %273 = load ptr, ptr %236, align 8, !tbaa !18
  %274 = getelementptr double, ptr %273, i64 %255
  %275 = getelementptr double, ptr %274, i64 %269
  store double %272, ptr %275, align 8, !tbaa !19
  %276 = or disjoint i64 %.1405.us, 3
  %277 = load ptr, ptr %235, align 8, !tbaa !18
  %278 = getelementptr inbounds double, ptr %277, i64 %276
  %279 = load double, ptr %278, align 8, !tbaa !19
  %280 = load ptr, ptr %236, align 8, !tbaa !18
  %281 = getelementptr double, ptr %280, i64 %255
  %282 = getelementptr double, ptr %281, i64 %276
  store double %279, ptr %282, align 8, !tbaa !19
  %283 = add nuw nsw i64 %.1405.us, 4
  %niter611.next.3 = add i64 %niter611, 4
  %niter611.ncmp.3 = icmp eq i64 %niter611.next.3, %unroll_iter610
  br i1 %niter611.ncmp.3, label %._crit_edge407.us.unr-lcssa, label %.preheader370.us.new, !llvm.loop !35

._crit_edge407.us.unr-lcssa:                      ; preds = %.preheader370.us.new, %.preheader370.us
  %.1405.us.unr = phi i64 [ 0, %.preheader370.us ], [ %283, %.preheader370.us.new ]
  br i1 %lcmp.mod609.not, label %._crit_edge407.us, label %.epil.preheader606

.epil.preheader606:                               ; preds = %._crit_edge407.us.unr-lcssa, %.epil.preheader606
  %.1405.us.epil = phi i64 [ %290, %.epil.preheader606 ], [ %.1405.us.unr, %._crit_edge407.us.unr-lcssa ]
  %epil.iter608 = phi i64 [ %epil.iter608.next, %.epil.preheader606 ], [ 0, %._crit_edge407.us.unr-lcssa ]
  %284 = load ptr, ptr %235, align 8, !tbaa !18
  %285 = getelementptr inbounds double, ptr %284, i64 %.1405.us.epil
  %286 = load double, ptr %285, align 8, !tbaa !19
  %287 = load ptr, ptr %236, align 8, !tbaa !18
  %288 = getelementptr double, ptr %287, i64 %255
  %289 = getelementptr double, ptr %288, i64 %.1405.us.epil
  store double %286, ptr %289, align 8, !tbaa !19
  %290 = add nuw nsw i64 %.1405.us.epil, 1
  %epil.iter608.next = add i64 %epil.iter608, 1
  %epil.iter608.cmp.not = icmp eq i64 %epil.iter608.next, %xtraiter607
  br i1 %epil.iter608.cmp.not, label %._crit_edge407.us, label %.epil.preheader606, !llvm.loop !36

._crit_edge407.us:                                ; preds = %.epil.preheader606, %._crit_edge407.us.unr-lcssa
  %291 = add nuw nsw i64 %.1271409.us, 1
  %exitcond550.not = icmp eq i64 %291, %247
  br i1 %exitcond550.not, label %._crit_edge410, label %.preheader370.us, !llvm.loop !37

._crit_edge410:                                   ; preds = %._crit_edge407.us, %.preheader370.lr.ph, %.lr.ph413
  %292 = add nuw nsw i64 %.2279412, 1
  %293 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not344 = icmp slt i64 %292, %293
  br i1 %.not.not344, label %.lr.ph413, label %._crit_edge414.loopexit, !llvm.loop !38

._crit_edge414.loopexit:                          ; preds = %._crit_edge410
  %.pre569 = load i64, ptr %18, align 8, !tbaa !14
  br label %._crit_edge414

._crit_edge414:                                   ; preds = %._crit_edge414.loopexit, %.preheader371
  %294 = phi i64 [ %.pre569, %._crit_edge414.loopexit ], [ %239, %.preheader371 ]
  %295 = phi i64 [ %293, %._crit_edge414.loopexit ], [ %240, %.preheader371 ]
  %296 = add nuw nsw i64 %.3287416, 1
  %.not.not320 = icmp slt i64 %296, %294
  br i1 %.not.not320, label %.preheader371, label %.loopexit373, !llvm.loop !39

.loopexit373:                                     ; preds = %._crit_edge414, %.preheader371.lr.ph, %.preheader372, %230, %228, %.loopexit377
  %.0308 = phi double [ %3, %230 ], [ %3, %228 ], [ %3, %.loopexit377 ], [ 1.000000e+00, %.preheader372 ], [ 1.000000e+00, %.preheader371.lr.ph ], [ 1.000000e+00, %._crit_edge414 ]
  %.0304 = phi double [ %4, %230 ], [ %4, %228 ], [ %4, %.loopexit377 ], [ 0.000000e+00, %.preheader372 ], [ 0.000000e+00, %.preheader371.lr.ph ], [ 0.000000e+00, %._crit_edge414 ]
  %297 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %.0292, double noundef 0.000000e+00)
  br i1 %297, label %298, label %.loopexit369

298:                                              ; preds = %.loopexit373
  %299 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %.0308, double noundef 0.000000e+00)
  br i1 %299, label %300, label %.loopexit369

300:                                              ; preds = %298
  %301 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %5, double noundef 0.000000e+00)
  br i1 %301, label %.preheader368, label %.loopexit369

.preheader368:                                    ; preds = %300
  %302 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not321429 = icmp sgt i64 %302, 0
  br i1 %.not.not321429, label %.preheader367.lr.ph, label %.loopexit369

.preheader367.lr.ph:                              ; preds = %.preheader368
  %303 = getelementptr inbounds i8, ptr %10, i64 56
  %304 = getelementptr inbounds i8, ptr %11, i64 56
  %305 = getelementptr inbounds i8, ptr %14, i64 56
  %306 = getelementptr inbounds i8, ptr %13, i64 56
  %307 = load i64, ptr %20, align 8, !tbaa !15
  %308 = icmp sgt i64 %307, 0
  br i1 %308, label %.preheader367, label %.loopexit369

.preheader367:                                    ; preds = %.preheader367.lr.ph, %._crit_edge428
  %309 = phi i64 [ %365, %._crit_edge428 ], [ %302, %.preheader367.lr.ph ]
  %310 = phi i64 [ %366, %._crit_edge428 ], [ %307, %.preheader367.lr.ph ]
  %.4288430 = phi i64 [ %367, %._crit_edge428 ], [ 0, %.preheader367.lr.ph ]
  %.not.not341424 = icmp sgt i64 %310, 0
  br i1 %.not.not341424, label %.lr.ph427, label %._crit_edge428

.lr.ph427:                                        ; preds = %.preheader367, %._crit_edge423
  %.3280425 = phi i64 [ %363, %._crit_edge423 ], [ 0, %.preheader367 ]
  %311 = load ptr, ptr %303, align 8, !tbaa !18
  %312 = getelementptr inbounds double, ptr %311, i64 %.4288430
  %313 = load double, ptr %312, align 8, !tbaa !19
  %314 = load ptr, ptr %304, align 8, !tbaa !18
  %315 = getelementptr inbounds double, ptr %314, i64 %.3280425
  %316 = load double, ptr %315, align 8, !tbaa !19
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %0, double noundef %313, double noundef %316, double noundef %6, ptr noundef nonnull %14, ptr noundef %7)
  %317 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not342421 = icmp sgt i64 %317, 0
  br i1 %.not.not342421, label %.preheader366.lr.ph, label %._crit_edge423

.preheader366.lr.ph:                              ; preds = %.lr.ph427
  %318 = load i64, ptr %29, align 8, !tbaa !17
  %.not.not343417 = icmp sgt i64 %318, 0
  br i1 %.not.not343417, label %.preheader366.lr.ph.split.us, label %._crit_edge423

.preheader366.lr.ph.split.us:                     ; preds = %.preheader366.lr.ph
  %319 = load i64, ptr %18, align 8, !tbaa !14
  %320 = load i64, ptr %20, align 8, !tbaa !15
  %xtraiter613 = and i64 %318, 3
  %321 = icmp ult i64 %318, 4
  %unroll_iter616 = and i64 %318, 9223372036854775804
  %lcmp.mod615.not = icmp eq i64 %xtraiter613, 0
  br label %.preheader366.us

.preheader366.us:                                 ; preds = %._crit_edge420.us, %.preheader366.lr.ph.split.us
  %.2272422.us = phi i64 [ 0, %.preheader366.lr.ph.split.us ], [ %362, %._crit_edge420.us ]
  %322 = mul nsw i64 %320, %.2272422.us
  %323 = add nsw i64 %322, %.3280425
  %324 = mul nsw i64 %323, %319
  %325 = add nsw i64 %324, %.4288430
  %326 = mul nsw i64 %325, %318
  br i1 %321, label %._crit_edge420.us.unr-lcssa, label %.preheader366.us.new

.preheader366.us.new:                             ; preds = %.preheader366.us, %.preheader366.us.new
  %.2418.us = phi i64 [ %354, %.preheader366.us.new ], [ 0, %.preheader366.us ]
  %niter617 = phi i64 [ %niter617.next.3, %.preheader366.us.new ], [ 0, %.preheader366.us ]
  %327 = load ptr, ptr %305, align 8, !tbaa !18
  %328 = getelementptr inbounds double, ptr %327, i64 %.2418.us
  %329 = load double, ptr %328, align 8, !tbaa !19
  %330 = load ptr, ptr %306, align 8, !tbaa !18
  %331 = getelementptr double, ptr %330, i64 %326
  %332 = getelementptr double, ptr %331, i64 %.2418.us
  store double %329, ptr %332, align 8, !tbaa !19
  %333 = or disjoint i64 %.2418.us, 1
  %334 = load ptr, ptr %305, align 8, !tbaa !18
  %335 = getelementptr inbounds double, ptr %334, i64 %333
  %336 = load double, ptr %335, align 8, !tbaa !19
  %337 = load ptr, ptr %306, align 8, !tbaa !18
  %338 = getelementptr double, ptr %337, i64 %326
  %339 = getelementptr double, ptr %338, i64 %333
  store double %336, ptr %339, align 8, !tbaa !19
  %340 = or disjoint i64 %.2418.us, 2
  %341 = load ptr, ptr %305, align 8, !tbaa !18
  %342 = getelementptr inbounds double, ptr %341, i64 %340
  %343 = load double, ptr %342, align 8, !tbaa !19
  %344 = load ptr, ptr %306, align 8, !tbaa !18
  %345 = getelementptr double, ptr %344, i64 %326
  %346 = getelementptr double, ptr %345, i64 %340
  store double %343, ptr %346, align 8, !tbaa !19
  %347 = or disjoint i64 %.2418.us, 3
  %348 = load ptr, ptr %305, align 8, !tbaa !18
  %349 = getelementptr inbounds double, ptr %348, i64 %347
  %350 = load double, ptr %349, align 8, !tbaa !19
  %351 = load ptr, ptr %306, align 8, !tbaa !18
  %352 = getelementptr double, ptr %351, i64 %326
  %353 = getelementptr double, ptr %352, i64 %347
  store double %350, ptr %353, align 8, !tbaa !19
  %354 = add nuw nsw i64 %.2418.us, 4
  %niter617.next.3 = add i64 %niter617, 4
  %niter617.ncmp.3 = icmp eq i64 %niter617.next.3, %unroll_iter616
  br i1 %niter617.ncmp.3, label %._crit_edge420.us.unr-lcssa, label %.preheader366.us.new, !llvm.loop !40

._crit_edge420.us.unr-lcssa:                      ; preds = %.preheader366.us.new, %.preheader366.us
  %.2418.us.unr = phi i64 [ 0, %.preheader366.us ], [ %354, %.preheader366.us.new ]
  br i1 %lcmp.mod615.not, label %._crit_edge420.us, label %.epil.preheader612

.epil.preheader612:                               ; preds = %._crit_edge420.us.unr-lcssa, %.epil.preheader612
  %.2418.us.epil = phi i64 [ %361, %.epil.preheader612 ], [ %.2418.us.unr, %._crit_edge420.us.unr-lcssa ]
  %epil.iter614 = phi i64 [ %epil.iter614.next, %.epil.preheader612 ], [ 0, %._crit_edge420.us.unr-lcssa ]
  %355 = load ptr, ptr %305, align 8, !tbaa !18
  %356 = getelementptr inbounds double, ptr %355, i64 %.2418.us.epil
  %357 = load double, ptr %356, align 8, !tbaa !19
  %358 = load ptr, ptr %306, align 8, !tbaa !18
  %359 = getelementptr double, ptr %358, i64 %326
  %360 = getelementptr double, ptr %359, i64 %.2418.us.epil
  store double %357, ptr %360, align 8, !tbaa !19
  %361 = add nuw nsw i64 %.2418.us.epil, 1
  %epil.iter614.next = add i64 %epil.iter614, 1
  %epil.iter614.cmp.not = icmp eq i64 %epil.iter614.next, %xtraiter613
  br i1 %epil.iter614.cmp.not, label %._crit_edge420.us, label %.epil.preheader612, !llvm.loop !41

._crit_edge420.us:                                ; preds = %.epil.preheader612, %._crit_edge420.us.unr-lcssa
  %362 = add nuw nsw i64 %.2272422.us, 1
  %exitcond552.not = icmp eq i64 %362, %317
  br i1 %exitcond552.not, label %._crit_edge423, label %.preheader366.us, !llvm.loop !42

._crit_edge423:                                   ; preds = %._crit_edge420.us, %.preheader366.lr.ph, %.lr.ph427
  %363 = add nuw nsw i64 %.3280425, 1
  %364 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not341 = icmp slt i64 %363, %364
  br i1 %.not.not341, label %.lr.ph427, label %._crit_edge428.loopexit, !llvm.loop !43

._crit_edge428.loopexit:                          ; preds = %._crit_edge423
  %.pre570 = load i64, ptr %18, align 8, !tbaa !14
  br label %._crit_edge428

._crit_edge428:                                   ; preds = %._crit_edge428.loopexit, %.preheader367
  %365 = phi i64 [ %.pre570, %._crit_edge428.loopexit ], [ %309, %.preheader367 ]
  %366 = phi i64 [ %364, %._crit_edge428.loopexit ], [ %310, %.preheader367 ]
  %367 = add nuw nsw i64 %.4288430, 1
  %.not.not321 = icmp slt i64 %367, %365
  br i1 %.not.not321, label %.preheader367, label %.loopexit369, !llvm.loop !44

.loopexit369:                                     ; preds = %._crit_edge428, %.preheader367.lr.ph, %.preheader368, %300, %298, %.loopexit373
  %.0300 = phi double [ %5, %300 ], [ %5, %298 ], [ %5, %.loopexit373 ], [ 1.000000e+00, %.preheader368 ], [ 1.000000e+00, %.preheader367.lr.ph ], [ 1.000000e+00, %._crit_edge428 ]
  %.0296 = phi double [ %6, %300 ], [ %6, %298 ], [ %6, %.loopexit373 ], [ 0.000000e+00, %.preheader368 ], [ 0.000000e+00, %.preheader367.lr.ph ], [ 0.000000e+00, %._crit_edge428 ]
  %368 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.0292, double noundef 0.000000e+00)
  br i1 %368, label %369, label %.loopexit365

369:                                              ; preds = %.loopexit369
  %370 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.0308, double noundef 0.000000e+00)
  br i1 %370, label %371, label %.loopexit365

371:                                              ; preds = %369
  %372 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %.0300, double noundef 0.000000e+00)
  br i1 %372, label %.preheader364, label %.loopexit365

.preheader364:                                    ; preds = %371
  %373 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not322446 = icmp sgt i64 %373, 0
  br i1 %.not.not322446, label %.lr.ph448, label %.loopexit365

.lr.ph448:                                        ; preds = %.preheader364
  %374 = getelementptr inbounds i8, ptr %12, i64 56
  %375 = getelementptr inbounds i8, ptr %14, i64 56
  %376 = getelementptr inbounds i8, ptr %13, i64 56
  br label %377

377:                                              ; preds = %.lr.ph448, %._crit_edge440
  %.5289447 = phi i64 [ 0, %.lr.ph448 ], [ %427, %._crit_edge440 ]
  %378 = load ptr, ptr %374, align 8, !tbaa !18
  %379 = getelementptr inbounds double, ptr %378, i64 %.5289447
  %380 = load double, ptr %379, align 8, !tbaa !19
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %0, double noundef %.0312, double noundef %.0304, double noundef %380, ptr noundef nonnull %14, ptr noundef %7)
  %381 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not338438 = icmp sgt i64 %381, 0
  br i1 %.not.not338438, label %.preheader363.lr.ph, label %._crit_edge440

.preheader363.lr.ph:                              ; preds = %377
  %382 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not339435 = icmp sgt i64 %382, 0
  %383 = mul nuw nsw i64 %381, %.5289447
  br i1 %.not.not339435, label %.preheader363.lr.ph.split.us, label %._crit_edge440

.preheader363.lr.ph.split.us:                     ; preds = %.preheader363.lr.ph
  %384 = load i64, ptr %29, align 8, !tbaa !17
  %.not.not340431.us = icmp sgt i64 %384, 0
  br i1 %.not.not340431.us, label %.preheader363.us.us.preheader, label %._crit_edge440

.preheader363.us.us.preheader:                    ; preds = %.preheader363.lr.ph.split.us
  %xtraiter619 = and i64 %384, 3
  %385 = icmp ult i64 %384, 4
  %unroll_iter622 = and i64 %384, 9223372036854775804
  %lcmp.mod621.not = icmp eq i64 %xtraiter619, 0
  br label %.preheader363.us.us

.preheader363.us.us:                              ; preds = %.preheader363.us.us.preheader, %._crit_edge437.split.us.us.us
  %.3273439.us.us = phi i64 [ %426, %._crit_edge437.split.us.us.us ], [ 0, %.preheader363.us.us.preheader ]
  %386 = add nuw nsw i64 %383, %.3273439.us.us
  %387 = mul nuw nsw i64 %382, %386
  br label %.preheader362.us.us.us

.preheader362.us.us.us:                           ; preds = %._crit_edge434.us.us.us, %.preheader363.us.us
  %.4281436.us.us.us = phi i64 [ 0, %.preheader363.us.us ], [ %425, %._crit_edge434.us.us.us ]
  %388 = add nuw nsw i64 %387, %.4281436.us.us.us
  %389 = mul nuw nsw i64 %384, %388
  br i1 %385, label %._crit_edge434.us.us.us.unr-lcssa, label %.preheader362.us.us.us.new

.preheader362.us.us.us.new:                       ; preds = %.preheader362.us.us.us, %.preheader362.us.us.us.new
  %.3432.us.us.us = phi i64 [ %417, %.preheader362.us.us.us.new ], [ 0, %.preheader362.us.us.us ]
  %niter623 = phi i64 [ %niter623.next.3, %.preheader362.us.us.us.new ], [ 0, %.preheader362.us.us.us ]
  %390 = load ptr, ptr %375, align 8, !tbaa !18
  %391 = getelementptr inbounds double, ptr %390, i64 %.3432.us.us.us
  %392 = load double, ptr %391, align 8, !tbaa !19
  %393 = load ptr, ptr %376, align 8, !tbaa !18
  %394 = getelementptr double, ptr %393, i64 %389
  %395 = getelementptr double, ptr %394, i64 %.3432.us.us.us
  store double %392, ptr %395, align 8, !tbaa !19
  %396 = or disjoint i64 %.3432.us.us.us, 1
  %397 = load ptr, ptr %375, align 8, !tbaa !18
  %398 = getelementptr inbounds double, ptr %397, i64 %396
  %399 = load double, ptr %398, align 8, !tbaa !19
  %400 = load ptr, ptr %376, align 8, !tbaa !18
  %401 = getelementptr double, ptr %400, i64 %389
  %402 = getelementptr double, ptr %401, i64 %396
  store double %399, ptr %402, align 8, !tbaa !19
  %403 = or disjoint i64 %.3432.us.us.us, 2
  %404 = load ptr, ptr %375, align 8, !tbaa !18
  %405 = getelementptr inbounds double, ptr %404, i64 %403
  %406 = load double, ptr %405, align 8, !tbaa !19
  %407 = load ptr, ptr %376, align 8, !tbaa !18
  %408 = getelementptr double, ptr %407, i64 %389
  %409 = getelementptr double, ptr %408, i64 %403
  store double %406, ptr %409, align 8, !tbaa !19
  %410 = or disjoint i64 %.3432.us.us.us, 3
  %411 = load ptr, ptr %375, align 8, !tbaa !18
  %412 = getelementptr inbounds double, ptr %411, i64 %410
  %413 = load double, ptr %412, align 8, !tbaa !19
  %414 = load ptr, ptr %376, align 8, !tbaa !18
  %415 = getelementptr double, ptr %414, i64 %389
  %416 = getelementptr double, ptr %415, i64 %410
  store double %413, ptr %416, align 8, !tbaa !19
  %417 = add nuw nsw i64 %.3432.us.us.us, 4
  %niter623.next.3 = add i64 %niter623, 4
  %niter623.ncmp.3 = icmp eq i64 %niter623.next.3, %unroll_iter622
  br i1 %niter623.ncmp.3, label %._crit_edge434.us.us.us.unr-lcssa, label %.preheader362.us.us.us.new, !llvm.loop !45

._crit_edge434.us.us.us.unr-lcssa:                ; preds = %.preheader362.us.us.us.new, %.preheader362.us.us.us
  %.3432.us.us.us.unr = phi i64 [ 0, %.preheader362.us.us.us ], [ %417, %.preheader362.us.us.us.new ]
  br i1 %lcmp.mod621.not, label %._crit_edge434.us.us.us, label %.epil.preheader618

.epil.preheader618:                               ; preds = %._crit_edge434.us.us.us.unr-lcssa, %.epil.preheader618
  %.3432.us.us.us.epil = phi i64 [ %424, %.epil.preheader618 ], [ %.3432.us.us.us.unr, %._crit_edge434.us.us.us.unr-lcssa ]
  %epil.iter620 = phi i64 [ %epil.iter620.next, %.epil.preheader618 ], [ 0, %._crit_edge434.us.us.us.unr-lcssa ]
  %418 = load ptr, ptr %375, align 8, !tbaa !18
  %419 = getelementptr inbounds double, ptr %418, i64 %.3432.us.us.us.epil
  %420 = load double, ptr %419, align 8, !tbaa !19
  %421 = load ptr, ptr %376, align 8, !tbaa !18
  %422 = getelementptr double, ptr %421, i64 %389
  %423 = getelementptr double, ptr %422, i64 %.3432.us.us.us.epil
  store double %420, ptr %423, align 8, !tbaa !19
  %424 = add nuw nsw i64 %.3432.us.us.us.epil, 1
  %epil.iter620.next = add i64 %epil.iter620, 1
  %epil.iter620.cmp.not = icmp eq i64 %epil.iter620.next, %xtraiter619
  br i1 %epil.iter620.cmp.not, label %._crit_edge434.us.us.us, label %.epil.preheader618, !llvm.loop !46

._crit_edge434.us.us.us:                          ; preds = %.epil.preheader618, %._crit_edge434.us.us.us.unr-lcssa
  %425 = add nuw nsw i64 %.4281436.us.us.us, 1
  %exitcond554.not = icmp eq i64 %425, %382
  br i1 %exitcond554.not, label %._crit_edge437.split.us.us.us, label %.preheader362.us.us.us, !llvm.loop !47

._crit_edge437.split.us.us.us:                    ; preds = %._crit_edge434.us.us.us
  %426 = add nuw nsw i64 %.3273439.us.us, 1
  %exitcond555.not = icmp eq i64 %426, %381
  br i1 %exitcond555.not, label %._crit_edge440, label %.preheader363.us.us, !llvm.loop !48

._crit_edge440:                                   ; preds = %._crit_edge437.split.us.us.us, %.preheader363.lr.ph.split.us, %.preheader363.lr.ph, %377
  %427 = add nuw nsw i64 %.5289447, 1
  %428 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not322 = icmp slt i64 %427, %428
  br i1 %.not.not322, label %377, label %.loopexit365, !llvm.loop !49

.loopexit365:                                     ; preds = %._crit_edge440, %.preheader364, %371, %369, %.loopexit369
  %.1313 = phi double [ %.0312, %371 ], [ %.0312, %369 ], [ %.0312, %.loopexit369 ], [ 0.000000e+00, %.preheader364 ], [ 0.000000e+00, %._crit_edge440 ]
  %.1309 = phi double [ %.0308, %371 ], [ %.0308, %369 ], [ %.0308, %.loopexit369 ], [ 1.000000e+00, %.preheader364 ], [ 1.000000e+00, %._crit_edge440 ]
  %.1305 = phi double [ %.0304, %371 ], [ %.0304, %369 ], [ %.0304, %.loopexit369 ], [ 0.000000e+00, %.preheader364 ], [ 0.000000e+00, %._crit_edge440 ]
  %.1293 = phi double [ %.0292, %371 ], [ %.0292, %369 ], [ %.0292, %.loopexit369 ], [ 1.000000e+00, %.preheader364 ], [ 1.000000e+00, %._crit_edge440 ]
  %429 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.1293, double noundef 0.000000e+00)
  br i1 %429, label %430, label %.loopexit361

430:                                              ; preds = %.loopexit365
  %431 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %.1309, double noundef 0.000000e+00)
  br i1 %431, label %432, label %.loopexit361

432:                                              ; preds = %430
  %433 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.0300, double noundef 0.000000e+00)
  br i1 %433, label %.preheader360, label %.loopexit361

.preheader360:                                    ; preds = %432
  %434 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not323465 = icmp sgt i64 %434, 0
  br i1 %.not.not323465, label %.lr.ph469, label %.loopexit361

.lr.ph469:                                        ; preds = %.preheader360
  %435 = getelementptr inbounds i8, ptr %11, i64 56
  %436 = getelementptr inbounds i8, ptr %14, i64 56
  %437 = getelementptr inbounds i8, ptr %13, i64 56
  br label %438

438:                                              ; preds = %.lr.ph469, %._crit_edge459
  %.6290466 = phi i64 [ 0, %.lr.ph469 ], [ %489, %._crit_edge459 ]
  %439 = load ptr, ptr %435, align 8, !tbaa !18
  %440 = getelementptr inbounds double, ptr %439, i64 %.6290466
  %441 = load double, ptr %440, align 8, !tbaa !19
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %0, double noundef %.1313, double noundef %441, double noundef %.0296, ptr noundef nonnull %14, ptr noundef %7)
  %442 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not335456 = icmp sgt i64 %442, 0
  br i1 %.not.not335456, label %.preheader359.lr.ph, label %._crit_edge459

.preheader359.lr.ph:                              ; preds = %438
  %443 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not336453 = icmp sgt i64 %443, 0
  br i1 %.not.not336453, label %.preheader359.lr.ph.split.us, label %._crit_edge459

.preheader359.lr.ph.split.us:                     ; preds = %.preheader359.lr.ph
  %444 = load i64, ptr %29, align 8, !tbaa !17
  %.not.not337449.us = icmp sgt i64 %444, 0
  br i1 %.not.not337449.us, label %.preheader359.lr.ph.split.us.split.us, label %._crit_edge459

.preheader359.lr.ph.split.us.split.us:            ; preds = %.preheader359.lr.ph.split.us
  %445 = load i64, ptr %20, align 8, !tbaa !15
  %xtraiter625 = and i64 %444, 3
  %446 = icmp ult i64 %444, 4
  %unroll_iter628 = and i64 %444, 9223372036854775804
  %lcmp.mod627.not = icmp eq i64 %xtraiter625, 0
  br label %.preheader359.us.us

.preheader359.us.us:                              ; preds = %._crit_edge455.split.us.us.us, %.preheader359.lr.ph.split.us.split.us
  %.4274457.us.us = phi i64 [ 0, %.preheader359.lr.ph.split.us.split.us ], [ %488, %._crit_edge455.split.us.us.us ]
  %447 = mul nsw i64 %445, %.4274457.us.us
  %448 = add nsw i64 %447, %.6290466
  %449 = mul nsw i64 %448, %443
  br label %.preheader358.us.us.us

.preheader358.us.us.us:                           ; preds = %._crit_edge452.us.us.us, %.preheader359.us.us
  %.5282454.us.us.us = phi i64 [ 0, %.preheader359.us.us ], [ %487, %._crit_edge452.us.us.us ]
  %450 = add nsw i64 %449, %.5282454.us.us.us
  %451 = mul nsw i64 %450, %444
  br i1 %446, label %._crit_edge452.us.us.us.unr-lcssa, label %.preheader358.us.us.us.new

.preheader358.us.us.us.new:                       ; preds = %.preheader358.us.us.us, %.preheader358.us.us.us.new
  %.4450.us.us.us = phi i64 [ %479, %.preheader358.us.us.us.new ], [ 0, %.preheader358.us.us.us ]
  %niter629 = phi i64 [ %niter629.next.3, %.preheader358.us.us.us.new ], [ 0, %.preheader358.us.us.us ]
  %452 = load ptr, ptr %436, align 8, !tbaa !18
  %453 = getelementptr inbounds double, ptr %452, i64 %.4450.us.us.us
  %454 = load double, ptr %453, align 8, !tbaa !19
  %455 = load ptr, ptr %437, align 8, !tbaa !18
  %456 = getelementptr double, ptr %455, i64 %451
  %457 = getelementptr double, ptr %456, i64 %.4450.us.us.us
  store double %454, ptr %457, align 8, !tbaa !19
  %458 = or disjoint i64 %.4450.us.us.us, 1
  %459 = load ptr, ptr %436, align 8, !tbaa !18
  %460 = getelementptr inbounds double, ptr %459, i64 %458
  %461 = load double, ptr %460, align 8, !tbaa !19
  %462 = load ptr, ptr %437, align 8, !tbaa !18
  %463 = getelementptr double, ptr %462, i64 %451
  %464 = getelementptr double, ptr %463, i64 %458
  store double %461, ptr %464, align 8, !tbaa !19
  %465 = or disjoint i64 %.4450.us.us.us, 2
  %466 = load ptr, ptr %436, align 8, !tbaa !18
  %467 = getelementptr inbounds double, ptr %466, i64 %465
  %468 = load double, ptr %467, align 8, !tbaa !19
  %469 = load ptr, ptr %437, align 8, !tbaa !18
  %470 = getelementptr double, ptr %469, i64 %451
  %471 = getelementptr double, ptr %470, i64 %465
  store double %468, ptr %471, align 8, !tbaa !19
  %472 = or disjoint i64 %.4450.us.us.us, 3
  %473 = load ptr, ptr %436, align 8, !tbaa !18
  %474 = getelementptr inbounds double, ptr %473, i64 %472
  %475 = load double, ptr %474, align 8, !tbaa !19
  %476 = load ptr, ptr %437, align 8, !tbaa !18
  %477 = getelementptr double, ptr %476, i64 %451
  %478 = getelementptr double, ptr %477, i64 %472
  store double %475, ptr %478, align 8, !tbaa !19
  %479 = add nuw nsw i64 %.4450.us.us.us, 4
  %niter629.next.3 = add i64 %niter629, 4
  %niter629.ncmp.3 = icmp eq i64 %niter629.next.3, %unroll_iter628
  br i1 %niter629.ncmp.3, label %._crit_edge452.us.us.us.unr-lcssa, label %.preheader358.us.us.us.new, !llvm.loop !50

._crit_edge452.us.us.us.unr-lcssa:                ; preds = %.preheader358.us.us.us.new, %.preheader358.us.us.us
  %.4450.us.us.us.unr = phi i64 [ 0, %.preheader358.us.us.us ], [ %479, %.preheader358.us.us.us.new ]
  br i1 %lcmp.mod627.not, label %._crit_edge452.us.us.us, label %.epil.preheader624

.epil.preheader624:                               ; preds = %._crit_edge452.us.us.us.unr-lcssa, %.epil.preheader624
  %.4450.us.us.us.epil = phi i64 [ %486, %.epil.preheader624 ], [ %.4450.us.us.us.unr, %._crit_edge452.us.us.us.unr-lcssa ]
  %epil.iter626 = phi i64 [ %epil.iter626.next, %.epil.preheader624 ], [ 0, %._crit_edge452.us.us.us.unr-lcssa ]
  %480 = load ptr, ptr %436, align 8, !tbaa !18
  %481 = getelementptr inbounds double, ptr %480, i64 %.4450.us.us.us.epil
  %482 = load double, ptr %481, align 8, !tbaa !19
  %483 = load ptr, ptr %437, align 8, !tbaa !18
  %484 = getelementptr double, ptr %483, i64 %451
  %485 = getelementptr double, ptr %484, i64 %.4450.us.us.us.epil
  store double %482, ptr %485, align 8, !tbaa !19
  %486 = add nuw nsw i64 %.4450.us.us.us.epil, 1
  %epil.iter626.next = add i64 %epil.iter626, 1
  %epil.iter626.cmp.not = icmp eq i64 %epil.iter626.next, %xtraiter625
  br i1 %epil.iter626.cmp.not, label %._crit_edge452.us.us.us, label %.epil.preheader624, !llvm.loop !51

._crit_edge452.us.us.us:                          ; preds = %.epil.preheader624, %._crit_edge452.us.us.us.unr-lcssa
  %487 = add nuw nsw i64 %.5282454.us.us.us, 1
  %exitcond557.not = icmp eq i64 %487, %443
  br i1 %exitcond557.not, label %._crit_edge455.split.us.us.us, label %.preheader358.us.us.us, !llvm.loop !52

._crit_edge455.split.us.us.us:                    ; preds = %._crit_edge452.us.us.us
  %488 = add nuw nsw i64 %.4274457.us.us, 1
  %exitcond558.not = icmp eq i64 %488, %442
  br i1 %exitcond558.not, label %._crit_edge459, label %.preheader359.us.us, !llvm.loop !53

._crit_edge459:                                   ; preds = %._crit_edge455.split.us.us.us, %.preheader359.lr.ph.split.us, %.preheader359.lr.ph, %438
  %489 = add nuw nsw i64 %.6290466, 1
  %490 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not323 = icmp slt i64 %489, %490
  br i1 %.not.not323, label %438, label %.loopexit361, !llvm.loop !54

.loopexit361:                                     ; preds = %._crit_edge459, %.preheader360, %432, %430, %.loopexit365
  %.2314 = phi double [ %.1313, %432 ], [ %.1313, %430 ], [ %.1313, %.loopexit365 ], [ 0.000000e+00, %.preheader360 ], [ 0.000000e+00, %._crit_edge459 ]
  %.1301 = phi double [ %.0300, %432 ], [ %.0300, %430 ], [ %.0300, %.loopexit365 ], [ 1.000000e+00, %.preheader360 ], [ 1.000000e+00, %._crit_edge459 ]
  %.1297 = phi double [ %.0296, %432 ], [ %.0296, %430 ], [ %.0296, %.loopexit365 ], [ 0.000000e+00, %.preheader360 ], [ 0.000000e+00, %._crit_edge459 ]
  %.2294 = phi double [ %.1293, %432 ], [ %.1293, %430 ], [ %.1293, %.loopexit365 ], [ 1.000000e+00, %.preheader360 ], [ 1.000000e+00, %._crit_edge459 ]
  %491 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %.2294, double noundef 0.000000e+00)
  br i1 %491, label %492, label %.loopexit357

492:                                              ; preds = %.loopexit361
  %493 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.1309, double noundef 0.000000e+00)
  br i1 %493, label %494, label %.loopexit357

494:                                              ; preds = %492
  %495 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.1301, double noundef 0.000000e+00)
  br i1 %495, label %.preheader356, label %.loopexit357

.preheader356:                                    ; preds = %494
  %496 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not324485 = icmp sgt i64 %496, 0
  br i1 %.not.not324485, label %.lr.ph489, label %.loopexit357

.lr.ph489:                                        ; preds = %.preheader356
  %497 = getelementptr inbounds i8, ptr %10, i64 56
  %498 = getelementptr inbounds i8, ptr %14, i64 56
  %499 = getelementptr inbounds i8, ptr %13, i64 56
  br label %500

500:                                              ; preds = %.lr.ph489, %._crit_edge479
  %.7291486 = phi i64 [ 0, %.lr.ph489 ], [ %551, %._crit_edge479 ]
  %501 = load ptr, ptr %497, align 8, !tbaa !18
  %502 = getelementptr inbounds double, ptr %501, i64 %.7291486
  %503 = load double, ptr %502, align 8, !tbaa !19
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %0, double noundef %503, double noundef %.1305, double noundef %.1297, ptr noundef nonnull %14, ptr noundef %7)
  %504 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not332477 = icmp sgt i64 %504, 0
  br i1 %.not.not332477, label %.preheader355.lr.ph, label %._crit_edge479

.preheader355.lr.ph:                              ; preds = %500
  %505 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not333474 = icmp sgt i64 %505, 0
  br i1 %.not.not333474, label %.preheader355.lr.ph.split.us, label %._crit_edge479

.preheader355.lr.ph.split.us:                     ; preds = %.preheader355.lr.ph
  %506 = load i64, ptr %29, align 8, !tbaa !17
  %.not.not334470.us = icmp sgt i64 %506, 0
  br i1 %.not.not334470.us, label %.preheader355.lr.ph.split.us.split.us, label %._crit_edge479

.preheader355.lr.ph.split.us.split.us:            ; preds = %.preheader355.lr.ph.split.us
  %507 = load i64, ptr %18, align 8, !tbaa !14
  %xtraiter631 = and i64 %506, 3
  %508 = icmp ult i64 %506, 4
  %unroll_iter634 = and i64 %506, 9223372036854775804
  %lcmp.mod633.not = icmp eq i64 %xtraiter631, 0
  br label %.preheader355.us.us

.preheader355.us.us:                              ; preds = %._crit_edge476.split.us.us.us, %.preheader355.lr.ph.split.us.split.us
  %.5275478.us.us = phi i64 [ 0, %.preheader355.lr.ph.split.us.split.us ], [ %550, %._crit_edge476.split.us.us.us ]
  %509 = mul nuw nsw i64 %505, %.5275478.us.us
  br label %.preheader354.us.us.us

.preheader354.us.us.us:                           ; preds = %._crit_edge473.us.us.us, %.preheader355.us.us
  %.6283475.us.us.us = phi i64 [ 0, %.preheader355.us.us ], [ %549, %._crit_edge473.us.us.us ]
  %510 = add nuw nsw i64 %509, %.6283475.us.us.us
  %511 = mul nsw i64 %507, %510
  %512 = add nsw i64 %511, %.7291486
  %513 = mul nsw i64 %512, %506
  br i1 %508, label %._crit_edge473.us.us.us.unr-lcssa, label %.preheader354.us.us.us.new

.preheader354.us.us.us.new:                       ; preds = %.preheader354.us.us.us, %.preheader354.us.us.us.new
  %.5471.us.us.us = phi i64 [ %541, %.preheader354.us.us.us.new ], [ 0, %.preheader354.us.us.us ]
  %niter635 = phi i64 [ %niter635.next.3, %.preheader354.us.us.us.new ], [ 0, %.preheader354.us.us.us ]
  %514 = load ptr, ptr %498, align 8, !tbaa !18
  %515 = getelementptr inbounds double, ptr %514, i64 %.5471.us.us.us
  %516 = load double, ptr %515, align 8, !tbaa !19
  %517 = load ptr, ptr %499, align 8, !tbaa !18
  %518 = getelementptr double, ptr %517, i64 %513
  %519 = getelementptr double, ptr %518, i64 %.5471.us.us.us
  store double %516, ptr %519, align 8, !tbaa !19
  %520 = or disjoint i64 %.5471.us.us.us, 1
  %521 = load ptr, ptr %498, align 8, !tbaa !18
  %522 = getelementptr inbounds double, ptr %521, i64 %520
  %523 = load double, ptr %522, align 8, !tbaa !19
  %524 = load ptr, ptr %499, align 8, !tbaa !18
  %525 = getelementptr double, ptr %524, i64 %513
  %526 = getelementptr double, ptr %525, i64 %520
  store double %523, ptr %526, align 8, !tbaa !19
  %527 = or disjoint i64 %.5471.us.us.us, 2
  %528 = load ptr, ptr %498, align 8, !tbaa !18
  %529 = getelementptr inbounds double, ptr %528, i64 %527
  %530 = load double, ptr %529, align 8, !tbaa !19
  %531 = load ptr, ptr %499, align 8, !tbaa !18
  %532 = getelementptr double, ptr %531, i64 %513
  %533 = getelementptr double, ptr %532, i64 %527
  store double %530, ptr %533, align 8, !tbaa !19
  %534 = or disjoint i64 %.5471.us.us.us, 3
  %535 = load ptr, ptr %498, align 8, !tbaa !18
  %536 = getelementptr inbounds double, ptr %535, i64 %534
  %537 = load double, ptr %536, align 8, !tbaa !19
  %538 = load ptr, ptr %499, align 8, !tbaa !18
  %539 = getelementptr double, ptr %538, i64 %513
  %540 = getelementptr double, ptr %539, i64 %534
  store double %537, ptr %540, align 8, !tbaa !19
  %541 = add nuw nsw i64 %.5471.us.us.us, 4
  %niter635.next.3 = add i64 %niter635, 4
  %niter635.ncmp.3 = icmp eq i64 %niter635.next.3, %unroll_iter634
  br i1 %niter635.ncmp.3, label %._crit_edge473.us.us.us.unr-lcssa, label %.preheader354.us.us.us.new, !llvm.loop !55

._crit_edge473.us.us.us.unr-lcssa:                ; preds = %.preheader354.us.us.us.new, %.preheader354.us.us.us
  %.5471.us.us.us.unr = phi i64 [ 0, %.preheader354.us.us.us ], [ %541, %.preheader354.us.us.us.new ]
  br i1 %lcmp.mod633.not, label %._crit_edge473.us.us.us, label %.epil.preheader630

.epil.preheader630:                               ; preds = %._crit_edge473.us.us.us.unr-lcssa, %.epil.preheader630
  %.5471.us.us.us.epil = phi i64 [ %548, %.epil.preheader630 ], [ %.5471.us.us.us.unr, %._crit_edge473.us.us.us.unr-lcssa ]
  %epil.iter632 = phi i64 [ %epil.iter632.next, %.epil.preheader630 ], [ 0, %._crit_edge473.us.us.us.unr-lcssa ]
  %542 = load ptr, ptr %498, align 8, !tbaa !18
  %543 = getelementptr inbounds double, ptr %542, i64 %.5471.us.us.us.epil
  %544 = load double, ptr %543, align 8, !tbaa !19
  %545 = load ptr, ptr %499, align 8, !tbaa !18
  %546 = getelementptr double, ptr %545, i64 %513
  %547 = getelementptr double, ptr %546, i64 %.5471.us.us.us.epil
  store double %544, ptr %547, align 8, !tbaa !19
  %548 = add nuw nsw i64 %.5471.us.us.us.epil, 1
  %epil.iter632.next = add i64 %epil.iter632, 1
  %epil.iter632.cmp.not = icmp eq i64 %epil.iter632.next, %xtraiter631
  br i1 %epil.iter632.cmp.not, label %._crit_edge473.us.us.us, label %.epil.preheader630, !llvm.loop !56

._crit_edge473.us.us.us:                          ; preds = %.epil.preheader630, %._crit_edge473.us.us.us.unr-lcssa
  %549 = add nuw nsw i64 %.6283475.us.us.us, 1
  %exitcond560.not = icmp eq i64 %549, %505
  br i1 %exitcond560.not, label %._crit_edge476.split.us.us.us, label %.preheader354.us.us.us, !llvm.loop !57

._crit_edge476.split.us.us.us:                    ; preds = %._crit_edge473.us.us.us
  %550 = add nuw nsw i64 %.5275478.us.us, 1
  %exitcond561.not = icmp eq i64 %550, %504
  br i1 %exitcond561.not, label %._crit_edge479, label %.preheader355.us.us, !llvm.loop !58

._crit_edge479:                                   ; preds = %._crit_edge476.split.us.us.us, %.preheader355.lr.ph.split.us, %.preheader355.lr.ph, %500
  %551 = add nuw nsw i64 %.7291486, 1
  %552 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not324 = icmp slt i64 %551, %552
  br i1 %.not.not324, label %500, label %.loopexit357, !llvm.loop !59

.loopexit357:                                     ; preds = %._crit_edge479, %.preheader356, %494, %492, %.loopexit361
  %.2310 = phi double [ %.1309, %494 ], [ %.1309, %492 ], [ %.1309, %.loopexit361 ], [ 1.000000e+00, %.preheader356 ], [ 1.000000e+00, %._crit_edge479 ]
  %.2306 = phi double [ %.1305, %494 ], [ %.1305, %492 ], [ %.1305, %.loopexit361 ], [ 0.000000e+00, %.preheader356 ], [ 0.000000e+00, %._crit_edge479 ]
  %.2302 = phi double [ %.1301, %494 ], [ %.1301, %492 ], [ %.1301, %.loopexit361 ], [ 1.000000e+00, %.preheader356 ], [ 1.000000e+00, %._crit_edge479 ]
  %.2298 = phi double [ %.1297, %494 ], [ %.1297, %492 ], [ %.1297, %.loopexit361 ], [ 0.000000e+00, %.preheader356 ], [ 0.000000e+00, %._crit_edge479 ]
  %553 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.2294, double noundef 0.000000e+00)
  br i1 %553, label %554, label %.loopexit

554:                                              ; preds = %.loopexit357
  %555 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.2310, double noundef 0.000000e+00)
  br i1 %555, label %556, label %.loopexit

556:                                              ; preds = %554
  %557 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %.2302, double noundef 0.000000e+00)
  br i1 %557, label %558, label %.loopexit

558:                                              ; preds = %556
  call void @_ZN11alglib_impl13spline3dcalcvEPNS_19spline3dinterpolantEdddPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef nonnull %0, double noundef %.2314, double noundef %.2306, double noundef %.2298, ptr noundef nonnull %14, ptr noundef %7)
  %559 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not325505 = icmp sgt i64 %559, 0
  br i1 %.not.not325505, label %.preheader353.lr.ph, label %.loopexit

.preheader353.lr.ph:                              ; preds = %558
  %560 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not329497 = icmp sgt i64 %560, 0
  %561 = getelementptr inbounds i8, ptr %14, i64 56
  %562 = getelementptr inbounds i8, ptr %13, i64 56
  br i1 %.not.not329497, label %.preheader353.lr.ph.split.us, label %.loopexit

.preheader353.lr.ph.split.us:                     ; preds = %.preheader353.lr.ph
  %563 = load i64, ptr %18, align 8, !tbaa !14
  %.not.not330494.us = icmp sgt i64 %563, 0
  br i1 %.not.not330494.us, label %.preheader353.lr.ph.split.us.split.us, label %.preheader350

.preheader353.lr.ph.split.us.split.us:            ; preds = %.preheader353.lr.ph.split.us
  %564 = load i64, ptr %29, align 8, !tbaa !17
  %.not.not331490.us.us.us = icmp sgt i64 %564, 0
  %xtraiter637 = and i64 %564, 3
  %565 = icmp ult i64 %564, 4
  %unroll_iter640 = and i64 %564, 9223372036854775804
  %lcmp.mod639.not = icmp eq i64 %xtraiter637, 0
  br label %.preheader353.us.us

.preheader353.us.us:                              ; preds = %._crit_edge499.split.us.us.us, %.preheader353.lr.ph.split.us.split.us
  %.6276506.us.us = phi i64 [ 0, %.preheader353.lr.ph.split.us.split.us ], [ %567, %._crit_edge499.split.us.us.us ]
  %566 = mul nuw nsw i64 %560, %.6276506.us.us
  br i1 %.not.not331490.us.us.us, label %.preheader352.us.us.us.us, label %._crit_edge499.split.us.us.us

._crit_edge499.split.us.us.us:                    ; preds = %._crit_edge496.split.us.us.us.us.us, %.preheader353.us.us
  %567 = add nuw nsw i64 %.6276506.us.us, 1
  %exitcond565.not = icmp eq i64 %567, %559
  br i1 %exitcond565.not, label %.loopexit, label %.preheader353.us.us, !llvm.loop !60

.preheader352.us.us.us.us:                        ; preds = %.preheader353.us.us, %._crit_edge496.split.us.us.us.us.us
  %.7498.us.us.us.us = phi i64 [ %608, %._crit_edge496.split.us.us.us.us.us ], [ 0, %.preheader353.us.us ]
  %568 = add nuw nsw i64 %566, %.7498.us.us.us.us
  %569 = mul nuw nsw i64 %563, %568
  br label %.preheader351.us.us.us.us.us

.preheader351.us.us.us.us.us:                     ; preds = %._crit_edge493.us.us.us.us.us, %.preheader352.us.us.us.us
  %.8495.us.us.us.us.us = phi i64 [ 0, %.preheader352.us.us.us.us ], [ %607, %._crit_edge493.us.us.us.us.us ]
  %570 = add nuw nsw i64 %569, %.8495.us.us.us.us.us
  %571 = mul nuw nsw i64 %564, %570
  br i1 %565, label %._crit_edge493.us.us.us.us.us.unr-lcssa, label %.preheader351.us.us.us.us.us.new

.preheader351.us.us.us.us.us.new:                 ; preds = %.preheader351.us.us.us.us.us, %.preheader351.us.us.us.us.us.new
  %.6491.us.us.us.us.us = phi i64 [ %599, %.preheader351.us.us.us.us.us.new ], [ 0, %.preheader351.us.us.us.us.us ]
  %niter641 = phi i64 [ %niter641.next.3, %.preheader351.us.us.us.us.us.new ], [ 0, %.preheader351.us.us.us.us.us ]
  %572 = load ptr, ptr %561, align 8, !tbaa !18
  %573 = getelementptr inbounds double, ptr %572, i64 %.6491.us.us.us.us.us
  %574 = load double, ptr %573, align 8, !tbaa !19
  %575 = load ptr, ptr %562, align 8, !tbaa !18
  %576 = getelementptr double, ptr %575, i64 %571
  %577 = getelementptr double, ptr %576, i64 %.6491.us.us.us.us.us
  store double %574, ptr %577, align 8, !tbaa !19
  %578 = or disjoint i64 %.6491.us.us.us.us.us, 1
  %579 = load ptr, ptr %561, align 8, !tbaa !18
  %580 = getelementptr inbounds double, ptr %579, i64 %578
  %581 = load double, ptr %580, align 8, !tbaa !19
  %582 = load ptr, ptr %562, align 8, !tbaa !18
  %583 = getelementptr double, ptr %582, i64 %571
  %584 = getelementptr double, ptr %583, i64 %578
  store double %581, ptr %584, align 8, !tbaa !19
  %585 = or disjoint i64 %.6491.us.us.us.us.us, 2
  %586 = load ptr, ptr %561, align 8, !tbaa !18
  %587 = getelementptr inbounds double, ptr %586, i64 %585
  %588 = load double, ptr %587, align 8, !tbaa !19
  %589 = load ptr, ptr %562, align 8, !tbaa !18
  %590 = getelementptr double, ptr %589, i64 %571
  %591 = getelementptr double, ptr %590, i64 %585
  store double %588, ptr %591, align 8, !tbaa !19
  %592 = or disjoint i64 %.6491.us.us.us.us.us, 3
  %593 = load ptr, ptr %561, align 8, !tbaa !18
  %594 = getelementptr inbounds double, ptr %593, i64 %592
  %595 = load double, ptr %594, align 8, !tbaa !19
  %596 = load ptr, ptr %562, align 8, !tbaa !18
  %597 = getelementptr double, ptr %596, i64 %571
  %598 = getelementptr double, ptr %597, i64 %592
  store double %595, ptr %598, align 8, !tbaa !19
  %599 = add nuw nsw i64 %.6491.us.us.us.us.us, 4
  %niter641.next.3 = add i64 %niter641, 4
  %niter641.ncmp.3 = icmp eq i64 %niter641.next.3, %unroll_iter640
  br i1 %niter641.ncmp.3, label %._crit_edge493.us.us.us.us.us.unr-lcssa, label %.preheader351.us.us.us.us.us.new, !llvm.loop !61

._crit_edge493.us.us.us.us.us.unr-lcssa:          ; preds = %.preheader351.us.us.us.us.us.new, %.preheader351.us.us.us.us.us
  %.6491.us.us.us.us.us.unr = phi i64 [ 0, %.preheader351.us.us.us.us.us ], [ %599, %.preheader351.us.us.us.us.us.new ]
  br i1 %lcmp.mod639.not, label %._crit_edge493.us.us.us.us.us, label %.epil.preheader636

.epil.preheader636:                               ; preds = %._crit_edge493.us.us.us.us.us.unr-lcssa, %.epil.preheader636
  %.6491.us.us.us.us.us.epil = phi i64 [ %606, %.epil.preheader636 ], [ %.6491.us.us.us.us.us.unr, %._crit_edge493.us.us.us.us.us.unr-lcssa ]
  %epil.iter638 = phi i64 [ %epil.iter638.next, %.epil.preheader636 ], [ 0, %._crit_edge493.us.us.us.us.us.unr-lcssa ]
  %600 = load ptr, ptr %561, align 8, !tbaa !18
  %601 = getelementptr inbounds double, ptr %600, i64 %.6491.us.us.us.us.us.epil
  %602 = load double, ptr %601, align 8, !tbaa !19
  %603 = load ptr, ptr %562, align 8, !tbaa !18
  %604 = getelementptr double, ptr %603, i64 %571
  %605 = getelementptr double, ptr %604, i64 %.6491.us.us.us.us.us.epil
  store double %602, ptr %605, align 8, !tbaa !19
  %606 = add nuw nsw i64 %.6491.us.us.us.us.us.epil, 1
  %epil.iter638.next = add i64 %epil.iter638, 1
  %epil.iter638.cmp.not = icmp eq i64 %epil.iter638.next, %xtraiter637
  br i1 %epil.iter638.cmp.not, label %._crit_edge493.us.us.us.us.us, label %.epil.preheader636, !llvm.loop !62

._crit_edge493.us.us.us.us.us:                    ; preds = %.epil.preheader636, %._crit_edge493.us.us.us.us.us.unr-lcssa
  %607 = add nuw nsw i64 %.8495.us.us.us.us.us, 1
  %exitcond563.not = icmp eq i64 %607, %563
  br i1 %exitcond563.not, label %._crit_edge496.split.us.us.us.us.us, label %.preheader351.us.us.us.us.us, !llvm.loop !63

._crit_edge496.split.us.us.us.us.us:              ; preds = %._crit_edge493.us.us.us.us.us
  %608 = add nuw nsw i64 %.7498.us.us.us.us, 1
  %exitcond564.not = icmp eq i64 %608, %560
  br i1 %exitcond564.not, label %._crit_edge499.split.us.us.us, label %.preheader352.us.us.us.us, !llvm.loop !64

.loopexit:                                        ; preds = %._crit_edge499.split.us.us.us, %.preheader353.lr.ph, %558, %556, %554, %.loopexit357
  %.3315.ph = phi double [ 0.000000e+00, %.preheader353.lr.ph ], [ 0.000000e+00, %558 ], [ %.2314, %.loopexit357 ], [ %.2314, %554 ], [ %.2314, %556 ], [ 0.000000e+00, %._crit_edge499.split.us.us.us ]
  %.3311.ph = phi double [ 1.000000e+00, %.preheader353.lr.ph ], [ 1.000000e+00, %558 ], [ %.2310, %.loopexit357 ], [ %.2310, %554 ], [ %.2310, %556 ], [ 1.000000e+00, %._crit_edge499.split.us.us.us ]
  %.3307.ph = phi double [ 0.000000e+00, %.preheader353.lr.ph ], [ 0.000000e+00, %558 ], [ %.2306, %.loopexit357 ], [ %.2306, %554 ], [ %.2306, %556 ], [ 0.000000e+00, %._crit_edge499.split.us.us.us ]
  %.3303.ph = phi double [ 1.000000e+00, %.preheader353.lr.ph ], [ 1.000000e+00, %558 ], [ %.2302, %.loopexit357 ], [ %.2302, %554 ], [ %.2302, %556 ], [ 1.000000e+00, %._crit_edge499.split.us.us.us ]
  %.3299.ph = phi double [ 0.000000e+00, %.preheader353.lr.ph ], [ 0.000000e+00, %558 ], [ %.2298, %.loopexit357 ], [ %.2298, %554 ], [ %.2298, %556 ], [ 0.000000e+00, %._crit_edge499.split.us.us.us ]
  %.3295.ph = phi double [ 1.000000e+00, %.preheader353.lr.ph ], [ 1.000000e+00, %558 ], [ %.2294, %.loopexit357 ], [ %.2294, %554 ], [ %.2294, %556 ], [ 1.000000e+00, %._crit_edge499.split.us.us.us ]
  %.pr = load i64, ptr %18, align 8, !tbaa !14
  %.not.not326517 = icmp sgt i64 %.pr, 0
  br i1 %.not.not326517, label %.lr.ph520, label %.preheader350

.lr.ph520:                                        ; preds = %.loopexit
  %609 = getelementptr inbounds i8, ptr %10, i64 56
  %xtraiter643 = and i64 %.pr, 1
  %610 = icmp eq i64 %.pr, 1
  br i1 %610, label %.preheader350.loopexit.unr-lcssa, label %.lr.ph520.new

.lr.ph520.new:                                    ; preds = %.lr.ph520
  %unroll_iter646 = and i64 %.pr, 9223372036854775806
  br label %620

.preheader350.loopexit.unr-lcssa:                 ; preds = %620, %.lr.ph520
  %.9518.unr = phi i64 [ 0, %.lr.ph520 ], [ %632, %620 ]
  %lcmp.mod645.not = icmp eq i64 %xtraiter643, 0
  br i1 %lcmp.mod645.not, label %.preheader350, label %.preheader350.loopexit.epilog-lcssa

.preheader350.loopexit.epilog-lcssa:              ; preds = %.preheader350.loopexit.unr-lcssa
  %611 = load ptr, ptr %609, align 8, !tbaa !18
  %612 = getelementptr inbounds double, ptr %611, i64 %.9518.unr
  %613 = load double, ptr %612, align 8, !tbaa !19
  %614 = fsub double %613, %.3315.ph
  %615 = fdiv double %614, %.3295.ph
  store double %615, ptr %612, align 8, !tbaa !19
  br label %.preheader350

.preheader350:                                    ; preds = %.preheader350.loopexit.epilog-lcssa, %.preheader350.loopexit.unr-lcssa, %.preheader353.lr.ph.split.us, %.loopexit
  %.3299581 = phi double [ %.3299.ph, %.loopexit ], [ 0.000000e+00, %.preheader353.lr.ph.split.us ], [ %.3299.ph, %.preheader350.loopexit.unr-lcssa ], [ %.3299.ph, %.preheader350.loopexit.epilog-lcssa ]
  %.3303580 = phi double [ %.3303.ph, %.loopexit ], [ 1.000000e+00, %.preheader353.lr.ph.split.us ], [ %.3303.ph, %.preheader350.loopexit.unr-lcssa ], [ %.3303.ph, %.preheader350.loopexit.epilog-lcssa ]
  %.3307579 = phi double [ %.3307.ph, %.loopexit ], [ 0.000000e+00, %.preheader353.lr.ph.split.us ], [ %.3307.ph, %.preheader350.loopexit.unr-lcssa ], [ %.3307.ph, %.preheader350.loopexit.epilog-lcssa ]
  %.3311578 = phi double [ %.3311.ph, %.loopexit ], [ 1.000000e+00, %.preheader353.lr.ph.split.us ], [ %.3311.ph, %.preheader350.loopexit.unr-lcssa ], [ %.3311.ph, %.preheader350.loopexit.epilog-lcssa ]
  %616 = phi i64 [ %.pr, %.loopexit ], [ %563, %.preheader353.lr.ph.split.us ], [ %.pr, %.preheader350.loopexit.unr-lcssa ], [ %.pr, %.preheader350.loopexit.epilog-lcssa ]
  %617 = load i64, ptr %20, align 8, !tbaa !15
  %.not.not327521 = icmp sgt i64 %617, 0
  br i1 %.not.not327521, label %.lr.ph523, label %.preheader

.lr.ph523:                                        ; preds = %.preheader350
  %618 = getelementptr inbounds i8, ptr %11, i64 56
  %xtraiter649 = and i64 %617, 1
  %619 = icmp eq i64 %617, 1
  br i1 %619, label %.preheader.loopexit.unr-lcssa, label %.lr.ph523.new

.lr.ph523.new:                                    ; preds = %.lr.ph523
  %unroll_iter652 = and i64 %617, 9223372036854775806
  br label %641

620:                                              ; preds = %620, %.lr.ph520.new
  %.9518 = phi i64 [ 0, %.lr.ph520.new ], [ %632, %620 ]
  %niter647 = phi i64 [ 0, %.lr.ph520.new ], [ %niter647.next.1, %620 ]
  %621 = load ptr, ptr %609, align 8, !tbaa !18
  %622 = getelementptr inbounds double, ptr %621, i64 %.9518
  %623 = load double, ptr %622, align 8, !tbaa !19
  %624 = fsub double %623, %.3315.ph
  %625 = fdiv double %624, %.3295.ph
  store double %625, ptr %622, align 8, !tbaa !19
  %626 = or disjoint i64 %.9518, 1
  %627 = load ptr, ptr %609, align 8, !tbaa !18
  %628 = getelementptr inbounds double, ptr %627, i64 %626
  %629 = load double, ptr %628, align 8, !tbaa !19
  %630 = fsub double %629, %.3315.ph
  %631 = fdiv double %630, %.3295.ph
  store double %631, ptr %628, align 8, !tbaa !19
  %632 = add nuw nsw i64 %.9518, 2
  %niter647.next.1 = add i64 %niter647, 2
  %niter647.ncmp.1 = icmp eq i64 %niter647.next.1, %unroll_iter646
  br i1 %niter647.ncmp.1, label %.preheader350.loopexit.unr-lcssa, label %620, !llvm.loop !65

.preheader.loopexit.unr-lcssa:                    ; preds = %641, %.lr.ph523
  %.10522.unr = phi i64 [ 0, %.lr.ph523 ], [ %653, %641 ]
  %lcmp.mod651.not = icmp eq i64 %xtraiter649, 0
  br i1 %lcmp.mod651.not, label %.preheader, label %.preheader.loopexit.epilog-lcssa

.preheader.loopexit.epilog-lcssa:                 ; preds = %.preheader.loopexit.unr-lcssa
  %633 = load ptr, ptr %618, align 8, !tbaa !18
  %634 = getelementptr inbounds double, ptr %633, i64 %.10522.unr
  %635 = load double, ptr %634, align 8, !tbaa !19
  %636 = fsub double %635, %.3307579
  %637 = fdiv double %636, %.3311578
  store double %637, ptr %634, align 8, !tbaa !19
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.epilog-lcssa, %.preheader.loopexit.unr-lcssa, %.preheader350
  %638 = load i64, ptr %22, align 8, !tbaa !16
  %.not.not328525 = icmp sgt i64 %638, 0
  br i1 %.not.not328525, label %.lr.ph527, label %._crit_edge528

.lr.ph527:                                        ; preds = %.preheader
  %639 = getelementptr inbounds i8, ptr %12, i64 56
  %xtraiter655 = and i64 %638, 1
  %640 = icmp eq i64 %638, 1
  br i1 %640, label %._crit_edge528.loopexit.unr-lcssa, label %.lr.ph527.new

.lr.ph527.new:                                    ; preds = %.lr.ph527
  %unroll_iter658 = and i64 %638, 9223372036854775806
  br label %654

641:                                              ; preds = %641, %.lr.ph523.new
  %.10522 = phi i64 [ 0, %.lr.ph523.new ], [ %653, %641 ]
  %niter653 = phi i64 [ 0, %.lr.ph523.new ], [ %niter653.next.1, %641 ]
  %642 = load ptr, ptr %618, align 8, !tbaa !18
  %643 = getelementptr inbounds double, ptr %642, i64 %.10522
  %644 = load double, ptr %643, align 8, !tbaa !19
  %645 = fsub double %644, %.3307579
  %646 = fdiv double %645, %.3311578
  store double %646, ptr %643, align 8, !tbaa !19
  %647 = or disjoint i64 %.10522, 1
  %648 = load ptr, ptr %618, align 8, !tbaa !18
  %649 = getelementptr inbounds double, ptr %648, i64 %647
  %650 = load double, ptr %649, align 8, !tbaa !19
  %651 = fsub double %650, %.3307579
  %652 = fdiv double %651, %.3311578
  store double %652, ptr %649, align 8, !tbaa !19
  %653 = add nuw nsw i64 %.10522, 2
  %niter653.next.1 = add i64 %niter653, 2
  %niter653.ncmp.1 = icmp eq i64 %niter653.next.1, %unroll_iter652
  br i1 %niter653.ncmp.1, label %.preheader.loopexit.unr-lcssa, label %641, !llvm.loop !66

654:                                              ; preds = %654, %.lr.ph527.new
  %.11526 = phi i64 [ 0, %.lr.ph527.new ], [ %666, %654 ]
  %niter659 = phi i64 [ 0, %.lr.ph527.new ], [ %niter659.next.1, %654 ]
  %655 = load ptr, ptr %639, align 8, !tbaa !18
  %656 = getelementptr inbounds double, ptr %655, i64 %.11526
  %657 = load double, ptr %656, align 8, !tbaa !19
  %658 = fsub double %657, %.3299581
  %659 = fdiv double %658, %.3303580
  store double %659, ptr %656, align 8, !tbaa !19
  %660 = or disjoint i64 %.11526, 1
  %661 = load ptr, ptr %639, align 8, !tbaa !18
  %662 = getelementptr inbounds double, ptr %661, i64 %660
  %663 = load double, ptr %662, align 8, !tbaa !19
  %664 = fsub double %663, %.3299581
  %665 = fdiv double %664, %.3303580
  store double %665, ptr %662, align 8, !tbaa !19
  %666 = add nuw nsw i64 %.11526, 2
  %niter659.next.1 = add i64 %niter659, 2
  %niter659.ncmp.1 = icmp eq i64 %niter659.next.1, %unroll_iter658
  br i1 %niter659.ncmp.1, label %._crit_edge528.loopexit.unr-lcssa, label %654, !llvm.loop !67

._crit_edge528.loopexit.unr-lcssa:                ; preds = %654, %.lr.ph527
  %.11526.unr = phi i64 [ 0, %.lr.ph527 ], [ %666, %654 ]
  %lcmp.mod657.not = icmp eq i64 %xtraiter655, 0
  br i1 %lcmp.mod657.not, label %._crit_edge528, label %._crit_edge528.loopexit.epilog-lcssa

._crit_edge528.loopexit.epilog-lcssa:             ; preds = %._crit_edge528.loopexit.unr-lcssa
  %667 = load ptr, ptr %639, align 8, !tbaa !18
  %668 = getelementptr inbounds double, ptr %667, i64 %.11526.unr
  %669 = load double, ptr %668, align 8, !tbaa !19
  %670 = fsub double %669, %.3299581
  %671 = fdiv double %670, %.3303580
  store double %671, ptr %668, align 8, !tbaa !19
  br label %._crit_edge528

._crit_edge528:                                   ; preds = %._crit_edge528.loopexit.epilog-lcssa, %._crit_edge528.loopexit.unr-lcssa, %.preheader
  %672 = load i64, ptr %15, align 8, !tbaa !5
  %673 = icmp eq i64 %672, -1
  br i1 %673, label %674, label %676

674:                                              ; preds = %._crit_edge528
  %675 = load i64, ptr %29, align 8, !tbaa !17
  call void @_ZN11alglib_impl23spline3dbuildtrilinearvEPNS_9ae_vectorElS1_lS1_lS1_lPNS_19spline3dinterpolantEPNS_8ae_stateE(ptr noundef nonnull %10, i64 noundef %616, ptr noundef nonnull %11, i64 noundef %617, ptr noundef nonnull %12, i64 noundef %638, ptr noundef nonnull %13, i64 noundef %675, ptr noundef nonnull %0, ptr noundef %7)
  br label %676

676:                                              ; preds = %674, %._crit_edge528
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %7)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %14) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %13) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %12) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %9) #4
  ret void
}

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef, double 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 noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef, double noundef) local_unnamed_addr #2

declare noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef, i64 noundef) local_unnamed_addr #2

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

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

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 8}
!6 = !{!"_ZTSN11alglib_impl19spline3dinterpolantE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !10, i64 48, !10, i64 112, !10, i64 176, !10, i64 240}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !11, i64 16, !12, i64 24, !8, i64 56}
!11 = !{!"bool", !8, i64 0}
!12 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!6, !7, i64 16}
!15 = !{!6, !7, i64 24}
!16 = !{!6, !7, i64 32}
!17 = !{!6, !7, i64 40}
!18 = !{!8, !8, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"double", !8, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.unroll.disable"}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !22}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !24}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24, !34}
!34 = !{!"llvm.loop.unswitch.partial.disable"}
!35 = distinct !{!35, !24}
!36 = distinct !{!36, !22}
!37 = distinct !{!37, !24}
!38 = distinct !{!38, !24}
!39 = distinct !{!39, !24, !34}
!40 = distinct !{!40, !24}
!41 = distinct !{!41, !22}
!42 = distinct !{!42, !24}
!43 = distinct !{!43, !24}
!44 = distinct !{!44, !24, !34}
!45 = distinct !{!45, !24}
!46 = distinct !{!46, !22}
!47 = distinct !{!47, !24}
!48 = distinct !{!48, !24}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !22}
!52 = distinct !{!52, !24}
!53 = distinct !{!53, !24}
!54 = distinct !{!54, !24}
!55 = distinct !{!55, !24}
!56 = distinct !{!56, !22}
!57 = distinct !{!57, !24}
!58 = distinct !{!58, !24}
!59 = distinct !{!59, !24}
!60 = distinct !{!60, !24}
!61 = distinct !{!61, !24}
!62 = distinct !{!62, !22}
!63 = distinct !{!63, !24}
!64 = distinct !{!64, !24}
!65 = distinct !{!65, !24}
!66 = distinct !{!66, !24}
!67 = distinct !{!67, !24}


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