; 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.181 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.182 = external hidden unnamed_addr constant [40 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
define dso_local void @_ZN11alglib_impl18sparseconverttocrsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1) #3 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca %"struct.alglib_impl::ae_frame", align 8
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca %"struct.alglib_impl::ae_vector", align 8
  %10 = alloca %"struct.alglib_impl::ae_vector", align 8
  %11 = alloca %"struct.alglib_impl::ae_vector", align 8
  %12 = alloca %"struct.alglib_impl::ae_vector", align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %5) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %9) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %10) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr %11) #4
  call void @llvm.lifetime.start.p0(i64 64, 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
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #4
  %18 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %18, ptr noundef %5)
  call void @llvm.memset.p0.i64(ptr align 8 %9, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %10, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %11, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr align 8 %12, i8 0, i64 64, i1 false)
  %19 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %9, i64 noundef 0, i64 noundef 3, ptr noundef %19, i1 noundef zeroext true)
  %20 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %10, i64 noundef 0, i64 noundef 2, ptr noundef %20, i1 noundef zeroext true)
  %21 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %11, i64 noundef 0, i64 noundef 2, ptr noundef %21, i1 noundef zeroext true)
  %22 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef %12, i64 noundef 0, i64 noundef 2, ptr noundef %22, i1 noundef zeroext true)
  %23 = load ptr, ptr %3, align 8, !tbaa !5
  %24 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %23, i32 0, i32 6
  %25 = load i64, ptr %24, align 8, !tbaa !9
  store i64 %25, ptr %6, align 8, !tbaa !15
  %26 = load ptr, ptr %3, align 8, !tbaa !5
  %27 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %26, i32 0, i32 5
  %28 = load i64, ptr %27, align 8, !tbaa !16
  %29 = icmp eq i64 %28, 0
  br i1 %29, label %30, label %335

30:                                               ; preds = %2
  %31 = load ptr, ptr %3, align 8, !tbaa !5
  %32 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %31, i32 0, i32 5
  store i64 1, ptr %32, align 8, !tbaa !16
  %33 = load ptr, ptr %3, align 8, !tbaa !5
  %34 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %33, i32 0, i32 10
  %35 = load i64, ptr %34, align 8, !tbaa !17
  store i64 %35, ptr %14, align 8, !tbaa !15
  %36 = load ptr, ptr %3, align 8, !tbaa !5
  %37 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %36, i32 0, i32 0
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef %37, ptr noundef %9)
  %38 = load ptr, ptr %3, align 8, !tbaa !5
  %39 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %38, i32 0, i32 1
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef %39, ptr noundef %10)
  store i64 0, ptr %13, align 8, !tbaa !15
  %40 = load ptr, ptr %3, align 8, !tbaa !5
  %41 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %40, i32 0, i32 2
  %42 = load ptr, ptr %3, align 8, !tbaa !5
  %43 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %42, i32 0, i32 6
  %44 = load i64, ptr %43, align 8, !tbaa !9
  %45 = add nsw i64 %44, 1
  %46 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %41, i64 noundef %45, ptr noundef %46)
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %47

47:                                               ; preds = %60, %30
  %48 = load i64, ptr %7, align 8, !tbaa !15
  %49 = load ptr, ptr %3, align 8, !tbaa !5
  %50 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %49, i32 0, i32 6
  %51 = load i64, ptr %50, align 8, !tbaa !9
  %52 = icmp sle i64 %48, %51
  br i1 %52, label %53, label %63

53:                                               ; preds = %47
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %54, i32 0, i32 2
  %56 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %55, i32 0, i32 4
  %57 = load ptr, ptr %56, align 8, !tbaa !18
  %58 = load i64, ptr %7, align 8, !tbaa !15
  %59 = getelementptr inbounds i64, ptr %57, i64 %58
  store i64 0, ptr %59, align 8, !tbaa !15
  br label %60

60:                                               ; preds = %53
  %61 = load i64, ptr %7, align 8, !tbaa !15
  %62 = add nsw i64 %61, 1
  store i64 %62, ptr %7, align 8, !tbaa !15
  br label %47, !llvm.loop !19

63:                                               ; preds = %47
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %64

64:                                               ; preds = %107, %63
  %65 = load i64, ptr %7, align 8, !tbaa !15
  %66 = load i64, ptr %14, align 8, !tbaa !15
  %67 = sub nsw i64 %66, 1
  %68 = icmp sle i64 %65, %67
  br i1 %68, label %69, label %110

69:                                               ; preds = %64
  %70 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %71 = load ptr, ptr %70, align 8, !tbaa !18
  %72 = load i64, ptr %7, align 8, !tbaa !15
  %73 = mul nsw i64 2, %72
  %74 = getelementptr inbounds i64, ptr %71, i64 %73
  %75 = load i64, ptr %74, align 8, !tbaa !15
  %76 = icmp sge i64 %75, 0
  br i1 %76, label %77, label %106

77:                                               ; preds = %69
  %78 = load ptr, ptr %3, 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 !18
  %82 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %83 = load ptr, ptr %82, align 8, !tbaa !18
  %84 = load i64, ptr %7, align 8, !tbaa !15
  %85 = mul nsw i64 2, %84
  %86 = getelementptr inbounds i64, ptr %83, i64 %85
  %87 = load i64, ptr %86, align 8, !tbaa !15
  %88 = add nsw i64 %87, 1
  %89 = getelementptr inbounds i64, ptr %81, i64 %88
  %90 = load i64, ptr %89, align 8, !tbaa !15
  %91 = add nsw i64 %90, 1
  %92 = load ptr, ptr %3, align 8, !tbaa !5
  %93 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %92, i32 0, i32 2
  %94 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %93, i32 0, i32 4
  %95 = load ptr, ptr %94, align 8, !tbaa !18
  %96 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %97 = load ptr, ptr %96, align 8, !tbaa !18
  %98 = load i64, ptr %7, align 8, !tbaa !15
  %99 = mul nsw i64 2, %98
  %100 = getelementptr inbounds i64, ptr %97, i64 %99
  %101 = load i64, ptr %100, align 8, !tbaa !15
  %102 = add nsw i64 %101, 1
  %103 = getelementptr inbounds i64, ptr %95, i64 %102
  store i64 %91, ptr %103, align 8, !tbaa !15
  %104 = load i64, ptr %13, align 8, !tbaa !15
  %105 = add nsw i64 %104, 1
  store i64 %105, ptr %13, align 8, !tbaa !15
  br label %106

106:                                              ; preds = %77, %69
  br label %107

107:                                              ; preds = %106
  %108 = load i64, ptr %7, align 8, !tbaa !15
  %109 = add nsw i64 %108, 1
  store i64 %109, ptr %7, align 8, !tbaa !15
  br label %64, !llvm.loop !21

110:                                              ; preds = %64
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %111

111:                                              ; preds = %142, %110
  %112 = load i64, ptr %7, align 8, !tbaa !15
  %113 = load ptr, ptr %3, align 8, !tbaa !5
  %114 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %113, i32 0, i32 6
  %115 = load i64, ptr %114, align 8, !tbaa !9
  %116 = sub nsw i64 %115, 1
  %117 = icmp sle i64 %112, %116
  br i1 %117, label %118, label %145

118:                                              ; preds = %111
  %119 = load ptr, ptr %3, align 8, !tbaa !5
  %120 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %119, i32 0, i32 2
  %121 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %120, i32 0, i32 4
  %122 = load ptr, ptr %121, align 8, !tbaa !18
  %123 = load i64, ptr %7, align 8, !tbaa !15
  %124 = add nsw i64 %123, 1
  %125 = getelementptr inbounds i64, ptr %122, i64 %124
  %126 = load i64, ptr %125, align 8, !tbaa !15
  %127 = load ptr, ptr %3, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %127, i32 0, i32 2
  %129 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %128, i32 0, i32 4
  %130 = load ptr, ptr %129, align 8, !tbaa !18
  %131 = load i64, ptr %7, align 8, !tbaa !15
  %132 = getelementptr inbounds i64, ptr %130, i64 %131
  %133 = load i64, ptr %132, align 8, !tbaa !15
  %134 = add nsw i64 %126, %133
  %135 = load ptr, ptr %3, align 8, !tbaa !5
  %136 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %135, i32 0, i32 2
  %137 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %136, i32 0, i32 4
  %138 = load ptr, ptr %137, align 8, !tbaa !18
  %139 = load i64, ptr %7, align 8, !tbaa !15
  %140 = add nsw i64 %139, 1
  %141 = getelementptr inbounds i64, ptr %138, i64 %140
  store i64 %134, ptr %141, align 8, !tbaa !15
  br label %142

142:                                              ; preds = %118
  %143 = load i64, ptr %7, align 8, !tbaa !15
  %144 = add nsw i64 %143, 1
  store i64 %144, ptr %7, align 8, !tbaa !15
  br label %111, !llvm.loop !22

145:                                              ; preds = %111
  %146 = load ptr, ptr %3, align 8, !tbaa !5
  %147 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %146, i32 0, i32 2
  %148 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %147, i32 0, i32 4
  %149 = load ptr, ptr %148, align 8, !tbaa !18
  %150 = load ptr, ptr %3, align 8, !tbaa !5
  %151 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %150, i32 0, i32 6
  %152 = load i64, ptr %151, align 8, !tbaa !9
  %153 = getelementptr inbounds i64, ptr %149, i64 %152
  %154 = load i64, ptr %153, align 8, !tbaa !15
  %155 = load ptr, ptr %3, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %155, i32 0, i32 9
  store i64 %154, ptr %156, align 8, !tbaa !23
  %157 = load ptr, ptr %3, align 8, !tbaa !5
  %158 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %157, i32 0, i32 6
  %159 = load i64, ptr %158, align 8, !tbaa !9
  %160 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %11, i64 noundef %159, ptr noundef %160)
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %161

161:                                              ; preds = %173, %145
  %162 = load i64, ptr %7, align 8, !tbaa !15
  %163 = load ptr, ptr %3, 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 !9
  %166 = sub nsw i64 %165, 1
  %167 = icmp sle i64 %162, %166
  br i1 %167, label %168, label %176

168:                                              ; preds = %161
  %169 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %170 = load ptr, ptr %169, align 8, !tbaa !18
  %171 = load i64, ptr %7, align 8, !tbaa !15
  %172 = getelementptr inbounds i64, ptr %170, i64 %171
  store i64 0, ptr %172, align 8, !tbaa !15
  br label %173

173:                                              ; preds = %168
  %174 = load i64, ptr %7, align 8, !tbaa !15
  %175 = add nsw i64 %174, 1
  store i64 %175, ptr %7, align 8, !tbaa !15
  br label %161, !llvm.loop !24

