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

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

@.str.153 = external hidden unnamed_addr constant [30 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 void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #1

declare noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef, double noundef) #1

declare noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef, double noundef) #1

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef, double noundef) #1

declare noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef, double 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_impl6ae_sqrEdPNS_8ae_stateE(double noundef, ptr noundef) #1

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

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef, double noundef) #1

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

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

declare void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl10snnlssolveEPNS_11snnlssolverEPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2) #3 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i8, align 1
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca double, align 8
  %15 = alloca double, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca double, align 8
  %20 = alloca double, align 8
  %21 = alloca i8, align 1
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca i64, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %29 = load ptr, ptr %4, align 8, !tbaa !5
  %30 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %29, i32 0, i32 0
  %31 = load i64, ptr %30, align 8, !tbaa !9
  store i64 %31, ptr %8, align 8, !tbaa !17
  %32 = load ptr, ptr %4, align 8, !tbaa !5
  %33 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %32, i32 0, i32 1
  %34 = load i64, ptr %33, align 8, !tbaa !18
  store i64 %34, ptr %9, align 8, !tbaa !17
  %35 = load ptr, ptr %4, align 8, !tbaa !5
  %36 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %35, i32 0, i32 2
  %37 = load i64, ptr %36, align 8, !tbaa !19
  store i64 %37, ptr %10, align 8, !tbaa !17
  %38 = load ptr, ptr %4, align 8, !tbaa !5
  %39 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %38, i32 0, i32 6
  store double 0.000000e+00, ptr %39, align 8, !tbaa !20
  %40 = load i64, ptr %8, align 8, !tbaa !17
  %41 = load i64, ptr %9, align 8, !tbaa !17
  %42 = add nsw i64 %40, %41
  %43 = icmp eq i64 %42, 0
  br i1 %43, label %44, label %45

44:                                               ; preds = %3
  store i32 1, ptr %28, align 4
  br label %810

45:                                               ; preds = %3
  %46 = load i64, ptr %9, align 8, !tbaa !17
  %47 = icmp eq i64 %46, 0
  br i1 %47, label %48, label %97

48:                                               ; preds = %45
  %49 = load ptr, ptr %5, align 8, !tbaa !5
  %50 = load i64, ptr %8, align 8, !tbaa !17
  %51 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %49, i64 noundef %50, ptr noundef %51)
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %52

52:                                               ; preds = %93, %48
  %53 = load i64, ptr %7, align 8, !tbaa !17
  %54 = load i64, ptr %8, align 8, !tbaa !17
  %55 = sub nsw i64 %54, 1
  %56 = icmp sle i64 %53, %55
  br i1 %56, label %57, label %96

57:                                               ; preds = %52
  %58 = load ptr, ptr %4, align 8, !tbaa !5
  %59 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %58, i32 0, i32 4
  %60 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %59, i32 0, i32 4
  %61 = load ptr, ptr %60, align 8, !tbaa !21
  %62 = load i64, ptr %7, align 8, !tbaa !17
  %63 = getelementptr inbounds double, ptr %61, i64 %62
  %64 = load double, ptr %63, align 8, !tbaa !22
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %65, i32 0, i32 4
  %67 = load ptr, ptr %66, align 8, !tbaa !21
  %68 = load i64, ptr %7, align 8, !tbaa !17
  %69 = getelementptr inbounds double, ptr %67, i64 %68
  store double %64, ptr %69, align 8, !tbaa !22
  %70 = load ptr, ptr %4, align 8, !tbaa !5
  %71 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %70, i32 0, i32 5
  %72 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %71, i32 0, i32 4
  %73 = load ptr, ptr %72, align 8, !tbaa !21
  %74 = load i64, ptr %7, align 8, !tbaa !17
  %75 = getelementptr inbounds i8, ptr %73, i64 %74
  %76 = load i8, ptr %75, align 1, !tbaa !23, !range !24, !noundef !25
  %77 = trunc i8 %76 to i1
  br i1 %77, label %78, label %92

78:                                               ; preds = %57
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %79, i32 0, i32 4
  %81 = load ptr, ptr %80, align 8, !tbaa !21
  %82 = load i64, ptr %7, align 8, !tbaa !17
  %83 = getelementptr inbounds double, ptr %81, i64 %82
  %84 = load double, ptr %83, align 8, !tbaa !22
  %85 = load ptr, ptr %6, align 8, !tbaa !5
  %86 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %84, double noundef 0.000000e+00, ptr noundef %85)
  %87 = load ptr, ptr %5, align 8, !tbaa !5
  %88 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %87, i32 0, i32 4
  %89 = load ptr, ptr %88, align 8, !tbaa !21
  %90 = load i64, ptr %7, align 8, !tbaa !17
  %91 = getelementptr inbounds double, ptr %89, i64 %90
  store double %86, ptr %91, align 8, !tbaa !22
  br label %92

92:                                               ; preds = %78, %57
  br label %93

93:                                               ; preds = %92
  %94 = load i64, ptr %7, align 8, !tbaa !17
  %95 = add nsw i64 %94, 1
  store i64 %95, ptr %7, align 8, !tbaa !17
  br label %52, !llvm.loop !26

96:                                               ; preds = %52
  store i32 1, ptr %28, align 4
  br label %810

97:                                               ; preds = %45
  %98 = load ptr, ptr %5, align 8, !tbaa !5
  %99 = load i64, ptr %8, align 8, !tbaa !17
  %100 = load i64, ptr %9, align 8, !tbaa !17
  %101 = add nsw i64 %99, %100
  %102 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %98, i64 noundef %101, ptr noundef %102)
  %103 = load ptr, ptr %4, align 8, !tbaa !5
  %104 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %103, i32 0, i32 8
  %105 = load i64, ptr %8, align 8, !tbaa !17
  %106 = load i64, ptr %9, align 8, !tbaa !17
  %107 = add nsw i64 %105, %106
  %108 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %104, i64 noundef %107, ptr noundef %108)
  %109 = load ptr, ptr %4, align 8, !tbaa !5
  %110 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %109, i32 0, i32 9
  %111 = load i64, ptr %8, align 8, !tbaa !17
  %112 = load i64, ptr %9, align 8, !tbaa !17
  %113 = add nsw i64 %111, %112
  %114 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %110, i64 noundef %113, ptr noundef %114)
  %115 = load ptr, ptr %4, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %115, i32 0, i32 15
  %117 = load i64, ptr %8, align 8, !tbaa !17
  %118 = load i64, ptr %9, align 8, !tbaa !17
  %119 = add nsw i64 %117, %118
  %120 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %116, i64 noundef %119, ptr noundef %120)
  %121 = load ptr, ptr %4, align 8, !tbaa !5
  %122 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %121, i32 0, i32 16
  %123 = load i64, ptr %8, align 8, !tbaa !17
  %124 = load i64, ptr %9, align 8, !tbaa !17
  %125 = add nsw i64 %123, %124
  %126 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %122, i64 noundef %125, ptr noundef %126)
  %127 = load ptr, ptr %4, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %127, i32 0, i32 23
  %129 = load i64, ptr %10, align 8, !tbaa !17
  %130 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %128, i64 noundef %129, ptr noundef %130)
  %131 = load ptr, ptr %4, align 8, !tbaa !5
  %132 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %131, i32 0, i32 18
  %133 = load i64, ptr %9, align 8, !tbaa !17
  %134 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %132, i64 noundef %133, ptr noundef %134)
  %135 = load ptr, ptr %4, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %135, i32 0, i32 24
  %137 = load i64, ptr %8, align 8, !tbaa !17
  %138 = load i64, ptr %9, align 8, !tbaa !17
  %139 = add nsw i64 %137, %138
  %140 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %136, i64 noundef %139, ptr noundef %140)
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %141, i32 0, i32 17
  %143 = load i64, ptr %8, align 8, !tbaa !17
  %144 = load i64, ptr %9, align 8, !tbaa !17
  %145 = add nsw i64 %143, %144
  %146 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %142, i64 noundef %145, ptr noundef %146)
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %147

147:                                              ; preds = %166, %97
  %148 = load i64, ptr %7, align 8, !tbaa !17
  %149 = load i64, ptr %8, align 8, !tbaa !17
  %150 = load i64, ptr %9, align 8, !tbaa !17
  %151 = add nsw i64 %149, %150
  %152 = sub nsw i64 %151, 1
  %153 = icmp sle i64 %148, %152
  br i1 %153, label %154, label %169

154:                                              ; preds = %147
  %155 = load ptr, ptr %5, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %155, i32 0, i32 4
  %157 = load ptr, ptr %156, align 8, !tbaa !21
  %158 = load i64, ptr %7, align 8, !tbaa !17
  %159 = getelementptr inbounds double, ptr %157, i64 %158
  store double 0.000000e+00, ptr %159, align 8, !tbaa !22
  %160 = load ptr, ptr %4, align 8, !tbaa !5
  %161 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %160, i32 0, i32 24
  %162 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %161, i32 0, i32 4
  %163 = load ptr, ptr %162, align 8, !tbaa !21
  %164 = load i64, ptr %7, align 8, !tbaa !17
  %165 = getelementptr inbounds double, ptr %163, i64 %164
  store double 1.000000e+00, ptr %165, align 8, !tbaa !22
  br label %166

166:                                              ; preds = %154
  %167 = load i64, ptr %7, align 8, !tbaa !17
  %168 = add nsw i64 %167, 1
  store i64 %168, ptr %7, align 8, !tbaa !17
  br label %147, !llvm.loop !28

169:                                              ; preds = %147
  store double 5.000000e-10, ptr %12, align 8, !tbaa !22
  store i64 10, ptr %18, align 8, !tbaa !17
  store i64 0, ptr %16, align 8, !tbaa !17
  store i64 0, ptr %17, align 8, !tbaa !17
  store double 5.000000e-13, ptr %19, align 8, !tbaa !22
  %170 = load ptr, ptr %6, align 8, !tbaa !5
  %171 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef 1.000000e-300, ptr noundef %170)
  store double %171, ptr %20, align 8, !tbaa !22
  br label %172

172:                                              ; preds = %808, %355, %169
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %173

173:                                              ; preds = %200, %172
  %174 = load i64, ptr %7, align 8, !tbaa !17
  %175 = load i64, ptr %8, align 8, !tbaa !17
  %176 = load i64, ptr %9, align 8, !tbaa !17
  %177 = add nsw i64 %175, %176
  %178 = sub nsw i64 %177, 1
  %179 = icmp sle i64 %174, %178
  br i1 %179, label %180, label %203

180:                                              ; preds = %173
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %181, i32 0, i32 5
  %183 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %182, i32 0, i32 4
  %184 = load ptr, ptr %183, align 8, !tbaa !21
  %185 = load i64, ptr %7, align 8, !tbaa !17
  %186 = getelementptr inbounds i8, ptr %184, i64 %185
  %187 = load i8, ptr %186, align 1, !tbaa !23, !range !24, !noundef !25
  %188 = trunc i8 %187 to i1
  br i1 %188, label %189, label %197

189:                                              ; preds = %180
  %190 = load ptr, ptr %5, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %190, i32 0, i32 4
  %192 = load ptr, ptr %191, align 8, !tbaa !21
  %193 = load i64, ptr %7, align 8, !tbaa !17
  %194 = getelementptr inbounds double, ptr %192, i64 %193
  %195 = load double, ptr %194, align 8, !tbaa !22
  %196 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %195, double noundef 0.000000e+00)
  br label %197

197:                                              ; preds = %189, %180
  %198 = phi i1 [ true, %180 ], [ %196, %189 ]
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %198, ptr noundef @.str.153, ptr noundef %199)
  br label %200

200:                                              ; preds = %197
  %201 = load i64, ptr %7, align 8, !tbaa !17
  %202 = add nsw i64 %201, 1
  store i64 %202, ptr %7, align 8, !tbaa !17
  br label %173, !llvm.loop !29

203:                                              ; preds = %173
  %204 = load ptr, ptr %4, align 8, !tbaa !5
  %205 = load ptr, ptr %5, align 8, !tbaa !5
  %206 = load ptr, ptr %4, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %206, i32 0, i32 23
  %208 = load ptr, ptr %4, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %208, i32 0, i32 15
  %210 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_implL15snnls_funcgraduEPNS_11snnlssolverEPNS_9ae_vectorES3_S3_PdPNS_8ae_stateE(ptr noundef %204, ptr noundef %205, ptr noundef %207, ptr noundef %209, ptr noundef %22, ptr noundef %210)
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %211

211:                                              ; preds = %267, %203
  %212 = load i64, ptr %7, align 8, !tbaa !17
  %213 = load i64, ptr %8, align 8, !tbaa !17
  %214 = load i64, ptr %9, align 8, !tbaa !17
  %215 = add nsw i64 %213, %214
  %216 = sub nsw i64 %215, 1
  %217 = icmp sle i64 %212, %216
  br i1 %217, label %218, label %270

