; LLVM IR from Dimandragon/non-parametric-dsp :: 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::sparsematrix" = type { %"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", i64, i64, i64, i64, i64, i64 }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%union.anon.0 = type { ptr }
%"struct.alglib_impl::ae_matrix" = type { i64, i64, i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.1 }
%union.anon.1 = type { ptr }

@.str.497 = external hidden unnamed_addr constant [62 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

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

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

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

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

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

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

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

declare void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, ptr noundef) #1

declare void @_ZN11alglib_impl5rmulrEldPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, i64 noundef, ptr noundef) #1

declare noundef double @_ZN11alglib_impl6rdotrrElPKNS_9ae_matrixElS2_lPNS_8ae_stateE(i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl25normalizemixedbrlcinplaceEPNS_12sparsematrixElPNS_9ae_matrixElPNS_9ae_vectorES5_lbS5_bPNS_8ae_stateE(ptr noundef %0, i64 noundef %1, ptr noundef %2, i64 noundef %3, ptr noundef %4, ptr noundef %5, i64 noundef %6, i1 noundef zeroext %7, ptr noundef %8, i1 noundef zeroext %9, ptr noundef %10) #3 {
  %12 = alloca ptr, align 8
  %13 = alloca i64, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca i8, align 1
  %20 = alloca ptr, align 8
  %21 = alloca i8, align 1
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca double, align 8
  %29 = alloca double, align 8
  %30 = alloca double, align 8
  store ptr %0, ptr %12, align 8, !tbaa !5
  store i64 %1, ptr %13, align 8, !tbaa !9
  store ptr %2, ptr %14, align 8, !tbaa !5
  store i64 %3, ptr %15, align 8, !tbaa !9
  store ptr %4, ptr %16, align 8, !tbaa !5
  store ptr %5, ptr %17, align 8, !tbaa !5
  store i64 %6, ptr %18, align 8, !tbaa !9
  %31 = zext i1 %7 to i8
  store i8 %31, ptr %19, align 1, !tbaa !11
  store ptr %8, ptr %20, align 8, !tbaa !5
  %32 = zext i1 %9 to i8
  store i8 %32, ptr %21, align 1, !tbaa !11
  store ptr %10, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  %33 = load i64, ptr %13, align 8, !tbaa !9
  %34 = icmp eq i64 %33, 0
  br i1 %34, label %54, label %35

35:                                               ; preds = %11
  %36 = load ptr, ptr %12, align 8, !tbaa !5
  %37 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %36, i32 0, i32 5
  %38 = load i64, ptr %37, align 8, !tbaa !13
  %39 = icmp eq i64 %38, 1
  br i1 %39, label %40, label %52

40:                                               ; preds = %35
  %41 = load ptr, ptr %12, align 8, !tbaa !5
  %42 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %41, i32 0, i32 6
  %43 = load i64, ptr %42, align 8, !tbaa !17
  %44 = load i64, ptr %13, align 8, !tbaa !9
  %45 = icmp eq i64 %43, %44
  br i1 %45, label %46, label %52

46:                                               ; preds = %40
  %47 = load ptr, ptr %12, align 8, !tbaa !5
  %48 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %47, i32 0, i32 7
  %49 = load i64, ptr %48, align 8, !tbaa !18
  %50 = load i64, ptr %18, align 8, !tbaa !9
  %51 = icmp eq i64 %49, %50
  br label %52

52:                                               ; preds = %46, %40, %35
  %53 = phi i1 [ false, %40 ], [ false, %35 ], [ %51, %46 ]
  br label %54

54:                                               ; preds = %52, %11
  %55 = phi i1 [ true, %11 ], [ %53, %52 ]
  %56 = load ptr, ptr %22, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %55, ptr noundef @.str.497, ptr noundef %56)
  %57 = load i8, ptr %21, align 1, !tbaa !11, !range !19, !noundef !20
  %58 = trunc i8 %57 to i1
  br i1 %58, label %59, label %65

59:                                               ; preds = %54
  %60 = load ptr, ptr %20, align 8, !tbaa !5
  %61 = load i64, ptr %15, align 8, !tbaa !9
  %62 = load i64, ptr %13, align 8, !tbaa !9
  %63 = add nsw i64 %61, %62
  %64 = load ptr, ptr %22, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %60, i64 noundef %63, ptr noundef %64)
  br label %65

65:                                               ; preds = %59, %54
  store double 0.000000e+00, ptr %30, align 8, !tbaa !21
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %66

66:                                               ; preds = %200, %65
  %67 = load i64, ptr %23, align 8, !tbaa !9
  %68 = load i64, ptr %13, align 8, !tbaa !9
  %69 = sub nsw i64 %68, 1
  %70 = icmp sle i64 %67, %69
  br i1 %70, label %71, label %203

71:                                               ; preds = %66
  store double 0.000000e+00, ptr %29, align 8, !tbaa !21
  %72 = load ptr, ptr %12, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %72, i32 0, i32 2
  %74 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %73, i32 0, i32 4
  %75 = load ptr, ptr %74, align 8, !tbaa !23
  %76 = load i64, ptr %23, align 8, !tbaa !9
  %77 = getelementptr inbounds i64, ptr %75, i64 %76
  %78 = load i64, ptr %77, align 8, !tbaa !9
  store i64 %78, ptr %26, align 8, !tbaa !9
  %79 = load ptr, ptr %12, align 8, !tbaa !5
  %80 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %79, i32 0, i32 2
  %81 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %80, i32 0, i32 4
  %82 = load ptr, ptr %81, align 8, !tbaa !23
  %83 = load i64, ptr %23, align 8, !tbaa !9
  %84 = add nsw i64 %83, 1
  %85 = getelementptr inbounds i64, ptr %82, i64 %84
  %86 = load i64, ptr %85, align 8, !tbaa !9
  %87 = sub nsw i64 %86, 1
  store i64 %87, ptr %27, align 8, !tbaa !9
  %88 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %88, ptr %25, align 8, !tbaa !9
  br label %89

89:                                               ; preds = %105, %71
  %90 = load i64, ptr %25, align 8, !tbaa !9
  %91 = load i64, ptr %27, align 8, !tbaa !9
  %92 = icmp sle i64 %90, %91
  br i1 %92, label %93, label %108

93:                                               ; preds = %89
  %94 = load ptr, ptr %12, align 8, !tbaa !5
  %95 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %94, i32 0, i32 0
  %96 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %95, i32 0, i32 4
  %97 = load ptr, ptr %96, align 8, !tbaa !23
  %98 = load i64, ptr %25, align 8, !tbaa !9
  %99 = getelementptr inbounds double, ptr %97, i64 %98
  %100 = load double, ptr %99, align 8, !tbaa !21
  store double %100, ptr %28, align 8, !tbaa !21
  %101 = load double, ptr %29, align 8, !tbaa !21
  %102 = load double, ptr %28, align 8, !tbaa !21
  %103 = load double, ptr %28, align 8, !tbaa !21
  %104 = call double @llvm.fmuladd.f64(double %102, double %103, double %101)
  store double %104, ptr %29, align 8, !tbaa !21
  br label %105

105:                                              ; preds = %93
  %106 = load i64, ptr %25, align 8, !tbaa !9
  %107 = add nsw i64 %106, 1
  store i64 %107, ptr %25, align 8, !tbaa !9
  br label %89, !llvm.loop !24

108:                                              ; preds = %89
  %109 = load double, ptr %29, align 8, !tbaa !21
  %110 = load ptr, ptr %22, align 8, !tbaa !5
  %111 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %109, ptr noundef %110)
  store double %111, ptr %29, align 8, !tbaa !21
  %112 = load double, ptr %30, align 8, !tbaa !21
  %113 = load double, ptr %29, align 8, !tbaa !21
  %114 = load ptr, ptr %22, align 8, !tbaa !5
  %115 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %112, double noundef %113, ptr noundef %114)
  store double %115, ptr %30, align 8, !tbaa !21
  %116 = load i8, ptr %19, align 1, !tbaa !11, !range !19, !noundef !20
  %117 = trunc i8 %116 to i1
  br i1 %117, label %118, label %122

118:                                              ; preds = %108
  %119 = load double, ptr %29, align 8, !tbaa !21
  %120 = load ptr, ptr %22, align 8, !tbaa !5
  %121 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %119, double noundef 1.000000e+00, ptr noundef %120)
  store double %121, ptr %29, align 8, !tbaa !21
  br label %122

122:                                              ; preds = %118, %108
  %123 = load i8, ptr %21, align 1, !tbaa !11, !range !19, !noundef !20
  %124 = trunc i8 %123 to i1
  br i1 %124, label %125, label %132

125:                                              ; preds = %122
  %126 = load double, ptr %29, align 8, !tbaa !21
  %127 = load ptr, ptr %20, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %127, i32 0, i32 4
  %129 = load ptr, ptr %128, align 8, !tbaa !23
  %130 = load i64, ptr %23, align 8, !tbaa !9
  %131 = getelementptr inbounds double, ptr %129, i64 %130
  store double %126, ptr %131, align 8, !tbaa !21
  br label %132

132:                                              ; preds = %125, %122
  %133 = load double, ptr %29, align 8, !tbaa !21
  %134 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %133, double noundef 0.000000e+00)
  br i1 %134, label %135, label %199

135:                                              ; preds = %132
  %136 = load double, ptr %29, align 8, !tbaa !21
  %137 = fdiv double 1.000000e+00, %136
  store double %137, ptr %29, align 8, !tbaa !21
  %138 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %138, ptr %25, align 8, !tbaa !9
  br label %139

139:                                              ; preds = %159, %135
  %140 = load i64, ptr %25, align 8, !tbaa !9
  %141 = load i64, ptr %27, align 8, !tbaa !9
  %142 = icmp sle i64 %140, %141
  br i1 %142, label %143, label %162

143:                                              ; preds = %139
  %144 = load ptr, ptr %12, align 8, !tbaa !5
  %145 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %144, i32 0, i32 0
  %146 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %145, i32 0, i32 4
  %147 = load ptr, ptr %146, align 8, !tbaa !23
  %148 = load i64, ptr %25, align 8, !tbaa !9
  %149 = getelementptr inbounds double, ptr %147, i64 %148
  %150 = load double, ptr %149, align 8, !tbaa !21
  %151 = load double, ptr %29, align 8, !tbaa !21
  %152 = fmul double %150, %151
  %153 = load ptr, ptr %12, align 8, !tbaa !5
  %154 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %153, i32 0, i32 0
  %155 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %154, i32 0, i32 4
  %156 = load ptr, ptr %155, align 8, !tbaa !23
  %157 = load i64, ptr %25, align 8, !tbaa !9
  %158 = getelementptr inbounds double, ptr %156, i64 %157
  store double %152, ptr %158, align 8, !tbaa !21
  br label %159