176:                                              ; preds = %161
  %177 = load ptr, ptr %3, align 8, !tbaa !5
  %178 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %177, i32 0, i32 0
  %179 = load i64, ptr %13, align 8, !tbaa !15
  %180 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %178, i64 noundef %179, ptr noundef %180)
  %181 = load ptr, ptr %3, align 8, !tbaa !5
  %182 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %181, i32 0, i32 1
  %183 = load i64, ptr %13, align 8, !tbaa !15
  %184 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %182, i64 noundef %183, ptr noundef %184)
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %185

185:                                              ; preds = %288, %176
  %186 = load i64, ptr %7, align 8, !tbaa !15
  %187 = load i64, ptr %14, align 8, !tbaa !15
  %188 = sub nsw i64 %187, 1
  %189 = icmp sle i64 %186, %188
  br i1 %189, label %190, label %291

190:                                              ; preds = %185
  %191 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %192 = load ptr, ptr %191, align 8, !tbaa !18
  %193 = load i64, ptr %7, align 8, !tbaa !15
  %194 = mul nsw i64 2, %193
  %195 = getelementptr inbounds i64, ptr %192, i64 %194
  %196 = load i64, ptr %195, align 8, !tbaa !15
  %197 = icmp sge i64 %196, 0
  br i1 %197, label %198, label %287

198:                                              ; preds = %190
  %199 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %9, i32 0, i32 4
  %200 = load ptr, ptr %199, align 8, !tbaa !18
  %201 = load i64, ptr %7, align 8, !tbaa !15
  %202 = getelementptr inbounds double, ptr %200, i64 %201
  %203 = load double, ptr %202, align 8, !tbaa !25
  %204 = load ptr, ptr %3, align 8, !tbaa !5
  %205 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %204, i32 0, i32 0
  %206 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %205, i32 0, i32 4
  %207 = load ptr, ptr %206, align 8, !tbaa !18
  %208 = load ptr, ptr %3, align 8, !tbaa !5
  %209 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %208, i32 0, i32 2
  %210 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %209, i32 0, i32 4
  %211 = load ptr, ptr %210, align 8, !tbaa !18
  %212 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %213 = load ptr, ptr %212, align 8, !tbaa !18
  %214 = load i64, ptr %7, align 8, !tbaa !15
  %215 = mul nsw i64 2, %214
  %216 = getelementptr inbounds i64, ptr %213, i64 %215
  %217 = load i64, ptr %216, align 8, !tbaa !15
  %218 = getelementptr inbounds i64, ptr %211, i64 %217
  %219 = load i64, ptr %218, align 8, !tbaa !15
  %220 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %221 = load ptr, ptr %220, align 8, !tbaa !18
  %222 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %223 = load ptr, ptr %222, align 8, !tbaa !18
  %224 = load i64, ptr %7, align 8, !tbaa !15
  %225 = mul nsw i64 2, %224
  %226 = getelementptr inbounds i64, ptr %223, i64 %225
  %227 = load i64, ptr %226, align 8, !tbaa !15
  %228 = getelementptr inbounds i64, ptr %221, i64 %227
  %229 = load i64, ptr %228, align 8, !tbaa !15
  %230 = add nsw i64 %219, %229
  %231 = getelementptr inbounds double, ptr %207, i64 %230
  store double %203, ptr %231, align 8, !tbaa !25
  %232 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %233 = load ptr, ptr %232, align 8, !tbaa !18
  %234 = load i64, ptr %7, align 8, !tbaa !15
  %235 = mul nsw i64 2, %234
  %236 = add nsw i64 %235, 1
  %237 = getelementptr inbounds i64, ptr %233, i64 %236
  %238 = load i64, ptr %237, align 8, !tbaa !15
  %239 = load ptr, ptr %3, align 8, !tbaa !5
  %240 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %239, i32 0, i32 1
  %241 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %240, i32 0, i32 4
  %242 = load ptr, ptr %241, align 8, !tbaa !18
  %243 = load ptr, ptr %3, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %243, i32 0, i32 2
  %245 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %244, i32 0, i32 4
  %246 = load ptr, ptr %245, align 8, !tbaa !18
  %247 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %248 = load ptr, ptr %247, align 8, !tbaa !18
  %249 = load i64, ptr %7, align 8, !tbaa !15
  %250 = mul nsw i64 2, %249
  %251 = getelementptr inbounds i64, ptr %248, i64 %250
  %252 = load i64, ptr %251, align 8, !tbaa !15
  %253 = getelementptr inbounds i64, ptr %246, i64 %252
  %254 = load i64, ptr %253, align 8, !tbaa !15
  %255 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %256 = load ptr, ptr %255, align 8, !tbaa !18
  %257 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %258 = load ptr, ptr %257, align 8, !tbaa !18
  %259 = load i64, ptr %7, align 8, !tbaa !15
  %260 = mul nsw i64 2, %259
  %261 = getelementptr inbounds i64, ptr %258, i64 %260
  %262 = load i64, ptr %261, align 8, !tbaa !15
  %263 = getelementptr inbounds i64, ptr %256, i64 %262
  %264 = load i64, ptr %263, align 8, !tbaa !15
  %265 = add nsw i64 %254, %264
  %266 = getelementptr inbounds i64, ptr %242, i64 %265
  store i64 %238, ptr %266, align 8, !tbaa !15
  %267 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %268 = load ptr, ptr %267, align 8, !tbaa !18
  %269 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %270 = load ptr, ptr %269, align 8, !tbaa !18
  %271 = load i64, ptr %7, align 8, !tbaa !15
  %272 = mul nsw i64 2, %271
  %273 = getelementptr inbounds i64, ptr %270, i64 %272
  %274 = load i64, ptr %273, align 8, !tbaa !15
  %275 = getelementptr inbounds i64, ptr %268, i64 %274
  %276 = load i64, ptr %275, align 8, !tbaa !15
  %277 = add nsw i64 %276, 1
  %278 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %279 = load ptr, ptr %278, align 8, !tbaa !18
  %280 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %10, i32 0, i32 4
  %281 = load ptr, ptr %280, align 8, !tbaa !18
  %282 = load i64, ptr %7, align 8, !tbaa !15
  %283 = mul nsw i64 2, %282
  %284 = getelementptr inbounds i64, ptr %281, i64 %283
  %285 = load i64, ptr %284, align 8, !tbaa !15
  %286 = getelementptr inbounds i64, ptr %279, i64 %285
  store i64 %277, ptr %286, align 8, !tbaa !15
  br label %287

287:                                              ; preds = %198, %190
  br label %288

288:                                              ; preds = %287
  %289 = load i64, ptr %7, align 8, !tbaa !15
  %290 = add nsw i64 %289, 1
  store i64 %290, ptr %7, align 8, !tbaa !15
  br label %185, !llvm.loop !27

291:                                              ; preds = %185
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %292

292:                                              ; preds = %328, %291
  %293 = load i64, ptr %7, align 8, !tbaa !15
  %294 = load ptr, ptr %3, align 8, !tbaa !5
  %295 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %294, i32 0, i32 6
  %296 = load i64, ptr %295, align 8, !tbaa !9
  %297 = sub nsw i64 %296, 1
  %298 = icmp sle i64 %293, %297
  br i1 %298, label %299, label %331

299:                                              ; preds = %292
  %300 = load ptr, ptr %3, align 8, !tbaa !5
  %301 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %300, i32 0, i32 1
  %302 = load ptr, ptr %3, align 8, !tbaa !5
  %303 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %302, i32 0, i32 0
  %304 = load ptr, ptr %3, align 8, !tbaa !5
  %305 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %304, i32 0, i32 2
  %306 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %305, i32 0, i32 4
  %307 = load ptr, ptr %306, align 8, !tbaa !18
  %308 = load i64, ptr %7, align 8, !tbaa !15
  %309 = getelementptr inbounds i64, ptr %307, i64 %308
  %310 = load i64, ptr %309, align 8, !tbaa !15
  %311 = load ptr, ptr %3, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %311, i32 0, i32 2
  %313 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %312, i32 0, i32 4
  %314 = load ptr, ptr %313, align 8, !tbaa !18
  %315 = load i64, ptr %7, align 8, !tbaa !15
  %316 = add nsw i64 %315, 1
  %317 = getelementptr inbounds i64, ptr %314, i64 %316
  %318 = load i64, ptr %317, align 8, !tbaa !15
  %319 = load ptr, ptr %3, align 8, !tbaa !5
  %320 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %319, i32 0, i32 2
  %321 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %320, i32 0, i32 4
  %322 = load ptr, ptr %321, align 8, !tbaa !18
  %323 = load i64, ptr %7, align 8, !tbaa !15
  %324 = getelementptr inbounds i64, ptr %322, i64 %323
  %325 = load i64, ptr %324, align 8, !tbaa !15
  %326 = sub nsw i64 %318, %325
  %327 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl15tagsortmiddleirEPNS_9ae_vectorES1_llPNS_8ae_stateE(ptr noundef %301, ptr noundef %303, i64 noundef %310, i64 noundef %326, ptr noundef %327)
  br label %328

328:                                              ; preds = %299
  %329 = load i64, ptr %7, align 8, !tbaa !15
  %330 = add nsw i64 %329, 1
  store i64 %330, ptr %7, align 8, !tbaa !15
  br label %292, !llvm.loop !28

331:                                              ; preds = %292
  %332 = load ptr, ptr %3, align 8, !tbaa !5
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %332, ptr noundef %333)
  %334 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %334)
  store i32 1, ptr %17, align 4
  br label %739

335:                                              ; preds = %2
  %336 = load ptr, ptr %3, align 8, !tbaa !5
  %337 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %336, i32 0, i32 5
  %338 = load i64, ptr %337, align 8, !tbaa !16
  %339 = icmp eq i64 %338, 1
  br i1 %339, label %340, label %342

340:                                              ; preds = %335
  %341 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %341)
  store i32 1, ptr %17, align 4
  br label %739

342:                                              ; preds = %335
  %343 = load ptr, ptr %3, align 8, !tbaa !5
  %344 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %343, i32 0, i32 5
  %345 = load i64, ptr %344, align 8, !tbaa !16
  %346 = icmp eq i64 %345, 2
  br i1 %346, label %347, label %736

