; LLVM IR from Dimandragon/non-parametric-dsp :: alglib-cpp/src (interpolation)

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

%"struct.alglib_impl::ae_complex" = type { double, double }
%"struct.alglib_impl::biharmonicpanel" = type { double, double, double, double, double, 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", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", double, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%union.anon.0 = type { ptr }
%"struct.alglib_impl::biharmonicevaluator" = type { i64, i64, %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector" }

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl11bhpanelevalEPKNS_15biharmonicpanelEPKNS_19biharmonicevaluatorEdddPNS_9ae_vectorEbPdPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, double noundef %2, double noundef %3, double noundef %4, ptr noundef %5, i1 noundef zeroext %6, ptr noundef %7, ptr noundef %8) #3 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i8, align 1
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca %"struct.alglib_impl::ae_complex", align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  %31 = alloca double, align 8
  %32 = alloca double, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca double, align 8
  %36 = alloca double, align 8
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca %"struct.alglib_impl::ae_complex", align 8
  %42 = alloca %"struct.alglib_impl::ae_complex", align 8
  %43 = alloca %"struct.alglib_impl::ae_complex", align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  %46 = alloca double, align 8
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store double %2, ptr %12, align 8, !tbaa !9
  store double %3, ptr %13, align 8, !tbaa !9
  store double %4, ptr %14, align 8, !tbaa !9
  store ptr %5, ptr %15, align 8, !tbaa !5
  %47 = zext i1 %6 to i8
  store i8 %47, ptr %16, align 1, !tbaa !11
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #4
  %48 = load ptr, ptr %17, align 8, !tbaa !5
  store double 0.000000e+00, ptr %48, align 8, !tbaa !9
  %49 = load ptr, ptr %10, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %49, i32 0, i32 5
  %51 = load i64, ptr %50, align 8, !tbaa !13
  store i64 %51, ptr %22, align 8, !tbaa !18
  %52 = load ptr, ptr %15, align 8, !tbaa !5
  %53 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %52, i32 0, i32 0
  %54 = load i64, ptr %53, align 8, !tbaa !19
  %55 = load i64, ptr %22, align 8, !tbaa !18
  %56 = icmp slt i64 %54, %55
  br i1 %56, label %57, label %61

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

61:                                               ; preds = %57, %9
  %62 = load double, ptr %12, align 8, !tbaa !9
  %63 = load ptr, ptr %10, align 8, !tbaa !5
  %64 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %63, i32 0, i32 0
  %65 = load double, ptr %64, align 8, !tbaa !20
  %66 = fsub double %62, %65
  store double %66, ptr %12, align 8, !tbaa !9
  %67 = load double, ptr %13, align 8, !tbaa !9
  %68 = load ptr, ptr %10, align 8, !tbaa !5
  %69 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %68, i32 0, i32 1
  %70 = load double, ptr %69, align 8, !tbaa !21
  %71 = fsub double %67, %70
  store double %71, ptr %13, align 8, !tbaa !9
  %72 = load double, ptr %14, align 8, !tbaa !9
  %73 = load ptr, ptr %10, align 8, !tbaa !5
  %74 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %73, i32 0, i32 2
  %75 = load double, ptr %74, align 8, !tbaa !22
  %76 = fsub double %72, %75
  store double %76, ptr %14, align 8, !tbaa !9
  %77 = load double, ptr %12, align 8, !tbaa !9
  %78 = load double, ptr %12, align 8, !tbaa !9
  %79 = load double, ptr %13, align 8, !tbaa !9
  %80 = load double, ptr %13, align 8, !tbaa !9
  %81 = fmul double %79, %80
  %82 = call double @llvm.fmuladd.f64(double %77, double %78, double %81)
  %83 = load double, ptr %14, align 8, !tbaa !9
  %84 = load double, ptr %14, align 8, !tbaa !9
  %85 = call double @llvm.fmuladd.f64(double %83, double %84, double %82)
  %86 = fadd double %85, 1.000000e-300
  store double %86, ptr %27, align 8, !tbaa !9
  %87 = load double, ptr %27, align 8, !tbaa !9
  %88 = load ptr, ptr %18, align 8, !tbaa !5
  %89 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %87, ptr noundef %88)
  store double %89, ptr %26, align 8, !tbaa !9
  %90 = load double, ptr %12, align 8, !tbaa !9
  %91 = load double, ptr %12, align 8, !tbaa !9
  %92 = load double, ptr %13, align 8, !tbaa !9
  %93 = load double, ptr %13, align 8, !tbaa !9
  %94 = fmul double %92, %93
  %95 = call double @llvm.fmuladd.f64(double %90, double %91, double %94)
  %96 = fadd double %95, 1.000000e-300
  %97 = load ptr, ptr %18, align 8, !tbaa !5
  %98 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %96, ptr noundef %97)
  store double %98, ptr %28, align 8, !tbaa !9
  %99 = load double, ptr %14, align 8, !tbaa !9
  %100 = load double, ptr %26, align 8, !tbaa !9
  %101 = fdiv double %99, %100
  store double %101, ptr %40, align 8, !tbaa !9
  %102 = load double, ptr %28, align 8, !tbaa !9
  %103 = load double, ptr %26, align 8, !tbaa !9
  %104 = fdiv double %102, %103
  store double %104, ptr %37, align 8, !tbaa !9
  %105 = load double, ptr %12, align 8, !tbaa !9
  %106 = load double, ptr %28, align 8, !tbaa !9
  %107 = fdiv double %105, %106
  %108 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %41, i32 0, i32 0
  store double %107, ptr %108, align 8, !tbaa !23
  %109 = load double, ptr %13, align 8, !tbaa !9
  %110 = load double, ptr %28, align 8, !tbaa !9
  %111 = fdiv double %109, %110
  %112 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %41, i32 0, i32 1
  store double %111, ptr %112, align 8, !tbaa !25
  %113 = load double, ptr %12, align 8, !tbaa !9
  %114 = load double, ptr %13, align 8, !tbaa !9
  %115 = load double, ptr %14, align 8, !tbaa !9
  %116 = load i64, ptr %22, align 8, !tbaa !18
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  %118 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %117, i32 0, i32 6
  %119 = load i64, ptr %118, align 8, !tbaa !26
  %120 = load ptr, ptr %11, align 8, !tbaa !5
  %121 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %120, i32 0, i32 9
  %122 = load ptr, ptr %11, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %122, i32 0, i32 10
  %124 = load ptr, ptr %11, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %124, i32 0, i32 12
  %126 = load ptr, ptr %11, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %126, i32 0, i32 8
  %128 = load ptr, ptr %10, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %128, i32 0, i32 16
  %130 = load ptr, ptr %15, align 8, !tbaa !5
  %131 = load ptr, ptr %18, align 8, !tbaa !5
  %132 = call noundef zeroext i1 @_ZN11alglib_impl36rbfv3farfields_bhpanelevalfastkernelEdddllPKNS_9ae_vectorES2_S2_S2_S2_PS0_PdPNS_8ae_stateE(double noundef %113, double noundef %114, double noundef %115, i64 noundef %116, i64 noundef %119, ptr noundef %121, ptr noundef %123, ptr noundef %125, ptr noundef %127, ptr noundef %129, ptr noundef %130, ptr noundef %39, ptr noundef %131)
  br i1 %132, label %360, label %133

