; LLVM IR from venumb/ZSPACE :: cpp/depends/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::ae_frame" = type { %"struct.alglib_impl::ae_dyn_block" }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%union.anon.0 = type { ptr }
%"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 }

@.str.184 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.185 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.186 = external hidden unnamed_addr constant [43 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 nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

; 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) #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl18sparsecopytocrsbufEPNS_12sparsematrixES1_PNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2) #3 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"struct.alglib_impl::ae_frame", align 8
  %8 = alloca %"struct.alglib_impl::ae_vector", align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #4
  %17 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %17, ptr noundef %7)
  call void @llvm.memset.p0.i64(ptr align 8 %8, i8 0, i64 64, i1 false)
  %18 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %8, i64 noundef 0, i64 noundef 2, ptr noundef %18, i1 noundef zeroext true)
  %19 = load ptr, ptr %4, align 8, !tbaa !5
  %20 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %19, i32 0, i32 5
  %21 = load i64, ptr %20, align 8, !tbaa !9
  %22 = icmp eq i64 %21, 0
  br i1 %22, label %33, label %23

23:                                               ; preds = %3
  %24 = load ptr, ptr %4, align 8, !tbaa !5
  %25 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %24, i32 0, i32 5
  %26 = load i64, ptr %25, align 8, !tbaa !9
  %27 = icmp eq i64 %26, 1
  br i1 %27, label %33, label %28

28:                                               ; preds = %23
  %29 = load ptr, ptr %4, align 8, !tbaa !5
  %30 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %29, i32 0, i32 5
  %31 = load i64, ptr %30, align 8, !tbaa !9
  %32 = icmp eq i64 %31, 2
  br label %33

33:                                               ; preds = %28, %23, %3
  %34 = phi i1 [ true, %23 ], [ true, %3 ], [ %32, %28 ]
  %35 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %34, ptr noundef @.str.184, ptr noundef %35)
  %36 = load ptr, ptr %4, align 8, !tbaa !5
  %37 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %36, i32 0, i32 6
  %38 = load i64, ptr %37, align 8, !tbaa !15
  store i64 %38, ptr %15, align 8, !tbaa !16
  %39 = load ptr, ptr %4, align 8, !tbaa !5
  %40 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %39, i32 0, i32 5
  %41 = load i64, ptr %40, align 8, !tbaa !9
  %42 = icmp eq i64 %41, 0
  br i1 %42, label %43, label %383

43:                                               ; preds = %33
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %44, i32 0, i32 5
  store i64 1, ptr %45, align 8, !tbaa !9
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  %47 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %46, i32 0, i32 6
  %48 = load i64, ptr %47, align 8, !tbaa !15
  %49 = load ptr, ptr %5, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %49, i32 0, i32 6
  store i64 %48, ptr %50, align 8, !tbaa !15
  %51 = load ptr, ptr %4, align 8, !tbaa !5
  %52 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %51, i32 0, i32 7
  %53 = load i64, ptr %52, align 8, !tbaa !17
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %54, i32 0, i32 7
  store i64 %53, ptr %55, align 8, !tbaa !17
  %56 = load ptr, ptr %4, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %56, i32 0, i32 8
  %58 = load i64, ptr %57, align 8, !tbaa !18
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %59, i32 0, i32 8
  store i64 %58, ptr %60, align 8, !tbaa !18
  store i64 0, ptr %9, align 8, !tbaa !16
  %61 = load ptr, ptr %4, align 8, !tbaa !5
  %62 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %61, i32 0, i32 10
  %63 = load i64, ptr %62, align 8, !tbaa !19
  store i64 %63, ptr %12, align 8, !tbaa !16
  %64 = load ptr, ptr %5, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %64, i32 0, i32 2
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %66, i32 0, i32 6
  %68 = load i64, ptr %67, align 8, !tbaa !15
  %69 = add nsw i64 %68, 1
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %65, i64 noundef %69, ptr noundef %70)
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %71

71:                                               ; preds = %84, %43
  %72 = load i64, ptr %10, align 8, !tbaa !16
  %73 = load ptr, ptr %5, align 8, !tbaa !5
  %74 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %73, i32 0, i32 6
  %75 = load i64, ptr %74, align 8, !tbaa !15
  %76 = icmp sle i64 %72, %75
  br i1 %76, label %77, label %87

77:                                               ; preds = %71
  %78 = load ptr, ptr %5, align 8, !tbaa !5
  %79 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %78, i32 0, i32 2
  %80 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %79, i32 0, i32 4
  %81 = load ptr, ptr %80, align 8, !tbaa !20
  %82 = load i64, ptr %10, align 8, !tbaa !16
  %83 = getelementptr inbounds i64, ptr %81, i64 %82
  store i64 0, ptr %83, align 8, !tbaa !16
  br label %84

84:                                               ; preds = %77
  %85 = load i64, ptr %10, align 8, !tbaa !16
  %86 = add nsw i64 %85, 1
  store i64 %86, ptr %10, align 8, !tbaa !16
  br label %71, !llvm.loop !21

87:                                               ; preds = %71
  %88 = load ptr, ptr %5, align 8, !tbaa !5
  %89 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %88, i32 0, i32 6
  %90 = load i64, ptr %89, align 8, !tbaa !15
  %91 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %8, i64 noundef %90, ptr noundef %91)
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %92

92:                                               ; preds = %104, %87
  %93 = load i64, ptr %10, align 8, !tbaa !16
  %94 = load ptr, ptr %5, align 8, !tbaa !5
  %95 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %94, i32 0, i32 6
  %96 = load i64, ptr %95, align 8, !tbaa !15
  %97 = sub nsw i64 %96, 1
  %98 = icmp sle i64 %93, %97
  br i1 %98, label %99, label %107

99:                                               ; preds = %92
  %100 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %101 = load ptr, ptr %100, align 8, !tbaa !20
  %102 = load i64, ptr %10, align 8, !tbaa !16
  %103 = getelementptr inbounds i64, ptr %101, i64 %102
  store i64 0, ptr %103, align 8, !tbaa !16
  br label %104

104:                                              ; preds = %99
  %105 = load i64, ptr %10, align 8, !tbaa !16
  %106 = add nsw i64 %105, 1
  store i64 %106, ptr %10, align 8, !tbaa !16
  br label %92, !llvm.loop !23

107:                                              ; preds = %92
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %108

108:                                              ; preds = %157, %107
  %109 = load i64, ptr %10, align 8, !tbaa !16
  %110 = load i64, ptr %12, align 8, !tbaa !16
  %111 = sub nsw i64 %110, 1
  %112 = icmp sle i64 %109, %111
  br i1 %112, label %113, label %160

113:                                              ; preds = %108
  %114 = load ptr, ptr %4, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %114, i32 0, i32 1
  %116 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %115, i32 0, i32 4
  %117 = load ptr, ptr %116, align 8, !tbaa !20
  %118 = load i64, ptr %10, align 8, !tbaa !16
  %119 = mul nsw i64 2, %118
  %120 = getelementptr inbounds i64, ptr %117, i64 %119
  %121 = load i64, ptr %120, align 8, !tbaa !16
  %122 = icmp sge i64 %121, 0
  br i1 %122, label %123, label %156

123:                                              ; preds = %113
  %124 = load ptr, ptr %5, align 8, !tbaa !5
  %125 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %124, i32 0, i32 2
  %126 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %125, i32 0, i32 4
  %127 = load ptr, ptr %126, align 8, !tbaa !20
  %128 = load ptr, ptr %4, align 8, !tbaa !5
  %129 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %128, i32 0, i32 1
  %130 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %129, i32 0, i32 4
  %131 = load ptr, ptr %130, align 8, !tbaa !20
  %132 = load i64, ptr %10, align 8, !tbaa !16
  %133 = mul nsw i64 2, %132
  %134 = getelementptr inbounds i64, ptr %131, i64 %133
  %135 = load i64, ptr %134, align 8, !tbaa !16
  %136 = add nsw i64 %135, 1
  %137 = getelementptr inbounds i64, ptr %127, i64 %136
  %138 = load i64, ptr %137, align 8, !tbaa !16
  %139 = add nsw i64 %138, 1
  %140 = load ptr, ptr %5, align 8, !tbaa !5
  %141 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %140, i32 0, i32 2
  %142 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %141, i32 0, i32 4
  %143 = load ptr, ptr %142, align 8, !tbaa !20
  %144 = load ptr, ptr %4, align 8, !tbaa !5
  %145 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %144, i32 0, i32 1
  %146 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %145, i32 0, i32 4
  %147 = load ptr, ptr %146, align 8, !tbaa !20
  %148 = load i64, ptr %10, align 8, !tbaa !16
  %149 = mul nsw i64 2, %148
  %150 = getelementptr inbounds i64, ptr %147, i64 %149
  %151 = load i64, ptr %150, align 8, !tbaa !16
  %152 = add nsw i64 %151, 1
  %153 = getelementptr inbounds i64, ptr %143, i64 %152
  store i64 %139, ptr %153, align 8, !tbaa !16
  %154 = load i64, ptr %9, align 8, !tbaa !16
  %155 = add nsw i64 %154, 1
  store i64 %155, ptr %9, align 8, !tbaa !16
  br label %156

156:                                              ; preds = %123, %113
  br label %157

157:                                              ; preds = %156
  %158 = load i64, ptr %10, align 8, !tbaa !16
  %159 = add nsw i64 %158, 1
  store i64 %159, ptr %10, align 8, !tbaa !16
  br label %108, !llvm.loop !24

160:                                              ; preds = %108
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %161

161:                                              ; preds = %192, %160
  %162 = load i64, ptr %10, align 8, !tbaa !16
  %163 = load ptr, ptr %5, align 8, !tbaa !5
  %164 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %163, i32 0, i32 6
  %165 = load i64, ptr %164, align 8, !tbaa !15
  %166 = sub nsw i64 %165, 1
  %167 = icmp sle i64 %162, %166
  br i1 %167, label %168, label %195

168:                                              ; preds = %161
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %169, i32 0, i32 2
  %171 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %170, i32 0, i32 4
  %172 = load ptr, ptr %171, align 8, !tbaa !20
  %173 = load i64, ptr %10, align 8, !tbaa !16
  %174 = add nsw i64 %173, 1
  %175 = getelementptr inbounds i64, ptr %172, i64 %174
  %176 = load i64, ptr %175, align 8, !tbaa !16
  %177 = load ptr, ptr %5, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %177, i32 0, i32 2
  %179 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %178, i32 0, i32 4
  %180 = load ptr, ptr %179, align 8, !tbaa !20
  %181 = load i64, ptr %10, align 8, !tbaa !16
  %182 = getelementptr inbounds i64, ptr %180, i64 %181
  %183 = load i64, ptr %182, align 8, !tbaa !16
  %184 = add nsw i64 %176, %183
  %185 = load ptr, ptr %5, align 8, !tbaa !5
  %186 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %185, i32 0, i32 2
  %187 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %186, i32 0, i32 4
  %188 = load ptr, ptr %187, align 8, !tbaa !20
  %189 = load i64, ptr %10, align 8, !tbaa !16
  %190 = add nsw i64 %189, 1
  %191 = getelementptr inbounds i64, ptr %188, i64 %190
  store i64 %184, ptr %191, align 8, !tbaa !16
  br label %192

192:                                              ; preds = %168
  %193 = load i64, ptr %10, align 8, !tbaa !16
  %194 = add nsw i64 %193, 1
  store i64 %194, ptr %10, align 8, !tbaa !16
  br label %161, !llvm.loop !25