159:                                              ; preds = %143
  %160 = load i64, ptr %25, align 8, !tbaa !9
  %161 = add nsw i64 %160, 1
  store i64 %161, ptr %25, align 8, !tbaa !9
  br label %139, !llvm.loop !26

162:                                              ; preds = %139
  %163 = load ptr, ptr %16, align 8, !tbaa !5
  %164 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %163, i32 0, i32 4
  %165 = load ptr, ptr %164, align 8, !tbaa !23
  %166 = load i64, ptr %23, align 8, !tbaa !9
  %167 = getelementptr inbounds double, ptr %165, i64 %166
  %168 = load double, ptr %167, align 8, !tbaa !21
  %169 = load double, ptr %29, align 8, !tbaa !21
  %170 = fmul double %168, %169
  %171 = load ptr, ptr %16, align 8, !tbaa !5
  %172 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %171, i32 0, i32 4
  %173 = load ptr, ptr %172, align 8, !tbaa !23
  %174 = load i64, ptr %23, align 8, !tbaa !9
  %175 = getelementptr inbounds double, ptr %173, i64 %174
  store double %170, ptr %175, align 8, !tbaa !21
  %176 = load ptr, ptr %17, align 8, !tbaa !5
  %177 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %176, i32 0, i32 4
  %178 = load ptr, ptr %177, align 8, !tbaa !23
  %179 = load i64, ptr %23, align 8, !tbaa !9
  %180 = getelementptr inbounds double, ptr %178, i64 %179
  %181 = load double, ptr %180, align 8, !tbaa !21
  %182 = load ptr, ptr %22, align 8, !tbaa !5
  %183 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %181, ptr noundef %182)
  br i1 %183, label %184, label %198

184:                                              ; preds = %162
  %185 = load ptr, ptr %17, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %185, i32 0, i32 4
  %187 = load ptr, ptr %186, align 8, !tbaa !23
  %188 = load i64, ptr %23, align 8, !tbaa !9
  %189 = getelementptr inbounds double, ptr %187, i64 %188
  %190 = load double, ptr %189, align 8, !tbaa !21
  %191 = load double, ptr %29, align 8, !tbaa !21
  %192 = fmul double %190, %191
  %193 = load ptr, ptr %17, align 8, !tbaa !5
  %194 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %193, i32 0, i32 4
  %195 = load ptr, ptr %194, align 8, !tbaa !23
  %196 = load i64, ptr %23, align 8, !tbaa !9
  %197 = getelementptr inbounds double, ptr %195, i64 %196
  store double %192, ptr %197, align 8, !tbaa !21
  br label %198

198:                                              ; preds = %184, %162
  br label %199

199:                                              ; preds = %198, %132
  br label %200

200:                                              ; preds = %199
  %201 = load i64, ptr %23, align 8, !tbaa !9
  %202 = add nsw i64 %201, 1
  store i64 %202, ptr %23, align 8, !tbaa !9
  br label %66, !llvm.loop !27

203:                                              ; preds = %66
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %204

204:                                              ; preds = %340, %203
  %205 = load i64, ptr %23, align 8, !tbaa !9
  %206 = load i64, ptr %15, align 8, !tbaa !9
  %207 = sub nsw i64 %206, 1
  %208 = icmp sle i64 %205, %207
  br i1 %208, label %209, label %343

209:                                              ; preds = %204
  store double 0.000000e+00, ptr %29, align 8, !tbaa !21
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %210

210:                                              ; preds = %229, %209
  %211 = load i64, ptr %24, align 8, !tbaa !9
  %212 = load i64, ptr %18, align 8, !tbaa !9
  %213 = sub nsw i64 %212, 1
  %214 = icmp sle i64 %211, %213
  br i1 %214, label %215, label %232

215:                                              ; preds = %210
  %216 = load ptr, ptr %14, align 8, !tbaa !5
  %217 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %216, i32 0, i32 6
  %218 = load ptr, ptr %217, align 8, !tbaa !23
  %219 = load i64, ptr %23, align 8, !tbaa !9
  %220 = getelementptr inbounds ptr, ptr %218, i64 %219
  %221 = load ptr, ptr %220, align 8, !tbaa !5
  %222 = load i64, ptr %24, align 8, !tbaa !9
  %223 = getelementptr inbounds double, ptr %221, i64 %222
  %224 = load double, ptr %223, align 8, !tbaa !21
  store double %224, ptr %28, align 8, !tbaa !21
  %225 = load double, ptr %29, align 8, !tbaa !21
  %226 = load double, ptr %28, align 8, !tbaa !21
  %227 = load double, ptr %28, align 8, !tbaa !21
  %228 = call double @llvm.fmuladd.f64(double %226, double %227, double %225)
  store double %228, ptr %29, align 8, !tbaa !21
  br label %229

229:                                              ; preds = %215
  %230 = load i64, ptr %24, align 8, !tbaa !9
  %231 = add nsw i64 %230, 1
  store i64 %231, ptr %24, align 8, !tbaa !9
  br label %210, !llvm.loop !28

232:                                              ; preds = %210
  %233 = load double, ptr %29, align 8, !tbaa !21
  %234 = load ptr, ptr %22, align 8, !tbaa !5
  %235 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %233, ptr noundef %234)
  store double %235, ptr %29, align 8, !tbaa !21
  %236 = load double, ptr %30, align 8, !tbaa !21
  %237 = load double, ptr %29, align 8, !tbaa !21
  %238 = load ptr, ptr %22, align 8, !tbaa !5
  %239 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %236, double noundef %237, ptr noundef %238)
  store double %239, ptr %30, align 8, !tbaa !21
  %240 = load i8, ptr %19, align 1, !tbaa !11, !range !19, !noundef !20
  %241 = trunc i8 %240 to i1
  br i1 %241, label %242, label %246

242:                                              ; preds = %232
  %243 = load double, ptr %29, align 8, !tbaa !21
  %244 = load ptr, ptr %22, align 8, !tbaa !5
  %245 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %243, double noundef 1.000000e+00, ptr noundef %244)
  store double %245, ptr %29, align 8, !tbaa !21
  br label %246

246:                                              ; preds = %242, %232
  %247 = load i8, ptr %21, align 1, !tbaa !11, !range !19, !noundef !20
  %248 = trunc i8 %247 to i1
  br i1 %248, label %249, label %258

249:                                              ; preds = %246
  %250 = load double, ptr %29, align 8, !tbaa !21
  %251 = load ptr, ptr %20, align 8, !tbaa !5
  %252 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %251, i32 0, i32 4
  %253 = load ptr, ptr %252, align 8, !tbaa !23
  %254 = load i64, ptr %13, align 8, !tbaa !9
  %255 = load i64, ptr %23, align 8, !tbaa !9
  %256 = add nsw i64 %254, %255
  %257 = getelementptr inbounds double, ptr %253, i64 %256
  store double %250, ptr %257, align 8, !tbaa !21
  br label %258

258:                                              ; preds = %249, %246
  %259 = load double, ptr %29, align 8, !tbaa !21
  %260 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %259, double noundef 0.000000e+00)
  br i1 %260, label %261, label %339

261:                                              ; preds = %258
  %262 = load double, ptr %29, align 8, !tbaa !21
  %263 = fdiv double 1.000000e+00, %262
  store double %263, ptr %29, align 8, !tbaa !21
  store i64 0, ptr %24, align 8, !tbaa !9
  br label %264

264:                                              ; preds = %289, %261
  %265 = load i64, ptr %24, align 8, !tbaa !9
  %266 = load i64, ptr %18, align 8, !tbaa !9
  %267 = sub nsw i64 %266, 1
  %268 = icmp sle i64 %265, %267
  br i1 %268, label %269, label %292

269:                                              ; preds = %264
  %270 = load ptr, ptr %14, align 8, !tbaa !5
  %271 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %270, i32 0, i32 6
  %272 = load ptr, ptr %271, align 8, !tbaa !23
  %273 = load i64, ptr %23, align 8, !tbaa !9
  %274 = getelementptr inbounds ptr, ptr %272, i64 %273
  %275 = load ptr, ptr %274, align 8, !tbaa !5
  %276 = load i64, ptr %24, align 8, !tbaa !9
  %277 = getelementptr inbounds double, ptr %275, i64 %276
  %278 = load double, ptr %277, align 8, !tbaa !21
  %279 = load double, ptr %29, align 8, !tbaa !21
  %280 = fmul double %278, %279
  %281 = load ptr, ptr %14, align 8, !tbaa !5
  %282 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %281, i32 0, i32 6
  %283 = load ptr, ptr %282, align 8, !tbaa !23
  %284 = load i64, ptr %23, align 8, !tbaa !9
  %285 = getelementptr inbounds ptr, ptr %283, i64 %284
  %286 = load ptr, ptr %285, align 8, !tbaa !5
  %287 = load i64, ptr %24, align 8, !tbaa !9
  %288 = getelementptr inbounds double, ptr %286, i64 %287
  store double %280, ptr %288, align 8, !tbaa !21
  br label %289

289:                                              ; preds = %269
  %290 = load i64, ptr %24, align 8, !tbaa !9
  %291 = add nsw i64 %290, 1
  store i64 %291, ptr %24, align 8, !tbaa !9
  br label %264, !llvm.loop !29

