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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

@.str.237 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.238 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.239 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.240 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.241 = external hidden unnamed_addr constant [45 x i8], align 1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

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

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

44:                                               ; preds = %76, %5
  %45 = load i64, ptr %11, align 8, !tbaa !19
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %46, i32 0, i32 7
  %48 = load i64, ptr %47, align 8, !tbaa !17
  %49 = sub nsw i64 %48, 1
  %50 = icmp sle i64 %45, %49
  br i1 %50, label %51, label %79

51:                                               ; preds = %44
  %52 = load i8, ptr %21, align 1, !tbaa !9, !range !20, !noundef !21
  %53 = trunc i8 %52 to i1
  br i1 %53, label %54, label %73

54:                                               ; preds = %51
  %55 = load ptr, ptr %8, align 8, !tbaa !5
  %56 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %55, i32 0, i32 4
  %57 = load ptr, ptr %56, align 8, !tbaa !22
  %58 = load i64, ptr %11, align 8, !tbaa !19
  %59 = getelementptr inbounds i64, ptr %57, i64 %58
  %60 = load i64, ptr %59, align 8, !tbaa !19
  %61 = icmp sge i64 %60, 0
  br i1 %61, label %62, label %73

62:                                               ; preds = %54
  %63 = load ptr, ptr %8, align 8, !tbaa !5
  %64 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %63, i32 0, i32 4
  %65 = load ptr, ptr %64, align 8, !tbaa !22
  %66 = load i64, ptr %11, align 8, !tbaa !19
  %67 = getelementptr inbounds i64, ptr %65, i64 %66
  %68 = load i64, ptr %67, align 8, !tbaa !19
  %69 = load ptr, ptr %6, align 8, !tbaa !5
  %70 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %69, i32 0, i32 7
  %71 = load i64, ptr %70, align 8, !tbaa !17
  %72 = icmp slt i64 %68, %71
  br label %73

73:                                               ; preds = %62, %54, %51
  %74 = phi i1 [ false, %54 ], [ false, %51 ], [ %72, %62 ]
  %75 = zext i1 %74 to i8
  store i8 %75, ptr %21, align 1, !tbaa !9
  br label %76

76:                                               ; preds = %73
  %77 = load i64, ptr %11, align 8, !tbaa !19
  %78 = add nsw i64 %77, 1
  store i64 %78, ptr %11, align 8, !tbaa !19
  br label %44, !llvm.loop !23

79:                                               ; preds = %44
  %80 = load i8, ptr %21, align 1, !tbaa !9, !range !20, !noundef !21
  %81 = trunc i8 %80 to i1
  %82 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %81, ptr noundef @.str.240, ptr noundef %82)
  %83 = load ptr, ptr %6, align 8, !tbaa !5
  %84 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %83, i32 0, i32 7
  %85 = load i64, ptr %84, align 8, !tbaa !17
  store i64 %85, ptr %19, align 8, !tbaa !19
  %86 = load ptr, ptr %6, align 8, !tbaa !5
  %87 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %86, i32 0, i32 9
  %88 = load i64, ptr %87, align 8, !tbaa !25
  %89 = load ptr, ptr %6, align 8, !tbaa !5
  %90 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %89, i32 0, i32 2
  %91 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %90, i32 0, i32 4
  %92 = load ptr, ptr %91, align 8, !tbaa !22
  %93 = load i64, ptr %19, align 8, !tbaa !19
  %94 = getelementptr inbounds i64, ptr %92, i64 %93
  %95 = load i64, ptr %94, align 8, !tbaa !19
  %96 = icmp eq i64 %88, %95
  %97 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %96, ptr noundef @.str.241, ptr noundef %97)
  %98 = load ptr, ptr %9, align 8, !tbaa !5
  %99 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %98, i32 0, i32 5
  store i64 1, ptr %99, align 8, !tbaa !11
  %100 = load i64, ptr %19, align 8, !tbaa !19
  %101 = load ptr, ptr %9, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %101, i32 0, i32 7
  store i64 %100, ptr %102, align 8, !tbaa !17
  %103 = load i64, ptr %19, align 8, !tbaa !19
  %104 = load ptr, ptr %9, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %104, i32 0, i32 6
  store i64 %103, ptr %105, align 8, !tbaa !18
  %106 = load ptr, ptr %9, align 8, !tbaa !5
  %107 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %106, i32 0, i32 3
  %108 = load i64, ptr %19, align 8, !tbaa !19
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %107, i64 noundef %108, ptr noundef %109)
  %110 = load ptr, ptr %9, align 8, !tbaa !5
  %111 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %110, i32 0, i32 4
  %112 = load i64, ptr %19, align 8, !tbaa !19
  %113 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %111, i64 noundef %112, ptr noundef %113)
  %114 = load i64, ptr %19, align 8, !tbaa !19
  %115 = load ptr, ptr %9, align 8, !tbaa !5
  %116 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %115, i32 0, i32 3
  %117 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl5isetvEllPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %114, i64 noundef 0, ptr noundef %116, ptr noundef %117)
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %118

118:                                              ; preds = %284, %79
  %119 = load i64, ptr %11, align 8, !tbaa !19
  %120 = load i64, ptr %19, align 8, !tbaa !19
  %121 = sub nsw i64 %120, 1
  %122 = icmp sle i64 %119, %121
  br i1 %122, label %123, label %287

123:                                              ; preds = %118
  %124 = load i8, ptr %7, align 1, !tbaa !9, !range !20, !noundef !21
  %125 = trunc i8 %124 to i1
  br i1 %125, label %126, label %205

126:                                              ; preds = %123
  %127 = load ptr, ptr %6, align 8, !tbaa !5
  %128 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %127, i32 0, i32 3
  %129 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %128, i32 0, i32 4
  %130 = load ptr, ptr %129, align 8, !tbaa !22
  %131 = load i64, ptr %11, align 8, !tbaa !19
  %132 = getelementptr inbounds i64, ptr %130, i64 %131
  %133 = load i64, ptr %132, align 8, !tbaa !19
  store i64 %133, ptr %14, align 8, !tbaa !19
  %134 = load ptr, ptr %6, align 8, !tbaa !5
  %135 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %134, i32 0, i32 2
  %136 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %135, i32 0, i32 4
  %137 = load ptr, ptr %136, align 8, !tbaa !22
  %138 = load i64, ptr %11, align 8, !tbaa !19
  %139 = add nsw i64 %138, 1
  %140 = getelementptr inbounds i64, ptr %137, i64 %139
  %141 = load i64, ptr %140, align 8, !tbaa !19
  %142 = sub nsw i64 %141, 1
  store i64 %142, ptr %15, align 8, !tbaa !19
  %143 = load ptr, ptr %8, align 8, !tbaa !5
  %144 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %143, i32 0, i32 4
  %145 = load ptr, ptr %144, align 8, !tbaa !22
  %146 = load i64, ptr %11, align 8, !tbaa !19
  %147 = getelementptr inbounds i64, ptr %145, i64 %146
  %148 = load i64, ptr %147, align 8, !tbaa !19
  store i64 %148, ptr %16, align 8, !tbaa !19
  %149 = load i64, ptr %14, align 8, !tbaa !19
  store i64 %149, ptr %13, align 8, !tbaa !19
  br label %150

150:                                              ; preds = %201, %126
  %151 = load i64, ptr %13, align 8, !tbaa !19
  %152 = load i64, ptr %15, align 8, !tbaa !19
  %153 = icmp sle i64 %151, %152
  br i1 %153, label %154, label %204

154:                                              ; preds = %150
  %155 = load ptr, ptr %8, align 8, !tbaa !5
  %156 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %155, i32 0, i32 4
  %157 = load ptr, ptr %156, align 8, !tbaa !22
  %158 = load ptr, ptr %6, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %158, i32 0, i32 1
  %160 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %159, i32 0, i32 4
  %161 = load ptr, ptr %160, align 8, !tbaa !22
  %162 = load i64, ptr %13, align 8, !tbaa !19
  %163 = getelementptr inbounds i64, ptr %161, i64 %162
  %164 = load i64, ptr %163, align 8, !tbaa !19
  %165 = getelementptr inbounds i64, ptr %157, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !19
  store i64 %166, ptr %17, align 8, !tbaa !19
  %167 = load i64, ptr %17, align 8, !tbaa !19
  %168 = load i64, ptr %16, align 8, !tbaa !19
  %169 = icmp slt i64 %167, %168
  br i1 %169, label %170, label %185

170:                                              ; preds = %154
  %171 = load ptr, ptr %9, align 8, !tbaa !5
  %172 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %171, i32 0, i32 3
  %173 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %172, i32 0, i32 4
  %174 = load ptr, ptr %173, align 8, !tbaa !22
  %175 = load i64, ptr %17, align 8, !tbaa !19
  %176 = getelementptr inbounds i64, ptr %174, i64 %175
  %177 = load i64, ptr %176, align 8, !tbaa !19
  %178 = add nsw i64 %177, 1
  %179 = load ptr, ptr %9, align 8, !tbaa !5
  %180 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %179, i32 0, i32 3
  %181 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %180, i32 0, i32 4
  %182 = load ptr, ptr %181, align 8, !tbaa !22
  %183 = load i64, ptr %17, align 8, !tbaa !19
  %184 = getelementptr inbounds i64, ptr %182, i64 %183
  store i64 %178, ptr %184, align 8, !tbaa !19
  br label %200