133:                                              ; preds = %61
  store double 1.000000e+00, ptr %38, align 8, !tbaa !9
  store i64 0, ptr %20, align 8, !tbaa !18
  br label %134

134:                                              ; preds = %145, %133
  %135 = load i64, ptr %20, align 8, !tbaa !18
  %136 = load i64, ptr %22, align 8, !tbaa !18
  %137 = sub nsw i64 %136, 1
  %138 = icmp sle i64 %135, %137
  br i1 %138, label %139, label %148

139:                                              ; preds = %134
  %140 = load ptr, ptr %15, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %140, i32 0, i32 4
  %142 = load ptr, ptr %141, align 8, !tbaa !27
  %143 = load i64, ptr %20, align 8, !tbaa !18
  %144 = getelementptr inbounds double, ptr %142, i64 %143
  store double 0.000000e+00, ptr %144, align 8, !tbaa !9
  br label %145

145:                                              ; preds = %139
  %146 = load i64, ptr %20, align 8, !tbaa !18
  %147 = add nsw i64 %146, 1
  store i64 %147, ptr %20, align 8, !tbaa !18
  br label %134, !llvm.loop !28

148:                                              ; preds = %134
  %149 = load double, ptr %26, align 8, !tbaa !9
  %150 = fdiv double 1.000000e+00, %149
  store double %150, ptr %31, align 8, !tbaa !9
  %151 = load double, ptr %31, align 8, !tbaa !9
  store double %151, ptr %32, align 8, !tbaa !9
  %152 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 0
  store double 1.000000e+00, ptr %152, align 8, !tbaa !23
  %153 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 1
  store double 0.000000e+00, ptr %153, align 8, !tbaa !25
  %154 = load ptr, ptr %10, align 8, !tbaa !5
  %155 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %154, i32 0, i32 9
  %156 = load i64, ptr %155, align 8, !tbaa !30
  %157 = load ptr, ptr %10, align 8, !tbaa !5
  %158 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %157, i32 0, i32 9
  %159 = load i64, ptr %158, align 8, !tbaa !30
  %160 = mul nsw i64 %156, %159
  store i64 %160, ptr %23, align 8, !tbaa !18
  store i64 0, ptr %19, align 8, !tbaa !18
  br label %161

161:                                              ; preds = %353, %148
  %162 = load i64, ptr %19, align 8, !tbaa !18
  %163 = load ptr, ptr %10, align 8, !tbaa !5
  %164 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %163, i32 0, i32 6
  %165 = load i64, ptr %164, align 8, !tbaa !26
  %166 = icmp sle i64 %162, %165
  br i1 %166, label %167, label %356

167:                                              ; preds = %161
  %168 = load double, ptr %32, align 8, !tbaa !9
  store double %168, ptr %33, align 8, !tbaa !9
  store double 0.000000e+00, ptr %36, align 8, !tbaa !9
  %169 = load double, ptr %38, align 8, !tbaa !9
  %170 = load ptr, ptr %11, align 8, !tbaa !5
  %171 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %170, i32 0, i32 11
  %172 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %171, i32 0, i32 4
  %173 = load ptr, ptr %172, align 8, !tbaa !27
  %174 = load i64, ptr %19, align 8, !tbaa !18
  %175 = getelementptr inbounds double, ptr %173, i64 %174
  %176 = load double, ptr %175, align 8, !tbaa !9
  %177 = fmul double %169, %176
  store double %177, ptr %35, align 8, !tbaa !9
  %178 = load i64, ptr %19, align 8, !tbaa !18
  store i64 %178, ptr %21, align 8, !tbaa !18
  br label %179

179:                                              ; preds = %318, %167
  %180 = load i64, ptr %21, align 8, !tbaa !18
  %181 = load ptr, ptr %10, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %181, i32 0, i32 6
  %183 = load i64, ptr %182, align 8, !tbaa !26
  %184 = icmp sle i64 %180, %183
  br i1 %184, label %185, label %321

185:                                              ; preds = %179
  %186 = load i64, ptr %21, align 8, !tbaa !18
  %187 = load ptr, ptr %10, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %187, i32 0, i32 9
  %189 = load i64, ptr %188, align 8, !tbaa !30
  %190 = mul nsw i64 %186, %189
  %191 = load i64, ptr %19, align 8, !tbaa !18
  %192 = add nsw i64 %190, %191
  store i64 %192, ptr %44, align 8, !tbaa !18
  %193 = load i64, ptr %21, align 8, !tbaa !18
  %194 = load i64, ptr %19, align 8, !tbaa !18
  %195 = icmp sgt i64 %193, %194
  br i1 %195, label %196, label %219

196:                                              ; preds = %185
  %197 = load double, ptr %35, align 8, !tbaa !9
  %198 = load double, ptr %40, align 8, !tbaa !9
  %199 = fmul double %197, %198
  %200 = load ptr, ptr %11, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %200, i32 0, i32 9
  %202 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %201, i32 0, i32 4
  %203 = load ptr, ptr %202, align 8, !tbaa !27
  %204 = load i64, ptr %44, align 8, !tbaa !18
  %205 = getelementptr inbounds double, ptr %203, i64 %204
  %206 = load double, ptr %205, align 8, !tbaa !9
  %207 = load double, ptr %36, align 8, !tbaa !9
  %208 = load ptr, ptr %11, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %208, i32 0, i32 10
  %210 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %209, i32 0, i32 4
  %211 = load ptr, ptr %210, align 8, !tbaa !27
  %212 = load i64, ptr %44, align 8, !tbaa !18
  %213 = getelementptr inbounds double, ptr %211, i64 %212
  %214 = load double, ptr %213, align 8, !tbaa !9
  %215 = fmul double %207, %214
  %216 = call double @llvm.fmuladd.f64(double %199, double %206, double %215)
  store double %216, ptr %34, align 8, !tbaa !9
  %217 = load double, ptr %35, align 8, !tbaa !9
  store double %217, ptr %36, align 8, !tbaa !9
  %218 = load double, ptr %34, align 8, !tbaa !9
  store double %218, ptr %35, align 8, !tbaa !9
  br label %219

