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

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i1 noundef zeroext, i1 noundef zeroext, i64 noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl11rmatrixgemmEllldPNS_9ae_matrixElllS1_llldS1_llPNS_8ae_stateE(i64 noundef, i64 noundef, i64 noundef, double noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) #1

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

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

declare noundef i64 @_ZN11alglib_impl15matrixtilesizeaEPNS_8ae_stateE(ptr noundef) #2

declare noundef i64 @_ZN11alglib_impl15matrixtilesizebEPNS_8ae_stateE(ptr noundef) #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl13rmatrixplurecEPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) #1 {
  %8 = alloca ptr, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i32, align 4
  store ptr %0, ptr %8, align 8, !tbaa !5
  store i64 %1, ptr %9, align 8, !tbaa !9
  store i64 %2, ptr %10, align 8, !tbaa !9
  store i64 %3, ptr %11, align 8, !tbaa !9
  store ptr %4, ptr %12, align 8, !tbaa !5
  store ptr %5, ptr %13, align 8, !tbaa !5
  store ptr %6, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #3
  %21 = load ptr, ptr %14, align 8, !tbaa !5
  %22 = call noundef i64 @_ZN11alglib_impl15matrixtilesizeaEPNS_8ae_stateE(ptr noundef %21)
  store i64 %22, ptr %18, align 8, !tbaa !9
  %23 = load ptr, ptr %14, align 8, !tbaa !5
  %24 = call noundef i64 @_ZN11alglib_impl15matrixtilesizebEPNS_8ae_stateE(ptr noundef %23)
  store i64 %24, ptr %19, align 8, !tbaa !9
  %25 = load i64, ptr %11, align 8, !tbaa !9
  %26 = load i64, ptr %19, align 8, !tbaa !9
  %27 = icmp sle i64 %25, %26
  br i1 %27, label %28, label %38

28:                                               ; preds = %7
  %29 = load ptr, ptr %8, align 8, !tbaa !5
  %30 = load i64, ptr %9, align 8, !tbaa !9
  %31 = load i64, ptr %10, align 8, !tbaa !9
  %32 = load i64, ptr %11, align 8, !tbaa !9
  %33 = load ptr, ptr %12, align 8, !tbaa !5
  %34 = load ptr, ptr %14, align 8, !tbaa !5
  %35 = call noundef zeroext i1 @_ZN11alglib_impl13rmatrixplumklEPNS_9ae_matrixElllPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %29, i64 noundef %30, i64 noundef %31, i64 noundef %32, ptr noundef %33, ptr noundef %34)
  br i1 %35, label %36, label %37

36:                                               ; preds = %28
  store i32 1, ptr %20, align 4
  br label %464

37:                                               ; preds = %28
  br label %38

38:                                               ; preds = %37, %7
  %39 = load i64, ptr %11, align 8, !tbaa !9
  %40 = load i64, ptr %18, align 8, !tbaa !9
  %41 = icmp sle i64 %39, %40
  br i1 %41, label %42, label %50

42:                                               ; preds = %38
  %43 = load ptr, ptr %8, align 8, !tbaa !5
  %44 = load i64, ptr %9, align 8, !tbaa !9
  %45 = load i64, ptr %10, align 8, !tbaa !9
  %46 = load i64, ptr %11, align 8, !tbaa !9
  %47 = load ptr, ptr %12, align 8, !tbaa !5
  %48 = load ptr, ptr %13, align 8, !tbaa !5
  %49 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_implL15dlu_rmatrixplu2EPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %43, i64 noundef %44, i64 noundef %45, i64 noundef %46, ptr noundef %47, ptr noundef %48, ptr noundef %49)
  store i32 1, ptr %20, align 4
  br label %464

50:                                               ; preds = %38
  %51 = load i64, ptr %11, align 8, !tbaa !9
  %52 = load i64, ptr %10, align 8, !tbaa !9
  %53 = icmp sgt i64 %51, %52
  br i1 %53, label %54, label %172

54:                                               ; preds = %50
  %55 = load ptr, ptr %8, align 8, !tbaa !5
  %56 = load i64, ptr %9, align 8, !tbaa !9
  %57 = load i64, ptr %10, align 8, !tbaa !9
  %58 = load i64, ptr %10, align 8, !tbaa !9
  %59 = load ptr, ptr %12, align 8, !tbaa !5
  %60 = load ptr, ptr %13, align 8, !tbaa !5
  %61 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rmatrixplurecEPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %55, i64 noundef %56, i64 noundef %57, i64 noundef %58, ptr noundef %59, ptr noundef %60, ptr noundef %61)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %62

62:                                               ; preds = %155, %54
  %63 = load i64, ptr %15, align 8, !tbaa !9
  %64 = load i64, ptr %10, align 8, !tbaa !9
  %65 = sub nsw i64 %64, 1
  %66 = icmp sle i64 %63, %65
  br i1 %66, label %67, label %158