292:                                              ; preds = %264
  %293 = load ptr, ptr %16, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %293, i32 0, i32 4
  %295 = load ptr, ptr %294, align 8, !tbaa !23
  %296 = load i64, ptr %13, align 8, !tbaa !9
  %297 = load i64, ptr %23, align 8, !tbaa !9
  %298 = add nsw i64 %296, %297
  %299 = getelementptr inbounds double, ptr %295, i64 %298
  %300 = load double, ptr %299, align 8, !tbaa !21
  %301 = load double, ptr %29, align 8, !tbaa !21
  %302 = fmul double %300, %301
  %303 = load ptr, ptr %16, align 8, !tbaa !5
  %304 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %303, i32 0, i32 4
  %305 = load ptr, ptr %304, align 8, !tbaa !23
  %306 = load i64, ptr %13, align 8, !tbaa !9
  %307 = load i64, ptr %23, align 8, !tbaa !9
  %308 = add nsw i64 %306, %307
  %309 = getelementptr inbounds double, ptr %305, i64 %308
  store double %302, ptr %309, align 8, !tbaa !21
  %310 = load ptr, ptr %17, align 8, !tbaa !5
  %311 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %310, i32 0, i32 4
  %312 = load ptr, ptr %311, align 8, !tbaa !23
  %313 = load i64, ptr %13, align 8, !tbaa !9
  %314 = load i64, ptr %23, align 8, !tbaa !9
  %315 = add nsw i64 %313, %314
  %316 = getelementptr inbounds double, ptr %312, i64 %315
  %317 = load double, ptr %316, align 8, !tbaa !21
  %318 = load ptr, ptr %22, align 8, !tbaa !5
  %319 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %317, ptr noundef %318)
  br i1 %319, label %320, label %338

320:                                              ; preds = %292
  %321 = load ptr, ptr %17, 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 !23
  %324 = load i64, ptr %13, align 8, !tbaa !9
  %325 = load i64, ptr %23, align 8, !tbaa !9
  %326 = add nsw i64 %324, %325
  %327 = getelementptr inbounds double, ptr %323, i64 %326
  %328 = load double, ptr %327, align 8, !tbaa !21
  %329 = load double, ptr %29, align 8, !tbaa !21
  %330 = fmul double %328, %329
  %331 = load ptr, ptr %17, align 8, !tbaa !5
  %332 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %331, i32 0, i32 4
  %333 = load ptr, ptr %332, align 8, !tbaa !23
  %334 = load i64, ptr %13, align 8, !tbaa !9
  %335 = load i64, ptr %23, align 8, !tbaa !9
  %336 = add nsw i64 %334, %335
  %337 = getelementptr inbounds double, ptr %333, i64 %336
  store double %330, ptr %337, align 8, !tbaa !21
  br label %338

338:                                              ; preds = %320, %292
  br label %339

339:                                              ; preds = %338, %258
  br label %340

340:                                              ; preds = %339
  %341 = load i64, ptr %23, align 8, !tbaa !9
  %342 = add nsw i64 %341, 1
  store i64 %342, ptr %23, align 8, !tbaa !9
  br label %204, !llvm.loop !30

343:                                              ; preds = %204
  %344 = load i8, ptr %19, align 1, !tbaa !11, !range !19, !noundef !20
  %345 = trunc i8 %344 to i1
  br i1 %345, label %346, label %590

346:                                              ; preds = %343
  store double 0.000000e+00, ptr %30, align 8, !tbaa !21
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %347

347:                                              ; preds = %397, %346
  %348 = load i64, ptr %23, align 8, !tbaa !9
  %349 = load i64, ptr %13, align 8, !tbaa !9
  %350 = sub nsw i64 %349, 1
  %351 = icmp sle i64 %348, %350
  br i1 %351, label %352, label %400

352:                                              ; preds = %347
  store double 0.000000e+00, ptr %29, align 8, !tbaa !21
  %353 = load ptr, ptr %12, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %353, i32 0, i32 2
  %355 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %354, i32 0, i32 4
  %356 = load ptr, ptr %355, align 8, !tbaa !23
  %357 = load i64, ptr %23, align 8, !tbaa !9
  %358 = getelementptr inbounds i64, ptr %356, i64 %357
  %359 = load i64, ptr %358, align 8, !tbaa !9
  store i64 %359, ptr %26, align 8, !tbaa !9
  %360 = load ptr, ptr %12, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %360, i32 0, i32 2
  %362 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %361, i32 0, i32 4
  %363 = load ptr, ptr %362, align 8, !tbaa !23
  %364 = load i64, ptr %23, align 8, !tbaa !9
  %365 = add nsw i64 %364, 1
  %366 = getelementptr inbounds i64, ptr %363, i64 %365
  %367 = load i64, ptr %366, align 8, !tbaa !9
  %368 = sub nsw i64 %367, 1
  store i64 %368, ptr %27, align 8, !tbaa !9
  %369 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %369, ptr %25, align 8, !tbaa !9
  br label %370

370:                                              ; preds = %386, %352
  %371 = load i64, ptr %25, align 8, !tbaa !9
  %372 = load i64, ptr %27, align 8, !tbaa !9
  %373 = icmp sle i64 %371, %372
  br i1 %373, label %374, label %389

374:                                              ; preds = %370
  %375 = load ptr, ptr %12, align 8, !tbaa !5
  %376 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %375, i32 0, i32 0
  %377 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %376, i32 0, i32 4
  %378 = load ptr, ptr %377, align 8, !tbaa !23
  %379 = load i64, ptr %25, align 8, !tbaa !9
  %380 = getelementptr inbounds double, ptr %378, i64 %379
  %381 = load double, ptr %380, align 8, !tbaa !21
  store double %381, ptr %28, align 8, !tbaa !21
  %382 = load double, ptr %29, align 8, !tbaa !21
  %383 = load double, ptr %28, align 8, !tbaa !21
  %384 = load double, ptr %28, align 8, !tbaa !21
  %385 = call double @llvm.fmuladd.f64(double %383, double %384, double %382)
  store double %385, ptr %29, align 8, !tbaa !21
  br label %386

386:                                              ; preds = %374
  %387 = load i64, ptr %25, align 8, !tbaa !9
  %388 = add nsw i64 %387, 1
  store i64 %388, ptr %25, align 8, !tbaa !9
  br label %370, !llvm.loop !31

389:                                              ; preds = %370
  %390 = load double, ptr %29, align 8, !tbaa !21
  %391 = load ptr, ptr %22, align 8, !tbaa !5
  %392 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %390, ptr noundef %391)
  store double %392, ptr %29, align 8, !tbaa !21
  %393 = load double, ptr %30, align 8, !tbaa !21
  %394 = load double, ptr %29, align 8, !tbaa !21
  %395 = load ptr, ptr %22, align 8, !tbaa !5
  %396 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %393, double noundef %394, ptr noundef %395)
  store double %396, ptr %30, align 8, !tbaa !21
  br label %397

397:                                              ; preds = %389
  %398 = load i64, ptr %23, align 8, !tbaa !9
  %399 = add nsw i64 %398, 1
  store i64 %399, ptr %23, align 8, !tbaa !9
  br label %347, !llvm.loop !32

400:                                              ; preds = %347
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %401

401:                                              ; preds = %419, %400
  %402 = load i64, ptr %23, align 8, !tbaa !9
  %403 = load i64, ptr %15, align 8, !tbaa !9
  %404 = sub nsw i64 %403, 1
  %405 = icmp sle i64 %402, %404
  br i1 %405, label %406, label %422

406:                                              ; preds = %401
  %407 = load double, ptr %30, align 8, !tbaa !21
  %408 = load i64, ptr %18, align 8, !tbaa !9
  %409 = load ptr, ptr %14, align 8, !tbaa !5
  %410 = load i64, ptr %23, align 8, !tbaa !9
  %411 = load ptr, ptr %14, align 8, !tbaa !5
  %412 = load i64, ptr %23, align 8, !tbaa !9
  %413 = load ptr, ptr %22, align 8, !tbaa !5
  %414 = call noundef double @_ZN11alglib_impl6rdotrrElPKNS_9ae_matrixElS2_lPNS_8ae_stateE(i64 noundef %408, ptr noundef %409, i64 noundef %410, ptr noundef %411, i64 noundef %412, ptr noundef %413)
  %415 = load ptr, ptr %22, align 8, !tbaa !5
  %416 = call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %414, ptr noundef %415)
  %417 = load ptr, ptr %22, align 8, !tbaa !5
  %418 = call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %407, double noundef %416, ptr noundef %417)
  store double %418, ptr %30, align 8, !tbaa !21
  br label %419

419:                                              ; preds = %406
  %420 = load i64, ptr %23, align 8, !tbaa !9
  %421 = add nsw i64 %420, 1
  store i64 %421, ptr %23, align 8, !tbaa !9
  br label %401, !llvm.loop !33

422:                                              ; preds = %401
  %423 = load double, ptr %30, align 8, !tbaa !21
  %424 = call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %423, double noundef 1.000000e+00)
  br i1 %424, label %425, label %589

425:                                              ; preds = %422
  %426 = load double, ptr %30, align 8, !tbaa !21
  %427 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %426, double noundef 0.000000e+00)
  br i1 %427, label %428, label %589

428:                                              ; preds = %425
  %429 = load i8, ptr %21, align 1, !tbaa !11, !range !19, !noundef !20
  %430 = trunc i8 %429 to i1
  br i1 %430, label %431, label %438

431:                                              ; preds = %428
  %432 = load i64, ptr %15, align 8, !tbaa !9
  %433 = load i64, ptr %13, align 8, !tbaa !9
  %434 = add nsw i64 %432, %433
  %435 = load double, ptr %30, align 8, !tbaa !21
  %436 = load ptr, ptr %20, align 8, !tbaa !5
  %437 = load ptr, ptr %22, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %434, double noundef %435, ptr noundef %436, ptr noundef %437)
  br label %438

438:                                              ; preds = %431, %428
  %439 = load double, ptr %30, align 8, !tbaa !21
  %440 = fdiv double 1.000000e+00, %439
  store double %440, ptr %29, align 8, !tbaa !21
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %441

441:                                              ; preds = %524, %438
  %442 = load i64, ptr %23, align 8, !tbaa !9
  %443 = load i64, ptr %13, align 8, !tbaa !9
  %444 = sub nsw i64 %443, 1
  %445 = icmp sle i64 %442, %444
  br i1 %445, label %446, label %527