219:                                              ; preds = %196, %185
  %220 = load double, ptr %35, align 8, !tbaa !9
  %221 = load ptr, ptr %11, align 8, !tbaa !5
  %222 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %221, i32 0, i32 8
  %223 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %222, i32 0, i32 4
  %224 = load ptr, ptr %223, align 8, !tbaa !27
  %225 = load i64, ptr %44, align 8, !tbaa !18
  %226 = getelementptr inbounds double, ptr %224, i64 %225
  %227 = load double, ptr %226, align 8, !tbaa !9
  %228 = fmul double %220, %227
  store double %228, ptr %25, align 8, !tbaa !9
  %229 = load double, ptr %25, align 8, !tbaa !9
  %230 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 0
  %231 = load double, ptr %230, align 8, !tbaa !23
  %232 = fmul double %229, %231
  %233 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %43, i32 0, i32 0
  store double %232, ptr %233, align 8, !tbaa !23
  %234 = load double, ptr %25, align 8, !tbaa !9
  %235 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 1
  %236 = load double, ptr %235, align 8, !tbaa !25
  %237 = fmul double %234, %236
  %238 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %43, i32 0, i32 1
  store double %237, ptr %238, align 8, !tbaa !25
  %239 = load i64, ptr %44, align 8, !tbaa !18
  store i64 %239, ptr %45, align 8, !tbaa !18
  store i64 0, ptr %20, align 8, !tbaa !18
  br label %240

240:                                              ; preds = %311, %219
  %241 = load i64, ptr %20, align 8, !tbaa !18
  %242 = load i64, ptr %22, align 8, !tbaa !18
  %243 = sub nsw i64 %242, 1
  %244 = icmp sle i64 %241, %243
  br i1 %244, label %245, label %314

245:                                              ; preds = %240
  %246 = load double, ptr %27, align 8, !tbaa !9
  %247 = load ptr, ptr %10, align 8, !tbaa !5
  %248 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %247, i32 0, i32 13
  %249 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %248, i32 0, i32 4
  %250 = load ptr, ptr %249, align 8, !tbaa !27
  %251 = load i64, ptr %45, align 8, !tbaa !18
  %252 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %250, i64 %251
  %253 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %252, i32 0, i32 0
  %254 = load double, ptr %253, align 8, !tbaa !23
  %255 = load ptr, ptr %10, align 8, !tbaa !5
  %256 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %255, i32 0, i32 14
  %257 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %256, i32 0, i32 4
  %258 = load ptr, ptr %257, align 8, !tbaa !27
  %259 = load i64, ptr %45, align 8, !tbaa !18
  %260 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %258, i64 %259
  %261 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %260, i32 0, i32 0
  %262 = load double, ptr %261, align 8, !tbaa !23
  %263 = call double @llvm.fmuladd.f64(double %246, double %254, double %262)
  %264 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %24, i32 0, i32 0
  store double %263, ptr %264, align 8, !tbaa !23
  %265 = load double, ptr %27, align 8, !tbaa !9
  %266 = load ptr, ptr %10, align 8, !tbaa !5
  %267 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %266, i32 0, i32 13
  %268 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %267, i32 0, i32 4
  %269 = load ptr, ptr %268, align 8, !tbaa !27
  %270 = load i64, ptr %45, align 8, !tbaa !18
  %271 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %269, i64 %270
  %272 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %271, i32 0, i32 1
  %273 = load double, ptr %272, align 8, !tbaa !25
  %274 = load ptr, ptr %10, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %274, i32 0, i32 14
  %276 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %275, i32 0, i32 4
  %277 = load ptr, ptr %276, align 8, !tbaa !27
  %278 = load i64, ptr %45, align 8, !tbaa !18
  %279 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %277, i64 %278
  %280 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %279, i32 0, i32 1
  %281 = load double, ptr %280, align 8, !tbaa !25
  %282 = call double @llvm.fmuladd.f64(double %265, double %273, double %281)
  %283 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %24, i32 0, i32 1
  store double %282, ptr %283, align 8, !tbaa !25
  %284 = load ptr, ptr %15, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %284, i32 0, i32 4
  %286 = load ptr, ptr %285, align 8, !tbaa !27
  %287 = load i64, ptr %20, align 8, !tbaa !18
  %288 = getelementptr inbounds double, ptr %286, i64 %287
  %289 = load double, ptr %288, align 8, !tbaa !9
  %290 = load double, ptr %33, align 8, !tbaa !9
  %291 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %24, i32 0, i32 0
  %292 = load double, ptr %291, align 8, !tbaa !23
  %293 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %43, i32 0, i32 0
  %294 = load double, ptr %293, align 8, !tbaa !23
  %295 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %24, i32 0, i32 1
  %296 = load double, ptr %295, align 8, !tbaa !25
  %297 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %43, i32 0, i32 1
  %298 = load double, ptr %297, align 8, !tbaa !25
  %299 = fmul double %296, %298
  %300 = fneg double %299
  %301 = call double @llvm.fmuladd.f64(double %292, double %294, double %300)
  %302 = call double @llvm.fmuladd.f64(double %290, double %301, double %289)
  %303 = load ptr, ptr %15, align 8, !tbaa !5
  %304 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %303, i32 0, i32 4
  %305 = load ptr, ptr %304, align 8, !tbaa !27
  %306 = load i64, ptr %20, align 8, !tbaa !18
  %307 = getelementptr inbounds double, ptr %305, i64 %306
  store double %302, ptr %307, align 8, !tbaa !9
  %308 = load i64, ptr %45, align 8, !tbaa !18
  %309 = load i64, ptr %23, align 8, !tbaa !18
  %310 = add nsw i64 %308, %309
  store i64 %310, ptr %45, align 8, !tbaa !18
  br label %311

311:                                              ; preds = %245
  %312 = load i64, ptr %20, align 8, !tbaa !18
  %313 = add nsw i64 %312, 1
  store i64 %313, ptr %20, align 8, !tbaa !18
  br label %240, !llvm.loop !31

314:                                              ; preds = %240
  %315 = load double, ptr %33, align 8, !tbaa !9
  %316 = load double, ptr %31, align 8, !tbaa !9
  %317 = fmul double %315, %316
  store double %317, ptr %33, align 8, !tbaa !9
  br label %318

318:                                              ; preds = %314
  %319 = load i64, ptr %21, align 8, !tbaa !18
  %320 = add nsw i64 %319, 1
  store i64 %320, ptr %21, align 8, !tbaa !18
  br label %179, !llvm.loop !32