218:                                              ; preds = %211
  %219 = load ptr, ptr %4, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %219, i32 0, i32 5
  %221 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %220, i32 0, i32 4
  %222 = load ptr, ptr %221, align 8, !tbaa !21
  %223 = load i64, ptr %7, align 8, !tbaa !17
  %224 = getelementptr inbounds i8, ptr %222, i64 %223
  %225 = load i8, ptr %224, align 1, !tbaa !23, !range !24, !noundef !25
  %226 = trunc i8 %225 to i1
  br i1 %226, label %227, label %251

227:                                              ; preds = %218
  %228 = load ptr, ptr %5, align 8, !tbaa !5
  %229 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %228, i32 0, i32 4
  %230 = load ptr, ptr %229, align 8, !tbaa !21
  %231 = load i64, ptr %7, align 8, !tbaa !17
  %232 = getelementptr inbounds double, ptr %230, i64 %231
  %233 = load double, ptr %232, align 8, !tbaa !22
  %234 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %233, double noundef 0.000000e+00)
  br i1 %234, label %235, label %251

235:                                              ; preds = %227
  %236 = load ptr, ptr %4, align 8, !tbaa !5
  %237 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %236, i32 0, i32 15
  %238 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %237, i32 0, i32 4
  %239 = load ptr, ptr %238, align 8, !tbaa !21
  %240 = load i64, ptr %7, align 8, !tbaa !17
  %241 = getelementptr inbounds double, ptr %239, i64 %240
  %242 = load double, ptr %241, align 8, !tbaa !22
  %243 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %242, double noundef 0.000000e+00)
  br i1 %243, label %244, label %251

244:                                              ; preds = %235
  %245 = load ptr, ptr %4, align 8, !tbaa !5
  %246 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %245, i32 0, i32 16
  %247 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %246, i32 0, i32 4
  %248 = load ptr, ptr %247, align 8, !tbaa !21
  %249 = load i64, ptr %7, align 8, !tbaa !17
  %250 = getelementptr inbounds double, ptr %248, i64 %249
  store double 0.000000e+00, ptr %250, align 8, !tbaa !22
  br label %266

251:                                              ; preds = %235, %227, %218
  %252 = load ptr, ptr %4, align 8, !tbaa !5
  %253 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %252, i32 0, i32 15
  %254 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %253, i32 0, i32 4
  %255 = load ptr, ptr %254, align 8, !tbaa !21
  %256 = load i64, ptr %7, align 8, !tbaa !17
  %257 = getelementptr inbounds double, ptr %255, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !22
  %259 = fneg double %258
  %260 = load ptr, ptr %4, align 8, !tbaa !5
  %261 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %260, i32 0, i32 16
  %262 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %261, i32 0, i32 4
  %263 = load ptr, ptr %262, align 8, !tbaa !21
  %264 = load i64, ptr %7, align 8, !tbaa !17
  %265 = getelementptr inbounds double, ptr %263, i64 %264
  store double %259, ptr %265, align 8, !tbaa !22
  br label %266

266:                                              ; preds = %251, %244
  br label %267

267:                                              ; preds = %266
  %268 = load i64, ptr %7, align 8, !tbaa !17
  %269 = add nsw i64 %268, 1
  store i64 %269, ptr %7, align 8, !tbaa !17
  br label %211, !llvm.loop !30

270:                                              ; preds = %211
  store i8 0, ptr %21, align 1, !tbaa !23
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %271

271:                                              ; preds = %306, %270
  %272 = load i64, ptr %7, align 8, !tbaa !17
  %273 = load i64, ptr %8, align 8, !tbaa !17
  %274 = load i64, ptr %9, align 8, !tbaa !17
  %275 = add nsw i64 %273, %274
  %276 = sub nsw i64 %275, 1
  %277 = icmp sle i64 %272, %276
  br i1 %277, label %278, label %309

278:                                              ; preds = %271
  %279 = load ptr, ptr %4, align 8, !tbaa !5
  %280 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %279, i32 0, i32 5
  %281 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %280, i32 0, i32 4
  %282 = load ptr, ptr %281, align 8, !tbaa !21
  %283 = load i64, ptr %7, align 8, !tbaa !17
  %284 = getelementptr inbounds i8, ptr %282, i64 %283
  %285 = load i8, ptr %284, align 1, !tbaa !23, !range !24, !noundef !25
  %286 = trunc i8 %285 to i1
  br i1 %286, label %287, label %305

287:                                              ; preds = %278
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %288, i32 0, i32 4
  %290 = load ptr, ptr %289, align 8, !tbaa !21
  %291 = load i64, ptr %7, align 8, !tbaa !17
  %292 = getelementptr inbounds double, ptr %290, i64 %291
  %293 = load double, ptr %292, align 8, !tbaa !22
  %294 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %293, double noundef 0.000000e+00)
  br i1 %294, label %295, label %305

295:                                              ; preds = %287
  %296 = load ptr, ptr %4, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %296, i32 0, i32 16
  %298 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %297, i32 0, i32 4
  %299 = load ptr, ptr %298, align 8, !tbaa !21
  %300 = load i64, ptr %7, align 8, !tbaa !17
  %301 = getelementptr inbounds double, ptr %299, i64 %300
  %302 = load double, ptr %301, align 8, !tbaa !22
  %303 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %302, double noundef 0.000000e+00)
  br i1 %303, label %304, label %305

304:                                              ; preds = %295
  store i8 1, ptr %21, align 1, !tbaa !23
  br label %305

305:                                              ; preds = %304, %295, %287, %278
  br label %306

306:                                              ; preds = %305
  %307 = load i64, ptr %7, align 8, !tbaa !17
  %308 = add nsw i64 %307, 1
  store i64 %308, ptr %7, align 8, !tbaa !17
  br label %271, !llvm.loop !31

309:                                              ; preds = %271
  %310 = load i8, ptr %21, align 1, !tbaa !23, !range !24, !noundef !25
  %311 = trunc i8 %310 to i1
  br i1 %311, label %312, label %356

312:                                              ; preds = %309
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %313

313:                                              ; preds = %352, %312
  %314 = load i64, ptr %7, align 8, !tbaa !17
  %315 = load i64, ptr %8, align 8, !tbaa !17
  %316 = load i64, ptr %9, align 8, !tbaa !17
  %317 = add nsw i64 %315, %316
  %318 = sub nsw i64 %317, 1
  %319 = icmp sle i64 %314, %318
  br i1 %319, label %320, label %355

320:                                              ; preds = %313
  %321 = load ptr, ptr %5, align 8, !tbaa !5
  %322 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %321, i32 0, i32 4
  %323 = load ptr, ptr %322, align 8, !tbaa !21
  %324 = load i64, ptr %7, align 8, !tbaa !17
  %325 = getelementptr inbounds double, ptr %323, i64 %324
  %326 = load double, ptr %325, align 8, !tbaa !22
  %327 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %326, double noundef 0.000000e+00)
  br i1 %327, label %328, label %351

328:                                              ; preds = %320
  %329 = load ptr, ptr %4, align 8, !tbaa !5
  %330 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %329, i32 0, i32 16
  %331 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %330, i32 0, i32 4
  %332 = load ptr, ptr %331, align 8, !tbaa !21
  %333 = load i64, ptr %7, align 8, !tbaa !17
  %334 = getelementptr inbounds double, ptr %332, i64 %333
  %335 = load double, ptr %334, align 8, !tbaa !22
  %336 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %335, double noundef 0.000000e+00)
  br i1 %336, label %337, label %351

337:                                              ; preds = %328
  %338 = load ptr, ptr %5, align 8, !tbaa !5
  %339 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %338, i32 0, i32 4
  %340 = load ptr, ptr %339, align 8, !tbaa !21
  %341 = load i64, ptr %7, align 8, !tbaa !17
  %342 = getelementptr inbounds double, ptr %340, i64 %341
  %343 = load double, ptr %342, align 8, !tbaa !22
  %344 = load double, ptr %20, align 8, !tbaa !22
  %345 = fadd double %343, %344
  %346 = load ptr, ptr %5, align 8, !tbaa !5
  %347 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %346, i32 0, i32 4
  %348 = load ptr, ptr %347, align 8, !tbaa !21
  %349 = load i64, ptr %7, align 8, !tbaa !17
  %350 = getelementptr inbounds double, ptr %348, i64 %349
  store double %345, ptr %350, align 8, !tbaa !22
  br label %351

351:                                              ; preds = %337, %328, %320
  br label %352

352:                                              ; preds = %351
  %353 = load i64, ptr %7, align 8, !tbaa !17
  %354 = add nsw i64 %353, 1
  store i64 %354, ptr %7, align 8, !tbaa !17
  br label %313, !llvm.loop !32

355:                                              ; preds = %313
  br label %172, !llvm.loop !33

356:                                              ; preds = %309
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %357

357:                                              ; preds = %377, %356
  %358 = load i64, ptr %7, align 8, !tbaa !17
  %359 = load i64, ptr %8, align 8, !tbaa !17
  %360 = load i64, ptr %9, align 8, !tbaa !17
  %361 = add nsw i64 %359, %360
  %362 = sub nsw i64 %361, 1
  %363 = icmp sle i64 %358, %362
  br i1 %363, label %364, label %380

364:                                              ; preds = %357
  %365 = load ptr, ptr %5, align 8, !tbaa !5
  %366 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %365, i32 0, i32 4
  %367 = load ptr, ptr %366, align 8, !tbaa !21
  %368 = load i64, ptr %7, align 8, !tbaa !17
  %369 = getelementptr inbounds double, ptr %367, i64 %368
  %370 = load double, ptr %369, align 8, !tbaa !22
  %371 = load ptr, ptr %4, align 8, !tbaa !5
  %372 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %371, i32 0, i32 9
  %373 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %372, i32 0, i32 4
  %374 = load ptr, ptr %373, align 8, !tbaa !21
  %375 = load i64, ptr %7, align 8, !tbaa !17
  %376 = getelementptr inbounds double, ptr %374, i64 %375
  store double %370, ptr %376, align 8, !tbaa !22
  br label %377

377:                                              ; preds = %364
  %378 = load i64, ptr %7, align 8, !tbaa !17
  %379 = add nsw i64 %378, 1
  store i64 %379, ptr %7, align 8, !tbaa !17
  br label %357, !llvm.loop !34

380:                                              ; preds = %357
  %381 = load ptr, ptr %4, align 8, !tbaa !5
  %382 = load ptr, ptr %5, align 8, !tbaa !5
  %383 = load ptr, ptr %4, align 8, !tbaa !5
  %384 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %383, i32 0, i32 24
  %385 = load double, ptr %12, align 8, !tbaa !22
  %386 = load ptr, ptr %4, align 8, !tbaa !5
  %387 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %386, i32 0, i32 13
  %388 = load ptr, ptr %4, align 8, !tbaa !5
  %389 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %388, i32 0, i32 12
  %390 = load ptr, ptr %4, align 8, !tbaa !5
  %391 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %390, i32 0, i32 25
  %392 = load ptr, ptr %4, align 8, !tbaa !5
  %393 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %392, i32 0, i32 26
  %394 = load ptr, ptr %4, align 8, !tbaa !5
  %395 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %394, i32 0, i32 27
  %396 = load ptr, ptr %4, align 8, !tbaa !5
  %397 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %396, i32 0, i32 11
  %398 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_implL16snnls_trdprepareEPNS_11snnlssolverEPNS_9ae_vectorES3_dS3_PNS_9ae_matrixES3_S3_S3_S5_PNS_8ae_stateE(ptr noundef %381, ptr noundef %382, ptr noundef %384, double noundef %385, ptr noundef %387, ptr noundef %389, ptr noundef %391, ptr noundef %393, ptr noundef %395, ptr noundef %397, ptr noundef %398)
  br label %399

399:                                              ; preds = %736, %380
  %400 = load ptr, ptr %4, align 8, !tbaa !5
  %401 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %400, i32 0, i32 7
  %402 = load i64, ptr %401, align 8, !tbaa !35
  %403 = icmp sgt i64 %402, 0
  br i1 %403, label %404, label %411

404:                                              ; preds = %399
  %405 = load i64, ptr %17, align 8, !tbaa !17
  %406 = load ptr, ptr %4, align 8, !tbaa !5
  %407 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %406, i32 0, i32 7
  %408 = load i64, ptr %407, align 8, !tbaa !35
  %409 = icmp sge i64 %405, %408
  br i1 %409, label %410, label %411

410:                                              ; preds = %404
  br label %737

