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

; 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.1 }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%union.anon.1 = type { ptr }

@.str.177 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.181 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.182 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.183 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.184 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.185 = external hidden unnamed_addr constant [135 x i8], align 1
@.str.186 = external hidden unnamed_addr constant [54 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: mustprogress uwtable
define dso_local void @_ZN11alglib_impl10sparsegemvEPKNS_12sparsematrixEdlPKNS_9ae_vectorEldPS3_lPNS_8ae_stateE(ptr noundef %0, double noundef %1, i64 noundef %2, ptr noundef %3, i64 noundef %4, double noundef %5, ptr noundef %6, i64 noundef %7, ptr noundef %8) #2 {
  %10 = alloca ptr, align 8
  %11 = alloca double, align 8
  %12 = alloca i64, align 8
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca double, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i64, align 8
  %18 = alloca ptr, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca double, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca double, align 8
  %34 = alloca double, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i32, align 4
  store ptr %0, ptr %10, align 8, !tbaa !5
  store double %1, ptr %11, align 8, !tbaa !9
  store i64 %2, ptr %12, align 8, !tbaa !11
  store ptr %3, ptr %13, align 8, !tbaa !5
  store i64 %4, ptr %14, align 8, !tbaa !11
  store double %5, ptr %15, align 8, !tbaa !9
  store ptr %6, ptr %16, align 8, !tbaa !5
  store i64 %7, ptr %17, align 8, !tbaa !11
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #4
  %38 = load i64, ptr %12, align 8, !tbaa !11
  %39 = icmp eq i64 %38, 0
  br i1 %39, label %43, label %40

40:                                               ; preds = %9
  %41 = load i64, ptr %12, align 8, !tbaa !11
  %42 = icmp eq i64 %41, 1
  br label %43

43:                                               ; preds = %40, %9
  %44 = phi i1 [ true, %9 ], [ %42, %40 ]
  %45 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %44, ptr noundef @.str.181, ptr noundef %45)
  %46 = load ptr, ptr %10, align 8, !tbaa !5
  %47 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %46, i32 0, i32 5
  %48 = load i64, ptr %47, align 8, !tbaa !13
  %49 = icmp eq i64 %48, 1
  br i1 %49, label %55, label %50

50:                                               ; preds = %43
  %51 = load ptr, ptr %10, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %51, i32 0, i32 5
  %53 = load i64, ptr %52, align 8, !tbaa !13
  %54 = icmp eq i64 %53, 2
  br label %55

55:                                               ; preds = %50, %43
  %56 = phi i1 [ true, %43 ], [ %54, %50 ]
  %57 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %56, ptr noundef @.str.182, ptr noundef %57)
  %58 = load i64, ptr %12, align 8, !tbaa !11
  %59 = icmp eq i64 %58, 0
  br i1 %59, label %60, label %67

60:                                               ; preds = %55
  %61 = load ptr, ptr %10, align 8, !tbaa !5
  %62 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %61, i32 0, i32 6
  %63 = load i64, ptr %62, align 8, !tbaa !18
  store i64 %63, ptr %19, align 8, !tbaa !11
  %64 = load ptr, ptr %10, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %64, i32 0, i32 7
  %66 = load i64, ptr %65, align 8, !tbaa !19
  store i64 %66, ptr %20, align 8, !tbaa !11
  br label %74

67:                                               ; preds = %55
  %68 = load ptr, ptr %10, align 8, !tbaa !5
  %69 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %68, i32 0, i32 7
  %70 = load i64, ptr %69, align 8, !tbaa !19
  store i64 %70, ptr %19, align 8, !tbaa !11
  %71 = load ptr, ptr %10, align 8, !tbaa !5
  %72 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %71, i32 0, i32 6
  %73 = load i64, ptr %72, align 8, !tbaa !18
  store i64 %73, ptr %20, align 8, !tbaa !11
  br label %74

74:                                               ; preds = %67, %60
  %75 = load i64, ptr %19, align 8, !tbaa !11
  %76 = icmp sge i64 %75, 0
  br i1 %76, label %77, label %80

77:                                               ; preds = %74
  %78 = load i64, ptr %20, align 8, !tbaa !11
  %79 = icmp sge i64 %78, 0
  br label %80

80:                                               ; preds = %77, %74
  %81 = phi i1 [ false, %74 ], [ %79, %77 ]
  %82 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %81, ptr noundef @.str.183, ptr noundef %82)
  %83 = load i64, ptr %20, align 8, !tbaa !11
  %84 = icmp eq i64 %83, 0
  br i1 %84, label %93, label %85

85:                                               ; preds = %80
  %86 = load ptr, ptr %13, align 8, !tbaa !5
  %87 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %86, i32 0, i32 0
  %88 = load i64, ptr %87, align 8, !tbaa !20
  %89 = load i64, ptr %14, align 8, !tbaa !11
  %90 = add nsw i64 %88, %89
  %91 = load i64, ptr %20, align 8, !tbaa !11
  %92 = icmp sge i64 %90, %91
  br label %93

93:                                               ; preds = %85, %80
  %94 = phi i1 [ true, %80 ], [ %92, %85 ]
  %95 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %94, ptr noundef @.str.184, ptr noundef %95)
  %96 = load i64, ptr %19, align 8, !tbaa !11
  %97 = icmp eq i64 %96, 0
  br i1 %97, label %106, label %98

98:                                               ; preds = %93
  %99 = load ptr, ptr %16, align 8, !tbaa !5
  %100 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %99, i32 0, i32 0
  %101 = load i64, ptr %100, align 8, !tbaa !20
  %102 = load i64, ptr %17, align 8, !tbaa !11
  %103 = add nsw i64 %101, %102
  %104 = load i64, ptr %19, align 8, !tbaa !11
  %105 = icmp sge i64 %103, %104
  br label %106

106:                                              ; preds = %98, %93
  %107 = phi i1 [ true, %93 ], [ %105, %98 ]
  %108 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %107, ptr noundef @.str.184, ptr noundef %108)
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  %110 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %109, i32 0, i32 6
  %111 = load i64, ptr %110, align 8, !tbaa !18
  store i64 %111, ptr %21, align 8, !tbaa !11
  %112 = load ptr, ptr %10, align 8, !tbaa !5
  %113 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %112, i32 0, i32 7
  %114 = load i64, ptr %113, align 8, !tbaa !19
  store i64 %114, ptr %22, align 8, !tbaa !11
  %115 = load i64, ptr %19, align 8, !tbaa !11
  %116 = icmp eq i64 %115, 0
  br i1 %116, label %117, label %118

117:                                              ; preds = %106
  store i32 1, ptr %37, align 4
  br label %720

118:                                              ; preds = %106
  %119 = load double, ptr %15, align 8, !tbaa !9
  %120 = call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %119, double noundef 0.000000e+00)
  br i1 %120, label %121, label %149

121:                                              ; preds = %118
  store i64 0, ptr %23, align 8, !tbaa !11
  br label %122

122:                                              ; preds = %145, %121
  %123 = load i64, ptr %23, align 8, !tbaa !11
  %124 = load i64, ptr %19, align 8, !tbaa !11
  %125 = sub nsw i64 %124, 1
  %126 = icmp sle i64 %123, %125
  br i1 %126, label %127, label %148

127:                                              ; preds = %122
  %128 = load double, ptr %15, align 8, !tbaa !9
  %129 = load ptr, ptr %16, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %129, i32 0, i32 4
  %131 = load ptr, ptr %130, align 8, !tbaa !21
  %132 = load i64, ptr %17, align 8, !tbaa !11
  %133 = load i64, ptr %23, align 8, !tbaa !11
  %134 = add nsw i64 %132, %133
  %135 = getelementptr inbounds double, ptr %131, i64 %134
  %136 = load double, ptr %135, align 8, !tbaa !9
  %137 = fmul double %128, %136
  %138 = load ptr, ptr %16, align 8, !tbaa !5
  %139 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %138, i32 0, i32 4
  %140 = load ptr, ptr %139, align 8, !tbaa !21
  %141 = load i64, ptr %17, align 8, !tbaa !11
  %142 = load i64, ptr %23, align 8, !tbaa !11
  %143 = add nsw i64 %141, %142
  %144 = getelementptr inbounds double, ptr %140, i64 %143
  store double %137, ptr %144, align 8, !tbaa !9
  br label %145

145:                                              ; preds = %127
  %146 = load i64, ptr %23, align 8, !tbaa !11
  %147 = add nsw i64 %146, 1
  store i64 %147, ptr %23, align 8, !tbaa !11
  br label %122, !llvm.loop !22

148:                                              ; preds = %122
  br label %167

149:                                              ; preds = %118
  store i64 0, ptr %23, align 8, !tbaa !11
  br label %150

150:                                              ; preds = %163, %149
  %151 = load i64, ptr %23, align 8, !tbaa !11
  %152 = load i64, ptr %19, align 8, !tbaa !11
  %153 = sub nsw i64 %152, 1
  %154 = icmp sle i64 %151, %153
  br i1 %154, label %155, label %166

155:                                              ; preds = %150
  %156 = load ptr, ptr %16, align 8, !tbaa !5
  %157 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %156, i32 0, i32 4
  %158 = load ptr, ptr %157, align 8, !tbaa !21
  %159 = load i64, ptr %17, align 8, !tbaa !11
  %160 = load i64, ptr %23, align 8, !tbaa !11
  %161 = add nsw i64 %159, %160
  %162 = getelementptr inbounds double, ptr %158, i64 %161
  store double 0.000000e+00, ptr %162, align 8, !tbaa !9
  br label %163

163:                                              ; preds = %155
  %164 = load i64, ptr %23, align 8, !tbaa !11
  %165 = add nsw i64 %164, 1
  store i64 %165, ptr %23, align 8, !tbaa !11
  br label %150, !llvm.loop !24

166:                                              ; preds = %150
  br label %167

167:                                              ; preds = %166, %148
  %168 = load i64, ptr %20, align 8, !tbaa !11
  %169 = icmp eq i64 %168, 0
  br i1 %169, label %173, label %170

170:                                              ; preds = %167
  %171 = load double, ptr %11, align 8, !tbaa !9
  %172 = call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %171, double noundef 0.000000e+00)
  br i1 %172, label %173, label %174

173:                                              ; preds = %170, %167
  store i32 1, ptr %37, align 4
  br label %720

174:                                              ; preds = %170
  %175 = load i64, ptr %12, align 8, !tbaa !11
  %176 = icmp eq i64 %175, 0
  br i1 %176, label %177, label %449