446:                                              ; preds = %441
  %447 = load ptr, ptr %12, align 8, !tbaa !5
  %448 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %447, i32 0, i32 2
  %449 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %448, i32 0, i32 4
  %450 = load ptr, ptr %449, align 8, !tbaa !23
  %451 = load i64, ptr %23, align 8, !tbaa !9
  %452 = getelementptr inbounds i64, ptr %450, i64 %451
  %453 = load i64, ptr %452, align 8, !tbaa !9
  store i64 %453, ptr %26, align 8, !tbaa !9
  %454 = load ptr, ptr %12, align 8, !tbaa !5
  %455 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %454, i32 0, i32 2
  %456 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %455, i32 0, i32 4
  %457 = load ptr, ptr %456, align 8, !tbaa !23
  %458 = load i64, ptr %23, align 8, !tbaa !9
  %459 = add nsw i64 %458, 1
  %460 = getelementptr inbounds i64, ptr %457, i64 %459
  %461 = load i64, ptr %460, align 8, !tbaa !9
  %462 = sub nsw i64 %461, 1
  store i64 %462, ptr %27, align 8, !tbaa !9
  %463 = load i64, ptr %26, align 8, !tbaa !9
  store i64 %463, ptr %25, align 8, !tbaa !9
  br label %464

464:                                              ; preds = %484, %446
  %465 = load i64, ptr %25, align 8, !tbaa !9
  %466 = load i64, ptr %27, align 8, !tbaa !9
  %467 = icmp sle i64 %465, %466
  br i1 %467, label %468, label %487

468:                                              ; preds = %464
  %469 = load ptr, ptr %12, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %469, i32 0, i32 0
  %471 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %470, i32 0, i32 4
  %472 = load ptr, ptr %471, align 8, !tbaa !23
  %473 = load i64, ptr %25, align 8, !tbaa !9
  %474 = getelementptr inbounds double, ptr %472, i64 %473
  %475 = load double, ptr %474, align 8, !tbaa !21
  %476 = load double, ptr %29, align 8, !tbaa !21
  %477 = fmul double %475, %476
  %478 = load ptr, ptr %12, align 8, !tbaa !5
  %479 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %478, i32 0, i32 0
  %480 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %479, i32 0, i32 4
  %481 = load ptr, ptr %480, align 8, !tbaa !23
  %482 = load i64, ptr %25, align 8, !tbaa !9
  %483 = getelementptr inbounds double, ptr %481, i64 %482
  store double %477, ptr %483, align 8, !tbaa !21
  br label %484

484:                                              ; preds = %468
  %485 = load i64, ptr %25, align 8, !tbaa !9
  %486 = add nsw i64 %485, 1
  store i64 %486, ptr %25, align 8, !tbaa !9
  br label %464, !llvm.loop !34

487:                                              ; preds = %464
  %488 = load ptr, ptr %16, align 8, !tbaa !5
  %489 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %488, i32 0, i32 4
  %490 = load ptr, ptr %489, align 8, !tbaa !23
  %491 = load i64, ptr %23, align 8, !tbaa !9
  %492 = getelementptr inbounds double, ptr %490, i64 %491
  %493 = load double, ptr %492, align 8, !tbaa !21
  %494 = load double, ptr %29, align 8, !tbaa !21
  %495 = fmul double %493, %494
  %496 = load ptr, ptr %16, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %496, i32 0, i32 4
  %498 = load ptr, ptr %497, align 8, !tbaa !23
  %499 = load i64, ptr %23, align 8, !tbaa !9
  %500 = getelementptr inbounds double, ptr %498, i64 %499
  store double %495, ptr %500, align 8, !tbaa !21
  %501 = load ptr, ptr %17, align 8, !tbaa !5
  %502 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %501, i32 0, i32 4
  %503 = load ptr, ptr %502, align 8, !tbaa !23
  %504 = load i64, ptr %23, align 8, !tbaa !9
  %505 = getelementptr inbounds double, ptr %503, i64 %504
  %506 = load double, ptr %505, align 8, !tbaa !21
  %507 = load ptr, ptr %22, align 8, !tbaa !5
  %508 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %506, ptr noundef %507)
  br i1 %508, label %509, label %523

509:                                              ; preds = %487
  %510 = load ptr, ptr %17, align 8, !tbaa !5
  %511 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %510, i32 0, i32 4
  %512 = load ptr, ptr %511, align 8, !tbaa !23
  %513 = load i64, ptr %23, align 8, !tbaa !9
  %514 = getelementptr inbounds double, ptr %512, i64 %513
  %515 = load double, ptr %514, align 8, !tbaa !21
  %516 = load double, ptr %29, align 8, !tbaa !21
  %517 = fmul double %515, %516
  %518 = load ptr, ptr %17, align 8, !tbaa !5
  %519 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %518, i32 0, i32 4
  %520 = load ptr, ptr %519, align 8, !tbaa !23
  %521 = load i64, ptr %23, align 8, !tbaa !9
  %522 = getelementptr inbounds double, ptr %520, i64 %521
  store double %517, ptr %522, align 8, !tbaa !21
  br label %523

523:                                              ; preds = %509, %487
  br label %524

524:                                              ; preds = %523
  %525 = load i64, ptr %23, align 8, !tbaa !9
  %526 = add nsw i64 %525, 1
  store i64 %526, ptr %23, align 8, !tbaa !9
  br label %441, !llvm.loop !35

527:                                              ; preds = %441
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %528

528:                                              ; preds = %585, %527
  %529 = load i64, ptr %23, align 8, !tbaa !9
  %530 = load i64, ptr %15, align 8, !tbaa !9
  %531 = sub nsw i64 %530, 1
  %532 = icmp sle i64 %529, %531
  br i1 %532, label %533, label %588

533:                                              ; preds = %528
  %534 = load i64, ptr %18, align 8, !tbaa !9
  %535 = load double, ptr %29, align 8, !tbaa !21
  %536 = load ptr, ptr %14, align 8, !tbaa !5
  %537 = load i64, ptr %23, align 8, !tbaa !9
  %538 = load ptr, ptr %22, align 8, !tbaa !5
  call void @_ZN11alglib_impl5rmulrEldPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %534, double noundef %535, ptr noundef %536, i64 noundef %537, ptr noundef %538)
  %539 = load ptr, ptr %16, align 8, !tbaa !5
  %540 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %539, i32 0, i32 4
  %541 = load ptr, ptr %540, align 8, !tbaa !23
  %542 = load i64, ptr %13, align 8, !tbaa !9
  %543 = load i64, ptr %23, align 8, !tbaa !9
  %544 = add nsw i64 %542, %543
  %545 = getelementptr inbounds double, ptr %541, i64 %544
  %546 = load double, ptr %545, align 8, !tbaa !21
  %547 = load double, ptr %29, align 8, !tbaa !21
  %548 = fmul double %546, %547
  %549 = load ptr, ptr %16, align 8, !tbaa !5
  %550 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %549, i32 0, i32 4
  %551 = load ptr, ptr %550, align 8, !tbaa !23
  %552 = load i64, ptr %13, align 8, !tbaa !9
  %553 = load i64, ptr %23, align 8, !tbaa !9
  %554 = add nsw i64 %552, %553
  %555 = getelementptr inbounds double, ptr %551, i64 %554
  store double %548, ptr %555, align 8, !tbaa !21
  %556 = load ptr, ptr %17, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %556, i32 0, i32 4
  %558 = load ptr, ptr %557, align 8, !tbaa !23
  %559 = load i64, ptr %13, align 8, !tbaa !9
  %560 = load i64, ptr %23, align 8, !tbaa !9
  %561 = add nsw i64 %559, %560
  %562 = getelementptr inbounds double, ptr %558, i64 %561
  %563 = load double, ptr %562, align 8, !tbaa !21
  %564 = load ptr, ptr %22, align 8, !tbaa !5
  %565 = call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %563, ptr noundef %564)
  br i1 %565, label %566, label %584

566:                                              ; preds = %533
  %567 = load ptr, ptr %17, align 8, !tbaa !5
  %568 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %567, i32 0, i32 4
  %569 = load ptr, ptr %568, align 8, !tbaa !23
  %570 = load i64, ptr %13, align 8, !tbaa !9
  %571 = load i64, ptr %23, align 8, !tbaa !9
  %572 = add nsw i64 %570, %571
  %573 = getelementptr inbounds double, ptr %569, i64 %572
  %574 = load double, ptr %573, align 8, !tbaa !21
  %575 = load double, ptr %29, align 8, !tbaa !21
  %576 = fmul double %574, %575
  %577 = load ptr, ptr %17, align 8, !tbaa !5
  %578 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %577, i32 0, i32 4
  %579 = load ptr, ptr %578, align 8, !tbaa !23
  %580 = load i64, ptr %13, align 8, !tbaa !9
  %581 = load i64, ptr %23, align 8, !tbaa !9
  %582 = add nsw i64 %580, %581
  %583 = getelementptr inbounds double, ptr %579, i64 %582
  store double %576, ptr %583, align 8, !tbaa !21
  br label %584

584:                                              ; preds = %566, %533
  br label %585

585:                                              ; preds = %584
  %586 = load i64, ptr %23, align 8, !tbaa !9
  %587 = add nsw i64 %586, 1
  store i64 %587, ptr %23, align 8, !tbaa !9
  br label %528, !llvm.loop !36

588:                                              ; preds = %528
  br label %589

589:                                              ; preds = %588, %425, %422
  br label %590

590:                                              ; preds = %589, %343
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"bool", !7, i64 0}
!13 = !{!14, !10, i64 320}
!14 = !{!"_ZTSN11alglib_impl12sparsematrixE", !15, i64 0, !15, i64 64, !15, i64 128, !15, i64 192, !15, i64 256, !10, i64 320, !10, i64 328, !10, i64 336, !10, i64 344, !10, i64 352, !10, i64 360}
!15 = !{!"_ZTSN11alglib_impl9ae_vectorE", !10, i64 0, !10, i64 8, !12, i64 16, !16, i64 24, !7, i64 56}
!16 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!17 = !{!14, !10, i64 328}
!18 = !{!14, !10, i64 336}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = !{!22, !22, i64 0}
!22 = !{!"double", !7, i64 0}
!23 = !{!7, !7, i64 0}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.mustprogress"}
!26 = distinct !{!26, !25}
!27 = distinct !{!27, !25}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !25}
!30 = distinct !{!30, !25}
!31 = distinct !{!31, !25}
!32 = distinct !{!32, !25}
!33 = distinct !{!33, !25}
!34 = distinct !{!34, !25}
!35 = distinct !{!35, !25}
!36 = distinct !{!36, !25}


; 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.497 = external hidden unnamed_addr constant [62 x i8], align 1

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

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

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

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

declare noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef, ptr noundef) local_unnamed_addr #0

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

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

declare void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

declare void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare void @_ZN11alglib_impl5rmulrEldPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef, double noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

