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

@.str.720 = external hidden unnamed_addr constant [16 x i8], align 1

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

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

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

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_impl7ae_sqrtEdPNS_8ae_stateE(double noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl12bhpaneleval1EPKNS_15biharmonicpanelEPKNS_19biharmonicevaluatorEdddPdbS6_PNS_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 %"struct.alglib_impl::ae_complex", align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca 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 %"struct.alglib_impl::ae_complex", align 8
  %39 = alloca %"struct.alglib_impl::ae_complex", align 8
  %40 = alloca %"struct.alglib_impl::ae_complex", align 8
  %41 = alloca i64, 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
  %42 = zext i1 %6 to i8
  store i8 %42, 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 16, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 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 16, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 16, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  %43 = load ptr, ptr %15, align 8, !tbaa !5
  store double 0.000000e+00, ptr %43, align 8, !tbaa !9
  %44 = load ptr, ptr %17, align 8, !tbaa !5
  store double 0.000000e+00, ptr %44, align 8, !tbaa !9
  %45 = load ptr, ptr %10, align 8, !tbaa !5
  %46 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %45, i32 0, i32 5
  %47 = load i64, ptr %46, align 8, !tbaa !13
  %48 = icmp eq i64 %47, 1
  %49 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %48, ptr noundef @.str.720, ptr noundef %49)
  %50 = load double, ptr %12, align 8, !tbaa !9
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %51, i32 0, i32 0
  %53 = load double, ptr %52, align 8, !tbaa !18
  %54 = fsub double %50, %53
  store double %54, ptr %12, align 8, !tbaa !9
  %55 = load double, ptr %13, align 8, !tbaa !9
  %56 = load ptr, ptr %10, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %56, i32 0, i32 1
  %58 = load double, ptr %57, align 8, !tbaa !19
  %59 = fsub double %55, %58
  store double %59, ptr %13, align 8, !tbaa !9
  %60 = load double, ptr %14, align 8, !tbaa !9
  %61 = load ptr, ptr %10, align 8, !tbaa !5
  %62 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %61, i32 0, i32 2
  %63 = load double, ptr %62, align 8, !tbaa !20
  %64 = fsub double %60, %63
  store double %64, ptr %14, align 8, !tbaa !9
  %65 = load double, ptr %12, align 8, !tbaa !9
  %66 = load double, ptr %12, align 8, !tbaa !9
  %67 = load double, ptr %13, align 8, !tbaa !9
  %68 = load double, ptr %13, align 8, !tbaa !9
  %69 = fmul double %67, %68
  %70 = call double @llvm.fmuladd.f64(double %65, double %66, double %69)
  %71 = load double, ptr %14, align 8, !tbaa !9
  %72 = load double, ptr %14, align 8, !tbaa !9
  %73 = call double @llvm.fmuladd.f64(double %71, double %72, double %70)
  %74 = fadd double %73, 1.000000e-300
  store double %74, ptr %24, align 8, !tbaa !9
  %75 = load double, ptr %24, align 8, !tbaa !9
  %76 = load ptr, ptr %18, align 8, !tbaa !5
  %77 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %75, ptr noundef %76)
  store double %77, ptr %23, 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 %14, align 8, !tbaa !9
  %81 = load ptr, ptr %10, align 8, !tbaa !5
  %82 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %81, i32 0, i32 6
  %83 = load i64, ptr %82, align 8, !tbaa !21
  %84 = load ptr, ptr %11, align 8, !tbaa !5
  %85 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %84, i32 0, i32 9
  %86 = load ptr, ptr %11, align 8, !tbaa !5
  %87 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %86, i32 0, i32 10
  %88 = load ptr, ptr %11, align 8, !tbaa !5
  %89 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %88, i32 0, i32 12
  %90 = load ptr, ptr %11, align 8, !tbaa !5
  %91 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %90, i32 0, i32 8
  %92 = load ptr, ptr %10, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %92, i32 0, i32 16
  %94 = load ptr, ptr %15, align 8, !tbaa !5
  %95 = load ptr, ptr %18, align 8, !tbaa !5
  %96 = call noundef zeroext i1 @_ZN11alglib_impl37rbfv3farfields_bhpaneleval1fastkernelEdddlPKNS_9ae_vectorES2_S2_S2_S2_PdS3_PNS_8ae_stateE(double noundef %78, double noundef %79, double noundef %80, i64 noundef %83, ptr noundef %85, ptr noundef %87, ptr noundef %89, ptr noundef %91, ptr noundef %93, ptr noundef %94, ptr noundef %31, ptr noundef %95)
  br i1 %96, label %304, label %97