177:                                              ; preds = %174
  %178 = load ptr, ptr %10, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %178, i32 0, i32 5
  %180 = load i64, ptr %179, align 8, !tbaa !13
  %181 = icmp eq i64 %180, 1
  br i1 %181, label %182, label %295

182:                                              ; preds = %177
  %183 = load ptr, ptr %10, align 8, !tbaa !5
  %184 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %183, i32 0, i32 9
  %185 = load i64, ptr %184, align 8, !tbaa !25
  %186 = load ptr, ptr %10, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %186, i32 0, i32 2
  %188 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %187, i32 0, i32 4
  %189 = load ptr, ptr %188, align 8, !tbaa !21
  %190 = load ptr, ptr %10, align 8, !tbaa !5
  %191 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %190, i32 0, i32 6
  %192 = load i64, ptr %191, align 8, !tbaa !18
  %193 = getelementptr inbounds i64, ptr %189, i64 %192
  %194 = load i64, ptr %193, align 8, !tbaa !11
  %195 = icmp eq i64 %185, %194
  %196 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %195, ptr noundef @.str.185, ptr noundef %196)
  %197 = load ptr, ptr %10, align 8, !tbaa !5
  %198 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %197, i32 0, i32 6
  %199 = load i64, ptr %198, align 8, !tbaa !18
  %200 = load ptr, ptr %10, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %200, i32 0, i32 7
  %202 = load i64, ptr %201, align 8, !tbaa !19
  %203 = load double, ptr %11, align 8, !tbaa !9
  %204 = load ptr, ptr %10, align 8, !tbaa !5
  %205 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %204, i32 0, i32 0
  %206 = load ptr, ptr %10, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %206, i32 0, i32 1
  %208 = load ptr, ptr %10, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %208, i32 0, i32 2
  %210 = load ptr, ptr %13, align 8, !tbaa !5
  %211 = load i64, ptr %14, align 8, !tbaa !11
  %212 = load ptr, ptr %16, align 8, !tbaa !5
  %213 = load i64, ptr %17, align 8, !tbaa !11
  %214 = load ptr, ptr %18, align 8, !tbaa !5
  %215 = call noundef zeroext i1 @_ZN11alglib_impl16sparsegemvcrsmklEllldPKNS_9ae_vectorES2_S2_S2_ldPS0_lPNS_8ae_stateE(i64 noundef 0, i64 noundef %199, i64 noundef %202, double noundef %203, ptr noundef %205, ptr noundef %207, ptr noundef %209, ptr noundef %210, i64 noundef %211, double noundef 1.000000e+00, ptr noundef %212, i64 noundef %213, ptr noundef %214)
  br i1 %215, label %216, label %217

216:                                              ; preds = %182
  store i32 1, ptr %37, align 4
  br label %720

217:                                              ; preds = %182
  store i64 0, ptr %23, align 8, !tbaa !11
  br label %218

218:                                              ; preds = %291, %217
  %219 = load i64, ptr %23, align 8, !tbaa !11
  %220 = load i64, ptr %21, align 8, !tbaa !11
  %221 = sub nsw i64 %220, 1
  %222 = icmp sle i64 %219, %221
  br i1 %222, label %223, label %294

223:                                              ; preds = %218
  store double 0.000000e+00, ptr %25, align 8, !tbaa !9
  %224 = load ptr, ptr %10, align 8, !tbaa !5
  %225 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %224, i32 0, i32 2
  %226 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %225, i32 0, i32 4
  %227 = load ptr, ptr %226, align 8, !tbaa !21
  %228 = load i64, ptr %23, align 8, !tbaa !11
  %229 = getelementptr inbounds i64, ptr %227, i64 %228
  %230 = load i64, ptr %229, align 8, !tbaa !11
  store i64 %230, ptr %26, align 8, !tbaa !11
  %231 = load ptr, ptr %10, align 8, !tbaa !5
  %232 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %231, i32 0, i32 2
  %233 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %232, i32 0, i32 4
  %234 = load ptr, ptr %233, align 8, !tbaa !21
  %235 = load i64, ptr %23, align 8, !tbaa !11
  %236 = add nsw i64 %235, 1
  %237 = getelementptr inbounds i64, ptr %234, i64 %236
  %238 = load i64, ptr %237, align 8, !tbaa !11
  %239 = sub nsw i64 %238, 1
  store i64 %239, ptr %27, align 8, !tbaa !11
  %240 = load i64, ptr %26, align 8, !tbaa !11
  store i64 %240, ptr %24, align 8, !tbaa !11
  br label %241

241:                                              ; preds = %269, %223
  %242 = load i64, ptr %24, align 8, !tbaa !11
  %243 = load i64, ptr %27, align 8, !tbaa !11
  %244 = icmp sle i64 %242, %243
  br i1 %244, label %245, label %272

245:                                              ; preds = %241
  %246 = load double, ptr %25, align 8, !tbaa !9
  %247 = load ptr, ptr %13, align 8, !tbaa !5
  %248 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %247, i32 0, i32 4
  %249 = load ptr, ptr %248, align 8, !tbaa !21
  %250 = load ptr, ptr %10, align 8, !tbaa !5
  %251 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %250, i32 0, i32 1
  %252 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %251, i32 0, i32 4
  %253 = load ptr, ptr %252, align 8, !tbaa !21
  %254 = load i64, ptr %24, align 8, !tbaa !11
  %255 = getelementptr inbounds i64, ptr %253, i64 %254
  %256 = load i64, ptr %255, align 8, !tbaa !11
  %257 = load i64, ptr %14, align 8, !tbaa !11
  %258 = add nsw i64 %256, %257
  %259 = getelementptr inbounds double, ptr %249, i64 %258
  %260 = load double, ptr %259, align 8, !tbaa !9
  %261 = load ptr, ptr %10, align 8, !tbaa !5
  %262 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %261, i32 0, i32 0
  %263 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %262, i32 0, i32 4
  %264 = load ptr, ptr %263, align 8, !tbaa !21
  %265 = load i64, ptr %24, align 8, !tbaa !11
  %266 = getelementptr inbounds double, ptr %264, i64 %265
  %267 = load double, ptr %266, align 8, !tbaa !9
  %268 = call double @llvm.fmuladd.f64(double %260, double %267, double %246)
  store double %268, ptr %25, align 8, !tbaa !9
  br label %269

269:                                              ; preds = %245
  %270 = load i64, ptr %24, align 8, !tbaa !11
  %271 = add nsw i64 %270, 1
  store i64 %271, ptr %24, align 8, !tbaa !11
  br label %241, !llvm.loop !26

272:                                              ; preds = %241
  %273 = load double, ptr %11, align 8, !tbaa !9
  %274 = load double, ptr %25, align 8, !tbaa !9
  %275 = load ptr, ptr %16, align 8, !tbaa !5
  %276 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %275, i32 0, i32 4
  %277 = load ptr, ptr %276, align 8, !tbaa !21
  %278 = load i64, ptr %23, align 8, !tbaa !11
  %279 = load i64, ptr %17, align 8, !tbaa !11
  %280 = add nsw i64 %278, %279
  %281 = getelementptr inbounds double, ptr %277, i64 %280
  %282 = load double, ptr %281, align 8, !tbaa !9
  %283 = call double @llvm.fmuladd.f64(double %273, double %274, double %282)
  %284 = load ptr, ptr %16, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %284, i32 0, i32 4
  %286 = load ptr, ptr %285, align 8, !tbaa !21
  %287 = load i64, ptr %23, align 8, !tbaa !11
  %288 = load i64, ptr %17, align 8, !tbaa !11
  %289 = add nsw i64 %287, %288
  %290 = getelementptr inbounds double, ptr %286, i64 %289
  store double %283, ptr %290, align 8, !tbaa !9
  br label %291

291:                                              ; preds = %272
  %292 = load i64, ptr %23, align 8, !tbaa !11
  %293 = add nsw i64 %292, 1
  store i64 %293, ptr %23, align 8, !tbaa !11
  br label %218, !llvm.loop !27

294:                                              ; preds = %218
  store i32 1, ptr %37, align 4
  br label %720

295:                                              ; preds = %177
  %296 = load ptr, ptr %10, align 8, !tbaa !5
  %297 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %296, i32 0, i32 5
  %298 = load i64, ptr %297, align 8, !tbaa !13
  %299 = icmp eq i64 %298, 2
  br i1 %299, label %300, label %448

300:                                              ; preds = %295
  %301 = load ptr, ptr %10, align 8, !tbaa !5
  %302 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %301, i32 0, i32 6
  %303 = load i64, ptr %302, align 8, !tbaa !18
  %304 = load ptr, ptr %10, align 8, !tbaa !5
  %305 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %304, i32 0, i32 7
  %306 = load i64, ptr %305, align 8, !tbaa !19
  %307 = icmp eq i64 %303, %306
  %308 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %307, ptr noundef @.str.177, ptr noundef %308)
  store i64 0, ptr %23, align 8, !tbaa !11
  br label %309

309:                                              ; preds = %443, %300
  %310 = load i64, ptr %23, align 8, !tbaa !11
  %311 = load i64, ptr %22, align 8, !tbaa !11
  %312 = sub nsw i64 %311, 1
  %313 = icmp sle i64 %310, %312
  br i1 %313, label %314, label %446