321:                                              ; preds = %179
  %322 = load double, ptr %38, align 8, !tbaa !9
  %323 = load double, ptr %37, align 8, !tbaa !9
  %324 = fmul double %322, %323
  store double %324, ptr %38, align 8, !tbaa !9
  %325 = load double, ptr %32, align 8, !tbaa !9
  %326 = load double, ptr %31, align 8, !tbaa !9
  %327 = fmul double %325, %326
  store double %327, ptr %32, align 8, !tbaa !9
  %328 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 0
  %329 = load double, ptr %328, align 8, !tbaa !23
  %330 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %41, i32 0, i32 0
  %331 = load double, ptr %330, align 8, !tbaa !23
  %332 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 1
  %333 = load double, ptr %332, align 8, !tbaa !25
  %334 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %41, i32 0, i32 1
  %335 = load double, ptr %334, align 8, !tbaa !25
  %336 = fmul double %333, %335
  %337 = fneg double %336
  %338 = call double @llvm.fmuladd.f64(double %329, double %331, double %337)
  store double %338, ptr %29, align 8, !tbaa !9
  %339 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 0
  %340 = load double, ptr %339, align 8, !tbaa !23
  %341 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %41, i32 0, i32 1
  %342 = load double, ptr %341, align 8, !tbaa !25
  %343 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 1
  %344 = load double, ptr %343, align 8, !tbaa !25
  %345 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %41, i32 0, i32 0
  %346 = load double, ptr %345, align 8, !tbaa !23
  %347 = fmul double %344, %346
  %348 = call double @llvm.fmuladd.f64(double %340, double %342, double %347)
  store double %348, ptr %30, align 8, !tbaa !9
  %349 = load double, ptr %29, align 8, !tbaa !9
  %350 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 0
  store double %349, ptr %350, align 8, !tbaa !23
  %351 = load double, ptr %30, align 8, !tbaa !9
  %352 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %42, i32 0, i32 1
  store double %351, ptr %352, align 8, !tbaa !25
  br label %353

353:                                              ; preds = %321
  %354 = load i64, ptr %19, align 8, !tbaa !18
  %355 = add nsw i64 %354, 1
  store i64 %355, ptr %19, align 8, !tbaa !18
  br label %161, !llvm.loop !33

356:                                              ; preds = %161
  %357 = load double, ptr %26, align 8, !tbaa !9
  %358 = load double, ptr %32, align 8, !tbaa !9
  %359 = fmul double %357, %358
  store double %359, ptr %39, align 8, !tbaa !9
  br label %360

360:                                              ; preds = %356, %61
  store i64 0, ptr %20, align 8, !tbaa !18
  br label %361

361:                                              ; preds = %379, %360
  %362 = load i64, ptr %20, align 8, !tbaa !18
  %363 = load i64, ptr %22, align 8, !tbaa !18
  %364 = sub nsw i64 %363, 1
  %365 = icmp sle i64 %362, %364
  br i1 %365, label %366, label %382

366:                                              ; preds = %361
  %367 = load ptr, ptr %15, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %367, i32 0, i32 4
  %369 = load ptr, ptr %368, align 8, !tbaa !27
  %370 = load i64, ptr %20, align 8, !tbaa !18
  %371 = getelementptr inbounds double, ptr %369, i64 %370
  %372 = load double, ptr %371, align 8, !tbaa !9
  %373 = fneg double %372
  %374 = load ptr, ptr %15, align 8, !tbaa !5
  %375 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %374, i32 0, i32 4
  %376 = load ptr, ptr %375, align 8, !tbaa !27
  %377 = load i64, ptr %20, align 8, !tbaa !18
  %378 = getelementptr inbounds double, ptr %376, i64 %377
  store double %373, ptr %378, align 8, !tbaa !9
  br label %379

379:                                              ; preds = %366
  %380 = load i64, ptr %20, align 8, !tbaa !18
  %381 = add nsw i64 %380, 1
  store i64 %381, ptr %20, align 8, !tbaa !18
  br label %361, !llvm.loop !34

382:                                              ; preds = %361
  %383 = load ptr, ptr %17, align 8, !tbaa !5
  store double 0.000000e+00, ptr %383, align 8, !tbaa !9
  %384 = load i8, ptr %16, align 1, !tbaa !11, !range !35, !noundef !36
  %385 = trunc i8 %384 to i1
  br i1 %385, label %386, label %451

386:                                              ; preds = %382
  store double 0.000000e+00, ptr %46, align 8, !tbaa !9
  store i64 0, ptr %20, align 8, !tbaa !18
  br label %387

387:                                              ; preds = %404, %386
  %388 = load i64, ptr %20, align 8, !tbaa !18
  %389 = load i64, ptr %22, align 8, !tbaa !18
  %390 = sub nsw i64 %389, 1
  %391 = icmp sle i64 %388, %390
  br i1 %391, label %392, label %407

392:                                              ; preds = %387
  %393 = load double, ptr %46, align 8, !tbaa !9
  %394 = load ptr, ptr %15, align 8, !tbaa !5
  %395 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %394, i32 0, i32 4
  %396 = load ptr, ptr %395, align 8, !tbaa !27
  %397 = load i64, ptr %20, align 8, !tbaa !18
  %398 = getelementptr inbounds double, ptr %396, i64 %397
  %399 = load double, ptr %398, align 8, !tbaa !9
  %400 = load ptr, ptr %18, align 8, !tbaa !5
  %401 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %399, ptr noundef %400)
  %402 = load ptr, ptr %18, align 8, !tbaa !5
  %403 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %393, double noundef %401, ptr noundef %402)
  store double %403, ptr %46, align 8, !tbaa !9
  br label %404

404:                                              ; preds = %392
  %405 = load i64, ptr %20, align 8, !tbaa !18
  %406 = add nsw i64 %405, 1
  store i64 %406, ptr %20, align 8, !tbaa !18
  br label %387, !llvm.loop !37

407:                                              ; preds = %387
  %408 = load ptr, ptr %10, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %408, i32 0, i32 17
  %410 = load double, ptr %409, align 8, !tbaa !38
  %411 = load double, ptr %27, align 8, !tbaa !9
  %412 = fmul double %410, %411
  %413 = fmul double %412, 2.000000e+00
  %414 = load ptr, ptr %10, align 8, !tbaa !5
  %415 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %414, i32 0, i32 15
  %416 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %415, i32 0, i32 4
  %417 = load ptr, ptr %416, align 8, !tbaa !27
  %418 = load ptr, ptr %10, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %418, i32 0, i32 6
  %420 = load i64, ptr %419, align 8, !tbaa !26
  %421 = add nsw i64 %420, 1
  %422 = getelementptr inbounds double, ptr %417, i64 %421
  %423 = load double, ptr %422, align 8, !tbaa !9
  %424 = fmul double %413, %423
  %425 = load double, ptr %39, align 8, !tbaa !9
  %426 = fmul double %424, %425
  %427 = load ptr, ptr %10, align 8, !tbaa !5
  %428 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %427, i32 0, i32 6
  %429 = load i64, ptr %428, align 8, !tbaa !26
  %430 = mul nsw i64 2, %429
  %431 = add nsw i64 %430, 1
  %432 = sitofp i64 %431 to double
  %433 = load double, ptr %26, align 8, !tbaa !9
  %434 = load ptr, ptr %10, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %434, i32 0, i32 3
  %436 = load double, ptr %435, align 8, !tbaa !39
  %437 = fsub double %433, %436
  %438 = fmul double %432, %437
  %439 = fdiv double %426, %438
  %440 = load ptr, ptr %17, align 8, !tbaa !5
  store double %439, ptr %440, align 8, !tbaa !9
  %441 = load ptr, ptr %17, align 8, !tbaa !5
  %442 = load double, ptr %441, align 8, !tbaa !9
  %443 = load ptr, ptr %10, align 8, !tbaa !5
  %444 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %443, i32 0, i32 17
  %445 = load double, ptr %444, align 8, !tbaa !38
  %446 = load double, ptr %26, align 8, !tbaa !9
  %447 = load double, ptr %46, align 8, !tbaa !9
  %448 = call double @llvm.fmuladd.f64(double %445, double %446, double %447)
  %449 = call double @llvm.fmuladd.f64(double 5.000000e-14, double %448, double %442)
  %450 = load ptr, ptr %17, align 8, !tbaa !5
  store double %449, ptr %450, align 8, !tbaa !9
  br label %451