347:                                              ; preds = %342
  %348 = load ptr, ptr %3, align 8, !tbaa !5
  %349 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %348, i32 0, i32 6
  %350 = load i64, ptr %349, align 8, !tbaa !9
  %351 = load ptr, ptr %3, align 8, !tbaa !5
  %352 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %351, i32 0, i32 7
  %353 = load i64, ptr %352, align 8, !tbaa !29
  %354 = icmp eq i64 %350, %353
  %355 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %354, ptr noundef @.str.181, ptr noundef %355)
  %356 = load ptr, ptr %3, align 8, !tbaa !5
  %357 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %356, i32 0, i32 5
  store i64 1, ptr %357, align 8, !tbaa !16
  %358 = load ptr, ptr %3, align 8, !tbaa !5
  %359 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %358, i32 0, i32 0
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef %359, ptr noundef %9)
  %360 = load ptr, ptr %3, align 8, !tbaa !5
  %361 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %360, i32 0, i32 1
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef %361, ptr noundef %10)
  %362 = load ptr, ptr %3, align 8, !tbaa !5
  %363 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %362, i32 0, i32 2
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef %363, ptr noundef %12)
  %364 = load ptr, ptr %3, align 8, !tbaa !5
  %365 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %364, i32 0, i32 2
  %366 = load i64, ptr %6, align 8, !tbaa !15
  %367 = add nsw i64 %366, 1
  %368 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %365, i64 noundef %367, ptr noundef %368)
  %369 = load ptr, ptr %3, align 8, !tbaa !5
  %370 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %369, i32 0, i32 2
  %371 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %370, i32 0, i32 4
  %372 = load ptr, ptr %371, align 8, !tbaa !18
  %373 = getelementptr inbounds i64, ptr %372, i64 0
  store i64 0, ptr %373, align 8, !tbaa !15
  store i64 1, ptr %7, align 8, !tbaa !15
  br label %374

374:                                              ; preds = %385, %347
  %375 = load i64, ptr %7, align 8, !tbaa !15
  %376 = load i64, ptr %6, align 8, !tbaa !15
  %377 = icmp sle i64 %375, %376
  br i1 %377, label %378, label %388

378:                                              ; preds = %374
  %379 = load ptr, ptr %3, align 8, !tbaa !5
  %380 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %379, i32 0, i32 2
  %381 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %380, i32 0, i32 4
  %382 = load ptr, ptr %381, align 8, !tbaa !18
  %383 = load i64, ptr %7, align 8, !tbaa !15
  %384 = getelementptr inbounds i64, ptr %382, i64 %383
  store i64 1, ptr %384, align 8, !tbaa !15
  br label %385

385:                                              ; preds = %378
  %386 = load i64, ptr %7, align 8, !tbaa !15
  %387 = add nsw i64 %386, 1
  store i64 %387, ptr %7, align 8, !tbaa !15
  br label %374, !llvm.loop !30

388:                                              ; preds = %374
  store i64 0, ptr %13, align 8, !tbaa !15
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %389

389:                                              ; preds = %471, %388
  %390 = load i64, ptr %7, align 8, !tbaa !15
  %391 = load i64, ptr %6, align 8, !tbaa !15
  %392 = sub nsw i64 %391, 1
  %393 = icmp sle i64 %390, %392
  br i1 %393, label %394, label %474

394:                                              ; preds = %389
  %395 = load ptr, ptr %3, align 8, !tbaa !5
  %396 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %395, i32 0, i32 3
  %397 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %396, i32 0, i32 4
  %398 = load ptr, ptr %397, align 8, !tbaa !18
  %399 = load i64, ptr %7, align 8, !tbaa !15
  %400 = getelementptr inbounds i64, ptr %398, i64 %399
  %401 = load i64, ptr %400, align 8, !tbaa !15
  %402 = load ptr, ptr %3, align 8, !tbaa !5
  %403 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %402, i32 0, i32 2
  %404 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %403, i32 0, i32 4
  %405 = load ptr, ptr %404, align 8, !tbaa !18
  %406 = load i64, ptr %7, align 8, !tbaa !15
  %407 = add nsw i64 %406, 1
  %408 = getelementptr inbounds i64, ptr %405, i64 %407
  %409 = load i64, ptr %408, align 8, !tbaa !15
  %410 = add nsw i64 %401, %409
  %411 = load ptr, ptr %3, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %411, i32 0, i32 2
  %413 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %412, i32 0, i32 4
  %414 = load ptr, ptr %413, align 8, !tbaa !18
  %415 = load i64, ptr %7, align 8, !tbaa !15
  %416 = add nsw i64 %415, 1
  %417 = getelementptr inbounds i64, ptr %414, i64 %416
  store i64 %410, ptr %417, align 8, !tbaa !15
  %418 = load i64, ptr %7, align 8, !tbaa !15
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %419, i32 0, i32 4
  %421 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %420, i32 0, i32 4
  %422 = load ptr, ptr %421, align 8, !tbaa !18
  %423 = load i64, ptr %7, align 8, !tbaa !15
  %424 = getelementptr inbounds i64, ptr %422, i64 %423
  %425 = load i64, ptr %424, align 8, !tbaa !15
  %426 = sub nsw i64 %418, %425
  store i64 %426, ptr %8, align 8, !tbaa !15
  br label %427

427:                                              ; preds = %449, %394
  %428 = load i64, ptr %8, align 8, !tbaa !15
  %429 = load i64, ptr %7, align 8, !tbaa !15
  %430 = sub nsw i64 %429, 1
  %431 = icmp sle i64 %428, %430
  br i1 %431, label %432, label %452

432:                                              ; preds = %427
  %433 = load ptr, ptr %3, align 8, !tbaa !5
  %434 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %433, i32 0, i32 2
  %435 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %434, i32 0, i32 4
  %436 = load ptr, ptr %435, align 8, !tbaa !18
  %437 = load i64, ptr %8, align 8, !tbaa !15
  %438 = add nsw i64 %437, 1
  %439 = getelementptr inbounds i64, ptr %436, i64 %438
  %440 = load i64, ptr %439, align 8, !tbaa !15
  %441 = add nsw i64 %440, 1
  %442 = load ptr, ptr %3, align 8, !tbaa !5
  %443 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %442, i32 0, i32 2
  %444 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %443, i32 0, i32 4
  %445 = load ptr, ptr %444, align 8, !tbaa !18
  %446 = load i64, ptr %8, align 8, !tbaa !15
  %447 = add nsw i64 %446, 1
  %448 = getelementptr inbounds i64, ptr %445, i64 %447
  store i64 %441, ptr %448, align 8, !tbaa !15
  br label %449

449:                                              ; preds = %432
  %450 = load i64, ptr %8, align 8, !tbaa !15
  %451 = add nsw i64 %450, 1
  store i64 %451, ptr %8, align 8, !tbaa !15
  br label %427, !llvm.loop !31

452:                                              ; preds = %427
  %453 = load i64, ptr %13, align 8, !tbaa !15
  %454 = load ptr, ptr %3, align 8, !tbaa !5
  %455 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %454, i32 0, i32 3
  %456 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %455, i32 0, i32 4
  %457 = load ptr, ptr %456, align 8, !tbaa !18
  %458 = load i64, ptr %7, align 8, !tbaa !15
  %459 = getelementptr inbounds i64, ptr %457, i64 %458
  %460 = load i64, ptr %459, align 8, !tbaa !15
  %461 = add nsw i64 %453, %460
  %462 = add nsw i64 %461, 1
  %463 = load ptr, ptr %3, align 8, !tbaa !5
  %464 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %463, i32 0, i32 4
  %465 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %464, i32 0, i32 4
  %466 = load ptr, ptr %465, align 8, !tbaa !18
  %467 = load i64, ptr %7, align 8, !tbaa !15
  %468 = getelementptr inbounds i64, ptr %466, i64 %467
  %469 = load i64, ptr %468, align 8, !tbaa !15
  %470 = add nsw i64 %462, %469
  store i64 %470, ptr %13, align 8, !tbaa !15
  br label %471

471:                                              ; preds = %452
  %472 = load i64, ptr %7, align 8, !tbaa !15
  %473 = add nsw i64 %472, 1
  store i64 %473, ptr %7, align 8, !tbaa !15
  br label %389, !llvm.loop !32

474:                                              ; preds = %389
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %475

475:                                              ; preds = %506, %474
  %476 = load i64, ptr %7, align 8, !tbaa !15
  %477 = load ptr, ptr %3, align 8, !tbaa !5
  %478 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %477, i32 0, i32 6
  %479 = load i64, ptr %478, align 8, !tbaa !9
  %480 = sub nsw i64 %479, 1
  %481 = icmp sle i64 %476, %480
  br i1 %481, label %482, label %509

482:                                              ; preds = %475
  %483 = load ptr, ptr %3, align 8, !tbaa !5
  %484 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %483, i32 0, i32 2
  %485 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %484, i32 0, i32 4
  %486 = load ptr, ptr %485, align 8, !tbaa !18
  %487 = load i64, ptr %7, align 8, !tbaa !15
  %488 = add nsw i64 %487, 1
  %489 = getelementptr inbounds i64, ptr %486, i64 %488
  %490 = load i64, ptr %489, align 8, !tbaa !15
  %491 = load ptr, ptr %3, align 8, !tbaa !5
  %492 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %491, i32 0, i32 2
  %493 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %492, i32 0, i32 4
  %494 = load ptr, ptr %493, align 8, !tbaa !18
  %495 = load i64, ptr %7, align 8, !tbaa !15
  %496 = getelementptr inbounds i64, ptr %494, i64 %495
  %497 = load i64, ptr %496, align 8, !tbaa !15
  %498 = add nsw i64 %490, %497
  %499 = load ptr, ptr %3, align 8, !tbaa !5
  %500 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %499, i32 0, i32 2
  %501 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %500, i32 0, i32 4
  %502 = load ptr, ptr %501, align 8, !tbaa !18
  %503 = load i64, ptr %7, align 8, !tbaa !15
  %504 = add nsw i64 %503, 1
  %505 = getelementptr inbounds i64, ptr %502, i64 %504
  store i64 %498, ptr %505, align 8, !tbaa !15
  br label %506

506:                                              ; preds = %482
  %507 = load i64, ptr %7, align 8, !tbaa !15
  %508 = add nsw i64 %507, 1
  store i64 %508, ptr %7, align 8, !tbaa !15
  br label %475, !llvm.loop !33

509:                                              ; preds = %475
  %510 = load ptr, ptr %3, align 8, !tbaa !5
  %511 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %510, i32 0, i32 2
  %512 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %511, i32 0, i32 4
  %513 = load ptr, ptr %512, align 8, !tbaa !18
  %514 = load ptr, ptr %3, align 8, !tbaa !5
  %515 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %514, i32 0, i32 6
  %516 = load i64, ptr %515, align 8, !tbaa !9
  %517 = getelementptr inbounds i64, ptr %513, i64 %516
  %518 = load i64, ptr %517, align 8, !tbaa !15
  %519 = load ptr, ptr %3, align 8, !tbaa !5
  %520 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %519, i32 0, i32 9
  store i64 %518, ptr %520, align 8, !tbaa !23
  %521 = load i64, ptr %6, align 8, !tbaa !15
  %522 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %11, i64 noundef %521, ptr noundef %522)
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %523