314:                                              ; preds = %309
  %315 = load ptr, ptr %10, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %315, i32 0, i32 2
  %317 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %316, i32 0, i32 4
  %318 = load ptr, ptr %317, align 8, !tbaa !21
  %319 = load i64, ptr %23, align 8, !tbaa !11
  %320 = getelementptr inbounds i64, ptr %318, i64 %319
  %321 = load i64, ptr %320, align 8, !tbaa !11
  store i64 %321, ptr %31, align 8, !tbaa !11
  %322 = load ptr, ptr %10, align 8, !tbaa !5
  %323 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %322, i32 0, i32 2
  %324 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %323, i32 0, i32 4
  %325 = load ptr, ptr %324, align 8, !tbaa !21
  %326 = load i64, ptr %23, align 8, !tbaa !11
  %327 = add nsw i64 %326, 1
  %328 = getelementptr inbounds i64, ptr %325, i64 %327
  %329 = load i64, ptr %328, align 8, !tbaa !11
  store i64 %329, ptr %32, align 8, !tbaa !11
  %330 = load ptr, ptr %10, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %330, i32 0, i32 3
  %332 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %331, i32 0, i32 4
  %333 = load ptr, ptr %332, align 8, !tbaa !21
  %334 = load i64, ptr %23, align 8, !tbaa !11
  %335 = getelementptr inbounds i64, ptr %333, i64 %334
  %336 = load i64, ptr %335, align 8, !tbaa !11
  store i64 %336, ptr %29, align 8, !tbaa !11
  %337 = load ptr, ptr %10, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %337, i32 0, i32 4
  %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 %23, align 8, !tbaa !11
  %342 = getelementptr inbounds i64, ptr %340, i64 %341
  %343 = load i64, ptr %342, align 8, !tbaa !11
  store i64 %343, ptr %30, align 8, !tbaa !11
  %344 = load ptr, ptr %10, align 8, !tbaa !5
  %345 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %344, i32 0, i32 0
  %346 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %345, i32 0, i32 4
  %347 = load ptr, ptr %346, align 8, !tbaa !21
  %348 = load i64, ptr %31, align 8, !tbaa !11
  %349 = load i64, ptr %29, align 8, !tbaa !11
  %350 = add nsw i64 %348, %349
  %351 = getelementptr inbounds double, ptr %347, i64 %350
  %352 = load double, ptr %351, align 8, !tbaa !9
  %353 = load ptr, ptr %13, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %353, i32 0, i32 4
  %355 = load ptr, ptr %354, align 8, !tbaa !21
  %356 = load i64, ptr %23, align 8, !tbaa !11
  %357 = load i64, ptr %14, align 8, !tbaa !11
  %358 = add nsw i64 %356, %357
  %359 = getelementptr inbounds double, ptr %355, i64 %358
  %360 = load double, ptr %359, align 8, !tbaa !9
  %361 = fmul double %352, %360
  store double %361, ptr %33, align 8, !tbaa !9
  %362 = load i64, ptr %29, align 8, !tbaa !11
  %363 = icmp sgt i64 %362, 0
  br i1 %363, label %364, label %397

364:                                              ; preds = %314
  %365 = load i64, ptr %31, align 8, !tbaa !11
  store i64 %365, ptr %26, align 8, !tbaa !11
  %366 = load i64, ptr %31, align 8, !tbaa !11
  %367 = load i64, ptr %29, align 8, !tbaa !11
  %368 = add nsw i64 %366, %367
  %369 = sub nsw i64 %368, 1
  store i64 %369, ptr %27, align 8, !tbaa !11
  %370 = load i64, ptr %23, align 8, !tbaa !11
  %371 = load i64, ptr %29, align 8, !tbaa !11
  %372 = sub nsw i64 %370, %371
  %373 = load i64, ptr %14, align 8, !tbaa !11
  %374 = add nsw i64 %372, %373
  store i64 %374, ptr %35, align 8, !tbaa !11
  %375 = load i64, ptr %23, align 8, !tbaa !11
  %376 = sub nsw i64 %375, 1
  %377 = load i64, ptr %14, align 8, !tbaa !11
  %378 = add nsw i64 %376, %377
  store i64 %378, ptr %36, align 8, !tbaa !11
  %379 = load ptr, ptr %10, align 8, !tbaa !5
  %380 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %379, i32 0, i32 0
  %381 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %380, i32 0, i32 4
  %382 = load ptr, ptr %381, align 8, !tbaa !21
  %383 = load i64, ptr %26, align 8, !tbaa !11
  %384 = getelementptr inbounds double, ptr %382, i64 %383
  %385 = load ptr, ptr %13, align 8, !tbaa !5
  %386 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %385, i32 0, i32 4
  %387 = load ptr, ptr %386, align 8, !tbaa !21
  %388 = load i64, ptr %35, align 8, !tbaa !11
  %389 = getelementptr inbounds double, ptr %387, i64 %388
  %390 = load i64, ptr %26, align 8, !tbaa !11
  %391 = load i64, ptr %27, align 8, !tbaa !11
  %392 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %390, i64 noundef %391)
  %393 = call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %384, i64 noundef 1, ptr noundef %389, i64 noundef 1, i64 noundef %392)
  store double %393, ptr %34, align 8, !tbaa !9
  %394 = load double, ptr %33, align 8, !tbaa !9
  %395 = load double, ptr %34, align 8, !tbaa !9
  %396 = fadd double %394, %395
  store double %396, ptr %33, align 8, !tbaa !9
  br label %397

397:                                              ; preds = %364, %314
  %398 = load double, ptr %11, align 8, !tbaa !9
  %399 = load double, ptr %33, align 8, !tbaa !9
  %400 = load ptr, ptr %16, align 8, !tbaa !5
  %401 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %400, i32 0, i32 4
  %402 = load ptr, ptr %401, align 8, !tbaa !21
  %403 = load i64, ptr %23, align 8, !tbaa !11
  %404 = load i64, ptr %17, align 8, !tbaa !11
  %405 = add nsw i64 %403, %404
  %406 = getelementptr inbounds double, ptr %402, i64 %405
  %407 = load double, ptr %406, align 8, !tbaa !9
  %408 = call double @llvm.fmuladd.f64(double %398, double %399, double %407)
  %409 = load ptr, ptr %16, align 8, !tbaa !5
  %410 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %409, i32 0, i32 4
  %411 = load ptr, ptr %410, align 8, !tbaa !21
  %412 = load i64, ptr %23, align 8, !tbaa !11
  %413 = load i64, ptr %17, align 8, !tbaa !11
  %414 = add nsw i64 %412, %413
  %415 = getelementptr inbounds double, ptr %411, i64 %414
  store double %408, ptr %415, align 8, !tbaa !9
  %416 = load i64, ptr %30, align 8, !tbaa !11
  %417 = icmp sgt i64 %416, 0
  br i1 %417, label %418, label %442

418:                                              ; preds = %397
  %419 = load i64, ptr %30, align 8, !tbaa !11
  %420 = load double, ptr %11, align 8, !tbaa !9
  %421 = load ptr, ptr %13, align 8, !tbaa !5
  %422 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %421, i32 0, i32 4
  %423 = load ptr, ptr %422, align 8, !tbaa !21
  %424 = load i64, ptr %23, align 8, !tbaa !11
  %425 = load i64, ptr %14, align 8, !tbaa !11
  %426 = add nsw i64 %424, %425
  %427 = getelementptr inbounds double, ptr %423, i64 %426
  %428 = load double, ptr %427, align 8, !tbaa !9
  %429 = fmul double %420, %428
  %430 = load ptr, ptr %10, align 8, !tbaa !5
  %431 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %430, i32 0, i32 0
  %432 = load i64, ptr %32, align 8, !tbaa !11
  %433 = load i64, ptr %30, align 8, !tbaa !11
  %434 = sub nsw i64 %432, %433
  %435 = load ptr, ptr %16, align 8, !tbaa !5
  %436 = load i64, ptr %23, align 8, !tbaa !11
  %437 = load i64, ptr %30, align 8, !tbaa !11
  %438 = sub nsw i64 %436, %437
  %439 = load i64, ptr %17, align 8, !tbaa !11
  %440 = add nsw i64 %438, %439
  %441 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl6raddvxEldPKNS_9ae_vectorElPS0_lPNS_8ae_stateE(i64 noundef %419, double noundef %429, ptr noundef %431, i64 noundef %434, ptr noundef %435, i64 noundef %440, ptr noundef %441)
  br label %442

442:                                              ; preds = %418, %397
  br label %443

443:                                              ; preds = %442
  %444 = load i64, ptr %23, align 8, !tbaa !11
  %445 = add nsw i64 %444, 1
  store i64 %445, ptr %23, align 8, !tbaa !11
  br label %309, !llvm.loop !28

446:                                              ; preds = %309
  %447 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl8touchintEPlPNS_8ae_stateE(ptr noundef %36, ptr noundef %447)
  store i32 1, ptr %37, align 4
  br label %720

448:                                              ; preds = %295
  br label %719

449:                                              ; preds = %174
  %450 = load ptr, ptr %10, align 8, !tbaa !5
  %451 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %450, i32 0, i32 5
  %452 = load i64, ptr %451, align 8, !tbaa !13
  %453 = icmp eq i64 %452, 1
  br i1 %453, label %454, label %565

454:                                              ; preds = %449
  %455 = load ptr, ptr %10, align 8, !tbaa !5
  %456 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %455, i32 0, i32 9
  %457 = load i64, ptr %456, align 8, !tbaa !25
  %458 = load ptr, ptr %10, align 8, !tbaa !5
  %459 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %458, i32 0, i32 2
  %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 ptr, ptr %10, align 8, !tbaa !5
  %463 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %462, i32 0, i32 6
  %464 = load i64, ptr %463, align 8, !tbaa !18
  %465 = getelementptr inbounds i64, ptr %461, i64 %464
  %466 = load i64, ptr %465, align 8, !tbaa !11
  %467 = icmp eq i64 %457, %466
  %468 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %467, ptr noundef @.str.185, ptr noundef %468)
  %469 = load ptr, ptr %10, align 8, !tbaa !5
  %470 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %469, i32 0, i32 6
  %471 = load i64, ptr %470, align 8, !tbaa !18
  %472 = load ptr, ptr %10, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %472, i32 0, i32 7
  %474 = load i64, ptr %473, align 8, !tbaa !19
  %475 = load double, ptr %11, align 8, !tbaa !9
  %476 = load ptr, ptr %10, align 8, !tbaa !5
  %477 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %476, i32 0, i32 0
  %478 = load ptr, ptr %10, align 8, !tbaa !5
  %479 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %478, i32 0, i32 1
  %480 = load ptr, ptr %10, align 8, !tbaa !5
  %481 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %480, i32 0, i32 2
  %482 = load ptr, ptr %13, align 8, !tbaa !5
  %483 = load i64, ptr %14, align 8, !tbaa !11
  %484 = load ptr, ptr %16, align 8, !tbaa !5
  %485 = load i64, ptr %17, align 8, !tbaa !11
  %486 = load ptr, ptr %18, align 8, !tbaa !5
  %487 = call noundef zeroext i1 @_ZN11alglib_impl16sparsegemvcrsmklEllldPKNS_9ae_vectorES2_S2_S2_ldPS0_lPNS_8ae_stateE(i64 noundef 1, i64 noundef %471, i64 noundef %474, double noundef %475, ptr noundef %477, ptr noundef %479, ptr noundef %481, ptr noundef %482, i64 noundef %483, double noundef 1.000000e+00, ptr noundef %484, i64 noundef %485, ptr noundef %486)
  br i1 %487, label %488, label %489

488:                                              ; preds = %454
  store i32 1, ptr %37, align 4
  br label %720

489:                                              ; preds = %454
  store i64 0, ptr %23, align 8, !tbaa !11
  br label %490

490:                                              ; preds = %561, %489
  %491 = load i64, ptr %23, align 8, !tbaa !11
  %492 = load i64, ptr %21, align 8, !tbaa !11
  %493 = sub nsw i64 %492, 1
  %494 = icmp sle i64 %491, %493
  br i1 %494, label %495, label %564