451:                                              ; preds = %407, %382
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  ret void
}

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !15, i64 40}
!14 = !{!"_ZTSN11alglib_impl15biharmonicpanelE", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !15, i64 40, !15, i64 48, !15, i64 56, !15, i64 64, !15, i64 72, !15, i64 80, !16, i64 88, !16, i64 152, !16, i64 216, !16, i64 280, !16, i64 344, !16, i64 408, !10, i64 472, !16, i64 480, !16, i64 544}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTSN11alglib_impl9ae_vectorE", !15, i64 0, !15, i64 8, !12, i64 16, !17, i64 24, !7, i64 56}
!17 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!18 = !{!15, !15, i64 0}
!19 = !{!16, !15, i64 0}
!20 = !{!14, !10, i64 0}
!21 = !{!14, !10, i64 8}
!22 = !{!14, !10, i64 16}
!23 = !{!24, !10, i64 0}
!24 = !{!"_ZTSN11alglib_impl10ae_complexE", !10, i64 0, !10, i64 8}
!25 = !{!24, !10, i64 8}
!26 = !{!14, !15, i64 48}
!27 = !{!7, !7, i64 0}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = !{!14, !15, i64 72}
!31 = distinct !{!31, !29}
!32 = distinct !{!32, !29}
!33 = distinct !{!33, !29}
!34 = distinct !{!34, !29}
!35 = !{i8 0, i8 2}
!36 = !{}
!37 = distinct !{!37, !29}
!38 = !{!14, !10, i64 472}
!39 = !{!14, !10, i64 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_complex" = type { double, double }

; 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 nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl11bhpanelevalEPKNS_15biharmonicpanelEPKNS_19biharmonicevaluatorEdddPNS_9ae_vectorEbPdPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, double noundef %2, double noundef %3, double noundef %4, ptr noundef %5, i1 noundef zeroext %6, ptr nocapture noundef writeonly %7, ptr noundef %8) local_unnamed_addr #3 {
  %10 = alloca double, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #5
  store double 0.000000e+00, ptr %7, align 8, !tbaa !5
  %11 = getelementptr inbounds i8, ptr %0, i64 40
  %12 = load i64, ptr %11, align 8, !tbaa !9
  %13 = load i64, ptr %5, align 8, !tbaa !16
  %14 = icmp slt i64 %13, %12
  br i1 %14, label %15, label %16

15:                                               ; preds = %9
  tail call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %5, i64 noundef %12, ptr noundef %8)
  br label %16

16:                                               ; preds = %15, %9
  %17 = load <2 x double>, ptr %0, align 8, !tbaa !5
  %18 = insertelement <2 x double> poison, double %2, i64 0
  %19 = insertelement <2 x double> %18, double %3, i64 1
  %20 = fsub <2 x double> %19, %17
  %21 = getelementptr inbounds i8, ptr %0, i64 16
  %22 = load double, ptr %21, align 8, !tbaa !17
  %23 = fsub double %4, %22
  %24 = extractelement <2 x double> %20, i64 1
  %25 = fmul double %24, %24
  %26 = extractelement <2 x double> %20, i64 0
  %27 = tail call double @llvm.fmuladd.f64(double %26, double %26, double %25)
  %28 = tail call double @llvm.fmuladd.f64(double %23, double %23, double %27)
  %29 = fadd double %28, 1.000000e-300
  %30 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %29, ptr noundef %8)
  %31 = fadd double %27, 1.000000e-300
  %32 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %31, ptr noundef %8)
  %33 = fdiv double %23, %30
  %34 = fdiv double %32, %30
  %35 = insertelement <2 x double> poison, double %32, i64 0
  %36 = shufflevector <2 x double> %35, <2 x double> poison, <2 x i32> zeroinitializer
  %37 = fdiv <2 x double> %20, %36
  %38 = getelementptr inbounds i8, ptr %0, i64 48
  %39 = load i64, ptr %38, align 8, !tbaa !18
  %40 = getelementptr inbounds i8, ptr %1, i64 464
  %41 = getelementptr inbounds i8, ptr %1, i64 528
  %42 = getelementptr inbounds i8, ptr %1, i64 656
  %43 = getelementptr inbounds i8, ptr %1, i64 400
  %44 = getelementptr inbounds i8, ptr %0, i64 408
  %45 = call noundef zeroext i1 @_ZN11alglib_impl36rbfv3farfields_bhpanelevalfastkernelEdddllPKNS_9ae_vectorES2_S2_S2_S2_PS0_PdPNS_8ae_stateE(double noundef %26, double noundef %24, double noundef %23, i64 noundef %12, i64 noundef %39, ptr noundef nonnull %40, ptr noundef nonnull %41, ptr noundef nonnull %42, ptr noundef nonnull %43, ptr noundef nonnull %44, ptr noundef nonnull %5, ptr noundef nonnull %10, ptr noundef %8)
  br i1 %45, label %153, label %.preheader173

.preheader173:                                    ; preds = %16
  %.not.not174 = icmp sgt i64 %12, 0
  br i1 %.not.not174, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %.preheader173
  %46 = getelementptr inbounds i8, ptr %5, i64 56
  %xtraiter = and i64 %12, 3
  %47 = icmp ult i64 %12, 4
  br i1 %47, label %._crit_edge.unr-lcssa, label %.lr.ph.new

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

48:                                               ; preds = %48, %.lr.ph.new
  %.0157175 = phi i64 [ 0, %.lr.ph.new ], [ %60, %48 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %48 ]
  %49 = load ptr, ptr %46, align 8, !tbaa !19
  %50 = getelementptr inbounds double, ptr %49, i64 %.0157175
  store double 0.000000e+00, ptr %50, align 8, !tbaa !5
  %51 = or disjoint i64 %.0157175, 1
  %52 = load ptr, ptr %46, align 8, !tbaa !19
  %53 = getelementptr inbounds double, ptr %52, i64 %51
  store double 0.000000e+00, ptr %53, align 8, !tbaa !5
  %54 = or disjoint i64 %.0157175, 2
  %55 = load ptr, ptr %46, align 8, !tbaa !19
  %56 = getelementptr inbounds double, ptr %55, i64 %54
  store double 0.000000e+00, ptr %56, align 8, !tbaa !5
  %57 = or disjoint i64 %.0157175, 3
  %58 = load ptr, ptr %46, align 8, !tbaa !19
  %59 = getelementptr inbounds double, ptr %58, i64 %57
  store double 0.000000e+00, ptr %59, align 8, !tbaa !5
  %60 = add nuw nsw i64 %.0157175, 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 %._crit_edge.unr-lcssa, label %48, !llvm.loop !20