411:                                              ; preds = %404, %399
  %412 = load ptr, ptr %4, align 8, !tbaa !5
  %413 = load ptr, ptr %5, align 8, !tbaa !5
  %414 = load ptr, ptr %4, align 8, !tbaa !5
  %415 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %414, i32 0, i32 23
  %416 = load ptr, ptr %4, align 8, !tbaa !5
  %417 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %416, i32 0, i32 15
  %418 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_implL15snnls_funcgraduEPNS_11snnlssolverEPNS_9ae_vectorES3_S3_PdPNS_8ae_stateE(ptr noundef %412, ptr noundef %413, ptr noundef %415, ptr noundef %417, ptr noundef %22, ptr noundef %418)
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %419

419:                                              ; preds = %465, %411
  %420 = load i64, ptr %7, align 8, !tbaa !17
  %421 = load i64, ptr %8, align 8, !tbaa !17
  %422 = load i64, ptr %9, align 8, !tbaa !17
  %423 = add nsw i64 %421, %422
  %424 = sub nsw i64 %423, 1
  %425 = icmp sle i64 %420, %424
  br i1 %425, label %426, label %468

426:                                              ; preds = %419
  %427 = load ptr, ptr %4, align 8, !tbaa !5
  %428 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %427, i32 0, i32 15
  %429 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %428, i32 0, i32 4
  %430 = load ptr, ptr %429, align 8, !tbaa !21
  %431 = load i64, ptr %7, align 8, !tbaa !17
  %432 = getelementptr inbounds double, ptr %430, i64 %431
  %433 = load double, ptr %432, align 8, !tbaa !22
  %434 = fneg double %433
  %435 = load ptr, ptr %4, align 8, !tbaa !5
  %436 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %435, i32 0, i32 16
  %437 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %436, i32 0, i32 4
  %438 = load ptr, ptr %437, align 8, !tbaa !21
  %439 = load i64, ptr %7, align 8, !tbaa !17
  %440 = getelementptr inbounds double, ptr %438, i64 %439
  store double %434, ptr %440, align 8, !tbaa !22
  %441 = load ptr, ptr %4, align 8, !tbaa !5
  %442 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %441, i32 0, i32 5
  %443 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %442, i32 0, i32 4
  %444 = load ptr, ptr %443, align 8, !tbaa !21
  %445 = load i64, ptr %7, align 8, !tbaa !17
  %446 = getelementptr inbounds i8, ptr %444, i64 %445
  %447 = load i8, ptr %446, align 1, !tbaa !23, !range !24, !noundef !25
  %448 = trunc i8 %447 to i1
  br i1 %448, label %449, label %464

449:                                              ; preds = %426
  %450 = load ptr, ptr %5, align 8, !tbaa !5
  %451 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %450, i32 0, i32 4
  %452 = load ptr, ptr %451, align 8, !tbaa !21
  %453 = load i64, ptr %7, align 8, !tbaa !17
  %454 = getelementptr inbounds double, ptr %452, i64 %453
  %455 = load double, ptr %454, align 8, !tbaa !22
  %456 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %455, double noundef 0.000000e+00)
  br i1 %456, label %457, label %464

457:                                              ; preds = %449
  %458 = load ptr, ptr %4, align 8, !tbaa !5
  %459 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %458, i32 0, i32 16
  %460 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %459, i32 0, i32 4
  %461 = load ptr, ptr %460, align 8, !tbaa !21
  %462 = load i64, ptr %7, align 8, !tbaa !17
  %463 = getelementptr inbounds double, ptr %461, i64 %462
  store double 0.000000e+00, ptr %463, align 8, !tbaa !22
  br label %464

464:                                              ; preds = %457, %449, %426
  br label %465

465:                                              ; preds = %464
  %466 = load i64, ptr %7, align 8, !tbaa !17
  %467 = add nsw i64 %466, 1
  store i64 %467, ptr %7, align 8, !tbaa !17
  br label %419, !llvm.loop !36

468:                                              ; preds = %419
  %469 = load ptr, ptr %4, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %469, i32 0, i32 13
  %471 = load ptr, ptr %4, align 8, !tbaa !5
  %472 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %471, i32 0, i32 12
  %473 = load i64, ptr %8, align 8, !tbaa !17
  %474 = load i64, ptr %9, align 8, !tbaa !17
  %475 = load ptr, ptr %4, align 8, !tbaa !5
  %476 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %475, i32 0, i32 16
  %477 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_implL14snnls_trdsolveEPNS_9ae_vectorEPNS_9ae_matrixEllS1_PNS_8ae_stateE(ptr noundef %470, ptr noundef %472, i64 noundef %473, i64 noundef %474, ptr noundef %476, ptr noundef %477)
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %478

478:                                              ; preds = %506, %468
  %479 = load i64, ptr %7, align 8, !tbaa !17
  %480 = load i64, ptr %8, align 8, !tbaa !17
  %481 = load i64, ptr %9, align 8, !tbaa !17
  %482 = add nsw i64 %480, %481
  %483 = sub nsw i64 %482, 1
  %484 = icmp sle i64 %479, %483
  br i1 %484, label %485, label %509

485:                                              ; preds = %478
  %486 = load ptr, ptr %5, align 8, !tbaa !5
  %487 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %486, i32 0, i32 4
  %488 = load ptr, ptr %487, align 8, !tbaa !21
  %489 = load i64, ptr %7, align 8, !tbaa !17
  %490 = getelementptr inbounds double, ptr %488, i64 %489
  %491 = load double, ptr %490, align 8, !tbaa !22
  %492 = load ptr, ptr %4, align 8, !tbaa !5
  %493 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %492, i32 0, i32 16
  %494 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %493, i32 0, i32 4
  %495 = load ptr, ptr %494, align 8, !tbaa !21
  %496 = load i64, ptr %7, align 8, !tbaa !17
  %497 = getelementptr inbounds double, ptr %495, i64 %496
  %498 = load double, ptr %497, align 8, !tbaa !22
  %499 = fadd double %491, %498
  %500 = load ptr, ptr %4, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %500, i32 0, i32 8
  %502 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %501, i32 0, i32 4
  %503 = load ptr, ptr %502, align 8, !tbaa !21
  %504 = load i64, ptr %7, align 8, !tbaa !17
  %505 = getelementptr inbounds double, ptr %503, i64 %504
  store double %499, ptr %505, align 8, !tbaa !22
  br label %506

506:                                              ; preds = %485
  %507 = load i64, ptr %7, align 8, !tbaa !17
  %508 = add nsw i64 %507, 1
  store i64 %508, ptr %7, align 8, !tbaa !17
  br label %478, !llvm.loop !37

509:                                              ; preds = %478
  %510 = load ptr, ptr %4, align 8, !tbaa !5
  %511 = load ptr, ptr %4, align 8, !tbaa !5
  %512 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %511, i32 0, i32 8
  %513 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_implL10snnls_funcEPNS_11snnlssolverEPNS_9ae_vectorEPdPNS_8ae_stateE(ptr noundef %510, ptr noundef %512, ptr noundef %23, ptr noundef %513)
  %514 = load double, ptr %23, align 8, !tbaa !22
  %515 = load double, ptr %22, align 8, !tbaa !22
  %516 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %514, double noundef %515)
  br i1 %516, label %517, label %518

517:                                              ; preds = %509
  br label %737

518:                                              ; preds = %509
  store double 0.000000e+00, ptr %24, align 8, !tbaa !22
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %519

519:                                              ; preds = %538, %518
  %520 = load i64, ptr %7, align 8, !tbaa !17
  %521 = load i64, ptr %8, align 8, !tbaa !17
  %522 = load i64, ptr %9, align 8, !tbaa !17
  %523 = add nsw i64 %521, %522
  %524 = sub nsw i64 %523, 1
  %525 = icmp sle i64 %520, %524
  br i1 %525, label %526, label %541

526:                                              ; preds = %519
  %527 = load double, ptr %24, align 8, !tbaa !22
  %528 = load ptr, ptr %4, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %528, i32 0, i32 16
  %530 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %529, i32 0, i32 4
  %531 = load ptr, ptr %530, align 8, !tbaa !21
  %532 = load i64, ptr %7, align 8, !tbaa !17
  %533 = getelementptr inbounds double, ptr %531, i64 %532
  %534 = load double, ptr %533, align 8, !tbaa !22
  %535 = load ptr, ptr %6, align 8, !tbaa !5
  %536 = call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef %534, ptr noundef %535)
  %537 = fadd double %527, %536
  store double %537, ptr %24, align 8, !tbaa !22
  br label %538

538:                                              ; preds = %526
  %539 = load i64, ptr %7, align 8, !tbaa !17
  %540 = add nsw i64 %539, 1
  store i64 %540, ptr %7, align 8, !tbaa !17
  br label %519, !llvm.loop !38

541:                                              ; preds = %519
  %542 = load double, ptr %24, align 8, !tbaa !22
  %543 = load ptr, ptr %6, align 8, !tbaa !5
  %544 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %542, ptr noundef %543)
  store double %544, ptr %24, align 8, !tbaa !22
  store i64 -1, ptr %25, align 8, !tbaa !17
  store double 1.000000e+50, ptr %27, align 8, !tbaa !22
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %545

545:                                              ; preds = %596, %541
  %546 = load i64, ptr %7, align 8, !tbaa !17
  %547 = load i64, ptr %8, align 8, !tbaa !17
  %548 = load i64, ptr %9, align 8, !tbaa !17
  %549 = add nsw i64 %547, %548
  %550 = sub nsw i64 %549, 1
  %551 = icmp sle i64 %546, %550
  br i1 %551, label %552, label %599

552:                                              ; preds = %545
  %553 = load ptr, ptr %4, align 8, !tbaa !5
  %554 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %553, i32 0, i32 5
  %555 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %554, i32 0, i32 4
  %556 = load ptr, ptr %555, align 8, !tbaa !21
  %557 = load i64, ptr %7, align 8, !tbaa !17
  %558 = getelementptr inbounds i8, ptr %556, i64 %557
  %559 = load i8, ptr %558, align 1, !tbaa !23, !range !24, !noundef !25
  %560 = trunc i8 %559 to i1
  br i1 %560, label %561, label %595

561:                                              ; preds = %552
  %562 = load ptr, ptr %4, align 8, !tbaa !5
  %563 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %562, i32 0, i32 16
  %564 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %563, i32 0, i32 4
  %565 = load ptr, ptr %564, align 8, !tbaa !21
  %566 = load i64, ptr %7, align 8, !tbaa !17
  %567 = getelementptr inbounds double, ptr %565, i64 %566
  %568 = load double, ptr %567, align 8, !tbaa !22
  %569 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %568, double noundef 0.000000e+00)
  br i1 %569, label %570, label %595

570:                                              ; preds = %561
  %571 = load double, ptr %27, align 8, !tbaa !22
  store double %571, ptr %15, align 8, !tbaa !22
  %572 = load ptr, ptr %5, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %572, i32 0, i32 4
  %574 = load ptr, ptr %573, align 8, !tbaa !21
  %575 = load i64, ptr %7, align 8, !tbaa !17
  %576 = getelementptr inbounds double, ptr %574, i64 %575
  %577 = load double, ptr %576, align 8, !tbaa !22
  %578 = load ptr, ptr %4, align 8, !tbaa !5
  %579 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %578, i32 0, i32 16
  %580 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %579, i32 0, i32 4
  %581 = load ptr, ptr %580, align 8, !tbaa !21
  %582 = load i64, ptr %7, align 8, !tbaa !17
  %583 = getelementptr inbounds double, ptr %581, i64 %582
  %584 = load double, ptr %583, align 8, !tbaa !22
  %585 = fneg double %584
  %586 = load double, ptr %27, align 8, !tbaa !22
  %587 = load ptr, ptr %6, align 8, !tbaa !5
  %588 = call noundef double @_ZN11alglib_impl12safeminposrvEdddPNS_8ae_stateE(double noundef %577, double noundef %585, double noundef %586, ptr noundef %587)
  store double %588, ptr %27, align 8, !tbaa !22
  %589 = load double, ptr %27, align 8, !tbaa !22
  %590 = load double, ptr %15, align 8, !tbaa !22
  %591 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %589, double noundef %590)
  br i1 %591, label %592, label %594

592:                                              ; preds = %570
  %593 = load i64, ptr %7, align 8, !tbaa !17
  store i64 %593, ptr %25, align 8, !tbaa !17
  br label %594

594:                                              ; preds = %592, %570
  br label %595

595:                                              ; preds = %594, %561, %552
  br label %596

596:                                              ; preds = %595
  %597 = load i64, ptr %7, align 8, !tbaa !17
  %598 = add nsw i64 %597, 1
  store i64 %598, ptr %7, align 8, !tbaa !17
  br label %545, !llvm.loop !39

599:                                              ; preds = %545
  %600 = load double, ptr %24, align 8, !tbaa !22
  %601 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %600, double noundef 0.000000e+00)
  br i1 %601, label %602, label %603

602:                                              ; preds = %599
  br label %737