97:                                               ; preds = %9
  %98 = load double, ptr %12, align 8, !tbaa !9
  %99 = load double, ptr %12, align 8, !tbaa !9
  %100 = load double, ptr %13, align 8, !tbaa !9
  %101 = load double, ptr %13, align 8, !tbaa !9
  %102 = fmul double %100, %101
  %103 = call double @llvm.fmuladd.f64(double %98, double %99, double %102)
  %104 = fadd double %103, 1.000000e-300
  %105 = load ptr, ptr %18, align 8, !tbaa !5
  %106 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %104, ptr noundef %105)
  store double %106, ptr %25, align 8, !tbaa !9
  %107 = load double, ptr %14, align 8, !tbaa !9
  %108 = load double, ptr %23, align 8, !tbaa !9
  %109 = fdiv double %107, %108
  store double %109, ptr %37, align 8, !tbaa !9
  %110 = load double, ptr %25, align 8, !tbaa !9
  %111 = load double, ptr %23, align 8, !tbaa !9
  %112 = fdiv double %110, %111
  store double %112, ptr %35, align 8, !tbaa !9
  %113 = load double, ptr %12, align 8, !tbaa !9
  %114 = load double, ptr %25, align 8, !tbaa !9
  %115 = fdiv double %113, %114
  %116 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %38, i32 0, i32 0
  store double %115, ptr %116, align 8, !tbaa !22
  %117 = load double, ptr %13, align 8, !tbaa !9
  %118 = load double, ptr %25, align 8, !tbaa !9
  %119 = fdiv double %117, %118
  %120 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %38, i32 0, i32 1
  store double %119, ptr %120, align 8, !tbaa !24
  store double 1.000000e+00, ptr %36, align 8, !tbaa !9
  %121 = load ptr, ptr %15, align 8, !tbaa !5
  store double 0.000000e+00, ptr %121, align 8, !tbaa !9
  %122 = load double, ptr %23, align 8, !tbaa !9
  %123 = fdiv double 1.000000e+00, %122
  store double %123, ptr %28, align 8, !tbaa !9
  %124 = load double, ptr %28, align 8, !tbaa !9
  store double %124, ptr %29, align 8, !tbaa !9
  %125 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 0
  store double 1.000000e+00, ptr %125, align 8, !tbaa !22
  %126 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 1
  store double 0.000000e+00, ptr %126, align 8, !tbaa !24
  store i64 0, ptr %19, align 8, !tbaa !25
  br label %127

127:                                              ; preds = %297, %97
  %128 = load i64, ptr %19, align 8, !tbaa !25
  %129 = load ptr, ptr %10, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %129, i32 0, i32 6
  %131 = load i64, ptr %130, align 8, !tbaa !21
  %132 = icmp sle i64 %128, %131
  br i1 %132, label %133, label %300

133:                                              ; preds = %127
  %134 = load double, ptr %29, align 8, !tbaa !9
  store double %134, ptr %30, align 8, !tbaa !9
  store double 0.000000e+00, ptr %34, align 8, !tbaa !9
  %135 = load double, ptr %36, align 8, !tbaa !9
  %136 = load ptr, ptr %11, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %136, i32 0, i32 11
  %138 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %137, i32 0, i32 4
  %139 = load ptr, ptr %138, align 8, !tbaa !26
  %140 = load i64, ptr %19, align 8, !tbaa !25
  %141 = getelementptr inbounds double, ptr %139, i64 %140
  %142 = load double, ptr %141, align 8, !tbaa !9
  %143 = fmul double %135, %142
  store double %143, ptr %33, align 8, !tbaa !9
  %144 = load i64, ptr %19, align 8, !tbaa !25
  store i64 %144, ptr %20, align 8, !tbaa !25
  br label %145

145:                                              ; preds = %262, %133
  %146 = load i64, ptr %20, align 8, !tbaa !25
  %147 = load ptr, ptr %10, align 8, !tbaa !5
  %148 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %147, i32 0, i32 6
  %149 = load i64, ptr %148, align 8, !tbaa !21
  %150 = icmp sle i64 %146, %149
  br i1 %150, label %151, label %265

151:                                              ; preds = %145
  %152 = load i64, ptr %20, align 8, !tbaa !25
  %153 = load ptr, ptr %10, align 8, !tbaa !5
  %154 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %153, i32 0, i32 9
  %155 = load i64, ptr %154, align 8, !tbaa !27
  %156 = mul nsw i64 %152, %155
  %157 = load i64, ptr %19, align 8, !tbaa !25
  %158 = add nsw i64 %156, %157
  store i64 %158, ptr %41, align 8, !tbaa !25
  %159 = load i64, ptr %20, align 8, !tbaa !25
  %160 = load i64, ptr %19, align 8, !tbaa !25
  %161 = icmp sgt i64 %159, %160
  br i1 %161, label %162, label %185