declare noundef double @_ZN11alglib_impl6rdotrrElPKNS_9ae_matrixElS2_lPNS_8ae_stateE(i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #0

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl25normalizemixedbrlcinplaceEPNS_12sparsematrixElPNS_9ae_matrixElPNS_9ae_vectorES5_lbS5_bPNS_8ae_stateE(ptr nocapture noundef readonly %0, i64 noundef %1, ptr noundef %2, i64 noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef readonly %5, i64 noundef %6, i1 noundef zeroext %7, ptr noundef %8, i1 noundef zeroext %9, ptr noundef %10) local_unnamed_addr #2 {
  %12 = icmp eq i64 %1, 0
  br i1 %12, label %25, label %13

13:                                               ; preds = %11
  %14 = getelementptr inbounds i8, ptr %0, i64 320
  %15 = load i64, ptr %14, align 8, !tbaa !5
  %16 = icmp eq i64 %15, 1
  br i1 %16, label %17, label %25

17:                                               ; preds = %13
  %18 = getelementptr inbounds i8, ptr %0, i64 328
  %19 = load i64, ptr %18, align 8, !tbaa !14
  %20 = icmp eq i64 %19, %1
  br i1 %20, label %21, label %25

21:                                               ; preds = %17
  %22 = getelementptr inbounds i8, ptr %0, i64 336
  %23 = load i64, ptr %22, align 8, !tbaa !15
  %24 = icmp eq i64 %23, %6
  br label %25

25:                                               ; preds = %13, %17, %21, %11
  %26 = phi i1 [ true, %11 ], [ false, %17 ], [ false, %13 ], [ %24, %21 ]
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %26, ptr noundef nonnull @.str.497, ptr noundef %10)
  br i1 %9, label %27, label %29

27:                                               ; preds = %25
  %28 = add nsw i64 %3, %1
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %8, i64 noundef %28, ptr noundef %10)
  br label %29

29:                                               ; preds = %27, %25
  %.not.not259 = icmp sgt i64 %1, 0
  br i1 %.not.not259, label %.lr.ph263, label %.preheader250

.lr.ph263:                                        ; preds = %29
  %30 = getelementptr inbounds i8, ptr %0, i64 184
  %31 = getelementptr inbounds i8, ptr %0, i64 56
  %32 = getelementptr inbounds i8, ptr %8, i64 56
  %33 = getelementptr inbounds i8, ptr %4, i64 56
  %34 = getelementptr inbounds i8, ptr %5, i64 56
  br label %41

.preheader250:                                    ; preds = %120, %29
  %.0.lcssa = phi double [ 0.000000e+00, %29 ], [ %68, %120 ]
  %.not.not236276 = icmp sgt i64 %3, 0
  br i1 %.not.not236276, label %.preheader249.lr.ph, label %._crit_edge279

.preheader249.lr.ph:                              ; preds = %.preheader250
  %.not.not243265 = icmp sgt i64 %6, 0
  %35 = getelementptr inbounds i8, ptr %2, i64 72
  %36 = getelementptr inbounds i8, ptr %8, i64 56
  %37 = getelementptr inbounds i8, ptr %4, i64 56
  %38 = getelementptr inbounds i8, ptr %5, i64 56
  %xtraiter344 = and i64 %6, 3
  %39 = icmp ult i64 %6, 4
  %unroll_iter = and i64 %6, 9223372036854775804
  %lcmp.mod345.not = icmp eq i64 %xtraiter344, 0
  %xtraiter347 = and i64 %6, 1
  %40 = icmp eq i64 %6, 1
  %unroll_iter350 = and i64 %6, 9223372036854775806
  %lcmp.mod349.not = icmp eq i64 %xtraiter347, 0
  br label %.preheader249

41:                                               ; preds = %.lr.ph263, %120
  %.0261 = phi double [ 0.000000e+00, %.lr.ph263 ], [ %68, %120 ]
  %.0226260 = phi i64 [ 0, %.lr.ph263 ], [ %45, %120 ]
  %42 = load ptr, ptr %30, align 8, !tbaa !16
  %43 = getelementptr inbounds i64, ptr %42, i64 %.0226260
  %44 = load i64, ptr %43, align 8, !tbaa !17
  %45 = add nuw nsw i64 %.0226260, 1
  %46 = getelementptr inbounds i64, ptr %42, i64 %45
  %47 = load i64, ptr %46, align 8, !tbaa !17
  %.not.not245251 = icmp slt i64 %44, %47
  br i1 %.not.not245251, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %41
  %48 = load ptr, ptr %31, align 8, !tbaa !16
  %49 = sub i64 %47, %44
  %xtraiter = and i64 %49, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph, %.prol.preheader
  %.0216253.prol = phi double [ %52, %.prol.preheader ], [ 0.000000e+00, %.lr.ph ]
  %.0220252.prol = phi i64 [ %53, %.prol.preheader ], [ %44, %.lr.ph ]
  %prol.iter = phi i64 [ %prol.iter.next, %.prol.preheader ], [ 0, %.lr.ph ]
  %50 = getelementptr inbounds double, ptr %48, i64 %.0220252.prol
  %51 = load double, ptr %50, align 8, !tbaa !18
  %52 = tail call double @llvm.fmuladd.f64(double %51, double %51, double %.0216253.prol)
  %53 = add nsw i64 %.0220252.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !20

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph
  %.lcssa339.unr = phi double [ poison, %.lr.ph ], [ %52, %.prol.preheader ]
  %.0216253.unr = phi double [ 0.000000e+00, %.lr.ph ], [ %52, %.prol.preheader ]
  %.0220252.unr = phi i64 [ %44, %.lr.ph ], [ %53, %.prol.preheader ]
  %54 = sub i64 %44, %47
  %55 = icmp ugt i64 %54, -4
  br i1 %55, label %._crit_edge, label %.lr.ph.new

.lr.ph.new:                                       ; preds = %.prol.loopexit
  %invariant.gep = getelementptr i8, ptr %48, i64 8
  %invariant.gep374 = getelementptr i8, ptr %48, i64 16
  %invariant.gep376 = getelementptr i8, ptr %48, i64 24
  br label %56

56:                                               ; preds = %56, %.lr.ph.new
  %.0216253 = phi double [ %.0216253.unr, %.lr.ph.new ], [ %65, %56 ]
  %.0220252 = phi i64 [ %.0220252.unr, %.lr.ph.new ], [ %66, %56 ]
  %57 = getelementptr inbounds double, ptr %48, i64 %.0220252
  %58 = load double, ptr %57, align 8, !tbaa !18
  %59 = tail call double @llvm.fmuladd.f64(double %58, double %58, double %.0216253)
  %gep = getelementptr double, ptr %invariant.gep, i64 %.0220252
  %60 = load double, ptr %gep, align 8, !tbaa !18
  %61 = tail call double @llvm.fmuladd.f64(double %60, double %60, double %59)
  %gep375 = getelementptr double, ptr %invariant.gep374, i64 %.0220252
  %62 = load double, ptr %gep375, align 8, !tbaa !18
  %63 = tail call double @llvm.fmuladd.f64(double %62, double %62, double %61)
  %gep377 = getelementptr double, ptr %invariant.gep376, i64 %.0220252
  %64 = load double, ptr %gep377, align 8, !tbaa !18
  %65 = tail call double @llvm.fmuladd.f64(double %64, double %64, double %63)
  %66 = add nsw i64 %.0220252, 4
  %exitcond.not.3 = icmp eq i64 %66, %47
  br i1 %exitcond.not.3, label %._crit_edge, label %56, !llvm.loop !22

._crit_edge:                                      ; preds = %.prol.loopexit, %56, %41
  %.0216.lcssa = phi double [ 0.000000e+00, %41 ], [ %.lcssa339.unr, %.prol.loopexit ], [ %65, %56 ]
  %67 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %.0216.lcssa, ptr noundef %10)
  %68 = tail call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %.0261, double noundef %67, ptr noundef %10)
  br i1 %7, label %69, label %71

69:                                               ; preds = %._crit_edge
  %70 = tail call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %67, double noundef 1.000000e+00, ptr noundef %10)
  br label %71

71:                                               ; preds = %69, %._crit_edge
  %.1217 = phi double [ %70, %69 ], [ %67, %._crit_edge ]
  br i1 %9, label %72, label %75

72:                                               ; preds = %71
  %73 = load ptr, ptr %32, align 8, !tbaa !16
  %74 = getelementptr inbounds double, ptr %73, i64 %.0226260
  store double %.1217, ptr %74, align 8, !tbaa !18
  br label %75

75:                                               ; preds = %72, %71
  %76 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %.1217, double noundef 0.000000e+00)
  br i1 %76, label %77, label %120

77:                                               ; preds = %75
  %78 = fdiv double 1.000000e+00, %.1217
  br i1 %.not.not245251, label %.lr.ph257.preheader, label %._crit_edge258

.lr.ph257.preheader:                              ; preds = %77
  %79 = sub i64 %47, %44
  %xtraiter341 = and i64 %79, 3
  %lcmp.mod342.not = icmp eq i64 %xtraiter341, 0
  br i1 %lcmp.mod342.not, label %.lr.ph257.prol.loopexit, label %.lr.ph257.prol

.lr.ph257.prol:                                   ; preds = %.lr.ph257.preheader, %.lr.ph257.prol
  %.1221255.prol = phi i64 [ %84, %.lr.ph257.prol ], [ %44, %.lr.ph257.preheader ]
  %prol.iter343 = phi i64 [ %prol.iter343.next, %.lr.ph257.prol ], [ 0, %.lr.ph257.preheader ]
  %80 = load ptr, ptr %31, align 8, !tbaa !16
  %81 = getelementptr inbounds double, ptr %80, i64 %.1221255.prol
  %82 = load double, ptr %81, align 8, !tbaa !18
  %83 = fmul double %78, %82
  store double %83, ptr %81, align 8, !tbaa !18
  %84 = add nsw i64 %.1221255.prol, 1
  %prol.iter343.next = add i64 %prol.iter343, 1
  %prol.iter343.cmp.not = icmp eq i64 %prol.iter343.next, %xtraiter341
  br i1 %prol.iter343.cmp.not, label %.lr.ph257.prol.loopexit, label %.lr.ph257.prol, !llvm.loop !24