195:                                              ; preds = %161
  %196 = load ptr, ptr %5, align 8, !tbaa !5
  %197 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %196, i32 0, i32 0
  %198 = load i64, ptr %9, align 8, !tbaa !16
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %197, i64 noundef %198, ptr noundef %199)
  %200 = load ptr, ptr %5, align 8, !tbaa !5
  %201 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %200, i32 0, i32 1
  %202 = load i64, ptr %9, align 8, !tbaa !16
  %203 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %201, i64 noundef %202, ptr noundef %203)
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %204

204:                                              ; preds = %325, %195
  %205 = load i64, ptr %10, align 8, !tbaa !16
  %206 = load i64, ptr %12, align 8, !tbaa !16
  %207 = sub nsw i64 %206, 1
  %208 = icmp sle i64 %205, %207
  br i1 %208, label %209, label %328

209:                                              ; preds = %204
  %210 = load ptr, ptr %4, align 8, !tbaa !5
  %211 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %210, i32 0, i32 1
  %212 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %211, i32 0, i32 4
  %213 = load ptr, ptr %212, align 8, !tbaa !20
  %214 = load i64, ptr %10, align 8, !tbaa !16
  %215 = mul nsw i64 2, %214
  %216 = getelementptr inbounds i64, ptr %213, i64 %215
  %217 = load i64, ptr %216, align 8, !tbaa !16
  %218 = icmp sge i64 %217, 0
  br i1 %218, label %219, label %324

219:                                              ; preds = %209
  %220 = load ptr, ptr %4, align 8, !tbaa !5
  %221 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %220, i32 0, i32 0
  %222 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %221, i32 0, i32 4
  %223 = load ptr, ptr %222, align 8, !tbaa !20
  %224 = load i64, ptr %10, align 8, !tbaa !16
  %225 = getelementptr inbounds double, ptr %223, i64 %224
  %226 = load double, ptr %225, align 8, !tbaa !26
  %227 = load ptr, ptr %5, align 8, !tbaa !5
  %228 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %227, i32 0, i32 0
  %229 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %228, i32 0, i32 4
  %230 = load ptr, ptr %229, align 8, !tbaa !20
  %231 = load ptr, ptr %5, 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 !20
  %235 = load ptr, ptr %4, align 8, !tbaa !5
  %236 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %235, i32 0, i32 1
  %237 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %236, i32 0, i32 4
  %238 = load ptr, ptr %237, align 8, !tbaa !20
  %239 = load i64, ptr %10, align 8, !tbaa !16
  %240 = mul nsw i64 2, %239
  %241 = getelementptr inbounds i64, ptr %238, i64 %240
  %242 = load i64, ptr %241, align 8, !tbaa !16
  %243 = getelementptr inbounds i64, ptr %234, i64 %242
  %244 = load i64, ptr %243, align 8, !tbaa !16
  %245 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %246 = load ptr, ptr %245, align 8, !tbaa !20
  %247 = load ptr, ptr %4, align 8, !tbaa !5
  %248 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %247, i32 0, i32 1
  %249 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %248, i32 0, i32 4
  %250 = load ptr, ptr %249, align 8, !tbaa !20
  %251 = load i64, ptr %10, align 8, !tbaa !16
  %252 = mul nsw i64 2, %251
  %253 = getelementptr inbounds i64, ptr %250, i64 %252
  %254 = load i64, ptr %253, align 8, !tbaa !16
  %255 = getelementptr inbounds i64, ptr %246, i64 %254
  %256 = load i64, ptr %255, align 8, !tbaa !16
  %257 = add nsw i64 %244, %256
  %258 = getelementptr inbounds double, ptr %230, i64 %257
  store double %226, ptr %258, align 8, !tbaa !26
  %259 = load ptr, ptr %4, align 8, !tbaa !5
  %260 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %259, i32 0, i32 1
  %261 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %260, i32 0, i32 4
  %262 = load ptr, ptr %261, align 8, !tbaa !20
  %263 = load i64, ptr %10, align 8, !tbaa !16
  %264 = mul nsw i64 2, %263
  %265 = add nsw i64 %264, 1
  %266 = getelementptr inbounds i64, ptr %262, i64 %265
  %267 = load i64, ptr %266, align 8, !tbaa !16
  %268 = load ptr, ptr %5, align 8, !tbaa !5
  %269 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %268, i32 0, i32 1
  %270 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %269, i32 0, i32 4
  %271 = load ptr, ptr %270, align 8, !tbaa !20
  %272 = load ptr, ptr %5, align 8, !tbaa !5
  %273 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %272, i32 0, i32 2
  %274 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %273, i32 0, i32 4
  %275 = load ptr, ptr %274, align 8, !tbaa !20
  %276 = load ptr, ptr %4, align 8, !tbaa !5
  %277 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %276, i32 0, i32 1
  %278 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %277, i32 0, i32 4
  %279 = load ptr, ptr %278, align 8, !tbaa !20
  %280 = load i64, ptr %10, align 8, !tbaa !16
  %281 = mul nsw i64 2, %280
  %282 = getelementptr inbounds i64, ptr %279, i64 %281
  %283 = load i64, ptr %282, align 8, !tbaa !16
  %284 = getelementptr inbounds i64, ptr %275, i64 %283
  %285 = load i64, ptr %284, align 8, !tbaa !16
  %286 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %287 = load ptr, ptr %286, align 8, !tbaa !20
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %288, i32 0, i32 1
  %290 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %289, i32 0, i32 4
  %291 = load ptr, ptr %290, align 8, !tbaa !20
  %292 = load i64, ptr %10, align 8, !tbaa !16
  %293 = mul nsw i64 2, %292
  %294 = getelementptr inbounds i64, ptr %291, i64 %293
  %295 = load i64, ptr %294, align 8, !tbaa !16
  %296 = getelementptr inbounds i64, ptr %287, i64 %295
  %297 = load i64, ptr %296, align 8, !tbaa !16
  %298 = add nsw i64 %285, %297
  %299 = getelementptr inbounds i64, ptr %271, i64 %298
  store i64 %267, ptr %299, align 8, !tbaa !16
  %300 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %301 = load ptr, ptr %300, align 8, !tbaa !20
  %302 = load ptr, ptr %4, align 8, !tbaa !5
  %303 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %302, i32 0, i32 1
  %304 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %303, i32 0, i32 4
  %305 = load ptr, ptr %304, align 8, !tbaa !20
  %306 = load i64, ptr %10, align 8, !tbaa !16
  %307 = mul nsw i64 2, %306
  %308 = getelementptr inbounds i64, ptr %305, i64 %307
  %309 = load i64, ptr %308, align 8, !tbaa !16
  %310 = getelementptr inbounds i64, ptr %301, i64 %309
  %311 = load i64, ptr %310, align 8, !tbaa !16
  %312 = add nsw i64 %311, 1
  %313 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %314 = load ptr, ptr %313, align 8, !tbaa !20
  %315 = load ptr, ptr %4, align 8, !tbaa !5
  %316 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %315, i32 0, i32 1
  %317 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %316, i32 0, i32 4
  %318 = load ptr, ptr %317, align 8, !tbaa !20
  %319 = load i64, ptr %10, align 8, !tbaa !16
  %320 = mul nsw i64 2, %319
  %321 = getelementptr inbounds i64, ptr %318, i64 %320
  %322 = load i64, ptr %321, align 8, !tbaa !16
  %323 = getelementptr inbounds i64, ptr %314, i64 %322
  store i64 %312, ptr %323, align 8, !tbaa !16
  br label %324

324:                                              ; preds = %219, %209
  br label %325

325:                                              ; preds = %324
  %326 = load i64, ptr %10, align 8, !tbaa !16
  %327 = add nsw i64 %326, 1
  store i64 %327, ptr %10, align 8, !tbaa !16
  br label %204, !llvm.loop !28

328:                                              ; preds = %204
  %329 = load ptr, ptr %5, align 8, !tbaa !5
  %330 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %329, i32 0, i32 2
  %331 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %330, i32 0, i32 4
  %332 = load ptr, ptr %331, align 8, !tbaa !20
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %333, i32 0, i32 6
  %335 = load i64, ptr %334, align 8, !tbaa !15
  %336 = getelementptr inbounds i64, ptr %332, i64 %335
  %337 = load i64, ptr %336, align 8, !tbaa !16
  %338 = load ptr, ptr %5, align 8, !tbaa !5
  %339 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %338, i32 0, i32 9
  store i64 %337, ptr %339, align 8, !tbaa !29
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %340

340:                                              ; preds = %376, %328
  %341 = load i64, ptr %10, align 8, !tbaa !16
  %342 = load ptr, ptr %5, align 8, !tbaa !5
  %343 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %342, i32 0, i32 6
  %344 = load i64, ptr %343, align 8, !tbaa !15
  %345 = sub nsw i64 %344, 1
  %346 = icmp sle i64 %341, %345
  br i1 %346, label %347, label %379

347:                                              ; preds = %340
  %348 = load ptr, ptr %5, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %348, i32 0, i32 1
  %350 = load ptr, ptr %5, align 8, !tbaa !5
  %351 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %350, i32 0, i32 0
  %352 = load ptr, ptr %5, align 8, !tbaa !5
  %353 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %352, i32 0, i32 2
  %354 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %353, i32 0, i32 4
  %355 = load ptr, ptr %354, align 8, !tbaa !20
  %356 = load i64, ptr %10, align 8, !tbaa !16
  %357 = getelementptr inbounds i64, ptr %355, i64 %356
  %358 = load i64, ptr %357, align 8, !tbaa !16
  %359 = load ptr, ptr %5, align 8, !tbaa !5
  %360 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %359, i32 0, i32 2
  %361 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %360, i32 0, i32 4
  %362 = load ptr, ptr %361, align 8, !tbaa !20
  %363 = load i64, ptr %10, align 8, !tbaa !16
  %364 = add nsw i64 %363, 1
  %365 = getelementptr inbounds i64, ptr %362, i64 %364
  %366 = load i64, ptr %365, align 8, !tbaa !16
  %367 = load ptr, ptr %5, align 8, !tbaa !5
  %368 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %367, i32 0, i32 2
  %369 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %368, i32 0, i32 4
  %370 = load ptr, ptr %369, align 8, !tbaa !20
  %371 = load i64, ptr %10, align 8, !tbaa !16
  %372 = getelementptr inbounds i64, ptr %370, i64 %371
  %373 = load i64, ptr %372, align 8, !tbaa !16
  %374 = sub nsw i64 %366, %373
  %375 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl15tagsortmiddleirEPNS_9ae_vectorES1_llPNS_8ae_stateE(ptr noundef %349, ptr noundef %351, i64 noundef %358, i64 noundef %374, ptr noundef %375)
  br label %376

376:                                              ; preds = %347
  %377 = load i64, ptr %10, align 8, !tbaa !16
  %378 = add nsw i64 %377, 1
  store i64 %378, ptr %10, align 8, !tbaa !16
  br label %340, !llvm.loop !30

379:                                              ; preds = %340
  %380 = load ptr, ptr %5, align 8, !tbaa !5
  %381 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %380, ptr noundef %381)
  %382 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %382)
  store i32 1, ptr %16, align 4
  br label %798

383:                                              ; preds = %33
  %384 = load ptr, ptr %4, align 8, !tbaa !5
  %385 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %384, i32 0, i32 5
  %386 = load i64, ptr %385, align 8, !tbaa !9
  %387 = icmp eq i64 %386, 1
  br i1 %387, label %388, label %393

388:                                              ; preds = %383
  %389 = load ptr, ptr %4, align 8, !tbaa !5
  %390 = load ptr, ptr %5, align 8, !tbaa !5
  %391 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl13sparsecopybufEPNS_12sparsematrixES1_PNS_8ae_stateE(ptr noundef %389, ptr noundef %390, ptr noundef %391)
  %392 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %392)
  store i32 1, ptr %16, align 4
  br label %798

