; 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::hqrndstate" = type { i64, i64, i64 }
%"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::sparsebuffers" = type { %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::ae_vector", %"struct.alglib_impl::sparsematrix" }
%"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.253 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.254 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.255 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.256 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.257 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.258 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.259 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.260 = external hidden unnamed_addr constant [85 x i8], align 1
@.str.261 = external hidden unnamed_addr constant [55 x i8], align 1

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN11alglib_impl17sparsegetdiagonalEPNS_12sparsematrixElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl15sparseenumerateEPNS_12sparsematrixEPlS2_S2_S2_PdPNS_8ae_stateE(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl21sparserewriteexistingEPNS_12sparsematrixElldPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, double noundef, ptr noundef) #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl11sparseissksEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef, ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN11alglib_impl14sparsegetnrowsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef, ptr noundef) #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN11alglib_impl14sparsegetncolsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef, ptr noundef) #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl21sparsecholeskyskylineEPNS_12sparsematrixElbPNS_8ae_stateE(ptr noundef, i64 noundef, i1 noundef zeroext, ptr noundef) #3

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

declare noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) #2

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

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

declare void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef) #2

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef, double noundef) #2

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

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

declare noundef i64 @_ZN11alglib_impl13hqrnduniformiEPNS_10hqrndstateElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) #2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11alglib_impl15sparsecholeskyxEPNS_12sparsematrixElbPNS_9ae_vectorES3_lllPNS_13sparsebuffersES1_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i1 noundef zeroext %2, ptr noundef %3, ptr noundef %4, i64 noundef %5, i64 noundef %6, i64 noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10) #3 {
  %12 = alloca i1, align 1
  %13 = alloca ptr, align 8
  %14 = alloca i64, align 8
  %15 = alloca i8, align 1
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca %"struct.alglib_impl::ae_frame", align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca double, align 8
  %31 = alloca %"struct.alglib_impl::hqrndstate", align 8
  %32 = alloca i8, align 1
  %33 = alloca i32, align 4
  store ptr %0, ptr %13, align 8, !tbaa !5
  store i64 %1, ptr %14, align 8, !tbaa !9
  %34 = zext i1 %2 to i8
  store i8 %34, ptr %15, align 1, !tbaa !11
  store ptr %3, ptr %16, align 8, !tbaa !5
  store ptr %4, ptr %17, align 8, !tbaa !5
  store i64 %5, ptr %18, align 8, !tbaa !9
  store i64 %6, ptr %19, align 8, !tbaa !9
  store i64 %7, ptr %20, align 8, !tbaa !9
  store ptr %8, ptr %21, align 8, !tbaa !5
  store ptr %9, ptr %22, align 8, !tbaa !5
  store ptr %10, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 32, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 1, ptr %32) #5
  %35 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %35, ptr noundef %24)
  call void @llvm.memset.p0.i64(ptr align 8 %31, i8 0, i64 24, i1 false)
  %36 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl16_hqrndstate_initEPvPNS_8ae_stateEb(ptr noundef %31, ptr noundef %36, i1 noundef zeroext true)
  %37 = load i64, ptr %14, align 8, !tbaa !9
  %38 = icmp sge i64 %37, 0
  %39 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %38, ptr noundef @.str.253, ptr noundef %39)
  %40 = load ptr, ptr %13, align 8, !tbaa !5
  %41 = load ptr, ptr %23, align 8, !tbaa !5
  %42 = call noundef i64 @_ZN11alglib_impl14sparsegetnrowsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %40, ptr noundef %41)
  %43 = load i64, ptr %14, align 8, !tbaa !9
  %44 = icmp sge i64 %42, %43
  %45 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %44, ptr noundef @.str.254, ptr noundef %45)
  %46 = load ptr, ptr %13, align 8, !tbaa !5
  %47 = load ptr, ptr %23, align 8, !tbaa !5
  %48 = call noundef i64 @_ZN11alglib_impl14sparsegetncolsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %46, ptr noundef %47)
  %49 = load i64, ptr %14, align 8, !tbaa !9
  %50 = icmp sge i64 %48, %49
  %51 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %50, ptr noundef @.str.255, ptr noundef %51)
  %52 = load i64, ptr %18, align 8, !tbaa !9
  %53 = icmp sge i64 %52, -3
  br i1 %53, label %54, label %57

54:                                               ; preds = %11
  %55 = load i64, ptr %18, align 8, !tbaa !9
  %56 = icmp sle i64 %55, 0
  br label %57

57:                                               ; preds = %54, %11
  %58 = phi i1 [ false, %11 ], [ %56, %54 ]
  %59 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %58, ptr noundef @.str.256, ptr noundef %59)
  %60 = load i64, ptr %19, align 8, !tbaa !9
  %61 = icmp sge i64 %60, 0
  br i1 %61, label %62, label %65

62:                                               ; preds = %57
  %63 = load i64, ptr %19, align 8, !tbaa !9
  %64 = icmp sle i64 %63, 2
  br label %65

65:                                               ; preds = %62, %57
  %66 = phi i1 [ false, %57 ], [ %64, %62 ]
  %67 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %66, ptr noundef @.str.257, ptr noundef %67)
  %68 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl14hqrndrandomizeEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef %31, ptr noundef %68)
  store i8 0, ptr %32, align 1, !tbaa !11
  %69 = load i64, ptr %14, align 8, !tbaa !9
  %70 = icmp slt i64 %69, 1
  br i1 %70, label %71, label %75

71:                                               ; preds = %65
  %72 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %72)
  %73 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %74 = trunc i8 %73 to i1
  store i1 %74, ptr %12, align 1
  store i32 1, ptr %33, align 4
  br label %742

75:                                               ; preds = %65
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %76

76:                                               ; preds = %92, %75
  %77 = load i64, ptr %25, align 8, !tbaa !9
  %78 = load i64, ptr %14, align 8, !tbaa !9
  %79 = sub nsw i64 %78, 1
  %80 = icmp sle i64 %77, %79
  br i1 %80, label %81, label %95

81:                                               ; preds = %76
  %82 = load ptr, ptr %13, align 8, !tbaa !5
  %83 = load i64, ptr %25, align 8, !tbaa !9
  %84 = load ptr, ptr %23, align 8, !tbaa !5
  %85 = call noundef double @_ZN11alglib_impl17sparsegetdiagonalEPNS_12sparsematrixElPNS_8ae_stateE(ptr noundef %82, i64 noundef %83, ptr noundef %84)
  %86 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %85, double noundef 0.000000e+00)
  br i1 %86, label %87, label %91

87:                                               ; preds = %81
  %88 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %88)
  %89 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %90 = trunc i8 %89 to i1
  store i1 %90, ptr %12, align 1
  store i32 1, ptr %33, align 4
  br label %742

91:                                               ; preds = %81
  br label %92

92:                                               ; preds = %91
  %93 = load i64, ptr %25, align 8, !tbaa !9
  %94 = add nsw i64 %93, 1
  store i64 %94, ptr %25, align 8, !tbaa !9
  br label %76, !llvm.loop !15

95:                                               ; preds = %76
  %96 = load i64, ptr %18, align 8, !tbaa !9
  %97 = icmp eq i64 %96, 0
  br i1 %97, label %98, label %99

98:                                               ; preds = %95
  store i64 -1, ptr %18, align 8, !tbaa !9
  br label %99

99:                                               ; preds = %98, %95
  %100 = load ptr, ptr %13, align 8, !tbaa !5
  %101 = load ptr, ptr %23, align 8, !tbaa !5
  %102 = call noundef zeroext i1 @_ZN11alglib_impl11sparseissksEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %100, ptr noundef %101)
  br i1 %102, label %103, label %104

103:                                              ; preds = %99
  store i64 -1, ptr %18, align 8, !tbaa !9
  br label %104

104:                                              ; preds = %103, %99
  %105 = load i64, ptr %18, align 8, !tbaa !9
  %106 = icmp eq i64 %105, -3
  br i1 %106, label %107, label %182

107:                                              ; preds = %104
  %108 = load ptr, ptr %16, align 8, !tbaa !5
  %109 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %108, i32 0, i32 0
  %110 = load i64, ptr %109, align 8, !tbaa !17
  %111 = load i64, ptr %14, align 8, !tbaa !9
  %112 = icmp sge i64 %110, %111
  %113 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %112, ptr noundef @.str.258, ptr noundef %113)
  %114 = load ptr, ptr %17, align 8, !tbaa !5
  %115 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %114, i32 0, i32 0
  %116 = load i64, ptr %115, align 8, !tbaa !17
  %117 = load i64, ptr %14, align 8, !tbaa !9
  %118 = icmp sge i64 %116, %117
  %119 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %118, ptr noundef @.str.258, ptr noundef %119)
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %120

120:                                              ; preds = %178, %107
  %121 = load i64, ptr %25, align 8, !tbaa !9
  %122 = load i64, ptr %14, align 8, !tbaa !9
  %123 = sub nsw i64 %122, 1
  %124 = icmp sle i64 %121, %123
  br i1 %124, label %125, label %181

125:                                              ; preds = %120
  %126 = load ptr, ptr %16, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %126, i32 0, i32 4
  %128 = load ptr, ptr %127, align 8, !tbaa !20
  %129 = load i64, ptr %25, align 8, !tbaa !9
  %130 = getelementptr inbounds i64, ptr %128, i64 %129
  %131 = load i64, ptr %130, align 8, !tbaa !9
  %132 = icmp sge i64 %131, 0
  br i1 %132, label %133, label %142

133:                                              ; preds = %125
  %134 = load ptr, ptr %16, align 8, !tbaa !5
  %135 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %134, i32 0, i32 4
  %136 = load ptr, ptr %135, align 8, !tbaa !20
  %137 = load i64, ptr %25, align 8, !tbaa !9
  %138 = getelementptr inbounds i64, ptr %136, i64 %137
  %139 = load i64, ptr %138, align 8, !tbaa !9
  %140 = load i64, ptr %14, align 8, !tbaa !9
  %141 = icmp slt i64 %139, %140
  br label %142

142:                                              ; preds = %133, %125
  %143 = phi i1 [ false, %125 ], [ %141, %133 ]
  %144 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %143, ptr noundef @.str.259, ptr noundef %144)
  %145 = load ptr, ptr %17, align 8, !tbaa !5
  %146 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %145, i32 0, i32 4
  %147 = load ptr, ptr %146, align 8, !tbaa !20
  %148 = load i64, ptr %25, align 8, !tbaa !9
  %149 = getelementptr inbounds i64, ptr %147, i64 %148
  %150 = load i64, ptr %149, align 8, !tbaa !9
  %151 = icmp sge i64 %150, 0
  br i1 %151, label %152, label %161

152:                                              ; preds = %142
  %153 = load ptr, ptr %17, align 8, !tbaa !5
  %154 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %153, i32 0, i32 4
  %155 = load ptr, ptr %154, align 8, !tbaa !20
  %156 = load i64, ptr %25, align 8, !tbaa !9
  %157 = getelementptr inbounds i64, ptr %155, i64 %156
  %158 = load i64, ptr %157, align 8, !tbaa !9
  %159 = load i64, ptr %14, align 8, !tbaa !9
  %160 = icmp slt i64 %158, %159
  br label %161

161:                                              ; preds = %152, %142
  %162 = phi i1 [ false, %142 ], [ %160, %152 ]
  %163 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %162, ptr noundef @.str.259, ptr noundef %163)
  %164 = load ptr, ptr %17, align 8, !tbaa !5
  %165 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %164, i32 0, i32 4
  %166 = load ptr, ptr %165, align 8, !tbaa !20
  %167 = load ptr, ptr %16, align 8, !tbaa !5
  %168 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %167, i32 0, i32 4
  %169 = load ptr, ptr %168, align 8, !tbaa !20
  %170 = load i64, ptr %25, align 8, !tbaa !9
  %171 = getelementptr inbounds i64, ptr %169, i64 %170
  %172 = load i64, ptr %171, align 8, !tbaa !9
  %173 = getelementptr inbounds i64, ptr %166, i64 %172
  %174 = load i64, ptr %173, align 8, !tbaa !9
  %175 = load i64, ptr %25, align 8, !tbaa !9
  %176 = icmp eq i64 %174, %175
  %177 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %176, ptr noundef @.str.260, ptr noundef %177)
  br label %178

178:                                              ; preds = %161
  %179 = load i64, ptr %25, align 8, !tbaa !9
  %180 = add nsw i64 %179, 1
  store i64 %180, ptr %25, align 8, !tbaa !9
  br label %120, !llvm.loop !21

181:                                              ; preds = %120
  br label %182