._crit_edge.unr-lcssa:                            ; preds = %48, %.lr.ph
  %.0157175.unr = phi i64 [ 0, %.lr.ph ], [ %60, %48 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.unr-lcssa, %.epil.preheader
  %.0157175.epil = phi i64 [ %63, %.epil.preheader ], [ %.0157175.unr, %._crit_edge.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge.unr-lcssa ]
  %61 = load ptr, ptr %46, align 8, !tbaa !19
  %62 = getelementptr inbounds double, ptr %61, i64 %.0157175.epil
  store double 0.000000e+00, ptr %62, align 8, !tbaa !5
  %63 = add nuw nsw i64 %.0157175.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 %._crit_edge, label %.epil.preheader, !llvm.loop !22

._crit_edge:                                      ; preds = %.epil.preheader, %._crit_edge.unr-lcssa
  %64 = fdiv double 1.000000e+00, %30
  %65 = getelementptr inbounds i8, ptr %0, i64 72
  %66 = load i64, ptr %65, align 8, !tbaa !24
  %67 = mul nsw i64 %66, %66
  %68 = load i64, ptr %38, align 8, !tbaa !18
  %.not188 = icmp slt i64 %68, 0
  br i1 %.not188, label %._crit_edge196, label %.lr.ph195

._crit_edge.thread:                               ; preds = %.preheader173
  %69 = fdiv double 1.000000e+00, %30
  %70 = load i64, ptr %38, align 8, !tbaa !18
  %.not188217 = icmp slt i64 %70, 0
  br i1 %.not188217, label %._crit_edge196, label %.lr.ph195.split

.lr.ph195:                                        ; preds = %._crit_edge
  %71 = getelementptr inbounds i8, ptr %1, i64 648
  %72 = getelementptr inbounds i8, ptr %1, i64 520
  %73 = getelementptr inbounds i8, ptr %1, i64 584
  %74 = getelementptr inbounds i8, ptr %1, i64 456
  %75 = getelementptr inbounds i8, ptr %0, i64 272
  %76 = getelementptr inbounds i8, ptr %0, i64 336
  %77 = getelementptr inbounds i8, ptr %5, i64 56
  br i1 %.not.not174, label %.split.us.us, label %.lr.ph195.split

.split.us.us:                                     ; preds = %.lr.ph195, %.split187.us.us
  %.0156191.us = phi i64 [ %138, %.split187.us.us ], [ 0, %.lr.ph195 ]
  %.0159190.us = phi double [ %129, %.split187.us.us ], [ 1.000000e+00, %.lr.ph195 ]
  %.0160189.us = phi double [ %130, %.split187.us.us ], [ %64, %.lr.ph195 ]
  %78 = phi <2 x double> [ %137, %.split187.us.us ], [ <double 1.000000e+00, double 0.000000e+00>, %.lr.ph195 ]
  %79 = load ptr, ptr %71, align 8, !tbaa !19
  %80 = getelementptr inbounds double, ptr %79, i64 %.0156191.us
  %81 = load double, ptr %80, align 8, !tbaa !5
  %82 = fmul double %.0159190.us, %81
  %83 = extractelement <2 x double> %78, i64 0
  %84 = extractelement <2 x double> %78, i64 1
  br label %85

85:                                               ; preds = %._crit_edge181.us.us, %.split.us.us
  %.0158185.us.us = phi i64 [ %.0156191.us, %.split.us.us ], [ %128, %._crit_edge181.us.us ]
  %.0161184.us.us = phi double [ 0.000000e+00, %.split.us.us ], [ %.1162.us.us, %._crit_edge181.us.us ]
  %.0163183.us.us = phi double [ %82, %.split.us.us ], [ %.1164.us.us, %._crit_edge181.us.us ]
  %.0165182.us.us = phi double [ %.0160189.us, %.split.us.us ], [ %127, %._crit_edge181.us.us ]
  %86 = mul nsw i64 %.0158185.us.us, %66
  %87 = add nsw i64 %86, %.0156191.us
  %88 = icmp ugt i64 %.0158185.us.us, %.0156191.us
  br i1 %88, label %89, label %.lr.ph180.us.us

89:                                               ; preds = %85
  %90 = fmul double %33, %.0163183.us.us
  %91 = load ptr, ptr %72, align 8, !tbaa !19
  %92 = getelementptr inbounds double, ptr %91, i64 %87
  %93 = load double, ptr %92, align 8, !tbaa !5
  %94 = load ptr, ptr %73, align 8, !tbaa !19
  %95 = getelementptr inbounds double, ptr %94, i64 %87
  %96 = load double, ptr %95, align 8, !tbaa !5
  %97 = fmul double %.0161184.us.us, %96
  %98 = call double @llvm.fmuladd.f64(double %90, double %93, double %97)
  br label %.lr.ph180.us.us

.lr.ph180.us.us:                                  ; preds = %89, %85
  %.1164.us.us = phi double [ %98, %89 ], [ %.0163183.us.us, %85 ]
  %.1162.us.us = phi double [ %.0163183.us.us, %89 ], [ %.0161184.us.us, %85 ]
  %99 = load ptr, ptr %74, align 8, !tbaa !19
  %100 = getelementptr inbounds double, ptr %99, i64 %87
  %101 = load double, ptr %100, align 8, !tbaa !5
  %102 = fmul double %.1164.us.us, %101
  %103 = fmul double %83, %102
  %104 = fmul double %84, %102
  br label %105

105:                                              ; preds = %105, %.lr.ph180.us.us
  %.0155178.us.us = phi i64 [ %87, %.lr.ph180.us.us ], [ %125, %105 ]
  %.1177.us.us = phi i64 [ 0, %.lr.ph180.us.us ], [ %126, %105 ]
  %106 = load ptr, ptr %75, align 8, !tbaa !19
  %107 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %106, i64 %.0155178.us.us
  %108 = load double, ptr %107, align 8, !tbaa !25
  %109 = load ptr, ptr %76, align 8, !tbaa !19
  %110 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %109, i64 %.0155178.us.us
  %111 = load double, ptr %110, align 8, !tbaa !25
  %112 = call double @llvm.fmuladd.f64(double %29, double %108, double %111)
  %113 = getelementptr inbounds i8, ptr %107, i64 8
  %114 = load double, ptr %113, align 8, !tbaa !27
  %115 = getelementptr inbounds i8, ptr %110, i64 8
  %116 = load double, ptr %115, align 8, !tbaa !27
  %117 = call double @llvm.fmuladd.f64(double %29, double %114, double %116)
  %118 = load ptr, ptr %77, align 8, !tbaa !19
  %119 = getelementptr inbounds double, ptr %118, i64 %.1177.us.us
  %120 = load double, ptr %119, align 8, !tbaa !5
  %121 = fneg double %117
  %122 = fmul double %104, %121
  %123 = call double @llvm.fmuladd.f64(double %112, double %103, double %122)
  %124 = call double @llvm.fmuladd.f64(double %.0165182.us.us, double %123, double %120)
  store double %124, ptr %119, align 8, !tbaa !5
  %125 = add nsw i64 %.0155178.us.us, %67
  %126 = add nuw nsw i64 %.1177.us.us, 1
  %exitcond213.not = icmp eq i64 %126, %12
  br i1 %exitcond213.not, label %._crit_edge181.us.us, label %105, !llvm.loop !28

._crit_edge181.us.us:                             ; preds = %105
  %127 = fmul double %64, %.0165182.us.us
  %128 = add nuw nsw i64 %.0158185.us.us, 1
  %.not169.us.us.not = icmp slt i64 %.0158185.us.us, %68
  br i1 %.not169.us.us.not, label %85, label %.split187.us.us, !llvm.loop !29

.split187.us.us:                                  ; preds = %._crit_edge181.us.us
  %129 = fmul double %34, %.0159190.us
  %130 = fmul double %64, %.0160189.us
  %131 = shufflevector <2 x double> %78, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %132 = fneg <2 x double> %78
  %133 = shufflevector <2 x double> %131, <2 x double> %132, <2 x i32> <i32 0, i32 3>
  %134 = fmul <2 x double> %37, %133
  %135 = shufflevector <2 x double> %134, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %136 = shufflevector <2 x double> %78, <2 x double> poison, <2 x i32> zeroinitializer
  %137 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %136, <2 x double> %37, <2 x double> %135)
  %138 = add nuw i64 %.0156191.us, 1
  %exitcond214.not = icmp eq i64 %.0156191.us, %68
  br i1 %exitcond214.not, label %._crit_edge196, label %.split.us.us, !llvm.loop !30