393:                                              ; preds = %383
  %394 = load ptr, ptr %4, align 8, !tbaa !5
  %395 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %394, i32 0, i32 5
  %396 = load i64, ptr %395, align 8, !tbaa !9
  %397 = icmp eq i64 %396, 2
  br i1 %397, label %398, label %795

398:                                              ; preds = %393
  %399 = load ptr, ptr %4, align 8, !tbaa !5
  %400 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %399, i32 0, i32 6
  %401 = load i64, ptr %400, align 8, !tbaa !15
  %402 = load ptr, ptr %4, align 8, !tbaa !5
  %403 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %402, i32 0, i32 7
  %404 = load i64, ptr %403, align 8, !tbaa !17
  %405 = icmp eq i64 %401, %404
  %406 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %405, ptr noundef @.str.185, ptr noundef %406)
  %407 = load ptr, ptr %4, align 8, !tbaa !5
  %408 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %407, i32 0, i32 6
  %409 = load i64, ptr %408, align 8, !tbaa !15
  %410 = load ptr, ptr %5, align 8, !tbaa !5
  %411 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %410, i32 0, i32 6
  store i64 %409, ptr %411, align 8, !tbaa !15
  %412 = load ptr, ptr %4, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %412, i32 0, i32 7
  %414 = load i64, ptr %413, align 8, !tbaa !17
  %415 = load ptr, ptr %5, align 8, !tbaa !5
  %416 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %415, i32 0, i32 7
  store i64 %414, ptr %416, align 8, !tbaa !17
  %417 = load ptr, ptr %5, align 8, !tbaa !5
  %418 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %417, i32 0, i32 5
  store i64 1, ptr %418, align 8, !tbaa !9
  %419 = load ptr, ptr %5, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %419, i32 0, i32 2
  %421 = load i64, ptr %15, align 8, !tbaa !16
  %422 = add nsw i64 %421, 1
  %423 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %420, i64 noundef %422, ptr noundef %423)
  %424 = load ptr, ptr %5, align 8, !tbaa !5
  %425 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %424, i32 0, i32 2
  %426 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %425, i32 0, i32 4
  %427 = load ptr, ptr %426, align 8, !tbaa !20
  %428 = getelementptr inbounds i64, ptr %427, i64 0
  store i64 0, ptr %428, align 8, !tbaa !16
  store i64 1, ptr %10, align 8, !tbaa !16
  br label %429

429:                                              ; preds = %440, %398
  %430 = load i64, ptr %10, align 8, !tbaa !16
  %431 = load i64, ptr %15, align 8, !tbaa !16
  %432 = icmp sle i64 %430, %431
  br i1 %432, label %433, label %443

433:                                              ; preds = %429
  %434 = load ptr, ptr %5, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %434, i32 0, i32 2
  %436 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %435, i32 0, i32 4
  %437 = load ptr, ptr %436, align 8, !tbaa !20
  %438 = load i64, ptr %10, align 8, !tbaa !16
  %439 = getelementptr inbounds i64, ptr %437, i64 %438
  store i64 1, ptr %439, align 8, !tbaa !16
  br label %440

440:                                              ; preds = %433
  %441 = load i64, ptr %10, align 8, !tbaa !16
  %442 = add nsw i64 %441, 1
  store i64 %442, ptr %10, align 8, !tbaa !16
  br label %429, !llvm.loop !31

443:                                              ; preds = %429
  store i64 0, ptr %9, align 8, !tbaa !16
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %444

444:                                              ; preds = %526, %443
  %445 = load i64, ptr %10, align 8, !tbaa !16
  %446 = load i64, ptr %15, align 8, !tbaa !16
  %447 = sub nsw i64 %446, 1
  %448 = icmp sle i64 %445, %447
  br i1 %448, label %449, label %529

449:                                              ; preds = %444
  %450 = load ptr, ptr %4, align 8, !tbaa !5
  %451 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %450, i32 0, i32 3
  %452 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %451, i32 0, i32 4
  %453 = load ptr, ptr %452, align 8, !tbaa !20
  %454 = load i64, ptr %10, align 8, !tbaa !16
  %455 = getelementptr inbounds i64, ptr %453, i64 %454
  %456 = load i64, ptr %455, align 8, !tbaa !16
  %457 = load ptr, ptr %5, align 8, !tbaa !5
  %458 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %457, i32 0, i32 2
  %459 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %458, i32 0, i32 4
  %460 = load ptr, ptr %459, align 8, !tbaa !20
  %461 = load i64, ptr %10, align 8, !tbaa !16
  %462 = add nsw i64 %461, 1
  %463 = getelementptr inbounds i64, ptr %460, i64 %462
  %464 = load i64, ptr %463, align 8, !tbaa !16
  %465 = add nsw i64 %456, %464
  %466 = load ptr, ptr %5, align 8, !tbaa !5
  %467 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %466, i32 0, i32 2
  %468 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %467, i32 0, i32 4
  %469 = load ptr, ptr %468, align 8, !tbaa !20
  %470 = load i64, ptr %10, align 8, !tbaa !16
  %471 = add nsw i64 %470, 1
  %472 = getelementptr inbounds i64, ptr %469, i64 %471
  store i64 %465, ptr %472, align 8, !tbaa !16
  %473 = load i64, ptr %10, align 8, !tbaa !16
  %474 = load ptr, ptr %4, align 8, !tbaa !5
  %475 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %474, i32 0, i32 4
  %476 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %475, i32 0, i32 4
  %477 = load ptr, ptr %476, align 8, !tbaa !20
  %478 = load i64, ptr %10, align 8, !tbaa !16
  %479 = getelementptr inbounds i64, ptr %477, i64 %478
  %480 = load i64, ptr %479, align 8, !tbaa !16
  %481 = sub nsw i64 %473, %480
  store i64 %481, ptr %11, align 8, !tbaa !16
  br label %482

482:                                              ; preds = %504, %449
  %483 = load i64, ptr %11, align 8, !tbaa !16
  %484 = load i64, ptr %10, align 8, !tbaa !16
  %485 = sub nsw i64 %484, 1
  %486 = icmp sle i64 %483, %485
  br i1 %486, label %487, label %507

487:                                              ; preds = %482
  %488 = load ptr, ptr %5, align 8, !tbaa !5
  %489 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %488, i32 0, i32 2
  %490 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %489, i32 0, i32 4
  %491 = load ptr, ptr %490, align 8, !tbaa !20
  %492 = load i64, ptr %11, align 8, !tbaa !16
  %493 = add nsw i64 %492, 1
  %494 = getelementptr inbounds i64, ptr %491, i64 %493
  %495 = load i64, ptr %494, align 8, !tbaa !16
  %496 = add nsw i64 %495, 1
  %497 = load ptr, ptr %5, align 8, !tbaa !5
  %498 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %497, i32 0, i32 2
  %499 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %498, i32 0, i32 4
  %500 = load ptr, ptr %499, align 8, !tbaa !20
  %501 = load i64, ptr %11, align 8, !tbaa !16
  %502 = add nsw i64 %501, 1
  %503 = getelementptr inbounds i64, ptr %500, i64 %502
  store i64 %496, ptr %503, align 8, !tbaa !16
  br label %504

504:                                              ; preds = %487
  %505 = load i64, ptr %11, align 8, !tbaa !16
  %506 = add nsw i64 %505, 1
  store i64 %506, ptr %11, align 8, !tbaa !16
  br label %482, !llvm.loop !32

507:                                              ; preds = %482
  %508 = load i64, ptr %9, align 8, !tbaa !16
  %509 = load ptr, ptr %4, align 8, !tbaa !5
  %510 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %509, i32 0, i32 3
  %511 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %510, i32 0, i32 4
  %512 = load ptr, ptr %511, align 8, !tbaa !20
  %513 = load i64, ptr %10, align 8, !tbaa !16
  %514 = getelementptr inbounds i64, ptr %512, i64 %513
  %515 = load i64, ptr %514, align 8, !tbaa !16
  %516 = add nsw i64 %508, %515
  %517 = add nsw i64 %516, 1
  %518 = load ptr, ptr %4, align 8, !tbaa !5
  %519 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %518, i32 0, i32 4
  %520 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %519, i32 0, i32 4
  %521 = load ptr, ptr %520, align 8, !tbaa !20
  %522 = load i64, ptr %10, align 8, !tbaa !16
  %523 = getelementptr inbounds i64, ptr %521, i64 %522
  %524 = load i64, ptr %523, align 8, !tbaa !16
  %525 = add nsw i64 %517, %524
  store i64 %525, ptr %9, align 8, !tbaa !16
  br label %526

526:                                              ; preds = %507
  %527 = load i64, ptr %10, align 8, !tbaa !16
  %528 = add nsw i64 %527, 1
  store i64 %528, ptr %10, align 8, !tbaa !16
  br label %444, !llvm.loop !33

529:                                              ; preds = %444
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %530

530:                                              ; preds = %559, %529
  %531 = load i64, ptr %10, align 8, !tbaa !16
  %532 = load i64, ptr %15, align 8, !tbaa !16
  %533 = sub nsw i64 %532, 1
  %534 = icmp sle i64 %531, %533
  br i1 %534, label %535, label %562

535:                                              ; preds = %530
  %536 = load ptr, ptr %5, align 8, !tbaa !5
  %537 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %536, i32 0, i32 2
  %538 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %537, i32 0, i32 4
  %539 = load ptr, ptr %538, align 8, !tbaa !20
  %540 = load i64, ptr %10, align 8, !tbaa !16
  %541 = add nsw i64 %540, 1
  %542 = getelementptr inbounds i64, ptr %539, i64 %541
  %543 = load i64, ptr %542, align 8, !tbaa !16
  %544 = load ptr, ptr %5, align 8, !tbaa !5
  %545 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %544, i32 0, i32 2
  %546 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %545, i32 0, i32 4
  %547 = load ptr, ptr %546, align 8, !tbaa !20
  %548 = load i64, ptr %10, align 8, !tbaa !16
  %549 = getelementptr inbounds i64, ptr %547, i64 %548
  %550 = load i64, ptr %549, align 8, !tbaa !16
  %551 = add nsw i64 %543, %550
  %552 = load ptr, ptr %5, align 8, !tbaa !5
  %553 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %552, i32 0, i32 2
  %554 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %553, i32 0, i32 4
  %555 = load ptr, ptr %554, align 8, !tbaa !20
  %556 = load i64, ptr %10, align 8, !tbaa !16
  %557 = add nsw i64 %556, 1
  %558 = getelementptr inbounds i64, ptr %555, i64 %557
  store i64 %551, ptr %558, align 8, !tbaa !16
  br label %559

559:                                              ; preds = %535
  %560 = load i64, ptr %10, align 8, !tbaa !16
  %561 = add nsw i64 %560, 1
  store i64 %561, ptr %10, align 8, !tbaa !16
  br label %530, !llvm.loop !34

562:                                              ; preds = %530
  %563 = load ptr, ptr %5, align 8, !tbaa !5
  %564 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %563, i32 0, i32 2
  %565 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %564, i32 0, i32 4
  %566 = load ptr, ptr %565, align 8, !tbaa !20
  %567 = load i64, ptr %15, align 8, !tbaa !16
  %568 = getelementptr inbounds i64, ptr %566, i64 %567
  %569 = load i64, ptr %568, align 8, !tbaa !16
  %570 = load ptr, ptr %5, align 8, !tbaa !5
  %571 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %570, i32 0, i32 9
  store i64 %569, ptr %571, align 8, !tbaa !29
  %572 = load i64, ptr %15, align 8, !tbaa !16
  %573 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %8, i64 noundef %572, ptr noundef %573)
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %574