523:                                              ; preds = %533, %509
  %524 = load i64, ptr %7, align 8, !tbaa !15
  %525 = load i64, ptr %6, align 8, !tbaa !15
  %526 = sub nsw i64 %525, 1
  %527 = icmp sle i64 %524, %526
  br i1 %527, label %528, label %536

528:                                              ; preds = %523
  %529 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %530 = load ptr, ptr %529, align 8, !tbaa !18
  %531 = load i64, ptr %7, align 8, !tbaa !15
  %532 = getelementptr inbounds i64, ptr %530, i64 %531
  store i64 0, ptr %532, align 8, !tbaa !15
  br label %533

533:                                              ; preds = %528
  %534 = load i64, ptr %7, align 8, !tbaa !15
  %535 = add nsw i64 %534, 1
  store i64 %535, ptr %7, align 8, !tbaa !15
  br label %523, !llvm.loop !34

536:                                              ; preds = %523
  %537 = load ptr, ptr %3, align 8, !tbaa !5
  %538 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %537, i32 0, i32 0
  %539 = load i64, ptr %13, align 8, !tbaa !15
  %540 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %538, i64 noundef %539, ptr noundef %540)
  %541 = load ptr, ptr %3, align 8, !tbaa !5
  %542 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %541, i32 0, i32 1
  %543 = load i64, ptr %13, align 8, !tbaa !15
  %544 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %542, i64 noundef %543, ptr noundef %544)
  store i64 0, ptr %7, align 8, !tbaa !15
  br label %545

545:                                              ; preds = %729, %536
  %546 = load i64, ptr %7, align 8, !tbaa !15
  %547 = load i64, ptr %6, align 8, !tbaa !15
  %548 = sub nsw i64 %547, 1
  %549 = icmp sle i64 %546, %548
  br i1 %549, label %550, label %732

550:                                              ; preds = %545
  %551 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %12, i32 0, i32 4
  %552 = load ptr, ptr %551, align 8, !tbaa !18
  %553 = load i64, ptr %7, align 8, !tbaa !15
  %554 = getelementptr inbounds i64, ptr %552, i64 %553
  %555 = load i64, ptr %554, align 8, !tbaa !15
  store i64 %555, ptr %15, align 8, !tbaa !15
  %556 = load ptr, ptr %3, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %556, i32 0, i32 2
  %558 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %557, i32 0, i32 4
  %559 = load ptr, ptr %558, align 8, !tbaa !18
  %560 = load i64, ptr %7, align 8, !tbaa !15
  %561 = getelementptr inbounds i64, ptr %559, i64 %560
  %562 = load i64, ptr %561, align 8, !tbaa !15
  %563 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %564 = load ptr, ptr %563, align 8, !tbaa !18
  %565 = load i64, ptr %7, align 8, !tbaa !15
  %566 = getelementptr inbounds i64, ptr %564, i64 %565
  %567 = load i64, ptr %566, align 8, !tbaa !15
  %568 = add nsw i64 %562, %567
  store i64 %568, ptr %16, align 8, !tbaa !15
  %569 = load ptr, ptr %3, align 8, !tbaa !5
  %570 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %569, i32 0, i32 3
  %571 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %570, i32 0, i32 4
  %572 = load ptr, ptr %571, align 8, !tbaa !18
  %573 = load i64, ptr %7, align 8, !tbaa !15
  %574 = getelementptr inbounds i64, ptr %572, i64 %573
  %575 = load i64, ptr %574, align 8, !tbaa !15
  %576 = add nsw i64 %575, 1
  store i64 %576, ptr %14, align 8, !tbaa !15
  store i64 0, ptr %8, align 8, !tbaa !15
  br label %577

577:                                              ; preds = %617, %550
  %578 = load i64, ptr %8, align 8, !tbaa !15
  %579 = load i64, ptr %14, align 8, !tbaa !15
  %580 = sub nsw i64 %579, 1
  %581 = icmp sle i64 %578, %580
  br i1 %581, label %582, label %620

582:                                              ; preds = %577
  %583 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %9, i32 0, i32 4
  %584 = load ptr, ptr %583, align 8, !tbaa !18
  %585 = load i64, ptr %15, align 8, !tbaa !15
  %586 = load i64, ptr %8, align 8, !tbaa !15
  %587 = add nsw i64 %585, %586
  %588 = getelementptr inbounds double, ptr %584, i64 %587
  %589 = load double, ptr %588, align 8, !tbaa !25
  %590 = load ptr, ptr %3, align 8, !tbaa !5
  %591 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %590, i32 0, i32 0
  %592 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %591, i32 0, i32 4
  %593 = load ptr, ptr %592, align 8, !tbaa !18
  %594 = load i64, ptr %16, align 8, !tbaa !15
  %595 = load i64, ptr %8, align 8, !tbaa !15
  %596 = add nsw i64 %594, %595
  %597 = getelementptr inbounds double, ptr %593, i64 %596
  store double %589, ptr %597, align 8, !tbaa !25
  %598 = load i64, ptr %7, align 8, !tbaa !15
  %599 = load ptr, ptr %3, align 8, !tbaa !5
  %600 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %599, i32 0, i32 3
  %601 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %600, i32 0, i32 4
  %602 = load ptr, ptr %601, align 8, !tbaa !18
  %603 = load i64, ptr %7, align 8, !tbaa !15
  %604 = getelementptr inbounds i64, ptr %602, i64 %603
  %605 = load i64, ptr %604, align 8, !tbaa !15
  %606 = sub nsw i64 %598, %605
  %607 = load i64, ptr %8, align 8, !tbaa !15
  %608 = add nsw i64 %606, %607
  %609 = load ptr, ptr %3, align 8, !tbaa !5
  %610 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %609, i32 0, i32 1
  %611 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %610, i32 0, i32 4
  %612 = load ptr, ptr %611, align 8, !tbaa !18
  %613 = load i64, ptr %16, align 8, !tbaa !15
  %614 = load i64, ptr %8, align 8, !tbaa !15
  %615 = add nsw i64 %613, %614
  %616 = getelementptr inbounds i64, ptr %612, i64 %615
  store i64 %608, ptr %616, align 8, !tbaa !15
  br label %617

617:                                              ; preds = %582
  %618 = load i64, ptr %8, align 8, !tbaa !15
  %619 = add nsw i64 %618, 1
  store i64 %619, ptr %8, align 8, !tbaa !15
  br label %577, !llvm.loop !35

620:                                              ; preds = %577
  %621 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %622 = load ptr, ptr %621, align 8, !tbaa !18
  %623 = load i64, ptr %7, align 8, !tbaa !15
  %624 = getelementptr inbounds i64, ptr %622, i64 %623
  %625 = load i64, ptr %624, align 8, !tbaa !15
  %626 = load ptr, ptr %3, align 8, !tbaa !5
  %627 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %626, i32 0, i32 3
  %628 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %627, i32 0, i32 4
  %629 = load ptr, ptr %628, align 8, !tbaa !18
  %630 = load i64, ptr %7, align 8, !tbaa !15
  %631 = getelementptr inbounds i64, ptr %629, i64 %630
  %632 = load i64, ptr %631, align 8, !tbaa !15
  %633 = add nsw i64 %625, %632
  %634 = add nsw i64 %633, 1
  %635 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %636 = load ptr, ptr %635, align 8, !tbaa !18
  %637 = load i64, ptr %7, align 8, !tbaa !15
  %638 = getelementptr inbounds i64, ptr %636, i64 %637
  store i64 %634, ptr %638, align 8, !tbaa !15
  %639 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %12, i32 0, i32 4
  %640 = load ptr, ptr %639, align 8, !tbaa !18
  %641 = load i64, ptr %7, align 8, !tbaa !15
  %642 = getelementptr inbounds i64, ptr %640, i64 %641
  %643 = load i64, ptr %642, align 8, !tbaa !15
  %644 = load ptr, ptr %3, align 8, !tbaa !5
  %645 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %644, i32 0, i32 3
  %646 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %645, i32 0, i32 4
  %647 = load ptr, ptr %646, align 8, !tbaa !18
  %648 = load i64, ptr %7, align 8, !tbaa !15
  %649 = getelementptr inbounds i64, ptr %647, i64 %648
  %650 = load i64, ptr %649, align 8, !tbaa !15
  %651 = add nsw i64 %643, %650
  %652 = add nsw i64 %651, 1
  store i64 %652, ptr %15, align 8, !tbaa !15
  %653 = load ptr, ptr %3, align 8, !tbaa !5
  %654 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %653, i32 0, i32 4
  %655 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %654, i32 0, i32 4
  %656 = load ptr, ptr %655, align 8, !tbaa !18
  %657 = load i64, ptr %7, align 8, !tbaa !15
  %658 = getelementptr inbounds i64, ptr %656, i64 %657
  %659 = load i64, ptr %658, align 8, !tbaa !15
  store i64 %659, ptr %14, align 8, !tbaa !15
  store i64 0, ptr %8, align 8, !tbaa !15
  br label %660

660:                                              ; preds = %725, %620
  %661 = load i64, ptr %8, align 8, !tbaa !15
  %662 = load i64, ptr %14, align 8, !tbaa !15
  %663 = sub nsw i64 %662, 1
  %664 = icmp sle i64 %661, %663
  br i1 %664, label %665, label %728