.lr.ph195.split:                                  ; preds = %._crit_edge.thread, %.lr.ph195
  %139 = phi double [ %64, %.lr.ph195 ], [ %69, %._crit_edge.thread ]
  %140 = phi i64 [ %68, %.lr.ph195 ], [ %70, %._crit_edge.thread ]
  %141 = add nuw i64 %140, 1
  %xtraiter227 = and i64 %141, 7
  %142 = icmp ult i64 %140, 7
  br i1 %142, label %._crit_edge196.loopexit225.unr-lcssa, label %.lr.ph195.split.new

.lr.ph195.split.new:                              ; preds = %.lr.ph195.split
  %unroll_iter231 = and i64 %141, -8
  br label %.split

.split:                                           ; preds = %.split, %.lr.ph195.split.new
  %.0160189 = phi double [ %139, %.lr.ph195.split.new ], [ %150, %.split ]
  %niter232 = phi i64 [ 0, %.lr.ph195.split.new ], [ %niter232.next.7, %.split ]
  %143 = fmul double %139, %.0160189
  %144 = fmul double %139, %143
  %145 = fmul double %139, %144
  %146 = fmul double %139, %145
  %147 = fmul double %139, %146
  %148 = fmul double %139, %147
  %149 = fmul double %139, %148
  %150 = fmul double %139, %149
  %niter232.next.7 = add i64 %niter232, 8
  %niter232.ncmp.7 = icmp eq i64 %niter232.next.7, %unroll_iter231
  br i1 %niter232.ncmp.7, label %._crit_edge196.loopexit225.unr-lcssa, label %.split, !llvm.loop !30

._crit_edge196.loopexit225.unr-lcssa:             ; preds = %.split, %.lr.ph195.split
  %.lcssa226.ph = phi double [ poison, %.lr.ph195.split ], [ %150, %.split ]
  %.0160189.unr = phi double [ %139, %.lr.ph195.split ], [ %150, %.split ]
  %lcmp.mod229.not = icmp eq i64 %xtraiter227, 0
  br i1 %lcmp.mod229.not, label %._crit_edge196, label %.split.epil

.split.epil:                                      ; preds = %._crit_edge196.loopexit225.unr-lcssa, %.split.epil
  %.0160189.epil = phi double [ %151, %.split.epil ], [ %.0160189.unr, %._crit_edge196.loopexit225.unr-lcssa ]
  %epil.iter228 = phi i64 [ %epil.iter228.next, %.split.epil ], [ 0, %._crit_edge196.loopexit225.unr-lcssa ]
  %151 = fmul double %139, %.0160189.epil
  %epil.iter228.next = add i64 %epil.iter228, 1
  %epil.iter228.cmp.not = icmp eq i64 %epil.iter228.next, %xtraiter227
  br i1 %epil.iter228.cmp.not, label %._crit_edge196, label %.split.epil, !llvm.loop !31

._crit_edge196:                                   ; preds = %._crit_edge196.loopexit225.unr-lcssa, %.split.epil, %.split187.us.us, %._crit_edge.thread, %._crit_edge
  %.0160.lcssa = phi double [ %64, %._crit_edge ], [ %69, %._crit_edge.thread ], [ %130, %.split187.us.us ], [ %.lcssa226.ph, %._crit_edge196.loopexit225.unr-lcssa ], [ %151, %.split.epil ]
  %152 = fmul double %30, %.0160.lcssa
  store double %152, ptr %10, align 8, !tbaa !5
  br label %153

153:                                              ; preds = %._crit_edge196, %16
  %.not171.not197 = icmp sgt i64 %12, 0
  br i1 %.not171.not197, label %.lr.ph200, label %._crit_edge201.thread

.lr.ph200:                                        ; preds = %153
  %154 = getelementptr inbounds i8, ptr %5, i64 56
  %xtraiter234 = and i64 %12, 3
  %155 = icmp ult i64 %12, 4
  br i1 %155, label %._crit_edge201.unr-lcssa, label %.lr.ph200.new

.lr.ph200.new:                                    ; preds = %.lr.ph200
  %unroll_iter237 = and i64 %12, 9223372036854775804
  br label %156

156:                                              ; preds = %156, %.lr.ph200.new
  %.2198 = phi i64 [ 0, %.lr.ph200.new ], [ %176, %156 ]
  %niter238 = phi i64 [ 0, %.lr.ph200.new ], [ %niter238.next.3, %156 ]
  %157 = load ptr, ptr %154, align 8, !tbaa !19
  %158 = getelementptr inbounds double, ptr %157, i64 %.2198
  %159 = load double, ptr %158, align 8, !tbaa !5
  %160 = fneg double %159
  store double %160, ptr %158, align 8, !tbaa !5
  %161 = or disjoint i64 %.2198, 1
  %162 = load ptr, ptr %154, align 8, !tbaa !19
  %163 = getelementptr inbounds double, ptr %162, i64 %161
  %164 = load double, ptr %163, align 8, !tbaa !5
  %165 = fneg double %164
  store double %165, ptr %163, align 8, !tbaa !5
  %166 = or disjoint i64 %.2198, 2
  %167 = load ptr, ptr %154, align 8, !tbaa !19
  %168 = getelementptr inbounds double, ptr %167, i64 %166
  %169 = load double, ptr %168, align 8, !tbaa !5
  %170 = fneg double %169
  store double %170, ptr %168, align 8, !tbaa !5
  %171 = or disjoint i64 %.2198, 3
  %172 = load ptr, ptr %154, align 8, !tbaa !19
  %173 = getelementptr inbounds double, ptr %172, i64 %171
  %174 = load double, ptr %173, align 8, !tbaa !5
  %175 = fneg double %174
  store double %175, ptr %173, align 8, !tbaa !5
  %176 = add nuw nsw i64 %.2198, 4
  %niter238.next.3 = add i64 %niter238, 4
  %niter238.ncmp.3 = icmp eq i64 %niter238.next.3, %unroll_iter237
  br i1 %niter238.ncmp.3, label %._crit_edge201.unr-lcssa, label %156, !llvm.loop !32