185:                                              ; preds = %154
  %186 = load ptr, ptr %9, align 8, !tbaa !5
  %187 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %186, i32 0, i32 3
  %188 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %187, i32 0, i32 4
  %189 = load ptr, ptr %188, align 8, !tbaa !22
  %190 = load i64, ptr %16, align 8, !tbaa !19
  %191 = getelementptr inbounds i64, ptr %189, i64 %190
  %192 = load i64, ptr %191, align 8, !tbaa !19
  %193 = add nsw i64 %192, 1
  %194 = load ptr, ptr %9, align 8, !tbaa !5
  %195 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %194, i32 0, i32 3
  %196 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %195, i32 0, i32 4
  %197 = load ptr, ptr %196, align 8, !tbaa !22
  %198 = load i64, ptr %16, align 8, !tbaa !19
  %199 = getelementptr inbounds i64, ptr %197, i64 %198
  store i64 %193, ptr %199, align 8, !tbaa !19
  br label %200

200:                                              ; preds = %185, %170
  br label %201

201:                                              ; preds = %200
  %202 = load i64, ptr %13, align 8, !tbaa !19
  %203 = add nsw i64 %202, 1
  store i64 %203, ptr %13, align 8, !tbaa !19
  br label %150, !llvm.loop !26

204:                                              ; preds = %150
  br label %283

205:                                              ; preds = %123
  %206 = load ptr, ptr %6, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %206, i32 0, i32 2
  %208 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %207, i32 0, i32 4
  %209 = load ptr, ptr %208, align 8, !tbaa !22
  %210 = load i64, ptr %11, align 8, !tbaa !19
  %211 = getelementptr inbounds i64, ptr %209, i64 %210
  %212 = load i64, ptr %211, align 8, !tbaa !19
  store i64 %212, ptr %14, align 8, !tbaa !19
  %213 = load ptr, ptr %6, align 8, !tbaa !5
  %214 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %213, i32 0, i32 4
  %215 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %214, i32 0, i32 4
  %216 = load ptr, ptr %215, align 8, !tbaa !22
  %217 = load i64, ptr %11, align 8, !tbaa !19
  %218 = getelementptr inbounds i64, ptr %216, i64 %217
  %219 = load i64, ptr %218, align 8, !tbaa !19
  %220 = sub nsw i64 %219, 1
  store i64 %220, ptr %15, align 8, !tbaa !19
  %221 = load ptr, ptr %8, align 8, !tbaa !5
  %222 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %221, i32 0, i32 4
  %223 = load ptr, ptr %222, align 8, !tbaa !22
  %224 = load i64, ptr %11, align 8, !tbaa !19
  %225 = getelementptr inbounds i64, ptr %223, i64 %224
  %226 = load i64, ptr %225, align 8, !tbaa !19
  store i64 %226, ptr %16, align 8, !tbaa !19
  %227 = load i64, ptr %14, align 8, !tbaa !19
  store i64 %227, ptr %13, align 8, !tbaa !19
  br label %228

228:                                              ; preds = %279, %205
  %229 = load i64, ptr %13, align 8, !tbaa !19
  %230 = load i64, ptr %15, align 8, !tbaa !19
  %231 = icmp sle i64 %229, %230
  br i1 %231, label %232, label %282

232:                                              ; preds = %228
  %233 = load ptr, ptr %8, align 8, !tbaa !5
  %234 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %233, i32 0, i32 4
  %235 = load ptr, ptr %234, align 8, !tbaa !22
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %236, i32 0, i32 1
  %238 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %237, i32 0, i32 4
  %239 = load ptr, ptr %238, align 8, !tbaa !22
  %240 = load i64, ptr %13, align 8, !tbaa !19
  %241 = getelementptr inbounds i64, ptr %239, i64 %240
  %242 = load i64, ptr %241, align 8, !tbaa !19
  %243 = getelementptr inbounds i64, ptr %235, i64 %242
  %244 = load i64, ptr %243, align 8, !tbaa !19
  store i64 %244, ptr %17, align 8, !tbaa !19
  %245 = load i64, ptr %17, align 8, !tbaa !19
  %246 = load i64, ptr %16, align 8, !tbaa !19
  %247 = icmp sgt i64 %245, %246
  br i1 %247, label %248, label %263

248:                                              ; preds = %232
  %249 = load ptr, ptr %9, align 8, !tbaa !5
  %250 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %249, i32 0, i32 3
  %251 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %250, i32 0, i32 4
  %252 = load ptr, ptr %251, align 8, !tbaa !22
  %253 = load i64, ptr %17, align 8, !tbaa !19
  %254 = getelementptr inbounds i64, ptr %252, i64 %253
  %255 = load i64, ptr %254, align 8, !tbaa !19
  %256 = add nsw i64 %255, 1
  %257 = load ptr, ptr %9, align 8, !tbaa !5
  %258 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %257, i32 0, i32 3
  %259 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %258, i32 0, i32 4
  %260 = load ptr, ptr %259, align 8, !tbaa !22
  %261 = load i64, ptr %17, align 8, !tbaa !19
  %262 = getelementptr inbounds i64, ptr %260, i64 %261
  store i64 %256, ptr %262, align 8, !tbaa !19
  br label %278

263:                                              ; preds = %232
  %264 = load ptr, ptr %9, align 8, !tbaa !5
  %265 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %264, i32 0, i32 3
  %266 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %265, i32 0, i32 4
  %267 = load ptr, ptr %266, align 8, !tbaa !22
  %268 = load i64, ptr %16, align 8, !tbaa !19
  %269 = getelementptr inbounds i64, ptr %267, i64 %268
  %270 = load i64, ptr %269, align 8, !tbaa !19
  %271 = add nsw i64 %270, 1
  %272 = load ptr, ptr %9, align 8, !tbaa !5
  %273 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %272, i32 0, i32 3
  %274 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %273, i32 0, i32 4
  %275 = load ptr, ptr %274, align 8, !tbaa !22
  %276 = load i64, ptr %16, align 8, !tbaa !19
  %277 = getelementptr inbounds i64, ptr %275, i64 %276
  store i64 %271, ptr %277, align 8, !tbaa !19
  br label %278

278:                                              ; preds = %263, %248
  br label %279

279:                                              ; preds = %278
  %280 = load i64, ptr %13, align 8, !tbaa !19
  %281 = add nsw i64 %280, 1
  store i64 %281, ptr %13, align 8, !tbaa !19
  br label %228, !llvm.loop !27

282:                                              ; preds = %228
  br label %283

283:                                              ; preds = %282, %204
  br label %284

284:                                              ; preds = %283
  %285 = load i64, ptr %11, align 8, !tbaa !19
  %286 = add nsw i64 %285, 1
  store i64 %286, ptr %11, align 8, !tbaa !19
  br label %118, !llvm.loop !28

287:                                              ; preds = %118
  %288 = load ptr, ptr %9, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %288, i32 0, i32 2
  %290 = load i64, ptr %19, align 8, !tbaa !19
  %291 = add nsw i64 %290, 1
  %292 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %289, i64 noundef %291, ptr noundef %292)
  %293 = load ptr, ptr %9, align 8, !tbaa !5
  %294 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %293, i32 0, i32 2
  %295 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %294, i32 0, i32 4
  %296 = load ptr, ptr %295, align 8, !tbaa !22
  %297 = getelementptr inbounds i64, ptr %296, i64 0
  store i64 0, ptr %297, align 8, !tbaa !19
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %298

298:                                              ; preds = %326, %287
  %299 = load i64, ptr %11, align 8, !tbaa !19
  %300 = load i64, ptr %19, align 8, !tbaa !19
  %301 = sub nsw i64 %300, 1
  %302 = icmp sle i64 %299, %301
  br i1 %302, label %303, label %329

303:                                              ; preds = %298
  %304 = load ptr, ptr %9, 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 !22
  %308 = load i64, ptr %11, align 8, !tbaa !19
  %309 = getelementptr inbounds i64, ptr %307, i64 %308
  %310 = load i64, ptr %309, align 8, !tbaa !19
  %311 = load ptr, ptr %9, align 8, !tbaa !5
  %312 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %311, i32 0, i32 3
  %313 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %312, i32 0, i32 4
  %314 = load ptr, ptr %313, align 8, !tbaa !22
  %315 = load i64, ptr %11, align 8, !tbaa !19
  %316 = getelementptr inbounds i64, ptr %314, i64 %315
  %317 = load i64, ptr %316, align 8, !tbaa !19
  %318 = add nsw i64 %310, %317
  %319 = load ptr, ptr %9, 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 !22
  %323 = load i64, ptr %11, align 8, !tbaa !19
  %324 = add nsw i64 %323, 1
  %325 = getelementptr inbounds i64, ptr %322, i64 %324
  store i64 %318, ptr %325, align 8, !tbaa !19
  br label %326

326:                                              ; preds = %303
  %327 = load i64, ptr %11, align 8, !tbaa !19
  %328 = add nsw i64 %327, 1
  store i64 %328, ptr %11, align 8, !tbaa !19
  br label %298, !llvm.loop !29