67:                                               ; preds = %62
  %68 = load ptr, ptr %13, align 8, !tbaa !5
  %69 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %68, i32 0, i32 4
  %70 = load ptr, ptr %69, align 8, !tbaa !11
  %71 = getelementptr inbounds double, ptr %70, i64 0
  %72 = load ptr, ptr %8, align 8, !tbaa !5
  %73 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %72, i32 0, i32 6
  %74 = load ptr, ptr %73, align 8, !tbaa !11
  %75 = load i64, ptr %9, align 8, !tbaa !9
  %76 = load i64, ptr %15, align 8, !tbaa !9
  %77 = add nsw i64 %75, %76
  %78 = getelementptr inbounds ptr, ptr %74, i64 %77
  %79 = load ptr, ptr %78, align 8, !tbaa !5
  %80 = load i64, ptr %9, align 8, !tbaa !9
  %81 = load i64, ptr %10, align 8, !tbaa !9
  %82 = add nsw i64 %80, %81
  %83 = getelementptr inbounds double, ptr %79, i64 %82
  %84 = load i64, ptr %11, align 8, !tbaa !9
  %85 = load i64, ptr %10, align 8, !tbaa !9
  %86 = sub nsw i64 %84, %85
  %87 = sub nsw i64 %86, 1
  %88 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %87)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %71, i64 noundef 1, ptr noundef %83, i64 noundef 1, i64 noundef %88)
  %89 = load ptr, ptr %8, align 8, !tbaa !5
  %90 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %89, i32 0, i32 6
  %91 = load ptr, ptr %90, align 8, !tbaa !11
  %92 = load i64, ptr %9, align 8, !tbaa !9
  %93 = load i64, ptr %15, align 8, !tbaa !9
  %94 = add nsw i64 %92, %93
  %95 = getelementptr inbounds ptr, ptr %91, i64 %94
  %96 = load ptr, ptr %95, align 8, !tbaa !5
  %97 = load i64, ptr %9, align 8, !tbaa !9
  %98 = load i64, ptr %10, align 8, !tbaa !9
  %99 = add nsw i64 %97, %98
  %100 = getelementptr inbounds double, ptr %96, i64 %99
  %101 = load ptr, ptr %8, align 8, !tbaa !5
  %102 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %101, i32 0, i32 6
  %103 = load ptr, ptr %102, align 8, !tbaa !11
  %104 = load ptr, ptr %12, align 8, !tbaa !5
  %105 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %104, i32 0, i32 4
  %106 = load ptr, ptr %105, align 8, !tbaa !11
  %107 = load i64, ptr %9, align 8, !tbaa !9
  %108 = load i64, ptr %15, align 8, !tbaa !9
  %109 = add nsw i64 %107, %108
  %110 = getelementptr inbounds i64, ptr %106, i64 %109
  %111 = load i64, ptr %110, align 8, !tbaa !9
  %112 = getelementptr inbounds ptr, ptr %103, i64 %111
  %113 = load ptr, ptr %112, align 8, !tbaa !5
  %114 = load i64, ptr %9, align 8, !tbaa !9
  %115 = load i64, ptr %10, align 8, !tbaa !9
  %116 = add nsw i64 %114, %115
  %117 = getelementptr inbounds double, ptr %113, i64 %116
  %118 = load i64, ptr %9, align 8, !tbaa !9
  %119 = load i64, ptr %10, align 8, !tbaa !9
  %120 = add nsw i64 %118, %119
  %121 = load i64, ptr %9, align 8, !tbaa !9
  %122 = load i64, ptr %11, align 8, !tbaa !9
  %123 = add nsw i64 %121, %122
  %124 = sub nsw i64 %123, 1
  %125 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %120, i64 noundef %124)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %100, i64 noundef 1, ptr noundef %117, i64 noundef 1, i64 noundef %125)
  %126 = load ptr, ptr %8, align 8, !tbaa !5
  %127 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %126, i32 0, i32 6
  %128 = load ptr, ptr %127, align 8, !tbaa !11
  %129 = load ptr, ptr %12, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %129, i32 0, i32 4
  %131 = load ptr, ptr %130, align 8, !tbaa !11
  %132 = load i64, ptr %9, align 8, !tbaa !9
  %133 = load i64, ptr %15, align 8, !tbaa !9
  %134 = add nsw i64 %132, %133
  %135 = getelementptr inbounds i64, ptr %131, i64 %134
  %136 = load i64, ptr %135, align 8, !tbaa !9
  %137 = getelementptr inbounds ptr, ptr %128, i64 %136
  %138 = load ptr, ptr %137, align 8, !tbaa !5
  %139 = load i64, ptr %9, align 8, !tbaa !9
  %140 = load i64, ptr %10, align 8, !tbaa !9
  %141 = add nsw i64 %139, %140
  %142 = getelementptr inbounds double, ptr %138, i64 %141
  %143 = load ptr, ptr %13, align 8, !tbaa !5
  %144 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %143, i32 0, i32 4
  %145 = load ptr, ptr %144, align 8, !tbaa !11
  %146 = getelementptr inbounds double, ptr %145, i64 0
  %147 = load i64, ptr %9, align 8, !tbaa !9
  %148 = load i64, ptr %10, align 8, !tbaa !9
  %149 = add nsw i64 %147, %148
  %150 = load i64, ptr %9, align 8, !tbaa !9
  %151 = load i64, ptr %11, align 8, !tbaa !9
  %152 = add nsw i64 %150, %151
  %153 = sub nsw i64 %152, 1
  %154 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %149, i64 noundef %153)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %142, i64 noundef 1, ptr noundef %146, i64 noundef 1, i64 noundef %154)
  br label %155

155:                                              ; preds = %67
  %156 = load i64, ptr %15, align 8, !tbaa !9
  %157 = add nsw i64 %156, 1
  store i64 %157, ptr %15, align 8, !tbaa !9
  br label %62, !llvm.loop !12

158:                                              ; preds = %62
  %159 = load i64, ptr %10, align 8, !tbaa !9
  %160 = load i64, ptr %11, align 8, !tbaa !9
  %161 = load i64, ptr %10, align 8, !tbaa !9
  %162 = sub nsw i64 %160, %161
  %163 = load ptr, ptr %8, align 8, !tbaa !5
  %164 = load i64, ptr %9, align 8, !tbaa !9
  %165 = load i64, ptr %9, align 8, !tbaa !9
  %166 = load ptr, ptr %8, align 8, !tbaa !5
  %167 = load i64, ptr %9, align 8, !tbaa !9
  %168 = load i64, ptr %9, align 8, !tbaa !9
  %169 = load i64, ptr %10, align 8, !tbaa !9
  %170 = add nsw i64 %168, %169
  %171 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef %159, i64 noundef %162, ptr noundef %163, i64 noundef %164, i64 noundef %165, i1 noundef zeroext false, i1 noundef zeroext true, i64 noundef 0, ptr noundef %166, i64 noundef %167, i64 noundef %170, ptr noundef %171)
  store i32 1, ptr %20, align 4
  br label %464

172:                                              ; preds = %50
  %173 = load i64, ptr %11, align 8, !tbaa !9
  %174 = load i64, ptr %19, align 8, !tbaa !9
  %175 = icmp sgt i64 %173, %174
  br i1 %175, label %176, label %181

176:                                              ; preds = %172
  %177 = load i64, ptr %19, align 8, !tbaa !9
  store i64 %177, ptr %16, align 8, !tbaa !9
  %178 = load i64, ptr %11, align 8, !tbaa !9
  %179 = load i64, ptr %16, align 8, !tbaa !9
  %180 = sub nsw i64 %178, %179
  store i64 %180, ptr %17, align 8, !tbaa !9
  br label %185