495:                                              ; preds = %490
  %496 = load ptr, ptr %10, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %496, i32 0, i32 2
  %498 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %497, i32 0, i32 4
  %499 = load ptr, ptr %498, align 8, !tbaa !21
  %500 = load i64, ptr %23, align 8, !tbaa !11
  %501 = getelementptr inbounds i64, ptr %499, i64 %500
  %502 = load i64, ptr %501, align 8, !tbaa !11
  store i64 %502, ptr %26, align 8, !tbaa !11
  %503 = load ptr, ptr %10, align 8, !tbaa !5
  %504 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %503, i32 0, i32 2
  %505 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %504, i32 0, i32 4
  %506 = load ptr, ptr %505, align 8, !tbaa !21
  %507 = load i64, ptr %23, align 8, !tbaa !11
  %508 = add nsw i64 %507, 1
  %509 = getelementptr inbounds i64, ptr %506, i64 %508
  %510 = load i64, ptr %509, align 8, !tbaa !11
  store i64 %510, ptr %27, align 8, !tbaa !11
  %511 = load double, ptr %11, align 8, !tbaa !9
  %512 = load ptr, ptr %13, align 8, !tbaa !5
  %513 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %512, i32 0, i32 4
  %514 = load ptr, ptr %513, align 8, !tbaa !21
  %515 = load i64, ptr %23, align 8, !tbaa !11
  %516 = load i64, ptr %14, align 8, !tbaa !11
  %517 = add nsw i64 %515, %516
  %518 = getelementptr inbounds double, ptr %514, i64 %517
  %519 = load double, ptr %518, align 8, !tbaa !9
  %520 = fmul double %511, %519
  store double %520, ptr %33, align 8, !tbaa !9
  %521 = load i64, ptr %26, align 8, !tbaa !11
  store i64 %521, ptr %24, align 8, !tbaa !11
  br label %522

522:                                              ; preds = %557, %495
  %523 = load i64, ptr %24, align 8, !tbaa !11
  %524 = load i64, ptr %27, align 8, !tbaa !11
  %525 = sub nsw i64 %524, 1
  %526 = icmp sle i64 %523, %525
  br i1 %526, label %527, label %560

527:                                              ; preds = %522
  %528 = load ptr, ptr %10, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %528, i32 0, i32 1
  %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 %24, align 8, !tbaa !11
  %533 = getelementptr inbounds i64, ptr %531, i64 %532
  %534 = load i64, ptr %533, align 8, !tbaa !11
  %535 = load i64, ptr %17, align 8, !tbaa !11
  %536 = add nsw i64 %534, %535
  store i64 %536, ptr %28, align 8, !tbaa !11
  %537 = load ptr, ptr %16, align 8, !tbaa !5
  %538 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %537, i32 0, i32 4
  %539 = load ptr, ptr %538, align 8, !tbaa !21
  %540 = load i64, ptr %28, align 8, !tbaa !11
  %541 = getelementptr inbounds double, ptr %539, i64 %540
  %542 = load double, ptr %541, align 8, !tbaa !9
  %543 = load double, ptr %33, align 8, !tbaa !9
  %544 = load ptr, ptr %10, align 8, !tbaa !5
  %545 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %544, i32 0, i32 0
  %546 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %545, i32 0, i32 4
  %547 = load ptr, ptr %546, align 8, !tbaa !21
  %548 = load i64, ptr %24, align 8, !tbaa !11
  %549 = getelementptr inbounds double, ptr %547, i64 %548
  %550 = load double, ptr %549, align 8, !tbaa !9
  %551 = call double @llvm.fmuladd.f64(double %543, double %550, double %542)
  %552 = load ptr, ptr %16, align 8, !tbaa !5
  %553 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %552, i32 0, i32 4
  %554 = load ptr, ptr %553, align 8, !tbaa !21
  %555 = load i64, ptr %28, align 8, !tbaa !11
  %556 = getelementptr inbounds double, ptr %554, i64 %555
  store double %551, ptr %556, align 8, !tbaa !9
  br label %557

557:                                              ; preds = %527
  %558 = load i64, ptr %24, align 8, !tbaa !11
  %559 = add nsw i64 %558, 1
  store i64 %559, ptr %24, align 8, !tbaa !11
  br label %522, !llvm.loop !29

560:                                              ; preds = %522
  br label %561

561:                                              ; preds = %560
  %562 = load i64, ptr %23, align 8, !tbaa !11
  %563 = add nsw i64 %562, 1
  store i64 %563, ptr %23, align 8, !tbaa !11
  br label %490, !llvm.loop !30

564:                                              ; preds = %490
  store i32 1, ptr %37, align 4
  br label %720

565:                                              ; preds = %449
  %566 = load ptr, ptr %10, align 8, !tbaa !5
  %567 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %566, i32 0, i32 5
  %568 = load i64, ptr %567, align 8, !tbaa !13
  %569 = icmp eq i64 %568, 2
  br i1 %569, label %570, label %718

570:                                              ; preds = %565
  %571 = load ptr, ptr %10, align 8, !tbaa !5
  %572 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %571, i32 0, i32 6
  %573 = load i64, ptr %572, align 8, !tbaa !18
  %574 = load ptr, ptr %10, align 8, !tbaa !5
  %575 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %574, i32 0, i32 7
  %576 = load i64, ptr %575, align 8, !tbaa !19
  %577 = icmp eq i64 %573, %576
  %578 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %577, ptr noundef @.str.186, ptr noundef %578)
  store i64 0, ptr %23, align 8, !tbaa !11
  br label %579

579:                                              ; preds = %713, %570
  %580 = load i64, ptr %23, align 8, !tbaa !11
  %581 = load i64, ptr %22, align 8, !tbaa !11
  %582 = sub nsw i64 %581, 1
  %583 = icmp sle i64 %580, %582
  br i1 %583, label %584, label %716

584:                                              ; preds = %579
  %585 = load ptr, ptr %10, align 8, !tbaa !5
  %586 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %585, i32 0, i32 2
  %587 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %586, i32 0, i32 4
  %588 = load ptr, ptr %587, align 8, !tbaa !21
  %589 = load i64, ptr %23, align 8, !tbaa !11
  %590 = getelementptr inbounds i64, ptr %588, i64 %589
  %591 = load i64, ptr %590, align 8, !tbaa !11
  store i64 %591, ptr %31, align 8, !tbaa !11
  %592 = load ptr, ptr %10, align 8, !tbaa !5
  %593 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %592, i32 0, i32 2
  %594 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %593, i32 0, i32 4
  %595 = load ptr, ptr %594, align 8, !tbaa !21
  %596 = load i64, ptr %23, align 8, !tbaa !11
  %597 = add nsw i64 %596, 1
  %598 = getelementptr inbounds i64, ptr %595, i64 %597
  %599 = load i64, ptr %598, align 8, !tbaa !11
  store i64 %599, ptr %32, align 8, !tbaa !11
  %600 = load ptr, ptr %10, align 8, !tbaa !5
  %601 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %600, i32 0, i32 3
  %602 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %601, i32 0, i32 4
  %603 = load ptr, ptr %602, align 8, !tbaa !21
  %604 = load i64, ptr %23, align 8, !tbaa !11
  %605 = getelementptr inbounds i64, ptr %603, i64 %604
  %606 = load i64, ptr %605, align 8, !tbaa !11
  store i64 %606, ptr %29, align 8, !tbaa !11
  %607 = load ptr, ptr %10, align 8, !tbaa !5
  %608 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %607, i32 0, i32 4
  %609 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %608, i32 0, i32 4
  %610 = load ptr, ptr %609, align 8, !tbaa !21
  %611 = load i64, ptr %23, align 8, !tbaa !11
  %612 = getelementptr inbounds i64, ptr %610, i64 %611
  %613 = load i64, ptr %612, align 8, !tbaa !11
  store i64 %613, ptr %30, align 8, !tbaa !11
  %614 = load i64, ptr %29, align 8, !tbaa !11
  %615 = icmp sgt i64 %614, 0
  br i1 %615, label %616, label %638

616:                                              ; preds = %584
  %617 = load i64, ptr %29, align 8, !tbaa !11
  %618 = load double, ptr %11, align 8, !tbaa !9
  %619 = load ptr, ptr %13, align 8, !tbaa !5
  %620 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %619, i32 0, i32 4
  %621 = load ptr, ptr %620, align 8, !tbaa !21
  %622 = load i64, ptr %23, align 8, !tbaa !11
  %623 = load i64, ptr %14, align 8, !tbaa !11
  %624 = add nsw i64 %622, %623
  %625 = getelementptr inbounds double, ptr %621, i64 %624
  %626 = load double, ptr %625, align 8, !tbaa !9
  %627 = fmul double %618, %626
  %628 = load ptr, ptr %10, align 8, !tbaa !5
  %629 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %628, i32 0, i32 0
  %630 = load i64, ptr %31, align 8, !tbaa !11
  %631 = load ptr, ptr %16, align 8, !tbaa !5
  %632 = load i64, ptr %23, align 8, !tbaa !11
  %633 = load i64, ptr %29, align 8, !tbaa !11
  %634 = sub nsw i64 %632, %633
  %635 = load i64, ptr %17, align 8, !tbaa !11
  %636 = add nsw i64 %634, %635
  %637 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl6raddvxEldPKNS_9ae_vectorElPS0_lPNS_8ae_stateE(i64 noundef %617, double noundef %627, ptr noundef %629, i64 noundef %630, ptr noundef %631, i64 noundef %636, ptr noundef %637)
  br label %638

638:                                              ; preds = %616, %584
  %639 = load double, ptr %11, align 8, !tbaa !9
  %640 = load ptr, ptr %10, align 8, !tbaa !5
  %641 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %640, i32 0, i32 0
  %642 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %641, i32 0, i32 4
  %643 = load ptr, ptr %642, align 8, !tbaa !21
  %644 = load i64, ptr %31, align 8, !tbaa !11
  %645 = load i64, ptr %29, align 8, !tbaa !11
  %646 = add nsw i64 %644, %645
  %647 = getelementptr inbounds double, ptr %643, i64 %646
  %648 = load double, ptr %647, align 8, !tbaa !9
  %649 = fmul double %639, %648
  %650 = load ptr, ptr %13, align 8, !tbaa !5
  %651 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %650, i32 0, i32 4
  %652 = load ptr, ptr %651, align 8, !tbaa !21
  %653 = load i64, ptr %23, align 8, !tbaa !11
  %654 = load i64, ptr %14, align 8, !tbaa !11
  %655 = add nsw i64 %653, %654
  %656 = getelementptr inbounds double, ptr %652, i64 %655
  %657 = load double, ptr %656, align 8, !tbaa !9
  %658 = fmul double %649, %657
  store double %658, ptr %33, align 8, !tbaa !9
  %659 = load i64, ptr %30, align 8, !tbaa !11
  %660 = icmp sgt i64 %659, 0
  br i1 %660, label %661, label %695