329:                                              ; preds = %298
  %330 = load ptr, ptr %9, align 8, !tbaa !5
  %331 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %330, i32 0, i32 2
  %332 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %331, i32 0, i32 4
  %333 = load ptr, ptr %332, align 8, !tbaa !22
  %334 = load i64, ptr %19, align 8, !tbaa !19
  %335 = getelementptr inbounds i64, ptr %333, i64 %334
  %336 = load i64, ptr %335, align 8, !tbaa !19
  %337 = load ptr, ptr %9, align 8, !tbaa !5
  %338 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %337, i32 0, i32 9
  store i64 %336, ptr %338, align 8, !tbaa !25
  %339 = load ptr, ptr %9, align 8, !tbaa !5
  %340 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %339, i32 0, i32 1
  %341 = load ptr, ptr %9, align 8, !tbaa !5
  %342 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %341, i32 0, i32 9
  %343 = load i64, ptr %342, align 8, !tbaa !25
  %344 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %340, i64 noundef %343, ptr noundef %344)
  %345 = load ptr, ptr %9, align 8, !tbaa !5
  %346 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %345, i32 0, i32 0
  %347 = load ptr, ptr %9, align 8, !tbaa !5
  %348 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %347, i32 0, i32 9
  %349 = load i64, ptr %348, align 8, !tbaa !25
  %350 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %346, i64 noundef %349, ptr noundef %350)
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %351

351:                                              ; preds = %370, %329
  %352 = load i64, ptr %11, align 8, !tbaa !19
  %353 = load i64, ptr %19, align 8, !tbaa !19
  %354 = sub nsw i64 %353, 1
  %355 = icmp sle i64 %352, %354
  br i1 %355, label %356, label %373

356:                                              ; preds = %351
  %357 = load ptr, ptr %9, align 8, !tbaa !5
  %358 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %357, i32 0, i32 2
  %359 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %358, i32 0, i32 4
  %360 = load ptr, ptr %359, align 8, !tbaa !22
  %361 = load i64, ptr %11, align 8, !tbaa !19
  %362 = getelementptr inbounds i64, ptr %360, i64 %361
  %363 = load i64, ptr %362, align 8, !tbaa !19
  %364 = load ptr, ptr %9, align 8, !tbaa !5
  %365 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %364, i32 0, i32 4
  %366 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %365, i32 0, i32 4
  %367 = load ptr, ptr %366, align 8, !tbaa !22
  %368 = load i64, ptr %11, align 8, !tbaa !19
  %369 = getelementptr inbounds i64, ptr %367, i64 %368
  store i64 %363, ptr %369, align 8, !tbaa !19
  br label %370

370:                                              ; preds = %356
  %371 = load i64, ptr %11, align 8, !tbaa !19
  %372 = add nsw i64 %371, 1
  store i64 %372, ptr %11, align 8, !tbaa !19
  br label %351, !llvm.loop !30

373:                                              ; preds = %351
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %374

374:                                              ; preds = %560, %373
  %375 = load i64, ptr %11, align 8, !tbaa !19
  %376 = load i64, ptr %19, align 8, !tbaa !19
  %377 = sub nsw i64 %376, 1
  %378 = icmp sle i64 %375, %377
  br i1 %378, label %379, label %563

379:                                              ; preds = %374
  %380 = load i8, ptr %7, align 1, !tbaa !9, !range !20, !noundef !21
  %381 = trunc i8 %380 to i1
  br i1 %381, label %382, label %471

382:                                              ; preds = %379
  %383 = load ptr, ptr %6, align 8, !tbaa !5
  %384 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %383, i32 0, i32 3
  %385 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %384, i32 0, i32 4
  %386 = load ptr, ptr %385, align 8, !tbaa !22
  %387 = load i64, ptr %11, align 8, !tbaa !19
  %388 = getelementptr inbounds i64, ptr %386, i64 %387
  %389 = load i64, ptr %388, align 8, !tbaa !19
  store i64 %389, ptr %14, align 8, !tbaa !19
  %390 = load ptr, ptr %6, align 8, !tbaa !5
  %391 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %390, i32 0, i32 2
  %392 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %391, i32 0, i32 4
  %393 = load ptr, ptr %392, align 8, !tbaa !22
  %394 = load i64, ptr %11, align 8, !tbaa !19
  %395 = add nsw i64 %394, 1
  %396 = getelementptr inbounds i64, ptr %393, i64 %395
  %397 = load i64, ptr %396, align 8, !tbaa !19
  %398 = sub nsw i64 %397, 1
  store i64 %398, ptr %15, align 8, !tbaa !19
  %399 = load i64, ptr %14, align 8, !tbaa !19
  store i64 %399, ptr %13, align 8, !tbaa !19
  br label %400

400:                                              ; preds = %467, %382
  %401 = load i64, ptr %13, align 8, !tbaa !19
  %402 = load i64, ptr %15, align 8, !tbaa !19
  %403 = icmp sle i64 %401, %402
  br i1 %403, label %404, label %470

404:                                              ; preds = %400
  %405 = load ptr, ptr %6, align 8, !tbaa !5
  %406 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %405, i32 0, i32 1
  %407 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %406, i32 0, i32 4
  %408 = load ptr, ptr %407, align 8, !tbaa !22
  %409 = load i64, ptr %13, align 8, !tbaa !19
  %410 = getelementptr inbounds i64, ptr %408, i64 %409
  %411 = load i64, ptr %410, align 8, !tbaa !19
  store i64 %411, ptr %12, align 8, !tbaa !19
  %412 = load ptr, ptr %8, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %412, i32 0, i32 4
  %414 = load ptr, ptr %413, align 8, !tbaa !22
  %415 = load i64, ptr %11, align 8, !tbaa !19
  %416 = getelementptr inbounds i64, ptr %414, i64 %415
  %417 = load i64, ptr %416, align 8, !tbaa !19
  store i64 %417, ptr %16, align 8, !tbaa !19
  %418 = load ptr, ptr %8, align 8, !tbaa !5
  %419 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %418, i32 0, i32 4
  %420 = load ptr, ptr %419, align 8, !tbaa !22
  %421 = load i64, ptr %12, align 8, !tbaa !19
  %422 = getelementptr inbounds i64, ptr %420, i64 %421
  %423 = load i64, ptr %422, align 8, !tbaa !19
  store i64 %423, ptr %17, align 8, !tbaa !19
  %424 = load i64, ptr %17, align 8, !tbaa !19
  %425 = load i64, ptr %16, align 8, !tbaa !19
  %426 = icmp slt i64 %424, %425
  br i1 %426, label %427, label %431

427:                                              ; preds = %404
  %428 = load i64, ptr %16, align 8, !tbaa !19
  store i64 %428, ptr %18, align 8, !tbaa !19
  %429 = load i64, ptr %17, align 8, !tbaa !19
  store i64 %429, ptr %16, align 8, !tbaa !19
  %430 = load i64, ptr %18, align 8, !tbaa !19
  store i64 %430, ptr %17, align 8, !tbaa !19
  br label %431

431:                                              ; preds = %427, %404
  %432 = load ptr, ptr %9, align 8, !tbaa !5
  %433 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %432, i32 0, i32 4
  %434 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %433, i32 0, i32 4
  %435 = load ptr, ptr %434, align 8, !tbaa !22
  %436 = load i64, ptr %16, align 8, !tbaa !19
  %437 = getelementptr inbounds i64, ptr %435, i64 %436
  %438 = load i64, ptr %437, align 8, !tbaa !19
  store i64 %438, ptr %20, align 8, !tbaa !19
  %439 = load i64, ptr %17, align 8, !tbaa !19
  %440 = load ptr, ptr %9, align 8, !tbaa !5
  %441 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %440, i32 0, i32 1
  %442 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %441, i32 0, i32 4
  %443 = load ptr, ptr %442, align 8, !tbaa !22
  %444 = load i64, ptr %20, align 8, !tbaa !19
  %445 = getelementptr inbounds i64, ptr %443, i64 %444
  store i64 %439, ptr %445, align 8, !tbaa !19
  %446 = load ptr, ptr %6, align 8, !tbaa !5
  %447 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %446, i32 0, i32 0
  %448 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %447, i32 0, i32 4
  %449 = load ptr, ptr %448, align 8, !tbaa !22
  %450 = load i64, ptr %13, align 8, !tbaa !19
  %451 = getelementptr inbounds double, ptr %449, i64 %450
  %452 = load double, ptr %451, align 8, !tbaa !31
  %453 = load ptr, ptr %9, align 8, !tbaa !5
  %454 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %453, i32 0, i32 0
  %455 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %454, i32 0, i32 4
  %456 = load ptr, ptr %455, align 8, !tbaa !22
  %457 = load i64, ptr %20, align 8, !tbaa !19
  %458 = getelementptr inbounds double, ptr %456, i64 %457
  store double %452, ptr %458, align 8, !tbaa !31
  %459 = load i64, ptr %20, align 8, !tbaa !19
  %460 = add nsw i64 %459, 1
  %461 = load ptr, ptr %9, align 8, !tbaa !5
  %462 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %461, i32 0, i32 4
  %463 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %462, i32 0, i32 4
  %464 = load ptr, ptr %463, align 8, !tbaa !22
  %465 = load i64, ptr %16, align 8, !tbaa !19
  %466 = getelementptr inbounds i64, ptr %464, i64 %465
  store i64 %460, ptr %466, align 8, !tbaa !19
  br label %467

467:                                              ; preds = %431
  %468 = load i64, ptr %13, align 8, !tbaa !19
  %469 = add nsw i64 %468, 1
  store i64 %469, ptr %13, align 8, !tbaa !19
  br label %400, !llvm.loop !33

470:                                              ; preds = %400
  br label %559