574:                                              ; preds = %584, %562
  %575 = load i64, ptr %10, align 8, !tbaa !16
  %576 = load i64, ptr %15, align 8, !tbaa !16
  %577 = sub nsw i64 %576, 1
  %578 = icmp sle i64 %575, %577
  br i1 %578, label %579, label %587

579:                                              ; preds = %574
  %580 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %581 = load ptr, ptr %580, align 8, !tbaa !20
  %582 = load i64, ptr %10, align 8, !tbaa !16
  %583 = getelementptr inbounds i64, ptr %581, i64 %582
  store i64 0, ptr %583, align 8, !tbaa !16
  br label %584

584:                                              ; preds = %579
  %585 = load i64, ptr %10, align 8, !tbaa !16
  %586 = add nsw i64 %585, 1
  store i64 %586, ptr %10, align 8, !tbaa !16
  br label %574, !llvm.loop !35

587:                                              ; preds = %574
  %588 = load ptr, ptr %5, align 8, !tbaa !5
  %589 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %588, i32 0, i32 0
  %590 = load i64, ptr %9, align 8, !tbaa !16
  %591 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %589, i64 noundef %590, ptr noundef %591)
  %592 = load ptr, ptr %5, align 8, !tbaa !5
  %593 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %592, i32 0, i32 1
  %594 = load i64, ptr %9, align 8, !tbaa !16
  %595 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %593, i64 noundef %594, ptr noundef %595)
  store i64 0, ptr %10, align 8, !tbaa !16
  br label %596

596:                                              ; preds = %788, %587
  %597 = load i64, ptr %10, align 8, !tbaa !16
  %598 = load i64, ptr %15, align 8, !tbaa !16
  %599 = sub nsw i64 %598, 1
  %600 = icmp sle i64 %597, %599
  br i1 %600, label %601, label %791

601:                                              ; preds = %596
  %602 = load ptr, ptr %4, align 8, !tbaa !5
  %603 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %602, i32 0, i32 2
  %604 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %603, i32 0, i32 4
  %605 = load ptr, ptr %604, align 8, !tbaa !20
  %606 = load i64, ptr %10, align 8, !tbaa !16
  %607 = getelementptr inbounds i64, ptr %605, i64 %606
  %608 = load i64, ptr %607, align 8, !tbaa !16
  store i64 %608, ptr %13, align 8, !tbaa !16
  %609 = load ptr, ptr %5, align 8, !tbaa !5
  %610 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %609, i32 0, i32 2
  %611 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %610, i32 0, i32 4
  %612 = load ptr, ptr %611, align 8, !tbaa !20
  %613 = load i64, ptr %10, align 8, !tbaa !16
  %614 = getelementptr inbounds i64, ptr %612, i64 %613
  %615 = load i64, ptr %614, align 8, !tbaa !16
  %616 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %617 = load ptr, ptr %616, align 8, !tbaa !20
  %618 = load i64, ptr %10, align 8, !tbaa !16
  %619 = getelementptr inbounds i64, ptr %617, i64 %618
  %620 = load i64, ptr %619, align 8, !tbaa !16
  %621 = add nsw i64 %615, %620
  store i64 %621, ptr %14, align 8, !tbaa !16
  %622 = load ptr, ptr %4, align 8, !tbaa !5
  %623 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %622, i32 0, i32 3
  %624 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %623, i32 0, i32 4
  %625 = load ptr, ptr %624, align 8, !tbaa !20
  %626 = load i64, ptr %10, align 8, !tbaa !16
  %627 = getelementptr inbounds i64, ptr %625, i64 %626
  %628 = load i64, ptr %627, align 8, !tbaa !16
  %629 = add nsw i64 %628, 1
  store i64 %629, ptr %12, align 8, !tbaa !16
  store i64 0, ptr %11, align 8, !tbaa !16
  br label %630

630:                                              ; preds = %672, %601
  %631 = load i64, ptr %11, align 8, !tbaa !16
  %632 = load i64, ptr %12, align 8, !tbaa !16
  %633 = sub nsw i64 %632, 1
  %634 = icmp sle i64 %631, %633
  br i1 %634, label %635, label %675

635:                                              ; preds = %630
  %636 = load ptr, ptr %4, align 8, !tbaa !5
  %637 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %636, i32 0, i32 0
  %638 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %637, i32 0, i32 4
  %639 = load ptr, ptr %638, align 8, !tbaa !20
  %640 = load i64, ptr %13, align 8, !tbaa !16
  %641 = load i64, ptr %11, align 8, !tbaa !16
  %642 = add nsw i64 %640, %641
  %643 = getelementptr inbounds double, ptr %639, i64 %642
  %644 = load double, ptr %643, align 8, !tbaa !26
  %645 = load ptr, ptr %5, align 8, !tbaa !5
  %646 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %645, i32 0, i32 0
  %647 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %646, i32 0, i32 4
  %648 = load ptr, ptr %647, align 8, !tbaa !20
  %649 = load i64, ptr %14, align 8, !tbaa !16
  %650 = load i64, ptr %11, align 8, !tbaa !16
  %651 = add nsw i64 %649, %650
  %652 = getelementptr inbounds double, ptr %648, i64 %651
  store double %644, ptr %652, align 8, !tbaa !26
  %653 = load i64, ptr %10, align 8, !tbaa !16
  %654 = load ptr, ptr %4, align 8, !tbaa !5
  %655 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %654, i32 0, i32 3
  %656 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %655, i32 0, i32 4
  %657 = load ptr, ptr %656, align 8, !tbaa !20
  %658 = load i64, ptr %10, align 8, !tbaa !16
  %659 = getelementptr inbounds i64, ptr %657, i64 %658
  %660 = load i64, ptr %659, align 8, !tbaa !16
  %661 = sub nsw i64 %653, %660
  %662 = load i64, ptr %11, align 8, !tbaa !16
  %663 = add nsw i64 %661, %662
  %664 = load ptr, ptr %5, align 8, !tbaa !5
  %665 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %664, i32 0, i32 1
  %666 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %665, i32 0, i32 4
  %667 = load ptr, ptr %666, align 8, !tbaa !20
  %668 = load i64, ptr %14, align 8, !tbaa !16
  %669 = load i64, ptr %11, align 8, !tbaa !16
  %670 = add nsw i64 %668, %669
  %671 = getelementptr inbounds i64, ptr %667, i64 %670
  store i64 %663, ptr %671, align 8, !tbaa !16
  br label %672

672:                                              ; preds = %635
  %673 = load i64, ptr %11, align 8, !tbaa !16
  %674 = add nsw i64 %673, 1
  store i64 %674, ptr %11, align 8, !tbaa !16
  br label %630, !llvm.loop !36

675:                                              ; preds = %630
  %676 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %677 = load ptr, ptr %676, align 8, !tbaa !20
  %678 = load i64, ptr %10, align 8, !tbaa !16
  %679 = getelementptr inbounds i64, ptr %677, i64 %678
  %680 = load i64, ptr %679, align 8, !tbaa !16
  %681 = load ptr, ptr %4, align 8, !tbaa !5
  %682 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %681, i32 0, i32 3
  %683 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %682, i32 0, i32 4
  %684 = load ptr, ptr %683, align 8, !tbaa !20
  %685 = load i64, ptr %10, align 8, !tbaa !16
  %686 = getelementptr inbounds i64, ptr %684, i64 %685
  %687 = load i64, ptr %686, align 8, !tbaa !16
  %688 = add nsw i64 %680, %687
  %689 = add nsw i64 %688, 1
  %690 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %691 = load ptr, ptr %690, align 8, !tbaa !20
  %692 = load i64, ptr %10, align 8, !tbaa !16
  %693 = getelementptr inbounds i64, ptr %691, i64 %692
  store i64 %689, ptr %693, align 8, !tbaa !16
  %694 = load ptr, ptr %4, align 8, !tbaa !5
  %695 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %694, i32 0, i32 2
  %696 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %695, i32 0, i32 4
  %697 = load ptr, ptr %696, align 8, !tbaa !20
  %698 = load i64, ptr %10, align 8, !tbaa !16
  %699 = getelementptr inbounds i64, ptr %697, i64 %698
  %700 = load i64, ptr %699, align 8, !tbaa !16
  %701 = load ptr, ptr %4, align 8, !tbaa !5
  %702 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %701, i32 0, i32 3
  %703 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %702, i32 0, i32 4
  %704 = load ptr, ptr %703, align 8, !tbaa !20
  %705 = load i64, ptr %10, align 8, !tbaa !16
  %706 = getelementptr inbounds i64, ptr %704, i64 %705
  %707 = load i64, ptr %706, align 8, !tbaa !16
  %708 = add nsw i64 %700, %707
  %709 = add nsw i64 %708, 1
  store i64 %709, ptr %13, align 8, !tbaa !16
  %710 = load ptr, ptr %4, align 8, !tbaa !5
  %711 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %710, i32 0, i32 4
  %712 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %711, i32 0, i32 4
  %713 = load ptr, ptr %712, align 8, !tbaa !20
  %714 = load i64, ptr %10, align 8, !tbaa !16
  %715 = getelementptr inbounds i64, ptr %713, i64 %714
  %716 = load i64, ptr %715, align 8, !tbaa !16
  store i64 %716, ptr %12, align 8, !tbaa !16
  store i64 0, ptr %11, align 8, !tbaa !16
  br label %717

717:                                              ; preds = %784, %675
  %718 = load i64, ptr %11, align 8, !tbaa !16
  %719 = load i64, ptr %12, align 8, !tbaa !16
  %720 = sub nsw i64 %719, 1
  %721 = icmp sle i64 %718, %720
  br i1 %721, label %722, label %787