181:                                              ; preds = %172
  %182 = load i64, ptr %11, align 8, !tbaa !9
  %183 = load i64, ptr %18, align 8, !tbaa !9
  %184 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl10tiledsplitEllPlS0_PNS_8ae_stateE(i64 noundef %182, i64 noundef %183, ptr noundef %16, ptr noundef %17, ptr noundef %184)
  br label %185

185:                                              ; preds = %181, %176
  %186 = load ptr, ptr %8, align 8, !tbaa !5
  %187 = load i64, ptr %9, align 8, !tbaa !9
  %188 = load i64, ptr %10, align 8, !tbaa !9
  %189 = load i64, ptr %16, align 8, !tbaa !9
  %190 = load ptr, ptr %12, align 8, !tbaa !5
  %191 = load ptr, ptr %13, align 8, !tbaa !5
  %192 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rmatrixplurecEPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %186, i64 noundef %187, i64 noundef %188, i64 noundef %189, ptr noundef %190, ptr noundef %191, ptr noundef %192)
  %193 = load i64, ptr %17, align 8, !tbaa !9
  %194 = icmp sgt i64 %193, 0
  br i1 %194, label %195, label %463

195:                                              ; preds = %185
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %196

196:                                              ; preds = %301, %195
  %197 = load i64, ptr %15, align 8, !tbaa !9
  %198 = load i64, ptr %16, align 8, !tbaa !9
  %199 = sub nsw i64 %198, 1
  %200 = icmp sle i64 %197, %199
  br i1 %200, label %201, label %304

201:                                              ; preds = %196
  %202 = load i64, ptr %9, align 8, !tbaa !9
  %203 = load i64, ptr %15, align 8, !tbaa !9
  %204 = add nsw i64 %202, %203
  %205 = load ptr, ptr %12, align 8, !tbaa !5
  %206 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %205, i32 0, i32 4
  %207 = load ptr, ptr %206, align 8, !tbaa !11
  %208 = load i64, ptr %9, align 8, !tbaa !9
  %209 = load i64, ptr %15, align 8, !tbaa !9
  %210 = add nsw i64 %208, %209
  %211 = getelementptr inbounds i64, ptr %207, i64 %210
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = icmp ne i64 %204, %212
  br i1 %213, label %214, label %300

214:                                              ; preds = %201
  %215 = load ptr, ptr %13, align 8, !tbaa !5
  %216 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %215, i32 0, i32 4
  %217 = load ptr, ptr %216, align 8, !tbaa !11
  %218 = getelementptr inbounds double, ptr %217, i64 0
  %219 = load ptr, ptr %8, align 8, !tbaa !5
  %220 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %219, i32 0, i32 6
  %221 = load ptr, ptr %220, align 8, !tbaa !11
  %222 = load i64, ptr %9, align 8, !tbaa !9
  %223 = load i64, ptr %15, align 8, !tbaa !9
  %224 = add nsw i64 %222, %223
  %225 = getelementptr inbounds ptr, ptr %221, i64 %224
  %226 = load ptr, ptr %225, align 8, !tbaa !5
  %227 = load i64, ptr %9, align 8, !tbaa !9
  %228 = load i64, ptr %16, align 8, !tbaa !9
  %229 = add nsw i64 %227, %228
  %230 = getelementptr inbounds double, ptr %226, i64 %229
  %231 = load i64, ptr %17, align 8, !tbaa !9
  %232 = sub nsw i64 %231, 1
  %233 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %232)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %218, i64 noundef 1, ptr noundef %230, i64 noundef 1, i64 noundef %233)
  %234 = load ptr, ptr %8, align 8, !tbaa !5
  %235 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %234, i32 0, i32 6
  %236 = load ptr, ptr %235, align 8, !tbaa !11
  %237 = load i64, ptr %9, align 8, !tbaa !9
  %238 = load i64, ptr %15, align 8, !tbaa !9
  %239 = add nsw i64 %237, %238
  %240 = getelementptr inbounds ptr, ptr %236, i64 %239
  %241 = load ptr, ptr %240, align 8, !tbaa !5
  %242 = load i64, ptr %9, align 8, !tbaa !9
  %243 = load i64, ptr %16, align 8, !tbaa !9
  %244 = add nsw i64 %242, %243
  %245 = getelementptr inbounds double, ptr %241, i64 %244
  %246 = load ptr, ptr %8, align 8, !tbaa !5
  %247 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %246, i32 0, i32 6
  %248 = load ptr, ptr %247, align 8, !tbaa !11
  %249 = load ptr, ptr %12, align 8, !tbaa !5
  %250 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %249, i32 0, i32 4
  %251 = load ptr, ptr %250, align 8, !tbaa !11
  %252 = load i64, ptr %9, align 8, !tbaa !9
  %253 = load i64, ptr %15, align 8, !tbaa !9
  %254 = add nsw i64 %252, %253
  %255 = getelementptr inbounds i64, ptr %251, i64 %254
  %256 = load i64, ptr %255, align 8, !tbaa !9
  %257 = getelementptr inbounds ptr, ptr %248, i64 %256
  %258 = load ptr, ptr %257, align 8, !tbaa !5
  %259 = load i64, ptr %9, align 8, !tbaa !9
  %260 = load i64, ptr %16, align 8, !tbaa !9
  %261 = add nsw i64 %259, %260
  %262 = getelementptr inbounds double, ptr %258, i64 %261
  %263 = load i64, ptr %9, align 8, !tbaa !9
  %264 = load i64, ptr %16, align 8, !tbaa !9
  %265 = add nsw i64 %263, %264
  %266 = load i64, ptr %9, align 8, !tbaa !9
  %267 = load i64, ptr %11, align 8, !tbaa !9
  %268 = add nsw i64 %266, %267
  %269 = sub nsw i64 %268, 1
  %270 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %265, i64 noundef %269)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %245, i64 noundef 1, ptr noundef %262, i64 noundef 1, i64 noundef %270)
  %271 = load ptr, ptr %8, align 8, !tbaa !5
  %272 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %271, i32 0, i32 6
  %273 = load ptr, ptr %272, align 8, !tbaa !11
  %274 = load ptr, ptr %12, align 8, !tbaa !5
  %275 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %274, i32 0, i32 4
  %276 = load ptr, ptr %275, align 8, !tbaa !11
  %277 = load i64, ptr %9, align 8, !tbaa !9
  %278 = load i64, ptr %15, align 8, !tbaa !9
  %279 = add nsw i64 %277, %278
  %280 = getelementptr inbounds i64, ptr %276, i64 %279
  %281 = load i64, ptr %280, align 8, !tbaa !9
  %282 = getelementptr inbounds ptr, ptr %273, i64 %281
  %283 = load ptr, ptr %282, align 8, !tbaa !5
  %284 = load i64, ptr %9, align 8, !tbaa !9
  %285 = load i64, ptr %16, align 8, !tbaa !9
  %286 = add nsw i64 %284, %285
  %287 = getelementptr inbounds double, ptr %283, i64 %286
  %288 = load ptr, ptr %13, align 8, !tbaa !5
  %289 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %288, i32 0, i32 4
  %290 = load ptr, ptr %289, align 8, !tbaa !11
  %291 = getelementptr inbounds double, ptr %290, i64 0
  %292 = load i64, ptr %9, align 8, !tbaa !9
  %293 = load i64, ptr %16, align 8, !tbaa !9
  %294 = add nsw i64 %292, %293
  %295 = load i64, ptr %9, align 8, !tbaa !9
  %296 = load i64, ptr %11, align 8, !tbaa !9
  %297 = add nsw i64 %295, %296
  %298 = sub nsw i64 %297, 1
  %299 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %294, i64 noundef %298)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %287, i64 noundef 1, ptr noundef %291, i64 noundef 1, i64 noundef %299)
  br label %300