471:                                              ; preds = %379
  %472 = load ptr, ptr %6, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %472, i32 0, i32 2
  %474 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %473, i32 0, i32 4
  %475 = load ptr, ptr %474, align 8, !tbaa !22
  %476 = load i64, ptr %11, align 8, !tbaa !19
  %477 = getelementptr inbounds i64, ptr %475, i64 %476
  %478 = load i64, ptr %477, align 8, !tbaa !19
  store i64 %478, ptr %14, align 8, !tbaa !19
  %479 = load ptr, ptr %6, align 8, !tbaa !5
  %480 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %479, i32 0, i32 4
  %481 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %480, i32 0, i32 4
  %482 = load ptr, ptr %481, align 8, !tbaa !22
  %483 = load i64, ptr %11, align 8, !tbaa !19
  %484 = getelementptr inbounds i64, ptr %482, i64 %483
  %485 = load i64, ptr %484, align 8, !tbaa !19
  %486 = sub nsw i64 %485, 1
  store i64 %486, ptr %15, align 8, !tbaa !19
  %487 = load i64, ptr %14, align 8, !tbaa !19
  store i64 %487, ptr %13, align 8, !tbaa !19
  br label %488

488:                                              ; preds = %555, %471
  %489 = load i64, ptr %13, align 8, !tbaa !19
  %490 = load i64, ptr %15, align 8, !tbaa !19
  %491 = icmp sle i64 %489, %490
  br i1 %491, label %492, label %558

492:                                              ; preds = %488
  %493 = load ptr, ptr %6, align 8, !tbaa !5
  %494 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %493, i32 0, i32 1
  %495 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %494, i32 0, i32 4
  %496 = load ptr, ptr %495, align 8, !tbaa !22
  %497 = load i64, ptr %13, align 8, !tbaa !19
  %498 = getelementptr inbounds i64, ptr %496, i64 %497
  %499 = load i64, ptr %498, align 8, !tbaa !19
  store i64 %499, ptr %12, align 8, !tbaa !19
  %500 = load ptr, ptr %8, align 8, !tbaa !5
  %501 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %500, i32 0, i32 4
  %502 = load ptr, ptr %501, align 8, !tbaa !22
  %503 = load i64, ptr %11, align 8, !tbaa !19
  %504 = getelementptr inbounds i64, ptr %502, i64 %503
  %505 = load i64, ptr %504, align 8, !tbaa !19
  store i64 %505, ptr %16, align 8, !tbaa !19
  %506 = load ptr, ptr %8, align 8, !tbaa !5
  %507 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %506, i32 0, i32 4
  %508 = load ptr, ptr %507, align 8, !tbaa !22
  %509 = load i64, ptr %12, align 8, !tbaa !19
  %510 = getelementptr inbounds i64, ptr %508, i64 %509
  %511 = load i64, ptr %510, align 8, !tbaa !19
  store i64 %511, ptr %17, align 8, !tbaa !19
  %512 = load i64, ptr %17, align 8, !tbaa !19
  %513 = load i64, ptr %16, align 8, !tbaa !19
  %514 = icmp sgt i64 %512, %513
  br i1 %514, label %515, label %519

515:                                              ; preds = %492
  %516 = load i64, ptr %16, align 8, !tbaa !19
  store i64 %516, ptr %18, align 8, !tbaa !19
  %517 = load i64, ptr %17, align 8, !tbaa !19
  store i64 %517, ptr %16, align 8, !tbaa !19
  %518 = load i64, ptr %18, align 8, !tbaa !19
  store i64 %518, ptr %17, align 8, !tbaa !19
  br label %519

519:                                              ; preds = %515, %492
  %520 = load ptr, ptr %9, align 8, !tbaa !5
  %521 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %520, i32 0, i32 4
  %522 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %521, i32 0, i32 4
  %523 = load ptr, ptr %522, align 8, !tbaa !22
  %524 = load i64, ptr %16, align 8, !tbaa !19
  %525 = getelementptr inbounds i64, ptr %523, i64 %524
  %526 = load i64, ptr %525, align 8, !tbaa !19
  store i64 %526, ptr %20, align 8, !tbaa !19
  %527 = load i64, ptr %17, align 8, !tbaa !19
  %528 = load ptr, ptr %9, align 8, !tbaa !5
  %529 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %528, i32 0, i32 1
  %530 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %529, i32 0, i32 4
  %531 = load ptr, ptr %530, align 8, !tbaa !22
  %532 = load i64, ptr %20, align 8, !tbaa !19
  %533 = getelementptr inbounds i64, ptr %531, i64 %532
  store i64 %527, ptr %533, align 8, !tbaa !19
  %534 = load ptr, ptr %6, align 8, !tbaa !5
  %535 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %534, i32 0, i32 0
  %536 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %535, i32 0, i32 4
  %537 = load ptr, ptr %536, align 8, !tbaa !22
  %538 = load i64, ptr %13, align 8, !tbaa !19
  %539 = getelementptr inbounds double, ptr %537, i64 %538
  %540 = load double, ptr %539, align 8, !tbaa !31
  %541 = load ptr, ptr %9, align 8, !tbaa !5
  %542 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %541, i32 0, i32 0
  %543 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %542, i32 0, i32 4
  %544 = load ptr, ptr %543, align 8, !tbaa !22
  %545 = load i64, ptr %20, align 8, !tbaa !19
  %546 = getelementptr inbounds double, ptr %544, i64 %545
  store double %540, ptr %546, align 8, !tbaa !31
  %547 = load i64, ptr %20, align 8, !tbaa !19
  %548 = add nsw i64 %547, 1
  %549 = load ptr, ptr %9, align 8, !tbaa !5
  %550 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %549, i32 0, i32 4
  %551 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %550, i32 0, i32 4
  %552 = load ptr, ptr %551, align 8, !tbaa !22
  %553 = load i64, ptr %16, align 8, !tbaa !19
  %554 = getelementptr inbounds i64, ptr %552, i64 %553
  store i64 %548, ptr %554, align 8, !tbaa !19
  br label %555

555:                                              ; preds = %519
  %556 = load i64, ptr %13, align 8, !tbaa !19
  %557 = add nsw i64 %556, 1
  store i64 %557, ptr %13, align 8, !tbaa !19
  br label %488, !llvm.loop !34

558:                                              ; preds = %488
  br label %559

559:                                              ; preds = %558, %470
  br label %560

560:                                              ; preds = %559
  %561 = load i64, ptr %11, align 8, !tbaa !19
  %562 = add nsw i64 %561, 1
  store i64 %562, ptr %11, align 8, !tbaa !19
  br label %374, !llvm.loop !35

563:                                              ; preds = %374
  store i64 0, ptr %11, align 8, !tbaa !19
  br label %564

564:                                              ; preds = %598, %563
  %565 = load i64, ptr %11, align 8, !tbaa !19
  %566 = load i64, ptr %19, align 8, !tbaa !19
  %567 = sub nsw i64 %566, 1
  %568 = icmp sle i64 %565, %567
  br i1 %568, label %569, label %601

569:                                              ; preds = %564
  %570 = load ptr, ptr %9, align 8, !tbaa !5
  %571 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %570, i32 0, i32 1
  %572 = load ptr, ptr %9, align 8, !tbaa !5
  %573 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %572, i32 0, i32 0
  %574 = load ptr, ptr %9, align 8, !tbaa !5
  %575 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %574, i32 0, i32 2
  %576 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %575, i32 0, i32 4
  %577 = load ptr, ptr %576, align 8, !tbaa !22
  %578 = load i64, ptr %11, align 8, !tbaa !19
  %579 = getelementptr inbounds i64, ptr %577, i64 %578
  %580 = load i64, ptr %579, align 8, !tbaa !19
  %581 = load ptr, ptr %9, align 8, !tbaa !5
  %582 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %581, i32 0, i32 2
  %583 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %582, i32 0, i32 4
  %584 = load ptr, ptr %583, align 8, !tbaa !22
  %585 = load i64, ptr %11, align 8, !tbaa !19
  %586 = add nsw i64 %585, 1
  %587 = getelementptr inbounds i64, ptr %584, i64 %586
  %588 = load i64, ptr %587, align 8, !tbaa !19
  %589 = load ptr, ptr %9, align 8, !tbaa !5
  %590 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %589, i32 0, i32 2
  %591 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %590, i32 0, i32 4
  %592 = load ptr, ptr %591, align 8, !tbaa !22
  %593 = load i64, ptr %11, align 8, !tbaa !19
  %594 = getelementptr inbounds i64, ptr %592, i64 %593
  %595 = load i64, ptr %594, align 8, !tbaa !19
  %596 = sub nsw i64 %588, %595
  %597 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl15tagsortmiddleirEPNS_9ae_vectorES1_llPNS_8ae_stateE(ptr noundef %571, ptr noundef %573, i64 noundef %580, i64 noundef %596, ptr noundef %597)
  br label %598

598:                                              ; preds = %569
  %599 = load i64, ptr %11, align 8, !tbaa !19
  %600 = add nsw i64 %599, 1
  store i64 %600, ptr %11, align 8, !tbaa !19
  br label %564, !llvm.loop !36

601:                                              ; preds = %564
  %602 = load ptr, ptr %9, align 8, !tbaa !5
  %603 = load ptr, ptr %10, align 8, !tbaa !5
  call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %602, ptr noundef %603)
  call void @llvm.lifetime.end.p0(i64 1, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  ret void
}

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

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

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

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

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

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

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

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


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