603:                                              ; preds = %599
  %604 = load double, ptr %27, align 8, !tbaa !22
  %605 = load ptr, ptr %6, align 8, !tbaa !5
  %606 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef 1.000000e+00, double noundef %604, ptr noundef %605)
  store double %606, ptr %26, align 8, !tbaa !22
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %607

607:                                              ; preds = %650, %603
  %608 = load i64, ptr %7, align 8, !tbaa !17
  %609 = load i64, ptr %8, align 8, !tbaa !17
  %610 = load i64, ptr %9, align 8, !tbaa !17
  %611 = add nsw i64 %609, %610
  %612 = sub nsw i64 %611, 1
  %613 = icmp sle i64 %608, %612
  br i1 %613, label %614, label %653

614:                                              ; preds = %607
  %615 = load ptr, ptr %5, align 8, !tbaa !5
  %616 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %615, i32 0, i32 4
  %617 = load ptr, ptr %616, align 8, !tbaa !21
  %618 = load i64, ptr %7, align 8, !tbaa !17
  %619 = getelementptr inbounds double, ptr %617, i64 %618
  %620 = load double, ptr %619, align 8, !tbaa !22
  %621 = load double, ptr %26, align 8, !tbaa !22
  %622 = load ptr, ptr %4, align 8, !tbaa !5
  %623 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %622, i32 0, i32 16
  %624 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %623, i32 0, i32 4
  %625 = load ptr, ptr %624, align 8, !tbaa !21
  %626 = load i64, ptr %7, align 8, !tbaa !17
  %627 = getelementptr inbounds double, ptr %625, i64 %626
  %628 = load double, ptr %627, align 8, !tbaa !22
  %629 = call double @llvm.fmuladd.f64(double %621, double %628, double %620)
  store double %629, ptr %15, align 8, !tbaa !22
  %630 = load ptr, ptr %4, align 8, !tbaa !5
  %631 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %630, i32 0, i32 5
  %632 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %631, i32 0, i32 4
  %633 = load ptr, ptr %632, align 8, !tbaa !21
  %634 = load i64, ptr %7, align 8, !tbaa !17
  %635 = getelementptr inbounds i8, ptr %633, i64 %634
  %636 = load i8, ptr %635, align 1, !tbaa !23, !range !24, !noundef !25
  %637 = trunc i8 %636 to i1
  br i1 %637, label %638, label %642

638:                                              ; preds = %614
  %639 = load double, ptr %15, align 8, !tbaa !22
  %640 = load ptr, ptr %6, align 8, !tbaa !5
  %641 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %639, double noundef 0.000000e+00, ptr noundef %640)
  store double %641, ptr %15, align 8, !tbaa !22
  br label %642

642:                                              ; preds = %638, %614
  %643 = load double, ptr %15, align 8, !tbaa !22
  %644 = load ptr, ptr %4, align 8, !tbaa !5
  %645 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %644, i32 0, i32 8
  %646 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %645, i32 0, i32 4
  %647 = load ptr, ptr %646, align 8, !tbaa !21
  %648 = load i64, ptr %7, align 8, !tbaa !17
  %649 = getelementptr inbounds double, ptr %647, i64 %648
  store double %643, ptr %649, align 8, !tbaa !22
  br label %650

650:                                              ; preds = %642
  %651 = load i64, ptr %7, align 8, !tbaa !17
  %652 = add nsw i64 %651, 1
  store i64 %652, ptr %7, align 8, !tbaa !17
  br label %607, !llvm.loop !40

653:                                              ; preds = %607
  %654 = load double, ptr %26, align 8, !tbaa !22
  %655 = load double, ptr %27, align 8, !tbaa !22
  %656 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %654, double noundef %655)
  br i1 %656, label %657, label %667

657:                                              ; preds = %653
  %658 = load i64, ptr %25, align 8, !tbaa !17
  %659 = icmp sge i64 %658, 0
  br i1 %659, label %660, label %667

660:                                              ; preds = %657
  %661 = load ptr, ptr %4, align 8, !tbaa !5
  %662 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %661, i32 0, i32 8
  %663 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %662, i32 0, i32 4
  %664 = load ptr, ptr %663, align 8, !tbaa !21
  %665 = load i64, ptr %25, align 8, !tbaa !17
  %666 = getelementptr inbounds double, ptr %664, i64 %665
  store double 0.000000e+00, ptr %666, align 8, !tbaa !22
  br label %667

667:                                              ; preds = %660, %657, %653
  store i8 0, ptr %11, align 1, !tbaa !23
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %668

668:                                              ; preds = %704, %667
  %669 = load i64, ptr %7, align 8, !tbaa !17
  %670 = load i64, ptr %8, align 8, !tbaa !17
  %671 = load i64, ptr %9, align 8, !tbaa !17
  %672 = add nsw i64 %670, %671
  %673 = sub nsw i64 %672, 1
  %674 = icmp sle i64 %669, %673
  br i1 %674, label %675, label %707

675:                                              ; preds = %668
  %676 = load ptr, ptr %4, align 8, !tbaa !5
  %677 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %676, i32 0, i32 8
  %678 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %677, i32 0, i32 4
  %679 = load ptr, ptr %678, align 8, !tbaa !21
  %680 = load i64, ptr %7, align 8, !tbaa !17
  %681 = getelementptr inbounds double, ptr %679, i64 %680
  %682 = load double, ptr %681, align 8, !tbaa !22
  %683 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %682, double noundef 0.000000e+00)
  br i1 %683, label %684, label %703

684:                                              ; preds = %675
  %685 = load ptr, ptr %5, align 8, !tbaa !5
  %686 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %685, i32 0, i32 4
  %687 = load ptr, ptr %686, align 8, !tbaa !21
  %688 = load i64, ptr %7, align 8, !tbaa !17
  %689 = getelementptr inbounds double, ptr %687, i64 %688
  %690 = load double, ptr %689, align 8, !tbaa !22
  %691 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %690, double noundef 0.000000e+00)
  br i1 %691, label %692, label %703

692:                                              ; preds = %684
  store i8 1, ptr %11, align 1, !tbaa !23
  %693 = load ptr, ptr %4, align 8, !tbaa !5
  %694 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %693, i32 0, i32 13
  %695 = load ptr, ptr %4, align 8, !tbaa !5
  %696 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %695, i32 0, i32 12
  %697 = load i64, ptr %8, align 8, !tbaa !17
  %698 = load i64, ptr %9, align 8, !tbaa !17
  %699 = load i64, ptr %7, align 8, !tbaa !17
  %700 = load ptr, ptr %4, align 8, !tbaa !5
  %701 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %700, i32 0, i32 22
  %702 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_implL20snnls_trdfixvariableEPNS_9ae_vectorEPNS_9ae_matrixElllS1_PNS_8ae_stateE(ptr noundef %694, ptr noundef %696, i64 noundef %697, i64 noundef %698, i64 noundef %699, ptr noundef %701, ptr noundef %702)
  br label %703

703:                                              ; preds = %692, %684, %675
  br label %704

704:                                              ; preds = %703
  %705 = load i64, ptr %7, align 8, !tbaa !17
  %706 = add nsw i64 %705, 1
  store i64 %706, ptr %7, align 8, !tbaa !17
  br label %668, !llvm.loop !41

707:                                              ; preds = %668
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %708

708:                                              ; preds = %728, %707
  %709 = load i64, ptr %7, align 8, !tbaa !17
  %710 = load i64, ptr %8, align 8, !tbaa !17
  %711 = load i64, ptr %9, align 8, !tbaa !17
  %712 = add nsw i64 %710, %711
  %713 = sub nsw i64 %712, 1
  %714 = icmp sle i64 %709, %713
  br i1 %714, label %715, label %731

715:                                              ; preds = %708
  %716 = load ptr, ptr %4, align 8, !tbaa !5
  %717 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %716, i32 0, i32 8
  %718 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %717, i32 0, i32 4
  %719 = load ptr, ptr %718, align 8, !tbaa !21
  %720 = load i64, ptr %7, align 8, !tbaa !17
  %721 = getelementptr inbounds double, ptr %719, i64 %720
  %722 = load double, ptr %721, align 8, !tbaa !22
  %723 = load ptr, ptr %5, align 8, !tbaa !5
  %724 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %723, i32 0, i32 4
  %725 = load ptr, ptr %724, align 8, !tbaa !21
  %726 = load i64, ptr %7, align 8, !tbaa !17
  %727 = getelementptr inbounds double, ptr %725, i64 %726
  store double %722, ptr %727, align 8, !tbaa !22
  br label %728

728:                                              ; preds = %715
  %729 = load i64, ptr %7, align 8, !tbaa !17
  %730 = add nsw i64 %729, 1
  store i64 %730, ptr %7, align 8, !tbaa !17
  br label %708, !llvm.loop !42

731:                                              ; preds = %708
  %732 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef %17, ptr noundef %732)
  %733 = load i8, ptr %11, align 1, !tbaa !23, !range !24, !noundef !25
  %734 = trunc i8 %733 to i1
  br i1 %734, label %736, label %735

735:                                              ; preds = %731
  br label %737

736:                                              ; preds = %731
  br label %399, !llvm.loop !43

737:                                              ; preds = %735, %602, %517, %410
  %738 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef %16, ptr noundef %738)
  %739 = load i64, ptr %16, align 8, !tbaa !17
  %740 = load i64, ptr %18, align 8, !tbaa !17
  %741 = icmp sge i64 %739, %740
  br i1 %741, label %742, label %743

742:                                              ; preds = %737
  br label %809

743:                                              ; preds = %737
  store double 0.000000e+00, ptr %15, align 8, !tbaa !22
  store i64 0, ptr %7, align 8, !tbaa !17
  br label %744

744:                                              ; preds = %800, %743
  %745 = load i64, ptr %7, align 8, !tbaa !17
  %746 = load i64, ptr %8, align 8, !tbaa !17
  %747 = load i64, ptr %9, align 8, !tbaa !17
  %748 = add nsw i64 %746, %747
  %749 = sub nsw i64 %748, 1
  %750 = icmp sle i64 %745, %749
  br i1 %750, label %751, label %803

751:                                              ; preds = %744
  %752 = load ptr, ptr %4, align 8, !tbaa !5
  %753 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %752, i32 0, i32 9
  %754 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %753, i32 0, i32 4
  %755 = load ptr, ptr %754, align 8, !tbaa !21
  %756 = load i64, ptr %7, align 8, !tbaa !17
  %757 = getelementptr inbounds double, ptr %755, i64 %756
  %758 = load double, ptr %757, align 8, !tbaa !22
  %759 = load ptr, ptr %6, align 8, !tbaa !5
  %760 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %758, ptr noundef %759)
  store double %760, ptr %13, align 8, !tbaa !22
  %761 = load ptr, ptr %5, align 8, !tbaa !5
  %762 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %761, i32 0, i32 4
  %763 = load ptr, ptr %762, align 8, !tbaa !21
  %764 = load i64, ptr %7, align 8, !tbaa !17
  %765 = getelementptr inbounds double, ptr %763, i64 %764
  %766 = load double, ptr %765, align 8, !tbaa !22
  %767 = load ptr, ptr %6, align 8, !tbaa !5
  %768 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %766, ptr noundef %767)
  store double %768, ptr %14, align 8, !tbaa !22
  %769 = load double, ptr %13, align 8, !tbaa !22
  %770 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %769, double noundef 0.000000e+00)
  br i1 %770, label %774, label %771

771:                                              ; preds = %751
  %772 = load double, ptr %14, align 8, !tbaa !22
  %773 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %772, double noundef 0.000000e+00)
  br i1 %773, label %774, label %799

774:                                              ; preds = %771, %751
  %775 = load double, ptr %15, align 8, !tbaa !22
  %776 = load ptr, ptr %5, align 8, !tbaa !5
  %777 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %776, i32 0, i32 4
  %778 = load ptr, ptr %777, align 8, !tbaa !21
  %779 = load i64, ptr %7, align 8, !tbaa !17
  %780 = getelementptr inbounds double, ptr %778, i64 %779
  %781 = load double, ptr %780, align 8, !tbaa !22
  %782 = load ptr, ptr %4, align 8, !tbaa !5
  %783 = getelementptr inbounds %"struct.alglib_impl::snnlssolver", ptr %782, i32 0, i32 9
  %784 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %783, i32 0, i32 4
  %785 = load ptr, ptr %784, align 8, !tbaa !21
  %786 = load i64, ptr %7, align 8, !tbaa !17
  %787 = getelementptr inbounds double, ptr %785, i64 %786
  %788 = load double, ptr %787, align 8, !tbaa !22
  %789 = fsub double %781, %788
  %790 = load ptr, ptr %6, align 8, !tbaa !5
  %791 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %789, ptr noundef %790)
  %792 = load double, ptr %13, align 8, !tbaa !22
  %793 = load double, ptr %14, align 8, !tbaa !22
  %794 = load ptr, ptr %6, align 8, !tbaa !5
  %795 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %792, double noundef %793, ptr noundef %794)
  %796 = fdiv double %791, %795
  %797 = load ptr, ptr %6, align 8, !tbaa !5
  %798 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %775, double noundef %796, ptr noundef %797)
  store double %798, ptr %15, align 8, !tbaa !22
  br label %799