162:                                              ; preds = %151
  %163 = load double, ptr %33, align 8, !tbaa !9
  %164 = load double, ptr %37, align 8, !tbaa !9
  %165 = fmul double %163, %164
  %166 = load ptr, ptr %11, align 8, !tbaa !5
  %167 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %166, i32 0, i32 9
  %168 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %167, i32 0, i32 4
  %169 = load ptr, ptr %168, align 8, !tbaa !26
  %170 = load i64, ptr %41, align 8, !tbaa !25
  %171 = getelementptr inbounds double, ptr %169, i64 %170
  %172 = load double, ptr %171, align 8, !tbaa !9
  %173 = load double, ptr %34, align 8, !tbaa !9
  %174 = load ptr, ptr %11, align 8, !tbaa !5
  %175 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %174, i32 0, i32 10
  %176 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %175, i32 0, i32 4
  %177 = load ptr, ptr %176, align 8, !tbaa !26
  %178 = load i64, ptr %41, align 8, !tbaa !25
  %179 = getelementptr inbounds double, ptr %177, i64 %178
  %180 = load double, ptr %179, align 8, !tbaa !9
  %181 = fmul double %173, %180
  %182 = call double @llvm.fmuladd.f64(double %165, double %172, double %181)
  store double %182, ptr %32, align 8, !tbaa !9
  %183 = load double, ptr %33, align 8, !tbaa !9
  store double %183, ptr %34, align 8, !tbaa !9
  %184 = load double, ptr %32, align 8, !tbaa !9
  store double %184, ptr %33, align 8, !tbaa !9
  br label %185

185:                                              ; preds = %162, %151
  %186 = load double, ptr %33, align 8, !tbaa !9
  %187 = load ptr, ptr %11, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.alglib_impl::biharmonicevaluator", ptr %187, i32 0, i32 8
  %189 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %188, i32 0, i32 4
  %190 = load ptr, ptr %189, align 8, !tbaa !26
  %191 = load i64, ptr %41, align 8, !tbaa !25
  %192 = getelementptr inbounds double, ptr %190, i64 %191
  %193 = load double, ptr %192, align 8, !tbaa !9
  %194 = fmul double %186, %193
  store double %194, ptr %22, align 8, !tbaa !9
  %195 = load double, ptr %22, align 8, !tbaa !9
  %196 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 0
  %197 = load double, ptr %196, align 8, !tbaa !22
  %198 = fmul double %195, %197
  %199 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %40, i32 0, i32 0
  store double %198, ptr %199, align 8, !tbaa !22
  %200 = load double, ptr %22, align 8, !tbaa !9
  %201 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 1
  %202 = load double, ptr %201, align 8, !tbaa !24
  %203 = fmul double %200, %202
  %204 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %40, i32 0, i32 1
  store double %203, ptr %204, align 8, !tbaa !24
  %205 = load double, ptr %24, align 8, !tbaa !9
  %206 = load ptr, ptr %10, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %206, i32 0, i32 13
  %208 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %207, i32 0, i32 4
  %209 = load ptr, ptr %208, align 8, !tbaa !26
  %210 = load i64, ptr %41, align 8, !tbaa !25
  %211 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %209, i64 %210
  %212 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %211, i32 0, i32 0
  %213 = load double, ptr %212, align 8, !tbaa !22
  %214 = load ptr, ptr %10, align 8, !tbaa !5
  %215 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %214, i32 0, i32 14
  %216 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %215, i32 0, i32 4
  %217 = load ptr, ptr %216, align 8, !tbaa !26
  %218 = load i64, ptr %41, align 8, !tbaa !25
  %219 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %217, i64 %218
  %220 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %219, i32 0, i32 0
  %221 = load double, ptr %220, align 8, !tbaa !22
  %222 = call double @llvm.fmuladd.f64(double %205, double %213, double %221)
  %223 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %21, i32 0, i32 0
  store double %222, ptr %223, align 8, !tbaa !22
  %224 = load double, ptr %24, align 8, !tbaa !9
  %225 = load ptr, ptr %10, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %225, i32 0, i32 13
  %227 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %226, i32 0, i32 4
  %228 = load ptr, ptr %227, align 8, !tbaa !26
  %229 = load i64, ptr %41, align 8, !tbaa !25
  %230 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %228, i64 %229
  %231 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %230, i32 0, i32 1
  %232 = load double, ptr %231, align 8, !tbaa !24
  %233 = load ptr, ptr %10, align 8, !tbaa !5
  %234 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %233, i32 0, i32 14
  %235 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %234, i32 0, i32 4
  %236 = load ptr, ptr %235, align 8, !tbaa !26
  %237 = load i64, ptr %41, align 8, !tbaa !25
  %238 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %236, i64 %237
  %239 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %238, i32 0, i32 1
  %240 = load double, ptr %239, align 8, !tbaa !24
  %241 = call double @llvm.fmuladd.f64(double %224, double %232, double %240)
  %242 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %21, i32 0, i32 1
  store double %241, ptr %242, align 8, !tbaa !24
  %243 = load ptr, ptr %15, align 8, !tbaa !5
  %244 = load double, ptr %243, align 8, !tbaa !9
  %245 = load double, ptr %30, align 8, !tbaa !9
  %246 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %21, i32 0, i32 0
  %247 = load double, ptr %246, align 8, !tbaa !22
  %248 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %40, i32 0, i32 0
  %249 = load double, ptr %248, align 8, !tbaa !22
  %250 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %21, i32 0, i32 1
  %251 = load double, ptr %250, align 8, !tbaa !24
  %252 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %40, i32 0, i32 1
  %253 = load double, ptr %252, align 8, !tbaa !24
  %254 = fmul double %251, %253
  %255 = fneg double %254
  %256 = call double @llvm.fmuladd.f64(double %247, double %249, double %255)
  %257 = call double @llvm.fmuladd.f64(double %245, double %256, double %244)
  %258 = load ptr, ptr %15, align 8, !tbaa !5
  store double %257, ptr %258, align 8, !tbaa !9
  %259 = load double, ptr %30, align 8, !tbaa !9
  %260 = load double, ptr %28, align 8, !tbaa !9
  %261 = fmul double %259, %260
  store double %261, ptr %30, align 8, !tbaa !9
  br label %262

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