@.str.237 = external hidden unnamed_addr constant [73 x i8], align 1
@.str.238 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.239 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.240 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.241 = external hidden unnamed_addr constant [45 x i8], align 1

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl20sparsesymmpermtblbufEPKNS_12sparsematrixEbPKNS_9ae_vectorEPS0_PNS_8ae_stateE(ptr nocapture noundef readonly %0, i1 noundef zeroext %1, ptr nocapture noundef readonly %2, ptr noundef %3, ptr noundef %4) local_unnamed_addr #1 {
  %6 = getelementptr inbounds i8, ptr %0, i64 320
  %7 = load i64, ptr %6, align 8, !tbaa !5
  %8 = icmp eq i64 %7, 1
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %8, ptr noundef nonnull @.str.237, ptr noundef %4)
  %9 = load i64, ptr %2, align 8, !tbaa !14
  %10 = getelementptr inbounds i8, ptr %0, i64 336
  %11 = load i64, ptr %10, align 8, !tbaa !15
  %12 = icmp sge i64 %9, %11
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %12, ptr noundef nonnull @.str.238, ptr noundef %4)
  %13 = getelementptr inbounds i8, ptr %0, i64 328
  %14 = load i64, ptr %13, align 8, !tbaa !16
  %15 = load i64, ptr %10, align 8, !tbaa !15
  %16 = icmp eq i64 %14, %15
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %16, ptr noundef nonnull @.str.239, ptr noundef %4)
  %17 = load i64, ptr %10, align 8, !tbaa !15
  %.not.not236 = icmp sgt i64 %17, 0
  br i1 %.not.not236, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %5
  %18 = getelementptr inbounds i8, ptr %2, i64 56
  %xtraiter = and i64 %17, 3
  %19 = icmp ult i64 %17, 4
  br i1 %19, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.new

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

20:                                               ; preds = %.critedge327, %.lr.ph.new
  %.0238 = phi i1 [ true, %.lr.ph.new ], [ %38, %.critedge327 ]
  %.0196237 = phi i64 [ 0, %.lr.ph.new ], [ %39, %.critedge327 ]
  %niter = phi i64 [ 0, %.lr.ph.new ], [ %niter.next.3, %.critedge327 ]
  br i1 %.0238, label %21, label %.critedge327

21:                                               ; preds = %20
  %22 = load ptr, ptr %18, align 8, !tbaa !17
  %23 = getelementptr inbounds i64, ptr %22, i64 %.0196237
  %24 = load i64, ptr %23, align 8, !tbaa !18
  %spec.select = icmp ult i64 %24, %17
  br i1 %spec.select, label %.critedge, label %.critedge327

.critedge:                                        ; preds = %21
  %25 = or disjoint i64 %.0196237, 1
  %26 = load ptr, ptr %18, align 8, !tbaa !17
  %27 = getelementptr inbounds i64, ptr %26, i64 %25
  %28 = load i64, ptr %27, align 8, !tbaa !18
  %spec.select.1 = icmp ult i64 %28, %17
  br i1 %spec.select.1, label %.critedge326, label %.critedge327

.critedge326:                                     ; preds = %.critedge
  %29 = or disjoint i64 %.0196237, 2
  %30 = load ptr, ptr %18, align 8, !tbaa !17
  %31 = getelementptr inbounds i64, ptr %30, i64 %29
  %32 = load i64, ptr %31, align 8, !tbaa !18
  %spec.select.2 = icmp ult i64 %32, %17
  br i1 %spec.select.2, label %33, label %.critedge327

33:                                               ; preds = %.critedge326
  %34 = or disjoint i64 %.0196237, 3
  %35 = load ptr, ptr %18, align 8, !tbaa !17
  %36 = getelementptr inbounds i64, ptr %35, i64 %34
  %37 = load i64, ptr %36, align 8, !tbaa !18
  %spec.select.3 = icmp ult i64 %37, %17
  br label %.critedge327

.critedge327:                                     ; preds = %.critedge, %20, %21, %33, %.critedge326
  %38 = phi i1 [ false, %.critedge326 ], [ %spec.select.3, %33 ], [ false, %21 ], [ false, %20 ], [ false, %.critedge ]
  %39 = add nuw nsw i64 %.0196237, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %20, !llvm.loop !19

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.critedge327, %.lr.ph
  %.lcssa.ph = phi i1 [ poison, %.lr.ph ], [ %38, %.critedge327 ]
  %.0238.unr = phi i1 [ true, %.lr.ph ], [ %38, %.critedge327 ]
  %.0196237.unr = phi i64 [ 0, %.lr.ph ], [ %39, %.critedge327 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.loopexit.unr-lcssa, %44
  %.0238.epil = phi i1 [ %45, %44 ], [ %.0238.unr, %._crit_edge.loopexit.unr-lcssa ]
  %.0196237.epil = phi i64 [ %46, %44 ], [ %.0196237.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %44 ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  br i1 %.0238.epil, label %40, label %44

40:                                               ; preds = %.epil.preheader
  %41 = load ptr, ptr %18, align 8, !tbaa !17
  %42 = getelementptr inbounds i64, ptr %41, i64 %.0196237.epil
  %43 = load i64, ptr %42, align 8, !tbaa !18
  %spec.select.epil = icmp ult i64 %43, %17
  br label %44

44:                                               ; preds = %40, %.epil.preheader
  %45 = phi i1 [ false, %.epil.preheader ], [ %spec.select.epil, %40 ]
  %46 = add nuw nsw i64 %.0196237.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 %._crit_edge, label %.epil.preheader, !llvm.loop !21

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %44, %5
  %.0.lcssa = phi i1 [ true, %5 ], [ %.lcssa.ph, %._crit_edge.loopexit.unr-lcssa ], [ %45, %44 ]
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %.0.lcssa, ptr noundef nonnull @.str.240, ptr noundef %4)
  %47 = load i64, ptr %10, align 8, !tbaa !15
  %48 = getelementptr inbounds i8, ptr %0, i64 352
  %49 = load i64, ptr %48, align 8, !tbaa !23
  %50 = getelementptr inbounds i8, ptr %0, i64 184
  %51 = load ptr, ptr %50, align 8, !tbaa !17
  %52 = getelementptr inbounds i64, ptr %51, i64 %47
  %53 = load i64, ptr %52, align 8, !tbaa !18
  %54 = icmp eq i64 %49, %53
  tail call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %54, ptr noundef nonnull @.str.241, ptr noundef %4)
  %55 = getelementptr inbounds i8, ptr %3, i64 320
  store i64 1, ptr %55, align 8, !tbaa !5
  %56 = getelementptr inbounds i8, ptr %3, i64 336
  store i64 %47, ptr %56, align 8, !tbaa !15
  %57 = getelementptr inbounds i8, ptr %3, i64 328
  store i64 %47, ptr %57, align 8, !tbaa !16
  %58 = getelementptr inbounds i8, ptr %3, i64 192
  tail call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %58, i64 noundef %47, ptr noundef %4)
  %59 = getelementptr inbounds i8, ptr %3, i64 256
  tail call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %59, i64 noundef %47, ptr noundef %4)
  tail call void @_ZN11alglib_impl5isetvEllPNS_9ae_vectorEPNS_8ae_stateE(i64 noundef %47, i64 noundef 0, ptr noundef nonnull %58, ptr noundef %4)
  %.not.not219247 = icmp sgt i64 %47, 0
  br i1 %.not.not219247, label %.lr.ph250, label %._crit_edge251

.lr.ph250:                                        ; preds = %._crit_edge
  %60 = getelementptr inbounds i8, ptr %0, i64 312
  %61 = getelementptr inbounds i8, ptr %2, i64 56
  %62 = getelementptr inbounds i8, ptr %0, i64 120
  %63 = getelementptr inbounds i8, ptr %3, i64 248
  %64 = getelementptr inbounds i8, ptr %0, i64 248
  br i1 %1, label %.lr.ph250.split.us, label %.lr.ph250.split

.lr.ph250.split.us:                               ; preds = %.lr.ph250, %.loopexit234.us
  %.1248.us = phi i64 [ %110, %.loopexit234.us ], [ 0, %.lr.ph250 ]
  %65 = load ptr, ptr %64, align 8, !tbaa !17
  %66 = getelementptr inbounds i64, ptr %65, i64 %.1248.us
  %67 = load i64, ptr %66, align 8, !tbaa !18
  %68 = load ptr, ptr %50, align 8, !tbaa !17
  %69 = getelementptr inbounds i64, ptr %68, i64 %.1248.us
  %70 = getelementptr inbounds i8, ptr %69, i64 8
  %71 = load i64, ptr %70, align 8, !tbaa !18
  %72 = load ptr, ptr %61, align 8, !tbaa !17
  %73 = getelementptr inbounds i64, ptr %72, i64 %.1248.us
  %74 = load i64, ptr %73, align 8, !tbaa !18
  %.not.not227243.us = icmp slt i64 %67, %71
  br i1 %.not.not227243.us, label %.lr.ph246.us.preheader, label %.loopexit234.us

.lr.ph246.us.preheader:                           ; preds = %.lr.ph250.split.us
  %75 = sub i64 %71, %67
  %.neg320 = add i64 %67, 1
  %xtraiter306 = and i64 %75, 1
  %lcmp.mod307.not = icmp eq i64 %xtraiter306, 0
  br i1 %lcmp.mod307.not, label %.lr.ph246.us.prol.loopexit, label %.lr.ph246.us.prol