661:                                              ; preds = %638
  %662 = load i64, ptr %32, align 8, !tbaa !11
  %663 = load i64, ptr %30, align 8, !tbaa !11
  %664 = sub nsw i64 %662, %663
  store i64 %664, ptr %26, align 8, !tbaa !11
  %665 = load i64, ptr %32, align 8, !tbaa !11
  %666 = sub nsw i64 %665, 1
  store i64 %666, ptr %27, align 8, !tbaa !11
  %667 = load i64, ptr %23, align 8, !tbaa !11
  %668 = load i64, ptr %30, align 8, !tbaa !11
  %669 = sub nsw i64 %667, %668
  %670 = load i64, ptr %14, align 8, !tbaa !11
  %671 = add nsw i64 %669, %670
  store i64 %671, ptr %35, align 8, !tbaa !11
  %672 = load i64, ptr %23, align 8, !tbaa !11
  %673 = sub nsw i64 %672, 1
  %674 = load i64, ptr %14, align 8, !tbaa !11
  %675 = add nsw i64 %673, %674
  store i64 %675, ptr %36, align 8, !tbaa !11
  %676 = load ptr, ptr %10, align 8, !tbaa !5
  %677 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %676, i32 0, i32 0
  %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 %26, align 8, !tbaa !11
  %681 = getelementptr inbounds double, ptr %679, i64 %680
  %682 = load ptr, ptr %13, align 8, !tbaa !5
  %683 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %682, i32 0, i32 4
  %684 = load ptr, ptr %683, align 8, !tbaa !21
  %685 = load i64, ptr %35, align 8, !tbaa !11
  %686 = getelementptr inbounds double, ptr %684, i64 %685
  %687 = load i64, ptr %26, align 8, !tbaa !11
  %688 = load i64, ptr %27, align 8, !tbaa !11
  %689 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %687, i64 noundef %688)
  %690 = call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %681, i64 noundef 1, ptr noundef %686, i64 noundef 1, i64 noundef %689)
  store double %690, ptr %34, align 8, !tbaa !9
  %691 = load double, ptr %33, align 8, !tbaa !9
  %692 = load double, ptr %11, align 8, !tbaa !9
  %693 = load double, ptr %34, align 8, !tbaa !9
  %694 = call double @llvm.fmuladd.f64(double %692, double %693, double %691)
  store double %694, ptr %33, align 8, !tbaa !9
  br label %695

695:                                              ; preds = %661, %638
  %696 = load double, ptr %33, align 8, !tbaa !9
  %697 = load ptr, ptr %16, align 8, !tbaa !5
  %698 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %697, i32 0, i32 4
  %699 = load ptr, ptr %698, align 8, !tbaa !21
  %700 = load i64, ptr %23, align 8, !tbaa !11
  %701 = load i64, ptr %17, align 8, !tbaa !11
  %702 = add nsw i64 %700, %701
  %703 = getelementptr inbounds double, ptr %699, i64 %702
  %704 = load double, ptr %703, align 8, !tbaa !9
  %705 = fadd double %696, %704
  %706 = load ptr, ptr %16, align 8, !tbaa !5
  %707 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %706, i32 0, i32 4
  %708 = load ptr, ptr %707, align 8, !tbaa !21
  %709 = load i64, ptr %23, align 8, !tbaa !11
  %710 = load i64, ptr %17, align 8, !tbaa !11
  %711 = add nsw i64 %709, %710
  %712 = getelementptr inbounds double, ptr %708, i64 %711
  store double %705, ptr %712, align 8, !tbaa !9
  br label %713

713:                                              ; preds = %695
  %714 = load i64, ptr %23, align 8, !tbaa !11
  %715 = add nsw i64 %714, 1
  store i64 %715, ptr %23, align 8, !tbaa !11
  br label %579, !llvm.loop !31

716:                                              ; preds = %579
  %717 = load ptr, ptr %18, align 8, !tbaa !5
  call void @_ZN11alglib_impl8touchintEPlPNS_8ae_stateE(ptr noundef %36, ptr noundef %717)
  store i32 1, ptr %37, align 4
  br label %720

718:                                              ; preds = %565
  br label %719

719:                                              ; preds = %718, %448
  store i32 0, ptr %37, align 4
  br label %720

720:                                              ; preds = %719, %716, %564, %488, %446, %294, %216, %173, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  %721 = load i32, ptr %37, align 4
  switch i32 %721, label %723 [
    i32 0, label %722
    i32 1, label %722
  ]

722:                                              ; preds = %720, %720
  ret void

723:                                              ; preds = %720
  unreachable
}

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

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

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


; 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.177 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.181 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.182 = external hidden unnamed_addr constant [67 x i8], align 1
@.str.183 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.184 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.185 = external hidden unnamed_addr constant [135 x i8], align 1
@.str.186 = external hidden unnamed_addr constant [54 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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl10sparsegemvEPKNS_12sparsematrixEdlPKNS_9ae_vectorEldPS3_lPNS_8ae_stateE(ptr noundef %0, double noundef %1, i64 noundef %2, ptr noundef %3, i64 noundef %4, double noundef %5, ptr noundef %6, i64 noundef %7, ptr noundef %8) local_unnamed_addr #2 {
  %10 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #4
  %11 = icmp eq i64 %2, 0
  %12 = icmp ult i64 %2, 2
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %12, ptr noundef nonnull @.str.181, ptr noundef %8)
  %13 = getelementptr inbounds i8, ptr %0, i64 320
  %14 = load i64, ptr %13, align 8, !tbaa !5
  %15 = add i64 %14, -1
  %spec.select = icmp ult i64 %15, 2
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %spec.select, ptr noundef nonnull @.str.182, ptr noundef %8)
  %16 = getelementptr inbounds i8, ptr %0, i64 328
  %17 = getelementptr inbounds i8, ptr %0, i64 336
  %.0257.in = select i1 %11, ptr %17, ptr %16
  %.0251.in = select i1 %11, ptr %16, ptr %17
  %.0251 = load i64, ptr %.0251.in, align 8, !tbaa !14
  %.0257 = load i64, ptr %.0257.in, align 8, !tbaa !14
  %18 = icmp sgt i64 %.0251, -1
  %19 = icmp sgt i64 %.0257, -1
  %20 = select i1 %18, i1 %19, i1 false
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %20, ptr noundef nonnull @.str.183, ptr noundef %8)
  %21 = icmp eq i64 %.0257, 0
  br i1 %21, label %26, label %22

22:                                               ; preds = %9
  %23 = load i64, ptr %3, align 8, !tbaa !15
  %24 = add nsw i64 %23, %4
  %25 = icmp sge i64 %24, %.0257
  br label %26

26:                                               ; preds = %22, %9
  %27 = phi i1 [ true, %9 ], [ %25, %22 ]
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %27, ptr noundef nonnull @.str.184, ptr noundef %8)
  %28 = icmp eq i64 %.0251, 0
  br i1 %28, label %.thread, label %29

.thread:                                          ; preds = %26
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext true, ptr noundef nonnull @.str.184, ptr noundef %8)
  br label %.loopexit

29:                                               ; preds = %26
  %30 = load i64, ptr %6, align 8, !tbaa !15
  %31 = add nsw i64 %30, %7
  %32 = icmp sge i64 %31, %.0251
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %32, ptr noundef nonnull @.str.184, ptr noundef %8)
  %33 = load i64, ptr %16, align 8, !tbaa !16
  %34 = load i64, ptr %17, align 8, !tbaa !17
  %35 = tail call noundef zeroext i1 @_ZN11alglib_impl9ae_fp_neqEdd(double noundef %5, double noundef 0.000000e+00)
  %.not.not265282 = icmp sgt i64 %.0251, 0
  br i1 %35, label %.preheader276, label %.preheader278

.preheader278:                                    ; preds = %29
  br i1 %.not.not265282, label %.lr.ph, label %.loopexit277

.lr.ph:                                           ; preds = %.preheader278
  %36 = getelementptr inbounds i8, ptr %6, i64 56
  %xtraiter = and i64 %.0251, 3
  %37 = icmp ult i64 %.0251, 4
  br i1 %37, label %.loopexit277.loopexit325.unr-lcssa, label %.lr.ph.new

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

.preheader276:                                    ; preds = %29
  br i1 %.not.not265282, label %.lr.ph284, label %.loopexit277

.lr.ph284:                                        ; preds = %.preheader276
  %38 = getelementptr inbounds i8, ptr %6, i64 56
  %xtraiter327 = and i64 %.0251, 3
  %39 = icmp ult i64 %.0251, 4
  br i1 %39, label %.loopexit277.loopexit.unr-lcssa, label %.lr.ph284.new

.lr.ph284.new:                                    ; preds = %.lr.ph284
  %unroll_iter330 = and i64 %.0251, 9223372036854775804
  br label %40

40:                                               ; preds = %40, %.lr.ph284.new
  %.0255283 = phi i64 [ 0, %.lr.ph284.new ], [ %64, %40 ]
  %niter331 = phi i64 [ 0, %.lr.ph284.new ], [ %niter331.next.3, %40 ]
  %41 = load ptr, ptr %38, align 8, !tbaa !18
  %42 = getelementptr double, ptr %41, i64 %.0255283
  %43 = getelementptr double, ptr %42, i64 %7
  %44 = load double, ptr %43, align 8, !tbaa !19
  %45 = fmul double %44, %5
  store double %45, ptr %43, align 8, !tbaa !19
  %46 = or disjoint i64 %.0255283, 1
  %47 = load ptr, ptr %38, align 8, !tbaa !18
  %48 = getelementptr double, ptr %47, i64 %46
  %49 = getelementptr double, ptr %48, i64 %7
  %50 = load double, ptr %49, align 8, !tbaa !19
  %51 = fmul double %50, %5
  store double %51, ptr %49, align 8, !tbaa !19
  %52 = or disjoint i64 %.0255283, 2
  %53 = load ptr, ptr %38, align 8, !tbaa !18
  %54 = getelementptr double, ptr %53, i64 %52
  %55 = getelementptr double, ptr %54, i64 %7
  %56 = load double, ptr %55, align 8, !tbaa !19
  %57 = fmul double %56, %5
  store double %57, ptr %55, align 8, !tbaa !19
  %58 = or disjoint i64 %.0255283, 3
  %59 = load ptr, ptr %38, align 8, !tbaa !18
  %60 = getelementptr double, ptr %59, i64 %58
  %61 = getelementptr double, ptr %60, i64 %7
  %62 = load double, ptr %61, align 8, !tbaa !19
  %63 = fmul double %62, %5
  store double %63, ptr %61, align 8, !tbaa !19
  %64 = add nuw nsw i64 %.0255283, 4
  %niter331.next.3 = add i64 %niter331, 4
  %niter331.ncmp.3 = icmp eq i64 %niter331.next.3, %unroll_iter330
  br i1 %niter331.ncmp.3, label %.loopexit277.loopexit.unr-lcssa, label %40, !llvm.loop !21