300:                                              ; preds = %214, %201
  br label %301

301:                                              ; preds = %300
  %302 = load i64, ptr %15, align 8, !tbaa !9
  %303 = add nsw i64 %302, 1
  store i64 %303, ptr %15, align 8, !tbaa !9
  br label %196, !llvm.loop !14

304:                                              ; preds = %196
  %305 = load i64, ptr %16, align 8, !tbaa !9
  %306 = load i64, ptr %17, align 8, !tbaa !9
  %307 = load ptr, ptr %8, align 8, !tbaa !5
  %308 = load i64, ptr %9, align 8, !tbaa !9
  %309 = load i64, ptr %9, align 8, !tbaa !9
  %310 = load ptr, ptr %8, align 8, !tbaa !5
  %311 = load i64, ptr %9, align 8, !tbaa !9
  %312 = load i64, ptr %9, align 8, !tbaa !9
  %313 = load i64, ptr %16, align 8, !tbaa !9
  %314 = add nsw i64 %312, %313
  %315 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef %305, i64 noundef %306, ptr noundef %307, i64 noundef %308, i64 noundef %309, i1 noundef zeroext false, i1 noundef zeroext true, i64 noundef 0, ptr noundef %310, i64 noundef %311, i64 noundef %314, ptr noundef %315)
  %316 = load i64, ptr %10, align 8, !tbaa !9
  %317 = load i64, ptr %16, align 8, !tbaa !9
  %318 = sub nsw i64 %316, %317
  %319 = load i64, ptr %11, align 8, !tbaa !9
  %320 = load i64, ptr %16, align 8, !tbaa !9
  %321 = sub nsw i64 %319, %320
  %322 = load i64, ptr %16, align 8, !tbaa !9
  %323 = load ptr, ptr %8, align 8, !tbaa !5
  %324 = load i64, ptr %9, align 8, !tbaa !9
  %325 = load i64, ptr %16, align 8, !tbaa !9
  %326 = add nsw i64 %324, %325
  %327 = load i64, ptr %9, align 8, !tbaa !9
  %328 = load ptr, ptr %8, align 8, !tbaa !5
  %329 = load i64, ptr %9, align 8, !tbaa !9
  %330 = load i64, ptr %9, align 8, !tbaa !9
  %331 = load i64, ptr %16, align 8, !tbaa !9
  %332 = add nsw i64 %330, %331
  %333 = load ptr, ptr %8, align 8, !tbaa !5
  %334 = load i64, ptr %9, align 8, !tbaa !9
  %335 = load i64, ptr %16, align 8, !tbaa !9
  %336 = add nsw i64 %334, %335
  %337 = load i64, ptr %9, align 8, !tbaa !9
  %338 = load i64, ptr %16, align 8, !tbaa !9
  %339 = add nsw i64 %337, %338
  %340 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl11rmatrixgemmEllldPNS_9ae_matrixElllS1_llldS1_llPNS_8ae_stateE(i64 noundef %318, i64 noundef %321, i64 noundef %322, double noundef -1.000000e+00, ptr noundef %323, i64 noundef %326, i64 noundef %327, i64 noundef 0, ptr noundef %328, i64 noundef %329, i64 noundef %332, i64 noundef 0, double noundef 1.000000e+00, ptr noundef %333, i64 noundef %336, i64 noundef %339, ptr noundef %340)
  %341 = load ptr, ptr %8, align 8, !tbaa !5
  %342 = load i64, ptr %9, align 8, !tbaa !9
  %343 = load i64, ptr %16, align 8, !tbaa !9
  %344 = add nsw i64 %342, %343
  %345 = load i64, ptr %10, align 8, !tbaa !9
  %346 = load i64, ptr %16, align 8, !tbaa !9
  %347 = sub nsw i64 %345, %346
  %348 = load i64, ptr %11, align 8, !tbaa !9
  %349 = load i64, ptr %16, align 8, !tbaa !9
  %350 = sub nsw i64 %348, %349
  %351 = load ptr, ptr %12, align 8, !tbaa !5
  %352 = load ptr, ptr %13, align 8, !tbaa !5
  %353 = load ptr, ptr %14, align 8, !tbaa !5
  call void @_ZN11alglib_impl13rmatrixplurecEPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %341, i64 noundef %344, i64 noundef %347, i64 noundef %350, ptr noundef %351, ptr noundef %352, ptr noundef %353)
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %354

354:                                              ; preds = %459, %304
  %355 = load i64, ptr %15, align 8, !tbaa !9
  %356 = load i64, ptr %17, align 8, !tbaa !9
  %357 = sub nsw i64 %356, 1
  %358 = icmp sle i64 %355, %357
  br i1 %358, label %359, label %462