182:                                              ; preds = %181, %104
  %183 = load i64, ptr %18, align 8, !tbaa !9
  %184 = icmp eq i64 %183, -2
  br i1 %184, label %185, label %274

185:                                              ; preds = %182
  %186 = load ptr, ptr %16, align 8, !tbaa !5
  %187 = load i64, ptr %14, align 8, !tbaa !9
  %188 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %186, i64 noundef %187, ptr noundef %188)
  %189 = load ptr, ptr %17, align 8, !tbaa !5
  %190 = load i64, ptr %14, align 8, !tbaa !9
  %191 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %189, i64 noundef %190, ptr noundef %191)
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %192

192:                                              ; preds = %204, %185
  %193 = load i64, ptr %25, align 8, !tbaa !9
  %194 = load i64, ptr %14, align 8, !tbaa !9
  %195 = sub nsw i64 %194, 1
  %196 = icmp sle i64 %193, %195
  br i1 %196, label %197, label %207

197:                                              ; preds = %192
  %198 = load i64, ptr %25, align 8, !tbaa !9
  %199 = load ptr, ptr %16, align 8, !tbaa !5
  %200 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %199, i32 0, i32 4
  %201 = load ptr, ptr %200, align 8, !tbaa !20
  %202 = load i64, ptr %25, align 8, !tbaa !9
  %203 = getelementptr inbounds i64, ptr %201, i64 %202
  store i64 %198, ptr %203, align 8, !tbaa !9
  br label %204

204:                                              ; preds = %197
  %205 = load i64, ptr %25, align 8, !tbaa !9
  %206 = add nsw i64 %205, 1
  store i64 %206, ptr %25, align 8, !tbaa !9
  br label %192, !llvm.loop !22

207:                                              ; preds = %192
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %208

208:                                              ; preds = %249, %207
  %209 = load i64, ptr %25, align 8, !tbaa !9
  %210 = load i64, ptr %14, align 8, !tbaa !9
  %211 = sub nsw i64 %210, 1
  %212 = icmp sle i64 %209, %211
  br i1 %212, label %213, label %252

213:                                              ; preds = %208
  %214 = load i64, ptr %25, align 8, !tbaa !9
  %215 = load i64, ptr %14, align 8, !tbaa !9
  %216 = load i64, ptr %25, align 8, !tbaa !9
  %217 = sub nsw i64 %215, %216
  %218 = load ptr, ptr %23, align 8, !tbaa !5
  %219 = call noundef i64 @_ZN11alglib_impl13hqrnduniformiEPNS_10hqrndstateElPNS_8ae_stateE(ptr noundef %31, i64 noundef %217, ptr noundef %218)
  %220 = add nsw i64 %214, %219
  store i64 %220, ptr %26, align 8, !tbaa !9
  %221 = load i64, ptr %26, align 8, !tbaa !9
  %222 = load i64, ptr %25, align 8, !tbaa !9
  %223 = icmp ne i64 %221, %222
  br i1 %223, label %224, label %248

224:                                              ; preds = %213
  %225 = load ptr, ptr %16, align 8, !tbaa !5
  %226 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %225, i32 0, i32 4
  %227 = load ptr, ptr %226, align 8, !tbaa !20
  %228 = load i64, ptr %25, align 8, !tbaa !9
  %229 = getelementptr inbounds i64, ptr %227, i64 %228
  %230 = load i64, ptr %229, align 8, !tbaa !9
  store i64 %230, ptr %27, align 8, !tbaa !9
  %231 = load ptr, ptr %16, align 8, !tbaa !5
  %232 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %231, i32 0, i32 4
  %233 = load ptr, ptr %232, align 8, !tbaa !20
  %234 = load i64, ptr %26, align 8, !tbaa !9
  %235 = getelementptr inbounds i64, ptr %233, i64 %234
  %236 = load i64, ptr %235, align 8, !tbaa !9
  %237 = load ptr, ptr %16, align 8, !tbaa !5
  %238 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %237, i32 0, i32 4
  %239 = load ptr, ptr %238, align 8, !tbaa !20
  %240 = load i64, ptr %25, align 8, !tbaa !9
  %241 = getelementptr inbounds i64, ptr %239, i64 %240
  store i64 %236, ptr %241, align 8, !tbaa !9
  %242 = load i64, ptr %27, align 8, !tbaa !9
  %243 = load ptr, ptr %16, align 8, !tbaa !5
  %244 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %243, i32 0, i32 4
  %245 = load ptr, ptr %244, align 8, !tbaa !20
  %246 = load i64, ptr %26, align 8, !tbaa !9
  %247 = getelementptr inbounds i64, ptr %245, i64 %246
  store i64 %242, ptr %247, align 8, !tbaa !9
  br label %248

248:                                              ; preds = %224, %213
  br label %249

249:                                              ; preds = %248
  %250 = load i64, ptr %25, align 8, !tbaa !9
  %251 = add nsw i64 %250, 1
  store i64 %251, ptr %25, align 8, !tbaa !9
  br label %208, !llvm.loop !23

252:                                              ; preds = %208
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %253

253:                                              ; preds = %270, %252
  %254 = load i64, ptr %25, align 8, !tbaa !9
  %255 = load i64, ptr %14, align 8, !tbaa !9
  %256 = sub nsw i64 %255, 1
  %257 = icmp sle i64 %254, %256
  br i1 %257, label %258, label %273

258:                                              ; preds = %253
  %259 = load i64, ptr %25, align 8, !tbaa !9
  %260 = load ptr, ptr %17, align 8, !tbaa !5
  %261 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %260, i32 0, i32 4
  %262 = load ptr, ptr %261, align 8, !tbaa !20
  %263 = load ptr, ptr %16, align 8, !tbaa !5
  %264 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %263, i32 0, i32 4
  %265 = load ptr, ptr %264, align 8, !tbaa !20
  %266 = load i64, ptr %25, align 8, !tbaa !9
  %267 = getelementptr inbounds i64, ptr %265, i64 %266
  %268 = load i64, ptr %267, align 8, !tbaa !9
  %269 = getelementptr inbounds i64, ptr %262, i64 %268
  store i64 %259, ptr %269, align 8, !tbaa !9
  br label %270

270:                                              ; preds = %258
  %271 = load i64, ptr %25, align 8, !tbaa !9
  %272 = add nsw i64 %271, 1
  store i64 %272, ptr %25, align 8, !tbaa !9
  br label %253, !llvm.loop !24

273:                                              ; preds = %253
  br label %274

274:                                              ; preds = %273, %182
  %275 = load i64, ptr %18, align 8, !tbaa !9
  %276 = icmp eq i64 %275, -1
  br i1 %276, label %277, label %306

277:                                              ; preds = %274
  %278 = load ptr, ptr %16, align 8, !tbaa !5
  %279 = load i64, ptr %14, align 8, !tbaa !9
  %280 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %278, i64 noundef %279, ptr noundef %280)
  %281 = load ptr, ptr %17, align 8, !tbaa !5
  %282 = load i64, ptr %14, align 8, !tbaa !9
  %283 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %281, i64 noundef %282, ptr noundef %283)
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %284

284:                                              ; preds = %302, %277
  %285 = load i64, ptr %25, align 8, !tbaa !9
  %286 = load i64, ptr %14, align 8, !tbaa !9
  %287 = sub nsw i64 %286, 1
  %288 = icmp sle i64 %285, %287
  br i1 %288, label %289, label %305

289:                                              ; preds = %284
  %290 = load i64, ptr %25, align 8, !tbaa !9
  %291 = load ptr, ptr %16, align 8, !tbaa !5
  %292 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %291, i32 0, i32 4
  %293 = load ptr, ptr %292, align 8, !tbaa !20
  %294 = load i64, ptr %25, align 8, !tbaa !9
  %295 = getelementptr inbounds i64, ptr %293, i64 %294
  store i64 %290, ptr %295, align 8, !tbaa !9
  %296 = load i64, ptr %25, align 8, !tbaa !9
  %297 = load ptr, ptr %17, align 8, !tbaa !5
  %298 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %297, i32 0, i32 4
  %299 = load ptr, ptr %298, align 8, !tbaa !20
  %300 = load i64, ptr %25, align 8, !tbaa !9
  %301 = getelementptr inbounds i64, ptr %299, i64 %300
  store i64 %296, ptr %301, align 8, !tbaa !9
  br label %302

302:                                              ; preds = %289
  %303 = load i64, ptr %25, align 8, !tbaa !9
  %304 = add nsw i64 %303, 1
  store i64 %304, ptr %25, align 8, !tbaa !9
  br label %284, !llvm.loop !25

305:                                              ; preds = %284
  br label %306

306:                                              ; preds = %305, %274
  %307 = load i64, ptr %19, align 8, !tbaa !9
  %308 = icmp eq i64 %307, 0
  br i1 %308, label %309, label %310

309:                                              ; preds = %306
  store i64 1, ptr %19, align 8, !tbaa !9
  br label %310

310:                                              ; preds = %309, %306
  %311 = load ptr, ptr %13, align 8, !tbaa !5
  %312 = load ptr, ptr %23, align 8, !tbaa !5
  %313 = call noundef zeroext i1 @_ZN11alglib_impl11sparseissksEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %311, ptr noundef %312)
  br i1 %313, label %317, label %314

314:                                              ; preds = %310
  %315 = load i64, ptr %20, align 8, !tbaa !9
  %316 = icmp eq i64 %315, 2
  br i1 %316, label %317, label %318

317:                                              ; preds = %314, %310
  store i64 2, ptr %19, align 8, !tbaa !9
  br label %318

318:                                              ; preds = %317, %314
  store i64 2, ptr %19, align 8, !tbaa !9
  %319 = load i64, ptr %19, align 8, !tbaa !9
  %320 = icmp eq i64 %319, 2
  br i1 %320, label %321, label %737

321:                                              ; preds = %318
  %322 = load i64, ptr %20, align 8, !tbaa !9
  %323 = icmp ne i64 %322, 2
  br i1 %323, label %324, label %350

324:                                              ; preds = %321
  %325 = load ptr, ptr %13, align 8, !tbaa !5
  %326 = load i64, ptr %14, align 8, !tbaa !9
  %327 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %328 = trunc i8 %327 to i1
  %329 = load ptr, ptr %16, align 8, !tbaa !5
  %330 = load ptr, ptr %17, align 8, !tbaa !5
  %331 = load i64, ptr %19, align 8, !tbaa !9
  %332 = load ptr, ptr %21, align 8, !tbaa !5
  %333 = load ptr, ptr %21, align 8, !tbaa !5
  %334 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %333, i32 0, i32 2
  %335 = load ptr, ptr %23, align 8, !tbaa !5
  %336 = call noundef zeroext i1 @_ZN11alglib_impl15sparsecholeskyxEPNS_12sparsematrixElbPNS_9ae_vectorES3_lllPNS_13sparsebuffersES1_PNS_8ae_stateE(ptr noundef %325, i64 noundef %326, i1 noundef zeroext %328, ptr noundef %329, ptr noundef %330, i64 noundef -3, i64 noundef %331, i64 noundef 2, ptr noundef %332, ptr noundef %334, ptr noundef %335)
  %337 = zext i1 %336 to i8
  store i8 %337, ptr %32, align 1, !tbaa !11
  %338 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %339 = trunc i8 %338 to i1
  br i1 %339, label %340, label %346

340:                                              ; preds = %324
  %341 = load ptr, ptr %21, align 8, !tbaa !5
  %342 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %341, i32 0, i32 2
  %343 = load i64, ptr %20, align 8, !tbaa !9
  %344 = load ptr, ptr %22, align 8, !tbaa !5
  %345 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl15sparsecopytobufEPNS_12sparsematrixElS1_PNS_8ae_stateE(ptr noundef %342, i64 noundef %343, ptr noundef %344, ptr noundef %345)
  br label %346

346:                                              ; preds = %340, %324
  %347 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %347)
  %348 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %349 = trunc i8 %348 to i1
  store i1 %349, ptr %12, align 1
  store i32 1, ptr %33, align 4
  br label %742

350:                                              ; preds = %321
  %351 = load ptr, ptr %13, align 8, !tbaa !5
  %352 = load ptr, ptr %23, align 8, !tbaa !5
  %353 = call noundef zeroext i1 @_ZN11alglib_impl11sparseissksEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %351, ptr noundef %352)
  br i1 %353, label %354, label %541

354:                                              ; preds = %350
  %355 = load i64, ptr %18, align 8, !tbaa !9
  %356 = icmp eq i64 %355, -1
  br i1 %356, label %357, label %541

357:                                              ; preds = %354
  %358 = load ptr, ptr %21, align 8, !tbaa !5
  %359 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %358, i32 0, i32 0
  %360 = load i64, ptr %14, align 8, !tbaa !9
  %361 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %359, i64 noundef %360, ptr noundef %361)
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %362