65:                                               ; preds = %65, %.lr.ph.new
  %.1256281 = phi i64 [ 0, %.lr.ph.new ], [ %81, %65 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %65 ]
  %66 = load ptr, ptr %36, align 8, !tbaa !18
  %67 = getelementptr double, ptr %66, i64 %.1256281
  %68 = getelementptr double, ptr %67, i64 %7
  store double 0.000000e+00, ptr %68, align 8, !tbaa !19
  %69 = or disjoint i64 %.1256281, 1
  %70 = load ptr, ptr %36, align 8, !tbaa !18
  %71 = getelementptr double, ptr %70, i64 %69
  %72 = getelementptr double, ptr %71, i64 %7
  store double 0.000000e+00, ptr %72, align 8, !tbaa !19
  %73 = or disjoint i64 %.1256281, 2
  %74 = load ptr, ptr %36, align 8, !tbaa !18
  %75 = getelementptr double, ptr %74, i64 %73
  %76 = getelementptr double, ptr %75, i64 %7
  store double 0.000000e+00, ptr %76, align 8, !tbaa !19
  %77 = or disjoint i64 %.1256281, 3
  %78 = load ptr, ptr %36, align 8, !tbaa !18
  %79 = getelementptr double, ptr %78, i64 %77
  %80 = getelementptr double, ptr %79, i64 %7
  store double 0.000000e+00, ptr %80, align 8, !tbaa !19
  %81 = add nuw nsw i64 %.1256281, 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 %.loopexit277.loopexit325.unr-lcssa, label %65, !llvm.loop !23

.loopexit277.loopexit.unr-lcssa:                  ; preds = %40, %.lr.ph284
  %.0255283.unr = phi i64 [ 0, %.lr.ph284 ], [ %64, %40 ]
  %lcmp.mod329.not = icmp eq i64 %xtraiter327, 0
  br i1 %lcmp.mod329.not, label %.loopexit277, label %.epil.preheader326

.epil.preheader326:                               ; preds = %.loopexit277.loopexit.unr-lcssa, %.epil.preheader326
  %.0255283.epil = phi i64 [ %87, %.epil.preheader326 ], [ %.0255283.unr, %.loopexit277.loopexit.unr-lcssa ]
  %epil.iter328 = phi i64 [ %epil.iter328.next, %.epil.preheader326 ], [ 0, %.loopexit277.loopexit.unr-lcssa ]
  %82 = load ptr, ptr %38, align 8, !tbaa !18
  %83 = getelementptr double, ptr %82, i64 %.0255283.epil
  %84 = getelementptr double, ptr %83, i64 %7
  %85 = load double, ptr %84, align 8, !tbaa !19
  %86 = fmul double %85, %5
  store double %86, ptr %84, align 8, !tbaa !19
  %87 = add nuw nsw i64 %.0255283.epil, 1
  %epil.iter328.next = add i64 %epil.iter328, 1
  %epil.iter328.cmp.not = icmp eq i64 %epil.iter328.next, %xtraiter327
  br i1 %epil.iter328.cmp.not, label %.loopexit277, label %.epil.preheader326, !llvm.loop !24

.loopexit277.loopexit325.unr-lcssa:               ; preds = %65, %.lr.ph
  %.1256281.unr = phi i64 [ 0, %.lr.ph ], [ %81, %65 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.loopexit277, label %.epil.preheader

.epil.preheader:                                  ; preds = %.loopexit277.loopexit325.unr-lcssa, %.epil.preheader
  %.1256281.epil = phi i64 [ %91, %.epil.preheader ], [ %.1256281.unr, %.loopexit277.loopexit325.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.loopexit277.loopexit325.unr-lcssa ]
  %88 = load ptr, ptr %36, align 8, !tbaa !18
  %89 = getelementptr double, ptr %88, i64 %.1256281.epil
  %90 = getelementptr double, ptr %89, i64 %7
  store double 0.000000e+00, ptr %90, align 8, !tbaa !19
  %91 = add nuw nsw i64 %.1256281.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.loopexit277, label %.epil.preheader, !llvm.loop !26

.loopexit277:                                     ; preds = %.loopexit277.loopexit325.unr-lcssa, %.epil.preheader, %.loopexit277.loopexit.unr-lcssa, %.epil.preheader326, %.preheader278, %.preheader276
  br i1 %21, label %.loopexit, label %92

92:                                               ; preds = %.loopexit277
  %93 = tail call noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(double noundef %1, double noundef 0.000000e+00)
  br i1 %93, label %.loopexit, label %94

94:                                               ; preds = %92
  %95 = load i64, ptr %13, align 8, !tbaa !5
  br i1 %11, label %96, label %228

96:                                               ; preds = %94
  switch i64 %95, label %.loopexit [
    i64 1, label %97
    i64 2, label %168
  ]

97:                                               ; preds = %96
  %98 = getelementptr inbounds i8, ptr %0, i64 352
  %99 = load i64, ptr %98, align 8, !tbaa !27
  %100 = getelementptr inbounds i8, ptr %0, i64 128
  %101 = getelementptr inbounds i8, ptr %0, i64 184
  %102 = load ptr, ptr %101, align 8, !tbaa !18
  %103 = load i64, ptr %16, align 8, !tbaa !16
  %104 = getelementptr inbounds i64, ptr %102, i64 %103
  %105 = load i64, ptr %104, align 8, !tbaa !14
  %106 = icmp eq i64 %99, %105
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %106, ptr noundef nonnull @.str.185, ptr noundef %8)
  %107 = load i64, ptr %16, align 8, !tbaa !16
  %108 = load i64, ptr %17, align 8, !tbaa !17
  %109 = getelementptr inbounds i8, ptr %0, i64 64
  %110 = tail call noundef zeroext i1 @_ZN11alglib_impl16sparsegemvcrsmklEllldPKNS_9ae_vectorES2_S2_S2_ldPS0_lPNS_8ae_stateE(i64 noundef 0, i64 noundef %107, i64 noundef %108, double noundef %1, ptr noundef nonnull %0, ptr noundef nonnull %109, ptr noundef nonnull %100, ptr noundef %3, i64 noundef %4, double noundef 1.000000e+00, ptr noundef nonnull %6, i64 noundef %7, ptr noundef %8)
  %.not.not270306 = icmp slt i64 %33, 1
  %or.cond.not = select i1 %110, i1 true, i1 %.not.not270306
  br i1 %or.cond.not, label %.loopexit, label %.lr.ph308

.lr.ph308:                                        ; preds = %97
  %111 = getelementptr inbounds i8, ptr %3, i64 56
  %112 = getelementptr inbounds i8, ptr %0, i64 120
  %113 = getelementptr inbounds i8, ptr %0, i64 56
  %114 = getelementptr inbounds i8, ptr %6, i64 56
  br label %115

115:                                              ; preds = %.lr.ph308, %._crit_edge305
  %.2307 = phi i64 [ 0, %.lr.ph308 ], [ %119, %._crit_edge305 ]
  %116 = load ptr, ptr %101, align 8, !tbaa !18
  %117 = getelementptr inbounds i64, ptr %116, i64 %.2307
  %118 = load i64, ptr %117, align 8, !tbaa !14
  %119 = add nuw nsw i64 %.2307, 1
  %120 = getelementptr inbounds i64, ptr %116, i64 %119
  %121 = load i64, ptr %120, align 8, !tbaa !14
  %.not.not271300 = icmp slt i64 %118, %121
  br i1 %.not.not271300, label %.lr.ph304, label %._crit_edge305

.lr.ph304:                                        ; preds = %115
  %122 = load ptr, ptr %111, align 8, !tbaa !18
  %123 = load ptr, ptr %112, align 8, !tbaa !18
  %invariant.gep = getelementptr double, ptr %122, i64 %4
  %124 = load ptr, ptr %113, align 8, !tbaa !18
  %125 = sub i64 %121, %118
  %xtraiter334 = and i64 %125, 3
  %lcmp.mod335.not = icmp eq i64 %xtraiter334, 0
  br i1 %lcmp.mod335.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph304, %.prol.preheader
  %.0252302.prol = phi double [ %131, %.prol.preheader ], [ 0.000000e+00, %.lr.ph304 ]
  %.0253301.prol = phi i64 [ %132, %.prol.preheader ], [ %118, %.lr.ph304 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.prol.preheader ], [ 0, %.lr.ph304 ]
  %126 = getelementptr inbounds i64, ptr %123, i64 %.0253301.prol
  %127 = load i64, ptr %126, align 8, !tbaa !14
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %127
  %128 = load double, ptr %gep.prol, align 8, !tbaa !19
  %129 = getelementptr inbounds double, ptr %124, i64 %.0253301.prol
  %130 = load double, ptr %129, align 8, !tbaa !19
  %131 = tail call double @llvm.fmuladd.f64(double %128, double %130, double %.0252302.prol)
  %132 = add nsw i64 %.0253301.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter334
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !28

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph304
  %.lcssa.unr = phi double [ poison, %.lr.ph304 ], [ %131, %.prol.preheader ]
  %.0252302.unr = phi double [ 0.000000e+00, %.lr.ph304 ], [ %131, %.prol.preheader ]
  %.0253301.unr = phi i64 [ %118, %.lr.ph304 ], [ %132, %.prol.preheader ]
  %133 = sub i64 %118, %121
  %134 = icmp ugt i64 %133, -4
  br i1 %134, label %._crit_edge305, label %.lr.ph304.new