359:                                              ; preds = %354
  %360 = load i64, ptr %9, align 8, !tbaa !9
  %361 = load i64, ptr %16, align 8, !tbaa !9
  %362 = add nsw i64 %360, %361
  %363 = load i64, ptr %15, align 8, !tbaa !9
  %364 = add nsw i64 %362, %363
  %365 = load ptr, ptr %12, align 8, !tbaa !5
  %366 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %365, i32 0, i32 4
  %367 = load ptr, ptr %366, align 8, !tbaa !11
  %368 = load i64, ptr %9, align 8, !tbaa !9
  %369 = load i64, ptr %16, align 8, !tbaa !9
  %370 = add nsw i64 %368, %369
  %371 = load i64, ptr %15, align 8, !tbaa !9
  %372 = add nsw i64 %370, %371
  %373 = getelementptr inbounds i64, ptr %367, i64 %372
  %374 = load i64, ptr %373, align 8, !tbaa !9
  %375 = icmp ne i64 %364, %374
  br i1 %375, label %376, label %458

376:                                              ; preds = %359
  %377 = load ptr, ptr %13, align 8, !tbaa !5
  %378 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %377, i32 0, i32 4
  %379 = load ptr, ptr %378, align 8, !tbaa !11
  %380 = getelementptr inbounds double, ptr %379, i64 0
  %381 = load ptr, ptr %8, align 8, !tbaa !5
  %382 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %381, i32 0, i32 6
  %383 = load ptr, ptr %382, align 8, !tbaa !11
  %384 = load i64, ptr %9, align 8, !tbaa !9
  %385 = load i64, ptr %16, align 8, !tbaa !9
  %386 = add nsw i64 %384, %385
  %387 = load i64, ptr %15, align 8, !tbaa !9
  %388 = add nsw i64 %386, %387
  %389 = getelementptr inbounds ptr, ptr %383, i64 %388
  %390 = load ptr, ptr %389, align 8, !tbaa !5
  %391 = load i64, ptr %9, align 8, !tbaa !9
  %392 = getelementptr inbounds double, ptr %390, i64 %391
  %393 = load i64, ptr %16, align 8, !tbaa !9
  %394 = sub nsw i64 %393, 1
  %395 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %394)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %380, i64 noundef 1, ptr noundef %392, i64 noundef 1, i64 noundef %395)
  %396 = load ptr, ptr %8, align 8, !tbaa !5
  %397 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %396, i32 0, i32 6
  %398 = load ptr, ptr %397, align 8, !tbaa !11
  %399 = load i64, ptr %9, align 8, !tbaa !9
  %400 = load i64, ptr %16, align 8, !tbaa !9
  %401 = add nsw i64 %399, %400
  %402 = load i64, ptr %15, align 8, !tbaa !9
  %403 = add nsw i64 %401, %402
  %404 = getelementptr inbounds ptr, ptr %398, i64 %403
  %405 = load ptr, ptr %404, align 8, !tbaa !5
  %406 = load i64, ptr %9, align 8, !tbaa !9
  %407 = getelementptr inbounds double, ptr %405, i64 %406
  %408 = load ptr, ptr %8, align 8, !tbaa !5
  %409 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %408, i32 0, i32 6
  %410 = load ptr, ptr %409, align 8, !tbaa !11
  %411 = load ptr, ptr %12, align 8, !tbaa !5
  %412 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %411, i32 0, i32 4
  %413 = load ptr, ptr %412, align 8, !tbaa !11
  %414 = load i64, ptr %9, align 8, !tbaa !9
  %415 = load i64, ptr %16, align 8, !tbaa !9
  %416 = add nsw i64 %414, %415
  %417 = load i64, ptr %15, align 8, !tbaa !9
  %418 = add nsw i64 %416, %417
  %419 = getelementptr inbounds i64, ptr %413, i64 %418
  %420 = load i64, ptr %419, align 8, !tbaa !9
  %421 = getelementptr inbounds ptr, ptr %410, i64 %420
  %422 = load ptr, ptr %421, align 8, !tbaa !5
  %423 = load i64, ptr %9, align 8, !tbaa !9
  %424 = getelementptr inbounds double, ptr %422, i64 %423
  %425 = load i64, ptr %9, align 8, !tbaa !9
  %426 = load i64, ptr %9, align 8, !tbaa !9
  %427 = load i64, ptr %16, align 8, !tbaa !9
  %428 = add nsw i64 %426, %427
  %429 = sub nsw i64 %428, 1
  %430 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %425, i64 noundef %429)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %407, i64 noundef 1, ptr noundef %424, i64 noundef 1, i64 noundef %430)
  %431 = load ptr, ptr %8, align 8, !tbaa !5
  %432 = getelementptr inbounds %"struct.alglib_impl::ae_matrix", ptr %431, i32 0, i32 6
  %433 = load ptr, ptr %432, align 8, !tbaa !11
  %434 = load ptr, ptr %12, align 8, !tbaa !5
  %435 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %434, i32 0, i32 4
  %436 = load ptr, ptr %435, align 8, !tbaa !11
  %437 = load i64, ptr %9, align 8, !tbaa !9
  %438 = load i64, ptr %16, align 8, !tbaa !9
  %439 = add nsw i64 %437, %438
  %440 = load i64, ptr %15, align 8, !tbaa !9
  %441 = add nsw i64 %439, %440
  %442 = getelementptr inbounds i64, ptr %436, i64 %441
  %443 = load i64, ptr %442, align 8, !tbaa !9
  %444 = getelementptr inbounds ptr, ptr %433, i64 %443
  %445 = load ptr, ptr %444, align 8, !tbaa !5
  %446 = load i64, ptr %9, align 8, !tbaa !9
  %447 = getelementptr inbounds double, ptr %445, i64 %446
  %448 = load ptr, ptr %13, align 8, !tbaa !5
  %449 = getelementptr inbounds %"struct.alglib_impl::ae_vector", ptr %448, i32 0, i32 4
  %450 = load ptr, ptr %449, align 8, !tbaa !11
  %451 = getelementptr inbounds double, ptr %450, i64 0
  %452 = load i64, ptr %9, align 8, !tbaa !9
  %453 = load i64, ptr %9, align 8, !tbaa !9
  %454 = load i64, ptr %16, align 8, !tbaa !9
  %455 = add nsw i64 %453, %454
  %456 = sub nsw i64 %455, 1
  %457 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %452, i64 noundef %456)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %447, i64 noundef 1, ptr noundef %451, i64 noundef 1, i64 noundef %457)
  br label %458