.lr.ph257.prol.loopexit:                          ; preds = %.lr.ph257.prol, %.lr.ph257.preheader
  %.1221255.unr = phi i64 [ %44, %.lr.ph257.preheader ], [ %84, %.lr.ph257.prol ]
  %85 = sub i64 %44, %47
  %86 = icmp ugt i64 %85, -4
  br i1 %86, label %._crit_edge258, label %.lr.ph257

.lr.ph257:                                        ; preds = %.lr.ph257.prol.loopexit, %.lr.ph257
  %.1221255 = phi i64 [ %106, %.lr.ph257 ], [ %.1221255.unr, %.lr.ph257.prol.loopexit ]
  %87 = load ptr, ptr %31, align 8, !tbaa !16
  %88 = getelementptr inbounds double, ptr %87, i64 %.1221255
  %89 = load double, ptr %88, align 8, !tbaa !18
  %90 = fmul double %78, %89
  store double %90, ptr %88, align 8, !tbaa !18
  %91 = load ptr, ptr %31, align 8, !tbaa !16
  %92 = getelementptr double, ptr %91, i64 %.1221255
  %93 = getelementptr i8, ptr %92, i64 8
  %94 = load double, ptr %93, align 8, !tbaa !18
  %95 = fmul double %78, %94
  store double %95, ptr %93, align 8, !tbaa !18
  %96 = load ptr, ptr %31, align 8, !tbaa !16
  %97 = getelementptr double, ptr %96, i64 %.1221255
  %98 = getelementptr i8, ptr %97, i64 16
  %99 = load double, ptr %98, align 8, !tbaa !18
  %100 = fmul double %78, %99
  store double %100, ptr %98, align 8, !tbaa !18
  %101 = load ptr, ptr %31, align 8, !tbaa !16
  %102 = getelementptr double, ptr %101, i64 %.1221255
  %103 = getelementptr i8, ptr %102, i64 24
  %104 = load double, ptr %103, align 8, !tbaa !18
  %105 = fmul double %78, %104
  store double %105, ptr %103, align 8, !tbaa !18
  %106 = add nsw i64 %.1221255, 4
  %exitcond315.not.3 = icmp eq i64 %106, %47
  br i1 %exitcond315.not.3, label %._crit_edge258, label %.lr.ph257, !llvm.loop !25

._crit_edge258:                                   ; preds = %.lr.ph257.prol.loopexit, %.lr.ph257, %77
  %107 = load ptr, ptr %33, align 8, !tbaa !16
  %108 = getelementptr inbounds double, ptr %107, i64 %.0226260
  %109 = load double, ptr %108, align 8, !tbaa !18
  %110 = fmul double %78, %109
  store double %110, ptr %108, align 8, !tbaa !18
  %111 = load ptr, ptr %34, align 8, !tbaa !16
  %112 = getelementptr inbounds double, ptr %111, i64 %.0226260
  %113 = load double, ptr %112, align 8, !tbaa !18
  %114 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %113, ptr noundef %10)
  br i1 %114, label %115, label %120

115:                                              ; preds = %._crit_edge258
  %116 = load ptr, ptr %34, align 8, !tbaa !16
  %117 = getelementptr inbounds double, ptr %116, i64 %.0226260
  %118 = load double, ptr %117, align 8, !tbaa !18
  %119 = fmul double %78, %118
  store double %119, ptr %117, align 8, !tbaa !18
  br label %120

120:                                              ; preds = %75, %115, %._crit_edge258
  %exitcond316.not = icmp eq i64 %45, %1
  br i1 %exitcond316.not, label %.preheader250, label %41, !llvm.loop !26

.preheader249:                                    ; preds = %.preheader249.lr.ph, %191
  %.1278 = phi double [ %.0.lcssa, %.preheader249.lr.ph ], [ %145, %191 ]
  %.1227277 = phi i64 [ 0, %.preheader249.lr.ph ], [ %192, %191 ]
  br i1 %.not.not243265, label %.lr.ph268, label %._crit_edge269

.lr.ph268:                                        ; preds = %.preheader249
  %121 = load ptr, ptr %35, align 8, !tbaa !16
  %122 = getelementptr inbounds ptr, ptr %121, i64 %.1227277
  %123 = load ptr, ptr %122, align 8, !tbaa !27
  br i1 %39, label %._crit_edge269.loopexit.unr-lcssa, label %.lr.ph268.new

.lr.ph268.new:                                    ; preds = %.lr.ph268, %.lr.ph268.new
  %.2218267 = phi double [ %138, %.lr.ph268.new ], [ 0.000000e+00, %.lr.ph268 ]
  %.0224266 = phi i64 [ %139, %.lr.ph268.new ], [ 0, %.lr.ph268 ]
  %niter = phi i64 [ %niter.next.3, %.lr.ph268.new ], [ 0, %.lr.ph268 ]
  %124 = getelementptr inbounds double, ptr %123, i64 %.0224266
  %125 = load double, ptr %124, align 8, !tbaa !18
  %126 = tail call double @llvm.fmuladd.f64(double %125, double %125, double %.2218267)
  %127 = or disjoint i64 %.0224266, 1
  %128 = getelementptr inbounds double, ptr %123, i64 %127
  %129 = load double, ptr %128, align 8, !tbaa !18
  %130 = tail call double @llvm.fmuladd.f64(double %129, double %129, double %126)
  %131 = or disjoint i64 %.0224266, 2
  %132 = getelementptr inbounds double, ptr %123, i64 %131
  %133 = load double, ptr %132, align 8, !tbaa !18
  %134 = tail call double @llvm.fmuladd.f64(double %133, double %133, double %130)
  %135 = or disjoint i64 %.0224266, 3
  %136 = getelementptr inbounds double, ptr %123, i64 %135
  %137 = load double, ptr %136, align 8, !tbaa !18
  %138 = tail call double @llvm.fmuladd.f64(double %137, double %137, double %134)
  %139 = add nuw nsw i64 %.0224266, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge269.loopexit.unr-lcssa, label %.lr.ph268.new, !llvm.loop !28

._crit_edge269.loopexit.unr-lcssa:                ; preds = %.lr.ph268.new, %.lr.ph268
  %.lcssa338.ph = phi double [ poison, %.lr.ph268 ], [ %138, %.lr.ph268.new ]
  %.2218267.unr = phi double [ 0.000000e+00, %.lr.ph268 ], [ %138, %.lr.ph268.new ]
  %.0224266.unr = phi i64 [ 0, %.lr.ph268 ], [ %139, %.lr.ph268.new ]
  br i1 %lcmp.mod345.not, label %._crit_edge269, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge269.loopexit.unr-lcssa, %.epil.preheader
  %.2218267.epil = phi double [ %142, %.epil.preheader ], [ %.2218267.unr, %._crit_edge269.loopexit.unr-lcssa ]
  %.0224266.epil = phi i64 [ %143, %.epil.preheader ], [ %.0224266.unr, %._crit_edge269.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %._crit_edge269.loopexit.unr-lcssa ]
  %140 = getelementptr inbounds double, ptr %123, i64 %.0224266.epil
  %141 = load double, ptr %140, align 8, !tbaa !18
  %142 = tail call double @llvm.fmuladd.f64(double %141, double %141, double %.2218267.epil)
  %143 = add nuw nsw i64 %.0224266.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter344
  br i1 %epil.iter.cmp.not, label %._crit_edge269, label %.epil.preheader, !llvm.loop !29

._crit_edge269:                                   ; preds = %._crit_edge269.loopexit.unr-lcssa, %.epil.preheader, %.preheader249
  %.2218.lcssa = phi double [ 0.000000e+00, %.preheader249 ], [ %.lcssa338.ph, %._crit_edge269.loopexit.unr-lcssa ], [ %142, %.epil.preheader ]
  %144 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %.2218.lcssa, ptr noundef %10)
  %145 = tail call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %.1278, double noundef %144, ptr noundef %10)
  br i1 %7, label %146, label %148

146:                                              ; preds = %._crit_edge269
  %147 = tail call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %144, double noundef 1.000000e+00, ptr noundef %10)
  br label %148

148:                                              ; preds = %146, %._crit_edge269
  %.3219 = phi double [ %147, %146 ], [ %144, %._crit_edge269 ]
  br i1 %9, label %149, label %153

149:                                              ; preds = %148
  %150 = load ptr, ptr %36, align 8, !tbaa !16
  %151 = getelementptr double, ptr %150, i64 %.1227277
  %152 = getelementptr double, ptr %151, i64 %1
  store double %.3219, ptr %152, align 8, !tbaa !18
  br label %153

153:                                              ; preds = %149, %148
  %154 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %.3219, double noundef 0.000000e+00)
  br i1 %154, label %155, label %191

155:                                              ; preds = %153
  %156 = fdiv double 1.000000e+00, %.3219
  br i1 %.not.not243265, label %.lr.ph274.preheader, label %._crit_edge275

.lr.ph274.preheader:                              ; preds = %155
  br i1 %40, label %._crit_edge275.loopexit.unr-lcssa, label %.lr.ph274

.lr.ph274:                                        ; preds = %.lr.ph274.preheader, %.lr.ph274
  %.1225272 = phi i64 [ %170, %.lr.ph274 ], [ 0, %.lr.ph274.preheader ]
  %niter351 = phi i64 [ %niter351.next.1, %.lr.ph274 ], [ 0, %.lr.ph274.preheader ]
  %157 = load ptr, ptr %35, align 8, !tbaa !16
  %158 = getelementptr inbounds ptr, ptr %157, i64 %.1227277
  %159 = load ptr, ptr %158, align 8, !tbaa !27
  %160 = getelementptr inbounds double, ptr %159, i64 %.1225272
  %161 = load double, ptr %160, align 8, !tbaa !18
  %162 = fmul double %156, %161
  store double %162, ptr %160, align 8, !tbaa !18
  %163 = or disjoint i64 %.1225272, 1
  %164 = load ptr, ptr %35, align 8, !tbaa !16
  %165 = getelementptr inbounds ptr, ptr %164, i64 %.1227277
  %166 = load ptr, ptr %165, align 8, !tbaa !27
  %167 = getelementptr inbounds double, ptr %166, i64 %163
  %168 = load double, ptr %167, align 8, !tbaa !18
  %169 = fmul double %156, %168
  store double %169, ptr %167, align 8, !tbaa !18
  %170 = add nuw nsw i64 %.1225272, 2
  %niter351.next.1 = add i64 %niter351, 2
  %niter351.ncmp.1 = icmp eq i64 %niter351.next.1, %unroll_iter350
  br i1 %niter351.ncmp.1, label %._crit_edge275.loopexit.unr-lcssa, label %.lr.ph274, !llvm.loop !30