362:                                              ; preds = %374, %357
  %363 = load i64, ptr %25, align 8, !tbaa !9
  %364 = load i64, ptr %14, align 8, !tbaa !9
  %365 = sub nsw i64 %364, 1
  %366 = icmp sle i64 %363, %365
  br i1 %366, label %367, label %377

367:                                              ; preds = %362
  %368 = load ptr, ptr %21, align 8, !tbaa !5
  %369 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %368, i32 0, i32 0
  %370 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %369, i32 0, i32 4
  %371 = load ptr, ptr %370, align 8, !tbaa !20
  %372 = load i64, ptr %25, align 8, !tbaa !9
  %373 = getelementptr inbounds i64, ptr %371, i64 %372
  store i64 0, ptr %373, align 8, !tbaa !9
  br label %374

374:                                              ; preds = %367
  %375 = load i64, ptr %25, align 8, !tbaa !9
  %376 = add nsw i64 %375, 1
  store i64 %376, ptr %25, align 8, !tbaa !9
  br label %362, !llvm.loop !26

377:                                              ; preds = %362
  %378 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %379 = trunc i8 %378 to i1
  br i1 %379, label %380, label %467

380:                                              ; preds = %377
  %381 = load i64, ptr %14, align 8, !tbaa !9
  %382 = load i64, ptr %14, align 8, !tbaa !9
  %383 = load ptr, ptr %21, align 8, !tbaa !5
  %384 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %383, i32 0, i32 0
  %385 = load ptr, ptr %13, align 8, !tbaa !5
  %386 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %385, i32 0, i32 4
  %387 = load ptr, ptr %22, align 8, !tbaa !5
  %388 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl18sparsecreatesksbufEllPNS_9ae_vectorES1_PNS_12sparsematrixEPNS_8ae_stateE(i64 noundef %381, i64 noundef %382, ptr noundef %384, ptr noundef %386, ptr noundef %387, ptr noundef %388)
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %389

389:                                              ; preds = %463, %380
  %390 = load i64, ptr %25, align 8, !tbaa !9
  %391 = load i64, ptr %14, align 8, !tbaa !9
  %392 = sub nsw i64 %391, 1
  %393 = icmp sle i64 %390, %392
  br i1 %393, label %394, label %466

394:                                              ; preds = %389
  %395 = load ptr, ptr %13, align 8, !tbaa !5
  %396 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %395, i32 0, i32 2
  %397 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %396, i32 0, i32 4
  %398 = load ptr, ptr %397, align 8, !tbaa !20
  %399 = load i64, ptr %25, align 8, !tbaa !9
  %400 = add nsw i64 %399, 1
  %401 = getelementptr inbounds i64, ptr %398, i64 %400
  %402 = load i64, ptr %401, align 8, !tbaa !9
  %403 = load ptr, ptr %13, align 8, !tbaa !5
  %404 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %403, i32 0, i32 4
  %405 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %404, i32 0, i32 4
  %406 = load ptr, ptr %405, align 8, !tbaa !20
  %407 = load i64, ptr %25, align 8, !tbaa !9
  %408 = getelementptr inbounds i64, ptr %406, i64 %407
  %409 = load i64, ptr %408, align 8, !tbaa !9
  %410 = sub nsw i64 %402, %409
  %411 = sub nsw i64 %410, 1
  store i64 %411, ptr %28, align 8, !tbaa !9
  %412 = load ptr, ptr %13, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %412, i32 0, i32 2
  %414 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %413, i32 0, i32 4
  %415 = load ptr, ptr %414, align 8, !tbaa !20
  %416 = load i64, ptr %25, align 8, !tbaa !9
  %417 = add nsw i64 %416, 1
  %418 = getelementptr inbounds i64, ptr %415, i64 %417
  %419 = load i64, ptr %418, align 8, !tbaa !9
  %420 = sub nsw i64 %419, 1
  store i64 %420, ptr %29, align 8, !tbaa !9
  %421 = load ptr, ptr %22, align 8, !tbaa !5
  %422 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %421, i32 0, i32 2
  %423 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %422, i32 0, i32 4
  %424 = load ptr, ptr %423, align 8, !tbaa !20
  %425 = load i64, ptr %25, align 8, !tbaa !9
  %426 = add nsw i64 %425, 1
  %427 = getelementptr inbounds i64, ptr %424, i64 %426
  %428 = load i64, ptr %427, align 8, !tbaa !9
  %429 = load ptr, ptr %22, align 8, !tbaa !5
  %430 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %429, i32 0, i32 4
  %431 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %430, i32 0, i32 4
  %432 = load ptr, ptr %431, align 8, !tbaa !20
  %433 = load i64, ptr %25, align 8, !tbaa !9
  %434 = getelementptr inbounds i64, ptr %432, i64 %433
  %435 = load i64, ptr %434, align 8, !tbaa !9
  %436 = sub nsw i64 %428, %435
  %437 = sub nsw i64 %436, 1
  store i64 %437, ptr %27, align 8, !tbaa !9
  %438 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %438, ptr %26, align 8, !tbaa !9
  br label %439

439:                                              ; preds = %459, %394
  %440 = load i64, ptr %26, align 8, !tbaa !9
  %441 = load i64, ptr %29, align 8, !tbaa !9
  %442 = icmp sle i64 %440, %441
  br i1 %442, label %443, label %462

443:                                              ; preds = %439
  %444 = load ptr, ptr %13, align 8, !tbaa !5
  %445 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %444, i32 0, i32 0
  %446 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %445, i32 0, i32 4
  %447 = load ptr, ptr %446, align 8, !tbaa !20
  %448 = load i64, ptr %26, align 8, !tbaa !9
  %449 = getelementptr inbounds double, ptr %447, i64 %448
  %450 = load double, ptr %449, align 8, !tbaa !27
  %451 = load ptr, ptr %22, align 8, !tbaa !5
  %452 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %451, i32 0, i32 0
  %453 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %452, i32 0, i32 4
  %454 = load ptr, ptr %453, align 8, !tbaa !20
  %455 = load i64, ptr %27, align 8, !tbaa !9
  %456 = getelementptr inbounds double, ptr %454, i64 %455
  store double %450, ptr %456, align 8, !tbaa !27
  %457 = load i64, ptr %27, align 8, !tbaa !9
  %458 = add nsw i64 %457, 1
  store i64 %458, ptr %27, align 8, !tbaa !9
  br label %459

459:                                              ; preds = %443
  %460 = load i64, ptr %26, align 8, !tbaa !9
  %461 = add nsw i64 %460, 1
  store i64 %461, ptr %26, align 8, !tbaa !9
  br label %439, !llvm.loop !29

462:                                              ; preds = %439
  br label %463

463:                                              ; preds = %462
  %464 = load i64, ptr %25, align 8, !tbaa !9
  %465 = add nsw i64 %464, 1
  store i64 %465, ptr %25, align 8, !tbaa !9
  br label %389, !llvm.loop !30

466:                                              ; preds = %389
  br label %540

467:                                              ; preds = %377
  %468 = load i64, ptr %14, align 8, !tbaa !9
  %469 = load i64, ptr %14, align 8, !tbaa !9
  %470 = load ptr, ptr %13, align 8, !tbaa !5
  %471 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %470, i32 0, i32 3
  %472 = load ptr, ptr %21, align 8, !tbaa !5
  %473 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %472, i32 0, i32 0
  %474 = load ptr, ptr %22, align 8, !tbaa !5
  %475 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl18sparsecreatesksbufEllPNS_9ae_vectorES1_PNS_12sparsematrixEPNS_8ae_stateE(i64 noundef %468, i64 noundef %469, ptr noundef %471, ptr noundef %473, ptr noundef %474, ptr noundef %475)
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %476

476:                                              ; preds = %536, %467
  %477 = load i64, ptr %25, align 8, !tbaa !9
  %478 = load i64, ptr %14, align 8, !tbaa !9
  %479 = sub nsw i64 %478, 1
  %480 = icmp sle i64 %477, %479
  br i1 %480, label %481, label %539

481:                                              ; preds = %476
  %482 = load ptr, ptr %13, align 8, !tbaa !5
  %483 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %482, i32 0, i32 2
  %484 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %483, i32 0, i32 4
  %485 = load ptr, ptr %484, align 8, !tbaa !20
  %486 = load i64, ptr %25, align 8, !tbaa !9
  %487 = getelementptr inbounds i64, ptr %485, i64 %486
  %488 = load i64, ptr %487, align 8, !tbaa !9
  store i64 %488, ptr %28, align 8, !tbaa !9
  %489 = load ptr, ptr %13, align 8, !tbaa !5
  %490 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %489, i32 0, i32 2
  %491 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %490, i32 0, i32 4
  %492 = load ptr, ptr %491, align 8, !tbaa !20
  %493 = load i64, ptr %25, align 8, !tbaa !9
  %494 = getelementptr inbounds i64, ptr %492, i64 %493
  %495 = load i64, ptr %494, align 8, !tbaa !9
  %496 = load ptr, ptr %13, align 8, !tbaa !5
  %497 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %496, i32 0, i32 3
  %498 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %497, i32 0, i32 4
  %499 = load ptr, ptr %498, align 8, !tbaa !20
  %500 = load i64, ptr %25, align 8, !tbaa !9
  %501 = getelementptr inbounds i64, ptr %499, i64 %500
  %502 = load i64, ptr %501, align 8, !tbaa !9
  %503 = add nsw i64 %495, %502
  store i64 %503, ptr %29, align 8, !tbaa !9
  %504 = load ptr, ptr %22, align 8, !tbaa !5
  %505 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %504, i32 0, i32 2
  %506 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %505, i32 0, i32 4
  %507 = load ptr, ptr %506, align 8, !tbaa !20
  %508 = load i64, ptr %25, align 8, !tbaa !9
  %509 = getelementptr inbounds i64, ptr %507, i64 %508
  %510 = load i64, ptr %509, align 8, !tbaa !9
  store i64 %510, ptr %27, align 8, !tbaa !9
  %511 = load i64, ptr %28, align 8, !tbaa !9
  store i64 %511, ptr %26, align 8, !tbaa !9
  br label %512

512:                                              ; preds = %532, %481
  %513 = load i64, ptr %26, align 8, !tbaa !9
  %514 = load i64, ptr %29, align 8, !tbaa !9
  %515 = icmp sle i64 %513, %514
  br i1 %515, label %516, label %535

516:                                              ; preds = %512
  %517 = load ptr, ptr %13, align 8, !tbaa !5
  %518 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %517, i32 0, i32 0
  %519 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %518, i32 0, i32 4
  %520 = load ptr, ptr %519, align 8, !tbaa !20
  %521 = load i64, ptr %26, align 8, !tbaa !9
  %522 = getelementptr inbounds double, ptr %520, i64 %521
  %523 = load double, ptr %522, align 8, !tbaa !27
  %524 = load ptr, ptr %22, align 8, !tbaa !5
  %525 = getelementptr inbounds %"struct.alglib_impl::sparsematrix", ptr %524, i32 0, i32 0
  %526 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %525, i32 0, i32 4
  %527 = load ptr, ptr %526, align 8, !tbaa !20
  %528 = load i64, ptr %27, align 8, !tbaa !9
  %529 = getelementptr inbounds double, ptr %527, i64 %528
  store double %523, ptr %529, align 8, !tbaa !27
  %530 = load i64, ptr %27, align 8, !tbaa !9
  %531 = add nsw i64 %530, 1
  store i64 %531, ptr %27, align 8, !tbaa !9
  br label %532

532:                                              ; preds = %516
  %533 = load i64, ptr %26, align 8, !tbaa !9
  %534 = add nsw i64 %533, 1
  store i64 %534, ptr %26, align 8, !tbaa !9
  br label %512, !llvm.loop !31

535:                                              ; preds = %512
  br label %536

536:                                              ; preds = %535
  %537 = load i64, ptr %25, align 8, !tbaa !9
  %538 = add nsw i64 %537, 1
  store i64 %538, ptr %25, align 8, !tbaa !9
  br label %476, !llvm.loop !32

539:                                              ; preds = %476
  br label %540

540:                                              ; preds = %539, %466
  br label %726

541:                                              ; preds = %354, %350
  %542 = load ptr, ptr %21, align 8, !tbaa !5
  %543 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %542, i32 0, i32 0
  %544 = load i64, ptr %14, align 8, !tbaa !9
  %545 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %543, i64 noundef %544, ptr noundef %545)
  %546 = load ptr, ptr %21, align 8, !tbaa !5
  %547 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %546, i32 0, i32 1
  %548 = load i64, ptr %14, align 8, !tbaa !9
  %549 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %547, i64 noundef %548, ptr noundef %549)
  store i64 0, ptr %25, align 8, !tbaa !9
  br label %550