799:                                              ; preds = %774, %771
  br label %800

800:                                              ; preds = %799
  %801 = load i64, ptr %7, align 8, !tbaa !17
  %802 = add nsw i64 %801, 1
  store i64 %802, ptr %7, align 8, !tbaa !17
  br label %744, !llvm.loop !44

803:                                              ; preds = %744
  %804 = load double, ptr %15, align 8, !tbaa !22
  %805 = load double, ptr %19, align 8, !tbaa !22
  %806 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %804, double noundef %805)
  br i1 %806, label %807, label %808

807:                                              ; preds = %803
  br label %809

808:                                              ; preds = %803
  br label %172, !llvm.loop !33

809:                                              ; preds = %807, %742
  store i32 0, ptr %28, align 4
  br label %810

810:                                              ; preds = %809, %96, %44
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 1, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  %811 = load i32, ptr %28, align 4
  switch i32 %811, label %813 [
    i32 0, label %812
    i32 1, label %812
  ]

812:                                              ; preds = %810, %810
  ret void

813:                                              ; preds = %810
  unreachable
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN11alglib_implL14snnls_trdsolveEPNS_9ae_vectorEPNS_9ae_matrixEllS1_PNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) #4

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

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

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 = { mustprogress nounwind 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 #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 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !11, i64 0}
!10 = !{!"_ZTSN11alglib_impl11snnlssolverE", !11, i64 0, !11, i64 8, !11, i64 16, !12, i64 24, !15, i64 104, !15, i64 168, !16, i64 232, !11, i64 240, !15, i64 248, !15, i64 312, !12, i64 376, !12, i64 456, !12, i64 536, !15, i64 616, !15, i64 680, !15, i64 744, !15, i64 808, !15, i64 872, !15, i64 936, !15, i64 1000, !15, i64 1064, !15, i64 1128, !15, i64 1192, !15, i64 1256, !15, i64 1320, !15, i64 1384, !15, i64 1448, !15, i64 1512, !15, i64 1576}
!11 = !{!"long", !7, i64 0}
!12 = !{!"_ZTSN11alglib_impl9ae_matrixE", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !13, i64 32, !14, i64 40, !7, i64 72}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!15 = !{!"_ZTSN11alglib_impl9ae_vectorE", !11, i64 0, !11, i64 8, !13, i64 16, !14, i64 24, !7, i64 56}
!16 = !{!"double", !7, i64 0}
!17 = !{!11, !11, i64 0}
!18 = !{!10, !11, i64 8}
!19 = !{!10, !11, i64 16}
!20 = !{!10, !16, i64 232}
!21 = !{!7, !7, i64 0}
!22 = !{!16, !16, i64 0}
!23 = !{!13, !13, i64 0}
!24 = !{i8 0, i8 2}
!25 = !{}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.mustprogress"}
!28 = distinct !{!28, !27}
!29 = distinct !{!29, !27}
!30 = distinct !{!30, !27}
!31 = distinct !{!31, !27}
!32 = distinct !{!32, !27}
!33 = distinct !{!33, !27}
!34 = distinct !{!34, !27}
!35 = !{!10, !11, i64 240}
!36 = distinct !{!36, !27}
!37 = distinct !{!37, !27}
!38 = distinct !{!38, !27}
!39 = distinct !{!39, !27}
!40 = distinct !{!40, !27}
!41 = distinct !{!41, !27}
!42 = distinct !{!42, !27}
!43 = distinct !{!43, !27}
!44 = distinct !{!44, !27}


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

@.str.153 = external hidden unnamed_addr constant [30 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 void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

declare noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef, double noundef) local_unnamed_addr #1

declare noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef, double noundef) local_unnamed_addr #1

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef, double noundef) local_unnamed_addr #1

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

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

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef, double noundef) local_unnamed_addr #1

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

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

declare void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef, ptr noundef) local_unnamed_addr #1

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

16:                                               ; preds = %3
  %17 = icmp eq i64 %10, 0
  br i1 %17, label %18, label %41

18:                                               ; preds = %16
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1, i64 noundef %8, ptr noundef %2)
  %.not312.not392 = icmp sgt i64 %8, 0
  br i1 %.not312.not392, label %.lr.ph395, label %.loopexit

.lr.ph395:                                        ; preds = %18
  %19 = getelementptr inbounds i8, ptr %0, i64 160
  %20 = getelementptr inbounds i8, ptr %1, i64 56
  %21 = getelementptr inbounds i8, ptr %0, i64 224
  br label %22

22:                                               ; preds = %.lr.ph395, %39
  %.0283393 = phi i64 [ 0, %.lr.ph395 ], [ %40, %39 ]
  %23 = load ptr, ptr %19, align 8, !tbaa !19
  %24 = getelementptr inbounds double, ptr %23, i64 %.0283393
  %25 = load double, ptr %24, align 8, !tbaa !20
  %26 = load ptr, ptr %20, align 8, !tbaa !19
  %27 = getelementptr inbounds double, ptr %26, i64 %.0283393
  store double %25, ptr %27, align 8, !tbaa !20
  %28 = load ptr, ptr %21, align 8, !tbaa !19
  %29 = getelementptr inbounds i8, ptr %28, i64 %.0283393
  %30 = load i8, ptr %29, align 1, !tbaa !21, !range !22, !noundef !23
  %31 = trunc nuw i8 %30 to i1
  br i1 %31, label %32, label %39

32:                                               ; preds = %22
  %33 = load ptr, ptr %20, align 8, !tbaa !19
  %34 = getelementptr inbounds double, ptr %33, i64 %.0283393
  %35 = load double, ptr %34, align 8, !tbaa !20
  %36 = tail call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %35, double noundef 0.000000e+00, ptr noundef %2)
  %37 = load ptr, ptr %20, align 8, !tbaa !19
  %38 = getelementptr inbounds double, ptr %37, i64 %.0283393
  store double %36, ptr %38, align 8, !tbaa !20
  br label %39

39:                                               ; preds = %22, %32
  %40 = add nuw nsw i64 %.0283393, 1
  %exitcond410.not = icmp eq i64 %40, %8
  br i1 %exitcond410.not, label %.loopexit, label %22, !llvm.loop !24

41:                                               ; preds = %16
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1, i64 noundef %14, ptr noundef %2)
  %42 = getelementptr inbounds i8, ptr %0, i64 248
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %42, i64 noundef %14, ptr noundef %2)
  %43 = getelementptr inbounds i8, ptr %0, i64 312
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %43, i64 noundef %14, ptr noundef %2)
  %44 = getelementptr inbounds i8, ptr %0, i64 744
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %44, i64 noundef %14, ptr noundef %2)
  %45 = getelementptr inbounds i8, ptr %0, i64 808
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %45, i64 noundef %14, ptr noundef %2)
  %46 = getelementptr inbounds i8, ptr %0, i64 1256
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %46, i64 noundef %12, ptr noundef %2)
  %47 = getelementptr inbounds i8, ptr %0, i64 936
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %47, i64 noundef %10, ptr noundef %2)
  %48 = getelementptr inbounds i8, ptr %0, i64 1320
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %48, i64 noundef %14, ptr noundef %2)
  %49 = getelementptr inbounds i8, ptr %0, i64 872
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %49, i64 noundef %14, ptr noundef %2)
  %.not.not322 = icmp sgt i64 %14, 0
  br i1 %.not.not322, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %41
  %50 = getelementptr inbounds i8, ptr %1, i64 56
  %51 = getelementptr inbounds i8, ptr %0, i64 1376
  %52 = add i64 %10, %8
  %xtraiter = and i64 %14, 1
  %53 = icmp eq i64 %52, 1
  br i1 %53, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.lr.ph
  %unroll_iter = and i64 %14, 9223372036854775806
  br label %54

54:                                               ; preds = %54, %.lr.ph.new
  %.1284323 = phi i64 [ 0, %.lr.ph.new ], [ %64, %54 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.1, %54 ]
  %55 = load ptr, ptr %50, align 8, !tbaa !19
  %56 = getelementptr inbounds double, ptr %55, i64 %.1284323
  store double 0.000000e+00, ptr %56, align 8, !tbaa !20
  %57 = load ptr, ptr %51, align 8, !tbaa !19
  %58 = getelementptr inbounds double, ptr %57, i64 %.1284323
  store double 1.000000e+00, ptr %58, align 8, !tbaa !20
  %59 = or disjoint i64 %.1284323, 1
  %60 = load ptr, ptr %50, align 8, !tbaa !19
  %61 = getelementptr inbounds double, ptr %60, i64 %59
  store double 0.000000e+00, ptr %61, align 8, !tbaa !20
  %62 = load ptr, ptr %51, align 8, !tbaa !19
  %63 = getelementptr inbounds double, ptr %62, i64 %59
  store double 1.000000e+00, ptr %63, align 8, !tbaa !20
  %64 = add nuw nsw i64 %.1284323, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.loopexit.unr-lcssa, label %54, !llvm.loop !26

._crit_edge.loopexit.unr-lcssa:                   ; preds = %54, %.lr.ph
  %.1284323.unr = phi i64 [ 0, %.lr.ph ], [ %64, %54 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %._crit_edge.loopexit.epilog-lcssa

._crit_edge.loopexit.epilog-lcssa:                ; preds = %._crit_edge.loopexit.unr-lcssa
  %65 = load ptr, ptr %50, align 8, !tbaa !19
  %66 = getelementptr inbounds double, ptr %65, i64 %.1284323.unr
  store double 0.000000e+00, ptr %66, align 8, !tbaa !20
  %67 = load ptr, ptr %51, align 8, !tbaa !19
  %68 = getelementptr inbounds double, ptr %67, i64 %.1284323.unr
  store double 1.000000e+00, ptr %68, align 8, !tbaa !20
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit.epilog-lcssa, %._crit_edge.loopexit.unr-lcssa, %41
  store i64 0, ptr %4, align 8, !tbaa !27
  store i64 0, ptr %5, align 8, !tbaa !27
  %69 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef 1.000000e-300, ptr noundef %2)
  %70 = getelementptr inbounds i8, ptr %0, i64 224
  %71 = getelementptr inbounds i8, ptr %1, i64 56
  %72 = getelementptr inbounds i8, ptr %0, i64 800
  %73 = getelementptr inbounds i8, ptr %0, i64 864
  %74 = getelementptr inbounds i8, ptr %0, i64 368
  %75 = getelementptr inbounds i8, ptr %0, i64 616
  %76 = getelementptr inbounds i8, ptr %0, i64 536
  %77 = getelementptr inbounds i8, ptr %0, i64 1384
  %78 = getelementptr inbounds i8, ptr %0, i64 1448
  %79 = getelementptr inbounds i8, ptr %0, i64 1512
  %80 = getelementptr inbounds i8, ptr %0, i64 456
  %81 = getelementptr inbounds i8, ptr %0, i64 240
  %82 = getelementptr inbounds i8, ptr %0, i64 304
  %83 = getelementptr inbounds i8, ptr %0, i64 1192
  %84 = add i64 %10, %8
  %85 = add i64 %84, -1
  %xtraiter420 = and i64 %14, 3
  %86 = icmp ult i64 %85, 3
  %unroll_iter422 = and i64 %14, 9223372036854775804
  %lcmp.mod421.not = icmp eq i64 %xtraiter420, 0
  %xtraiter424 = and i64 %14, 1
  %87 = icmp eq i64 %85, 0
  %unroll_iter427 = and i64 %14, 9223372036854775806
  %lcmp.mod426.not = icmp eq i64 %xtraiter424, 0
  %xtraiter429 = and i64 %14, 3
  %88 = icmp ult i64 %85, 3
  %unroll_iter432 = and i64 %14, 9223372036854775804
  %lcmp.mod431.not = icmp eq i64 %xtraiter429, 0
  br label %89

89:                                               ; preds = %.backedge, %._crit_edge
  br i1 %.not.not322, label %.lr.ph327, label %._crit_edge328.thread

._crit_edge328.thread:                            ; preds = %89
  call void @_ZN11alglib_implL15snnls_funcgraduEPNS_11snnlssolverEPNS_9ae_vectorES3_S3_PdPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %46, ptr noundef nonnull %44, ptr noundef nonnull %6, ptr noundef %2)
  br label %._crit_edge342