.lr.ph246.us.prol:                                ; preds = %.lr.ph246.us.preheader
  %76 = load ptr, ptr %61, align 8, !tbaa !17
  %77 = load ptr, ptr %62, align 8, !tbaa !17
  %78 = getelementptr inbounds i64, ptr %77, i64 %67
  %79 = load i64, ptr %78, align 8, !tbaa !18
  %80 = getelementptr inbounds i64, ptr %76, i64 %79
  %81 = load i64, ptr %80, align 8, !tbaa !18
  %82 = load ptr, ptr %63, align 8, !tbaa !17
  %..prol = tail call i64 @llvm.smin.i64(i64 %81, i64 %74)
  %83 = getelementptr inbounds i64, ptr %82, i64 %..prol
  %84 = load i64, ptr %83, align 8, !tbaa !18
  %85 = add nsw i64 %84, 1
  store i64 %85, ptr %83, align 8, !tbaa !18
  %86 = add nsw i64 %67, 1
  br label %.lr.ph246.us.prol.loopexit

.lr.ph246.us.prol.loopexit:                       ; preds = %.lr.ph246.us.prol, %.lr.ph246.us.preheader
  %.0201244.us.unr = phi i64 [ %67, %.lr.ph246.us.preheader ], [ %86, %.lr.ph246.us.prol ]
  %87 = icmp eq i64 %71, %.neg320
  br i1 %87, label %.loopexit234.us, label %.lr.ph246.us

.lr.ph246.us:                                     ; preds = %.lr.ph246.us.prol.loopexit, %.lr.ph246.us
  %.0201244.us = phi i64 [ %109, %.lr.ph246.us ], [ %.0201244.us.unr, %.lr.ph246.us.prol.loopexit ]
  %88 = load ptr, ptr %61, align 8, !tbaa !17
  %89 = load ptr, ptr %62, align 8, !tbaa !17
  %90 = getelementptr inbounds i64, ptr %89, i64 %.0201244.us
  %91 = load i64, ptr %90, align 8, !tbaa !18
  %92 = getelementptr inbounds i64, ptr %88, i64 %91
  %93 = load i64, ptr %92, align 8, !tbaa !18
  %94 = load ptr, ptr %63, align 8, !tbaa !17
  %. = tail call i64 @llvm.smin.i64(i64 %93, i64 %74)
  %95 = getelementptr inbounds i64, ptr %94, i64 %.
  %96 = load i64, ptr %95, align 8, !tbaa !18
  %97 = add nsw i64 %96, 1
  store i64 %97, ptr %95, align 8, !tbaa !18
  %98 = load ptr, ptr %61, align 8, !tbaa !17
  %99 = load ptr, ptr %62, align 8, !tbaa !17
  %100 = getelementptr i64, ptr %99, i64 %.0201244.us
  %101 = getelementptr i8, ptr %100, i64 8
  %102 = load i64, ptr %101, align 8, !tbaa !18
  %103 = getelementptr inbounds i64, ptr %98, i64 %102
  %104 = load i64, ptr %103, align 8, !tbaa !18
  %105 = load ptr, ptr %63, align 8, !tbaa !17
  %..1 = tail call i64 @llvm.smin.i64(i64 %104, i64 %74)
  %106 = getelementptr inbounds i64, ptr %105, i64 %..1
  %107 = load i64, ptr %106, align 8, !tbaa !18
  %108 = add nsw i64 %107, 1
  store i64 %108, ptr %106, align 8, !tbaa !18
  %109 = add nsw i64 %.0201244.us, 2
  %exitcond281.not.1 = icmp eq i64 %109, %71
  br i1 %exitcond281.not.1, label %.loopexit234.us, label %.lr.ph246.us, !llvm.loop !24

.loopexit234.us:                                  ; preds = %.lr.ph246.us.prol.loopexit, %.lr.ph246.us, %.lr.ph250.split.us
  %110 = add nuw nsw i64 %.1248.us, 1
  %exitcond282.not = icmp eq i64 %110, %47
  br i1 %exitcond282.not, label %._crit_edge251, label %.lr.ph250.split.us, !llvm.loop !25

.lr.ph250.split:                                  ; preds = %.lr.ph250, %.loopexit235
  %.1248 = phi i64 [ %155, %.loopexit235 ], [ 0, %.lr.ph250 ]
  %111 = load ptr, ptr %50, align 8, !tbaa !17
  %112 = getelementptr inbounds i64, ptr %111, i64 %.1248
  %113 = load i64, ptr %112, align 8, !tbaa !18
  %114 = load ptr, ptr %60, align 8, !tbaa !17
  %115 = getelementptr inbounds i64, ptr %114, i64 %.1248
  %116 = load i64, ptr %115, align 8, !tbaa !18
  %117 = load ptr, ptr %61, align 8, !tbaa !17
  %118 = getelementptr inbounds i64, ptr %117, i64 %.1248
  %119 = load i64, ptr %118, align 8, !tbaa !18
  %.not.not226239 = icmp slt i64 %113, %116
  br i1 %.not.not226239, label %.lr.ph242.preheader, label %.loopexit235

.lr.ph242.preheader:                              ; preds = %.lr.ph250.split
  %120 = sub i64 %116, %113
  %.neg = add i64 %113, 1
  %xtraiter304 = and i64 %120, 1
  %lcmp.mod305.not = icmp eq i64 %xtraiter304, 0
  br i1 %lcmp.mod305.not, label %.lr.ph242.prol.loopexit, label %.lr.ph242.prol

.lr.ph242.prol:                                   ; preds = %.lr.ph242.preheader
  %121 = load ptr, ptr %61, align 8, !tbaa !17
  %122 = load ptr, ptr %62, align 8, !tbaa !17
  %123 = getelementptr inbounds i64, ptr %122, i64 %113
  %124 = load i64, ptr %123, align 8, !tbaa !18
  %125 = getelementptr inbounds i64, ptr %121, i64 %124
  %126 = load i64, ptr %125, align 8, !tbaa !18
  %127 = load ptr, ptr %63, align 8, !tbaa !17
  %.298.prol = tail call i64 @llvm.smax.i64(i64 %126, i64 %119)
  %128 = getelementptr inbounds i64, ptr %127, i64 %.298.prol
  %129 = load i64, ptr %128, align 8, !tbaa !18
  %130 = add nsw i64 %129, 1
  store i64 %130, ptr %128, align 8, !tbaa !18
  %131 = add nsw i64 %113, 1
  br label %.lr.ph242.prol.loopexit

.lr.ph242.prol.loopexit:                          ; preds = %.lr.ph242.prol, %.lr.ph242.preheader
  %.1202240.unr = phi i64 [ %113, %.lr.ph242.preheader ], [ %131, %.lr.ph242.prol ]
  %132 = icmp eq i64 %116, %.neg
  br i1 %132, label %.loopexit235, label %.lr.ph242

.lr.ph242:                                        ; preds = %.lr.ph242.prol.loopexit, %.lr.ph242
  %.1202240 = phi i64 [ %154, %.lr.ph242 ], [ %.1202240.unr, %.lr.ph242.prol.loopexit ]
  %133 = load ptr, ptr %61, align 8, !tbaa !17
  %134 = load ptr, ptr %62, align 8, !tbaa !17
  %135 = getelementptr inbounds i64, ptr %134, i64 %.1202240
  %136 = load i64, ptr %135, align 8, !tbaa !18
  %137 = getelementptr inbounds i64, ptr %133, i64 %136
  %138 = load i64, ptr %137, align 8, !tbaa !18
  %139 = load ptr, ptr %63, align 8, !tbaa !17
  %.298 = tail call i64 @llvm.smax.i64(i64 %138, i64 %119)
  %140 = getelementptr inbounds i64, ptr %139, i64 %.298
  %141 = load i64, ptr %140, align 8, !tbaa !18
  %142 = add nsw i64 %141, 1
  store i64 %142, ptr %140, align 8, !tbaa !18
  %143 = load ptr, ptr %61, align 8, !tbaa !17
  %144 = load ptr, ptr %62, align 8, !tbaa !17
  %145 = getelementptr i64, ptr %144, i64 %.1202240
  %146 = getelementptr i8, ptr %145, i64 8
  %147 = load i64, ptr %146, align 8, !tbaa !18
  %148 = getelementptr inbounds i64, ptr %143, i64 %147
  %149 = load i64, ptr %148, align 8, !tbaa !18
  %150 = load ptr, ptr %63, align 8, !tbaa !17
  %.298.1 = tail call i64 @llvm.smax.i64(i64 %149, i64 %119)
  %151 = getelementptr inbounds i64, ptr %150, i64 %.298.1
  %152 = load i64, ptr %151, align 8, !tbaa !18
  %153 = add nsw i64 %152, 1
  store i64 %153, ptr %151, align 8, !tbaa !18
  %154 = add nsw i64 %.1202240, 2
  %exitcond279.not.1 = icmp eq i64 %154, %116
  br i1 %exitcond279.not.1, label %.loopexit235, label %.lr.ph242, !llvm.loop !26

.loopexit235:                                     ; preds = %.lr.ph242.prol.loopexit, %.lr.ph242, %.lr.ph250.split
  %155 = add nuw nsw i64 %.1248, 1
  %exitcond280.not = icmp eq i64 %155, %47
  br i1 %exitcond280.not, label %._crit_edge251, label %.lr.ph250.split, !llvm.loop !25