665:                                              ; preds = %660
  %666 = load ptr, ptr %3, align 8, !tbaa !5
  %667 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %666, i32 0, i32 2
  %668 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %667, i32 0, i32 4
  %669 = load ptr, ptr %668, align 8, !tbaa !18
  %670 = load i64, ptr %7, align 8, !tbaa !15
  %671 = load i64, ptr %14, align 8, !tbaa !15
  %672 = sub nsw i64 %670, %671
  %673 = load i64, ptr %8, align 8, !tbaa !15
  %674 = add nsw i64 %672, %673
  %675 = getelementptr inbounds i64, ptr %669, i64 %674
  %676 = load i64, ptr %675, align 8, !tbaa !15
  %677 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %678 = load ptr, ptr %677, align 8, !tbaa !18
  %679 = load i64, ptr %7, align 8, !tbaa !15
  %680 = load i64, ptr %14, align 8, !tbaa !15
  %681 = sub nsw i64 %679, %680
  %682 = load i64, ptr %8, align 8, !tbaa !15
  %683 = add nsw i64 %681, %682
  %684 = getelementptr inbounds i64, ptr %678, i64 %683
  %685 = load i64, ptr %684, align 8, !tbaa !15
  %686 = add nsw i64 %676, %685
  store i64 %686, ptr %16, align 8, !tbaa !15
  %687 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %9, i32 0, i32 4
  %688 = load ptr, ptr %687, align 8, !tbaa !18
  %689 = load i64, ptr %15, align 8, !tbaa !15
  %690 = load i64, ptr %8, align 8, !tbaa !15
  %691 = add nsw i64 %689, %690
  %692 = getelementptr inbounds double, ptr %688, i64 %691
  %693 = load double, ptr %692, align 8, !tbaa !25
  %694 = load ptr, ptr %3, align 8, !tbaa !5
  %695 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %694, i32 0, i32 0
  %696 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %695, i32 0, i32 4
  %697 = load ptr, ptr %696, align 8, !tbaa !18
  %698 = load i64, ptr %16, align 8, !tbaa !15
  %699 = getelementptr inbounds double, ptr %697, i64 %698
  store double %693, ptr %699, align 8, !tbaa !25
  %700 = load i64, ptr %7, align 8, !tbaa !15
  %701 = load ptr, ptr %3, align 8, !tbaa !5
  %702 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %701, i32 0, i32 1
  %703 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %702, i32 0, i32 4
  %704 = load ptr, ptr %703, align 8, !tbaa !18
  %705 = load i64, ptr %16, align 8, !tbaa !15
  %706 = getelementptr inbounds i64, ptr %704, i64 %705
  store i64 %700, ptr %706, align 8, !tbaa !15
  %707 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %708 = load ptr, ptr %707, align 8, !tbaa !18
  %709 = load i64, ptr %7, align 8, !tbaa !15
  %710 = load i64, ptr %14, align 8, !tbaa !15
  %711 = sub nsw i64 %709, %710
  %712 = load i64, ptr %8, align 8, !tbaa !15
  %713 = add nsw i64 %711, %712
  %714 = getelementptr inbounds i64, ptr %708, i64 %713
  %715 = load i64, ptr %714, align 8, !tbaa !15
  %716 = add nsw i64 %715, 1
  %717 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %11, i32 0, i32 4
  %718 = load ptr, ptr %717, align 8, !tbaa !18
  %719 = load i64, ptr %7, align 8, !tbaa !15
  %720 = load i64, ptr %14, align 8, !tbaa !15
  %721 = sub nsw i64 %719, %720
  %722 = load i64, ptr %8, align 8, !tbaa !15
  %723 = add nsw i64 %721, %722
  %724 = getelementptr inbounds i64, ptr %718, i64 %723
  store i64 %716, ptr %724, align 8, !tbaa !15
  br label %725

725:                                              ; preds = %665
  %726 = load i64, ptr %8, align 8, !tbaa !15
  %727 = add nsw i64 %726, 1
  store i64 %727, ptr %8, align 8, !tbaa !15
  br label %660, !llvm.loop !36

728:                                              ; preds = %660
  br label %729

729:                                              ; preds = %728
  %730 = load i64, ptr %7, align 8, !tbaa !15
  %731 = add nsw i64 %730, 1
  store i64 %731, ptr %7, align 8, !tbaa !15
  br label %545, !llvm.loop !37

732:                                              ; preds = %545
  %733 = load ptr, ptr %3, align 8, !tbaa !5
  %734 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %733, ptr noundef %734)
  %735 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %735)
  store i32 1, ptr %17, align 4
  br label %739

736:                                              ; preds = %342
  %737 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.182, ptr noundef %737)
  %738 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %738)
  store i32 0, ptr %17, align 4
  br label %739

739:                                              ; preds = %736, %732, %340, %331
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  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 64, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %10) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr %9) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  call void @llvm.lifetime.end.p0(i64 32, ptr %5) #4
  %740 = load i32, ptr %17, align 4
  switch i32 %740, label %742 [
    i32 0, label %741
    i32 1, label %741
  ]

741:                                              ; preds = %739, %739
  ret void

742:                                              ; preds = %739
  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_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef, ptr noundef) #2

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 328}
!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 = !{!12, !12, i64 0}
!16 = !{!10, !12, i64 320}
!17 = !{!10, !12, i64 360}
!18 = !{!7, !7, i64 0}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = !{!10, !12, i64 352}
!24 = distinct !{!24, !20}
!25 = !{!26, !26, i64 0}
!26 = !{!"double", !7, i64 0}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = !{!10, !12, i64 336}
!30 = distinct !{!30, !20}
!31 = distinct !{!31, !20}
!32 = distinct !{!32, !20}
!33 = distinct !{!33, !20}
!34 = distinct !{!34, !20}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}


; 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.181 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.182 = external hidden unnamed_addr constant [40 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
define dso_local void @_ZN11alglib_impl18sparseconverttocrsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1) local_unnamed_addr #3 {
  %3 = alloca %"struct.alglib_impl::ae_frame", align 8
  %4 = alloca %"struct.alglib_impl::ae_vector", align 8
  %5 = alloca %"struct.alglib_impl::ae_vector", align 8
  %6 = alloca %"struct.alglib_impl::ae_vector", align 8
  %7 = 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 @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %6) #4
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %7) #4
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %1, 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 @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %5, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %6, i8 0, i64 64, i1 false)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(64) %7, 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 3, ptr noundef %1, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %5, i64 noundef 0, i64 noundef 2, ptr noundef %1, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %6, i64 noundef 0, i64 noundef 2, ptr noundef %1, i1 noundef zeroext true)
  call void @_ZN11alglib_impl14ae_vector_initEPNS_9ae_vectorEllPNS_8ae_stateEb(ptr noundef nonnull %7, i64 noundef 0, i64 noundef 2, ptr noundef %1, i1 noundef zeroext true)
  %8 = getelementptr inbounds i8, ptr %0, i64 328
  %9 = load i64, ptr %8, align 8, !tbaa !5
  %10 = getelementptr inbounds i8, ptr %0, i64 320
  %11 = load i64, ptr %10, align 8, !tbaa !14
  switch i64 %11, label %309 [
    i64 0, label %12
    i64 1, label %310
    i64 2, label %149
  ]

12:                                               ; preds = %2
  store i64 1, ptr %10, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %0, i64 360
  %14 = load i64, ptr %13, align 8, !tbaa !15
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef nonnull %0, ptr noundef nonnull %4)
  %15 = getelementptr inbounds i8, ptr %0, i64 64
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef nonnull %15, ptr noundef nonnull %5)
  %16 = getelementptr inbounds i8, ptr %0, i64 128
  %17 = load i64, ptr %8, align 8, !tbaa !5
  %18 = add nsw i64 %17, 1
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %16, i64 noundef %18, ptr noundef %1)
  %19 = load i64, ptr %8, align 8, !tbaa !5
  %.not229274 = icmp slt i64 %19, 0
  br i1 %.not229274, label %.preheader236, label %.lr.ph277

.lr.ph277:                                        ; preds = %12
  %20 = getelementptr inbounds i8, ptr %0, i64 184
  br label %25

.preheader236:                                    ; preds = %25, %12
  %21 = phi i64 [ %19, %12 ], [ %29, %25 ]
  %.not230.not278 = icmp sgt i64 %14, 0
  br i1 %.not230.not278, label %.lr.ph281, label %.preheader235

.lr.ph281:                                        ; preds = %.preheader236
  %22 = getelementptr inbounds i8, ptr %5, i64 56
  %23 = getelementptr inbounds i8, ptr %0, i64 184
  %xtraiter340 = and i64 %14, 1
  %24 = icmp eq i64 %14, 1
  br i1 %24, label %.preheader235.loopexit.unr-lcssa, label %.lr.ph281.new

.lr.ph281.new:                                    ; preds = %.lr.ph281
  %unroll_iter344 = and i64 %14, 9223372036854775806
  br label %44

25:                                               ; preds = %.lr.ph277, %25
  %.0213275 = phi i64 [ 0, %.lr.ph277 ], [ %28, %25 ]
  %26 = load ptr, ptr %20, align 8, !tbaa !16
  %27 = getelementptr inbounds i64, ptr %26, i64 %.0213275
  store i64 0, ptr %27, align 8, !tbaa !17
  %28 = add nuw nsw i64 %.0213275, 1
  %29 = load i64, ptr %8, align 8, !tbaa !5
  %.not229.not = icmp slt i64 %.0213275, %29
  br i1 %.not229.not, label %25, label %.preheader236, !llvm.loop !18

.preheader235.loopexit.unr-lcssa.loopexit:        ; preds = %69
  %30 = shl nsw i64 %70, 4
  br label %.preheader235.loopexit.unr-lcssa