722:                                              ; preds = %717
  %723 = load ptr, ptr %5, align 8, !tbaa !5
  %724 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %723, i32 0, i32 2
  %725 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %724, i32 0, i32 4
  %726 = load ptr, ptr %725, align 8, !tbaa !20
  %727 = load i64, ptr %10, align 8, !tbaa !16
  %728 = load i64, ptr %12, align 8, !tbaa !16
  %729 = sub nsw i64 %727, %728
  %730 = load i64, ptr %11, align 8, !tbaa !16
  %731 = add nsw i64 %729, %730
  %732 = getelementptr inbounds i64, ptr %726, i64 %731
  %733 = load i64, ptr %732, align 8, !tbaa !16
  %734 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %735 = load ptr, ptr %734, align 8, !tbaa !20
  %736 = load i64, ptr %10, align 8, !tbaa !16
  %737 = load i64, ptr %12, align 8, !tbaa !16
  %738 = sub nsw i64 %736, %737
  %739 = load i64, ptr %11, align 8, !tbaa !16
  %740 = add nsw i64 %738, %739
  %741 = getelementptr inbounds i64, ptr %735, i64 %740
  %742 = load i64, ptr %741, align 8, !tbaa !16
  %743 = add nsw i64 %733, %742
  store i64 %743, ptr %14, align 8, !tbaa !16
  %744 = load ptr, ptr %4, align 8, !tbaa !5
  %745 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %744, i32 0, i32 0
  %746 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %745, i32 0, i32 4
  %747 = load ptr, ptr %746, align 8, !tbaa !20
  %748 = load i64, ptr %13, align 8, !tbaa !16
  %749 = load i64, ptr %11, align 8, !tbaa !16
  %750 = add nsw i64 %748, %749
  %751 = getelementptr inbounds double, ptr %747, i64 %750
  %752 = load double, ptr %751, align 8, !tbaa !26
  %753 = load ptr, ptr %5, align 8, !tbaa !5
  %754 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %753, i32 0, i32 0
  %755 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %754, i32 0, i32 4
  %756 = load ptr, ptr %755, align 8, !tbaa !20
  %757 = load i64, ptr %14, align 8, !tbaa !16
  %758 = getelementptr inbounds double, ptr %756, i64 %757
  store double %752, ptr %758, align 8, !tbaa !26
  %759 = load i64, ptr %10, align 8, !tbaa !16
  %760 = load ptr, ptr %5, align 8, !tbaa !5
  %761 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %760, i32 0, i32 1
  %762 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %761, i32 0, i32 4
  %763 = load ptr, ptr %762, align 8, !tbaa !20
  %764 = load i64, ptr %14, align 8, !tbaa !16
  %765 = getelementptr inbounds i64, ptr %763, i64 %764
  store i64 %759, ptr %765, align 8, !tbaa !16
  %766 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %767 = load ptr, ptr %766, align 8, !tbaa !20
  %768 = load i64, ptr %10, align 8, !tbaa !16
  %769 = load i64, ptr %12, align 8, !tbaa !16
  %770 = sub nsw i64 %768, %769
  %771 = load i64, ptr %11, align 8, !tbaa !16
  %772 = add nsw i64 %770, %771
  %773 = getelementptr inbounds i64, ptr %767, i64 %772
  %774 = load i64, ptr %773, align 8, !tbaa !16
  %775 = add nsw i64 %774, 1
  %776 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %8, i32 0, i32 4
  %777 = load ptr, ptr %776, align 8, !tbaa !20
  %778 = load i64, ptr %10, align 8, !tbaa !16
  %779 = load i64, ptr %12, align 8, !tbaa !16
  %780 = sub nsw i64 %778, %779
  %781 = load i64, ptr %11, align 8, !tbaa !16
  %782 = add nsw i64 %780, %781
  %783 = getelementptr inbounds i64, ptr %777, i64 %782
  store i64 %775, ptr %783, align 8, !tbaa !16
  br label %784

784:                                              ; preds = %722
  %785 = load i64, ptr %11, align 8, !tbaa !16
  %786 = add nsw i64 %785, 1
  store i64 %786, ptr %11, align 8, !tbaa !16
  br label %717, !llvm.loop !37

787:                                              ; preds = %717
  br label %788

788:                                              ; preds = %787
  %789 = load i64, ptr %10, align 8, !tbaa !16
  %790 = add nsw i64 %789, 1
  store i64 %790, ptr %10, align 8, !tbaa !16
  br label %596, !llvm.loop !38

791:                                              ; preds = %596
  %792 = load ptr, ptr %5, align 8, !tbaa !5
  %793 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %792, ptr noundef %793)
  %794 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %794)
  store i32 1, ptr %16, align 4
  br label %798

795:                                              ; preds = %393
  %796 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.186, ptr noundef %796)
  %797 = load ptr, ptr %6, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %797)
  store i32 0, ptr %16, align 4
  br label %798

798:                                              ; preds = %795, %791, %388, %379
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %7) #4
  %799 = load i32, ptr %16, align 4
  switch i32 %799, label %801 [
    i32 0, label %800
    i32 1, label %800
  ]

800:                                              ; preds = %798, %798
  ret void

801:                                              ; preds = %798
  unreachable
}

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

declare void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #2

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

declare void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef, ptr noundef) #2

declare void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i1 noundef zeroext) #2

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) #2

declare void @_ZN11alglib_impl15tagsortmiddleirEPNS_9ae_vectorES1_llPNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) #2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { "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 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, !12, i64 320}
!10 = !{!"_ZTSN11alglib_impl12sparsematrixE", !11, i64 0, !11, i64 64, !11, i64 128, !11, i64 192, !11, i64 256, !12, i64 320, !12, i64 328, !12, i64 336, !12, i64 344, !12, i64 352, !12, i64 360}
!11 = !{!"_ZTSN11alglib_impl9ae_vectorE", !12, i64 0, !12, i64 8, !13, i64 16, !14, i64 24, !7, i64 56}
!12 = !{!"long", !7, i64 0}
!13 = !{!"bool", !7, i64 0}
!14 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24}
!15 = !{!10, !12, i64 328}
!16 = !{!12, !12, i64 0}
!17 = !{!10, !12, i64 336}
!18 = !{!10, !12, i64 344}
!19 = !{!10, !12, i64 360}
!20 = !{!7, !7, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}
!26 = !{!27, !27, i64 0}
!27 = !{!"double", !7, i64 0}
!28 = distinct !{!28, !22}
!29 = !{!10, !12, i64 352}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = distinct !{!35, !22}
!36 = distinct !{!36, !22}
!37 = distinct !{!37, !22}
!38 = distinct !{!38, !22}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"struct.alglib_impl::ae_frame" = type { %"struct.alglib_impl::ae_dyn_block" }
%"struct.alglib_impl::ae_dyn_block" = type { ptr, ptr, ptr, ptr }
%"struct.alglib_impl::ae_vector" = type { i64, i64, i8, %"struct.alglib_impl::ae_dyn_block", %union.anon.0 }
%union.anon.0 = type { ptr }

@.str.184 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.185 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.186 = external hidden unnamed_addr constant [43 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 nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

; 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 #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl18sparsecopytocrsbufEPNS_12sparsematrixES1_PNS_8ae_stateE(ptr noundef %0, ptr noundef %1, ptr noundef %2) local_unnamed_addr #3 {
switch.edge:
  %3 = alloca %"struct.alglib_impl::ae_frame", align 8
  %4 = alloca %"struct.alglib_impl::ae_vector", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %4) #4
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %2, ptr noundef nonnull %3)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %4, i8 0, i64 64, i1 false)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %4, i64 noundef 0, i64 noundef 2, ptr noundef %2, i1 noundef zeroext true)
  %5 = getelementptr inbounds i8, ptr %0, i64 320
  %6 = load i64, ptr %5, align 8, !tbaa !5
  %switch = icmp ult i64 %6, 3
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %switch, ptr noundef nonnull @.str.184, ptr noundef %2)
  %7 = getelementptr inbounds i8, ptr %0, i64 328
  %8 = load i64, ptr %7, align 8, !tbaa !14
  %9 = load i64, ptr %5, align 8, !tbaa !5
  switch i64 %9, label %330 [
    i64 0, label %10
    i64 1, label %152
    i64 2, label %153
  ]

10:                                               ; preds = %switch.edge
  %11 = getelementptr inbounds i8, ptr %1, i64 320
  store i64 1, ptr %11, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %1, i64 328
  store i64 %8, ptr %12, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %0, i64 336
  %14 = getelementptr inbounds i8, ptr %1, i64 336
  %15 = load <2 x i64>, ptr %13, align 8, !tbaa !15
  store <2 x i64> %15, ptr %14, align 8, !tbaa !15
  %16 = getelementptr inbounds i8, ptr %0, i64 360
  %17 = load i64, ptr %16, align 8, !tbaa !16
  %18 = getelementptr inbounds i8, ptr %1, i64 128
  %19 = add nsw i64 %8, 1
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %18, i64 noundef %19, ptr noundef %2)
  %20 = load i64, ptr %12, align 8, !tbaa !14
  %.not256298 = icmp slt i64 %20, 0
  br i1 %.not256298, label %._crit_edge302, label %.lr.ph301

.lr.ph301:                                        ; preds = %10
  %21 = getelementptr inbounds i8, ptr %1, i64 184
  br label %22

22:                                               ; preds = %.lr.ph301, %22
  %.0238299 = phi i64 [ 0, %.lr.ph301 ], [ %25, %22 ]
  %23 = load ptr, ptr %21, align 8, !tbaa !17
  %24 = getelementptr inbounds i64, ptr %23, i64 %.0238299
  store i64 0, ptr %24, align 8, !tbaa !15
  %25 = add nuw nsw i64 %.0238299, 1
  %26 = load i64, ptr %12, align 8, !tbaa !14
  %.not256.not = icmp slt i64 %.0238299, %26
  br i1 %.not256.not, label %22, label %._crit_edge302, !llvm.loop !18

._crit_edge302:                                   ; preds = %22, %10
  %.lcssa = phi i64 [ %20, %10 ], [ %26, %22 ]
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %4, i64 noundef %.lcssa, ptr noundef %2)
  %27 = load i64, ptr %12, align 8, !tbaa !14
  %.not257.not304 = icmp sgt i64 %27, 0
  br i1 %.not257.not304, label %.lr.ph307, label %.preheader262

.lr.ph307:                                        ; preds = %._crit_edge302
  %28 = getelementptr inbounds i8, ptr %4, i64 56
  br label %33

.preheader262:                                    ; preds = %33, %._crit_edge302
  %29 = phi i64 [ %27, %._crit_edge302 ], [ %37, %33 ]
  %.not258.not308 = icmp sgt i64 %17, 0
  br i1 %.not258.not308, label %.lr.ph311, label %.preheader

.lr.ph311:                                        ; preds = %.preheader262
  %30 = getelementptr inbounds i8, ptr %0, i64 120
  %31 = getelementptr inbounds i8, ptr %1, i64 184
  %xtraiter372 = and i64 %17, 1
  %32 = icmp eq i64 %17, 1
  br i1 %32, label %.preheader.loopexit.unr-lcssa, label %.lr.ph311.new

.lr.ph311.new:                                    ; preds = %.lr.ph311
  %unroll_iter376 = and i64 %17, 9223372036854775806
  br label %52

33:                                               ; preds = %.lr.ph307, %33
  %.1239305 = phi i64 [ 0, %.lr.ph307 ], [ %36, %33 ]
  %34 = load ptr, ptr %28, align 8, !tbaa !17
  %35 = getelementptr inbounds i64, ptr %34, i64 %.1239305
  store i64 0, ptr %35, align 8, !tbaa !15
  %36 = add nuw nsw i64 %.1239305, 1
  %37 = load i64, ptr %12, align 8, !tbaa !14
  %.not257.not = icmp slt i64 %36, %37
  br i1 %.not257.not, label %33, label %.preheader262, !llvm.loop !20

.preheader.loopexit.unr-lcssa.loopexit:           ; preds = %77
  %38 = shl nsw i64 %78, 4
  br label %.preheader.loopexit.unr-lcssa