458:                                              ; preds = %376, %359
  br label %459

459:                                              ; preds = %458
  %460 = load i64, ptr %15, align 8, !tbaa !9
  %461 = add nsw i64 %460, 1
  store i64 %461, ptr %15, align 8, !tbaa !9
  br label %354, !llvm.loop !15

462:                                              ; preds = %354
  br label %463

463:                                              ; preds = %462, %185
  store i32 0, ptr %20, align 4
  br label %464

464:                                              ; preds = %463, %158, %42, %36
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  %465 = load i32, ptr %20, align 4
  switch i32 %465, label %467 [
    i32 0, label %466
    i32 1, label %466
  ]

466:                                              ; preds = %464, %464
  ret void

467:                                              ; preds = %464
  unreachable
}

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL15dlu_rmatrixplu2EPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}


; 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"

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

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i1 noundef zeroext, i1 noundef zeroext, i64 noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN11alglib_impl11rmatrixgemmEllldPNS_9ae_matrixElllS1_llldS1_llPNS_8ae_stateE(i64 noundef, i64 noundef, i64 noundef, double noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, double noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

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

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

declare noundef i64 @_ZN11alglib_impl15matrixtilesizeaEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

declare noundef i64 @_ZN11alglib_impl15matrixtilesizebEPNS_8ae_stateE(ptr noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11alglib_impl13rmatrixplurecEPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6) local_unnamed_addr #1 {
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #3
  %10 = tail call noundef i64 @_ZN11alglib_impl15matrixtilesizeaEPNS_8ae_stateE(ptr noundef %6)
  %11 = tail call noundef i64 @_ZN11alglib_impl15matrixtilesizebEPNS_8ae_stateE(ptr noundef %6)
  %.not = icmp slt i64 %11, %3
  br i1 %.not, label %14, label %12

12:                                               ; preds = %7
  %13 = tail call noundef zeroext i1 @_ZN11alglib_impl13rmatrixplumklEPNS_9ae_matrixElllPNS_9ae_vectorEPNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, ptr noundef %4, ptr noundef %6)
  br i1 %13, label %.loopexit, label %14

14:                                               ; preds = %12, %7
  %.not187 = icmp slt i64 %10, %3
  br i1 %.not187, label %16, label %15

15:                                               ; preds = %14
  tail call void @_ZN11alglib_implL15dlu_rmatrixplu2EPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6)
  br label %.loopexit

16:                                               ; preds = %14
  %17 = icmp sgt i64 %3, %2
  br i1 %17, label %18, label %57

18:                                               ; preds = %16
  tail call void @_ZN11alglib_impl13rmatrixplurecEPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %2, ptr noundef %4, ptr noundef %5, ptr noundef %6)
  %.not192.not199 = icmp sgt i64 %2, 0
  br i1 %.not192.not199, label %.lr.ph202, label %.._crit_edge203_crit_edge

.._crit_edge203_crit_edge:                        ; preds = %18
  %.pre208 = add nsw i64 %2, %1
  br label %._crit_edge203

.lr.ph202:                                        ; preds = %18
  %19 = getelementptr inbounds i8, ptr %5, i64 56
  %20 = getelementptr inbounds i8, ptr %0, i64 72
  %21 = add nsw i64 %2, %1
  %22 = xor i64 %2, -1
  %23 = add i64 %22, %3
  %24 = getelementptr inbounds i8, ptr %4, i64 56
  %25 = add i64 %1, -1
  %26 = add i64 %25, %3
  br label %27

27:                                               ; preds = %.lr.ph202, %27
  %.0200 = phi i64 [ 0, %.lr.ph202 ], [ %55, %27 ]
  %28 = load ptr, ptr %19, align 8, !tbaa !5
  %29 = load ptr, ptr %20, align 8, !tbaa !5
  %30 = add nsw i64 %.0200, %1
  %31 = getelementptr inbounds ptr, ptr %29, i64 %30
  %32 = load ptr, ptr %31, align 8, !tbaa !8
  %33 = getelementptr inbounds double, ptr %32, i64 %21
  %34 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %23)
  tail call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %28, i64 noundef 1, ptr noundef %33, i64 noundef 1, i64 noundef %34)
  %35 = load ptr, ptr %20, align 8, !tbaa !5
  %36 = getelementptr inbounds ptr, ptr %35, i64 %30
  %37 = load ptr, ptr %36, align 8, !tbaa !8
  %38 = getelementptr inbounds double, ptr %37, i64 %21
  %39 = load ptr, ptr %24, align 8, !tbaa !5
  %40 = getelementptr inbounds i64, ptr %39, i64 %30
  %41 = load i64, ptr %40, align 8, !tbaa !10
  %42 = getelementptr inbounds ptr, ptr %35, i64 %41
  %43 = load ptr, ptr %42, align 8, !tbaa !8
  %44 = getelementptr inbounds double, ptr %43, i64 %21
  %45 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %21, i64 noundef %26)
  tail call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %38, i64 noundef 1, ptr noundef %44, i64 noundef 1, i64 noundef %45)
  %46 = load ptr, ptr %20, align 8, !tbaa !5
  %47 = load ptr, ptr %24, align 8, !tbaa !5
  %48 = getelementptr inbounds i64, ptr %47, i64 %30
  %49 = load i64, ptr %48, align 8, !tbaa !10
  %50 = getelementptr inbounds ptr, ptr %46, i64 %49
  %51 = load ptr, ptr %50, align 8, !tbaa !8
  %52 = getelementptr inbounds double, ptr %51, i64 %21
  %53 = load ptr, ptr %19, align 8, !tbaa !5
  %54 = tail call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %21, i64 noundef %26)
  tail call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %52, i64 noundef 1, ptr noundef %53, i64 noundef 1, i64 noundef %54)
  %55 = add nuw nsw i64 %.0200, 1
  %exitcond.not = icmp eq i64 %55, %2
  br i1 %exitcond.not, label %._crit_edge203, label %27, !llvm.loop !12