.preheader235.loopexit.unr-lcssa:                 ; preds = %.preheader235.loopexit.unr-lcssa.loopexit, %.lr.ph281
  %.1.lcssa.ph = phi i64 [ poison, %.lr.ph281 ], [ %.1.1, %.preheader235.loopexit.unr-lcssa.loopexit ]
  %.0280.unr = phi i64 [ 0, %.lr.ph281 ], [ %.1.1, %.preheader235.loopexit.unr-lcssa.loopexit ]
  %.1214279.unr = phi i64 [ 0, %.lr.ph281 ], [ %30, %.preheader235.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod342.not = icmp eq i64 %xtraiter340, 0
  br i1 %lcmp.mod342.not, label %.preheader235.loopexit, label %.epil.preheader339

.epil.preheader339:                               ; preds = %.preheader235.loopexit.unr-lcssa
  %31 = load ptr, ptr %22, align 8, !tbaa !16
  %32 = getelementptr inbounds i8, ptr %31, i64 %.1214279.unr
  %33 = load i64, ptr %32, align 8, !tbaa !17
  %34 = icmp sgt i64 %33, -1
  br i1 %34, label %35, label %.preheader235.loopexit

35:                                               ; preds = %.epil.preheader339
  %36 = load ptr, ptr %23, align 8, !tbaa !16
  %37 = getelementptr inbounds i64, ptr %36, i64 %33
  %38 = getelementptr inbounds i8, ptr %37, i64 8
  %39 = load i64, ptr %38, align 8, !tbaa !17
  %40 = add nsw i64 %39, 1
  store i64 %40, ptr %38, align 8, !tbaa !17
  %41 = add nsw i64 %.0280.unr, 1
  br label %.preheader235.loopexit

.preheader235.loopexit:                           ; preds = %.epil.preheader339, %35, %.preheader235.loopexit.unr-lcssa
  %.1.lcssa = phi i64 [ %.1.lcssa.ph, %.preheader235.loopexit.unr-lcssa ], [ %41, %35 ], [ %.0280.unr, %.epil.preheader339 ]
  %.pre319 = load i64, ptr %8, align 8, !tbaa !5
  br label %.preheader235

.preheader235:                                    ; preds = %.preheader235.loopexit, %.preheader236
  %42 = phi i64 [ %21, %.preheader236 ], [ %.pre319, %.preheader235.loopexit ]
  %.0.lcssa = phi i64 [ 0, %.preheader236 ], [ %.1.lcssa, %.preheader235.loopexit ]
  %.not231.not283 = icmp sgt i64 %42, 0
  br i1 %.not231.not283, label %.lr.ph285, label %._crit_edge286

.lr.ph285:                                        ; preds = %.preheader235
  %43 = getelementptr inbounds i8, ptr %0, i64 184
  br label %71

44:                                               ; preds = %69, %.lr.ph281.new
  %.0280 = phi i64 [ 0, %.lr.ph281.new ], [ %.1.1, %69 ]
  %.1214279 = phi i64 [ 0, %.lr.ph281.new ], [ %70, %69 ]
  %niter345 = phi i64 [ 0, %.lr.ph281.new ], [ %niter345.next.1, %69 ]
  %45 = load ptr, ptr %22, align 8, !tbaa !16
  %.idx = shl nsw i64 %.1214279, 4
  %46 = getelementptr inbounds i8, ptr %45, i64 %.idx
  %47 = load i64, ptr %46, align 8, !tbaa !17
  %48 = icmp sgt i64 %47, -1
  br i1 %48, label %49, label %56

49:                                               ; preds = %44
  %50 = load ptr, ptr %23, align 8, !tbaa !16
  %51 = getelementptr inbounds i64, ptr %50, i64 %47
  %52 = getelementptr inbounds i8, ptr %51, i64 8
  %53 = load i64, ptr %52, align 8, !tbaa !17
  %54 = add nsw i64 %53, 1
  store i64 %54, ptr %52, align 8, !tbaa !17
  %55 = add nsw i64 %.0280, 1
  br label %56

56:                                               ; preds = %44, %49
  %.1 = phi i64 [ %55, %49 ], [ %.0280, %44 ]
  %57 = load ptr, ptr %22, align 8, !tbaa !16
  %58 = shl i64 %.1214279, 4
  %.idx.1 = or disjoint i64 %58, 16
  %59 = getelementptr inbounds i8, ptr %57, i64 %.idx.1
  %60 = load i64, ptr %59, align 8, !tbaa !17
  %61 = icmp sgt i64 %60, -1
  br i1 %61, label %62, label %69

62:                                               ; preds = %56
  %63 = load ptr, ptr %23, align 8, !tbaa !16
  %64 = getelementptr inbounds i64, ptr %63, i64 %60
  %65 = getelementptr inbounds i8, ptr %64, i64 8
  %66 = load i64, ptr %65, align 8, !tbaa !17
  %67 = add nsw i64 %66, 1
  store i64 %67, ptr %65, align 8, !tbaa !17
  %68 = add nsw i64 %.1, 1
  br label %69

69:                                               ; preds = %62, %56
  %.1.1 = phi i64 [ %68, %62 ], [ %.1, %56 ]
  %70 = add nuw nsw i64 %.1214279, 2
  %niter345.next.1 = add i64 %niter345, 2
  %niter345.ncmp.1 = icmp eq i64 %niter345.next.1, %unroll_iter344
  br i1 %niter345.ncmp.1, label %.preheader235.loopexit.unr-lcssa.loopexit, label %44, !llvm.loop !20

71:                                               ; preds = %.lr.ph285, %71
  %.2215284 = phi i64 [ 0, %.lr.ph285 ], [ %73, %71 ]
  %72 = load ptr, ptr %43, align 8, !tbaa !16
  %73 = add nuw nsw i64 %.2215284, 1
  %74 = getelementptr inbounds i64, ptr %72, i64 %73
  %75 = load i64, ptr %74, align 8, !tbaa !17
  %76 = getelementptr inbounds i64, ptr %72, i64 %.2215284
  %77 = load i64, ptr %76, align 8, !tbaa !17
  %78 = add nsw i64 %77, %75
  store i64 %78, ptr %74, align 8, !tbaa !17
  %79 = load i64, ptr %8, align 8, !tbaa !5
  %.not231.not = icmp slt i64 %73, %79
  br i1 %.not231.not, label %71, label %._crit_edge286, !llvm.loop !21

._crit_edge286:                                   ; preds = %71, %.preheader235
  %.lcssa = phi i64 [ %42, %.preheader235 ], [ %79, %71 ]
  %80 = getelementptr inbounds i8, ptr %0, i64 184
  %81 = load ptr, ptr %80, align 8, !tbaa !16
  %82 = getelementptr inbounds i64, ptr %81, i64 %.lcssa
  %83 = load i64, ptr %82, align 8, !tbaa !17
  %84 = getelementptr inbounds i8, ptr %0, i64 352
  store i64 %83, ptr %84, align 8, !tbaa !22
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %6, i64 noundef %.lcssa, ptr noundef %1)
  %85 = load i64, ptr %8, align 8, !tbaa !5
  %.not232.not288 = icmp sgt i64 %85, 0
  br i1 %.not232.not288, label %.lr.ph291, label %._crit_edge292

.lr.ph291:                                        ; preds = %._crit_edge286
  %86 = getelementptr inbounds i8, ptr %6, i64 56
  br label %87

87:                                               ; preds = %.lr.ph291, %87
  %.3289 = phi i64 [ 0, %.lr.ph291 ], [ %90, %87 ]
  %88 = load ptr, ptr %86, align 8, !tbaa !16
  %89 = getelementptr inbounds i64, ptr %88, i64 %.3289
  store i64 0, ptr %89, align 8, !tbaa !17
  %90 = add nuw nsw i64 %.3289, 1
  %91 = load i64, ptr %8, align 8, !tbaa !5
  %.not232.not = icmp slt i64 %90, %91
  br i1 %.not232.not, label %87, label %._crit_edge292, !llvm.loop !23

._crit_edge292:                                   ; preds = %87, %._crit_edge286
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %0, i64 noundef %.0.lcssa, ptr noundef %1)
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %15, i64 noundef %.0.lcssa, ptr noundef %1)
  br i1 %.not230.not278, label %.lr.ph296, label %.preheader

.lr.ph296:                                        ; preds = %._crit_edge292
  %92 = getelementptr inbounds i8, ptr %5, i64 56
  %93 = getelementptr inbounds i8, ptr %4, i64 56
  %94 = getelementptr inbounds i8, ptr %0, i64 56
  %95 = getelementptr inbounds i8, ptr %6, i64 56
  %96 = getelementptr inbounds i8, ptr %0, i64 120
  br label %98

.preheader:                                       ; preds = %139, %._crit_edge292
  %97 = load i64, ptr %8, align 8, !tbaa !5
  %.not234.not297 = icmp sgt i64 %97, 0
  br i1 %.not234.not297, label %.lr.ph299, label %._crit_edge300

98:                                               ; preds = %.lr.ph296, %139
  %.4294 = phi i64 [ 0, %.lr.ph296 ], [ %140, %139 ]
  %99 = load ptr, ptr %92, align 8, !tbaa !16
  %100 = shl nuw nsw i64 %.4294, 1
  %101 = getelementptr inbounds i64, ptr %99, i64 %100
  %102 = load i64, ptr %101, align 8, !tbaa !17
  %103 = icmp sgt i64 %102, -1
  br i1 %103, label %104, label %139

104:                                              ; preds = %98
  %105 = load ptr, ptr %93, align 8, !tbaa !16
  %106 = getelementptr inbounds double, ptr %105, i64 %.4294
  %107 = load double, ptr %106, align 8, !tbaa !24
  %108 = load ptr, ptr %94, align 8, !tbaa !16
  %109 = load ptr, ptr %80, align 8, !tbaa !16
  %110 = getelementptr inbounds i64, ptr %109, i64 %102
  %111 = load i64, ptr %110, align 8, !tbaa !17
  %112 = load ptr, ptr %95, align 8, !tbaa !16
  %113 = getelementptr inbounds i64, ptr %112, i64 %102
  %114 = load i64, ptr %113, align 8, !tbaa !17
  %115 = getelementptr double, ptr %108, i64 %111
  %116 = getelementptr double, ptr %115, i64 %114
  store double %107, ptr %116, align 8, !tbaa !24
  %117 = load ptr, ptr %92, align 8, !tbaa !16
  %118 = or disjoint i64 %100, 1
  %119 = getelementptr inbounds i64, ptr %117, i64 %118
  %120 = load i64, ptr %119, align 8, !tbaa !17
  %121 = load ptr, ptr %96, align 8, !tbaa !16
  %122 = load ptr, ptr %80, align 8, !tbaa !16
  %123 = getelementptr inbounds i64, ptr %117, i64 %100
  %124 = load i64, ptr %123, align 8, !tbaa !17
  %125 = getelementptr inbounds i64, ptr %122, i64 %124
  %126 = load i64, ptr %125, align 8, !tbaa !17
  %127 = load ptr, ptr %95, align 8, !tbaa !16
  %128 = getelementptr inbounds i64, ptr %127, i64 %124
  %129 = load i64, ptr %128, align 8, !tbaa !17
  %130 = getelementptr i64, ptr %121, i64 %126
  %131 = getelementptr i64, ptr %130, i64 %129
  store i64 %120, ptr %131, align 8, !tbaa !17
  %132 = load ptr, ptr %95, align 8, !tbaa !16
  %133 = load ptr, ptr %92, align 8, !tbaa !16
  %134 = getelementptr inbounds i64, ptr %133, i64 %100
  %135 = load i64, ptr %134, align 8, !tbaa !17
  %136 = getelementptr inbounds i64, ptr %132, i64 %135
  %137 = load i64, ptr %136, align 8, !tbaa !17
  %138 = add nsw i64 %137, 1
  store i64 %138, ptr %136, align 8, !tbaa !17
  br label %139

139:                                              ; preds = %98, %104
  %140 = add nuw nsw i64 %.4294, 1
  %exitcond310.not = icmp eq i64 %140, %14
  br i1 %exitcond310.not, label %.preheader, label %98, !llvm.loop !26

.lr.ph299:                                        ; preds = %.preheader, %.lr.ph299
  %.5298 = phi i64 [ %144, %.lr.ph299 ], [ 0, %.preheader ]
  %141 = load ptr, ptr %80, align 8, !tbaa !16
  %142 = getelementptr inbounds i64, ptr %141, i64 %.5298
  %143 = load i64, ptr %142, align 8, !tbaa !17
  %144 = add nuw nsw i64 %.5298, 1
  %145 = getelementptr inbounds i64, ptr %141, i64 %144
  %146 = load i64, ptr %145, align 8, !tbaa !17
  %147 = sub nsw i64 %146, %143
  call void @_ZN11alglib_impl15tagsortmiddleirEPNS_9ae_vectorES1_llPNS_8ae_stateE(ptr noundef nonnull %15, ptr noundef nonnull %0, i64 noundef %143, i64 noundef %147, ptr noundef %1)
  %148 = load i64, ptr %8, align 8, !tbaa !5
  %.not234.not = icmp slt i64 %144, %148
  br i1 %.not234.not, label %.lr.ph299, label %._crit_edge300, !llvm.loop !27