._crit_edge201.unr-lcssa:                         ; preds = %156, %.lr.ph200
  %.2198.unr = phi i64 [ 0, %.lr.ph200 ], [ %176, %156 ]
  %lcmp.mod236.not = icmp eq i64 %xtraiter234, 0
  br i1 %lcmp.mod236.not, label %._crit_edge201, label %.epil.preheader233

.epil.preheader233:                               ; preds = %._crit_edge201.unr-lcssa, %.epil.preheader233
  %.2198.epil = phi i64 [ %181, %.epil.preheader233 ], [ %.2198.unr, %._crit_edge201.unr-lcssa ]
  %epil.iter235 = phi i64 [ %epil.iter235.next, %.epil.preheader233 ], [ 0, %._crit_edge201.unr-lcssa ]
  %177 = load ptr, ptr %154, align 8, !tbaa !19
  %178 = getelementptr inbounds double, ptr %177, i64 %.2198.epil
  %179 = load double, ptr %178, align 8, !tbaa !5
  %180 = fneg double %179
  store double %180, ptr %178, align 8, !tbaa !5
  %181 = add nuw nsw i64 %.2198.epil, 1
  %epil.iter235.next = add i64 %epil.iter235, 1
  %epil.iter235.cmp.not = icmp eq i64 %epil.iter235.next, %xtraiter234
  br i1 %epil.iter235.cmp.not, label %._crit_edge201, label %.epil.preheader233, !llvm.loop !33

._crit_edge201:                                   ; preds = %.epil.preheader233, %._crit_edge201.unr-lcssa
  store double 0.000000e+00, ptr %7, align 8, !tbaa !5
  br i1 %6, label %.preheader, label %214

._crit_edge201.thread:                            ; preds = %153
  store double 0.000000e+00, ptr %7, align 8, !tbaa !5
  br i1 %6, label %._crit_edge206, label %214

.preheader:                                       ; preds = %._crit_edge201
  br i1 %.not171.not197, label %.lr.ph205, label %._crit_edge206

.lr.ph205:                                        ; preds = %.preheader
  %182 = getelementptr inbounds i8, ptr %5, i64 56
  br label %183

183:                                              ; preds = %.lr.ph205, %183
  %.0204 = phi double [ 0.000000e+00, %.lr.ph205 ], [ %188, %183 ]
  %.3203 = phi i64 [ 0, %.lr.ph205 ], [ %189, %183 ]
  %184 = load ptr, ptr %182, align 8, !tbaa !19
  %185 = getelementptr inbounds double, ptr %184, i64 %.3203
  %186 = load double, ptr %185, align 8, !tbaa !5
  %187 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %186, ptr noundef %8)
  %188 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %.0204, double noundef %187, ptr noundef %8)
  %189 = add nuw nsw i64 %.3203, 1
  %exitcond216.not = icmp eq i64 %189, %12
  br i1 %exitcond216.not, label %._crit_edge206, label %183, !llvm.loop !34

._crit_edge206:                                   ; preds = %183, %._crit_edge201.thread, %.preheader
  %.0.lcssa = phi double [ 0.000000e+00, %.preheader ], [ 0.000000e+00, %._crit_edge201.thread ], [ %188, %183 ]
  %190 = getelementptr inbounds i8, ptr %0, i64 472
  %191 = load double, ptr %190, align 8, !tbaa !35
  %192 = fmul double %29, %191
  %193 = fmul double %192, 2.000000e+00
  %194 = getelementptr inbounds i8, ptr %0, i64 400
  %195 = load ptr, ptr %194, align 8, !tbaa !19
  %196 = load i64, ptr %38, align 8, !tbaa !18
  %197 = getelementptr double, ptr %195, i64 %196
  %198 = getelementptr i8, ptr %197, i64 8
  %199 = load double, ptr %198, align 8, !tbaa !5
  %200 = fmul double %193, %199
  %201 = load double, ptr %10, align 8, !tbaa !5
  %202 = fmul double %200, %201
  %203 = shl nsw i64 %196, 1
  %204 = or disjoint i64 %203, 1
  %205 = sitofp i64 %204 to double
  %206 = getelementptr inbounds i8, ptr %0, i64 24
  %207 = load double, ptr %206, align 8, !tbaa !36
  %208 = fsub double %30, %207
  %209 = fmul double %208, %205
  %210 = fdiv double %202, %209
  store double %210, ptr %7, align 8, !tbaa !5
  %211 = load double, ptr %190, align 8, !tbaa !35
  %212 = call double @llvm.fmuladd.f64(double %211, double %30, double %.0.lcssa)
  %213 = call double @llvm.fmuladd.f64(double %212, double 5.000000e-14, double %210)
  store double %213, ptr %7, align 8, !tbaa !5
  br label %214

214:                                              ; preds = %._crit_edge201.thread, %._crit_edge206, %._crit_edge201
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  ret void
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) #4

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 40}
!10 = !{!"_ZTSN11alglib_impl15biharmonicpanelE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !12, i64 88, !12, i64 152, !12, i64 216, !12, i64 280, !12, i64 344, !12, i64 408, !6, i64 472, !12, i64 480, !12, i64 544}
!11 = !{!"long", !7, i64 0}
!12 = !{!"_ZTSN11alglib_impl9ae_vectorE", !11, i64 0, !11, i64 8, !13, i64 16, !14, i64 24, !7, i64 56}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24}
!15 = !{!"any pointer", !7, i64 0}
!16 = !{!12, !11, i64 0}
!17 = !{!10, !6, i64 16}
!18 = !{!10, !11, i64 48}
!19 = !{!7, !7, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.mustprogress"}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.unroll.disable"}
!24 = !{!10, !11, i64 72}
!25 = !{!26, !6, i64 0}
!26 = !{!"_ZTSN11alglib_impl10ae_complexE", !6, i64 0, !6, i64 8}
!27 = !{!26, !6, i64 8}
!28 = distinct !{!28, !21}
!29 = distinct !{!29, !21}
!30 = distinct !{!30, !21}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !21}
!35 = !{!10, !6, i64 472}
!36 = !{!10, !6, i64 24}


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