._crit_edge251:                                   ; preds = %.loopexit235, %.loopexit234.us, %._crit_edge
  %156 = getelementptr inbounds i8, ptr %3, i64 128
  %157 = add nsw i64 %47, 1
  tail call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %156, i64 noundef %157, ptr noundef %4)
  %158 = getelementptr inbounds i8, ptr %3, i64 184
  %159 = load ptr, ptr %158, align 8, !tbaa !17
  store i64 0, ptr %159, align 8, !tbaa !18
  br i1 %.not.not219247, label %.lr.ph255, label %._crit_edge256

.lr.ph255:                                        ; preds = %._crit_edge251
  %160 = getelementptr inbounds i8, ptr %3, i64 248
  %xtraiter309 = and i64 %47, 1
  %161 = icmp eq i64 %47, 1
  br i1 %161, label %._crit_edge256.loopexit.unr-lcssa, label %.lr.ph255.new

.lr.ph255.new:                                    ; preds = %.lr.ph255
  %unroll_iter312 = and i64 %47, 9223372036854775806
  br label %162

162:                                              ; preds = %162, %.lr.ph255.new
  %.2253 = phi i64 [ 0, %.lr.ph255.new ], [ %179, %162 ]
  %niter313 = phi i64 [ 0, %.lr.ph255.new ], [ %niter313.next.1, %162 ]
  %163 = load ptr, ptr %158, align 8, !tbaa !17
  %164 = getelementptr inbounds i64, ptr %163, i64 %.2253
  %165 = load i64, ptr %164, align 8, !tbaa !18
  %166 = load ptr, ptr %160, align 8, !tbaa !17
  %167 = getelementptr inbounds i64, ptr %166, i64 %.2253
  %168 = load i64, ptr %167, align 8, !tbaa !18
  %169 = add nsw i64 %168, %165
  %170 = or disjoint i64 %.2253, 1
  %171 = getelementptr inbounds i64, ptr %163, i64 %170
  store i64 %169, ptr %171, align 8, !tbaa !18
  %172 = load ptr, ptr %158, align 8, !tbaa !17
  %173 = getelementptr inbounds i64, ptr %172, i64 %170
  %174 = load i64, ptr %173, align 8, !tbaa !18
  %175 = load ptr, ptr %160, align 8, !tbaa !17
  %176 = getelementptr inbounds i64, ptr %175, i64 %170
  %177 = load i64, ptr %176, align 8, !tbaa !18
  %178 = add nsw i64 %177, %174
  %179 = add nuw nsw i64 %.2253, 2
  %180 = getelementptr inbounds i64, ptr %172, i64 %179
  store i64 %178, ptr %180, align 8, !tbaa !18
  %niter313.next.1 = add i64 %niter313, 2
  %niter313.ncmp.1 = icmp eq i64 %niter313.next.1, %unroll_iter312
  br i1 %niter313.ncmp.1, label %._crit_edge256.loopexit.unr-lcssa, label %162, !llvm.loop !27

._crit_edge256.loopexit.unr-lcssa:                ; preds = %162, %.lr.ph255
  %.2253.unr = phi i64 [ 0, %.lr.ph255 ], [ %179, %162 ]
  %lcmp.mod311.not = icmp eq i64 %xtraiter309, 0
  br i1 %lcmp.mod311.not, label %._crit_edge256, label %._crit_edge256.loopexit.epilog-lcssa

._crit_edge256.loopexit.epilog-lcssa:             ; preds = %._crit_edge256.loopexit.unr-lcssa
  %181 = load ptr, ptr %158, align 8, !tbaa !17
  %182 = getelementptr inbounds i64, ptr %181, i64 %.2253.unr
  %183 = load i64, ptr %182, align 8, !tbaa !18
  %184 = load ptr, ptr %160, align 8, !tbaa !17
  %185 = getelementptr inbounds i64, ptr %184, i64 %.2253.unr
  %186 = load i64, ptr %185, align 8, !tbaa !18
  %187 = add nsw i64 %186, %183
  %188 = getelementptr i64, ptr %181, i64 %.2253.unr
  %189 = getelementptr i8, ptr %188, i64 8
  store i64 %187, ptr %189, align 8, !tbaa !18
  br label %._crit_edge256

._crit_edge256:                                   ; preds = %._crit_edge256.loopexit.epilog-lcssa, %._crit_edge256.loopexit.unr-lcssa, %._crit_edge251
  %190 = load ptr, ptr %158, align 8, !tbaa !17
  %191 = getelementptr inbounds i64, ptr %190, i64 %47
  %192 = load i64, ptr %191, align 8, !tbaa !18
  %193 = getelementptr inbounds i8, ptr %3, i64 352
  store i64 %192, ptr %193, align 8, !tbaa !23
  %194 = getelementptr inbounds i8, ptr %3, i64 64
  tail call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %194, i64 noundef %192, ptr noundef %4)
  %195 = load i64, ptr %193, align 8, !tbaa !23
  tail call void @_ZN11alglib_impl23rvectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %3, i64 noundef %195, ptr noundef %4)
  br i1 %.not.not219247, label %.lr.ph260, label %._crit_edge276

.lr.ph260:                                        ; preds = %._crit_edge256
  %196 = getelementptr inbounds i8, ptr %3, i64 312
  %xtraiter315 = and i64 %47, 3
  %197 = icmp ult i64 %47, 4
  br i1 %197, label %.preheader233.unr-lcssa, label %.lr.ph260.new

.lr.ph260.new:                                    ; preds = %.lr.ph260
  %unroll_iter318 = and i64 %47, 9223372036854775804
  br label %242

.preheader233.unr-lcssa:                          ; preds = %242, %.lr.ph260
  %.3258.unr = phi i64 [ 0, %.lr.ph260 ], [ %266, %242 ]
  %lcmp.mod317.not = icmp eq i64 %xtraiter315, 0
  br i1 %lcmp.mod317.not, label %.preheader233, label %.epil.preheader314

.epil.preheader314:                               ; preds = %.preheader233.unr-lcssa, %.epil.preheader314
  %.3258.epil = phi i64 [ %203, %.epil.preheader314 ], [ %.3258.unr, %.preheader233.unr-lcssa ]
  %epil.iter316 = phi i64 [ %epil.iter316.next, %.epil.preheader314 ], [ 0, %.preheader233.unr-lcssa ]
  %198 = load ptr, ptr %158, align 8, !tbaa !17
  %199 = getelementptr inbounds i64, ptr %198, i64 %.3258.epil
  %200 = load i64, ptr %199, align 8, !tbaa !18
  %201 = load ptr, ptr %196, align 8, !tbaa !17
  %202 = getelementptr inbounds i64, ptr %201, i64 %.3258.epil
  store i64 %200, ptr %202, align 8, !tbaa !18
  %203 = add nuw nsw i64 %.3258.epil, 1
  %epil.iter316.next = add i64 %epil.iter316, 1
  %epil.iter316.cmp.not = icmp eq i64 %epil.iter316.next, %xtraiter315
  br i1 %epil.iter316.cmp.not, label %.preheader233, label %.epil.preheader314, !llvm.loop !28

.preheader233:                                    ; preds = %.epil.preheader314, %.preheader233.unr-lcssa
  br i1 %.not.not219247, label %.lr.ph272, label %._crit_edge276

.lr.ph272:                                        ; preds = %.preheader233
  %204 = getelementptr inbounds i8, ptr %0, i64 312
  %205 = getelementptr inbounds i8, ptr %0, i64 120
  %206 = getelementptr inbounds i8, ptr %2, i64 56
  %207 = getelementptr inbounds i8, ptr %3, i64 312
  %208 = getelementptr inbounds i8, ptr %3, i64 120
  %209 = getelementptr inbounds i8, ptr %0, i64 56
  %210 = getelementptr inbounds i8, ptr %3, i64 56
  %211 = getelementptr inbounds i8, ptr %0, i64 248
  br i1 %1, label %.lr.ph272.split.us, label %.lr.ph272.split

.lr.ph272.split.us:                               ; preds = %.lr.ph272, %.loopexit.us
  %.4270.us = phi i64 [ %241, %.loopexit.us ], [ 0, %.lr.ph272 ]
  %212 = load ptr, ptr %211, align 8, !tbaa !17
  %213 = getelementptr inbounds i64, ptr %212, i64 %.4270.us
  %214 = load i64, ptr %213, align 8, !tbaa !18
  %215 = load ptr, ptr %50, align 8, !tbaa !17
  %216 = getelementptr inbounds i64, ptr %215, i64 %.4270.us
  %217 = getelementptr inbounds i8, ptr %216, i64 8
  %218 = load i64, ptr %217, align 8, !tbaa !18
  %.not.not225265.us = icmp slt i64 %214, %218
  br i1 %.not.not225265.us, label %.lr.ph268.us, label %.loopexit.us