265:                                              ; preds = %145
  %266 = load double, ptr %36, align 8, !tbaa !9
  %267 = load double, ptr %35, align 8, !tbaa !9
  %268 = fmul double %266, %267
  store double %268, ptr %36, align 8, !tbaa !9
  %269 = load double, ptr %29, align 8, !tbaa !9
  %270 = load double, ptr %28, align 8, !tbaa !9
  %271 = fmul double %269, %270
  store double %271, ptr %29, align 8, !tbaa !9
  %272 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 0
  %273 = load double, ptr %272, align 8, !tbaa !22
  %274 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %38, i32 0, i32 0
  %275 = load double, ptr %274, align 8, !tbaa !22
  %276 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 1
  %277 = load double, ptr %276, align 8, !tbaa !24
  %278 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %38, i32 0, i32 1
  %279 = load double, ptr %278, align 8, !tbaa !24
  %280 = fmul double %277, %279
  %281 = fneg double %280
  %282 = call double @llvm.fmuladd.f64(double %273, double %275, double %281)
  store double %282, ptr %26, align 8, !tbaa !9
  %283 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 0
  %284 = load double, ptr %283, align 8, !tbaa !22
  %285 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %38, i32 0, i32 1
  %286 = load double, ptr %285, align 8, !tbaa !24
  %287 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 1
  %288 = load double, ptr %287, align 8, !tbaa !24
  %289 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %38, i32 0, i32 0
  %290 = load double, ptr %289, align 8, !tbaa !22
  %291 = fmul double %288, %290
  %292 = call double @llvm.fmuladd.f64(double %284, double %286, double %291)
  store double %292, ptr %27, align 8, !tbaa !9
  %293 = load double, ptr %26, align 8, !tbaa !9
  %294 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 0
  store double %293, ptr %294, align 8, !tbaa !22
  %295 = load double, ptr %27, align 8, !tbaa !9
  %296 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %39, i32 0, i32 1
  store double %295, ptr %296, align 8, !tbaa !24
  br label %297

297:                                              ; preds = %265
  %298 = load i64, ptr %19, align 8, !tbaa !25
  %299 = add nsw i64 %298, 1
  store i64 %299, ptr %19, align 8, !tbaa !25
  br label %127, !llvm.loop !30

300:                                              ; preds = %127
  %301 = load double, ptr %23, align 8, !tbaa !9
  %302 = load double, ptr %29, align 8, !tbaa !9
  %303 = fmul double %301, %302
  store double %303, ptr %31, align 8, !tbaa !9
  br label %304