.lr.ph327:                                        ; preds = %89, %99
  %.2325 = phi i64 [ %101, %99 ], [ 0, %89 ]
  %90 = load ptr, ptr %70, align 8, !tbaa !19
  %91 = getelementptr inbounds i8, ptr %90, i64 %.2325
  %92 = load i8, ptr %91, align 1, !tbaa !21, !range !22, !noundef !23
  %93 = trunc nuw i8 %92 to i1
  br i1 %93, label %94, label %99

94:                                               ; preds = %.lr.ph327
  %95 = load ptr, ptr %71, align 8, !tbaa !19
  %96 = getelementptr inbounds double, ptr %95, i64 %.2325
  %97 = load double, ptr %96, align 8, !tbaa !20
  %98 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %97, double noundef 0.000000e+00)
  br label %99

99:                                               ; preds = %94, %.lr.ph327
  %100 = phi i1 [ true, %.lr.ph327 ], [ %98, %94 ]
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %100, ptr noundef nonnull @.str.153, ptr noundef %2)
  %101 = add nuw nsw i64 %.2325, 1
  %exitcond397.not = icmp eq i64 %101, %14
  br i1 %exitcond397.not, label %._crit_edge328, label %.lr.ph327, !llvm.loop !28

._crit_edge328:                                   ; preds = %99
  call void @_ZN11alglib_implL15snnls_funcgraduEPNS_11snnlssolverEPNS_9ae_vectorES3_S3_PdPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %46, ptr noundef nonnull %44, ptr noundef nonnull %6, ptr noundef %2)
  br i1 %.not.not322, label %.lr.ph333, label %._crit_edge342

.preheader320:                                    ; preds = %121
  br i1 %.not.not322, label %.lr.ph337, label %._crit_edge342

.lr.ph333:                                        ; preds = %._crit_edge328, %121
  %.3330 = phi i64 [ %124, %121 ], [ 0, %._crit_edge328 ]
  %102 = load ptr, ptr %70, align 8, !tbaa !19
  %103 = getelementptr inbounds i8, ptr %102, i64 %.3330
  %104 = load i8, ptr %103, align 1, !tbaa !21, !range !22, !noundef !23
  %105 = trunc nuw i8 %104 to i1
  br i1 %105, label %106, label %116

106:                                              ; preds = %.lr.ph333
  %107 = load ptr, ptr %71, align 8, !tbaa !19
  %108 = getelementptr inbounds double, ptr %107, i64 %.3330
  %109 = load double, ptr %108, align 8, !tbaa !20
  %110 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %109, double noundef 0.000000e+00)
  br i1 %110, label %111, label %116

111:                                              ; preds = %106
  %112 = load ptr, ptr %72, align 8, !tbaa !19
  %113 = getelementptr inbounds double, ptr %112, i64 %.3330
  %114 = load double, ptr %113, align 8, !tbaa !20
  %115 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %114, double noundef 0.000000e+00)
  br i1 %115, label %121, label %116

116:                                              ; preds = %111, %106, %.lr.ph333
  %117 = load ptr, ptr %72, align 8, !tbaa !19
  %118 = getelementptr inbounds double, ptr %117, i64 %.3330
  %119 = load double, ptr %118, align 8, !tbaa !20
  %120 = fneg double %119
  br label %121

121:                                              ; preds = %111, %116
  %.sink = phi double [ %120, %116 ], [ 0.000000e+00, %111 ]
  %122 = load ptr, ptr %73, align 8, !tbaa !19
  %123 = getelementptr inbounds double, ptr %122, i64 %.3330
  store double %.sink, ptr %123, align 8, !tbaa !20
  %124 = add nuw nsw i64 %.3330, 1
  %exitcond398.not = icmp eq i64 %124, %14
  br i1 %exitcond398.not, label %.preheader320, label %.lr.ph333, !llvm.loop !29

.lr.ph337:                                        ; preds = %.preheader320, %139
  %.4336 = phi i64 [ %140, %139 ], [ 0, %.preheader320 ]
  %.0288335 = phi i1 [ %.1289, %139 ], [ false, %.preheader320 ]
  %125 = load ptr, ptr %70, align 8, !tbaa !19
  %126 = getelementptr inbounds i8, ptr %125, i64 %.4336
  %127 = load i8, ptr %126, align 1, !tbaa !21, !range !22, !noundef !23
  %128 = trunc nuw i8 %127 to i1
  br i1 %128, label %129, label %139

129:                                              ; preds = %.lr.ph337
  %130 = load ptr, ptr %71, align 8, !tbaa !19
  %131 = getelementptr inbounds double, ptr %130, i64 %.4336
  %132 = load double, ptr %131, align 8, !tbaa !20
  %133 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %132, double noundef 0.000000e+00)
  br i1 %133, label %134, label %139

134:                                              ; preds = %129
  %135 = load ptr, ptr %73, align 8, !tbaa !19
  %136 = getelementptr inbounds double, ptr %135, i64 %.4336
  %137 = load double, ptr %136, align 8, !tbaa !20
  %138 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %137, double noundef 0.000000e+00)
  %spec.select = select i1 %138, i1 true, i1 %.0288335
  br label %139

139:                                              ; preds = %134, %.lr.ph337, %129
  %.1289 = phi i1 [ %.0288335, %129 ], [ %.0288335, %.lr.ph337 ], [ %spec.select, %134 ]
  %140 = add nuw nsw i64 %.4336, 1
  %exitcond399.not = icmp eq i64 %140, %14
  br i1 %exitcond399.not, label %._crit_edge338, label %.lr.ph337, !llvm.loop !30

._crit_edge338:                                   ; preds = %139
  br i1 %.1289, label %.lr.ph391, label %.preheader319

.preheader319:                                    ; preds = %._crit_edge338
  br i1 %.not.not322, label %.lr.ph341.preheader, label %._crit_edge342

.lr.ph341.preheader:                              ; preds = %.preheader319
  br i1 %86, label %._crit_edge342.loopexit.unr-lcssa, label %.lr.ph341

.lr.ph391:                                        ; preds = %._crit_edge338, %155
  %.5390 = phi i64 [ %156, %155 ], [ 0, %._crit_edge338 ]
  %141 = load ptr, ptr %71, align 8, !tbaa !19
  %142 = getelementptr inbounds double, ptr %141, i64 %.5390
  %143 = load double, ptr %142, align 8, !tbaa !20
  %144 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %143, double noundef 0.000000e+00)
  br i1 %144, label %145, label %155

145:                                              ; preds = %.lr.ph391
  %146 = load ptr, ptr %73, align 8, !tbaa !19
  %147 = getelementptr inbounds double, ptr %146, i64 %.5390
  %148 = load double, ptr %147, align 8, !tbaa !20
  %149 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %148, double noundef 0.000000e+00)
  br i1 %149, label %150, label %155

150:                                              ; preds = %145
  %151 = load ptr, ptr %71, align 8, !tbaa !19
  %152 = getelementptr inbounds double, ptr %151, i64 %.5390
  %153 = load double, ptr %152, align 8, !tbaa !20
  %154 = fadd double %69, %153
  store double %154, ptr %152, align 8, !tbaa !20
  br label %155

155:                                              ; preds = %.lr.ph391, %145, %150
  %156 = add nuw nsw i64 %.5390, 1
  %exitcond409.not = icmp eq i64 %156, %14
  br i1 %exitcond409.not, label %.backedge, label %.lr.ph391, !llvm.loop !31

.lr.ph341:                                        ; preds = %.lr.ph341.preheader, %.lr.ph341
  %.6340 = phi i64 [ %180, %.lr.ph341 ], [ 0, %.lr.ph341.preheader ]
  %niter423 = phi i64 [ %niter423.next.3, %.lr.ph341 ], [ 0, %.lr.ph341.preheader ]
  %157 = load ptr, ptr %71, align 8, !tbaa !19
  %158 = getelementptr inbounds double, ptr %157, i64 %.6340
  %159 = load double, ptr %158, align 8, !tbaa !20
  %160 = load ptr, ptr %74, align 8, !tbaa !19
  %161 = getelementptr inbounds double, ptr %160, i64 %.6340
  store double %159, ptr %161, align 8, !tbaa !20
  %162 = or disjoint i64 %.6340, 1
  %163 = load ptr, ptr %71, align 8, !tbaa !19
  %164 = getelementptr inbounds double, ptr %163, i64 %162
  %165 = load double, ptr %164, align 8, !tbaa !20
  %166 = load ptr, ptr %74, align 8, !tbaa !19
  %167 = getelementptr inbounds double, ptr %166, i64 %162
  store double %165, ptr %167, align 8, !tbaa !20
  %168 = or disjoint i64 %.6340, 2
  %169 = load ptr, ptr %71, align 8, !tbaa !19
  %170 = getelementptr inbounds double, ptr %169, i64 %168
  %171 = load double, ptr %170, align 8, !tbaa !20
  %172 = load ptr, ptr %74, align 8, !tbaa !19
  %173 = getelementptr inbounds double, ptr %172, i64 %168
  store double %171, ptr %173, align 8, !tbaa !20
  %174 = or disjoint i64 %.6340, 3
  %175 = load ptr, ptr %71, align 8, !tbaa !19
  %176 = getelementptr inbounds double, ptr %175, i64 %174
  %177 = load double, ptr %176, align 8, !tbaa !20
  %178 = load ptr, ptr %74, align 8, !tbaa !19
  %179 = getelementptr inbounds double, ptr %178, i64 %174
  store double %177, ptr %179, align 8, !tbaa !20
  %180 = add nuw nsw i64 %.6340, 4
  %niter423.next.3 = add i64 %niter423, 4
  %niter423.ncmp.3 = icmp eq i64 %niter423.next.3, %unroll_iter422
  br i1 %niter423.ncmp.3, label %._crit_edge342.loopexit.unr-lcssa, label %.lr.ph341, !llvm.loop !32

._crit_edge342.loopexit.unr-lcssa:                ; preds = %.lr.ph341, %.lr.ph341.preheader
  %.6340.unr = phi i64 [ 0, %.lr.ph341.preheader ], [ %180, %.lr.ph341 ]
  br i1 %lcmp.mod421.not, label %._crit_edge342, label %.lr.ph341.epil

.lr.ph341.epil:                                   ; preds = %._crit_edge342.loopexit.unr-lcssa, %.lr.ph341.epil
  %.6340.epil = phi i64 [ %186, %.lr.ph341.epil ], [ %.6340.unr, %._crit_edge342.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph341.epil ], [ 0, %._crit_edge342.loopexit.unr-lcssa ]
  %181 = load ptr, ptr %71, align 8, !tbaa !19
  %182 = getelementptr inbounds double, ptr %181, i64 %.6340.epil
  %183 = load double, ptr %182, align 8, !tbaa !20
  %184 = load ptr, ptr %74, align 8, !tbaa !19
  %185 = getelementptr inbounds double, ptr %184, i64 %.6340.epil
  store double %183, ptr %185, align 8, !tbaa !20
  %186 = add nuw nsw i64 %.6340.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter420
  br i1 %epil.iter.cmp.not, label %._crit_edge342, label %.lr.ph341.epil, !llvm.loop !33

._crit_edge342:                                   ; preds = %._crit_edge342.loopexit.unr-lcssa, %.lr.ph341.epil, %._crit_edge328, %._crit_edge328.thread, %.preheader320, %.preheader319
  call void @_ZN11alglib_implL16snnls_trdprepareEPNS_11snnlssolverEPNS_9ae_vectorES3_dS3_PNS_9ae_matrixES3_S3_S3_S5_PNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %48, double noundef 5.000000e-10, ptr noundef nonnull %75, ptr noundef nonnull %76, ptr noundef nonnull %77, ptr noundef nonnull %78, ptr noundef nonnull %79, ptr noundef nonnull %80, ptr noundef %2)
  br label %187

187:                                              ; preds = %._crit_edge382, %._crit_edge342
  %188 = load i64, ptr %81, align 8, !tbaa !35
  %189 = icmp slt i64 %188, 1
  %190 = load i64, ptr %5, align 8
  %.not = icmp slt i64 %190, %188
  %or.cond313 = select i1 %189, i1 true, i1 %.not
  br i1 %or.cond313, label %191, label %342

191:                                              ; preds = %187
  call void @_ZN11alglib_implL15snnls_funcgraduEPNS_11snnlssolverEPNS_9ae_vectorES3_S3_PdPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %1, ptr noundef nonnull %46, ptr noundef nonnull %44, ptr noundef nonnull %6, ptr noundef %2)
  br i1 %.not.not322, label %.lr.ph346, label %._crit_edge347.thread

._crit_edge347.thread:                            ; preds = %191
  call void @_ZN11alglib_implL14snnls_trdsolveEPNS_9ae_vectorEPNS_9ae_matrixEllS1_PNS_8ae_stateE(ptr noundef nonnull %75, ptr noundef nonnull %76, i64 noundef %8, i64 noundef %10, ptr noundef nonnull %45, ptr noundef %2)
  br label %._crit_edge352