.lr.ph304.new:                                    ; preds = %.prol.loopexit, %.lr.ph304.new
  %.0252302 = phi double [ %161, %.lr.ph304.new ], [ %.0252302.unr, %.prol.loopexit ]
  %.0253301 = phi i64 [ %162, %.lr.ph304.new ], [ %.0253301.unr, %.prol.loopexit ]
  %135 = getelementptr inbounds i64, ptr %123, i64 %.0253301
  %136 = load i64, ptr %135, align 8, !tbaa !14
  %gep = getelementptr double, ptr %invariant.gep, i64 %136
  %137 = load double, ptr %gep, align 8, !tbaa !19
  %138 = getelementptr inbounds double, ptr %124, i64 %.0253301
  %139 = load double, ptr %138, align 8, !tbaa !19
  %140 = tail call double @llvm.fmuladd.f64(double %137, double %139, double %.0252302)
  %141 = add nsw i64 %.0253301, 1
  %142 = getelementptr inbounds i64, ptr %123, i64 %141
  %143 = load i64, ptr %142, align 8, !tbaa !14
  %gep.1 = getelementptr double, ptr %invariant.gep, i64 %143
  %144 = load double, ptr %gep.1, align 8, !tbaa !19
  %145 = getelementptr inbounds double, ptr %124, i64 %141
  %146 = load double, ptr %145, align 8, !tbaa !19
  %147 = tail call double @llvm.fmuladd.f64(double %144, double %146, double %140)
  %148 = add nsw i64 %.0253301, 2
  %149 = getelementptr inbounds i64, ptr %123, i64 %148
  %150 = load i64, ptr %149, align 8, !tbaa !14
  %gep.2 = getelementptr double, ptr %invariant.gep, i64 %150
  %151 = load double, ptr %gep.2, align 8, !tbaa !19
  %152 = getelementptr inbounds double, ptr %124, i64 %148
  %153 = load double, ptr %152, align 8, !tbaa !19
  %154 = tail call double @llvm.fmuladd.f64(double %151, double %153, double %147)
  %155 = add nsw i64 %.0253301, 3
  %156 = getelementptr inbounds i64, ptr %123, i64 %155
  %157 = load i64, ptr %156, align 8, !tbaa !14
  %gep.3 = getelementptr double, ptr %invariant.gep, i64 %157
  %158 = load double, ptr %gep.3, align 8, !tbaa !19
  %159 = getelementptr inbounds double, ptr %124, i64 %155
  %160 = load double, ptr %159, align 8, !tbaa !19
  %161 = tail call double @llvm.fmuladd.f64(double %158, double %160, double %154)
  %162 = add nsw i64 %.0253301, 4
  %exitcond318.not.3 = icmp eq i64 %162, %121
  br i1 %exitcond318.not.3, label %._crit_edge305, label %.lr.ph304.new, !llvm.loop !29

._crit_edge305:                                   ; preds = %.prol.loopexit, %.lr.ph304.new, %115
  %.0252.lcssa = phi double [ 0.000000e+00, %115 ], [ %.lcssa.unr, %.prol.loopexit ], [ %161, %.lr.ph304.new ]
  %163 = load ptr, ptr %114, align 8, !tbaa !18
  %164 = getelementptr double, ptr %163, i64 %.2307
  %165 = getelementptr double, ptr %164, i64 %7
  %166 = load double, ptr %165, align 8, !tbaa !19
  %167 = tail call double @llvm.fmuladd.f64(double %1, double %.0252.lcssa, double %166)
  store double %167, ptr %165, align 8, !tbaa !19
  %exitcond319.not = icmp eq i64 %119, %33
  br i1 %exitcond319.not, label %.loopexit, label %115, !llvm.loop !30

168:                                              ; preds = %96
  %169 = load i64, ptr %16, align 8, !tbaa !16
  %170 = load i64, ptr %17, align 8, !tbaa !17
  %171 = icmp eq i64 %169, %170
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %171, ptr noundef nonnull @.str.177, ptr noundef %8)
  %.not.not269295 = icmp sgt i64 %34, 0
  br i1 %.not.not269295, label %.lr.ph298, label %._crit_edge299

.lr.ph298:                                        ; preds = %168
  %172 = getelementptr inbounds i8, ptr %0, i64 184
  %173 = getelementptr inbounds i8, ptr %0, i64 248
  %174 = getelementptr inbounds i8, ptr %0, i64 312
  %175 = getelementptr inbounds i8, ptr %0, i64 56
  %176 = getelementptr inbounds i8, ptr %3, i64 56
  %177 = add i64 %4, -1
  %178 = getelementptr inbounds i8, ptr %6, i64 56
  br label %179

179:                                              ; preds = %.lr.ph298, %227
  %.3296 = phi i64 [ 0, %.lr.ph298 ], [ %183, %227 ]
  %180 = load ptr, ptr %172, align 8, !tbaa !18
  %181 = getelementptr inbounds i64, ptr %180, i64 %.3296
  %182 = load i64, ptr %181, align 8, !tbaa !14
  %183 = add nuw nsw i64 %.3296, 1
  %184 = getelementptr inbounds i64, ptr %180, i64 %183
  %185 = load i64, ptr %184, align 8, !tbaa !14
  %186 = load ptr, ptr %173, align 8, !tbaa !18
  %187 = getelementptr inbounds i64, ptr %186, i64 %.3296
  %188 = load i64, ptr %187, align 8, !tbaa !14
  %189 = load ptr, ptr %174, align 8, !tbaa !18
  %190 = getelementptr inbounds i64, ptr %189, i64 %.3296
  %191 = load i64, ptr %190, align 8, !tbaa !14
  %192 = load ptr, ptr %175, align 8, !tbaa !18
  %193 = add nsw i64 %188, %182
  %194 = getelementptr inbounds double, ptr %192, i64 %193
  %195 = load double, ptr %194, align 8, !tbaa !19
  %196 = load ptr, ptr %176, align 8, !tbaa !18
  %197 = add nsw i64 %.3296, %4
  %198 = getelementptr inbounds double, ptr %196, i64 %197
  %199 = load double, ptr %198, align 8, !tbaa !19
  %200 = fmul double %195, %199
  %201 = icmp sgt i64 %188, 0
  br i1 %201, label %202, label %212

202:                                              ; preds = %179
  %203 = add nsw i64 %193, -1
  %204 = sub nsw i64 %.3296, %188
  %205 = add i64 %177, %.3296
  store i64 %205, ptr %10, align 8, !tbaa !14
  %206 = getelementptr inbounds double, ptr %192, i64 %182
  %207 = getelementptr double, ptr %196, i64 %204
  %208 = getelementptr double, ptr %207, i64 %4
  %209 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %182, i64 noundef %203)
  %210 = tail call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %206, i64 noundef 1, ptr noundef %208, i64 noundef 1, i64 noundef %209)
  %211 = fadd double %200, %210
  br label %212

212:                                              ; preds = %202, %179
  %.0 = phi double [ %211, %202 ], [ %200, %179 ]
  %213 = load ptr, ptr %178, align 8, !tbaa !18
  %214 = getelementptr double, ptr %213, i64 %.3296
  %215 = getelementptr double, ptr %214, i64 %7
  %216 = load double, ptr %215, align 8, !tbaa !19
  %217 = tail call double @llvm.fmuladd.f64(double %1, double %.0, double %216)
  store double %217, ptr %215, align 8, !tbaa !19
  %218 = icmp sgt i64 %191, 0
  br i1 %218, label %219, label %227

219:                                              ; preds = %212
  %220 = load ptr, ptr %176, align 8, !tbaa !18
  %221 = getelementptr inbounds double, ptr %220, i64 %197
  %222 = load double, ptr %221, align 8, !tbaa !19
  %223 = fmul double %222, %1
  %224 = sub nsw i64 %185, %191
  %225 = add i64 %.3296, %7
  %226 = sub i64 %225, %191
  tail call void @_ZN11alglib_impl6raddvxEldPKNS_9ae_vectorElPS0_lPNS_8ae_stateE(i64 noundef %191, double noundef %223, ptr noundef nonnull %0, i64 noundef %224, ptr noundef nonnull %6, i64 noundef %226, ptr noundef %8)
  br label %227

227:                                              ; preds = %212, %219
  %exitcond317.not = icmp eq i64 %183, %34
  br i1 %exitcond317.not, label %._crit_edge299, label %179, !llvm.loop !31

._crit_edge299:                                   ; preds = %227, %168
  call void @_ZN11alglib_impl8touchintEPlPNS_8ae_stateE(ptr noundef nonnull %10, ptr noundef %8)
  br label %.loopexit

228:                                              ; preds = %94
  switch i64 %95, label %.loopexit [
    i64 1, label %229
    i64 2, label %297
  ]

229:                                              ; preds = %228
  %230 = getelementptr inbounds i8, ptr %0, i64 352
  %231 = load i64, ptr %230, align 8, !tbaa !27
  %232 = getelementptr inbounds i8, ptr %0, i64 128
  %233 = getelementptr inbounds i8, ptr %0, i64 184
  %234 = load ptr, ptr %233, align 8, !tbaa !18
  %235 = load i64, ptr %16, align 8, !tbaa !16
  %236 = getelementptr inbounds i64, ptr %234, i64 %235
  %237 = load i64, ptr %236, align 8, !tbaa !14
  %238 = icmp eq i64 %231, %237
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %238, ptr noundef nonnull @.str.185, ptr noundef %8)
  %239 = load i64, ptr %16, align 8, !tbaa !16
  %240 = load i64, ptr %17, align 8, !tbaa !17
  %241 = getelementptr inbounds i8, ptr %0, i64 64
  %242 = tail call noundef zeroext i1 @_ZN11alglib_impl16sparsegemvcrsmklEllldPKNS_9ae_vectorES2_S2_S2_ldPS0_lPNS_8ae_stateE(i64 noundef 1, i64 noundef %239, i64 noundef %240, double noundef %1, ptr noundef nonnull %0, ptr noundef nonnull %241, ptr noundef nonnull %232, ptr noundef %3, i64 noundef %4, double noundef 1.000000e+00, ptr noundef nonnull %6, i64 noundef %7, ptr noundef %8)
  %.not.not267292 = icmp slt i64 %33, 1
  %or.cond310.not = select i1 %242, i1 true, i1 %.not.not267292
  br i1 %or.cond310.not, label %.loopexit, label %.lr.ph294

.lr.ph294:                                        ; preds = %229
  %243 = getelementptr inbounds i8, ptr %3, i64 56
  %244 = getelementptr inbounds i8, ptr %0, i64 120
  %245 = getelementptr inbounds i8, ptr %6, i64 56
  %246 = getelementptr inbounds i8, ptr %0, i64 56
  br label %247

.loopexit273:                                     ; preds = %.lr.ph291.prol.loopexit, %.lr.ph291, %247
  %exitcond316.not = icmp eq i64 %251, %33
  br i1 %exitcond316.not, label %.loopexit, label %247, !llvm.loop !32