.preheader.loopexit.unr-lcssa:                    ; preds = %.preheader.loopexit.unr-lcssa.loopexit, %.lr.ph311
  %.1.lcssa.ph = phi i64 [ poison, %.lr.ph311 ], [ %.1.1, %.preheader.loopexit.unr-lcssa.loopexit ]
  %.0310.unr = phi i64 [ 0, %.lr.ph311 ], [ %.1.1, %.preheader.loopexit.unr-lcssa.loopexit ]
  %.2240309.unr = phi i64 [ 0, %.lr.ph311 ], [ %38, %.preheader.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod374.not = icmp eq i64 %xtraiter372, 0
  br i1 %lcmp.mod374.not, label %.preheader.loopexit, label %.epil.preheader371

.epil.preheader371:                               ; preds = %.preheader.loopexit.unr-lcssa
  %39 = load ptr, ptr %30, align 8, !tbaa !17
  %40 = getelementptr inbounds i8, ptr %39, i64 %.2240309.unr
  %41 = load i64, ptr %40, align 8, !tbaa !15
  %42 = icmp sgt i64 %41, -1
  br i1 %42, label %43, label %.preheader.loopexit

43:                                               ; preds = %.epil.preheader371
  %44 = load ptr, ptr %31, align 8, !tbaa !17
  %45 = getelementptr inbounds i64, ptr %44, i64 %41
  %46 = getelementptr inbounds i8, ptr %45, i64 8
  %47 = load i64, ptr %46, align 8, !tbaa !15
  %48 = add nsw i64 %47, 1
  store i64 %48, ptr %46, align 8, !tbaa !15
  %49 = add nsw i64 %.0310.unr, 1
  br label %.preheader.loopexit

.preheader.loopexit:                              ; preds = %.epil.preheader371, %43, %.preheader.loopexit.unr-lcssa
  %.1.lcssa = phi i64 [ %.1.lcssa.ph, %.preheader.loopexit.unr-lcssa ], [ %49, %43 ], [ %.0310.unr, %.epil.preheader371 ]
  %.pre345 = load i64, ptr %12, align 8, !tbaa !14
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit, %.preheader262
  %50 = phi i64 [ %29, %.preheader262 ], [ %.pre345, %.preheader.loopexit ]
  %.0.lcssa = phi i64 [ 0, %.preheader262 ], [ %.1.lcssa, %.preheader.loopexit ]
  %.not259.not313 = icmp sgt i64 %50, 0
  br i1 %.not259.not313, label %.lr.ph315, label %._crit_edge316

.lr.ph315:                                        ; preds = %.preheader
  %51 = getelementptr inbounds i8, ptr %1, i64 184
  br label %79

52:                                               ; preds = %77, %.lr.ph311.new
  %.0310 = phi i64 [ 0, %.lr.ph311.new ], [ %.1.1, %77 ]
  %.2240309 = phi i64 [ 0, %.lr.ph311.new ], [ %78, %77 ]
  %niter377 = phi i64 [ 0, %.lr.ph311.new ], [ %niter377.next.1, %77 ]
  %53 = load ptr, ptr %30, align 8, !tbaa !17
  %.idx = shl nsw i64 %.2240309, 4
  %54 = getelementptr inbounds i8, ptr %53, i64 %.idx
  %55 = load i64, ptr %54, align 8, !tbaa !15
  %56 = icmp sgt i64 %55, -1
  br i1 %56, label %57, label %64

57:                                               ; preds = %52
  %58 = load ptr, ptr %31, align 8, !tbaa !17
  %59 = getelementptr inbounds i64, ptr %58, i64 %55
  %60 = getelementptr inbounds i8, ptr %59, i64 8
  %61 = load i64, ptr %60, align 8, !tbaa !15
  %62 = add nsw i64 %61, 1
  store i64 %62, ptr %60, align 8, !tbaa !15
  %63 = add nsw i64 %.0310, 1
  br label %64

64:                                               ; preds = %52, %57
  %.1 = phi i64 [ %63, %57 ], [ %.0310, %52 ]
  %65 = load ptr, ptr %30, align 8, !tbaa !17
  %66 = shl i64 %.2240309, 4
  %.idx.1 = or disjoint i64 %66, 16
  %67 = getelementptr inbounds i8, ptr %65, i64 %.idx.1
  %68 = load i64, ptr %67, align 8, !tbaa !15
  %69 = icmp sgt i64 %68, -1
  br i1 %69, label %70, label %77

70:                                               ; preds = %64
  %71 = load ptr, ptr %31, align 8, !tbaa !17
  %72 = getelementptr inbounds i64, ptr %71, i64 %68
  %73 = getelementptr inbounds i8, ptr %72, i64 8
  %74 = load i64, ptr %73, align 8, !tbaa !15
  %75 = add nsw i64 %74, 1
  store i64 %75, ptr %73, align 8, !tbaa !15
  %76 = add nsw i64 %.1, 1
  br label %77

77:                                               ; preds = %70, %64
  %.1.1 = phi i64 [ %76, %70 ], [ %.1, %64 ]
  %78 = add nuw nsw i64 %.2240309, 2
  %niter377.next.1 = add i64 %niter377, 2
  %niter377.ncmp.1 = icmp eq i64 %niter377.next.1, %unroll_iter376
  br i1 %niter377.ncmp.1, label %.preheader.loopexit.unr-lcssa.loopexit, label %52, !llvm.loop !21

79:                                               ; preds = %.lr.ph315, %79
  %.3314 = phi i64 [ 0, %.lr.ph315 ], [ %81, %79 ]
  %80 = load ptr, ptr %51, align 8, !tbaa !17
  %81 = add nuw nsw i64 %.3314, 1
  %82 = getelementptr inbounds i64, ptr %80, i64 %81
  %83 = load i64, ptr %82, align 8, !tbaa !15
  %84 = getelementptr inbounds i64, ptr %80, i64 %.3314
  %85 = load i64, ptr %84, align 8, !tbaa !15
  %86 = add nsw i64 %85, %83
  store i64 %86, ptr %82, align 8, !tbaa !15
  %87 = load i64, ptr %12, align 8, !tbaa !14
  %.not259.not = icmp slt i64 %81, %87
  br i1 %.not259.not, label %79, label %._crit_edge316, !llvm.loop !22

._crit_edge316:                                   ; preds = %79, %.preheader
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %1, i64 noundef %.0.lcssa, ptr noundef %2)
  %88 = getelementptr inbounds i8, ptr %1, i64 64
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %88, i64 noundef %.0.lcssa, ptr noundef %2)
  br i1 %.not258.not308, label %.lr.ph320, label %._crit_edge321

.lr.ph320:                                        ; preds = %._crit_edge316
  %89 = getelementptr inbounds i8, ptr %0, i64 120
  %90 = getelementptr inbounds i8, ptr %0, i64 56
  %91 = getelementptr inbounds i8, ptr %1, i64 56
  %92 = getelementptr inbounds i8, ptr %1, i64 184
  %93 = getelementptr inbounds i8, ptr %4, i64 56
  %94 = getelementptr inbounds i8, ptr %1, i64 120
  br label %95

95:                                               ; preds = %.lr.ph320, %136
  %.4318 = phi i64 [ 0, %.lr.ph320 ], [ %137, %136 ]
  %96 = load ptr, ptr %89, align 8, !tbaa !17
  %97 = shl nuw nsw i64 %.4318, 1
  %98 = getelementptr inbounds i64, ptr %96, i64 %97
  %99 = load i64, ptr %98, align 8, !tbaa !15
  %100 = icmp sgt i64 %99, -1
  br i1 %100, label %101, label %136

101:                                              ; preds = %95
  %102 = load ptr, ptr %90, align 8, !tbaa !17
  %103 = getelementptr inbounds double, ptr %102, i64 %.4318
  %104 = load double, ptr %103, align 8, !tbaa !23
  %105 = load ptr, ptr %91, align 8, !tbaa !17
  %106 = load ptr, ptr %92, align 8, !tbaa !17
  %107 = getelementptr inbounds i64, ptr %106, i64 %99
  %108 = load i64, ptr %107, align 8, !tbaa !15
  %109 = load ptr, ptr %93, align 8, !tbaa !17
  %110 = getelementptr inbounds i64, ptr %109, i64 %99
  %111 = load i64, ptr %110, align 8, !tbaa !15
  %112 = getelementptr double, ptr %105, i64 %108
  %113 = getelementptr double, ptr %112, i64 %111
  store double %104, ptr %113, align 8, !tbaa !23
  %114 = load ptr, ptr %89, align 8, !tbaa !17
  %115 = or disjoint i64 %97, 1
  %116 = getelementptr inbounds i64, ptr %114, i64 %115
  %117 = load i64, ptr %116, align 8, !tbaa !15
  %118 = load ptr, ptr %94, align 8, !tbaa !17
  %119 = load ptr, ptr %92, align 8, !tbaa !17
  %120 = getelementptr inbounds i64, ptr %114, i64 %97
  %121 = load i64, ptr %120, align 8, !tbaa !15
  %122 = getelementptr inbounds i64, ptr %119, i64 %121
  %123 = load i64, ptr %122, align 8, !tbaa !15
  %124 = load ptr, ptr %93, align 8, !tbaa !17
  %125 = getelementptr inbounds i64, ptr %124, i64 %121
  %126 = load i64, ptr %125, align 8, !tbaa !15
  %127 = getelementptr i64, ptr %118, i64 %123
  %128 = getelementptr i64, ptr %127, i64 %126
  store i64 %117, ptr %128, align 8, !tbaa !15
  %129 = load ptr, ptr %93, align 8, !tbaa !17
  %130 = load ptr, ptr %89, align 8, !tbaa !17
  %131 = getelementptr inbounds i64, ptr %130, i64 %97
  %132 = load i64, ptr %131, align 8, !tbaa !15
  %133 = getelementptr inbounds i64, ptr %129, i64 %132
  %134 = load i64, ptr %133, align 8, !tbaa !15
  %135 = add nsw i64 %134, 1
  store i64 %135, ptr %133, align 8, !tbaa !15
  br label %136

136:                                              ; preds = %95, %101
  %137 = add nuw nsw i64 %.4318, 1
  %exitcond336.not = icmp eq i64 %137, %17
  br i1 %exitcond336.not, label %._crit_edge321, label %95, !llvm.loop !25

._crit_edge321:                                   ; preds = %136, %._crit_edge316
  %138 = getelementptr inbounds i8, ptr %1, i64 184
  %139 = load ptr, ptr %138, align 8, !tbaa !17
  %140 = load i64, ptr %12, align 8, !tbaa !14
  %141 = getelementptr inbounds i64, ptr %139, i64 %140
  %142 = load i64, ptr %141, align 8, !tbaa !15
  %143 = getelementptr inbounds i8, ptr %1, i64 352
  store i64 %142, ptr %143, align 8, !tbaa !26
  %.not261.not322 = icmp sgt i64 %140, 0
  br i1 %.not261.not322, label %.lr.ph325, label %._crit_edge326

.lr.ph325:                                        ; preds = %._crit_edge321, %.lr.ph325
  %.5323 = phi i64 [ %147, %.lr.ph325 ], [ 0, %._crit_edge321 ]
  %144 = load ptr, ptr %138, align 8, !tbaa !17
  %145 = getelementptr inbounds i64, ptr %144, i64 %.5323
  %146 = load i64, ptr %145, align 8, !tbaa !15
  %147 = add nuw nsw i64 %.5323, 1
  %148 = getelementptr inbounds i64, ptr %144, i64 %147
  %149 = load i64, ptr %148, align 8, !tbaa !15
  %150 = sub nsw i64 %149, %146
  call void @_ZN11alglib_impl15tagsortmiddleirEPNS_9ae_vectorES1_llPNS_8ae_stateE(ptr noundef nonnull %88, ptr noundef nonnull %1, i64 noundef %146, i64 noundef %150, ptr noundef %2)
  %151 = load i64, ptr %12, align 8, !tbaa !14
  %.not261.not = icmp slt i64 %147, %151
  br i1 %.not261.not, label %.lr.ph325, label %._crit_edge326, !llvm.loop !27

._crit_edge326:                                   ; preds = %.lr.ph325, %._crit_edge321
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef nonnull %1, ptr noundef %2)
  br label %331

152:                                              ; preds = %switch.edge
  call void @_ZN11alglib_impl13sparsecopybufEPNS_12sparsematrixES1_PNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %1, ptr noundef %2)
  br label %331