.lr.ph346:                                        ; preds = %191, %210
  %.7344 = phi i64 [ %211, %210 ], [ 0, %191 ]
  %192 = load ptr, ptr %72, align 8, !tbaa !19
  %193 = getelementptr inbounds double, ptr %192, i64 %.7344
  %194 = load double, ptr %193, align 8, !tbaa !20
  %195 = fneg double %194
  %196 = load ptr, ptr %73, align 8, !tbaa !19
  %197 = getelementptr inbounds double, ptr %196, i64 %.7344
  store double %195, ptr %197, align 8, !tbaa !20
  %198 = load ptr, ptr %70, align 8, !tbaa !19
  %199 = getelementptr inbounds i8, ptr %198, i64 %.7344
  %200 = load i8, ptr %199, align 1, !tbaa !21, !range !22, !noundef !23
  %201 = trunc nuw i8 %200 to i1
  br i1 %201, label %202, label %210

202:                                              ; preds = %.lr.ph346
  %203 = load ptr, ptr %71, align 8, !tbaa !19
  %204 = getelementptr inbounds double, ptr %203, i64 %.7344
  %205 = load double, ptr %204, align 8, !tbaa !20
  %206 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %205, double noundef 0.000000e+00)
  br i1 %206, label %207, label %210

207:                                              ; preds = %202
  %208 = load ptr, ptr %73, align 8, !tbaa !19
  %209 = getelementptr inbounds double, ptr %208, i64 %.7344
  store double 0.000000e+00, ptr %209, align 8, !tbaa !20
  br label %210

210:                                              ; preds = %.lr.ph346, %202, %207
  %211 = add nuw nsw i64 %.7344, 1
  %exitcond401.not = icmp eq i64 %211, %14
  br i1 %exitcond401.not, label %._crit_edge347, label %.lr.ph346, !llvm.loop !36

._crit_edge347:                                   ; preds = %210
  call void @_ZN11alglib_implL14snnls_trdsolveEPNS_9ae_vectorEPNS_9ae_matrixEllS1_PNS_8ae_stateE(ptr noundef nonnull %75, ptr noundef nonnull %76, i64 noundef %8, i64 noundef %10, ptr noundef nonnull %45, ptr noundef %2)
  br i1 %.not.not322, label %.lr.ph351.preheader, label %._crit_edge352

.lr.ph351.preheader:                              ; preds = %._crit_edge347
  br i1 %87, label %._crit_edge352.loopexit.unr-lcssa, label %.lr.ph351

.lr.ph351:                                        ; preds = %.lr.ph351.preheader, %.lr.ph351
  %.8349 = phi i64 [ %231, %.lr.ph351 ], [ 0, %.lr.ph351.preheader ]
  %niter428 = phi i64 [ %niter428.next.1, %.lr.ph351 ], [ 0, %.lr.ph351.preheader ]
  %212 = load ptr, ptr %71, align 8, !tbaa !19
  %213 = getelementptr inbounds double, ptr %212, i64 %.8349
  %214 = load double, ptr %213, align 8, !tbaa !20
  %215 = load ptr, ptr %73, align 8, !tbaa !19
  %216 = getelementptr inbounds double, ptr %215, i64 %.8349
  %217 = load double, ptr %216, align 8, !tbaa !20
  %218 = fadd double %214, %217
  %219 = load ptr, ptr %82, align 8, !tbaa !19
  %220 = getelementptr inbounds double, ptr %219, i64 %.8349
  store double %218, ptr %220, align 8, !tbaa !20
  %221 = or disjoint i64 %.8349, 1
  %222 = load ptr, ptr %71, align 8, !tbaa !19
  %223 = getelementptr inbounds double, ptr %222, i64 %221
  %224 = load double, ptr %223, align 8, !tbaa !20
  %225 = load ptr, ptr %73, align 8, !tbaa !19
  %226 = getelementptr inbounds double, ptr %225, i64 %221
  %227 = load double, ptr %226, align 8, !tbaa !20
  %228 = fadd double %224, %227
  %229 = load ptr, ptr %82, align 8, !tbaa !19
  %230 = getelementptr inbounds double, ptr %229, i64 %221
  store double %228, ptr %230, align 8, !tbaa !20
  %231 = add nuw nsw i64 %.8349, 2
  %niter428.next.1 = add i64 %niter428, 2
  %niter428.ncmp.1 = icmp eq i64 %niter428.next.1, %unroll_iter427
  br i1 %niter428.ncmp.1, label %._crit_edge352.loopexit.unr-lcssa, label %.lr.ph351, !llvm.loop !37

._crit_edge352.loopexit.unr-lcssa:                ; preds = %.lr.ph351, %.lr.ph351.preheader
  %.8349.unr = phi i64 [ 0, %.lr.ph351.preheader ], [ %231, %.lr.ph351 ]
  br i1 %lcmp.mod426.not, label %._crit_edge352, label %.lr.ph351.epil

.lr.ph351.epil:                                   ; preds = %._crit_edge352.loopexit.unr-lcssa
  %232 = load ptr, ptr %71, align 8, !tbaa !19
  %233 = getelementptr inbounds double, ptr %232, i64 %.8349.unr
  %234 = load double, ptr %233, align 8, !tbaa !20
  %235 = load ptr, ptr %73, align 8, !tbaa !19
  %236 = getelementptr inbounds double, ptr %235, i64 %.8349.unr
  %237 = load double, ptr %236, align 8, !tbaa !20
  %238 = fadd double %234, %237
  %239 = load ptr, ptr %82, align 8, !tbaa !19
  %240 = getelementptr inbounds double, ptr %239, i64 %.8349.unr
  store double %238, ptr %240, align 8, !tbaa !20
  br label %._crit_edge352

._crit_edge352:                                   ; preds = %.lr.ph351.epil, %._crit_edge352.loopexit.unr-lcssa, %._crit_edge347.thread, %._crit_edge347
  call void @_ZN11alglib_implL10snnls_funcEPNS_11snnlssolverEPNS_9ae_vectorEPdPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef nonnull %42, ptr noundef nonnull %7, ptr noundef %2)
  %241 = load double, ptr %7, align 8, !tbaa !20
  %242 = load double, ptr %6, align 8, !tbaa !20
  %243 = call noundef zeroext i1 @_ZN11alglib_impl16ae_fp_greater_eqEdd(double noundef %241, double noundef %242)
  br i1 %243, label %342, label %.preheader315

.preheader315:                                    ; preds = %._crit_edge352
  br i1 %.not.not322, label %.lr.ph356, label %._crit_edge357.thread

._crit_edge357.thread:                            ; preds = %.preheader315
  %244 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef 0.000000e+00, ptr noundef %2)
  br label %._crit_edge365

.lr.ph356:                                        ; preds = %.preheader315, %.lr.ph356
  %.9355 = phi i64 [ %250, %.lr.ph356 ], [ 0, %.preheader315 ]
  %.0287354 = phi double [ %249, %.lr.ph356 ], [ 0.000000e+00, %.preheader315 ]
  %245 = load ptr, ptr %73, align 8, !tbaa !19
  %246 = getelementptr inbounds double, ptr %245, i64 %.9355
  %247 = load double, ptr %246, align 8, !tbaa !20
  %248 = call noundef double @_ZN11alglib_impl6ae_sqrEdPNS_8ae_stateE(double noundef %247, ptr noundef %2)
  %249 = fadd double %.0287354, %248
  %250 = add nuw nsw i64 %.9355, 1
  %exitcond403.not = icmp eq i64 %250, %14
  br i1 %exitcond403.not, label %._crit_edge357, label %.lr.ph356, !llvm.loop !38

._crit_edge357:                                   ; preds = %.lr.ph356
  %251 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %249, ptr noundef %2)
  br i1 %.not.not322, label %.lr.ph364, label %._crit_edge365

.lr.ph364:                                        ; preds = %._crit_edge357, %271
  %.0362 = phi double [ %.1, %271 ], [ 1.000000e+50, %._crit_edge357 ]
  %.10361 = phi i64 [ %272, %271 ], [ 0, %._crit_edge357 ]
  %.0285360 = phi i64 [ %.1286, %271 ], [ -1, %._crit_edge357 ]
  %252 = load ptr, ptr %70, align 8, !tbaa !19
  %253 = getelementptr inbounds i8, ptr %252, i64 %.10361
  %254 = load i8, ptr %253, align 1, !tbaa !21, !range !22, !noundef !23
  %255 = trunc nuw i8 %254 to i1
  br i1 %255, label %256, label %271

256:                                              ; preds = %.lr.ph364
  %257 = load ptr, ptr %73, align 8, !tbaa !19
  %258 = getelementptr inbounds double, ptr %257, i64 %.10361
  %259 = load double, ptr %258, align 8, !tbaa !20
  %260 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %259, double noundef 0.000000e+00)
  br i1 %260, label %261, label %271

261:                                              ; preds = %256
  %262 = load ptr, ptr %71, align 8, !tbaa !19
  %263 = getelementptr inbounds double, ptr %262, i64 %.10361
  %264 = load double, ptr %263, align 8, !tbaa !20
  %265 = load ptr, ptr %73, align 8, !tbaa !19
  %266 = getelementptr inbounds double, ptr %265, i64 %.10361
  %267 = load double, ptr %266, align 8, !tbaa !20
  %268 = fneg double %267
  %269 = call noundef double @_ZN11alglib_impl12safeminposrvEdddPNS_8ae_stateE(double noundef %264, double noundef %268, double noundef %.0362, ptr noundef %2)
  %270 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %269, double noundef %.0362)
  %spec.select314 = select i1 %270, i64 %.10361, i64 %.0285360
  br label %271

271:                                              ; preds = %261, %.lr.ph364, %256
  %.1286 = phi i64 [ %.0285360, %256 ], [ %.0285360, %.lr.ph364 ], [ %spec.select314, %261 ]
  %.1 = phi double [ %.0362, %256 ], [ %.0362, %.lr.ph364 ], [ %269, %261 ]
  %272 = add nuw nsw i64 %.10361, 1
  %exitcond404.not = icmp eq i64 %272, %14
  br i1 %exitcond404.not, label %._crit_edge365, label %.lr.ph364, !llvm.loop !39

._crit_edge365:                                   ; preds = %271, %._crit_edge357.thread, %._crit_edge357
  %273 = phi double [ %251, %._crit_edge357 ], [ %244, %._crit_edge357.thread ], [ %251, %271 ]
  %.0285.lcssa = phi i64 [ -1, %._crit_edge357 ], [ -1, %._crit_edge357.thread ], [ %.1286, %271 ]
  %.0.lcssa = phi double [ 1.000000e+50, %._crit_edge357 ], [ 1.000000e+50, %._crit_edge357.thread ], [ %.1, %271 ]
  %274 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %273, double noundef 0.000000e+00)
  br i1 %274, label %342, label %275

275:                                              ; preds = %._crit_edge365
  %276 = call noundef double @_ZN11alglib_impl10ae_minrealEddPNS_8ae_stateE(double noundef 1.000000e+00, double noundef %.0.lcssa, ptr noundef %2)
  br i1 %.not.not322, label %.lr.ph371, label %._crit_edge372

.lr.ph371:                                        ; preds = %275, %290
  %.11369 = phi i64 [ %293, %290 ], [ 0, %275 ]
  %277 = load ptr, ptr %71, align 8, !tbaa !19
  %278 = getelementptr inbounds double, ptr %277, i64 %.11369
  %279 = load double, ptr %278, align 8, !tbaa !20
  %280 = load ptr, ptr %73, align 8, !tbaa !19
  %281 = getelementptr inbounds double, ptr %280, i64 %.11369
  %282 = load double, ptr %281, align 8, !tbaa !20
  %283 = call double @llvm.fmuladd.f64(double %276, double %282, double %279)
  %284 = load ptr, ptr %70, align 8, !tbaa !19
  %285 = getelementptr inbounds i8, ptr %284, i64 %.11369
  %286 = load i8, ptr %285, align 1, !tbaa !21, !range !22, !noundef !23
  %287 = trunc nuw i8 %286 to i1
  br i1 %287, label %288, label %290

288:                                              ; preds = %.lr.ph371
  %289 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %283, double noundef 0.000000e+00, ptr noundef %2)
  br label %290

290:                                              ; preds = %288, %.lr.ph371
  %.0292 = phi double [ %289, %288 ], [ %283, %.lr.ph371 ]
  %291 = load ptr, ptr %82, align 8, !tbaa !19
  %292 = getelementptr inbounds double, ptr %291, i64 %.11369
  store double %.0292, ptr %292, align 8, !tbaa !20
  %293 = add nuw nsw i64 %.11369, 1
  %exitcond405.not = icmp eq i64 %293, %14
  br i1 %exitcond405.not, label %._crit_edge372, label %.lr.ph371, !llvm.loop !40