304:                                              ; preds = %300, %9
  %305 = load ptr, ptr %15, align 8, !tbaa !5
  %306 = load double, ptr %305, align 8, !tbaa !9
  %307 = fneg double %306
  %308 = load ptr, ptr %15, align 8, !tbaa !5
  store double %307, ptr %308, align 8, !tbaa !9
  %309 = load ptr, ptr %17, align 8, !tbaa !5
  store double 0.000000e+00, ptr %309, align 8, !tbaa !9
  %310 = load i8, ptr %16, align 1, !tbaa !11, !range !31, !noundef !32
  %311 = trunc i8 %310 to i1
  br i1 %311, label %312, label %359

312:                                              ; preds = %304
  %313 = load ptr, ptr %10, align 8, !tbaa !5
  %314 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %313, i32 0, i32 17
  %315 = load double, ptr %314, align 8, !tbaa !33
  %316 = load double, ptr %24, align 8, !tbaa !9
  %317 = fmul double %315, %316
  %318 = fmul double %317, 2.000000e+00
  %319 = load ptr, ptr %10, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %319, i32 0, i32 15
  %321 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %320, i32 0, i32 4
  %322 = load ptr, ptr %321, align 8, !tbaa !26
  %323 = load ptr, ptr %10, align 8, !tbaa !5
  %324 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %323, i32 0, i32 6
  %325 = load i64, ptr %324, align 8, !tbaa !21
  %326 = add nsw i64 %325, 1
  %327 = getelementptr inbounds double, ptr %322, i64 %326
  %328 = load double, ptr %327, align 8, !tbaa !9
  %329 = fmul double %318, %328
  %330 = load double, ptr %31, align 8, !tbaa !9
  %331 = fmul double %329, %330
  %332 = load ptr, ptr %10, align 8, !tbaa !5
  %333 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %332, i32 0, i32 6
  %334 = load i64, ptr %333, align 8, !tbaa !21
  %335 = mul nsw i64 2, %334
  %336 = add nsw i64 %335, 1
  %337 = sitofp i64 %336 to double
  %338 = load double, ptr %23, align 8, !tbaa !9
  %339 = load ptr, ptr %10, align 8, !tbaa !5
  %340 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %339, i32 0, i32 3
  %341 = load double, ptr %340, align 8, !tbaa !34
  %342 = fsub double %338, %341
  %343 = fmul double %337, %342
  %344 = fdiv double %331, %343
  %345 = load ptr, ptr %17, align 8, !tbaa !5
  store double %344, ptr %345, align 8, !tbaa !9
  %346 = load ptr, ptr %17, align 8, !tbaa !5
  %347 = load double, ptr %346, align 8, !tbaa !9
  %348 = load ptr, ptr %10, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.alglib_impl::biharmonicpanel", ptr %348, i32 0, i32 17
  %350 = load double, ptr %349, align 8, !tbaa !33
  %351 = load double, ptr %23, align 8, !tbaa !9
  %352 = load ptr, ptr %15, align 8, !tbaa !5
  %353 = load double, ptr %352, align 8, !tbaa !9
  %354 = load ptr, ptr %18, align 8, !tbaa !5
  %355 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %353, ptr noundef %354)
  %356 = call double @llvm.fmuladd.f64(double %350, double %351, double %355)
  %357 = call double @llvm.fmuladd.f64(double 5.000000e-14, double %356, double %347)
  %358 = load ptr, ptr %17, align 8, !tbaa !5
  store double %357, ptr %358, align 8, !tbaa !9
  br label %359