247:                                              ; preds = %.lr.ph294, %.loopexit273
  %.4293 = phi i64 [ 0, %.lr.ph294 ], [ %251, %.loopexit273 ]
  %248 = load ptr, ptr %233, align 8, !tbaa !18
  %249 = getelementptr inbounds i64, ptr %248, i64 %.4293
  %250 = load i64, ptr %249, align 8, !tbaa !14
  %251 = add nuw nsw i64 %.4293, 1
  %252 = getelementptr inbounds i64, ptr %248, i64 %251
  %253 = load i64, ptr %252, align 8, !tbaa !14
  %254 = load ptr, ptr %243, align 8, !tbaa !18
  %255 = getelementptr double, ptr %254, i64 %.4293
  %256 = getelementptr double, ptr %255, i64 %4
  %257 = load double, ptr %256, align 8, !tbaa !19
  %258 = fmul double %257, %1
  %.not.not268288 = icmp slt i64 %250, %253
  br i1 %.not.not268288, label %.lr.ph291.preheader, label %.loopexit273

.lr.ph291.preheader:                              ; preds = %247
  %259 = sub i64 %253, %250
  %.neg = add i64 %250, 1
  %xtraiter332 = and i64 %259, 1
  %lcmp.mod333.not = icmp eq i64 %xtraiter332, 0
  br i1 %lcmp.mod333.not, label %.lr.ph291.prol.loopexit, label %.lr.ph291.prol

.lr.ph291.prol:                                   ; preds = %.lr.ph291.preheader
  %260 = load ptr, ptr %244, align 8, !tbaa !18
  %261 = getelementptr inbounds i64, ptr %260, i64 %250
  %262 = load i64, ptr %261, align 8, !tbaa !14
  %263 = load ptr, ptr %245, align 8, !tbaa !18
  %264 = getelementptr double, ptr %263, i64 %262
  %265 = getelementptr double, ptr %264, i64 %7
  %266 = load double, ptr %265, align 8, !tbaa !19
  %267 = load ptr, ptr %246, align 8, !tbaa !18
  %268 = getelementptr inbounds double, ptr %267, i64 %250
  %269 = load double, ptr %268, align 8, !tbaa !19
  %270 = tail call double @llvm.fmuladd.f64(double %258, double %269, double %266)
  store double %270, ptr %265, align 8, !tbaa !19
  %271 = add nsw i64 %250, 1
  br label %.lr.ph291.prol.loopexit

.lr.ph291.prol.loopexit:                          ; preds = %.lr.ph291.prol, %.lr.ph291.preheader
  %.1254289.unr = phi i64 [ %250, %.lr.ph291.preheader ], [ %271, %.lr.ph291.prol ]
  %272 = icmp eq i64 %253, %.neg
  br i1 %272, label %.loopexit273, label %.lr.ph291

.lr.ph291:                                        ; preds = %.lr.ph291.prol.loopexit, %.lr.ph291
  %.1254289 = phi i64 [ %296, %.lr.ph291 ], [ %.1254289.unr, %.lr.ph291.prol.loopexit ]
  %273 = load ptr, ptr %244, align 8, !tbaa !18
  %274 = getelementptr inbounds i64, ptr %273, i64 %.1254289
  %275 = load i64, ptr %274, align 8, !tbaa !14
  %276 = load ptr, ptr %245, align 8, !tbaa !18
  %277 = getelementptr double, ptr %276, i64 %275
  %278 = getelementptr double, ptr %277, i64 %7
  %279 = load double, ptr %278, align 8, !tbaa !19
  %280 = load ptr, ptr %246, align 8, !tbaa !18
  %281 = getelementptr inbounds double, ptr %280, i64 %.1254289
  %282 = load double, ptr %281, align 8, !tbaa !19
  %283 = tail call double @llvm.fmuladd.f64(double %258, double %282, double %279)
  store double %283, ptr %278, align 8, !tbaa !19
  %284 = add nsw i64 %.1254289, 1
  %285 = load ptr, ptr %244, align 8, !tbaa !18
  %286 = getelementptr inbounds i64, ptr %285, i64 %284
  %287 = load i64, ptr %286, align 8, !tbaa !14
  %288 = load ptr, ptr %245, align 8, !tbaa !18
  %289 = getelementptr double, ptr %288, i64 %287
  %290 = getelementptr double, ptr %289, i64 %7
  %291 = load double, ptr %290, align 8, !tbaa !19
  %292 = load ptr, ptr %246, align 8, !tbaa !18
  %293 = getelementptr inbounds double, ptr %292, i64 %284
  %294 = load double, ptr %293, align 8, !tbaa !19
  %295 = tail call double @llvm.fmuladd.f64(double %258, double %294, double %291)
  store double %295, ptr %290, align 8, !tbaa !19
  %296 = add nsw i64 %.1254289, 2
  %exitcond315.not.1 = icmp eq i64 %296, %253
  br i1 %exitcond315.not.1, label %.loopexit273, label %.lr.ph291, !llvm.loop !33

297:                                              ; preds = %228
  %298 = load i64, ptr %16, align 8, !tbaa !16
  %299 = load i64, ptr %17, align 8, !tbaa !17
  %300 = icmp eq i64 %298, %299
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %300, ptr noundef nonnull @.str.186, ptr noundef %8)
  %.not.not266285 = icmp sgt i64 %34, 0
  br i1 %.not.not266285, label %.lr.ph287, label %._crit_edge

.lr.ph287:                                        ; preds = %297
  %301 = getelementptr inbounds i8, ptr %0, i64 184
  %302 = getelementptr inbounds i8, ptr %0, i64 248
  %303 = getelementptr inbounds i8, ptr %0, i64 312
  %304 = getelementptr inbounds i8, ptr %3, i64 56
  %305 = getelementptr inbounds i8, ptr %0, i64 56
  %306 = add i64 %4, -1
  %307 = getelementptr inbounds i8, ptr %6, i64 56
  br label %308

308:                                              ; preds = %.lr.ph287, %353
  %.5286 = phi i64 [ 0, %.lr.ph287 ], [ %312, %353 ]
  %309 = load ptr, ptr %301, align 8, !tbaa !18
  %310 = getelementptr inbounds i64, ptr %309, i64 %.5286
  %311 = load i64, ptr %310, align 8, !tbaa !14
  %312 = add nuw nsw i64 %.5286, 1
  %313 = getelementptr inbounds i64, ptr %309, i64 %312
  %314 = load i64, ptr %313, align 8, !tbaa !14
  %315 = load ptr, ptr %302, align 8, !tbaa !18
  %316 = getelementptr inbounds i64, ptr %315, i64 %.5286
  %317 = load i64, ptr %316, align 8, !tbaa !14
  %318 = load ptr, ptr %303, align 8, !tbaa !18
  %319 = getelementptr inbounds i64, ptr %318, i64 %.5286
  %320 = load i64, ptr %319, align 8, !tbaa !14
  %321 = icmp sgt i64 %317, 0
  br i1 %321, label %322, label %330

322:                                              ; preds = %308
  %323 = load ptr, ptr %304, align 8, !tbaa !18
  %324 = getelementptr double, ptr %323, i64 %.5286
  %325 = getelementptr double, ptr %324, i64 %4
  %326 = load double, ptr %325, align 8, !tbaa !19
  %327 = fmul double %326, %1
  %328 = add i64 %.5286, %7
  %329 = sub i64 %328, %317
  tail call void @_ZN11alglib_impl6raddvxEldPKNS_9ae_vectorElPS0_lPNS_8ae_stateE(i64 noundef %317, double noundef %327, ptr noundef nonnull %0, i64 noundef %311, ptr noundef nonnull %6, i64 noundef %329, ptr noundef %8)
  br label %330

330:                                              ; preds = %322, %308
  %331 = load ptr, ptr %305, align 8, !tbaa !18
  %332 = getelementptr double, ptr %331, i64 %311
  %333 = getelementptr double, ptr %332, i64 %317
  %334 = load double, ptr %333, align 8, !tbaa !19
  %335 = fmul double %334, %1
  %336 = load ptr, ptr %304, align 8, !tbaa !18
  %337 = getelementptr double, ptr %336, i64 %.5286
  %338 = getelementptr double, ptr %337, i64 %4
  %339 = load double, ptr %338, align 8, !tbaa !19
  %340 = fmul double %335, %339
  %341 = icmp sgt i64 %320, 0
  br i1 %341, label %342, label %353

342:                                              ; preds = %330
  %343 = sub nsw i64 %314, %320
  %344 = add nsw i64 %314, -1
  %345 = sub nsw i64 %.5286, %320
  %346 = add i64 %306, %.5286
  store i64 %346, ptr %10, align 8, !tbaa !14
  %347 = getelementptr inbounds double, ptr %331, i64 %343
  %348 = getelementptr double, ptr %336, i64 %345
  %349 = getelementptr double, ptr %348, i64 %4
  %350 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %343, i64 noundef %344)
  %351 = tail call noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef %347, i64 noundef 1, ptr noundef %349, i64 noundef 1, i64 noundef %350)
  %352 = tail call double @llvm.fmuladd.f64(double %1, double %351, double %340)
  br label %353

353:                                              ; preds = %342, %330
  %.1 = phi double [ %352, %342 ], [ %340, %330 ]
  %354 = load ptr, ptr %307, align 8, !tbaa !18
  %355 = getelementptr double, ptr %354, i64 %.5286
  %356 = getelementptr double, ptr %355, i64 %7
  %357 = load double, ptr %356, align 8, !tbaa !19
  %358 = fadd double %.1, %357
  store double %358, ptr %356, align 8, !tbaa !19
  %exitcond314.not = icmp eq i64 %312, %34
  br i1 %exitcond314.not, label %._crit_edge, label %308, !llvm.loop !34

._crit_edge:                                      ; preds = %353, %297
  call void @_ZN11alglib_impl8touchintEPlPNS_8ae_stateE(ptr noundef nonnull %10, ptr noundef %8)
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit273, %._crit_edge305, %.thread, %96, %228, %229, %97, %.loopexit277, %92, %._crit_edge, %._crit_edge299
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #4
  ret void
}

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

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

declare noundef zeroext i1 @_ZN11alglib_impl8ae_fp_eqEdd(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) #3

declare noundef double @_ZN11alglib_impl15ae_v_dotproductEPKdlS1_ll(ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

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

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

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

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 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 #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !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 = !{!8, !8, i64 0}
!15 = !{!7, !8, i64 0}
!16 = !{!6, !8, i64 328}
!17 = !{!6, !8, i64 336}
!18 = !{!9, !9, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"double", !9, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !25}
!25 = !{!"llvm.loop.unroll.disable"}
!26 = distinct !{!26, !25}
!27 = !{!6, !8, i64 352}
!28 = distinct !{!28, !25}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}


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