._crit_edge372:                                   ; preds = %290, %275
  %294 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %276, double noundef %.0.lcssa)
  %295 = icmp sgt i64 %.0285.lcssa, -1
  %or.cond = select i1 %294, i1 %295, i1 false
  br i1 %or.cond, label %296, label %299

296:                                              ; preds = %._crit_edge372
  %297 = load ptr, ptr %82, align 8, !tbaa !19
  %298 = getelementptr inbounds double, ptr %297, i64 %.0285.lcssa
  store double 0.000000e+00, ptr %298, align 8, !tbaa !20
  br label %299

299:                                              ; preds = %296, %._crit_edge372
  br i1 %.not.not322, label %.lr.ph377, label %.thread

.preheader:                                       ; preds = %310
  br i1 %.not.not322, label %.lr.ph381.preheader, label %._crit_edge382

.lr.ph381.preheader:                              ; preds = %.preheader
  br i1 %88, label %._crit_edge382.loopexit.unr-lcssa, label %.lr.ph381

.lr.ph377:                                        ; preds = %299, %310
  %.12375 = phi i64 [ %311, %310 ], [ 0, %299 ]
  %.0290374 = phi i1 [ %.1291, %310 ], [ false, %299 ]
  %300 = load ptr, ptr %82, align 8, !tbaa !19
  %301 = getelementptr inbounds double, ptr %300, i64 %.12375
  %302 = load double, ptr %301, align 8, !tbaa !20
  %303 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %302, double noundef 0.000000e+00)
  br i1 %303, label %304, label %310

304:                                              ; preds = %.lr.ph377
  %305 = load ptr, ptr %71, align 8, !tbaa !19
  %306 = getelementptr inbounds double, ptr %305, i64 %.12375
  %307 = load double, ptr %306, align 8, !tbaa !20
  %308 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %307, double noundef 0.000000e+00)
  br i1 %308, label %309, label %310

309:                                              ; preds = %304
  call void @_ZN11alglib_implL20snnls_trdfixvariableEPNS_9ae_vectorEPNS_9ae_matrixElllS1_PNS_8ae_stateE(ptr noundef nonnull %75, ptr noundef nonnull %76, i64 noundef %8, i64 noundef %10, i64 noundef %.12375, ptr noundef nonnull %83, ptr noundef %2)
  br label %310

310:                                              ; preds = %.lr.ph377, %304, %309
  %.1291 = phi i1 [ true, %309 ], [ %.0290374, %304 ], [ %.0290374, %.lr.ph377 ]
  %311 = add nuw nsw i64 %.12375, 1
  %exitcond406.not = icmp eq i64 %311, %14
  br i1 %exitcond406.not, label %.preheader, label %.lr.ph377, !llvm.loop !41

.lr.ph381:                                        ; preds = %.lr.ph381.preheader, %.lr.ph381
  %.13380 = phi i64 [ %335, %.lr.ph381 ], [ 0, %.lr.ph381.preheader ]
  %niter433 = phi i64 [ %niter433.next.3, %.lr.ph381 ], [ 0, %.lr.ph381.preheader ]
  %312 = load ptr, ptr %82, align 8, !tbaa !19
  %313 = getelementptr inbounds double, ptr %312, i64 %.13380
  %314 = load double, ptr %313, align 8, !tbaa !20
  %315 = load ptr, ptr %71, align 8, !tbaa !19
  %316 = getelementptr inbounds double, ptr %315, i64 %.13380
  store double %314, ptr %316, align 8, !tbaa !20
  %317 = or disjoint i64 %.13380, 1
  %318 = load ptr, ptr %82, align 8, !tbaa !19
  %319 = getelementptr inbounds double, ptr %318, i64 %317
  %320 = load double, ptr %319, align 8, !tbaa !20
  %321 = load ptr, ptr %71, align 8, !tbaa !19
  %322 = getelementptr inbounds double, ptr %321, i64 %317
  store double %320, ptr %322, align 8, !tbaa !20
  %323 = or disjoint i64 %.13380, 2
  %324 = load ptr, ptr %82, align 8, !tbaa !19
  %325 = getelementptr inbounds double, ptr %324, i64 %323
  %326 = load double, ptr %325, align 8, !tbaa !20
  %327 = load ptr, ptr %71, align 8, !tbaa !19
  %328 = getelementptr inbounds double, ptr %327, i64 %323
  store double %326, ptr %328, align 8, !tbaa !20
  %329 = or disjoint i64 %.13380, 3
  %330 = load ptr, ptr %82, align 8, !tbaa !19
  %331 = getelementptr inbounds double, ptr %330, i64 %329
  %332 = load double, ptr %331, align 8, !tbaa !20
  %333 = load ptr, ptr %71, align 8, !tbaa !19
  %334 = getelementptr inbounds double, ptr %333, i64 %329
  store double %332, ptr %334, align 8, !tbaa !20
  %335 = add nuw nsw i64 %.13380, 4
  %niter433.next.3 = add i64 %niter433, 4
  %niter433.ncmp.3 = icmp eq i64 %niter433.next.3, %unroll_iter432
  br i1 %niter433.ncmp.3, label %._crit_edge382.loopexit.unr-lcssa, label %.lr.ph381, !llvm.loop !42

._crit_edge382.loopexit.unr-lcssa:                ; preds = %.lr.ph381, %.lr.ph381.preheader
  %.13380.unr = phi i64 [ 0, %.lr.ph381.preheader ], [ %335, %.lr.ph381 ]
  br i1 %lcmp.mod431.not, label %._crit_edge382, label %.lr.ph381.epil

.lr.ph381.epil:                                   ; preds = %._crit_edge382.loopexit.unr-lcssa, %.lr.ph381.epil
  %.13380.epil = phi i64 [ %341, %.lr.ph381.epil ], [ %.13380.unr, %._crit_edge382.loopexit.unr-lcssa ]
  %epil.iter430 = phi i64 [ %epil.iter430.next, %.lr.ph381.epil ], [ 0, %._crit_edge382.loopexit.unr-lcssa ]
  %336 = load ptr, ptr %82, align 8, !tbaa !19
  %337 = getelementptr inbounds double, ptr %336, i64 %.13380.epil
  %338 = load double, ptr %337, align 8, !tbaa !20
  %339 = load ptr, ptr %71, align 8, !tbaa !19
  %340 = getelementptr inbounds double, ptr %339, i64 %.13380.epil
  store double %338, ptr %340, align 8, !tbaa !20
  %341 = add nuw nsw i64 %.13380.epil, 1
  %epil.iter430.next = add i64 %epil.iter430, 1
  %epil.iter430.cmp.not = icmp eq i64 %epil.iter430.next, %xtraiter429
  br i1 %epil.iter430.cmp.not, label %._crit_edge382, label %.lr.ph381.epil, !llvm.loop !43

._crit_edge382:                                   ; preds = %._crit_edge382.loopexit.unr-lcssa, %.lr.ph381.epil, %.preheader
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef nonnull %5, ptr noundef %2)
  br i1 %.1291, label %187, label %342, !llvm.loop !44

342:                                              ; preds = %187, %._crit_edge382, %._crit_edge365, %._crit_edge352
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef nonnull %4, ptr noundef %2)
  %343 = load i64, ptr %4, align 8, !tbaa !27
  %344 = icmp sgt i64 %343, 9
  br i1 %344, label %.loopexit, label %.preheader318

.thread:                                          ; preds = %299
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef nonnull %5, ptr noundef %2)
  call void @_ZN11alglib_impl3incEPlPNS_8ae_stateE(ptr noundef nonnull %4, ptr noundef %2)
  %345 = load i64, ptr %4, align 8, !tbaa !27
  %346 = icmp sgt i64 %345, 9
  br i1 %346, label %.loopexit, label %._crit_edge387

.preheader318:                                    ; preds = %342
  br i1 %.not.not322, label %.lr.ph386, label %._crit_edge387

.lr.ph386:                                        ; preds = %.preheader318, %370
  %.14385 = phi i64 [ %371, %370 ], [ 0, %.preheader318 ]
  %.1293384 = phi double [ %.2294, %370 ], [ 0.000000e+00, %.preheader318 ]
  %347 = load ptr, ptr %74, align 8, !tbaa !19
  %348 = getelementptr inbounds double, ptr %347, i64 %.14385
  %349 = load double, ptr %348, align 8, !tbaa !20
  %350 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %349, ptr noundef %2)
  %351 = load ptr, ptr %71, align 8, !tbaa !19
  %352 = getelementptr inbounds double, ptr %351, i64 %.14385
  %353 = load double, ptr %352, align 8, !tbaa !20
  %354 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %353, ptr noundef %2)
  %355 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %350, double noundef 0.000000e+00)
  br i1 %355, label %358, label %356

356:                                              ; preds = %.lr.ph386
  %357 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %354, double noundef 0.000000e+00)
  br i1 %357, label %358, label %370

358:                                              ; preds = %356, %.lr.ph386
  %359 = load ptr, ptr %71, align 8, !tbaa !19
  %360 = getelementptr inbounds double, ptr %359, i64 %.14385
  %361 = load double, ptr %360, align 8, !tbaa !20
  %362 = load ptr, ptr %74, align 8, !tbaa !19
  %363 = getelementptr inbounds double, ptr %362, i64 %.14385
  %364 = load double, ptr %363, align 8, !tbaa !20
  %365 = fsub double %361, %364
  %366 = call noundef double @_ZN11alglib_impl7ae_fabsEdPNS_8ae_stateE(double noundef %365, ptr noundef %2)
  %367 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %350, double noundef %354, ptr noundef %2)
  %368 = fdiv double %366, %367
  %369 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %.1293384, double noundef %368, ptr noundef %2)
  br label %370

370:                                              ; preds = %356, %358
  %.2294 = phi double [ %369, %358 ], [ %.1293384, %356 ]
  %371 = add nuw nsw i64 %.14385, 1
  %exitcond408.not = icmp eq i64 %371, %14
  br i1 %exitcond408.not, label %._crit_edge387, label %.lr.ph386, !llvm.loop !45

._crit_edge387:                                   ; preds = %370, %.thread, %.preheader318
  %.1293.lcssa = phi double [ 0.000000e+00, %.preheader318 ], [ 0.000000e+00, %.thread ], [ %.2294, %370 ]
  %372 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %.1293.lcssa, double noundef 5.000000e-13)
  br i1 %372, label %.loopexit, label %.backedge

.backedge:                                        ; preds = %155, %._crit_edge387
  br label %89, !llvm.loop !46

.loopexit:                                        ; preds = %342, %._crit_edge387, %.thread, %39, %18, %3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #5
  ret void
}

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZN11alglib_implL14snnls_trdsolveEPNS_9ae_vectorEPNS_9ae_matrixEllS1_PNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

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

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 = { mustprogress nounwind 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 #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, !7, i64 0}
!6 = !{!"_ZTSN11alglib_impl11snnlssolverE", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !14, i64 104, !14, i64 168, !15, i64 232, !7, i64 240, !14, i64 248, !14, i64 312, !10, i64 376, !10, i64 456, !10, i64 536, !14, i64 616, !14, i64 680, !14, i64 744, !14, i64 808, !14, i64 872, !14, i64 936, !14, i64 1000, !14, i64 1064, !14, i64 1128, !14, i64 1192, !14, i64 1256, !14, i64 1320, !14, i64 1384, !14, i64 1448, !14, i64 1512, !14, i64 1576}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN11alglib_impl9ae_matrixE", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !11, i64 32, !12, i64 40, !8, i64 72}
!11 = !{!"bool", !8, i64 0}
!12 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!13 = !{!"any pointer", !8, i64 0}
!14 = !{!"_ZTSN11alglib_impl9ae_vectorE", !7, i64 0, !7, i64 8, !11, i64 16, !12, i64 24, !8, i64 56}
!15 = !{!"double", !8, i64 0}
!16 = !{!6, !7, i64 8}
!17 = !{!6, !7, i64 16}
!18 = !{!6, !15, i64 232}
!19 = !{!8, !8, i64 0}
!20 = !{!15, !15, i64 0}
!21 = !{!11, !11, i64 0}
!22 = !{i8 0, i8 2}
!23 = !{}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = !{!7, !7, i64 0}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !34}
!34 = !{!"llvm.loop.unroll.disable"}
!35 = !{!6, !7, i64 240}
!36 = distinct !{!36, !25}
!37 = distinct !{!37, !25}
!38 = distinct !{!38, !25}
!39 = distinct !{!39, !25}
!40 = distinct !{!40, !25}
!41 = distinct !{!41, !25}
!42 = distinct !{!42, !25}
!43 = distinct !{!43, !34}
!44 = distinct !{!44, !25}
!45 = distinct !{!45, !25}
!46 = distinct !{!46, !25}


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