153:                                              ; preds = %switch.edge
  %154 = getelementptr inbounds i8, ptr %0, i64 336
  %155 = load i64, ptr %154, align 8, !tbaa !28
  %156 = icmp eq i64 %8, %155
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %156, ptr noundef nonnull @.str.185, ptr noundef %2)
  %157 = getelementptr inbounds i8, ptr %1, i64 328
  %158 = load <2 x i64>, ptr %7, align 8, !tbaa !15
  store <2 x i64> %158, ptr %157, align 8, !tbaa !15
  %159 = getelementptr inbounds i8, ptr %1, i64 320
  store i64 1, ptr %159, align 8, !tbaa !5
  %160 = getelementptr inbounds i8, ptr %1, i64 128
  %161 = add i64 %8, 1
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %160, i64 noundef %161, ptr noundef %2)
  %162 = getelementptr inbounds i8, ptr %1, i64 184
  %163 = load ptr, ptr %162, align 8, !tbaa !17
  store i64 0, ptr %163, align 8, !tbaa !15
  %.not265 = icmp sgt i64 %8, 0
  br i1 %.not265, label %.lr.ph.preheader, label %._crit_edge277

.lr.ph.preheader:                                 ; preds = %153
  %xtraiter = and i64 %8, 3
  %164 = icmp ult i64 %8, 4
  br i1 %164, label %.lr.ph273.unr-lcssa, label %.lr.ph.preheader.new

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

.lr.ph273.unr-lcssa:                              ; preds = %.lr.ph, %.lr.ph.preheader
  %.6266.unr = phi i64 [ 1, %.lr.ph.preheader ], [ %181, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph273, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %.lr.ph273.unr-lcssa, %.lr.ph.epil
  %.6266.epil = phi i64 [ %167, %.lr.ph.epil ], [ %.6266.unr, %.lr.ph273.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %.lr.ph273.unr-lcssa ]
  %165 = load ptr, ptr %162, align 8, !tbaa !17
  %166 = getelementptr inbounds i64, ptr %165, i64 %.6266.epil
  store i64 1, ptr %166, align 8, !tbaa !15
  %167 = add nuw i64 %.6266.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 %.lr.ph273, label %.lr.ph.epil, !llvm.loop !29

.lr.ph273:                                        ; preds = %.lr.ph.epil, %.lr.ph273.unr-lcssa
  %168 = getelementptr inbounds i8, ptr %0, i64 248
  %169 = getelementptr inbounds i8, ptr %0, i64 312
  %.pre = load ptr, ptr %168, align 8, !tbaa !17
  br label %182

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.6266 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %181, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %170 = load ptr, ptr %162, align 8, !tbaa !17
  %171 = getelementptr inbounds i64, ptr %170, i64 %.6266
  store i64 1, ptr %171, align 8, !tbaa !15
  %172 = load ptr, ptr %162, align 8, !tbaa !17
  %173 = getelementptr i64, ptr %172, i64 %.6266
  %174 = getelementptr i8, ptr %173, i64 8
  store i64 1, ptr %174, align 8, !tbaa !15
  %175 = load ptr, ptr %162, align 8, !tbaa !17
  %176 = getelementptr i64, ptr %175, i64 %.6266
  %177 = getelementptr i8, ptr %176, i64 16
  store i64 1, ptr %177, align 8, !tbaa !15
  %178 = load ptr, ptr %162, align 8, !tbaa !17
  %179 = getelementptr i64, ptr %178, i64 %.6266
  %180 = getelementptr i8, ptr %179, i64 24
  store i64 1, ptr %180, align 8, !tbaa !15
  %181 = add nuw i64 %.6266, 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 %.lr.ph273.unr-lcssa, label %.lr.ph, !llvm.loop !31

182:                                              ; preds = %.lr.ph273, %._crit_edge
  %183 = phi ptr [ %.pre, %.lr.ph273 ], [ %201, %._crit_edge ]
  %.2272 = phi i64 [ 0, %.lr.ph273 ], [ %206, %._crit_edge ]
  %.7271 = phi i64 [ 0, %.lr.ph273 ], [ %187, %._crit_edge ]
  %184 = getelementptr inbounds i64, ptr %183, i64 %.7271
  %185 = load i64, ptr %184, align 8, !tbaa !15
  %186 = load ptr, ptr %162, align 8, !tbaa !17
  %187 = add nuw nsw i64 %.7271, 1
  %188 = getelementptr inbounds i64, ptr %186, i64 %187
  %189 = load i64, ptr %188, align 8, !tbaa !15
  %190 = add nsw i64 %189, %185
  store i64 %190, ptr %188, align 8, !tbaa !15
  %191 = load ptr, ptr %169, align 8, !tbaa !17
  %192 = getelementptr inbounds i64, ptr %191, i64 %.7271
  %193 = load i64, ptr %192, align 8, !tbaa !15
  %.not255.not267 = icmp sgt i64 %193, 0
  br i1 %.not255.not267, label %.lr.ph269.preheader, label %._crit_edge

.lr.ph269.preheader:                              ; preds = %182
  %194 = sub nsw i64 %.7271, %193
  br label %.lr.ph269

.lr.ph269:                                        ; preds = %.lr.ph269.preheader, %.lr.ph269
  %.0235268 = phi i64 [ %196, %.lr.ph269 ], [ %194, %.lr.ph269.preheader ]
  %195 = load ptr, ptr %162, align 8, !tbaa !17
  %196 = add nsw i64 %.0235268, 1
  %197 = getelementptr inbounds i64, ptr %195, i64 %196
  %198 = load i64, ptr %197, align 8, !tbaa !15
  %199 = add nsw i64 %198, 1
  store i64 %199, ptr %197, align 8, !tbaa !15
  %.not255.not = icmp slt i64 %196, %.7271
  br i1 %.not255.not, label %.lr.ph269, label %._crit_edge.loopexit, !llvm.loop !32

._crit_edge.loopexit:                             ; preds = %.lr.ph269
  %.pre337 = load ptr, ptr %169, align 8, !tbaa !17
  %.phi.trans.insert = getelementptr inbounds i64, ptr %.pre337, i64 %.7271
  %.pre338 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !15
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %182
  %200 = phi i64 [ %.pre338, %._crit_edge.loopexit ], [ %193, %182 ]
  %201 = load ptr, ptr %168, align 8, !tbaa !17
  %202 = getelementptr inbounds i64, ptr %201, i64 %.7271
  %203 = load i64, ptr %202, align 8, !tbaa !15
  %204 = add i64 %.2272, 1
  %205 = add i64 %204, %203
  %206 = add nsw i64 %205, %200
  %exitcond329.not = icmp eq i64 %187, %8
  br i1 %exitcond329.not, label %.lr.ph276.preheader, label %182, !llvm.loop !33

.lr.ph276.preheader:                              ; preds = %._crit_edge
  %xtraiter361 = and i64 %8, 1
  %207 = icmp eq i64 %8, 1
  br i1 %207, label %._crit_edge277.loopexit.unr-lcssa, label %.lr.ph276.preheader.new

.lr.ph276.preheader.new:                          ; preds = %.lr.ph276.preheader
  %unroll_iter364 = and i64 %8, 9223372036854775806
  br label %.lr.ph276

.lr.ph276:                                        ; preds = %.lr.ph276, %.lr.ph276.preheader.new
  %.8275 = phi i64 [ 0, %.lr.ph276.preheader.new ], [ %216, %.lr.ph276 ]
  %niter365 = phi i64 [ 0, %.lr.ph276.preheader.new ], [ %niter365.next.1, %.lr.ph276 ]
  %208 = load ptr, ptr %162, align 8, !tbaa !17
  %209 = or disjoint i64 %.8275, 1
  %210 = getelementptr inbounds i64, ptr %208, i64 %209
  %211 = load i64, ptr %210, align 8, !tbaa !15
  %212 = getelementptr inbounds i64, ptr %208, i64 %.8275
  %213 = load i64, ptr %212, align 8, !tbaa !15
  %214 = add nsw i64 %213, %211
  store i64 %214, ptr %210, align 8, !tbaa !15
  %215 = load ptr, ptr %162, align 8, !tbaa !17
  %216 = add nuw nsw i64 %.8275, 2
  %217 = getelementptr inbounds i64, ptr %215, i64 %216
  %218 = load i64, ptr %217, align 8, !tbaa !15
  %219 = getelementptr inbounds i64, ptr %215, i64 %209
  %220 = load i64, ptr %219, align 8, !tbaa !15
  %221 = add nsw i64 %220, %218
  store i64 %221, ptr %217, align 8, !tbaa !15
  %niter365.next.1 = add i64 %niter365, 2
  %niter365.ncmp.1 = icmp eq i64 %niter365.next.1, %unroll_iter364
  br i1 %niter365.ncmp.1, label %._crit_edge277.loopexit.unr-lcssa, label %.lr.ph276, !llvm.loop !34

._crit_edge277.loopexit.unr-lcssa:                ; preds = %.lr.ph276, %.lr.ph276.preheader
  %.8275.unr = phi i64 [ 0, %.lr.ph276.preheader ], [ %216, %.lr.ph276 ]
  %lcmp.mod363.not = icmp eq i64 %xtraiter361, 0
  br i1 %lcmp.mod363.not, label %._crit_edge277, label %.lr.ph276.epil

.lr.ph276.epil:                                   ; preds = %._crit_edge277.loopexit.unr-lcssa
  %222 = load ptr, ptr %162, align 8, !tbaa !17
  %223 = getelementptr i64, ptr %222, i64 %.8275.unr
  %224 = getelementptr i8, ptr %223, i64 8
  %225 = load i64, ptr %224, align 8, !tbaa !15
  %226 = getelementptr inbounds i64, ptr %222, i64 %.8275.unr
  %227 = load i64, ptr %226, align 8, !tbaa !15
  %228 = add nsw i64 %227, %225
  store i64 %228, ptr %224, align 8, !tbaa !15
  br label %._crit_edge277

._crit_edge277:                                   ; preds = %.lr.ph276.epil, %._crit_edge277.loopexit.unr-lcssa, %153
  %.2.lcssa351 = phi i64 [ 0, %153 ], [ %206, %._crit_edge277.loopexit.unr-lcssa ], [ %206, %.lr.ph276.epil ]
  %229 = load ptr, ptr %162, align 8, !tbaa !17
  %230 = getelementptr inbounds i64, ptr %229, i64 %8
  %231 = load i64, ptr %230, align 8, !tbaa !15
  %232 = getelementptr inbounds i8, ptr %1, i64 352
  store i64 %231, ptr %232, align 8, !tbaa !26
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %4, i64 noundef %8, ptr noundef %2)
  br i1 %.not265, label %.lr.ph281, label %._crit_edge297.critedge

.lr.ph281:                                        ; preds = %._crit_edge277
  %233 = getelementptr inbounds i8, ptr %4, i64 56
  %xtraiter366 = and i64 %8, 3
  %234 = icmp ult i64 %8, 4
  br i1 %234, label %._crit_edge282.unr-lcssa, label %.lr.ph281.new

.lr.ph281.new:                                    ; preds = %.lr.ph281
  %unroll_iter369 = and i64 %8, 9223372036854775804
  br label %235

235:                                              ; preds = %235, %.lr.ph281.new
  %.9279 = phi i64 [ 0, %.lr.ph281.new ], [ %247, %235 ]
  %niter370 = phi i64 [ 0, %.lr.ph281.new ], [ %niter370.next.3, %235 ]
  %236 = load ptr, ptr %233, align 8, !tbaa !17
  %237 = getelementptr inbounds i64, ptr %236, i64 %.9279
  store i64 0, ptr %237, align 8, !tbaa !15
  %238 = or disjoint i64 %.9279, 1
  %239 = load ptr, ptr %233, align 8, !tbaa !17
  %240 = getelementptr inbounds i64, ptr %239, i64 %238
  store i64 0, ptr %240, align 8, !tbaa !15
  %241 = or disjoint i64 %.9279, 2
  %242 = load ptr, ptr %233, align 8, !tbaa !17
  %243 = getelementptr inbounds i64, ptr %242, i64 %241
  store i64 0, ptr %243, align 8, !tbaa !15
  %244 = or disjoint i64 %.9279, 3
  %245 = load ptr, ptr %233, align 8, !tbaa !17
  %246 = getelementptr inbounds i64, ptr %245, i64 %244
  store i64 0, ptr %246, align 8, !tbaa !15
  %247 = add nuw nsw i64 %.9279, 4
  %niter370.next.3 = add i64 %niter370, 4
  %niter370.ncmp.3 = icmp eq i64 %niter370.next.3, %unroll_iter369
  br i1 %niter370.ncmp.3, label %._crit_edge282.unr-lcssa, label %235, !llvm.loop !35