._crit_edge275.loopexit.unr-lcssa:                ; preds = %.lr.ph274, %.lr.ph274.preheader
  %.1225272.unr = phi i64 [ 0, %.lr.ph274.preheader ], [ %170, %.lr.ph274 ]
  br i1 %lcmp.mod349.not, label %._crit_edge275, label %.lr.ph274.epil

.lr.ph274.epil:                                   ; preds = %._crit_edge275.loopexit.unr-lcssa
  %171 = load ptr, ptr %35, align 8, !tbaa !16
  %172 = getelementptr inbounds ptr, ptr %171, i64 %.1227277
  %173 = load ptr, ptr %172, align 8, !tbaa !27
  %174 = getelementptr inbounds double, ptr %173, i64 %.1225272.unr
  %175 = load double, ptr %174, align 8, !tbaa !18
  %176 = fmul double %156, %175
  store double %176, ptr %174, align 8, !tbaa !18
  br label %._crit_edge275

._crit_edge275:                                   ; preds = %.lr.ph274.epil, %._crit_edge275.loopexit.unr-lcssa, %155
  %177 = load ptr, ptr %37, align 8, !tbaa !16
  %178 = add nsw i64 %.1227277, %1
  %179 = getelementptr inbounds double, ptr %177, i64 %178
  %180 = load double, ptr %179, align 8, !tbaa !18
  %181 = fmul double %156, %180
  store double %181, ptr %179, align 8, !tbaa !18
  %182 = load ptr, ptr %38, align 8, !tbaa !16
  %183 = getelementptr inbounds double, ptr %182, i64 %178
  %184 = load double, ptr %183, align 8, !tbaa !18
  %185 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %184, ptr noundef %10)
  br i1 %185, label %186, label %191

186:                                              ; preds = %._crit_edge275
  %187 = load ptr, ptr %38, align 8, !tbaa !16
  %188 = getelementptr inbounds double, ptr %187, i64 %178
  %189 = load double, ptr %188, align 8, !tbaa !18
  %190 = fmul double %156, %189
  store double %190, ptr %188, align 8, !tbaa !18
  br label %191

191:                                              ; preds = %153, %186, %._crit_edge275
  %192 = add nuw nsw i64 %.1227277, 1
  %exitcond319.not = icmp eq i64 %192, %3
  br i1 %exitcond319.not, label %._crit_edge279, label %.preheader249, !llvm.loop !31

._crit_edge279:                                   ; preds = %191, %.preheader250
  br i1 %7, label %.preheader248, label %.loopexit

.preheader248:                                    ; preds = %._crit_edge279
  br i1 %.not.not259, label %.lr.ph290, label %.preheader247

.lr.ph290:                                        ; preds = %.preheader248
  %193 = getelementptr inbounds i8, ptr %0, i64 184
  %194 = getelementptr inbounds i8, ptr %0, i64 56
  br label %195

.preheader247:                                    ; preds = %._crit_edge285, %.preheader248
  %.2.lcssa = phi double [ 0.000000e+00, %.preheader248 ], [ %222, %._crit_edge285 ]
  br i1 %.not.not236276, label %.lr.ph295, label %._crit_edge296

195:                                              ; preds = %.lr.ph290, %._crit_edge285
  %.2289 = phi double [ 0.000000e+00, %.lr.ph290 ], [ %222, %._crit_edge285 ]
  %.2228288 = phi i64 [ 0, %.lr.ph290 ], [ %199, %._crit_edge285 ]
  %196 = load ptr, ptr %193, align 8, !tbaa !16
  %197 = getelementptr inbounds i64, ptr %196, i64 %.2228288
  %198 = load i64, ptr %197, align 8, !tbaa !17
  %199 = add nuw nsw i64 %.2228288, 1
  %200 = getelementptr inbounds i64, ptr %196, i64 %199
  %201 = load i64, ptr %200, align 8, !tbaa !17
  %.not.not242280 = icmp slt i64 %198, %201
  br i1 %.not.not242280, label %.lr.ph284, label %._crit_edge285

.lr.ph284:                                        ; preds = %195
  %202 = load ptr, ptr %194, align 8, !tbaa !16
  %203 = sub i64 %201, %198
  %xtraiter354 = and i64 %203, 3
  %lcmp.mod355.not = icmp eq i64 %xtraiter354, 0
  br i1 %lcmp.mod355.not, label %.prol.loopexit353, label %.prol.preheader352

.prol.preheader352:                               ; preds = %.lr.ph284, %.prol.preheader352
  %.4282.prol = phi double [ %206, %.prol.preheader352 ], [ 0.000000e+00, %.lr.ph284 ]
  %.2222281.prol = phi i64 [ %207, %.prol.preheader352 ], [ %198, %.lr.ph284 ]
  %prol.iter356 = phi i64 [ %prol.iter356.next, %.prol.preheader352 ], [ 0, %.lr.ph284 ]
  %204 = getelementptr inbounds double, ptr %202, i64 %.2222281.prol
  %205 = load double, ptr %204, align 8, !tbaa !18
  %206 = tail call double @llvm.fmuladd.f64(double %205, double %205, double %.4282.prol)
  %207 = add nsw i64 %.2222281.prol, 1
  %prol.iter356.next = add i64 %prol.iter356, 1
  %prol.iter356.cmp.not = icmp eq i64 %prol.iter356.next, %xtraiter354
  br i1 %prol.iter356.cmp.not, label %.prol.loopexit353, label %.prol.preheader352, !llvm.loop !32

.prol.loopexit353:                                ; preds = %.prol.preheader352, %.lr.ph284
  %.lcssa336.unr = phi double [ poison, %.lr.ph284 ], [ %206, %.prol.preheader352 ]
  %.4282.unr = phi double [ 0.000000e+00, %.lr.ph284 ], [ %206, %.prol.preheader352 ]
  %.2222281.unr = phi i64 [ %198, %.lr.ph284 ], [ %207, %.prol.preheader352 ]
  %208 = sub i64 %198, %201
  %209 = icmp ugt i64 %208, -4
  br i1 %209, label %._crit_edge285, label %.lr.ph284.new

.lr.ph284.new:                                    ; preds = %.prol.loopexit353
  %invariant.gep378 = getelementptr i8, ptr %202, i64 8
  %invariant.gep380 = getelementptr i8, ptr %202, i64 16
  %invariant.gep382 = getelementptr i8, ptr %202, i64 24
  br label %210

210:                                              ; preds = %210, %.lr.ph284.new
  %.4282 = phi double [ %.4282.unr, %.lr.ph284.new ], [ %219, %210 ]
  %.2222281 = phi i64 [ %.2222281.unr, %.lr.ph284.new ], [ %220, %210 ]
  %211 = getelementptr inbounds double, ptr %202, i64 %.2222281
  %212 = load double, ptr %211, align 8, !tbaa !18
  %213 = tail call double @llvm.fmuladd.f64(double %212, double %212, double %.4282)
  %gep379 = getelementptr double, ptr %invariant.gep378, i64 %.2222281
  %214 = load double, ptr %gep379, align 8, !tbaa !18
  %215 = tail call double @llvm.fmuladd.f64(double %214, double %214, double %213)
  %gep381 = getelementptr double, ptr %invariant.gep380, i64 %.2222281
  %216 = load double, ptr %gep381, align 8, !tbaa !18
  %217 = tail call double @llvm.fmuladd.f64(double %216, double %216, double %215)
  %gep383 = getelementptr double, ptr %invariant.gep382, i64 %.2222281
  %218 = load double, ptr %gep383, align 8, !tbaa !18
  %219 = tail call double @llvm.fmuladd.f64(double %218, double %218, double %217)
  %220 = add nsw i64 %.2222281, 4
  %exitcond320.not.3 = icmp eq i64 %220, %201
  br i1 %exitcond320.not.3, label %._crit_edge285, label %210, !llvm.loop !33

._crit_edge285:                                   ; preds = %.prol.loopexit353, %210, %195
  %.4.lcssa = phi double [ 0.000000e+00, %195 ], [ %.lcssa336.unr, %.prol.loopexit353 ], [ %219, %210 ]
  %221 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %.4.lcssa, ptr noundef %10)
  %222 = tail call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %.2289, double noundef %221, ptr noundef %10)
  %exitcond321.not = icmp eq i64 %199, %1
  br i1 %exitcond321.not, label %.preheader247, label %195, !llvm.loop !34

.lr.ph295:                                        ; preds = %.preheader247, %.lr.ph295
  %.3294 = phi double [ %225, %.lr.ph295 ], [ %.2.lcssa, %.preheader247 ]
  %.3229293 = phi i64 [ %226, %.lr.ph295 ], [ 0, %.preheader247 ]
  %223 = tail call noundef double @_ZN11alglib_impl6rdotrrElPKNS_9ae_matrixElS2_lPNS_8ae_stateE(i64 noundef %6, ptr noundef %2, i64 noundef %.3229293, ptr noundef %2, i64 noundef %.3229293, ptr noundef %10)
  %224 = tail call noundef double @_ZN11alglib_impl7ae_sqrtEdPNS_8ae_stateE(double noundef %223, ptr noundef %10)
  %225 = tail call noundef double @_ZN11alglib_impl10ae_maxrealEddPNS_8ae_stateE(double noundef %.3294, double noundef %224, ptr noundef %10)
  %226 = add nuw nsw i64 %.3229293, 1
  %exitcond322.not = icmp eq i64 %226, %3
  br i1 %exitcond322.not, label %._crit_edge296, label %.lr.ph295, !llvm.loop !35

._crit_edge296:                                   ; preds = %.lr.ph295, %.preheader247
  %.3.lcssa = phi double [ %.2.lcssa, %.preheader247 ], [ %225, %.lr.ph295 ]
  %227 = tail call noundef zeroext i1 @_ZN11alglib_impl10ae_fp_lessEdd(double noundef %.3.lcssa, double noundef 1.000000e+00)
  br i1 %227, label %228, label %.loopexit

228:                                              ; preds = %._crit_edge296
  %229 = tail call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_greaterEdd(double noundef %.3.lcssa, double noundef 0.000000e+00)
  br i1 %229, label %230, label %.loopexit