._crit_edge203:                                   ; preds = %27, %.._crit_edge203_crit_edge
  %.pre-phi = phi i64 [ %.pre208, %.._crit_edge203_crit_edge ], [ %21, %27 ]
  %56 = sub nsw i64 %3, %2
  tail call void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef %2, i64 noundef %56, ptr noundef %0, i64 noundef %1, i64 noundef %1, i1 noundef zeroext false, i1 noundef zeroext true, i64 noundef 0, ptr noundef %0, i64 noundef %1, i64 noundef %.pre-phi, ptr noundef %6)
  br label %.loopexit

57:                                               ; preds = %16
  br i1 %.not, label %58, label %60

58:                                               ; preds = %57
  store i64 %11, ptr %8, align 8, !tbaa !10
  %59 = sub nsw i64 %3, %11
  store i64 %59, ptr %9, align 8, !tbaa !10
  br label %61

60:                                               ; preds = %57
  call void @_ZN11alglib_impl10tiledsplitEllPlS0_PNS_8ae_stateE(i64 noundef %3, i64 noundef %10, ptr noundef nonnull %8, ptr noundef nonnull %9, ptr noundef %6)
  %.pre = load i64, ptr %8, align 8, !tbaa !10
  br label %61

61:                                               ; preds = %60, %58
  %62 = phi i64 [ %.pre, %60 ], [ %11, %58 ]
  call void @_ZN11alglib_impl13rmatrixplurecEPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %0, i64 noundef %1, i64 noundef %2, i64 noundef %62, ptr noundef %4, ptr noundef %5, ptr noundef %6)
  %63 = load i64, ptr %9, align 8, !tbaa !10
  %64 = icmp sgt i64 %63, 0
  br i1 %64, label %.preheader, label %.loopexit

.preheader:                                       ; preds = %61
  %65 = load i64, ptr %8, align 8, !tbaa !10
  %.not188.not193 = icmp sgt i64 %65, 0
  br i1 %.not188.not193, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader
  %66 = getelementptr inbounds i8, ptr %4, i64 56
  %67 = getelementptr inbounds i8, ptr %5, i64 56
  %68 = getelementptr inbounds i8, ptr %0, i64 72
  %69 = add i64 %1, -1
  %70 = add i64 %69, %3
  br label %71

71:                                               ; preds = %.lr.ph, %111
  %72 = phi i64 [ %65, %.lr.ph ], [ %112, %111 ]
  %.1194 = phi i64 [ 0, %.lr.ph ], [ %113, %111 ]
  %73 = add nsw i64 %.1194, %1
  %74 = load ptr, ptr %66, align 8, !tbaa !5
  %75 = getelementptr inbounds i64, ptr %74, i64 %73
  %76 = load i64, ptr %75, align 8, !tbaa !10
  %.not191 = icmp eq i64 %73, %76
  br i1 %.not191, label %111, label %77

77:                                               ; preds = %71
  %78 = load ptr, ptr %67, align 8, !tbaa !5
  %79 = load ptr, ptr %68, align 8, !tbaa !5
  %80 = getelementptr inbounds ptr, ptr %79, i64 %73
  %81 = load ptr, ptr %80, align 8, !tbaa !8
  %82 = getelementptr double, ptr %81, i64 %72
  %83 = getelementptr double, ptr %82, i64 %1
  %84 = load i64, ptr %9, align 8, !tbaa !10
  %85 = add nsw i64 %84, -1
  %86 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %85)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %78, i64 noundef 1, ptr noundef %83, i64 noundef 1, i64 noundef %86)
  %87 = load ptr, ptr %68, align 8, !tbaa !5
  %88 = getelementptr inbounds ptr, ptr %87, i64 %73
  %89 = load ptr, ptr %88, align 8, !tbaa !8
  %90 = load i64, ptr %8, align 8, !tbaa !10
  %91 = add nsw i64 %90, %1
  %92 = getelementptr inbounds double, ptr %89, i64 %91
  %93 = load ptr, ptr %66, align 8, !tbaa !5
  %94 = getelementptr inbounds i64, ptr %93, i64 %73
  %95 = load i64, ptr %94, align 8, !tbaa !10
  %96 = getelementptr inbounds ptr, ptr %87, i64 %95
  %97 = load ptr, ptr %96, align 8, !tbaa !8
  %98 = getelementptr inbounds double, ptr %97, i64 %91
  %99 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %91, i64 noundef %70)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %92, i64 noundef 1, ptr noundef %98, i64 noundef 1, i64 noundef %99)
  %100 = load ptr, ptr %68, align 8, !tbaa !5
  %101 = load ptr, ptr %66, align 8, !tbaa !5
  %102 = getelementptr inbounds i64, ptr %101, i64 %73
  %103 = load i64, ptr %102, align 8, !tbaa !10
  %104 = getelementptr inbounds ptr, ptr %100, i64 %103
  %105 = load ptr, ptr %104, align 8, !tbaa !8
  %106 = load i64, ptr %8, align 8, !tbaa !10
  %107 = add nsw i64 %106, %1
  %108 = getelementptr inbounds double, ptr %105, i64 %107
  %109 = load ptr, ptr %67, align 8, !tbaa !5
  %110 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %107, i64 noundef %70)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %108, i64 noundef 1, ptr noundef %109, i64 noundef 1, i64 noundef %110)
  %.pre205 = load i64, ptr %8, align 8, !tbaa !10
  br label %111

111:                                              ; preds = %71, %77
  %112 = phi i64 [ %72, %71 ], [ %.pre205, %77 ]
  %113 = add nuw nsw i64 %.1194, 1
  %.not188.not = icmp slt i64 %113, %112
  br i1 %.not188.not, label %71, label %._crit_edge.loopexit, !llvm.loop !14