359:                                              ; preds = %312, %304
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 16, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 16, 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 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 16, 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_impl37rbfv3farfields_bhpaneleval1fastkernelEdddlPKNS_9ae_vectorES2_S2_S2_S2_PdS3_PNS_8ae_stateE(double noundef, double noundef, double 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 = !{!14, !10, i64 0}
!19 = !{!14, !10, i64 8}
!20 = !{!14, !10, i64 16}
!21 = !{!14, !15, i64 48}
!22 = !{!23, !10, i64 0}
!23 = !{!"_ZTSN11alglib_impl10ae_complexE", !10, i64 0, !10, i64 8}
!24 = !{!23, !10, i64 8}
!25 = !{!15, !15, i64 0}
!26 = !{!7, !7, i64 0}
!27 = !{!14, !15, i64 72}
!28 = distinct !{!28, !29}
!29 = !{!"llvm.loop.mustprogress"}
!30 = distinct !{!30, !29}
!31 = !{i8 0, i8 2}
!32 = !{}
!33 = !{!14, !10, i64 472}
!34 = !{!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 }

@.str.720 = external hidden unnamed_addr constant [16 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 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 #1

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_impl7ae_sqrtEdPNS_8ae_stateE(double noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl12bhpaneleval1EPKNS_15biharmonicpanelEPKNS_19biharmonicevaluatorEdddPdbS6_PNS_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 %5, align 8, !tbaa !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 = icmp eq i64 %12, 1
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %13, ptr noundef nonnull @.str.720, ptr noundef %8)
  %14 = load <2 x double>, ptr %0, align 8, !tbaa !5
  %15 = insertelement <2 x double> poison, double %2, i64 0
  %16 = insertelement <2 x double> %15, double %3, i64 1
  %17 = fsub <2 x double> %16, %14
  %18 = getelementptr inbounds i8, ptr %0, i64 16
  %19 = load double, ptr %18, align 8, !tbaa !16
  %20 = fsub double %4, %19
  %21 = extractelement <2 x double> %17, i64 1
  %22 = fmul double %21, %21
  %23 = extractelement <2 x double> %17, i64 0
  %24 = tail call double @llvm.fmuladd.f64(double %23, double %23, double %22)
  %25 = tail call double @llvm.fmuladd.f64(double %20, double %20, double %24)
  %26 = fadd double %25, 1.000000e-300
  %27 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %26, ptr noundef %8)
  %28 = getelementptr inbounds i8, ptr %0, i64 48
  %29 = load i64, ptr %28, align 8, !tbaa !17
  %30 = getelementptr inbounds i8, ptr %1, i64 464
  %31 = getelementptr inbounds i8, ptr %1, i64 528
  %32 = getelementptr inbounds i8, ptr %1, i64 656
  %33 = getelementptr inbounds i8, ptr %1, i64 400
  %34 = getelementptr inbounds i8, ptr %0, i64 408
  %35 = call noundef zeroext i1 @_ZN11alglib_impl37rbfv3farfields_bhpaneleval1fastkernelEdddlPKNS_9ae_vectorES2_S2_S2_S2_PdS3_PNS_8ae_stateE(double noundef %23, double noundef %21, double noundef %20, i64 noundef %29, ptr noundef nonnull %30, ptr noundef nonnull %31, ptr noundef nonnull %32, ptr noundef nonnull %33, ptr noundef nonnull %34, ptr noundef nonnull %5, ptr noundef nonnull %10, ptr noundef %8)
  br i1 %35, label %._crit_edge144, label %36

._crit_edge144:                                   ; preds = %9
  %.pre = load double, ptr %5, align 8, !tbaa !5
  br label %139

36:                                               ; preds = %9
  %37 = fadd double %24, 1.000000e-300
  %38 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %37, ptr noundef %8)
  %39 = fdiv double %20, %27
  %40 = fdiv double %38, %27
  %41 = insertelement <2 x double> poison, double %38, i64 0
  %42 = shufflevector <2 x double> %41, <2 x double> poison, <2 x i32> zeroinitializer
  %43 = fdiv <2 x double> %17, %42
  store double 0.000000e+00, ptr %5, align 8, !tbaa !5
  %44 = fdiv double 1.000000e+00, %27
  %45 = load i64, ptr %28, align 8, !tbaa !17
  %.not137 = icmp slt i64 %45, 0
  br i1 %.not137, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %36
  %46 = getelementptr inbounds i8, ptr %1, i64 648
  %47 = getelementptr inbounds i8, ptr %0, i64 72
  %48 = load i64, ptr %47, align 8, !tbaa !18
  %49 = getelementptr inbounds i8, ptr %1, i64 520
  %50 = getelementptr inbounds i8, ptr %1, i64 584
  %51 = getelementptr inbounds i8, ptr %1, i64 456
  %52 = getelementptr inbounds i8, ptr %0, i64 272
  %53 = getelementptr inbounds i8, ptr %0, i64 336
  %54 = add i64 %48, 1
  br label %55