._crit_edge300:                                   ; preds = %.lr.ph299, %.preheader
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef nonnull %0, ptr noundef %1)
  br label %310

149:                                              ; preds = %2
  %150 = getelementptr inbounds i8, ptr %0, i64 336
  %151 = load i64, ptr %150, align 8, !tbaa !28
  %152 = icmp eq i64 %9, %151
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %152, ptr noundef nonnull @.str.181, ptr noundef %1)
  store i64 1, ptr %10, align 8, !tbaa !14
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef nonnull %0, ptr noundef nonnull %4)
  %153 = getelementptr inbounds i8, ptr %0, i64 64
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef nonnull %153, ptr noundef nonnull %5)
  %154 = getelementptr inbounds i8, ptr %0, i64 128
  call void @_ZN11alglib_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef nonnull %154, ptr noundef nonnull %7)
  %155 = add i64 %9, 1
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %154, i64 noundef %155, ptr noundef %1)
  %156 = getelementptr inbounds i8, ptr %0, i64 184
  %157 = load ptr, ptr %156, align 8, !tbaa !16
  store i64 0, ptr %157, align 8, !tbaa !17
  %.not240 = icmp sgt i64 %9, 0
  br i1 %.not240, label %.lr.ph.preheader, label %.preheader237

.lr.ph.preheader:                                 ; preds = %149
  %xtraiter = and i64 %9, 3
  %158 = icmp ult i64 %9, 4
  br i1 %158, label %.lr.ph248.unr-lcssa, label %.lr.ph.preheader.new

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

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

.lr.ph.epil:                                      ; preds = %.lr.ph248.unr-lcssa, %.lr.ph.epil
  %.6241.epil = phi i64 [ %161, %.lr.ph.epil ], [ %.6241.unr, %.lr.ph248.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %.lr.ph248.unr-lcssa ]
  %159 = load ptr, ptr %156, align 8, !tbaa !16
  %160 = getelementptr inbounds i64, ptr %159, i64 %.6241.epil
  store i64 1, ptr %160, align 8, !tbaa !17
  %161 = add nuw i64 %.6241.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.ph248, label %.lr.ph.epil, !llvm.loop !29

.lr.ph248:                                        ; preds = %.lr.ph.epil, %.lr.ph248.unr-lcssa
  %162 = getelementptr inbounds i8, ptr %0, i64 248
  %163 = getelementptr inbounds i8, ptr %0, i64 312
  %.pre = load ptr, ptr %162, align 8, !tbaa !16
  br label %177

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %.6241 = phi i64 [ 1, %.lr.ph.preheader.new ], [ %175, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %164 = load ptr, ptr %156, align 8, !tbaa !16
  %165 = getelementptr inbounds i64, ptr %164, i64 %.6241
  store i64 1, ptr %165, align 8, !tbaa !17
  %166 = load ptr, ptr %156, align 8, !tbaa !16
  %167 = getelementptr i64, ptr %166, i64 %.6241
  %168 = getelementptr i8, ptr %167, i64 8
  store i64 1, ptr %168, align 8, !tbaa !17
  %169 = load ptr, ptr %156, align 8, !tbaa !16
  %170 = getelementptr i64, ptr %169, i64 %.6241
  %171 = getelementptr i8, ptr %170, i64 16
  store i64 1, ptr %171, align 8, !tbaa !17
  %172 = load ptr, ptr %156, align 8, !tbaa !16
  %173 = getelementptr i64, ptr %172, i64 %.6241
  %174 = getelementptr i8, ptr %173, i64 24
  store i64 1, ptr %174, align 8, !tbaa !17
  %175 = add nuw i64 %.6241, 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.ph248.unr-lcssa, label %.lr.ph, !llvm.loop !31

.preheader237:                                    ; preds = %._crit_edge, %149
  %.2.lcssa = phi i64 [ 0, %149 ], [ %201, %._crit_edge ]
  %176 = load i64, ptr %8, align 8, !tbaa !5
  %.not223.not249 = icmp sgt i64 %176, 0
  br i1 %.not223.not249, label %.lr.ph251, label %._crit_edge252

177:                                              ; preds = %.lr.ph248, %._crit_edge
  %178 = phi ptr [ %.pre, %.lr.ph248 ], [ %196, %._crit_edge ]
  %.2247 = phi i64 [ 0, %.lr.ph248 ], [ %201, %._crit_edge ]
  %.7246 = phi i64 [ 0, %.lr.ph248 ], [ %182, %._crit_edge ]
  %179 = getelementptr inbounds i64, ptr %178, i64 %.7246
  %180 = load i64, ptr %179, align 8, !tbaa !17
  %181 = load ptr, ptr %156, align 8, !tbaa !16
  %182 = add nuw nsw i64 %.7246, 1
  %183 = getelementptr inbounds i64, ptr %181, i64 %182
  %184 = load i64, ptr %183, align 8, !tbaa !17
  %185 = add nsw i64 %184, %180
  store i64 %185, ptr %183, align 8, !tbaa !17
  %186 = load ptr, ptr %163, align 8, !tbaa !16
  %187 = getelementptr inbounds i64, ptr %186, i64 %.7246
  %188 = load i64, ptr %187, align 8, !tbaa !17
  %.not228.not242 = icmp sgt i64 %188, 0
  br i1 %.not228.not242, label %.lr.ph244.preheader, label %._crit_edge

.lr.ph244.preheader:                              ; preds = %177
  %189 = sub nsw i64 %.7246, %188
  br label %.lr.ph244

.lr.ph244:                                        ; preds = %.lr.ph244.preheader, %.lr.ph244
  %.0210243 = phi i64 [ %191, %.lr.ph244 ], [ %189, %.lr.ph244.preheader ]
  %190 = load ptr, ptr %156, align 8, !tbaa !16
  %191 = add nsw i64 %.0210243, 1
  %192 = getelementptr inbounds i64, ptr %190, i64 %191
  %193 = load i64, ptr %192, align 8, !tbaa !17
  %194 = add nsw i64 %193, 1
  store i64 %194, ptr %192, align 8, !tbaa !17
  %.not228.not = icmp slt i64 %191, %.7246
  br i1 %.not228.not, label %.lr.ph244, label %._crit_edge.loopexit, !llvm.loop !32

._crit_edge.loopexit:                             ; preds = %.lr.ph244
  %.pre311 = load ptr, ptr %163, align 8, !tbaa !16
  %.phi.trans.insert = getelementptr inbounds i64, ptr %.pre311, i64 %.7246
  %.pre312 = load i64, ptr %.phi.trans.insert, align 8, !tbaa !17
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %177
  %195 = phi i64 [ %.pre312, %._crit_edge.loopexit ], [ %188, %177 ]
  %196 = load ptr, ptr %162, align 8, !tbaa !16
  %197 = getelementptr inbounds i64, ptr %196, i64 %.7246
  %198 = load i64, ptr %197, align 8, !tbaa !17
  %199 = add i64 %.2247, 1
  %200 = add i64 %199, %198
  %201 = add nsw i64 %200, %195
  %exitcond304.not = icmp eq i64 %182, %9
  br i1 %exitcond304.not, label %.preheader237, label %177, !llvm.loop !33

.lr.ph251:                                        ; preds = %.preheader237, %.lr.ph251
  %.8250 = phi i64 [ %203, %.lr.ph251 ], [ 0, %.preheader237 ]
  %202 = load ptr, ptr %156, align 8, !tbaa !16
  %203 = add nuw nsw i64 %.8250, 1
  %204 = getelementptr inbounds i64, ptr %202, i64 %203
  %205 = load i64, ptr %204, align 8, !tbaa !17
  %206 = getelementptr inbounds i64, ptr %202, i64 %.8250
  %207 = load i64, ptr %206, align 8, !tbaa !17
  %208 = add nsw i64 %207, %205
  store i64 %208, ptr %204, align 8, !tbaa !17
  %209 = load i64, ptr %8, align 8, !tbaa !5
  %.not223.not = icmp slt i64 %203, %209
  br i1 %.not223.not, label %.lr.ph251, label %._crit_edge252, !llvm.loop !34

._crit_edge252:                                   ; preds = %.lr.ph251, %.preheader237
  %.lcssa239 = phi i64 [ %176, %.preheader237 ], [ %209, %.lr.ph251 ]
  %210 = load ptr, ptr %156, align 8, !tbaa !16
  %211 = getelementptr inbounds i64, ptr %210, i64 %.lcssa239
  %212 = load i64, ptr %211, align 8, !tbaa !17
  %213 = getelementptr inbounds i8, ptr %0, i64 352
  store i64 %212, ptr %213, align 8, !tbaa !22
  call void @_ZN11alglib_impl20ae_vector_set_lengthEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %6, i64 noundef %9, ptr noundef %1)
  br i1 %.not240, label %.lr.ph257, label %._crit_edge273.critedge

.lr.ph257:                                        ; preds = %._crit_edge252
  %214 = getelementptr inbounds i8, ptr %6, i64 56
  %xtraiter334 = and i64 %9, 3
  %215 = icmp ult i64 %9, 4
  br i1 %215, label %._crit_edge258.unr-lcssa, label %.lr.ph257.new

.lr.ph257.new:                                    ; preds = %.lr.ph257
  %unroll_iter337 = and i64 %9, 9223372036854775804
  br label %216

216:                                              ; preds = %216, %.lr.ph257.new
  %.9255 = phi i64 [ 0, %.lr.ph257.new ], [ %228, %216 ]
  %niter338 = phi i64 [ 0, %.lr.ph257.new ], [ %niter338.next.3, %216 ]
  %217 = load ptr, ptr %214, align 8, !tbaa !16
  %218 = getelementptr inbounds i64, ptr %217, i64 %.9255
  store i64 0, ptr %218, align 8, !tbaa !17
  %219 = or disjoint i64 %.9255, 1
  %220 = load ptr, ptr %214, align 8, !tbaa !16
  %221 = getelementptr inbounds i64, ptr %220, i64 %219
  store i64 0, ptr %221, align 8, !tbaa !17
  %222 = or disjoint i64 %.9255, 2
  %223 = load ptr, ptr %214, align 8, !tbaa !16
  %224 = getelementptr inbounds i64, ptr %223, i64 %222
  store i64 0, ptr %224, align 8, !tbaa !17
  %225 = or disjoint i64 %.9255, 3
  %226 = load ptr, ptr %214, align 8, !tbaa !16
  %227 = getelementptr inbounds i64, ptr %226, i64 %225
  store i64 0, ptr %227, align 8, !tbaa !17
  %228 = add nuw nsw i64 %.9255, 4
  %niter338.next.3 = add i64 %niter338, 4
  %niter338.ncmp.3 = icmp eq i64 %niter338.next.3, %unroll_iter337
  br i1 %niter338.ncmp.3, label %._crit_edge258.unr-lcssa, label %216, !llvm.loop !35