._crit_edge.loopexit:                             ; preds = %111
  %.pre206 = load i64, ptr %9, align 8, !tbaa !10
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader
  %114 = phi i64 [ %63, %.preheader ], [ %.pre206, %._crit_edge.loopexit ]
  %.lcssa = phi i64 [ %65, %.preheader ], [ %112, %._crit_edge.loopexit ]
  %115 = add nsw i64 %.lcssa, %1
  call void @_ZN11alglib_impl15rmatrixlefttrsmEllPNS_9ae_matrixEllbblS1_llPNS_8ae_stateE(i64 noundef %.lcssa, i64 noundef %114, ptr noundef %0, i64 noundef %1, i64 noundef %1, i1 noundef zeroext false, i1 noundef zeroext true, i64 noundef 0, ptr noundef %0, i64 noundef %1, i64 noundef %115, ptr noundef %6)
  %116 = load i64, ptr %8, align 8, !tbaa !10
  %117 = sub nsw i64 %2, %116
  %118 = sub nsw i64 %3, %116
  %119 = add nsw i64 %116, %1
  call void @_ZN11alglib_impl11rmatrixgemmEllldPNS_9ae_matrixElllS1_llldS1_llPNS_8ae_stateE(i64 noundef %117, i64 noundef %118, i64 noundef %116, double noundef -1.000000e+00, ptr noundef %0, i64 noundef %119, i64 noundef %1, i64 noundef 0, ptr noundef %0, i64 noundef %1, i64 noundef %119, i64 noundef 0, double noundef 1.000000e+00, ptr noundef %0, i64 noundef %119, i64 noundef %119, ptr noundef %6)
  %120 = load i64, ptr %8, align 8, !tbaa !10
  %121 = add nsw i64 %120, %1
  %122 = sub nsw i64 %2, %120
  %123 = sub nsw i64 %3, %120
  call void @_ZN11alglib_impl13rmatrixplurecEPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef %0, i64 noundef %121, i64 noundef %122, i64 noundef %123, ptr noundef %4, ptr noundef %5, ptr noundef %6)
  %124 = load i64, ptr %9, align 8, !tbaa !10
  %.not189.not195 = icmp sgt i64 %124, 0
  br i1 %.not189.not195, label %.lr.ph198, label %.loopexit

.lr.ph198:                                        ; preds = %._crit_edge
  %125 = getelementptr inbounds i8, ptr %4, i64 56
  %126 = getelementptr inbounds i8, ptr %5, i64 56
  %127 = getelementptr inbounds i8, ptr %0, i64 72
  br label %128

128:                                              ; preds = %.lr.ph198, %172
  %129 = phi i64 [ %124, %.lr.ph198 ], [ %173, %172 ]
  %.2196 = phi i64 [ 0, %.lr.ph198 ], [ %174, %172 ]
  %130 = load i64, ptr %8, align 8, !tbaa !10
  %131 = add i64 %.2196, %1
  %132 = add i64 %131, %130
  %133 = load ptr, ptr %125, align 8, !tbaa !5
  %134 = getelementptr inbounds i64, ptr %133, i64 %132
  %135 = load i64, ptr %134, align 8, !tbaa !10
  %.not190 = icmp eq i64 %132, %135
  br i1 %.not190, label %172, label %136

136:                                              ; preds = %128
  %137 = load ptr, ptr %126, align 8, !tbaa !5
  %138 = load ptr, ptr %127, align 8, !tbaa !5
  %139 = getelementptr inbounds ptr, ptr %138, i64 %132
  %140 = load ptr, ptr %139, align 8, !tbaa !8
  %141 = getelementptr inbounds double, ptr %140, i64 %1
  %142 = add nsw i64 %130, -1
  %143 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef 0, i64 noundef %142)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %137, i64 noundef 1, ptr noundef %141, i64 noundef 1, i64 noundef %143)
  %144 = load ptr, ptr %127, align 8, !tbaa !5
  %145 = load i64, ptr %8, align 8, !tbaa !10
  %146 = add nsw i64 %145, %1
  %147 = add nsw i64 %146, %.2196
  %148 = getelementptr inbounds ptr, ptr %144, i64 %147
  %149 = load ptr, ptr %148, align 8, !tbaa !8
  %150 = getelementptr inbounds double, ptr %149, i64 %1
  %151 = load ptr, ptr %125, align 8, !tbaa !5
  %152 = getelementptr inbounds i64, ptr %151, i64 %147
  %153 = load i64, ptr %152, align 8, !tbaa !10
  %154 = getelementptr inbounds ptr, ptr %144, i64 %153
  %155 = load ptr, ptr %154, align 8, !tbaa !8
  %156 = getelementptr inbounds double, ptr %155, i64 %1
  %157 = add nsw i64 %146, -1
  %158 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %1, i64 noundef %157)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %150, i64 noundef 1, ptr noundef %156, i64 noundef 1, i64 noundef %158)
  %159 = load ptr, ptr %127, align 8, !tbaa !5
  %160 = load ptr, ptr %125, align 8, !tbaa !5
  %161 = load i64, ptr %8, align 8, !tbaa !10
  %162 = add nsw i64 %161, %1
  %163 = getelementptr i64, ptr %160, i64 %162
  %164 = getelementptr i64, ptr %163, i64 %.2196
  %165 = load i64, ptr %164, align 8, !tbaa !10
  %166 = getelementptr inbounds ptr, ptr %159, i64 %165
  %167 = load ptr, ptr %166, align 8, !tbaa !8
  %168 = getelementptr inbounds double, ptr %167, i64 %1
  %169 = load ptr, ptr %126, align 8, !tbaa !5
  %170 = add nsw i64 %162, -1
  %171 = call noundef i64 @_ZN11alglib_impl8ae_v_lenEll(i64 noundef %1, i64 noundef %170)
  call void @_ZN11alglib_impl9ae_v_moveEPdlPKdll(ptr noundef %168, i64 noundef 1, ptr noundef %169, i64 noundef 1, i64 noundef %171)
  %.pre207 = load i64, ptr %9, align 8, !tbaa !10
  br label %172

172:                                              ; preds = %128, %136
  %173 = phi i64 [ %129, %128 ], [ %.pre207, %136 ]
  %174 = add nuw nsw i64 %.2196, 1
  %.not189.not = icmp slt i64 %174, %173
  br i1 %.not189.not, label %128, label %.loopexit, !llvm.loop !15

.loopexit:                                        ; preds = %172, %._crit_edge, %61, %12, %._crit_edge203, %15
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #3
  ret void
}

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

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN11alglib_implL15dlu_rmatrixplu2EPNS_9ae_matrixElllPNS_9ae_vectorES3_PNS_8ae_stateE(ptr noundef, i64 noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C++ TBAA"}
!8 = !{!9, !9, i64 0}
!9 = !{!"any pointer", !6, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"long", !6, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}
!15 = distinct !{!15, !13}


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