230:                                              ; preds = %228
  br i1 %9, label %231, label %233

231:                                              ; preds = %230
  %232 = add nsw i64 %3, %1
  tail call void @_ZN11alglib_impl5rmulvEldPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %232, double noundef %.3.lcssa, ptr noundef %8, ptr noundef %10)
  br label %233

233:                                              ; preds = %231, %230
  %234 = fdiv double 1.000000e+00, %.3.lcssa
  br i1 %.not.not259, label %.lr.ph306, label %.preheader

.lr.ph306:                                        ; preds = %233
  %235 = getelementptr inbounds i8, ptr %0, i64 184
  %236 = getelementptr inbounds i8, ptr %0, i64 56
  %237 = getelementptr inbounds i8, ptr %4, i64 56
  %238 = getelementptr inbounds i8, ptr %5, i64 56
  br label %241

.preheader:                                       ; preds = %289, %233
  br i1 %.not.not236276, label %.lr.ph309, label %.loopexit

.lr.ph309:                                        ; preds = %.preheader
  %239 = getelementptr inbounds i8, ptr %4, i64 56
  %240 = getelementptr inbounds i8, ptr %5, i64 56
  br label %290

241:                                              ; preds = %.lr.ph306, %289
  %.4230304 = phi i64 [ 0, %.lr.ph306 ], [ %245, %289 ]
  %242 = load ptr, ptr %235, align 8, !tbaa !16
  %243 = getelementptr inbounds i64, ptr %242, i64 %.4230304
  %244 = load i64, ptr %243, align 8, !tbaa !17
  %245 = add nuw nsw i64 %.4230304, 1
  %246 = getelementptr inbounds i64, ptr %242, i64 %245
  %247 = load i64, ptr %246, align 8, !tbaa !17
  %.not.not241298 = icmp slt i64 %244, %247
  br i1 %.not.not241298, label %.lr.ph301.preheader, label %._crit_edge302

.lr.ph301.preheader:                              ; preds = %241
  %248 = sub i64 %247, %244
  %xtraiter357 = and i64 %248, 3
  %lcmp.mod358.not = icmp eq i64 %xtraiter357, 0
  br i1 %lcmp.mod358.not, label %.lr.ph301.prol.loopexit, label %.lr.ph301.prol

.lr.ph301.prol:                                   ; preds = %.lr.ph301.preheader, %.lr.ph301.prol
  %.3223299.prol = phi i64 [ %253, %.lr.ph301.prol ], [ %244, %.lr.ph301.preheader ]
  %prol.iter359 = phi i64 [ %prol.iter359.next, %.lr.ph301.prol ], [ 0, %.lr.ph301.preheader ]
  %249 = load ptr, ptr %236, align 8, !tbaa !16
  %250 = getelementptr inbounds double, ptr %249, i64 %.3223299.prol
  %251 = load double, ptr %250, align 8, !tbaa !18
  %252 = fmul double %234, %251
  store double %252, ptr %250, align 8, !tbaa !18
  %253 = add nsw i64 %.3223299.prol, 1
  %prol.iter359.next = add i64 %prol.iter359, 1
  %prol.iter359.cmp.not = icmp eq i64 %prol.iter359.next, %xtraiter357
  br i1 %prol.iter359.cmp.not, label %.lr.ph301.prol.loopexit, label %.lr.ph301.prol, !llvm.loop !36

.lr.ph301.prol.loopexit:                          ; preds = %.lr.ph301.prol, %.lr.ph301.preheader
  %.3223299.unr = phi i64 [ %244, %.lr.ph301.preheader ], [ %253, %.lr.ph301.prol ]
  %254 = sub i64 %244, %247
  %255 = icmp ugt i64 %254, -4
  br i1 %255, label %._crit_edge302, label %.lr.ph301

.lr.ph301:                                        ; preds = %.lr.ph301.prol.loopexit, %.lr.ph301
  %.3223299 = phi i64 [ %275, %.lr.ph301 ], [ %.3223299.unr, %.lr.ph301.prol.loopexit ]
  %256 = load ptr, ptr %236, align 8, !tbaa !16
  %257 = getelementptr inbounds double, ptr %256, i64 %.3223299
  %258 = load double, ptr %257, align 8, !tbaa !18
  %259 = fmul double %234, %258
  store double %259, ptr %257, align 8, !tbaa !18
  %260 = load ptr, ptr %236, align 8, !tbaa !16
  %261 = getelementptr double, ptr %260, i64 %.3223299
  %262 = getelementptr i8, ptr %261, i64 8
  %263 = load double, ptr %262, align 8, !tbaa !18
  %264 = fmul double %234, %263
  store double %264, ptr %262, align 8, !tbaa !18
  %265 = load ptr, ptr %236, align 8, !tbaa !16
  %266 = getelementptr double, ptr %265, i64 %.3223299
  %267 = getelementptr i8, ptr %266, i64 16
  %268 = load double, ptr %267, align 8, !tbaa !18
  %269 = fmul double %234, %268
  store double %269, ptr %267, align 8, !tbaa !18
  %270 = load ptr, ptr %236, align 8, !tbaa !16
  %271 = getelementptr double, ptr %270, i64 %.3223299
  %272 = getelementptr i8, ptr %271, i64 24
  %273 = load double, ptr %272, align 8, !tbaa !18
  %274 = fmul double %234, %273
  store double %274, ptr %272, align 8, !tbaa !18
  %275 = add nsw i64 %.3223299, 4
  %exitcond323.not.3 = icmp eq i64 %275, %247
  br i1 %exitcond323.not.3, label %._crit_edge302, label %.lr.ph301, !llvm.loop !37

._crit_edge302:                                   ; preds = %.lr.ph301.prol.loopexit, %.lr.ph301, %241
  %276 = load ptr, ptr %237, align 8, !tbaa !16
  %277 = getelementptr inbounds double, ptr %276, i64 %.4230304
  %278 = load double, ptr %277, align 8, !tbaa !18
  %279 = fmul double %234, %278
  store double %279, ptr %277, align 8, !tbaa !18
  %280 = load ptr, ptr %238, align 8, !tbaa !16
  %281 = getelementptr inbounds double, ptr %280, i64 %.4230304
  %282 = load double, ptr %281, align 8, !tbaa !18
  %283 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %282, ptr noundef %10)
  br i1 %283, label %284, label %289

284:                                              ; preds = %._crit_edge302
  %285 = load ptr, ptr %238, align 8, !tbaa !16
  %286 = getelementptr inbounds double, ptr %285, i64 %.4230304
  %287 = load double, ptr %286, align 8, !tbaa !18
  %288 = fmul double %234, %287
  store double %288, ptr %286, align 8, !tbaa !18
  br label %289

289:                                              ; preds = %._crit_edge302, %284
  %exitcond324.not = icmp eq i64 %245, %1
  br i1 %exitcond324.not, label %.preheader, label %241, !llvm.loop !38

290:                                              ; preds = %.lr.ph309, %305
  %.5308 = phi i64 [ 0, %.lr.ph309 ], [ %306, %305 ]
  tail call void @_ZN11alglib_impl5rmulrEldPNS_9ae_matrixElPNS_8ae_stateE(i64 noundef %6, double noundef %234, ptr noundef %2, i64 noundef %.5308, ptr noundef %10)
  %291 = load ptr, ptr %239, align 8, !tbaa !16
  %292 = add nsw i64 %.5308, %1
  %293 = getelementptr inbounds double, ptr %291, i64 %292
  %294 = load double, ptr %293, align 8, !tbaa !18
  %295 = fmul double %234, %294
  store double %295, ptr %293, align 8, !tbaa !18
  %296 = load ptr, ptr %240, align 8, !tbaa !16
  %297 = getelementptr inbounds double, ptr %296, i64 %292
  %298 = load double, ptr %297, align 8, !tbaa !18
  %299 = tail call noundef zeroext i1 @_ZN11alglib_impl11ae_isfiniteEdPNS_8ae_stateE(double noundef %298, ptr noundef %10)
  br i1 %299, label %300, label %305

300:                                              ; preds = %290
  %301 = load ptr, ptr %240, align 8, !tbaa !16
  %302 = getelementptr inbounds double, ptr %301, i64 %292
  %303 = load double, ptr %302, align 8, !tbaa !18
  %304 = fmul double %234, %303
  store double %304, ptr %302, align 8, !tbaa !18
  br label %305

305:                                              ; preds = %290, %300
  %306 = add nuw nsw i64 %.5308, 1
  %exitcond325.not = icmp eq i64 %306, %3
  br i1 %exitcond325.not, label %.loopexit, label %290, !llvm.loop !39

.loopexit:                                        ; preds = %305, %.preheader, %._crit_edge296, %228, %._crit_edge279
  ret void
}

attributes #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 #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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" }

!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, !8, i64 320}
!6 = !{!"_ZTSN11alglib_impl12sparsematrixE", !7, i64 0, !7, i64 64, !7, i64 128, !7, i64 192, !7, i64 256, !8, i64 320, !8, i64 328, !8, i64 336, !8, i64 344, !8, i64 352, !8, i64 360}
!7 = !{!"_ZTSN11alglib_impl9ae_vectorE", !8, i64 0, !8, i64 8, !11, i64 16, !12, i64 24, !9, i64 56}
!8 = !{!"long", !9, i64 0}
!9 = !{!"omnipotent char", !10, i64 0}
!10 = !{!"Simple C++ TBAA"}
!11 = !{!"bool", !9, i64 0}
!12 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24}
!13 = !{!"any pointer", !9, i64 0}
!14 = !{!6, !8, i64 328}
!15 = !{!6, !8, i64 336}
!16 = !{!9, !9, i64 0}
!17 = !{!8, !8, i64 0}
!18 = !{!19, !19, i64 0}
!19 = !{!"double", !9, i64 0}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.unroll.disable"}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !21}
!25 = distinct !{!25, !23}
!26 = distinct !{!26, !23}
!27 = !{!13, !13, i64 0}
!28 = distinct !{!28, !23}
!29 = distinct !{!29, !21}
!30 = distinct !{!30, !23}
!31 = distinct !{!31, !23}
!32 = distinct !{!32, !21}
!33 = distinct !{!33, !23}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}
!36 = distinct !{!36, !21}
!37 = distinct !{!37, !23}
!38 = distinct !{!38, !23}
!39 = distinct !{!39, !23}


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