550:                                              ; preds = %568, %541
  %551 = load i64, ptr %25, align 8, !tbaa !9
  %552 = load i64, ptr %14, align 8, !tbaa !9
  %553 = sub nsw i64 %552, 1
  %554 = icmp sle i64 %551, %553
  br i1 %554, label %555, label %571

555:                                              ; preds = %550
  %556 = load ptr, ptr %21, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %556, i32 0, i32 0
  %558 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %557, i32 0, i32 4
  %559 = load ptr, ptr %558, align 8, !tbaa !20
  %560 = load i64, ptr %25, align 8, !tbaa !9
  %561 = getelementptr inbounds i64, ptr %559, i64 %560
  store i64 0, ptr %561, align 8, !tbaa !9
  %562 = load ptr, ptr %21, align 8, !tbaa !5
  %563 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %562, i32 0, i32 1
  %564 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %563, i32 0, i32 4
  %565 = load ptr, ptr %564, align 8, !tbaa !20
  %566 = load i64, ptr %25, align 8, !tbaa !9
  %567 = getelementptr inbounds i64, ptr %565, i64 %566
  store i64 0, ptr %567, align 8, !tbaa !9
  br label %568

568:                                              ; preds = %555
  %569 = load i64, ptr %25, align 8, !tbaa !9
  %570 = add nsw i64 %569, 1
  store i64 %570, ptr %25, align 8, !tbaa !9
  br label %550, !llvm.loop !33

571:                                              ; preds = %550
  store i64 0, ptr %28, align 8, !tbaa !9
  store i64 0, ptr %29, align 8, !tbaa !9
  br label %572

572:                                              ; preds = %661, %571
  %573 = load ptr, ptr %13, align 8, !tbaa !5
  %574 = load ptr, ptr %23, align 8, !tbaa !5
  %575 = call noundef zeroext i1 @_ZN11alglib_impl15sparseenumerateEPNS_12sparsematrixEPlS2_S2_S2_PdPNS_8ae_stateE(ptr noundef %573, ptr noundef %28, ptr noundef %29, ptr noundef %25, ptr noundef %26, ptr noundef %30, ptr noundef %574)
  br i1 %575, label %576, label %662

576:                                              ; preds = %572
  %577 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %578 = trunc i8 %577 to i1
  br i1 %578, label %579, label %583

579:                                              ; preds = %576
  %580 = load i64, ptr %26, align 8, !tbaa !9
  %581 = load i64, ptr %25, align 8, !tbaa !9
  %582 = icmp sge i64 %580, %581
  br i1 %582, label %590, label %583

583:                                              ; preds = %579, %576
  %584 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %585 = trunc i8 %584 to i1
  br i1 %585, label %661, label %586

586:                                              ; preds = %583
  %587 = load i64, ptr %26, align 8, !tbaa !9
  %588 = load i64, ptr %25, align 8, !tbaa !9
  %589 = icmp sle i64 %587, %588
  br i1 %589, label %590, label %661

590:                                              ; preds = %586, %579
  %591 = load ptr, ptr %17, align 8, !tbaa !5
  %592 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %591, i32 0, i32 4
  %593 = load ptr, ptr %592, align 8, !tbaa !20
  %594 = load i64, ptr %25, align 8, !tbaa !9
  %595 = getelementptr inbounds i64, ptr %593, i64 %594
  %596 = load i64, ptr %595, align 8, !tbaa !9
  store i64 %596, ptr %25, align 8, !tbaa !9
  %597 = load ptr, ptr %17, align 8, !tbaa !5
  %598 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %597, i32 0, i32 4
  %599 = load ptr, ptr %598, align 8, !tbaa !20
  %600 = load i64, ptr %26, align 8, !tbaa !9
  %601 = getelementptr inbounds i64, ptr %599, i64 %600
  %602 = load i64, ptr %601, align 8, !tbaa !9
  store i64 %602, ptr %26, align 8, !tbaa !9
  %603 = load i64, ptr %26, align 8, !tbaa !9
  %604 = load i64, ptr %25, align 8, !tbaa !9
  %605 = icmp slt i64 %603, %604
  br i1 %605, label %606, label %609

606:                                              ; preds = %590
  %607 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %608 = trunc i8 %607 to i1
  br i1 %608, label %616, label %609

609:                                              ; preds = %606, %590
  %610 = load i64, ptr %26, align 8, !tbaa !9
  %611 = load i64, ptr %25, align 8, !tbaa !9
  %612 = icmp sgt i64 %610, %611
  br i1 %612, label %613, label %618

613:                                              ; preds = %609
  %614 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %615 = trunc i8 %614 to i1
  br i1 %615, label %618, label %616

616:                                              ; preds = %613, %606
  %617 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl5swapiEPlS0_PNS_8ae_stateE(ptr noundef %25, ptr noundef %26, ptr noundef %617)
  br label %618

618:                                              ; preds = %616, %613, %609
  %619 = load i64, ptr %25, align 8, !tbaa !9
  %620 = load i64, ptr %26, align 8, !tbaa !9
  %621 = icmp sgt i64 %619, %620
  br i1 %621, label %622, label %641

622:                                              ; preds = %618
  %623 = load ptr, ptr %21, align 8, !tbaa !5
  %624 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %623, i32 0, i32 0
  %625 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %624, i32 0, i32 4
  %626 = load ptr, ptr %625, align 8, !tbaa !20
  %627 = load i64, ptr %25, align 8, !tbaa !9
  %628 = getelementptr inbounds i64, ptr %626, i64 %627
  %629 = load i64, ptr %628, align 8, !tbaa !9
  %630 = load i64, ptr %25, align 8, !tbaa !9
  %631 = load i64, ptr %26, align 8, !tbaa !9
  %632 = sub nsw i64 %630, %631
  %633 = load ptr, ptr %23, align 8, !tbaa !5
  %634 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %629, i64 noundef %632, ptr noundef %633)
  %635 = load ptr, ptr %21, align 8, !tbaa !5
  %636 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %635, i32 0, i32 0
  %637 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %636, i32 0, i32 4
  %638 = load ptr, ptr %637, align 8, !tbaa !20
  %639 = load i64, ptr %25, align 8, !tbaa !9
  %640 = getelementptr inbounds i64, ptr %638, i64 %639
  store i64 %634, ptr %640, align 8, !tbaa !9
  br label %660

641:                                              ; preds = %618
  %642 = load ptr, ptr %21, align 8, !tbaa !5
  %643 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %642, i32 0, i32 1
  %644 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %643, i32 0, i32 4
  %645 = load ptr, ptr %644, align 8, !tbaa !20
  %646 = load i64, ptr %26, align 8, !tbaa !9
  %647 = getelementptr inbounds i64, ptr %645, i64 %646
  %648 = load i64, ptr %647, align 8, !tbaa !9
  %649 = load i64, ptr %26, align 8, !tbaa !9
  %650 = load i64, ptr %25, align 8, !tbaa !9
  %651 = sub nsw i64 %649, %650
  %652 = load ptr, ptr %23, align 8, !tbaa !5
  %653 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %648, i64 noundef %651, ptr noundef %652)
  %654 = load ptr, ptr %21, align 8, !tbaa !5
  %655 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %654, i32 0, i32 1
  %656 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %655, i32 0, i32 4
  %657 = load ptr, ptr %656, align 8, !tbaa !20
  %658 = load i64, ptr %26, align 8, !tbaa !9
  %659 = getelementptr inbounds i64, ptr %657, i64 %658
  store i64 %653, ptr %659, align 8, !tbaa !9
  br label %660

660:                                              ; preds = %641, %622
  br label %661

661:                                              ; preds = %660, %586, %583
  br label %572, !llvm.loop !34

662:                                              ; preds = %572
  %663 = load i64, ptr %14, align 8, !tbaa !9
  %664 = load i64, ptr %14, align 8, !tbaa !9
  %665 = load ptr, ptr %21, align 8, !tbaa !5
  %666 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %665, i32 0, i32 0
  %667 = load ptr, ptr %21, align 8, !tbaa !5
  %668 = getelementptr inbounds %"struct.alglib_impl::sparsebuffers", ptr %667, i32 0, i32 1
  %669 = load ptr, ptr %22, align 8, !tbaa !5
  %670 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl18sparsecreatesksbufEllPNS_9ae_vectorES1_PNS_12sparsematrixEPNS_8ae_stateE(i64 noundef %663, i64 noundef %664, ptr noundef %666, ptr noundef %668, ptr noundef %669, ptr noundef %670)
  store i64 0, ptr %28, align 8, !tbaa !9
  store i64 0, ptr %29, align 8, !tbaa !9
  br label %671

671:                                              ; preds = %724, %662
  %672 = load ptr, ptr %13, align 8, !tbaa !5
  %673 = load ptr, ptr %23, align 8, !tbaa !5
  %674 = call noundef zeroext i1 @_ZN11alglib_impl15sparseenumerateEPNS_12sparsematrixEPlS2_S2_S2_PdPNS_8ae_stateE(ptr noundef %672, ptr noundef %28, ptr noundef %29, ptr noundef %25, ptr noundef %26, ptr noundef %30, ptr noundef %673)
  br i1 %674, label %675, label %725

675:                                              ; preds = %671
  %676 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %677 = trunc i8 %676 to i1
  br i1 %677, label %678, label %682

678:                                              ; preds = %675
  %679 = load i64, ptr %26, align 8, !tbaa !9
  %680 = load i64, ptr %25, align 8, !tbaa !9
  %681 = icmp sge i64 %679, %680
  br i1 %681, label %689, label %682

682:                                              ; preds = %678, %675
  %683 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %684 = trunc i8 %683 to i1
  br i1 %684, label %724, label %685

685:                                              ; preds = %682
  %686 = load i64, ptr %26, align 8, !tbaa !9
  %687 = load i64, ptr %25, align 8, !tbaa !9
  %688 = icmp sle i64 %686, %687
  br i1 %688, label %689, label %724

689:                                              ; preds = %685, %678
  %690 = load ptr, ptr %17, align 8, !tbaa !5
  %691 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %690, i32 0, i32 4
  %692 = load ptr, ptr %691, align 8, !tbaa !20
  %693 = load i64, ptr %25, align 8, !tbaa !9
  %694 = getelementptr inbounds i64, ptr %692, i64 %693
  %695 = load i64, ptr %694, align 8, !tbaa !9
  store i64 %695, ptr %25, align 8, !tbaa !9
  %696 = load ptr, ptr %17, align 8, !tbaa !5
  %697 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %696, i32 0, i32 4
  %698 = load ptr, ptr %697, align 8, !tbaa !20
  %699 = load i64, ptr %26, align 8, !tbaa !9
  %700 = getelementptr inbounds i64, ptr %698, i64 %699
  %701 = load i64, ptr %700, align 8, !tbaa !9
  store i64 %701, ptr %26, align 8, !tbaa !9
  %702 = load i64, ptr %26, align 8, !tbaa !9
  %703 = load i64, ptr %25, align 8, !tbaa !9
  %704 = icmp slt i64 %702, %703
  br i1 %704, label %705, label %708

705:                                              ; preds = %689
  %706 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %707 = trunc i8 %706 to i1
  br i1 %707, label %715, label %708

708:                                              ; preds = %705, %689
  %709 = load i64, ptr %26, align 8, !tbaa !9
  %710 = load i64, ptr %25, align 8, !tbaa !9
  %711 = icmp sgt i64 %709, %710
  br i1 %711, label %712, label %717

712:                                              ; preds = %708
  %713 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %714 = trunc i8 %713 to i1
  br i1 %714, label %717, label %715

715:                                              ; preds = %712, %705
  %716 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl5swapiEPlS0_PNS_8ae_stateE(ptr noundef %26, ptr noundef %25, ptr noundef %716)
  br label %717

717:                                              ; preds = %715, %712, %708
  %718 = load ptr, ptr %22, align 8, !tbaa !5
  %719 = load i64, ptr %25, align 8, !tbaa !9
  %720 = load i64, ptr %26, align 8, !tbaa !9
  %721 = load double, ptr %30, align 8, !tbaa !27
  %722 = load ptr, ptr %23, align 8, !tbaa !5
  %723 = call noundef zeroext i1 @_ZN11alglib_impl21sparserewriteexistingEPNS_12sparsematrixElldPNS_8ae_stateE(ptr noundef %718, i64 noundef %719, i64 noundef %720, double noundef %721, ptr noundef %722)
  br label %724

724:                                              ; preds = %717, %685, %682
  br label %671, !llvm.loop !35