._crit_edge258.unr-lcssa:                         ; preds = %216, %.lr.ph257
  %.9255.unr = phi i64 [ 0, %.lr.ph257 ], [ %228, %216 ]
  %lcmp.mod336.not = icmp eq i64 %xtraiter334, 0
  br i1 %lcmp.mod336.not, label %._crit_edge258, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge258.unr-lcssa, %.epil.preheader
  %.9255.epil = phi i64 [ %231, %.epil.preheader ], [ %.9255.unr, %._crit_edge258.unr-lcssa ]
  %epil.iter335 = phi i64 [ %epil.iter335.next, %.epil.preheader ], [ 0, %._crit_edge258.unr-lcssa ]
  %229 = load ptr, ptr %214, align 8, !tbaa !16
  %230 = getelementptr inbounds i64, ptr %229, i64 %.9255.epil
  store i64 0, ptr %230, align 8, !tbaa !17
  %231 = add nuw nsw i64 %.9255.epil, 1
  %epil.iter335.next = add i64 %epil.iter335, 1
  %epil.iter335.cmp.not = icmp eq i64 %epil.iter335.next, %xtraiter334
  br i1 %epil.iter335.cmp.not, label %._crit_edge258, label %.epil.preheader, !llvm.loop !36

._crit_edge258:                                   ; preds = %.epil.preheader, %._crit_edge258.unr-lcssa
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %0, i64 noundef %.2.lcssa, ptr noundef %1)
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %153, i64 noundef %.2.lcssa, ptr noundef %1)
  br i1 %.not240, label %.lr.ph272, label %._crit_edge273

.lr.ph272:                                        ; preds = %._crit_edge258
  %232 = getelementptr inbounds i8, ptr %7, i64 56
  %233 = getelementptr inbounds i8, ptr %6, i64 56
  %234 = getelementptr inbounds i8, ptr %0, i64 248
  %235 = getelementptr inbounds i8, ptr %4, i64 56
  %236 = getelementptr inbounds i8, ptr %0, i64 56
  %237 = getelementptr inbounds i8, ptr %0, i64 120
  %238 = getelementptr inbounds i8, ptr %0, i64 312
  br label %239

239:                                              ; preds = %.lr.ph272, %._crit_edge268
  %.10270 = phi i64 [ 0, %.lr.ph272 ], [ %308, %._crit_edge268 ]
  %240 = load ptr, ptr %232, align 8, !tbaa !16
  %241 = getelementptr inbounds i64, ptr %240, i64 %.10270
  %242 = load i64, ptr %241, align 8, !tbaa !17
  %243 = load ptr, ptr %156, align 8, !tbaa !16
  %244 = getelementptr inbounds i64, ptr %243, i64 %.10270
  %245 = load i64, ptr %244, align 8, !tbaa !17
  %246 = load ptr, ptr %233, align 8, !tbaa !16
  %247 = getelementptr inbounds i64, ptr %246, i64 %.10270
  %248 = load i64, ptr %247, align 8, !tbaa !17
  %249 = add nsw i64 %248, %245
  %250 = load ptr, ptr %234, align 8, !tbaa !16
  %251 = getelementptr inbounds i64, ptr %250, i64 %.10270
  %252 = load i64, ptr %251, align 8, !tbaa !17
  %.not226259 = icmp slt i64 %252, 0
  br i1 %.not226259, label %._crit_edge263, label %.lr.ph262

.lr.ph262:                                        ; preds = %239, %.lr.ph262
  %.1211260 = phi i64 [ %267, %.lr.ph262 ], [ 0, %239 ]
  %253 = load ptr, ptr %235, align 8, !tbaa !16
  %254 = getelementptr double, ptr %253, i64 %242
  %255 = getelementptr double, ptr %254, i64 %.1211260
  %256 = load double, ptr %255, align 8, !tbaa !24
  %257 = load ptr, ptr %236, align 8, !tbaa !16
  %258 = add nsw i64 %249, %.1211260
  %259 = getelementptr inbounds double, ptr %257, i64 %258
  store double %256, ptr %259, align 8, !tbaa !24
  %260 = load ptr, ptr %234, align 8, !tbaa !16
  %261 = getelementptr inbounds i64, ptr %260, i64 %.10270
  %262 = load i64, ptr %261, align 8, !tbaa !17
  %263 = add nuw i64 %.1211260, %.10270
  %264 = sub i64 %263, %262
  %265 = load ptr, ptr %237, align 8, !tbaa !16
  %266 = getelementptr inbounds i64, ptr %265, i64 %258
  store i64 %264, ptr %266, align 8, !tbaa !17
  %267 = add nuw i64 %.1211260, 1
  %exitcond306.not = icmp eq i64 %.1211260, %252
  br i1 %exitcond306.not, label %._crit_edge263.loopexit, label %.lr.ph262, !llvm.loop !37

._crit_edge263.loopexit:                          ; preds = %.lr.ph262
  %.pre313 = load ptr, ptr %233, align 8, !tbaa !16
  %.phi.trans.insert314 = getelementptr inbounds i64, ptr %.pre313, i64 %.10270
  %.pre315 = load i64, ptr %.phi.trans.insert314, align 8, !tbaa !17
  %.pre316 = load ptr, ptr %234, align 8, !tbaa !16
  %.phi.trans.insert317 = getelementptr inbounds i64, ptr %.pre316, i64 %.10270
  %.pre318 = load i64, ptr %.phi.trans.insert317, align 8, !tbaa !17
  br label %._crit_edge263

._crit_edge263:                                   ; preds = %._crit_edge263.loopexit, %239
  %268 = phi i64 [ %.pre318, %._crit_edge263.loopexit ], [ %252, %239 ]
  %269 = phi i64 [ %.pre315, %._crit_edge263.loopexit ], [ %248, %239 ]
  %270 = phi ptr [ %.pre313, %._crit_edge263.loopexit ], [ %246, %239 ]
  %271 = getelementptr inbounds i64, ptr %270, i64 %.10270
  %272 = add i64 %269, 1
  %273 = add i64 %272, %268
  store i64 %273, ptr %271, align 8, !tbaa !17
  %274 = load ptr, ptr %232, align 8, !tbaa !16
  %275 = getelementptr inbounds i64, ptr %274, i64 %.10270
  %276 = load i64, ptr %275, align 8, !tbaa !17
  %277 = load ptr, ptr %234, align 8, !tbaa !16
  %278 = getelementptr inbounds i64, ptr %277, i64 %.10270
  %279 = load i64, ptr %278, align 8, !tbaa !17
  %280 = load ptr, ptr %238, align 8, !tbaa !16
  %281 = getelementptr inbounds i64, ptr %280, i64 %.10270
  %282 = load i64, ptr %281, align 8, !tbaa !17
  %.not227.not264 = icmp sgt i64 %282, 0
  br i1 %.not227.not264, label %.lr.ph267, label %._crit_edge268

.lr.ph267:                                        ; preds = %._crit_edge263
  %283 = sub nsw i64 %.10270, %282
  br label %284

284:                                              ; preds = %.lr.ph267, %284
  %.2212265 = phi i64 [ 0, %.lr.ph267 ], [ %307, %284 ]
  %285 = load ptr, ptr %156, align 8, !tbaa !16
  %286 = add nsw i64 %.2212265, %283
  %287 = getelementptr inbounds i64, ptr %285, i64 %286
  %288 = load i64, ptr %287, align 8, !tbaa !17
  %289 = load ptr, ptr %233, align 8, !tbaa !16
  %290 = getelementptr inbounds i64, ptr %289, i64 %286
  %291 = load i64, ptr %290, align 8, !tbaa !17
  %292 = add nsw i64 %291, %288
  %293 = load ptr, ptr %235, align 8, !tbaa !16
  %294 = getelementptr double, ptr %293, i64 %276
  %295 = getelementptr double, ptr %294, i64 %279
  %296 = getelementptr i8, ptr %295, i64 8
  %297 = getelementptr double, ptr %296, i64 %.2212265
  %298 = load double, ptr %297, align 8, !tbaa !24
  %299 = load ptr, ptr %236, align 8, !tbaa !16
  %300 = getelementptr inbounds double, ptr %299, i64 %292
  store double %298, ptr %300, align 8, !tbaa !24
  %301 = load ptr, ptr %237, align 8, !tbaa !16
  %302 = getelementptr inbounds i64, ptr %301, i64 %292
  store i64 %.10270, ptr %302, align 8, !tbaa !17
  %303 = load ptr, ptr %233, align 8, !tbaa !16
  %304 = getelementptr inbounds i64, ptr %303, i64 %286
  %305 = load i64, ptr %304, align 8, !tbaa !17
  %306 = add nsw i64 %305, 1
  store i64 %306, ptr %304, align 8, !tbaa !17
  %307 = add nuw nsw i64 %.2212265, 1
  %exitcond307.not = icmp eq i64 %307, %282
  br i1 %exitcond307.not, label %._crit_edge268, label %284, !llvm.loop !38

._crit_edge268:                                   ; preds = %284, %._crit_edge263
  %308 = add nuw nsw i64 %.10270, 1
  %exitcond308.not = icmp eq i64 %308, %9
  br i1 %exitcond308.not, label %._crit_edge273, label %239, !llvm.loop !39

._crit_edge273.critedge:                          ; preds = %._crit_edge252
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %0, i64 noundef %.2.lcssa, ptr noundef %1)
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %153, i64 noundef %.2.lcssa, ptr noundef %1)
  br label %._crit_edge273

._crit_edge273:                                   ; preds = %._crit_edge268, %._crit_edge273.critedge, %._crit_edge258
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %1)
  br label %310

309:                                              ; preds = %2
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef nonnull @.str.182, ptr noundef %1)
  br label %310

310:                                              ; preds = %2, %309, %._crit_edge273, %._crit_edge300
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %1)
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %7) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %6) #4
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #4
  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_impl15ae_swap_vectorsEPNS_9ae_vectorES1_(ptr noundef, ptr noundef) local_unnamed_addr #2

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 328}
!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 320}
!15 = !{!6, !8, i64 360}
!16 = !{!9, !9, i64 0}
!17 = !{!8, !8, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = !{!6, !8, i64 352}
!23 = distinct !{!23, !19}
!24 = !{!25, !25, i64 0}
!25 = !{!"double", !9, i64 0}
!26 = distinct !{!26, !19}
!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,SROAPass,SimplifyCFGPass