55:                                               ; preds = %.lr.ph, %.loopexit
  %56 = phi double [ 0.000000e+00, %.lr.ph ], [ %128, %.loopexit ]
  %.0140 = phi i64 [ 0, %.lr.ph ], [ %88, %.loopexit ]
  %.0126139 = phi double [ %44, %.lr.ph ], [ %87, %.loopexit ]
  %.0127138 = phi double [ 1.000000e+00, %.lr.ph ], [ %129, %.loopexit ]
  %57 = phi <2 x double> [ <double 1.000000e+00, double 0.000000e+00>, %.lr.ph ], [ %136, %.loopexit ]
  %58 = load ptr, ptr %46, align 8, !tbaa !19
  %59 = getelementptr inbounds double, ptr %58, i64 %.0140
  %60 = load double, ptr %59, align 8, !tbaa !5
  %61 = fmul double %.0127138, %60
  %62 = mul i64 %54, %.0140
  %63 = load ptr, ptr %51, align 8, !tbaa !19
  %64 = getelementptr inbounds double, ptr %63, i64 %62
  %65 = load double, ptr %64, align 8, !tbaa !5
  %66 = fmul double %61, %65
  %67 = extractelement <2 x double> %57, i64 0
  %68 = fmul double %67, %66
  %69 = extractelement <2 x double> %57, i64 1
  %70 = fmul double %69, %66
  %71 = load ptr, ptr %52, align 8, !tbaa !19
  %72 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %71, i64 %62
  %73 = load double, ptr %72, align 8, !tbaa !20
  %74 = load ptr, ptr %53, align 8, !tbaa !19
  %75 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %74, i64 %62
  %76 = load double, ptr %75, align 8, !tbaa !20
  %77 = call double @llvm.fmuladd.f64(double %26, double %73, double %76)
  %78 = getelementptr inbounds i8, ptr %72, i64 8
  %79 = load double, ptr %78, align 8, !tbaa !22
  %80 = getelementptr inbounds i8, ptr %75, i64 8
  %81 = load double, ptr %80, align 8, !tbaa !22
  %82 = call double @llvm.fmuladd.f64(double %26, double %79, double %81)
  %83 = fneg double %82
  %84 = fmul double %70, %83
  %85 = call double @llvm.fmuladd.f64(double %77, double %68, double %84)
  %86 = call double @llvm.fmuladd.f64(double %.0126139, double %85, double %56)
  store double %86, ptr %5, align 8, !tbaa !5
  %87 = fmul double %44, %.0126139
  %88 = add nuw i64 %.0140, 1
  %.not132.not.peel = icmp slt i64 %.0140, %45
  br i1 %.not132.not.peel, label %.peel.next, label %.loopexit

.peel.next:                                       ; preds = %55, %103
  %89 = phi double [ %125, %103 ], [ %86, %55 ]
  %.0125136 = phi i64 [ %127, %103 ], [ %88, %55 ]
  %.0128135 = phi double [ %126, %103 ], [ %87, %55 ]
  %.0129134 = phi double [ %.1, %103 ], [ 0.000000e+00, %55 ]
  %.0130133 = phi double [ %.1131, %103 ], [ %61, %55 ]
  %90 = mul nsw i64 %48, %.0125136
  %91 = add nsw i64 %90, %.0140
  %92 = icmp ugt i64 %.0125136, %.0140
  br i1 %92, label %93, label %103

93:                                               ; preds = %.peel.next
  %94 = fmul double %39, %.0130133
  %95 = load ptr, ptr %49, align 8, !tbaa !19
  %96 = getelementptr inbounds double, ptr %95, i64 %91
  %97 = load double, ptr %96, align 8, !tbaa !5
  %98 = load ptr, ptr %50, align 8, !tbaa !19
  %99 = getelementptr inbounds double, ptr %98, i64 %91
  %100 = load double, ptr %99, align 8, !tbaa !5
  %101 = fmul double %.0129134, %100
  %102 = call double @llvm.fmuladd.f64(double %94, double %97, double %101)
  br label %103

103:                                              ; preds = %93, %.peel.next
  %.1131 = phi double [ %102, %93 ], [ %.0130133, %.peel.next ]
  %.1 = phi double [ %.0130133, %93 ], [ %.0129134, %.peel.next ]
  %104 = load ptr, ptr %51, align 8, !tbaa !19
  %105 = getelementptr inbounds double, ptr %104, i64 %91
  %106 = load double, ptr %105, align 8, !tbaa !5
  %107 = fmul double %.1131, %106
  %108 = fmul double %67, %107
  %109 = fmul double %69, %107
  %110 = load ptr, ptr %52, align 8, !tbaa !19
  %111 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %110, i64 %91
  %112 = load double, ptr %111, align 8, !tbaa !20
  %113 = load ptr, ptr %53, align 8, !tbaa !19
  %114 = getelementptr inbounds %"struct.alglib_impl::ae_complex", ptr %113, i64 %91
  %115 = load double, ptr %114, align 8, !tbaa !20
  %116 = call double @llvm.fmuladd.f64(double %26, double %112, double %115)
  %117 = getelementptr inbounds i8, ptr %111, i64 8
  %118 = load double, ptr %117, align 8, !tbaa !22
  %119 = getelementptr inbounds i8, ptr %114, i64 8
  %120 = load double, ptr %119, align 8, !tbaa !22
  %121 = call double @llvm.fmuladd.f64(double %26, double %118, double %120)
  %122 = fneg double %121
  %123 = fmul double %109, %122
  %124 = call double @llvm.fmuladd.f64(double %116, double %108, double %123)
  %125 = call double @llvm.fmuladd.f64(double %.0128135, double %124, double %89)
  store double %125, ptr %5, align 8, !tbaa !5
  %126 = fmul double %44, %.0128135
  %127 = add nuw nsw i64 %.0125136, 1
  %.not132.not = icmp slt i64 %.0125136, %45
  br i1 %.not132.not, label %.peel.next, label %.loopexit, !llvm.loop !23