725:                                              ; preds = %671
  br label %726

726:                                              ; preds = %725, %540
  %727 = load ptr, ptr %22, align 8, !tbaa !5
  %728 = load i64, ptr %14, align 8, !tbaa !9
  %729 = load i8, ptr %15, align 1, !tbaa !11, !range !13, !noundef !14
  %730 = trunc i8 %729 to i1
  %731 = load ptr, ptr %23, align 8, !tbaa !5
  %732 = call noundef zeroext i1 @_ZN11alglib_impl21sparsecholeskyskylineEPNS_12sparsematrixElbPNS_8ae_stateE(ptr noundef %727, i64 noundef %728, i1 noundef zeroext %730, ptr noundef %731)
  %733 = zext i1 %732 to i8
  store i8 %733, ptr %32, align 1, !tbaa !11
  %734 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %734)
  %735 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %736 = trunc i8 %735 to i1
  store i1 %736, ptr %12, align 1
  store i32 1, ptr %33, align 4
  br label %742

737:                                              ; preds = %318
  %738 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext false, ptr noundef @.str.261, ptr noundef %738)
  %739 = load ptr, ptr %23, align 8, !tbaa !5
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %739)
  %740 = load i8, ptr %32, align 1, !tbaa !11, !range !13, !noundef !14
  %741 = trunc i8 %740 to i1
  store i1 %741, ptr %12, align 1
  store i32 1, ptr %33, align 4
  br label %742

742:                                              ; preds = %737, %726, %346, %87, %71
  call void @llvm.lifetime.end.p0(i64 1, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %24) #5
  %743 = load i1, ptr %12, align 1
  ret i1 %743
}

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 = { mustprogress nounwind 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 #5 = { nounwind }

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

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


; 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::hqrndstate" = type { i64, i64, i64 }

@.str.253 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.254 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.255 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.256 = external hidden unnamed_addr constant [52 x i8], align 1
@.str.257 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.258 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.259 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.260 = external hidden unnamed_addr constant [85 x i8], align 1

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1

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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef double @_ZN11alglib_impl17sparsegetdiagonalEPNS_12sparsematrixElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl15sparseenumerateEPNS_12sparsematrixEPlS2_S2_S2_PdPNS_8ae_stateE(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl21sparserewriteexistingEPNS_12sparsematrixElldPNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, double noundef, ptr noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl11sparseissksEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN11alglib_impl14sparsegetnrowsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN11alglib_impl14sparsegetncolsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZN11alglib_impl21sparsecholeskyskylineEPNS_12sparsematrixElbPNS_8ae_stateE(ptr noundef, i64 noundef, i1 noundef zeroext, ptr noundef) local_unnamed_addr #3

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

declare noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

declare void @_ZN11alglib_impl5swapiEPlS0_PNS_8ae_stateE(ptr noundef, 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_frame_leaveEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

declare noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef, double noundef) local_unnamed_addr #2

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

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

declare noundef i64 @_ZN11alglib_impl13hqrnduniformiEPNS_10hqrndstateElPNS_8ae_stateE(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN11alglib_impl15sparsecholeskyxEPNS_12sparsematrixElbPNS_9ae_vectorES3_lllPNS_13sparsebuffersES1_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i1 noundef zeroext %2, ptr noundef %3, ptr noundef %4, i64 noundef %5, i64 noundef %6, i64 noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10) local_unnamed_addr #3 {
  %12 = alloca %"struct.alglib_impl::ae_frame", align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca double, align 8
  %18 = alloca %"struct.alglib_impl::hqrndstate", align 8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %18) #6
  call void @_ZN11alglib_impl13ae_frame_makeEPNS_8ae_stateEPNS_8ae_frameE(ptr noundef %10, ptr noundef nonnull %12)
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %18, i8 0, i64 24, i1 false)
  call void @_ZN11alglib_impl16_hqrndstate_initEPvPNS_8ae_stateEb(ptr noundef nonnull %18, ptr noundef %10, i1 noundef zeroext true)
  %19 = icmp sgt i64 %1, -1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %19, ptr noundef nonnull @.str.253, ptr noundef %10)
  %20 = call noundef i64 @_ZN11alglib_impl14sparsegetnrowsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %10)
  %21 = icmp sge i64 %20, %1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %21, ptr noundef nonnull @.str.254, ptr noundef %10)
  %22 = call noundef i64 @_ZN11alglib_impl14sparsegetncolsEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %10)
  %23 = icmp sge i64 %22, %1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %23, ptr noundef nonnull @.str.255, ptr noundef %10)
  %24 = add i64 %5, 3
  %25 = icmp ult i64 %24, 4
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %25, ptr noundef nonnull @.str.256, ptr noundef %10)
  %26 = icmp ult i64 %6, 3
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %26, ptr noundef nonnull @.str.257, ptr noundef %10)
  call void @_ZN11alglib_impl14hqrndrandomizeEPNS_10hqrndstateEPNS_8ae_stateE(ptr noundef nonnull %18, ptr noundef %10)
  %27 = icmp slt i64 %1, 1
  br i1 %27, label %.loopexit336, label %.preheader265

.preheader265:                                    ; preds = %11, %31
  %28 = phi i64 [ %32, %31 ], [ 0, %11 ]
  %29 = call noundef double @_ZN11alglib_impl17sparsegetdiagonalEPNS_12sparsematrixElPNS_8ae_stateE(ptr noundef %0, i64 noundef %28, ptr noundef %10)
  %30 = call noundef zeroext i1 @_ZN11alglib_impl13ae_fp_less_eqEdd(double noundef %29, double noundef 0.000000e+00)
  br i1 %30, label %.loopexit336, label %31

31:                                               ; preds = %.preheader265
  %32 = add nuw nsw i64 %28, 1
  %.not.not = icmp slt i64 %32, %1
  br i1 %.not.not, label %.preheader265, label %33, !llvm.loop !5

33:                                               ; preds = %31
  %34 = icmp eq i64 %5, 0
  %35 = call noundef zeroext i1 @_ZN11alglib_impl11sparseissksEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %10)
  %36 = or i1 %34, %35
  %spec.select = select i1 %36, i64 -1, i64 %5
  switch i64 %spec.select, label %.loopexit263 [
    i64 -3, label %.lr.ph
    i64 -2, label %.lr.ph272
  ]

.lr.ph:                                           ; preds = %33
  %37 = load i64, ptr %3, align 8, !tbaa !7
  %38 = icmp sge i64 %37, %1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %38, ptr noundef nonnull @.str.258, ptr noundef %10)
  %39 = load i64, ptr %4, align 8, !tbaa !7
  %40 = icmp sge i64 %39, %1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %40, ptr noundef nonnull @.str.258, ptr noundef %10)
  store i64 0, ptr %13, align 8, !tbaa !15
  %41 = getelementptr inbounds i8, ptr %3, i64 56
  %42 = getelementptr inbounds i8, ptr %4, i64 56
  br label %43

43:                                               ; preds = %.lr.ph, %43
  %44 = phi i64 [ 0, %.lr.ph ], [ %59, %43 ]
  %45 = load ptr, ptr %41, align 8, !tbaa !16
  %46 = getelementptr inbounds i64, ptr %45, i64 %44
  %47 = load i64, ptr %46, align 8, !tbaa !15
  %spec.select247 = icmp ult i64 %47, %1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %spec.select247, ptr noundef nonnull @.str.259, ptr noundef %10)
  %48 = load ptr, ptr %42, align 8, !tbaa !16
  %49 = getelementptr inbounds i64, ptr %48, i64 %44
  %50 = load i64, ptr %49, align 8, !tbaa !15
  %51 = icmp ult i64 %50, %1
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %51, ptr noundef nonnull @.str.259, ptr noundef %10)
  %52 = load ptr, ptr %42, align 8, !tbaa !16
  %53 = load ptr, ptr %41, align 8, !tbaa !16
  %54 = getelementptr inbounds i64, ptr %53, i64 %44
  %55 = load i64, ptr %54, align 8, !tbaa !15
  %56 = getelementptr inbounds i64, ptr %52, i64 %55
  %57 = load i64, ptr %56, align 8, !tbaa !15
  %58 = icmp eq i64 %57, %44
  call void @_ZN11alglib_impl9ae_assertEbPKcPNS_8ae_stateE(i1 noundef zeroext %58, ptr noundef nonnull @.str.260, ptr noundef %10)
  %59 = add nuw nsw i64 %44, 1
  %.not.not221 = icmp slt i64 %59, %1
  br i1 %.not.not221, label %43, label %.loopexit263, !llvm.loop !17

.lr.ph272:                                        ; preds = %33
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %3, i64 noundef %1, ptr noundef %10)
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %4, i64 noundef %1, ptr noundef %10)
  %60 = getelementptr inbounds i8, ptr %3, i64 56
  %61 = add nsw i64 %1, -1
  %xtraiter = and i64 %1, 3
  %62 = icmp ult i64 %61, 3
  br i1 %62, label %.lr.ph275.unr-lcssa, label %.lr.ph272.new

.lr.ph272.new:                                    ; preds = %.lr.ph272
  %unroll_iter = and i64 %1, 9223372036854775804
  br label %68