.lr.ph268.us:                                     ; preds = %.lr.ph272.split.us, %.lr.ph268.us
  %.2203266.us = phi i64 [ %240, %.lr.ph268.us ], [ %214, %.lr.ph272.split.us ]
  %219 = load ptr, ptr %205, align 8, !tbaa !17
  %220 = getelementptr inbounds i64, ptr %219, i64 %.2203266.us
  %221 = load i64, ptr %220, align 8, !tbaa !18
  %222 = load ptr, ptr %206, align 8, !tbaa !17
  %223 = getelementptr inbounds i64, ptr %222, i64 %.4270.us
  %224 = load i64, ptr %223, align 8, !tbaa !18
  %225 = getelementptr inbounds i64, ptr %222, i64 %221
  %226 = load i64, ptr %225, align 8, !tbaa !18
  %spec.select228.us = tail call i64 @llvm.smin.i64(i64 %226, i64 %224)
  %spec.select229.us = tail call i64 @llvm.smax.i64(i64 %226, i64 %224)
  %227 = load ptr, ptr %207, align 8, !tbaa !17
  %228 = getelementptr inbounds i64, ptr %227, i64 %spec.select228.us
  %229 = load i64, ptr %228, align 8, !tbaa !18
  %230 = load ptr, ptr %208, align 8, !tbaa !17
  %231 = getelementptr inbounds i64, ptr %230, i64 %229
  store i64 %spec.select229.us, ptr %231, align 8, !tbaa !18
  %232 = load ptr, ptr %209, align 8, !tbaa !17
  %233 = getelementptr inbounds double, ptr %232, i64 %.2203266.us
  %234 = load double, ptr %233, align 8, !tbaa !29
  %235 = load ptr, ptr %210, align 8, !tbaa !17
  %236 = getelementptr inbounds double, ptr %235, i64 %229
  store double %234, ptr %236, align 8, !tbaa !29
  %237 = add nsw i64 %229, 1
  %238 = load ptr, ptr %207, align 8, !tbaa !17
  %239 = getelementptr inbounds i64, ptr %238, i64 %spec.select228.us
  store i64 %237, ptr %239, align 8, !tbaa !18
  %240 = add nsw i64 %.2203266.us, 1
  %exitcond287.not = icmp eq i64 %240, %218
  br i1 %exitcond287.not, label %.loopexit.us, label %.lr.ph268.us, !llvm.loop !31

.loopexit.us:                                     ; preds = %.lr.ph268.us, %.lr.ph272.split.us
  %241 = add nuw nsw i64 %.4270.us, 1
  %exitcond288.not = icmp eq i64 %241, %47
  br i1 %exitcond288.not, label %.preheader, label %.lr.ph272.split.us, !llvm.loop !32

242:                                              ; preds = %242, %.lr.ph260.new
  %.3258 = phi i64 [ 0, %.lr.ph260.new ], [ %266, %242 ]
  %niter319 = phi i64 [ 0, %.lr.ph260.new ], [ %niter319.next.3, %242 ]
  %243 = load ptr, ptr %158, align 8, !tbaa !17
  %244 = getelementptr inbounds i64, ptr %243, i64 %.3258
  %245 = load i64, ptr %244, align 8, !tbaa !18
  %246 = load ptr, ptr %196, align 8, !tbaa !17
  %247 = getelementptr inbounds i64, ptr %246, i64 %.3258
  store i64 %245, ptr %247, align 8, !tbaa !18
  %248 = or disjoint i64 %.3258, 1
  %249 = load ptr, ptr %158, align 8, !tbaa !17
  %250 = getelementptr inbounds i64, ptr %249, i64 %248
  %251 = load i64, ptr %250, align 8, !tbaa !18
  %252 = load ptr, ptr %196, align 8, !tbaa !17
  %253 = getelementptr inbounds i64, ptr %252, i64 %248
  store i64 %251, ptr %253, align 8, !tbaa !18
  %254 = or disjoint i64 %.3258, 2
  %255 = load ptr, ptr %158, align 8, !tbaa !17
  %256 = getelementptr inbounds i64, ptr %255, i64 %254
  %257 = load i64, ptr %256, align 8, !tbaa !18
  %258 = load ptr, ptr %196, align 8, !tbaa !17
  %259 = getelementptr inbounds i64, ptr %258, i64 %254
  store i64 %257, ptr %259, align 8, !tbaa !18
  %260 = or disjoint i64 %.3258, 3
  %261 = load ptr, ptr %158, align 8, !tbaa !17
  %262 = getelementptr inbounds i64, ptr %261, i64 %260
  %263 = load i64, ptr %262, align 8, !tbaa !18
  %264 = load ptr, ptr %196, align 8, !tbaa !17
  %265 = getelementptr inbounds i64, ptr %264, i64 %260
  store i64 %263, ptr %265, align 8, !tbaa !18
  %266 = add nuw nsw i64 %.3258, 4
  %niter319.next.3 = add i64 %niter319, 4
  %niter319.ncmp.3 = icmp eq i64 %niter319.next.3, %unroll_iter318
  br i1 %niter319.ncmp.3, label %.preheader233.unr-lcssa, label %242, !llvm.loop !33

.preheader:                                       ; preds = %.loopexit232, %.loopexit.us
  br i1 %.not.not219247, label %.lr.ph275, label %._crit_edge276

.lr.ph272.split:                                  ; preds = %.lr.ph272, %.loopexit232
  %.4270 = phi i64 [ %295, %.loopexit232 ], [ 0, %.lr.ph272 ]
  %267 = load ptr, ptr %50, align 8, !tbaa !17
  %268 = getelementptr inbounds i64, ptr %267, i64 %.4270
  %269 = load i64, ptr %268, align 8, !tbaa !18
  %270 = load ptr, ptr %204, align 8, !tbaa !17
  %271 = getelementptr inbounds i64, ptr %270, i64 %.4270
  %272 = load i64, ptr %271, align 8, !tbaa !18
  %.not.not224261 = icmp slt i64 %269, %272
  br i1 %.not.not224261, label %.lr.ph264, label %.loopexit232

.lr.ph264:                                        ; preds = %.lr.ph272.split, %.lr.ph264
  %.3204262 = phi i64 [ %294, %.lr.ph264 ], [ %269, %.lr.ph272.split ]
  %273 = load ptr, ptr %205, align 8, !tbaa !17
  %274 = getelementptr inbounds i64, ptr %273, i64 %.3204262
  %275 = load i64, ptr %274, align 8, !tbaa !18
  %276 = load ptr, ptr %206, align 8, !tbaa !17
  %277 = getelementptr inbounds i64, ptr %276, i64 %.4270
  %278 = load i64, ptr %277, align 8, !tbaa !18
  %279 = getelementptr inbounds i64, ptr %276, i64 %275
  %280 = load i64, ptr %279, align 8, !tbaa !18
  %spec.select230 = tail call i64 @llvm.smax.i64(i64 %280, i64 %278)
  %spec.select231 = tail call i64 @llvm.smin.i64(i64 %280, i64 %278)
  %281 = load ptr, ptr %207, align 8, !tbaa !17
  %282 = getelementptr inbounds i64, ptr %281, i64 %spec.select230
  %283 = load i64, ptr %282, align 8, !tbaa !18
  %284 = load ptr, ptr %208, align 8, !tbaa !17
  %285 = getelementptr inbounds i64, ptr %284, i64 %283
  store i64 %spec.select231, ptr %285, align 8, !tbaa !18
  %286 = load ptr, ptr %209, align 8, !tbaa !17
  %287 = getelementptr inbounds double, ptr %286, i64 %.3204262
  %288 = load double, ptr %287, align 8, !tbaa !29
  %289 = load ptr, ptr %210, align 8, !tbaa !17
  %290 = getelementptr inbounds double, ptr %289, i64 %283
  store double %288, ptr %290, align 8, !tbaa !29
  %291 = add nsw i64 %283, 1
  %292 = load ptr, ptr %207, align 8, !tbaa !17
  %293 = getelementptr inbounds i64, ptr %292, i64 %spec.select230
  store i64 %291, ptr %293, align 8, !tbaa !18
  %294 = add nsw i64 %.3204262, 1
  %exitcond285.not = icmp eq i64 %294, %272
  br i1 %exitcond285.not, label %.loopexit232, label %.lr.ph264, !llvm.loop !34

.loopexit232:                                     ; preds = %.lr.ph264, %.lr.ph272.split
  %295 = add nuw nsw i64 %.4270, 1
  %exitcond286.not = icmp eq i64 %295, %47
  br i1 %exitcond286.not, label %.preheader, label %.lr.ph272.split, !llvm.loop !32

.lr.ph275:                                        ; preds = %.preheader, %.lr.ph275
  %.5274 = phi i64 [ %299, %.lr.ph275 ], [ 0, %.preheader ]
  %296 = load ptr, ptr %158, align 8, !tbaa !17
  %297 = getelementptr inbounds i64, ptr %296, i64 %.5274
  %298 = load i64, ptr %297, align 8, !tbaa !18
  %299 = add nuw nsw i64 %.5274, 1
  %300 = getelementptr inbounds i64, ptr %296, i64 %299
  %301 = load i64, ptr %300, align 8, !tbaa !18
  %302 = sub nsw i64 %301, %298
  tail call void @_ZN11alglib_impl15tagsortmiddleirEPNS_9ae_vectorES1_llPNS_8ae_stateE(ptr noundef nonnull %194, ptr noundef %3, i64 noundef %298, i64 noundef %302, ptr noundef %4)
  %exitcond289.not = icmp eq i64 %299, %47
  br i1 %exitcond289.not, label %._crit_edge276, label %.lr.ph275, !llvm.loop !35

._crit_edge276:                                   ; preds = %.lr.ph275, %._crit_edge256, %.preheader233, %.preheader
  tail call void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %3, ptr noundef %4)
  ret void
}

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

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

declare void @_ZN11alglib_impl15sparseinitduidxEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef, ptr noundef) local_unnamed_addr #0

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

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

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

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

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

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

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


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