._crit_edge282.unr-lcssa:                         ; preds = %235, %.lr.ph281
  %.9279.unr = phi i64 [ 0, %.lr.ph281 ], [ %247, %235 ]
  %lcmp.mod368.not = icmp eq i64 %xtraiter366, 0
  br i1 %lcmp.mod368.not, label %._crit_edge282, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge282.unr-lcssa, %.epil.preheader
  %.9279.epil = phi i64 [ %250, %.epil.preheader ], [ %.9279.unr, %._crit_edge282.unr-lcssa ]
  %epil.iter367 = phi i64 [ %epil.iter367.next, %.epil.preheader ], [ 0, %._crit_edge282.unr-lcssa ]
  %248 = load ptr, ptr %233, align 8, !tbaa !17
  %249 = getelementptr inbounds i64, ptr %248, i64 %.9279.epil
  store i64 0, ptr %249, align 8, !tbaa !15
  %250 = add nuw nsw i64 %.9279.epil, 1
  %epil.iter367.next = add i64 %epil.iter367, 1
  %epil.iter367.cmp.not = icmp eq i64 %epil.iter367.next, %xtraiter366
  br i1 %epil.iter367.cmp.not, label %._crit_edge282, label %.epil.preheader, !llvm.loop !36

._crit_edge282:                                   ; preds = %.epil.preheader, %._crit_edge282.unr-lcssa
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1, i64 noundef %.2.lcssa351, ptr noundef %2)
  %251 = getelementptr inbounds i8, ptr %1, i64 64
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %251, i64 noundef %.2.lcssa351, ptr noundef %2)
  br i1 %.not265, label %.lr.ph296, label %._crit_edge297

.lr.ph296:                                        ; preds = %._crit_edge282
  %252 = getelementptr inbounds i8, ptr %0, i64 184
  %253 = getelementptr inbounds i8, ptr %4, i64 56
  %254 = getelementptr inbounds i8, ptr %0, i64 248
  %255 = getelementptr inbounds i8, ptr %0, i64 56
  %256 = getelementptr inbounds i8, ptr %1, i64 56
  %257 = getelementptr inbounds i8, ptr %1, i64 120
  %258 = getelementptr inbounds i8, ptr %0, i64 312
  br label %259

259:                                              ; preds = %.lr.ph296, %._crit_edge292
  %.10294 = phi i64 [ 0, %.lr.ph296 ], [ %328, %._crit_edge292 ]
  %260 = load ptr, ptr %252, align 8, !tbaa !17
  %261 = getelementptr inbounds i64, ptr %260, i64 %.10294
  %262 = load i64, ptr %261, align 8, !tbaa !15
  %263 = load ptr, ptr %162, align 8, !tbaa !17
  %264 = getelementptr inbounds i64, ptr %263, i64 %.10294
  %265 = load i64, ptr %264, align 8, !tbaa !15
  %266 = load ptr, ptr %253, align 8, !tbaa !17
  %267 = getelementptr inbounds i64, ptr %266, i64 %.10294
  %268 = load i64, ptr %267, align 8, !tbaa !15
  %269 = add nsw i64 %268, %265
  %270 = load ptr, ptr %254, align 8, !tbaa !17
  %271 = getelementptr inbounds i64, ptr %270, i64 %.10294
  %272 = load i64, ptr %271, align 8, !tbaa !15
  %.not253283 = icmp slt i64 %272, 0
  br i1 %.not253283, label %._crit_edge287, label %.lr.ph286

.lr.ph286:                                        ; preds = %259, %.lr.ph286
  %.1236284 = phi i64 [ %287, %.lr.ph286 ], [ 0, %259 ]
  %273 = load ptr, ptr %255, align 8, !tbaa !17
  %274 = getelementptr double, ptr %273, i64 %262
  %275 = getelementptr double, ptr %274, i64 %.1236284
  %276 = load double, ptr %275, align 8, !tbaa !23
  %277 = load ptr, ptr %256, align 8, !tbaa !17
  %278 = add nsw i64 %269, %.1236284
  %279 = getelementptr inbounds double, ptr %277, i64 %278
  store double %276, ptr %279, align 8, !tbaa !23
  %280 = load ptr, ptr %254, align 8, !tbaa !17
  %281 = getelementptr inbounds i64, ptr %280, i64 %.10294
  %282 = load i64, ptr %281, align 8, !tbaa !15
  %283 = add nuw i64 %.1236284, %.10294
  %284 = sub i64 %283, %282
  %285 = load ptr, ptr %257, align 8, !tbaa !17
  %286 = getelementptr inbounds i64, ptr %285, i64 %278
  store i64 %284, ptr %286, align 8, !tbaa !15
  %287 = add nuw i64 %.1236284, 1
  %exitcond332.not = icmp eq i64 %.1236284, %272
  br i1 %exitcond332.not, label %._crit_edge287.loopexit, label %.lr.ph286, !llvm.loop !37

._crit_edge287.loopexit:                          ; preds = %.lr.ph286
  %.pre339 = load ptr, ptr %253, align 8, !tbaa !17
  %.phi.trans.insert340 = getelementptr inbounds i64, ptr %.pre339, i64 %.10294
  %.pre341 = load i64, ptr %.phi.trans.insert340, align 8, !tbaa !15
  %.pre342 = load ptr, ptr %254, align 8, !tbaa !17
  %.phi.trans.insert343 = getelementptr inbounds i64, ptr %.pre342, i64 %.10294
  %.pre344 = load i64, ptr %.phi.trans.insert343, align 8, !tbaa !15
  br label %._crit_edge287

._crit_edge287:                                   ; preds = %._crit_edge287.loopexit, %259
  %288 = phi i64 [ %.pre344, %._crit_edge287.loopexit ], [ %272, %259 ]
  %289 = phi i64 [ %.pre341, %._crit_edge287.loopexit ], [ %268, %259 ]
  %290 = phi ptr [ %.pre339, %._crit_edge287.loopexit ], [ %266, %259 ]
  %291 = getelementptr inbounds i64, ptr %290, i64 %.10294
  %292 = add i64 %289, 1
  %293 = add i64 %292, %288
  store i64 %293, ptr %291, align 8, !tbaa !15
  %294 = load ptr, ptr %252, align 8, !tbaa !17
  %295 = getelementptr inbounds i64, ptr %294, i64 %.10294
  %296 = load i64, ptr %295, align 8, !tbaa !15
  %297 = load ptr, ptr %254, align 8, !tbaa !17
  %298 = getelementptr inbounds i64, ptr %297, i64 %.10294
  %299 = load i64, ptr %298, align 8, !tbaa !15
  %300 = load ptr, ptr %258, align 8, !tbaa !17
  %301 = getelementptr inbounds i64, ptr %300, i64 %.10294
  %302 = load i64, ptr %301, align 8, !tbaa !15
  %.not254.not288 = icmp sgt i64 %302, 0
  br i1 %.not254.not288, label %.lr.ph291, label %._crit_edge292

.lr.ph291:                                        ; preds = %._crit_edge287
  %303 = sub nsw i64 %.10294, %302
  br label %304

304:                                              ; preds = %.lr.ph291, %304
  %.2237289 = phi i64 [ 0, %.lr.ph291 ], [ %327, %304 ]
  %305 = load ptr, ptr %162, align 8, !tbaa !17
  %306 = add nsw i64 %.2237289, %303
  %307 = getelementptr inbounds i64, ptr %305, i64 %306
  %308 = load i64, ptr %307, align 8, !tbaa !15
  %309 = load ptr, ptr %253, align 8, !tbaa !17
  %310 = getelementptr inbounds i64, ptr %309, i64 %306
  %311 = load i64, ptr %310, align 8, !tbaa !15
  %312 = add nsw i64 %311, %308
  %313 = load ptr, ptr %255, align 8, !tbaa !17
  %314 = getelementptr double, ptr %313, i64 %296
  %315 = getelementptr double, ptr %314, i64 %299
  %316 = getelementptr i8, ptr %315, i64 8
  %317 = getelementptr double, ptr %316, i64 %.2237289
  %318 = load double, ptr %317, align 8, !tbaa !23
  %319 = load ptr, ptr %256, align 8, !tbaa !17
  %320 = getelementptr inbounds double, ptr %319, i64 %312
  store double %318, ptr %320, align 8, !tbaa !23
  %321 = load ptr, ptr %257, align 8, !tbaa !17
  %322 = getelementptr inbounds i64, ptr %321, i64 %312
  store i64 %.10294, ptr %322, align 8, !tbaa !15
  %323 = load ptr, ptr %253, align 8, !tbaa !17
  %324 = getelementptr inbounds i64, ptr %323, i64 %306
  %325 = load i64, ptr %324, align 8, !tbaa !15
  %326 = add nsw i64 %325, 1
  store i64 %326, ptr %324, align 8, !tbaa !15
  %327 = add nuw nsw i64 %.2237289, 1
  %exitcond333.not = icmp eq i64 %327, %302
  br i1 %exitcond333.not, label %._crit_edge292, label %304, !llvm.loop !38

._crit_edge292:                                   ; preds = %304, %._crit_edge287
  %328 = add nuw nsw i64 %.10294, 1
  %exitcond334.not = icmp eq i64 %328, %8
  br i1 %exitcond334.not, label %._crit_edge297, label %259, !llvm.loop !39

._crit_edge297.critedge:                          ; preds = %._crit_edge277
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %1, i64 noundef %.2.lcssa351, ptr noundef %2)
  %329 = getelementptr inbounds i8, ptr %1, i64 64
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %329, i64 noundef %.2.lcssa351, ptr noundef %2)
  br label %._crit_edge297

._crit_edge297:                                   ; preds = %._crit_edge292, %._crit_edge297.critedge, %._crit_edge282
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %1, ptr noundef %2)
  br label %331

330:                                              ; preds = %switch.edge
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.186, ptr noundef %2)
  br label %331

331:                                              ; preds = %330, %._crit_edge297, %152, %._crit_edge326
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %2)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3) #4
  ret void
}

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

declare void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

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

declare void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef, i64 noundef, i64 noundef, ptr noundef, i1 noundef zeroext) local_unnamed_addr #2

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl15tagsortmiddleirEPNS_9ae_vectorES1_llPNS_8ae_stateE(ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #2 = { "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 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, !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 = !{!8, !8, i64 0}
!16 = !{!6, !8, i64 360}
!17 = !{!9, !9, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = !{!24, !24, i64 0}
!24 = !{!"double", !9, i64 0}
!25 = distinct !{!25, !19}
!26 = !{!6, !8, i64 352}
!27 = distinct !{!27, !19}
!28 = !{!6, !8, i64 336}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.unroll.disable"}
!31 = distinct !{!31, !19}
!32 = distinct !{!32, !19}
!33 = distinct !{!33, !19}
!34 = distinct !{!34, !19}
!35 = distinct !{!35, !19}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !19}
!38 = distinct !{!38, !19}
!39 = distinct !{!39, !19}


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