.lr.ph275.unr-lcssa:                              ; preds = %68, %.lr.ph272
  %.unr = phi i64 [ 0, %.lr.ph272 ], [ %81, %68 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph275, label %.epil.preheader

.epil.preheader:                                  ; preds = %.lr.ph275.unr-lcssa, %.epil.preheader
  %63 = phi i64 [ %66, %.epil.preheader ], [ %.unr, %.lr.ph275.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.epil.preheader ], [ 0, %.lr.ph275.unr-lcssa ]
  %64 = load ptr, ptr %60, align 8, !tbaa !16
  %65 = getelementptr inbounds i64, ptr %64, i64 %63
  store i64 %63, ptr %65, align 8, !tbaa !15
  %66 = add nuw nsw i64 %63, 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.ph275, label %.epil.preheader, !llvm.loop !18

.lr.ph275:                                        ; preds = %.epil.preheader, %.lr.ph275.unr-lcssa
  %67 = getelementptr inbounds i8, ptr %3, i64 56
  br label %85

68:                                               ; preds = %68, %.lr.ph272.new
  %69 = phi i64 [ 0, %.lr.ph272.new ], [ %81, %68 ]
  %niter = phi i64 [ 0, %.lr.ph272.new ], [ %niter.next.3, %68 ]
  %70 = load ptr, ptr %60, align 8, !tbaa !16
  %71 = getelementptr inbounds i64, ptr %70, i64 %69
  store i64 %69, ptr %71, align 8, !tbaa !15
  %72 = or disjoint i64 %69, 1
  %73 = load ptr, ptr %60, align 8, !tbaa !16
  %74 = getelementptr inbounds i64, ptr %73, i64 %72
  store i64 %72, ptr %74, align 8, !tbaa !15
  %75 = or disjoint i64 %69, 2
  %76 = load ptr, ptr %60, align 8, !tbaa !16
  %77 = getelementptr inbounds i64, ptr %76, i64 %75
  store i64 %75, ptr %77, align 8, !tbaa !15
  %78 = or disjoint i64 %69, 3
  %79 = load ptr, ptr %60, align 8, !tbaa !16
  %80 = getelementptr inbounds i64, ptr %79, i64 %78
  store i64 %78, ptr %80, align 8, !tbaa !15
  %81 = add nuw nsw i64 %69, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3.not = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3.not, label %.lr.ph275.unr-lcssa, label %68, !llvm.loop !20

.lr.ph278:                                        ; preds = %98
  %82 = getelementptr inbounds i8, ptr %4, i64 56
  %83 = getelementptr inbounds i8, ptr %3, i64 56
  %smax341 = call i64 @llvm.smax.i64(i64 %1, i64 1)
  %xtraiter342 = and i64 %smax341, 1
  %84 = icmp eq i64 %1, 1
  br i1 %84, label %.loopexit263.loopexit339.unr-lcssa, label %.lr.ph278.new

.lr.ph278.new:                                    ; preds = %.lr.ph278
  %unroll_iter346 = and i64 %smax341, 9223372036854775806
  br label %100

85:                                               ; preds = %.lr.ph275, %98
  %86 = phi i64 [ 0, %.lr.ph275 ], [ %99, %98 ]
  %87 = sub nsw i64 %1, %86
  %88 = call noundef i64 @_ZN11alglib_impl13hqrnduniformiEPNS_10hqrndstateElPNS_8ae_stateE(ptr noundef nonnull %18, i64 noundef %87, ptr noundef %10)
  %89 = add nsw i64 %88, %86
  store i64 %89, ptr %14, align 8, !tbaa !15
  %.not246 = icmp eq i64 %88, 0
  br i1 %.not246, label %98, label %90

90:                                               ; preds = %85
  %91 = load ptr, ptr %67, align 8, !tbaa !16
  %92 = getelementptr inbounds i64, ptr %91, i64 %86
  %93 = load i64, ptr %92, align 8, !tbaa !15
  %94 = getelementptr inbounds i64, ptr %91, i64 %89
  %95 = load i64, ptr %94, align 8, !tbaa !15
  store i64 %95, ptr %92, align 8, !tbaa !15
  %96 = load ptr, ptr %67, align 8, !tbaa !16
  %97 = getelementptr inbounds i64, ptr %96, i64 %89
  store i64 %93, ptr %97, align 8, !tbaa !15
  br label %98

98:                                               ; preds = %85, %90
  %99 = add nuw nsw i64 %86, 1
  %.not.not225 = icmp slt i64 %99, %1
  br i1 %.not.not225, label %85, label %.lr.ph278, !llvm.loop !21

100:                                              ; preds = %100, %.lr.ph278.new
  %101 = phi i64 [ 0, %.lr.ph278.new ], [ %113, %100 ]
  %niter347 = phi i64 [ 0, %.lr.ph278.new ], [ %niter347.next.1, %100 ]
  %102 = load ptr, ptr %82, align 8, !tbaa !16
  %103 = load ptr, ptr %83, align 8, !tbaa !16
  %104 = getelementptr inbounds i64, ptr %103, i64 %101
  %105 = load i64, ptr %104, align 8, !tbaa !15
  %106 = getelementptr inbounds i64, ptr %102, i64 %105
  store i64 %101, ptr %106, align 8, !tbaa !15
  %107 = or disjoint i64 %101, 1
  store i64 %107, ptr %13, align 8, !tbaa !15
  %108 = load ptr, ptr %82, align 8, !tbaa !16
  %109 = load ptr, ptr %83, align 8, !tbaa !16
  %110 = getelementptr inbounds i64, ptr %109, i64 %107
  %111 = load i64, ptr %110, align 8, !tbaa !15
  %112 = getelementptr inbounds i64, ptr %108, i64 %111
  store i64 %107, ptr %112, align 8, !tbaa !15
  %113 = add nuw nsw i64 %101, 2
  store i64 %113, ptr %13, align 8, !tbaa !15
  %niter347.next.1 = add i64 %niter347, 2
  %niter347.ncmp.1.not = icmp eq i64 %niter347.next.1, %unroll_iter346
  br i1 %niter347.ncmp.1.not, label %.loopexit263.loopexit339.unr-lcssa, label %100, !llvm.loop !22

.loopexit263.loopexit339.unr-lcssa:               ; preds = %100, %.lr.ph278
  %.unr344 = phi i64 [ 0, %.lr.ph278 ], [ %113, %100 ]
  %lcmp.mod345.not = icmp eq i64 %xtraiter342, 0
  br i1 %lcmp.mod345.not, label %.loopexit263, label %.loopexit263.loopexit339.epilog-lcssa

.loopexit263.loopexit339.epilog-lcssa:            ; preds = %.loopexit263.loopexit339.unr-lcssa
  %114 = load ptr, ptr %82, align 8, !tbaa !16
  %115 = load ptr, ptr %83, align 8, !tbaa !16
  %116 = getelementptr inbounds i64, ptr %115, i64 %.unr344
  %117 = load i64, ptr %116, align 8, !tbaa !15
  %118 = getelementptr inbounds i64, ptr %114, i64 %117
  store i64 %.unr344, ptr %118, align 8, !tbaa !15
  %119 = add nuw nsw i64 %.unr344, 1
  store i64 %119, ptr %13, align 8, !tbaa !15
  br label %.loopexit263

.loopexit263:                                     ; preds = %.loopexit263.loopexit339.epilog-lcssa, %.loopexit263.loopexit339.unr-lcssa, %43, %33
  %120 = icmp eq i64 %spec.select, -1
  br i1 %120, label %.lr.ph282, label %.loopexit262

.lr.ph282:                                        ; preds = %.loopexit263
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %3, i64 noundef %1, ptr noundef %10)
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %4, i64 noundef %1, ptr noundef %10)
  store i64 0, ptr %13, align 8, !tbaa !15
  %121 = getelementptr inbounds i8, ptr %3, i64 56
  %122 = getelementptr inbounds i8, ptr %4, i64 56
  %smax349 = call i64 @llvm.smax.i64(i64 %1, i64 1)
  %xtraiter350 = and i64 %smax349, 1
  %123 = icmp eq i64 %1, 1
  br i1 %123, label %.loopexit262.loopexit.unr-lcssa, label %.lr.ph282.new

.lr.ph282.new:                                    ; preds = %.lr.ph282
  %unroll_iter354 = and i64 %smax349, 9223372036854775806
  br label %124

124:                                              ; preds = %124, %.lr.ph282.new
  %125 = phi i64 [ 0, %.lr.ph282.new ], [ %135, %124 ]
  %niter355 = phi i64 [ 0, %.lr.ph282.new ], [ %niter355.next.1, %124 ]
  %126 = load ptr, ptr %121, align 8, !tbaa !16
  %127 = getelementptr inbounds i64, ptr %126, i64 %125
  store i64 %125, ptr %127, align 8, !tbaa !15
  %128 = load ptr, ptr %122, align 8, !tbaa !16
  %129 = getelementptr inbounds i64, ptr %128, i64 %125
  store i64 %125, ptr %129, align 8, !tbaa !15
  %130 = or disjoint i64 %125, 1
  %131 = load ptr, ptr %121, align 8, !tbaa !16
  %132 = getelementptr inbounds i64, ptr %131, i64 %130
  store i64 %130, ptr %132, align 8, !tbaa !15
  %133 = load ptr, ptr %122, align 8, !tbaa !16
  %134 = getelementptr inbounds i64, ptr %133, i64 %130
  store i64 %130, ptr %134, align 8, !tbaa !15
  %135 = add nuw nsw i64 %125, 2
  %niter355.next.1 = add i64 %niter355, 2
  %niter355.ncmp.1.not = icmp eq i64 %niter355.next.1, %unroll_iter354
  br i1 %niter355.ncmp.1.not, label %.loopexit262.loopexit.unr-lcssa, label %124, !llvm.loop !23

.loopexit262.loopexit.unr-lcssa:                  ; preds = %124, %.lr.ph282
  %.unr352 = phi i64 [ 0, %.lr.ph282 ], [ %135, %124 ]
  %lcmp.mod353.not = icmp eq i64 %xtraiter350, 0
  br i1 %lcmp.mod353.not, label %.loopexit262, label %.loopexit262.loopexit.epilog-lcssa

.loopexit262.loopexit.epilog-lcssa:               ; preds = %.loopexit262.loopexit.unr-lcssa
  %136 = load ptr, ptr %121, align 8, !tbaa !16
  %137 = getelementptr inbounds i64, ptr %136, i64 %.unr352
  store i64 %.unr352, ptr %137, align 8, !tbaa !15
  %138 = load ptr, ptr %122, align 8, !tbaa !16
  %139 = getelementptr inbounds i64, ptr %138, i64 %.unr352
  store i64 %.unr352, ptr %139, align 8, !tbaa !15
  br label %.loopexit262

.loopexit262:                                     ; preds = %.loopexit262.loopexit.epilog-lcssa, %.loopexit262.loopexit.unr-lcssa, %.loopexit263
  %140 = call noundef zeroext i1 @_ZN11alglib_impl11sparseissksEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %10)
  %141 = icmp eq i64 %7, 2
  br i1 %141, label %146, label %142

142:                                              ; preds = %.loopexit262
  %143 = getelementptr inbounds i8, ptr %8, i64 128
  %144 = call noundef zeroext i1 @_ZN11alglib_impl15sparsecholeskyxEPNS_12sparsematrixElbPNS_9ae_vectorES3_lllPNS_13sparsebuffersES1_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i1 noundef zeroext %2, ptr noundef %3, ptr noundef %4, i64 noundef -3, i64 noundef 2, i64 noundef 2, ptr noundef %8, ptr noundef nonnull %143, ptr noundef %10)
  br i1 %144, label %145, label %.loopexit336

145:                                              ; preds = %142
  call void @_ZN11alglib_impl15sparsecopytobufEPNS_12sparsematrixElS1_PNS_8ae_stateE(ptr noundef nonnull %143, i64 noundef %7, ptr noundef %9, ptr noundef %10)
  br label %.loopexit336

146:                                              ; preds = %.loopexit262
  %147 = call noundef zeroext i1 @_ZN11alglib_impl11sparseissksEPNS_12sparsematrixEPNS_8ae_stateE(ptr noundef %0, ptr noundef %10)
  %or.cond4 = and i1 %120, %147
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef %8, i64 noundef %1, ptr noundef %10)
  br i1 %or.cond4, label %.lr.ph296, label %.lr.ph286

.lr.ph296:                                        ; preds = %146
  %148 = getelementptr inbounds i8, ptr %8, i64 56
  %smax365 = call i64 @llvm.smax.i64(i64 %1, i64 1)
  %xtraiter366 = and i64 %smax365, 3
  %149 = icmp slt i64 %1, 4
  br i1 %149, label %._crit_edge297.unr-lcssa, label %.lr.ph296.new

.lr.ph296.new:                                    ; preds = %.lr.ph296
  %unroll_iter370 = and i64 %smax365, 9223372036854775804
  br label %150

150:                                              ; preds = %150, %.lr.ph296.new
  %151 = phi i64 [ 0, %.lr.ph296.new ], [ %163, %150 ]
  %niter371 = phi i64 [ 0, %.lr.ph296.new ], [ %niter371.next.3, %150 ]
  %152 = load ptr, ptr %148, align 8, !tbaa !16
  %153 = getelementptr inbounds i64, ptr %152, i64 %151
  store i64 0, ptr %153, align 8, !tbaa !15
  %154 = or disjoint i64 %151, 1
  %155 = load ptr, ptr %148, align 8, !tbaa !16
  %156 = getelementptr inbounds i64, ptr %155, i64 %154
  store i64 0, ptr %156, align 8, !tbaa !15
  %157 = or disjoint i64 %151, 2
  %158 = load ptr, ptr %148, align 8, !tbaa !16
  %159 = getelementptr inbounds i64, ptr %158, i64 %157
  store i64 0, ptr %159, align 8, !tbaa !15
  %160 = or disjoint i64 %151, 3
  %161 = load ptr, ptr %148, align 8, !tbaa !16
  %162 = getelementptr inbounds i64, ptr %161, i64 %160
  store i64 0, ptr %162, align 8, !tbaa !15
  %163 = add nuw nsw i64 %151, 4
  %niter371.next.3 = add i64 %niter371, 4
  %niter371.ncmp.3.not = icmp eq i64 %niter371.next.3, %unroll_iter370
  br i1 %niter371.ncmp.3.not, label %._crit_edge297.unr-lcssa, label %150, !llvm.loop !24

._crit_edge297.unr-lcssa:                         ; preds = %150, %.lr.ph296
  %.unr368 = phi i64 [ 0, %.lr.ph296 ], [ %163, %150 ]
  %lcmp.mod369.not = icmp eq i64 %xtraiter366, 0
  br i1 %lcmp.mod369.not, label %._crit_edge297, label %.epil.preheader364

.epil.preheader364:                               ; preds = %._crit_edge297.unr-lcssa, %.epil.preheader364
  %164 = phi i64 [ %167, %.epil.preheader364 ], [ %.unr368, %._crit_edge297.unr-lcssa ]
  %epil.iter367 = phi i64 [ %epil.iter367.next, %.epil.preheader364 ], [ 0, %._crit_edge297.unr-lcssa ]
  %165 = load ptr, ptr %148, align 8, !tbaa !16
  %166 = getelementptr inbounds i64, ptr %165, i64 %164
  store i64 0, ptr %166, align 8, !tbaa !15
  %167 = add nuw nsw i64 %164, 1
  %epil.iter367.next = add i64 %epil.iter367, 1
  %epil.iter367.cmp.not = icmp eq i64 %epil.iter367.next, %xtraiter366
  br i1 %epil.iter367.cmp.not, label %._crit_edge297, label %.epil.preheader364, !llvm.loop !25

._crit_edge297:                                   ; preds = %.epil.preheader364, %._crit_edge297.unr-lcssa
  %168 = getelementptr inbounds i8, ptr %0, i64 184
  %169 = getelementptr inbounds i8, ptr %9, i64 184
  br i1 %2, label %.lr.ph318, label %.lr.ph307