.loopexit:                                        ; preds = %103, %55
  %128 = phi double [ %86, %55 ], [ %125, %103 ]
  %129 = fmul double %40, %.0127138
  %130 = shufflevector <2 x double> %57, <2 x double> poison, <2 x i32> <i32 1, i32 poison>
  %131 = fneg <2 x double> %57
  %132 = shufflevector <2 x double> %130, <2 x double> %131, <2 x i32> <i32 0, i32 3>
  %133 = fmul <2 x double> %43, %132
  %134 = shufflevector <2 x double> %133, <2 x double> poison, <2 x i32> <i32 1, i32 0>
  %135 = shufflevector <2 x double> %57, <2 x double> poison, <2 x i32> zeroinitializer
  %136 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %135, <2 x double> %43, <2 x double> %134)
  %exitcond.not = icmp eq i64 %.0140, %45
  br i1 %exitcond.not, label %._crit_edge, label %55, !llvm.loop !26

._crit_edge:                                      ; preds = %.loopexit, %36
  %137 = phi double [ 0.000000e+00, %36 ], [ %128, %.loopexit ]
  %.0126.lcssa = phi double [ %44, %36 ], [ %87, %.loopexit ]
  %138 = fmul double %27, %.0126.lcssa
  store double %138, ptr %10, align 8, !tbaa !5
  br label %139

139:                                              ; preds = %._crit_edge144, %._crit_edge
  %140 = phi double [ %.pre, %._crit_edge144 ], [ %137, %._crit_edge ]
  %141 = fneg double %140
  store double %141, ptr %5, align 8, !tbaa !5
  store double 0.000000e+00, ptr %7, align 8, !tbaa !5
  br i1 %6, label %142, label %169

142:                                              ; preds = %139
  %143 = getelementptr inbounds i8, ptr %0, i64 472
  %144 = load double, ptr %143, align 8, !tbaa !27
  %145 = fmul double %26, %144
  %146 = fmul double %145, 2.000000e+00
  %147 = getelementptr inbounds i8, ptr %0, i64 400
  %148 = load ptr, ptr %147, align 8, !tbaa !19
  %149 = load i64, ptr %28, align 8, !tbaa !17
  %150 = getelementptr double, ptr %148, i64 %149
  %151 = getelementptr i8, ptr %150, i64 8
  %152 = load double, ptr %151, align 8, !tbaa !5
  %153 = fmul double %146, %152
  %154 = load double, ptr %10, align 8, !tbaa !5
  %155 = fmul double %153, %154
  %156 = shl nsw i64 %149, 1
  %157 = or disjoint i64 %156, 1
  %158 = sitofp i64 %157 to double
  %159 = getelementptr inbounds i8, ptr %0, i64 24
  %160 = load double, ptr %159, align 8, !tbaa !28
  %161 = fsub double %27, %160
  %162 = fmul double %161, %158
  %163 = fdiv double %155, %162
  store double %163, ptr %7, align 8, !tbaa !5
  %164 = load double, ptr %143, align 8, !tbaa !27
  %165 = load double, ptr %5, align 8, !tbaa !5
  %166 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %165, ptr noundef %8)
  %167 = call double @llvm.fmuladd.f64(double %164, double %27, double %166)
  %168 = call double @llvm.fmuladd.f64(double %167, double 5.000000e-14, double %163)
  store double %168, ptr %7, align 8, !tbaa !5
  br label %169

169:                                              ; preds = %142, %139
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  ret void
}

declare noundef zeroext i1 @_ZN11alglib_impl37rbfv3farfields_bhpaneleval1fastkernelEdddlPKNS_9ae_vectorES2_S2_S2_S2_PdS3_PNS_8ae_stateE(double noundef, double noundef, double 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 = !{!10, !6, i64 16}
!17 = !{!10, !11, i64 48}
!18 = !{!10, !11, i64 72}
!19 = !{!7, !7, i64 0}
!20 = !{!21, !6, i64 0}
!21 = !{!"_ZTSN11alglib_impl10ae_complexE", !6, i64 0, !6, i64 8}
!22 = !{!21, !6, i64 8}
!23 = distinct !{!23, !24, !25}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!"llvm.loop.peeled.count", i32 1}
!26 = distinct !{!26, !24}
!27 = !{!10, !6, i64 472}
!28 = !{!10, !6, i64 24}


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