.lr.ph318:                                        ; preds = %._crit_edge297
  %170 = getelementptr inbounds i8, ptr %0, i64 256
  call void @_ZN11alglib_impl18sparsecreatesksbufEllPNS_9ae_vectorES1_PNS_12sparsematrixEPNS_8ae_stateE(i64 noundef %1, i64 noundef %1, ptr noundef nonnull %8, ptr noundef nonnull %170, ptr noundef %9, ptr noundef %10)
  %171 = getelementptr inbounds i8, ptr %0, i64 312
  %172 = getelementptr inbounds i8, ptr %9, i64 312
  %173 = getelementptr inbounds i8, ptr %0, i64 56
  %174 = getelementptr inbounds i8, ptr %9, i64 56
  %smax324 = call i64 @llvm.smax.i64(i64 %1, i64 1)
  br label %175

175:                                              ; preds = %.lr.ph318, %._crit_edge313
  %storemerge242316 = phi i64 [ 0, %.lr.ph318 ], [ %218, %._crit_edge313 ]
  %176 = load ptr, ptr %168, align 8, !tbaa !16
  %177 = getelementptr i64, ptr %176, i64 %storemerge242316
  %178 = getelementptr i8, ptr %177, i64 8
  %179 = load i64, ptr %178, align 8, !tbaa !15
  %180 = load ptr, ptr %171, align 8, !tbaa !16
  %181 = getelementptr inbounds i64, ptr %180, i64 %storemerge242316
  %182 = load i64, ptr %181, align 8, !tbaa !15
  %183 = xor i64 %182, -1
  %184 = add i64 %179, %183
  store i64 %184, ptr %15, align 8, !tbaa !15
  %185 = add nsw i64 %179, -1
  store i64 %185, ptr %16, align 8, !tbaa !15
  %.not245.not308 = icmp slt i64 %184, %179
  br i1 %.not245.not308, label %.lr.ph312.preheader, label %._crit_edge313

.lr.ph312.preheader:                              ; preds = %175
  %186 = load ptr, ptr %169, align 8, !tbaa !16
  %187 = getelementptr i64, ptr %186, i64 %storemerge242316
  %188 = getelementptr i8, ptr %187, i64 8
  %189 = load i64, ptr %188, align 8, !tbaa !15
  %190 = load ptr, ptr %172, align 8, !tbaa !16
  %191 = getelementptr inbounds i64, ptr %190, i64 %storemerge242316
  %192 = load i64, ptr %191, align 8, !tbaa !15
  %193 = xor i64 %192, -1
  %194 = add i64 %189, %193
  %195 = and i64 %182, 1
  %lcmp.mod375.not.not = icmp eq i64 %195, 0
  br i1 %lcmp.mod375.not.not, label %.lr.ph312.prol, label %.lr.ph312.prol.loopexit

.lr.ph312.prol:                                   ; preds = %.lr.ph312.preheader
  %196 = load ptr, ptr %173, align 8, !tbaa !16
  %197 = getelementptr inbounds double, ptr %196, i64 %184
  %198 = load double, ptr %197, align 8, !tbaa !26
  %199 = load ptr, ptr %174, align 8, !tbaa !16
  %200 = getelementptr inbounds double, ptr %199, i64 %194
  store double %198, ptr %200, align 8, !tbaa !26
  %201 = sub i64 %189, %192
  %202 = sub i64 %179, %182
  br label %.lr.ph312.prol.loopexit

.lr.ph312.prol.loopexit:                          ; preds = %.lr.ph312.prol, %.lr.ph312.preheader
  %.0310.unr = phi i64 [ %194, %.lr.ph312.preheader ], [ %201, %.lr.ph312.prol ]
  %storemerge244309.unr = phi i64 [ %184, %.lr.ph312.preheader ], [ %202, %.lr.ph312.prol ]
  %203 = icmp eq i64 %182, 0
  br i1 %203, label %._crit_edge313, label %.lr.ph312

.lr.ph312:                                        ; preds = %.lr.ph312.prol.loopexit, %.lr.ph312
  %.0310 = phi i64 [ %216, %.lr.ph312 ], [ %.0310.unr, %.lr.ph312.prol.loopexit ]
  %storemerge244309 = phi i64 [ %217, %.lr.ph312 ], [ %storemerge244309.unr, %.lr.ph312.prol.loopexit ]
  %204 = load ptr, ptr %173, align 8, !tbaa !16
  %205 = getelementptr inbounds double, ptr %204, i64 %storemerge244309
  %206 = load double, ptr %205, align 8, !tbaa !26
  %207 = load ptr, ptr %174, align 8, !tbaa !16
  %208 = getelementptr inbounds double, ptr %207, i64 %.0310
  store double %206, ptr %208, align 8, !tbaa !26
  %209 = load ptr, ptr %173, align 8, !tbaa !16
  %210 = getelementptr double, ptr %209, i64 %storemerge244309
  %211 = getelementptr i8, ptr %210, i64 8
  %212 = load double, ptr %211, align 8, !tbaa !26
  %213 = load ptr, ptr %174, align 8, !tbaa !16
  %214 = getelementptr double, ptr %213, i64 %.0310
  %215 = getelementptr i8, ptr %214, i64 8
  store double %212, ptr %215, align 8, !tbaa !26
  %216 = add nsw i64 %.0310, 2
  %217 = add nsw i64 %storemerge244309, 2
  %exitcond323.not.1 = icmp eq i64 %217, %179
  br i1 %exitcond323.not.1, label %._crit_edge313, label %.lr.ph312, !llvm.loop !28

._crit_edge313:                                   ; preds = %.lr.ph312.prol.loopexit, %.lr.ph312, %175
  %storemerge244.lcssa = phi i64 [ %184, %175 ], [ %179, %.lr.ph312 ], [ %179, %.lr.ph312.prol.loopexit ]
  store i64 %storemerge244.lcssa, ptr %14, align 8, !tbaa !15
  %218 = add nuw nsw i64 %storemerge242316, 1
  store i64 %218, ptr %13, align 8, !tbaa !15
  %exitcond325.not = icmp eq i64 %218, %smax324
  br i1 %exitcond325.not, label %.loopexit, label %175, !llvm.loop !29

.lr.ph307:                                        ; preds = %._crit_edge297
  %219 = getelementptr inbounds i8, ptr %0, i64 192
  call void @_ZN11alglib_impl18sparsecreatesksbufEllPNS_9ae_vectorES1_PNS_12sparsematrixEPNS_8ae_stateE(i64 noundef %1, i64 noundef %1, ptr noundef nonnull %219, ptr noundef nonnull %8, ptr noundef %9, ptr noundef %10)
  %220 = getelementptr inbounds i8, ptr %0, i64 248
  %221 = getelementptr inbounds i8, ptr %0, i64 56
  %222 = getelementptr inbounds i8, ptr %9, i64 56
  %smax = call i64 @llvm.smax.i64(i64 %1, i64 1)
  br label %223

223:                                              ; preds = %.lr.ph307, %._crit_edge303
  %storemerge238305 = phi i64 [ 0, %.lr.ph307 ], [ %259, %._crit_edge303 ]
  %224 = load ptr, ptr %168, align 8, !tbaa !16
  %225 = getelementptr inbounds i64, ptr %224, i64 %storemerge238305
  %226 = load i64, ptr %225, align 8, !tbaa !15
  store i64 %226, ptr %15, align 8, !tbaa !15
  %227 = load ptr, ptr %220, align 8, !tbaa !16
  %228 = getelementptr inbounds i64, ptr %227, i64 %storemerge238305
  %229 = load i64, ptr %228, align 8, !tbaa !15
  %230 = add nsw i64 %229, %226
  store i64 %230, ptr %16, align 8, !tbaa !15
  %.not241298 = icmp slt i64 %229, 0
  br i1 %.not241298, label %._crit_edge303, label %.lr.ph302.preheader

.lr.ph302.preheader:                              ; preds = %223
  %231 = load ptr, ptr %169, align 8, !tbaa !16
  %232 = getelementptr inbounds i64, ptr %231, i64 %storemerge238305
  %233 = load i64, ptr %232, align 8, !tbaa !15
  %234 = add i64 %226, 1
  %235 = add i64 %234, %229
  %236 = and i64 %229, 1
  %lcmp.mod373.not.not = icmp eq i64 %236, 0
  br i1 %lcmp.mod373.not.not, label %.lr.ph302.prol, label %.lr.ph302.prol.loopexit

.lr.ph302.prol:                                   ; preds = %.lr.ph302.preheader
  %237 = load ptr, ptr %221, align 8, !tbaa !16
  %238 = getelementptr inbounds double, ptr %237, i64 %226
  %239 = load double, ptr %238, align 8, !tbaa !26
  %240 = load ptr, ptr %222, align 8, !tbaa !16
  %241 = getelementptr inbounds double, ptr %240, i64 %233
  store double %239, ptr %241, align 8, !tbaa !26
  %242 = add nsw i64 %233, 1
  %243 = add i64 %226, 1
  br label %.lr.ph302.prol.loopexit

.lr.ph302.prol.loopexit:                          ; preds = %.lr.ph302.prol, %.lr.ph302.preheader
  %.1300.unr = phi i64 [ %233, %.lr.ph302.preheader ], [ %242, %.lr.ph302.prol ]
  %storemerge240299.unr = phi i64 [ %226, %.lr.ph302.preheader ], [ %243, %.lr.ph302.prol ]
  %244 = icmp eq i64 %229, 0
  br i1 %244, label %._crit_edge303, label %.lr.ph302

.lr.ph302:                                        ; preds = %.lr.ph302.prol.loopexit, %.lr.ph302
  %.1300 = phi i64 [ %257, %.lr.ph302 ], [ %.1300.unr, %.lr.ph302.prol.loopexit ]
  %storemerge240299 = phi i64 [ %258, %.lr.ph302 ], [ %storemerge240299.unr, %.lr.ph302.prol.loopexit ]
  %245 = load ptr, ptr %221, align 8, !tbaa !16
  %246 = getelementptr inbounds double, ptr %245, i64 %storemerge240299
  %247 = load double, ptr %246, align 8, !tbaa !26
  %248 = load ptr, ptr %222, align 8, !tbaa !16
  %249 = getelementptr inbounds double, ptr %248, i64 %.1300
  store double %247, ptr %249, align 8, !tbaa !26
  %250 = load ptr, ptr %221, align 8, !tbaa !16
  %251 = getelementptr double, ptr %250, i64 %storemerge240299
  %252 = getelementptr i8, ptr %251, i64 8
  %253 = load double, ptr %252, align 8, !tbaa !26
  %254 = load ptr, ptr %222, align 8, !tbaa !16
  %255 = getelementptr double, ptr %254, i64 %.1300
  %256 = getelementptr i8, ptr %255, i64 8
  store double %253, ptr %256, align 8, !tbaa !26
  %257 = add nsw i64 %.1300, 2
  %258 = add i64 %storemerge240299, 2
  %exitcond.not.1 = icmp eq i64 %258, %235
  br i1 %exitcond.not.1, label %._crit_edge303, label %.lr.ph302, !llvm.loop !30

._crit_edge303:                                   ; preds = %.lr.ph302.prol.loopexit, %.lr.ph302, %223
  %storemerge240.lcssa = phi i64 [ %226, %223 ], [ %235, %.lr.ph302 ], [ %235, %.lr.ph302.prol.loopexit ]
  store i64 %storemerge240.lcssa, ptr %14, align 8, !tbaa !15
  %259 = add nuw nsw i64 %storemerge238305, 1
  store i64 %259, ptr %13, align 8, !tbaa !15
  %exitcond322.not = icmp eq i64 %259, %smax
  br i1 %exitcond322.not, label %.loopexit, label %223, !llvm.loop !31

.lr.ph286:                                        ; preds = %146
  %260 = getelementptr inbounds i8, ptr %8, i64 64
  call void @_ZN11alglib_impl23ivectorsetlengthatleastEPNS_9ae_vectorElPNS_8ae_stateE(ptr noundef nonnull %260, i64 noundef %1, ptr noundef %10)
  %261 = getelementptr inbounds i8, ptr %8, i64 56
  %262 = getelementptr inbounds i8, ptr %8, i64 120
  %smax357 = call i64 @llvm.smax.i64(i64 %1, i64 1)
  %xtraiter358 = and i64 %smax357, 1
  %263 = icmp eq i64 %1, 1
  br i1 %263, label %._crit_edge287.unr-lcssa, label %.lr.ph286.new

.lr.ph286.new:                                    ; preds = %.lr.ph286
  %unroll_iter362 = and i64 %smax357, 9223372036854775806
  br label %264

264:                                              ; preds = %264, %.lr.ph286.new
  %265 = phi i64 [ 0, %.lr.ph286.new ], [ %275, %264 ]
  %niter363 = phi i64 [ 0, %.lr.ph286.new ], [ %niter363.next.1, %264 ]
  %266 = load ptr, ptr %261, align 8, !tbaa !16
  %267 = getelementptr inbounds i64, ptr %266, i64 %265
  store i64 0, ptr %267, align 8, !tbaa !15
  %268 = load ptr, ptr %262, align 8, !tbaa !16
  %269 = getelementptr inbounds i64, ptr %268, i64 %265
  store i64 0, ptr %269, align 8, !tbaa !15
  %270 = or disjoint i64 %265, 1
  store i64 %270, ptr %13, align 8, !tbaa !15
  %271 = load ptr, ptr %261, align 8, !tbaa !16
  %272 = getelementptr inbounds i64, ptr %271, i64 %270
  store i64 0, ptr %272, align 8, !tbaa !15
  %273 = load ptr, ptr %262, align 8, !tbaa !16
  %274 = getelementptr inbounds i64, ptr %273, i64 %270
  store i64 0, ptr %274, align 8, !tbaa !15
  %275 = add nuw nsw i64 %265, 2
  store i64 %275, ptr %13, align 8, !tbaa !15
  %niter363.next.1 = add i64 %niter363, 2
  %niter363.ncmp.1.not = icmp eq i64 %niter363.next.1, %unroll_iter362
  br i1 %niter363.ncmp.1.not, label %._crit_edge287.unr-lcssa, label %264, !llvm.loop !32

._crit_edge287.unr-lcssa:                         ; preds = %264, %.lr.ph286
  %.unr360 = phi i64 [ 0, %.lr.ph286 ], [ %275, %264 ]
  %lcmp.mod361.not = icmp eq i64 %xtraiter358, 0
  br i1 %lcmp.mod361.not, label %._crit_edge287, label %._crit_edge287.epilog-lcssa

._crit_edge287.epilog-lcssa:                      ; preds = %._crit_edge287.unr-lcssa
  %276 = load ptr, ptr %261, align 8, !tbaa !16
  %277 = getelementptr inbounds i64, ptr %276, i64 %.unr360
  store i64 0, ptr %277, align 8, !tbaa !15
  %278 = load ptr, ptr %262, align 8, !tbaa !16
  %279 = getelementptr inbounds i64, ptr %278, i64 %.unr360
  store i64 0, ptr %279, align 8, !tbaa !15
  %280 = add nuw nsw i64 %.unr360, 1
  store i64 %280, ptr %13, align 8, !tbaa !15
  br label %._crit_edge287

._crit_edge287:                                   ; preds = %._crit_edge287.unr-lcssa, %._crit_edge287.epilog-lcssa
  store i64 0, ptr %15, align 8, !tbaa !15
  store i64 0, ptr %16, align 8, !tbaa !15
  %281 = call noundef zeroext i1 @_ZN11alglib_impl15sparseenumerateEPNS_12sparsematrixEPlS2_S2_S2_PdPNS_8ae_stateE(ptr noundef %0, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %17, ptr noundef %10)
  br i1 %281, label %.lr.ph289, label %._crit_edge290

.lr.ph289:                                        ; preds = %._crit_edge287
  %282 = getelementptr inbounds i8, ptr %4, i64 56
  %283 = getelementptr inbounds i8, ptr %8, i64 120
  %284 = getelementptr inbounds i8, ptr %8, i64 56
  br label %285

285:                                              ; preds = %.lr.ph289, %320
  %286 = load i64, ptr %14, align 8, !tbaa !15
  %287 = load i64, ptr %13, align 8, !tbaa !15
  br i1 %2, label %288, label %.critedge

288:                                              ; preds = %285
  %.not234 = icmp slt i64 %286, %287
  br i1 %.not234, label %320, label %289

.critedge:                                        ; preds = %285
  %.not235 = icmp sgt i64 %286, %287
  br i1 %.not235, label %320, label %289

289:                                              ; preds = %.critedge, %288
  %290 = load ptr, ptr %282, align 8, !tbaa !16
  %291 = getelementptr inbounds i64, ptr %290, i64 %287
  %292 = load i64, ptr %291, align 8, !tbaa !15
  store i64 %292, ptr %13, align 8, !tbaa !15
  %293 = getelementptr inbounds i64, ptr %290, i64 %286
  %294 = load i64, ptr %293, align 8, !tbaa !15
  store i64 %294, ptr %14, align 8, !tbaa !15
  %295 = icmp sge i64 %294, %292
  %296 = icmp sle i64 %294, %292
  %or.cond = select i1 %2, i1 %295, i1 %296
  br i1 %or.cond, label %298, label %297

297:                                              ; preds = %289
  call void @_ZN11alglib_impl5swapiEPlS0_PNS_8ae_stateE(ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef %10)
  %.pre = load i64, ptr %13, align 8, !tbaa !15
  %.pre326 = load i64, ptr %14, align 8, !tbaa !15
  br label %298

298:                                              ; preds = %289, %297
  %299 = phi i64 [ %294, %289 ], [ %.pre326, %297 ]
  %300 = phi i64 [ %292, %289 ], [ %.pre, %297 ]
  %301 = icmp sgt i64 %300, %299
  br i1 %301, label %302, label %311

302:                                              ; preds = %298
  %303 = load ptr, ptr %284, align 8, !tbaa !16
  %304 = getelementptr inbounds i64, ptr %303, i64 %300
  %305 = load i64, ptr %304, align 8, !tbaa !15
  %306 = sub nsw i64 %300, %299
  %307 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %305, i64 noundef %306, ptr noundef %10)
  %308 = load ptr, ptr %284, align 8, !tbaa !16
  %309 = load i64, ptr %13, align 8, !tbaa !15
  %310 = getelementptr inbounds i64, ptr %308, i64 %309
  store i64 %307, ptr %310, align 8, !tbaa !15
  br label %320

311:                                              ; preds = %298
  %312 = load ptr, ptr %283, align 8, !tbaa !16
  %313 = getelementptr inbounds i64, ptr %312, i64 %299
  %314 = load i64, ptr %313, align 8, !tbaa !15
  %315 = sub nsw i64 %299, %300
  %316 = call noundef i64 @_ZN11alglib_impl9ae_maxintEllPNS_8ae_stateE(i64 noundef %314, i64 noundef %315, ptr noundef %10)
  %317 = load ptr, ptr %283, align 8, !tbaa !16
  %318 = load i64, ptr %14, align 8, !tbaa !15
  %319 = getelementptr inbounds i64, ptr %317, i64 %318
  store i64 %316, ptr %319, align 8, !tbaa !15
  br label %320

320:                                              ; preds = %288, %302, %311, %.critedge
  %321 = call noundef zeroext i1 @_ZN11alglib_impl15sparseenumerateEPNS_12sparsematrixEPlS2_S2_S2_PdPNS_8ae_stateE(ptr noundef %0, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %17, ptr noundef %10)
  br i1 %321, label %285, label %._crit_edge290, !llvm.loop !33

._crit_edge290:                                   ; preds = %320, %._crit_edge287
  call void @_ZN11alglib_impl18sparsecreatesksbufEllPNS_9ae_vectorES1_PNS_12sparsematrixEPNS_8ae_stateE(i64 noundef %1, i64 noundef %1, ptr noundef %8, ptr noundef nonnull %260, ptr noundef %9, ptr noundef %10)
  store i64 0, ptr %15, align 8, !tbaa !15
  store i64 0, ptr %16, align 8, !tbaa !15
  %322 = call noundef zeroext i1 @_ZN11alglib_impl15sparseenumerateEPNS_12sparsematrixEPlS2_S2_S2_PdPNS_8ae_stateE(ptr noundef %0, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %17, ptr noundef %10)
  br i1 %322, label %.lr.ph292, label %.loopexit

.lr.ph292:                                        ; preds = %._crit_edge290
  %323 = getelementptr inbounds i8, ptr %4, i64 56
  br label %324

324:                                              ; preds = %.lr.ph292, %342
  %325 = load i64, ptr %14, align 8, !tbaa !15
  %326 = load i64, ptr %13, align 8, !tbaa !15
  br i1 %2, label %327, label %.critedge253

327:                                              ; preds = %324
  %.not232 = icmp slt i64 %325, %326
  br i1 %.not232, label %342, label %328

.critedge253:                                     ; preds = %324
  %.not233 = icmp sgt i64 %325, %326
  br i1 %.not233, label %342, label %328

328:                                              ; preds = %.critedge253, %327
  %329 = load ptr, ptr %323, align 8, !tbaa !16
  %330 = getelementptr inbounds i64, ptr %329, i64 %326
  %331 = load i64, ptr %330, align 8, !tbaa !15
  store i64 %331, ptr %13, align 8, !tbaa !15
  %332 = getelementptr inbounds i64, ptr %329, i64 %325
  %333 = load i64, ptr %332, align 8, !tbaa !15
  store i64 %333, ptr %14, align 8, !tbaa !15
  %334 = icmp sge i64 %333, %331
  %335 = icmp sle i64 %333, %331
  %or.cond259 = select i1 %2, i1 %334, i1 %335
  br i1 %or.cond259, label %337, label %336

336:                                              ; preds = %328
  call void @_ZN11alglib_impl5swapiEPlS0_PNS_8ae_stateE(ptr noundef nonnull %14, ptr noundef nonnull %13, ptr noundef %10)
  %.pre327 = load i64, ptr %13, align 8, !tbaa !15
  %.pre328 = load i64, ptr %14, align 8, !tbaa !15
  br label %337

337:                                              ; preds = %328, %336
  %338 = phi i64 [ %333, %328 ], [ %.pre328, %336 ]
  %339 = phi i64 [ %331, %328 ], [ %.pre327, %336 ]
  %340 = load double, ptr %17, align 8, !tbaa !26
  %341 = call noundef zeroext i1 @_ZN11alglib_impl21sparserewriteexistingEPNS_12sparsematrixElldPNS_8ae_stateE(ptr noundef %9, i64 noundef %339, i64 noundef %338, double noundef %340, ptr noundef %10)
  br label %342

342:                                              ; preds = %327, %337, %.critedge253
  %343 = call noundef zeroext i1 @_ZN11alglib_impl15sparseenumerateEPNS_12sparsematrixEPlS2_S2_S2_PdPNS_8ae_stateE(ptr noundef %0, ptr noundef nonnull %15, ptr noundef nonnull %16, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %17, ptr noundef %10)
  br i1 %343, label %324, label %.loopexit, !llvm.loop !34

.loopexit:                                        ; preds = %342, %._crit_edge303, %._crit_edge313, %._crit_edge290
  %344 = call noundef zeroext i1 @_ZN11alglib_impl21sparsecholeskyskylineEPNS_12sparsematrixElbPNS_8ae_stateE(ptr noundef %9, i64 noundef %1, i1 noundef zeroext %2, ptr noundef %10)
  br label %.loopexit336

.loopexit336:                                     ; preds = %.preheader265, %142, %145, %11, %.loopexit
  %.0195 = phi i1 [ %344, %.loopexit ], [ false, %11 ], [ %144, %145 ], [ %144, %142 ], [ false, %.preheader265 ]
  call void @_ZN11alglib_impl14ae_frame_leaveEPNS_8ae_stateE(ptr noundef %10)
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %18) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #6
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #6
  ret i1 %.0195
}

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

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 = { mustprogress nounwind 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 #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 = distinct !{!5, !6}
!6 = !{!"llvm.loop.mustprogress"}
!7 = !{!8, !9, i64 0}
!8 = !{!"_ZTSN11alglib_impl9ae_vectorE", !9, i64 0, !9, i64 8, !12, i64 16, !13, i64 24, !10, i64 56}
!9 = !{!"long", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"bool", !10, i64 0}
!13 = !{!"_ZTSN11alglib_impl12ae_dyn_blockE", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24}
!14 = !{!"any pointer", !10, i64 0}
!15 = !{!9, !9, i64 0}
!16 = !{!10, !10, i64 0}
!17 = distinct !{!17, !6}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.unroll.disable"}
!20 = distinct !{!20, !6}
!21 = distinct !{!21, !6}
!22 = distinct !{!22, !6}
!23 = distinct !{!23, !6}
!24 = distinct !{!24, !6}
!25 = distinct !{!25, !19}
!26 = !{!27, !27, i64 0}
!27 = !{!"double", !10, i64 0}
!28 = distinct !{!28, !6}
!29 = distinct !{!29, !6}
!30 = distinct !{!30, !6}
!31 = distinct !{!31, !6}
!32 = distinct !{!32, !6}
!33 = distinct !{!33, !6}
!34 = distinct !{!34, !6}


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