; LLVM IR from ERGO-Code/HiGHS :: src/ipm/basiclu (lu_build_factors)

; 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.lu = type { i32, i32, i32, double, double, double, i32, i32, i32, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__.lu_build_factors = external hidden unnamed_addr constant [37 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [24 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @lu_build_factors(ptr noundef %0) #0 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca double, align 8
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca double, align 8
  %50 = alloca double, align 8
  %51 = alloca double, align 8
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #8
  %54 = load ptr, ptr %3, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.lu, ptr %54, i32 0, i32 13
  %56 = load i32, ptr %55, align 4, !tbaa !9
  store i32 %56, ptr %4, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #8
  %57 = load ptr, ptr %3, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.lu, ptr %57, i32 0, i32 50
  %59 = load i32, ptr %58, align 4, !tbaa !14
  store i32 %59, ptr %5, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  %60 = load ptr, ptr %3, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.lu, ptr %60, i32 0, i32 0
  %62 = load i32, ptr %61, align 8, !tbaa !15
  store i32 %62, ptr %6, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  %63 = load ptr, ptr %3, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.lu, ptr %63, i32 0, i32 1
  %65 = load i32, ptr %64, align 4, !tbaa !16
  store i32 %65, ptr %7, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  %66 = load ptr, ptr %3, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.lu, ptr %66, i32 0, i32 2
  %68 = load i32, ptr %67, align 8, !tbaa !17
  store i32 %68, ptr %8, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  %69 = load ptr, ptr %3, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.lu, ptr %69, i32 0, i32 8
  %71 = load i32, ptr %70, align 8, !tbaa !18
  store i32 %71, ptr %9, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %72 = load ptr, ptr %3, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.lu, ptr %72, i32 0, i32 9
  %74 = load double, ptr %73, align 8, !tbaa !19
  store double %74, ptr %10, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %75 = load ptr, ptr %3, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.lu, ptr %75, i32 0, i32 94
  %77 = load ptr, ptr %76, align 8, !tbaa !21
  store ptr %77, ptr %11, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %78 = load ptr, ptr %3, align 8, !tbaa !5
  %79 = getelementptr inbounds %struct.lu, ptr %78, i32 0, i32 96
  %80 = load ptr, ptr %79, align 8, !tbaa !22
  store ptr %80, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %81 = load ptr, ptr %3, align 8, !tbaa !5
  %82 = getelementptr inbounds %struct.lu, ptr %81, i32 0, i32 95
  %83 = load ptr, ptr %82, align 8, !tbaa !23
  store ptr %83, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %84 = load ptr, ptr %3, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.lu, ptr %84, i32 0, i32 97
  %86 = load ptr, ptr %85, align 8, !tbaa !24
  store ptr %86, ptr %14, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %87 = load ptr, ptr %3, align 8, !tbaa !5
  %88 = getelementptr inbounds %struct.lu, ptr %87, i32 0, i32 78
  %89 = load ptr, ptr %88, align 8, !tbaa !25
  store ptr %89, ptr %15, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %90 = load ptr, ptr %3, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.lu, ptr %90, i32 0, i32 80
  %92 = load ptr, ptr %91, align 8, !tbaa !26
  store ptr %92, ptr %16, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %93 = load ptr, ptr %3, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.lu, ptr %93, i32 0, i32 87
  %95 = load ptr, ptr %94, align 8, !tbaa !27
  store ptr %95, ptr %17, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %96 = load ptr, ptr %3, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.lu, ptr %96, i32 0, i32 98
  %98 = load ptr, ptr %97, align 8, !tbaa !28
  store ptr %98, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %99 = load ptr, ptr %3, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.lu, ptr %99, i32 0, i32 89
  %101 = load ptr, ptr %100, align 8, !tbaa !29
  store ptr %101, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %102 = load ptr, ptr %3, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.lu, ptr %102, i32 0, i32 91
  %104 = load ptr, ptr %103, align 8, !tbaa !30
  store ptr %104, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %105 = load ptr, ptr %3, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.lu, ptr %105, i32 0, i32 99
  %107 = load ptr, ptr %106, align 8, !tbaa !31
  store ptr %107, ptr %21, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %108 = load ptr, ptr %3, align 8, !tbaa !5
  %109 = getelementptr inbounds %struct.lu, ptr %108, i32 0, i32 82
  %110 = load ptr, ptr %109, align 8, !tbaa !32
  store ptr %110, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %111 = load ptr, ptr %3, align 8, !tbaa !5
  %112 = getelementptr inbounds %struct.lu, ptr %111, i32 0, i32 86
  %113 = load ptr, ptr %112, align 8, !tbaa !33
  store ptr %113, ptr %23, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #8
  %114 = load ptr, ptr %3, align 8, !tbaa !5
  %115 = getelementptr inbounds %struct.lu, ptr %114, i32 0, i32 88
  %116 = load ptr, ptr %115, align 8, !tbaa !34
  store ptr %116, ptr %24, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #8
  %117 = load ptr, ptr %3, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.lu, ptr %117, i32 0, i32 90
  %119 = load ptr, ptr %118, align 8, !tbaa !35
  store ptr %119, ptr %25, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  %120 = load ptr, ptr %3, align 8, !tbaa !5
  %121 = getelementptr inbounds %struct.lu, ptr %120, i32 0, i32 92
  %122 = load ptr, ptr %121, align 8, !tbaa !36
  store ptr %122, ptr %26, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #8
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.lu, ptr %123, i32 0, i32 104
  %125 = load ptr, ptr %124, align 8, !tbaa !37
  store ptr %125, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %126 = load ptr, ptr %3, align 8, !tbaa !5
  %127 = getelementptr inbounds %struct.lu, ptr %126, i32 0, i32 105
  %128 = load ptr, ptr %127, align 8, !tbaa !38
  store ptr %128, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.lu, ptr %129, i32 0, i32 71
  %131 = load ptr, ptr %130, align 8, !tbaa !39
  store ptr %131, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %132 = load ptr, ptr %3, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.lu, ptr %132, i32 0, i32 74
  %134 = load ptr, ptr %133, align 8, !tbaa !40
  store ptr %134, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %135 = load ptr, ptr %3, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.lu, ptr %135, i32 0, i32 72
  %137 = load ptr, ptr %136, align 8, !tbaa !41
  store ptr %137, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #8
  %138 = load ptr, ptr %3, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.lu, ptr %138, i32 0, i32 75
  %140 = load ptr, ptr %139, align 8, !tbaa !42
  store ptr %140, ptr %32, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #8
  %141 = load ptr, ptr %3, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.lu, ptr %141, i32 0, i32 73
  %143 = load ptr, ptr %142, align 8, !tbaa !43
  store ptr %143, ptr %33, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #8
  %144 = load ptr, ptr %3, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.lu, ptr %144, i32 0, i32 76
  %146 = load ptr, ptr %145, align 8, !tbaa !44
  store ptr %146, ptr %34, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #8
  %147 = load ptr, ptr %3, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.lu, ptr %147, i32 0, i32 85
  %149 = load ptr, ptr %148, align 8, !tbaa !45
  store ptr %149, ptr %35, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #8
  store i32 0, ptr %52, align 4, !tbaa !13
  %150 = load ptr, ptr %18, align 8, !tbaa !5
  %151 = load i32, ptr %5, align 4, !tbaa !13
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds i32, ptr %150, i64 %152
  %154 = load i32, ptr %153, align 4, !tbaa !13
  store i32 %154, ptr %43, align 4, !tbaa !13
  %155 = load i32, ptr %5, align 4, !tbaa !13
  %156 = load i32, ptr %43, align 4, !tbaa !13
  %157 = sub nsw i32 %156, %155
  store i32 %157, ptr %43, align 4, !tbaa !13
  %158 = load ptr, ptr %21, align 8, !tbaa !5
  %159 = load i32, ptr %5, align 4, !tbaa !13
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds i32, ptr %158, i64 %160
  %162 = load i32, ptr %161, align 4, !tbaa !13
  store i32 %162, ptr %44, align 4, !tbaa !13
  %163 = load i32, ptr %43, align 4, !tbaa !13
  %164 = load i32, ptr %4, align 4, !tbaa !13
  %165 = add nsw i32 %163, %164
  %166 = mul nsw i32 2, %165
  store i32 %166, ptr %45, align 4, !tbaa !13
  %167 = load i32, ptr %6, align 4, !tbaa !13
  %168 = load i32, ptr %45, align 4, !tbaa !13
  %169 = icmp slt i32 %167, %168
  br i1 %169, label %170, label %176

170:                                              ; preds = %1
  %171 = load i32, ptr %45, align 4, !tbaa !13
  %172 = load i32, ptr %6, align 4, !tbaa !13
  %173 = sub nsw i32 %171, %172
  %174 = load ptr, ptr %3, align 8, !tbaa !5
  %175 = getelementptr inbounds %struct.lu, ptr %174, i32 0, i32 14
  store i32 %173, ptr %175, align 8, !tbaa !46
  store i32 1, ptr %52, align 4, !tbaa !13
  br label %176

176:                                              ; preds = %170, %1
  %177 = load i32, ptr %44, align 4, !tbaa !13
  %178 = load i32, ptr %4, align 4, !tbaa !13
  %179 = add nsw i32 %177, %178
  %180 = add nsw i32 %179, 1
  store i32 %180, ptr %45, align 4, !tbaa !13
  %181 = load i32, ptr %7, align 4, !tbaa !13
  %182 = load i32, ptr %45, align 4, !tbaa !13
  %183 = icmp slt i32 %181, %182
  br i1 %183, label %184, label %190

184:                                              ; preds = %176
  %185 = load i32, ptr %45, align 4, !tbaa !13
  %186 = load i32, ptr %7, align 4, !tbaa !13
  %187 = sub nsw i32 %185, %186
  %188 = load ptr, ptr %3, align 8, !tbaa !5
  %189 = getelementptr inbounds %struct.lu, ptr %188, i32 0, i32 15
  store i32 %187, ptr %189, align 4, !tbaa !47
  store i32 1, ptr %52, align 4, !tbaa !13
  br label %190

190:                                              ; preds = %184, %176
  %191 = load i32, ptr %44, align 4, !tbaa !13
  %192 = sitofp i32 %191 to double
  %193 = load double, ptr %10, align 8, !tbaa !20
  %194 = load i32, ptr %44, align 4, !tbaa !13
  %195 = sitofp i32 %194 to double
  %196 = call double @llvm.fmuladd.f64(double %193, double %195, double %192)
  %197 = load i32, ptr %4, align 4, !tbaa !13
  %198 = load i32, ptr %9, align 4, !tbaa !13
  %199 = mul nsw i32 %197, %198
  %200 = sitofp i32 %199 to double
  %201 = fadd double %196, %200
  %202 = fptosi double %201 to i32
  store i32 %202, ptr %45, align 4, !tbaa !13
  %203 = load i32, ptr %8, align 4, !tbaa !13
  %204 = load i32, ptr %45, align 4, !tbaa !13
  %205 = icmp slt i32 %203, %204
  br i1 %205, label %206, label %212

206:                                              ; preds = %190
  %207 = load i32, ptr %45, align 4, !tbaa !13
  %208 = load i32, ptr %8, align 4, !tbaa !13
  %209 = sub nsw i32 %207, %208
  %210 = load ptr, ptr %3, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.lu, ptr %210, i32 0, i32 16
  store i32 %209, ptr %211, align 8, !tbaa !48
  store i32 1, ptr %52, align 4, !tbaa !13
  br label %212

212:                                              ; preds = %206, %190
  %213 = load i32, ptr %52, align 4, !tbaa !13
  %214 = icmp ne i32 %213, 0
  br i1 %214, label %215, label %217

215:                                              ; preds = %212
  %216 = load i32, ptr %52, align 4, !tbaa !13
  store i32 %216, ptr %2, align 4
  store i32 1, ptr %53, align 4
  br label %1085

217:                                              ; preds = %212
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %218

218:                                              ; preds = %227, %217
  %219 = load i32, ptr %40, align 4, !tbaa !13
  %220 = load i32, ptr %4, align 4, !tbaa !13
  %221 = icmp slt i32 %219, %220
  br i1 %221, label %222, label %230

222:                                              ; preds = %218
  %223 = load ptr, ptr %16, align 8, !tbaa !5
  %224 = load i32, ptr %40, align 4, !tbaa !13
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds i32, ptr %223, i64 %225
  store i32 -1, ptr %226, align 4, !tbaa !13
  br label %227

227:                                              ; preds = %222
  %228 = load i32, ptr %40, align 4, !tbaa !13
  %229 = add nsw i32 %228, 1
  store i32 %229, ptr %40, align 4, !tbaa !13
  br label %218, !llvm.loop !49

230:                                              ; preds = %218
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %231

231:                                              ; preds = %240, %230
  %232 = load i32, ptr %40, align 4, !tbaa !13
  %233 = load i32, ptr %4, align 4, !tbaa !13
  %234 = icmp slt i32 %232, %233
  br i1 %234, label %235, label %243

235:                                              ; preds = %231
  %236 = load ptr, ptr %15, align 8, !tbaa !5
  %237 = load i32, ptr %40, align 4, !tbaa !13
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds i32, ptr %236, i64 %238
  store i32 -1, ptr %239, align 4, !tbaa !13
  br label %240

240:                                              ; preds = %235
  %241 = load i32, ptr %40, align 4, !tbaa !13
  %242 = add nsw i32 %241, 1
  store i32 %242, ptr %40, align 4, !tbaa !13
  br label %231, !llvm.loop !51

243:                                              ; preds = %231
  %244 = load i32, ptr %5, align 4, !tbaa !13
  store i32 %244, ptr %41, align 4, !tbaa !13
  store i32 0, ptr %36, align 4, !tbaa !13
  br label %245

245:                                              ; preds = %273, %243
  %246 = load i32, ptr %36, align 4, !tbaa !13
  %247 = load i32, ptr %4, align 4, !tbaa !13
  %248 = icmp slt i32 %246, %247
  br i1 %248, label %249, label %276

249:                                              ; preds = %245
  %250 = load ptr, ptr %11, align 8, !tbaa !5
  %251 = load i32, ptr %36, align 4, !tbaa !13
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %250, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !13
  %255 = icmp slt i32 %254, 0
  br i1 %255, label %256, label %263

256:                                              ; preds = %249
  %257 = load i32, ptr %41, align 4, !tbaa !13
  %258 = add nsw i32 %257, 1
  store i32 %258, ptr %41, align 4, !tbaa !13
  %259 = load ptr, ptr %11, align 8, !tbaa !5
  %260 = load i32, ptr %36, align 4, !tbaa !13
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds i32, ptr %259, i64 %261
  store i32 %257, ptr %262, align 4, !tbaa !13
  br label %263

263:                                              ; preds = %256, %249
  %264 = load i32, ptr %36, align 4, !tbaa !13
  %265 = load ptr, ptr %16, align 8, !tbaa !5
  %266 = load ptr, ptr %11, align 8, !tbaa !5
  %267 = load i32, ptr %36, align 4, !tbaa !13
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds i32, ptr %266, i64 %268
  %270 = load i32, ptr %269, align 4, !tbaa !13
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds i32, ptr %265, i64 %271
  store i32 %264, ptr %272, align 4, !tbaa !13
  br label %273

273:                                              ; preds = %263
  %274 = load i32, ptr %36, align 4, !tbaa !13
  %275 = add nsw i32 %274, 1
  store i32 %275, ptr %36, align 4, !tbaa !13
  br label %245, !llvm.loop !52

276:                                              ; preds = %245
  %277 = load i32, ptr %41, align 4, !tbaa !13
  %278 = load i32, ptr %4, align 4, !tbaa !13
  %279 = icmp eq i32 %277, %278
  br i1 %279, label %280, label %281

280:                                              ; preds = %276
  br label %282

281:                                              ; preds = %276
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 219, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

282:                                              ; preds = %280
  %283 = load i32, ptr %5, align 4, !tbaa !13
  store i32 %283, ptr %41, align 4, !tbaa !13
  store i32 0, ptr %37, align 4, !tbaa !13
  br label %284

284:                                              ; preds = %312, %282
  %285 = load i32, ptr %37, align 4, !tbaa !13
  %286 = load i32, ptr %4, align 4, !tbaa !13
  %287 = icmp slt i32 %285, %286
  br i1 %287, label %288, label %315

288:                                              ; preds = %284
  %289 = load ptr, ptr %12, align 8, !tbaa !5
  %290 = load i32, ptr %37, align 4, !tbaa !13
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %289, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !13
  %294 = icmp slt i32 %293, 0
  br i1 %294, label %295, label %302

295:                                              ; preds = %288
  %296 = load i32, ptr %41, align 4, !tbaa !13
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %41, align 4, !tbaa !13
  %298 = load ptr, ptr %12, align 8, !tbaa !5
  %299 = load i32, ptr %37, align 4, !tbaa !13
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds i32, ptr %298, i64 %300
  store i32 %296, ptr %301, align 4, !tbaa !13
  br label %302

302:                                              ; preds = %295, %288
  %303 = load i32, ptr %37, align 4, !tbaa !13
  %304 = load ptr, ptr %15, align 8, !tbaa !5
  %305 = load ptr, ptr %12, align 8, !tbaa !5
  %306 = load i32, ptr %37, align 4, !tbaa !13
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i32, ptr %305, i64 %307
  %309 = load i32, ptr %308, align 4, !tbaa !13
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %304, i64 %310
  store i32 %303, ptr %311, align 4, !tbaa !13
  br label %312

312:                                              ; preds = %302
  %313 = load i32, ptr %37, align 4, !tbaa !13
  %314 = add nsw i32 %313, 1
  store i32 %314, ptr %37, align 4, !tbaa !13
  br label %284, !llvm.loop !53

315:                                              ; preds = %284
  %316 = load i32, ptr %41, align 4, !tbaa !13
  %317 = load i32, ptr %4, align 4, !tbaa !13
  %318 = icmp eq i32 %316, %317
  br i1 %318, label %319, label %320

319:                                              ; preds = %315
  br label %321

320:                                              ; preds = %315
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 227, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

321:                                              ; preds = %319
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %322

322:                                              ; preds = %336, %321
  %323 = load i32, ptr %40, align 4, !tbaa !13
  %324 = load i32, ptr %4, align 4, !tbaa !13
  %325 = icmp slt i32 %323, %324
  br i1 %325, label %326, label %339

326:                                              ; preds = %322
  %327 = load ptr, ptr %16, align 8, !tbaa !5
  %328 = load i32, ptr %40, align 4, !tbaa !13
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds i32, ptr %327, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !13
  %332 = icmp sge i32 %331, 0
  br i1 %332, label %333, label %334

333:                                              ; preds = %326
  br label %335

334:                                              ; preds = %326
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 231, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

335:                                              ; preds = %333
  br label %336

336:                                              ; preds = %335
  %337 = load i32, ptr %40, align 4, !tbaa !13
  %338 = add nsw i32 %337, 1
  store i32 %338, ptr %40, align 4, !tbaa !13
  br label %322, !llvm.loop !54

339:                                              ; preds = %322
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %340

340:                                              ; preds = %354, %339
  %341 = load i32, ptr %40, align 4, !tbaa !13
  %342 = load i32, ptr %4, align 4, !tbaa !13
  %343 = icmp slt i32 %341, %342
  br i1 %343, label %344, label %357

344:                                              ; preds = %340
  %345 = load ptr, ptr %15, align 8, !tbaa !5
  %346 = load i32, ptr %40, align 4, !tbaa !13
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i32, ptr %345, i64 %347
  %349 = load i32, ptr %348, align 4, !tbaa !13
  %350 = icmp sge i32 %349, 0
  br i1 %350, label %351, label %352

351:                                              ; preds = %344
  br label %353

352:                                              ; preds = %344
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 233, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

353:                                              ; preds = %351
  br label %354

354:                                              ; preds = %353
  %355 = load i32, ptr %40, align 4, !tbaa !13
  %356 = add nsw i32 %355, 1
  store i32 %356, ptr %40, align 4, !tbaa !13
  br label %340, !llvm.loop !55

357:                                              ; preds = %340
  %358 = load i32, ptr %5, align 4, !tbaa !13
  store i32 %358, ptr %40, align 4, !tbaa !13
  br label %359

359:                                              ; preds = %372, %357
  %360 = load i32, ptr %40, align 4, !tbaa !13
  %361 = load i32, ptr %4, align 4, !tbaa !13
  %362 = icmp slt i32 %360, %361
  br i1 %362, label %363, label %375

363:                                              ; preds = %359
  %364 = load ptr, ptr %27, align 8, !tbaa !5
  %365 = load ptr, ptr %15, align 8, !tbaa !5
  %366 = load i32, ptr %40, align 4, !tbaa !13
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %365, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !13
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds double, ptr %364, i64 %370
  store double 1.000000e+00, ptr %371, align 8, !tbaa !20
  br label %372

372:                                              ; preds = %363
  %373 = load i32, ptr %40, align 4, !tbaa !13
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %40, align 4, !tbaa !13
  br label %359, !llvm.loop !56

375:                                              ; preds = %359
  %376 = load ptr, ptr %18, align 8, !tbaa !5
  %377 = load i32, ptr %5, align 4, !tbaa !13
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds i32, ptr %376, i64 %378
  %380 = load i32, ptr %379, align 4, !tbaa !13
  store i32 %380, ptr %47, align 4, !tbaa !13
  %381 = load i32, ptr %5, align 4, !tbaa !13
  store i32 %381, ptr %40, align 4, !tbaa !13
  br label %382

382:                                              ; preds = %398, %375
  %383 = load i32, ptr %40, align 4, !tbaa !13
  %384 = load i32, ptr %4, align 4, !tbaa !13
  %385 = icmp slt i32 %383, %384
  br i1 %385, label %386, label %401

386:                                              ; preds = %382
  %387 = load ptr, ptr %29, align 8, !tbaa !5
  %388 = load i32, ptr %47, align 4, !tbaa !13
  %389 = add nsw i32 %388, 1
  store i32 %389, ptr %47, align 4, !tbaa !13
  %390 = sext i32 %388 to i64
  %391 = getelementptr inbounds i32, ptr %387, i64 %390
  store i32 -1, ptr %391, align 4, !tbaa !13
  %392 = load i32, ptr %47, align 4, !tbaa !13
  %393 = load ptr, ptr %18, align 8, !tbaa !5
  %394 = load i32, ptr %40, align 4, !tbaa !13
  %395 = add nsw i32 %394, 1
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds i32, ptr %393, i64 %396
  store i32 %392, ptr %397, align 4, !tbaa !13
  br label %398

398:                                              ; preds = %386
  %399 = load i32, ptr %40, align 4, !tbaa !13
  %400 = add nsw i32 %399, 1
  store i32 %400, ptr %40, align 4, !tbaa !13
  br label %382, !llvm.loop !57

401:                                              ; preds = %382
  %402 = load ptr, ptr %18, align 8, !tbaa !5
  %403 = load i32, ptr %4, align 4, !tbaa !13
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds i32, ptr %402, i64 %404
  %406 = load i32, ptr %405, align 4, !tbaa !13
  %407 = load i32, ptr %43, align 4, !tbaa !13
  %408 = load i32, ptr %4, align 4, !tbaa !13
  %409 = add nsw i32 %407, %408
  %410 = icmp eq i32 %406, %409
  br i1 %410, label %411, label %412

411:                                              ; preds = %401
  br label %413

412:                                              ; preds = %401
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 254, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

413:                                              ; preds = %411
  store i32 0, ptr %36, align 4, !tbaa !13
  br label %414

414:                                              ; preds = %432, %413
  %415 = load i32, ptr %36, align 4, !tbaa !13
  %416 = load i32, ptr %4, align 4, !tbaa !13
  %417 = icmp slt i32 %415, %416
  br i1 %417, label %418, label %435

418:                                              ; preds = %414
  %419 = load ptr, ptr %18, align 8, !tbaa !5
  %420 = load ptr, ptr %11, align 8, !tbaa !5
  %421 = load i32, ptr %36, align 4, !tbaa !13
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds i32, ptr %420, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !13
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds i32, ptr %419, i64 %425
  %427 = load i32, ptr %426, align 4, !tbaa !13
  %428 = load ptr, ptr %17, align 8, !tbaa !5
  %429 = load i32, ptr %36, align 4, !tbaa !13
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds i32, ptr %428, i64 %430
  store i32 %427, ptr %431, align 4, !tbaa !13
  br label %432

432:                                              ; preds = %418
  %433 = load i32, ptr %36, align 4, !tbaa !13
  %434 = add nsw i32 %433, 1
  store i32 %434, ptr %36, align 4, !tbaa !13
  br label %414, !llvm.loop !58

435:                                              ; preds = %414
  %436 = load ptr, ptr %35, align 8, !tbaa !5
  %437 = load i32, ptr %4, align 4, !tbaa !13
  %438 = sext i32 %437 to i64
  %439 = mul i64 %438, 4
  call void @llvm.memset.p0.i64(ptr align 4 %436, i8 0, i64 %439, i1 false)
  store i32 0, ptr %46, align 4, !tbaa !13
  br label %440

440:                                              ; preds = %461, %435
  %441 = load i32, ptr %46, align 4, !tbaa !13
  %442 = load i32, ptr %43, align 4, !tbaa !13
  %443 = load i32, ptr %4, align 4, !tbaa !13
  %444 = add nsw i32 %442, %443
  %445 = icmp slt i32 %441, %444
  br i1 %445, label %446, label %464

446:                                              ; preds = %440
  %447 = load ptr, ptr %29, align 8, !tbaa !5
  %448 = load i32, ptr %46, align 4, !tbaa !13
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i32, ptr %447, i64 %449
  %451 = load i32, ptr %450, align 4, !tbaa !13
  store i32 %451, ptr %36, align 4, !tbaa !13
  %452 = icmp sge i32 %451, 0
  br i1 %452, label %453, label %460

453:                                              ; preds = %446
  %454 = load ptr, ptr %35, align 8, !tbaa !5
  %455 = load i32, ptr %36, align 4, !tbaa !13
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds i32, ptr %454, i64 %456
  %458 = load i32, ptr %457, align 4, !tbaa !13
  %459 = add nsw i32 %458, 1
  store i32 %459, ptr %457, align 4, !tbaa !13
  br label %460

460:                                              ; preds = %453, %446
  br label %461

461:                                              ; preds = %460
  %462 = load i32, ptr %46, align 4, !tbaa !13
  %463 = add nsw i32 %462, 1
  store i32 %463, ptr %46, align 4, !tbaa !13
  br label %440, !llvm.loop !59

464:                                              ; preds = %440
  %465 = load i32, ptr %43, align 4, !tbaa !13
  %466 = load i32, ptr %4, align 4, !tbaa !13
  %467 = add nsw i32 %465, %466
  store i32 %467, ptr %47, align 4, !tbaa !13
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %468

468:                                              ; preds = %509, %464
  %469 = load i32, ptr %40, align 4, !tbaa !13
  %470 = load i32, ptr %4, align 4, !tbaa !13
  %471 = icmp slt i32 %469, %470
  br i1 %471, label %472, label %512

472:                                              ; preds = %468
  %473 = load ptr, ptr %16, align 8, !tbaa !5
  %474 = load i32, ptr %40, align 4, !tbaa !13
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i32, ptr %473, i64 %475
  %477 = load i32, ptr %476, align 4, !tbaa !13
  store i32 %477, ptr %36, align 4, !tbaa !13
  %478 = load i32, ptr %47, align 4, !tbaa !13
  %479 = load ptr, ptr %20, align 8, !tbaa !5
  %480 = load i32, ptr %40, align 4, !tbaa !13
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds i32, ptr %479, i64 %481
  store i32 %478, ptr %482, align 4, !tbaa !13
  %483 = load i32, ptr %47, align 4, !tbaa !13
  %484 = load ptr, ptr %19, align 8, !tbaa !5
  %485 = load i32, ptr %36, align 4, !tbaa !13
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds i32, ptr %484, i64 %486
  store i32 %483, ptr %487, align 4, !tbaa !13
  %488 = load ptr, ptr %35, align 8, !tbaa !5
  %489 = load i32, ptr %36, align 4, !tbaa !13
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds i32, ptr %488, i64 %490
  %492 = load i32, ptr %491, align 4, !tbaa !13
  %493 = load i32, ptr %47, align 4, !tbaa !13
  %494 = add nsw i32 %493, %492
  store i32 %494, ptr %47, align 4, !tbaa !13
  %495 = load ptr, ptr %29, align 8, !tbaa !5
  %496 = load i32, ptr %47, align 4, !tbaa !13
  %497 = add nsw i32 %496, 1
  store i32 %497, ptr %47, align 4, !tbaa !13
  %498 = sext i32 %496 to i64
  %499 = getelementptr inbounds i32, ptr %495, i64 %498
  store i32 -1, ptr %499, align 4, !tbaa !13
  %500 = load ptr, ptr %20, align 8, !tbaa !5
  %501 = load i32, ptr %40, align 4, !tbaa !13
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds i32, ptr %500, i64 %502
  %504 = load i32, ptr %503, align 4, !tbaa !13
  %505 = load ptr, ptr %35, align 8, !tbaa !5
  %506 = load i32, ptr %36, align 4, !tbaa !13
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds i32, ptr %505, i64 %507
  store i32 %504, ptr %508, align 4, !tbaa !13
  br label %509

509:                                              ; preds = %472
  %510 = load i32, ptr %40, align 4, !tbaa !13
  %511 = add nsw i32 %510, 1
  store i32 %511, ptr %40, align 4, !tbaa !13
  br label %468, !llvm.loop !60

512:                                              ; preds = %468
  %513 = load i32, ptr %47, align 4, !tbaa !13
  %514 = load i32, ptr %43, align 4, !tbaa !13
  %515 = load i32, ptr %4, align 4, !tbaa !13
  %516 = add nsw i32 %514, %515
  %517 = mul nsw i32 2, %516
  %518 = icmp eq i32 %513, %517
  br i1 %518, label %519, label %520

519:                                              ; preds = %512
  br label %521

520:                                              ; preds = %512
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 277, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

521:                                              ; preds = %519
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %522

522:                                              ; preds = %569, %521
  %523 = load i32, ptr %40, align 4, !tbaa !13
  %524 = load i32, ptr %4, align 4, !tbaa !13
  %525 = icmp slt i32 %523, %524
  br i1 %525, label %526, label %572

526:                                              ; preds = %522
  %527 = load ptr, ptr %16, align 8, !tbaa !5
  %528 = load i32, ptr %40, align 4, !tbaa !13
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds i32, ptr %527, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !13
  store i32 %531, ptr %38, align 4, !tbaa !13
  %532 = load ptr, ptr %18, align 8, !tbaa !5
  %533 = load i32, ptr %40, align 4, !tbaa !13
  %534 = sext i32 %533 to i64
  %535 = getelementptr inbounds i32, ptr %532, i64 %534
  %536 = load i32, ptr %535, align 4, !tbaa !13
  store i32 %536, ptr %46, align 4, !tbaa !13
  br label %537

537:                                              ; preds = %565, %526
  %538 = load ptr, ptr %29, align 8, !tbaa !5
  %539 = load i32, ptr %46, align 4, !tbaa !13
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds i32, ptr %538, i64 %540
  %542 = load i32, ptr %541, align 4, !tbaa !13
  store i32 %542, ptr %36, align 4, !tbaa !13
  %543 = icmp sge i32 %542, 0
  br i1 %543, label %544, label %568

544:                                              ; preds = %537
  %545 = load ptr, ptr %35, align 8, !tbaa !5
  %546 = load i32, ptr %36, align 4, !tbaa !13
  %547 = sext i32 %546 to i64
  %548 = getelementptr inbounds i32, ptr %545, i64 %547
  %549 = load i32, ptr %548, align 4, !tbaa !13
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr %548, align 4, !tbaa !13
  store i32 %549, ptr %47, align 4, !tbaa !13
  %551 = load i32, ptr %38, align 4, !tbaa !13
  %552 = load ptr, ptr %29, align 8, !tbaa !5
  %553 = load i32, ptr %47, align 4, !tbaa !13
  %554 = sext i32 %553 to i64
  %555 = getelementptr inbounds i32, ptr %552, i64 %554
  store i32 %551, ptr %555, align 4, !tbaa !13
  %556 = load ptr, ptr %30, align 8, !tbaa !5
  %557 = load i32, ptr %46, align 4, !tbaa !13
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds double, ptr %556, i64 %558
  %560 = load double, ptr %559, align 8, !tbaa !20
  %561 = load ptr, ptr %30, align 8, !tbaa !5
  %562 = load i32, ptr %47, align 4, !tbaa !13
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds double, ptr %561, i64 %563
  store double %560, ptr %564, align 8, !tbaa !20
  br label %565

565:                                              ; preds = %544
  %566 = load i32, ptr %46, align 4, !tbaa !13
  %567 = add nsw i32 %566, 1
  store i32 %567, ptr %46, align 4, !tbaa !13
  br label %537, !llvm.loop !61

568:                                              ; preds = %537
  br label %569

569:                                              ; preds = %568
  %570 = load i32, ptr %40, align 4, !tbaa !13
  %571 = add nsw i32 %570, 1
  store i32 %571, ptr %40, align 4, !tbaa !13
  br label %522, !llvm.loop !62

572:                                              ; preds = %522
  store i32 0, ptr %36, align 4, !tbaa !13
  br label %573

573:                                              ; preds = %591, %572
  %574 = load i32, ptr %36, align 4, !tbaa !13
  %575 = load i32, ptr %4, align 4, !tbaa !13
  %576 = icmp slt i32 %574, %575
  br i1 %576, label %577, label %594

577:                                              ; preds = %573
  %578 = load ptr, ptr %29, align 8, !tbaa !5
  %579 = load ptr, ptr %35, align 8, !tbaa !5
  %580 = load i32, ptr %36, align 4, !tbaa !13
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds i32, ptr %579, i64 %581
  %583 = load i32, ptr %582, align 4, !tbaa !13
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds i32, ptr %578, i64 %584
  %586 = load i32, ptr %585, align 4, !tbaa !13
  %587 = icmp eq i32 %586, -1
  br i1 %587, label %588, label %589

588:                                              ; preds = %577
  br label %590

589:                                              ; preds = %577
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 291, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

590:                                              ; preds = %588
  br label %591

591:                                              ; preds = %590
  %592 = load i32, ptr %36, align 4, !tbaa !13
  %593 = add nsw i32 %592, 1
  store i32 %593, ptr %36, align 4, !tbaa !13
  br label %573, !llvm.loop !63

594:                                              ; preds = %573
  %595 = load i32, ptr %43, align 4, !tbaa !13
  %596 = load i32, ptr %4, align 4, !tbaa !13
  %597 = add nsw i32 %595, %596
  %598 = mul nsw i32 2, %597
  %599 = load ptr, ptr %22, align 8, !tbaa !5
  %600 = getelementptr inbounds i32, ptr %599, i64 0
  store i32 %598, ptr %600, align 4, !tbaa !13
  %601 = load i32, ptr %4, align 4, !tbaa !13
  %602 = load ptr, ptr %23, align 8, !tbaa !5
  %603 = load ptr, ptr %24, align 8, !tbaa !5
  %604 = load ptr, ptr %25, align 8, !tbaa !5
  %605 = load ptr, ptr %26, align 8, !tbaa !5
  %606 = load i32, ptr %8, align 4, !tbaa !13
  call void @lu_file_empty(i32 noundef %601, ptr noundef %602, ptr noundef %603, ptr noundef %604, ptr noundef %605, i32 noundef %606)
  %607 = load ptr, ptr %35, align 8, !tbaa !5
  %608 = load i32, ptr %4, align 4, !tbaa !13
  %609 = sext i32 %608 to i64
  %610 = mul i64 %609, 4
  call void @llvm.memset.p0.i64(ptr align 4 %607, i8 0, i64 %610, i1 false)
  store i32 0, ptr %47, align 4, !tbaa !13
  %611 = load i32, ptr %5, align 4, !tbaa !13
  %612 = load i32, ptr %4, align 4, !tbaa !13
  %613 = icmp eq i32 %611, %612
  br i1 %613, label %614, label %700

614:                                              ; preds = %594
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %615

615:                                              ; preds = %696, %614
  %616 = load i32, ptr %40, align 4, !tbaa !13
  %617 = load i32, ptr %4, align 4, !tbaa !13
  %618 = icmp slt i32 %616, %617
  br i1 %618, label %619, label %699

619:                                              ; preds = %615
  %620 = load ptr, ptr %15, align 8, !tbaa !5
  %621 = load i32, ptr %40, align 4, !tbaa !13
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds i32, ptr %620, i64 %622
  %624 = load i32, ptr %623, align 4, !tbaa !13
  store i32 %624, ptr %39, align 4, !tbaa !13
  %625 = load i32, ptr %47, align 4, !tbaa !13
  %626 = load ptr, ptr %23, align 8, !tbaa !5
  %627 = load i32, ptr %39, align 4, !tbaa !13
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds i32, ptr %626, i64 %628
  store i32 %625, ptr %629, align 4, !tbaa !13
  store i32 0, ptr %42, align 4, !tbaa !13
  %630 = load ptr, ptr %21, align 8, !tbaa !5
  %631 = load i32, ptr %40, align 4, !tbaa !13
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds i32, ptr %630, i64 %632
  %634 = load i32, ptr %633, align 4, !tbaa !13
  store i32 %634, ptr %48, align 4, !tbaa !13
  br label %635

635:                                              ; preds = %673, %619
  %636 = load i32, ptr %48, align 4, !tbaa !13
  %637 = load ptr, ptr %21, align 8, !tbaa !5
  %638 = load i32, ptr %40, align 4, !tbaa !13
  %639 = add nsw i32 %638, 1
  %640 = sext i32 %639 to i64
  %641 = getelementptr inbounds i32, ptr %637, i64 %640
  %642 = load i32, ptr %641, align 4, !tbaa !13
  %643 = icmp slt i32 %636, %642
  br i1 %643, label %644, label %676

644:                                              ; preds = %635
  %645 = load ptr, ptr %31, align 8, !tbaa !5
  %646 = load i32, ptr %48, align 4, !tbaa !13
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds i32, ptr %645, i64 %647
  %649 = load i32, ptr %648, align 4, !tbaa !13
  store i32 %649, ptr %37, align 4, !tbaa !13
  %650 = load i32, ptr %37, align 4, !tbaa !13
  %651 = load ptr, ptr %33, align 8, !tbaa !5
  %652 = load i32, ptr %47, align 4, !tbaa !13
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds i32, ptr %651, i64 %653
  store i32 %650, ptr %654, align 4, !tbaa !13
  %655 = load ptr, ptr %32, align 8, !tbaa !5
  %656 = load i32, ptr %48, align 4, !tbaa !13
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds double, ptr %655, i64 %657
  %659 = load double, ptr %658, align 8, !tbaa !20
  %660 = load ptr, ptr %34, align 8, !tbaa !5
  %661 = load i32, ptr %47, align 4, !tbaa !13
  %662 = add nsw i32 %661, 1
  store i32 %662, ptr %47, align 4, !tbaa !13
  %663 = sext i32 %661 to i64
  %664 = getelementptr inbounds double, ptr %660, i64 %663
  store double %659, ptr %664, align 8, !tbaa !20
  %665 = load ptr, ptr %35, align 8, !tbaa !5
  %666 = load i32, ptr %37, align 4, !tbaa !13
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds i32, ptr %665, i64 %667
  %669 = load i32, ptr %668, align 4, !tbaa !13
  %670 = add nsw i32 %669, 1
  store i32 %670, ptr %668, align 4, !tbaa !13
  %671 = load i32, ptr %42, align 4, !tbaa !13
  %672 = add nsw i32 %671, 1
  store i32 %672, ptr %42, align 4, !tbaa !13
  br label %673

673:                                              ; preds = %644
  %674 = load i32, ptr %48, align 4, !tbaa !13
  %675 = add nsw i32 %674, 1
  store i32 %675, ptr %48, align 4, !tbaa !13
  br label %635, !llvm.loop !64

676:                                              ; preds = %635
  %677 = load i32, ptr %47, align 4, !tbaa !13
  %678 = load ptr, ptr %24, align 8, !tbaa !5
  %679 = load i32, ptr %39, align 4, !tbaa !13
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds i32, ptr %678, i64 %680
  store i32 %677, ptr %681, align 4, !tbaa !13
  %682 = load double, ptr %10, align 8, !tbaa !20
  %683 = load i32, ptr %42, align 4, !tbaa !13
  %684 = sitofp i32 %683 to double
  %685 = load i32, ptr %9, align 4, !tbaa !13
  %686 = sitofp i32 %685 to double
  %687 = call double @llvm.fmuladd.f64(double %682, double %684, double %686)
  %688 = load i32, ptr %47, align 4, !tbaa !13
  %689 = sitofp i32 %688 to double
  %690 = fadd double %689, %687
  %691 = fptosi double %690 to i32
  store i32 %691, ptr %47, align 4, !tbaa !13
  %692 = load i32, ptr %39, align 4, !tbaa !13
  %693 = load ptr, ptr %25, align 8, !tbaa !5
  %694 = load ptr, ptr %26, align 8, !tbaa !5
  %695 = load i32, ptr %4, align 4, !tbaa !13
  call void @lu_list_move(i32 noundef %692, i32 noundef 0, ptr noundef %693, ptr noundef %694, i32 noundef %695, ptr noundef null)
  br label %696

696:                                              ; preds = %676
  %697 = load i32, ptr %40, align 4, !tbaa !13
  %698 = add nsw i32 %697, 1
  store i32 %698, ptr %40, align 4, !tbaa !13
  br label %615, !llvm.loop !65

699:                                              ; preds = %615
  br label %830

700:                                              ; preds = %594
  store i32 0, ptr %44, align 4, !tbaa !13
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %701

701:                                              ; preds = %794, %700
  %702 = load i32, ptr %40, align 4, !tbaa !13
  %703 = load i32, ptr %5, align 4, !tbaa !13
  %704 = icmp slt i32 %702, %703
  br i1 %704, label %705, label %797

705:                                              ; preds = %701
  %706 = load ptr, ptr %15, align 8, !tbaa !5
  %707 = load i32, ptr %40, align 4, !tbaa !13
  %708 = sext i32 %707 to i64
  %709 = getelementptr inbounds i32, ptr %706, i64 %708
  %710 = load i32, ptr %709, align 4, !tbaa !13
  store i32 %710, ptr %39, align 4, !tbaa !13
  %711 = load i32, ptr %47, align 4, !tbaa !13
  %712 = load ptr, ptr %23, align 8, !tbaa !5
  %713 = load i32, ptr %39, align 4, !tbaa !13
  %714 = sext i32 %713 to i64
  %715 = getelementptr inbounds i32, ptr %712, i64 %714
  store i32 %711, ptr %715, align 4, !tbaa !13
  store i32 0, ptr %42, align 4, !tbaa !13
  %716 = load ptr, ptr %21, align 8, !tbaa !5
  %717 = load i32, ptr %40, align 4, !tbaa !13
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds i32, ptr %716, i64 %718
  %720 = load i32, ptr %719, align 4, !tbaa !13
  store i32 %720, ptr %48, align 4, !tbaa !13
  br label %721

721:                                              ; preds = %768, %705
  %722 = load i32, ptr %48, align 4, !tbaa !13
  %723 = load ptr, ptr %21, align 8, !tbaa !5
  %724 = load i32, ptr %40, align 4, !tbaa !13
  %725 = add nsw i32 %724, 1
  %726 = sext i32 %725 to i64
  %727 = getelementptr inbounds i32, ptr %723, i64 %726
  %728 = load i32, ptr %727, align 4, !tbaa !13
  %729 = icmp slt i32 %722, %728
  br i1 %729, label %730, label %771

730:                                              ; preds = %721
  %731 = load ptr, ptr %31, align 8, !tbaa !5
  %732 = load i32, ptr %48, align 4, !tbaa !13
  %733 = sext i32 %732 to i64
  %734 = getelementptr inbounds i32, ptr %731, i64 %733
  %735 = load i32, ptr %734, align 4, !tbaa !13
  store i32 %735, ptr %37, align 4, !tbaa !13
  %736 = load ptr, ptr %12, align 8, !tbaa !5
  %737 = load i32, ptr %37, align 4, !tbaa !13
  %738 = sext i32 %737 to i64
  %739 = getelementptr inbounds i32, ptr %736, i64 %738
  %740 = load i32, ptr %739, align 4, !tbaa !13
  %741 = load i32, ptr %5, align 4, !tbaa !13
  %742 = icmp slt i32 %740, %741
  br i1 %742, label %743, label %767

743:                                              ; preds = %730
  %744 = load i32, ptr %37, align 4, !tbaa !13
  %745 = load ptr, ptr %33, align 8, !tbaa !5
  %746 = load i32, ptr %47, align 4, !tbaa !13
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds i32, ptr %745, i64 %747
  store i32 %744, ptr %748, align 4, !tbaa !13
  %749 = load ptr, ptr %32, align 8, !tbaa !5
  %750 = load i32, ptr %48, align 4, !tbaa !13
  %751 = sext i32 %750 to i64
  %752 = getelementptr inbounds double, ptr %749, i64 %751
  %753 = load double, ptr %752, align 8, !tbaa !20
  %754 = load ptr, ptr %34, align 8, !tbaa !5
  %755 = load i32, ptr %47, align 4, !tbaa !13
  %756 = add nsw i32 %755, 1
  store i32 %756, ptr %47, align 4, !tbaa !13
  %757 = sext i32 %755 to i64
  %758 = getelementptr inbounds double, ptr %754, i64 %757
  store double %753, ptr %758, align 8, !tbaa !20
  %759 = load ptr, ptr %35, align 8, !tbaa !5
  %760 = load i32, ptr %37, align 4, !tbaa !13
  %761 = sext i32 %760 to i64
  %762 = getelementptr inbounds i32, ptr %759, i64 %761
  %763 = load i32, ptr %762, align 4, !tbaa !13
  %764 = add nsw i32 %763, 1
  store i32 %764, ptr %762, align 4, !tbaa !13
  %765 = load i32, ptr %42, align 4, !tbaa !13
  %766 = add nsw i32 %765, 1
  store i32 %766, ptr %42, align 4, !tbaa !13
  br label %767

767:                                              ; preds = %743, %730
  br label %768

768:                                              ; preds = %767
  %769 = load i32, ptr %48, align 4, !tbaa !13
  %770 = add nsw i32 %769, 1
  store i32 %770, ptr %48, align 4, !tbaa !13
  br label %721, !llvm.loop !66

771:                                              ; preds = %721
  %772 = load i32, ptr %47, align 4, !tbaa !13
  %773 = load ptr, ptr %24, align 8, !tbaa !5
  %774 = load i32, ptr %39, align 4, !tbaa !13
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds i32, ptr %773, i64 %775
  store i32 %772, ptr %776, align 4, !tbaa !13
  %777 = load double, ptr %10, align 8, !tbaa !20
  %778 = load i32, ptr %42, align 4, !tbaa !13
  %779 = sitofp i32 %778 to double
  %780 = load i32, ptr %9, align 4, !tbaa !13
  %781 = sitofp i32 %780 to double
  %782 = call double @llvm.fmuladd.f64(double %777, double %779, double %781)
  %783 = load i32, ptr %47, align 4, !tbaa !13
  %784 = sitofp i32 %783 to double
  %785 = fadd double %784, %782
  %786 = fptosi double %785 to i32
  store i32 %786, ptr %47, align 4, !tbaa !13
  %787 = load i32, ptr %39, align 4, !tbaa !13
  %788 = load ptr, ptr %25, align 8, !tbaa !5
  %789 = load ptr, ptr %26, align 8, !tbaa !5
  %790 = load i32, ptr %4, align 4, !tbaa !13
  call void @lu_list_move(i32 noundef %787, i32 noundef 0, ptr noundef %788, ptr noundef %789, i32 noundef %790, ptr noundef null)
  %791 = load i32, ptr %42, align 4, !tbaa !13
  %792 = load i32, ptr %44, align 4, !tbaa !13
  %793 = add nsw i32 %792, %791
  store i32 %793, ptr %44, align 4, !tbaa !13
  br label %794

794:                                              ; preds = %771
  %795 = load i32, ptr %40, align 4, !tbaa !13
  %796 = add nsw i32 %795, 1
  store i32 %796, ptr %40, align 4, !tbaa !13
  br label %701, !llvm.loop !67

797:                                              ; preds = %701
  %798 = load i32, ptr %5, align 4, !tbaa !13
  store i32 %798, ptr %40, align 4, !tbaa !13
  br label %799

799:                                              ; preds = %826, %797
  %800 = load i32, ptr %40, align 4, !tbaa !13
  %801 = load i32, ptr %4, align 4, !tbaa !13
  %802 = icmp slt i32 %800, %801
  br i1 %802, label %803, label %829

803:                                              ; preds = %799
  %804 = load ptr, ptr %15, align 8, !tbaa !5
  %805 = load i32, ptr %40, align 4, !tbaa !13
  %806 = sext i32 %805 to i64
  %807 = getelementptr inbounds i32, ptr %804, i64 %806
  %808 = load i32, ptr %807, align 4, !tbaa !13
  store i32 %808, ptr %39, align 4, !tbaa !13
  %809 = load i32, ptr %47, align 4, !tbaa !13
  %810 = load ptr, ptr %23, align 8, !tbaa !5
  %811 = load i32, ptr %39, align 4, !tbaa !13
  %812 = sext i32 %811 to i64
  %813 = getelementptr inbounds i32, ptr %810, i64 %812
  store i32 %809, ptr %813, align 4, !tbaa !13
  %814 = load i32, ptr %47, align 4, !tbaa !13
  %815 = load ptr, ptr %24, align 8, !tbaa !5
  %816 = load i32, ptr %39, align 4, !tbaa !13
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds i32, ptr %815, i64 %817
  store i32 %814, ptr %818, align 4, !tbaa !13
  %819 = load i32, ptr %9, align 4, !tbaa !13
  %820 = load i32, ptr %47, align 4, !tbaa !13
  %821 = add nsw i32 %820, %819
  store i32 %821, ptr %47, align 4, !tbaa !13
  %822 = load i32, ptr %39, align 4, !tbaa !13
  %823 = load ptr, ptr %25, align 8, !tbaa !5
  %824 = load ptr, ptr %26, align 8, !tbaa !5
  %825 = load i32, ptr %4, align 4, !tbaa !13
  call void @lu_list_move(i32 noundef %822, i32 noundef 0, ptr noundef %823, ptr noundef %824, i32 noundef %825, ptr noundef null)
  br label %826

826:                                              ; preds = %803
  %827 = load i32, ptr %40, align 4, !tbaa !13
  %828 = add nsw i32 %827, 1
  store i32 %828, ptr %40, align 4, !tbaa !13
  br label %799, !llvm.loop !68

829:                                              ; preds = %799
  br label %830

830:                                              ; preds = %829, %699
  %831 = load i32, ptr %47, align 4, !tbaa !13
  %832 = load ptr, ptr %24, align 8, !tbaa !5
  %833 = load i32, ptr %4, align 4, !tbaa !13
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds i32, ptr %832, i64 %834
  %836 = load i32, ptr %835, align 4, !tbaa !13
  %837 = icmp sle i32 %831, %836
  br i1 %837, label %838, label %839

838:                                              ; preds = %830
  br label %840

839:                                              ; preds = %830
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 363, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

840:                                              ; preds = %838
  %841 = load i32, ptr %47, align 4, !tbaa !13
  %842 = load ptr, ptr %23, align 8, !tbaa !5
  %843 = load i32, ptr %4, align 4, !tbaa !13
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds i32, ptr %842, i64 %844
  store i32 %841, ptr %845, align 4, !tbaa !13
  %846 = load ptr, ptr %31, align 8, !tbaa !5
  %847 = getelementptr inbounds i32, ptr %846, i64 0
  store i32 -1, ptr %847, align 4, !tbaa !13
  store i32 1, ptr %47, align 4, !tbaa !13
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %848

848:                                              ; preds = %899, %840
  %849 = load i32, ptr %40, align 4, !tbaa !13
  %850 = load i32, ptr %4, align 4, !tbaa !13
  %851 = icmp slt i32 %849, %850
  br i1 %851, label %852, label %902

852:                                              ; preds = %848
  %853 = load ptr, ptr %15, align 8, !tbaa !5
  %854 = load i32, ptr %40, align 4, !tbaa !13
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds i32, ptr %853, i64 %855
  %857 = load i32, ptr %856, align 4, !tbaa !13
  store i32 %857, ptr %37, align 4, !tbaa !13
  %858 = load ptr, ptr %16, align 8, !tbaa !5
  %859 = load i32, ptr %40, align 4, !tbaa !13
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds i32, ptr %858, i64 %860
  %862 = load i32, ptr %861, align 4, !tbaa !13
  store i32 %862, ptr %36, align 4, !tbaa !13
  %863 = load ptr, ptr %35, align 8, !tbaa !5
  %864 = load i32, ptr %37, align 4, !tbaa !13
  %865 = sext i32 %864 to i64
  %866 = getelementptr inbounds i32, ptr %863, i64 %865
  %867 = load i32, ptr %866, align 4, !tbaa !13
  store i32 %867, ptr %42, align 4, !tbaa !13
  %868 = load i32, ptr %42, align 4, !tbaa !13
  %869 = icmp eq i32 %868, 0
  br i1 %869, label %870, label %875

870:                                              ; preds = %852
  %871 = load ptr, ptr %21, align 8, !tbaa !5
  %872 = load i32, ptr %36, align 4, !tbaa !13
  %873 = sext i32 %872 to i64
  %874 = getelementptr inbounds i32, ptr %871, i64 %873
  store i32 0, ptr %874, align 4, !tbaa !13
  br label %889

875:                                              ; preds = %852
  %876 = load i32, ptr %47, align 4, !tbaa !13
  %877 = load ptr, ptr %21, align 8, !tbaa !5
  %878 = load i32, ptr %36, align 4, !tbaa !13
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds i32, ptr %877, i64 %879
  store i32 %876, ptr %880, align 4, !tbaa !13
  %881 = load i32, ptr %42, align 4, !tbaa !13
  %882 = load i32, ptr %47, align 4, !tbaa !13
  %883 = add nsw i32 %882, %881
  store i32 %883, ptr %47, align 4, !tbaa !13
  %884 = load ptr, ptr %31, align 8, !tbaa !5
  %885 = load i32, ptr %47, align 4, !tbaa !13
  %886 = add nsw i32 %885, 1
  store i32 %886, ptr %47, align 4, !tbaa !13
  %887 = sext i32 %885 to i64
  %888 = getelementptr inbounds i32, ptr %884, i64 %887
  store i32 -1, ptr %888, align 4, !tbaa !13
  br label %889

889:                                              ; preds = %875, %870
  %890 = load ptr, ptr %21, align 8, !tbaa !5
  %891 = load i32, ptr %36, align 4, !tbaa !13
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds i32, ptr %890, i64 %892
  %894 = load i32, ptr %893, align 4, !tbaa !13
  %895 = load ptr, ptr %35, align 8, !tbaa !5
  %896 = load i32, ptr %37, align 4, !tbaa !13
  %897 = sext i32 %896 to i64
  %898 = getelementptr inbounds i32, ptr %895, i64 %897
  store i32 %894, ptr %898, align 4, !tbaa !13
  br label %899

899:                                              ; preds = %889
  %900 = load i32, ptr %40, align 4, !tbaa !13
  %901 = add nsw i32 %900, 1
  store i32 %901, ptr %40, align 4, !tbaa !13
  br label %848, !llvm.loop !69

902:                                              ; preds = %848
  %903 = load i32, ptr %47, align 4, !tbaa !13
  %904 = load ptr, ptr %21, align 8, !tbaa !5
  %905 = load i32, ptr %4, align 4, !tbaa !13
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds i32, ptr %904, i64 %906
  store i32 %903, ptr %907, align 4, !tbaa !13
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %908

908:                                              ; preds = %971, %902
  %909 = load i32, ptr %40, align 4, !tbaa !13
  %910 = load i32, ptr %4, align 4, !tbaa !13
  %911 = icmp slt i32 %909, %910
  br i1 %911, label %912, label %974

912:                                              ; preds = %908
  %913 = load ptr, ptr %15, align 8, !tbaa !5
  %914 = load i32, ptr %40, align 4, !tbaa !13
  %915 = sext i32 %914 to i64
  %916 = getelementptr inbounds i32, ptr %913, i64 %915
  %917 = load i32, ptr %916, align 4, !tbaa !13
  store i32 %917, ptr %39, align 4, !tbaa !13
  %918 = load ptr, ptr %16, align 8, !tbaa !5
  %919 = load i32, ptr %40, align 4, !tbaa !13
  %920 = sext i32 %919 to i64
  %921 = getelementptr inbounds i32, ptr %918, i64 %920
  %922 = load i32, ptr %921, align 4, !tbaa !13
  store i32 %922, ptr %36, align 4, !tbaa !13
  %923 = load ptr, ptr %23, align 8, !tbaa !5
  %924 = load i32, ptr %39, align 4, !tbaa !13
  %925 = sext i32 %924 to i64
  %926 = getelementptr inbounds i32, ptr %923, i64 %925
  %927 = load i32, ptr %926, align 4, !tbaa !13
  store i32 %927, ptr %48, align 4, !tbaa !13
  br label %928

928:                                              ; preds = %967, %912
  %929 = load i32, ptr %48, align 4, !tbaa !13
  %930 = load ptr, ptr %24, align 8, !tbaa !5
  %931 = load i32, ptr %39, align 4, !tbaa !13
  %932 = sext i32 %931 to i64
  %933 = getelementptr inbounds i32, ptr %930, i64 %932
  %934 = load i32, ptr %933, align 4, !tbaa !13
  %935 = icmp slt i32 %929, %934
  br i1 %935, label %936, label %970

936:                                              ; preds = %928
  %937 = load ptr, ptr %33, align 8, !tbaa !5
  %938 = load i32, ptr %48, align 4, !tbaa !13
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds i32, ptr %937, i64 %939
  %941 = load i32, ptr %940, align 4, !tbaa !13
  store i32 %941, ptr %37, align 4, !tbaa !13
  %942 = load ptr, ptr %35, align 8, !tbaa !5
  %943 = load i32, ptr %37, align 4, !tbaa !13
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds i32, ptr %942, i64 %944
  %946 = load i32, ptr %945, align 4, !tbaa !13
  %947 = add nsw i32 %946, 1
  store i32 %947, ptr %945, align 4, !tbaa !13
  store i32 %946, ptr %47, align 4, !tbaa !13
  %948 = load i32, ptr %47, align 4, !tbaa !13
  %949 = icmp sge i32 %948, 1
  br i1 %949, label %950, label %951

950:                                              ; preds = %936
  br label %952

951:                                              ; preds = %936
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 397, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

952:                                              ; preds = %950
  %953 = load i32, ptr %36, align 4, !tbaa !13
  %954 = load ptr, ptr %31, align 8, !tbaa !5
  %955 = load i32, ptr %47, align 4, !tbaa !13
  %956 = sext i32 %955 to i64
  %957 = getelementptr inbounds i32, ptr %954, i64 %956
  store i32 %953, ptr %957, align 4, !tbaa !13
  %958 = load ptr, ptr %34, align 8, !tbaa !5
  %959 = load i32, ptr %48, align 4, !tbaa !13
  %960 = sext i32 %959 to i64
  %961 = getelementptr inbounds double, ptr %958, i64 %960
  %962 = load double, ptr %961, align 8, !tbaa !20
  %963 = load ptr, ptr %32, align 8, !tbaa !5
  %964 = load i32, ptr %47, align 4, !tbaa !13
  %965 = sext i32 %964 to i64
  %966 = getelementptr inbounds double, ptr %963, i64 %965
  store double %962, ptr %966, align 8, !tbaa !20
  br label %967

967:                                              ; preds = %952
  %968 = load i32, ptr %48, align 4, !tbaa !13
  %969 = add nsw i32 %968, 1
  store i32 %969, ptr %48, align 4, !tbaa !13
  br label %928, !llvm.loop !70

970:                                              ; preds = %928
  br label %971

971:                                              ; preds = %970
  %972 = load i32, ptr %40, align 4, !tbaa !13
  %973 = add nsw i32 %972, 1
  store i32 %973, ptr %40, align 4, !tbaa !13
  br label %908, !llvm.loop !71

974:                                              ; preds = %908
  store i32 0, ptr %37, align 4, !tbaa !13
  br label %975

975:                                              ; preds = %993, %974
  %976 = load i32, ptr %37, align 4, !tbaa !13
  %977 = load i32, ptr %4, align 4, !tbaa !13
  %978 = icmp slt i32 %976, %977
  br i1 %978, label %979, label %996

979:                                              ; preds = %975
  %980 = load ptr, ptr %31, align 8, !tbaa !5
  %981 = load ptr, ptr %35, align 8, !tbaa !5
  %982 = load i32, ptr %37, align 4, !tbaa !13
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds i32, ptr %981, i64 %983
  %985 = load i32, ptr %984, align 4, !tbaa !13
  %986 = sext i32 %985 to i64
  %987 = getelementptr inbounds i32, ptr %980, i64 %986
  %988 = load i32, ptr %987, align 4, !tbaa !13
  %989 = icmp eq i32 %988, -1
  br i1 %989, label %990, label %991

990:                                              ; preds = %979
  br label %992

991:                                              ; preds = %979
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 405, ptr noundef @__PRETTY_FUNCTION__.lu_build_factors) #9
  unreachable

992:                                              ; preds = %990
  br label %993

993:                                              ; preds = %992
  %994 = load i32, ptr %37, align 4, !tbaa !13
  %995 = add nsw i32 %994, 1
  store i32 %995, ptr %37, align 4, !tbaa !13
  br label %975, !llvm.loop !72

996:                                              ; preds = %975
  store i32 0, ptr %40, align 4, !tbaa !13
  br label %997

997:                                              ; preds = %1022, %996
  %998 = load i32, ptr %40, align 4, !tbaa !13
  %999 = load i32, ptr %4, align 4, !tbaa !13
  %1000 = icmp slt i32 %998, %999
  br i1 %1000, label %1001, label %1025

1001:                                             ; preds = %997
  %1002 = load ptr, ptr %16, align 8, !tbaa !5
  %1003 = load i32, ptr %40, align 4, !tbaa !13
  %1004 = sext i32 %1003 to i64
  %1005 = getelementptr inbounds i32, ptr %1002, i64 %1004
  %1006 = load i32, ptr %1005, align 4, !tbaa !13
  store i32 %1006, ptr %36, align 4, !tbaa !13
  %1007 = load ptr, ptr %15, align 8, !tbaa !5
  %1008 = load i32, ptr %40, align 4, !tbaa !13
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds i32, ptr %1007, i64 %1009
  %1011 = load i32, ptr %1010, align 4, !tbaa !13
  store i32 %1011, ptr %37, align 4, !tbaa !13
  %1012 = load i32, ptr %36, align 4, !tbaa !13
  %1013 = load ptr, ptr %13, align 8, !tbaa !5
  %1014 = load i32, ptr %37, align 4, !tbaa !13
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds i32, ptr %1013, i64 %1015
  store i32 %1012, ptr %1016, align 4, !tbaa !13
  %1017 = load i32, ptr %37, align 4, !tbaa !13
  %1018 = load ptr, ptr %14, align 8, !tbaa !5
  %1019 = load i32, ptr %36, align 4, !tbaa !13
  %1020 = sext i32 %1019 to i64
  %1021 = getelementptr inbounds i32, ptr %1018, i64 %1020
  store i32 %1017, ptr %1021, align 4, !tbaa !13
  br label %1022

1022:                                             ; preds = %1001
  %1023 = load i32, ptr %40, align 4, !tbaa !13
  %1024 = add nsw i32 %1023, 1
  store i32 %1024, ptr %40, align 4, !tbaa !13
  br label %997, !llvm.loop !73

1025:                                             ; preds = %997
  store double 0.000000e+00, ptr %51, align 8, !tbaa !20
  store double 0x7FF0000000000000, ptr %50, align 8, !tbaa !20
  store i32 0, ptr %36, align 4, !tbaa !13
  br label %1026

1026:                                             ; preds = %1056, %1025
  %1027 = load i32, ptr %36, align 4, !tbaa !13
  %1028 = load i32, ptr %4, align 4, !tbaa !13
  %1029 = icmp slt i32 %1027, %1028
  br i1 %1029, label %1030, label %1059

1030:                                             ; preds = %1026
  %1031 = load ptr, ptr %27, align 8, !tbaa !5
  %1032 = load ptr, ptr %14, align 8, !tbaa !5
  %1033 = load i32, ptr %36, align 4, !tbaa !13
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds i32, ptr %1032, i64 %1034
  %1036 = load i32, ptr %1035, align 4, !tbaa !13
  %1037 = sext i32 %1036 to i64
  %1038 = getelementptr inbounds double, ptr %1031, i64 %1037
  %1039 = load double, ptr %1038, align 8, !tbaa !20
  %1040 = load ptr, ptr %28, align 8, !tbaa !5
  %1041 = load i32, ptr %36, align 4, !tbaa !13
  %1042 = sext i32 %1041 to i64
  %1043 = getelementptr inbounds double, ptr %1040, i64 %1042
  store double %1039, ptr %1043, align 8, !tbaa !20
  %1044 = load ptr, ptr %28, align 8, !tbaa !5
  %1045 = load i32, ptr %36, align 4, !tbaa !13
  %1046 = sext i32 %1045 to i64
  %1047 = getelementptr inbounds double, ptr %1044, i64 %1046
  %1048 = load double, ptr %1047, align 8, !tbaa !20
  %1049 = call double @llvm.fabs.f64(double %1048)
  store double %1049, ptr %49, align 8, !tbaa !20
  %1050 = load double, ptr %49, align 8, !tbaa !20
  %1051 = load double, ptr %51, align 8, !tbaa !20
  %1052 = call double @llvm.maxnum.f64(double %1050, double %1051)
  store double %1052, ptr %51, align 8, !tbaa !20
  %1053 = load double, ptr %49, align 8, !tbaa !20
  %1054 = load double, ptr %50, align 8, !tbaa !20
  %1055 = call double @llvm.minnum.f64(double %1053, double %1054)
  store double %1055, ptr %50, align 8, !tbaa !20
  br label %1056

1056:                                             ; preds = %1030
  %1057 = load i32, ptr %36, align 4, !tbaa !13
  %1058 = add nsw i32 %1057, 1
  store i32 %1058, ptr %36, align 4, !tbaa !13
  br label %1026, !llvm.loop !74

1059:                                             ; preds = %1026
  %1060 = load ptr, ptr %3, align 8, !tbaa !5
  %1061 = getelementptr inbounds %struct.lu, ptr %1060, i32 0, i32 93
  %1062 = load ptr, ptr %1061, align 8, !tbaa !75
  %1063 = load ptr, ptr %16, align 8, !tbaa !5
  %1064 = load i32, ptr %4, align 4, !tbaa !13
  %1065 = sext i32 %1064 to i64
  %1066 = mul i64 %1065, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1062, ptr align 4 %1063, i64 %1066, i1 false)
  %1067 = load double, ptr %50, align 8, !tbaa !20
  %1068 = load ptr, ptr %3, align 8, !tbaa !5
  %1069 = getelementptr inbounds %struct.lu, ptr %1068, i32 0, i32 26
  store double %1067, ptr %1069, align 8, !tbaa !76
  %1070 = load double, ptr %51, align 8, !tbaa !20
  %1071 = load ptr, ptr %3, align 8, !tbaa !5
  %1072 = getelementptr inbounds %struct.lu, ptr %1071, i32 0, i32 27
  store double %1070, ptr %1072, align 8, !tbaa !77
  %1073 = load i32, ptr %4, align 4, !tbaa !13
  %1074 = load ptr, ptr %3, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.lu, ptr %1074, i32 0, i32 67
  store i32 %1073, ptr %1075, align 8, !tbaa !78
  %1076 = load i32, ptr %43, align 4, !tbaa !13
  %1077 = load ptr, ptr %3, align 8, !tbaa !5
  %1078 = getelementptr inbounds %struct.lu, ptr %1077, i32 0, i32 23
  store i32 %1076, ptr %1078, align 4, !tbaa !79
  %1079 = load i32, ptr %44, align 4, !tbaa !13
  %1080 = load ptr, ptr %3, align 8, !tbaa !5
  %1081 = getelementptr inbounds %struct.lu, ptr %1080, i32 0, i32 24
  store i32 %1079, ptr %1081, align 8, !tbaa !80
  %1082 = load ptr, ptr %3, align 8, !tbaa !5
  %1083 = getelementptr inbounds %struct.lu, ptr %1082, i32 0, i32 25
  store i32 0, ptr %1083, align 4, !tbaa !81
  %1084 = load i32, ptr %52, align 4, !tbaa !13
  store i32 %1084, ptr %2, align 4
  store i32 1, ptr %53, align 4
  br label %1085

1085:                                             ; preds = %1059, %215
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #8
  %1086 = load i32, ptr %2, align 4
  ret i32 %1086
}

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

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #3

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

declare void @lu_file_empty(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #5

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @lu_list_move(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #6

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #2

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { noreturn nounwind "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 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { "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 #6 = { inlinehint 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { nounwind }
attributes #9 = { noreturn 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/C++ TBAA"}
!9 = !{!10, !11, i64 84}
!10 = !{!"lu", !11, i64 0, !11, i64 4, !11, i64 8, !12, i64 16, !12, i64 24, !12, i64 32, !11, i64 40, !11, i64 44, !11, i64 48, !12, i64 56, !12, i64 64, !12, i64 72, !11, i64 80, !11, i64 84, !11, i64 88, !11, i64 92, !11, i64 96, !11, i64 100, !11, i64 104, !11, i64 108, !11, i64 112, !11, i64 116, !11, i64 120, !11, i64 124, !11, i64 128, !11, i64 132, !12, i64 136, !12, i64 144, !12, i64 152, !12, i64 160, !12, i64 168, !12, i64 176, !12, i64 184, !12, i64 192, !12, i64 200, !12, i64 208, !12, i64 216, !11, i64 224, !11, i64 228, !11, i64 232, !12, i64 240, !12, i64 248, !12, i64 256, !12, i64 264, !12, i64 272, !12, i64 280, !12, i64 288, !12, i64 296, !12, i64 304, !11, i64 312, !11, i64 316, !11, i64 320, !11, i64 324, !11, i64 328, !11, i64 332, !11, i64 336, !11, i64 340, !12, i64 344, !12, i64 352, !12, i64 360, !12, i64 368, !11, i64 376, !11, i64 380, !11, i64 384, !11, i64 388, !11, i64 392, !11, i64 396, !11, i64 400, !11, i64 404, !11, i64 408, !11, i64 412, !6, i64 416, !6, i64 424, !6, i64 432, !6, i64 440, !6, i64 448, !6, i64 456, !6, i64 464, !6, i64 472, !6, i64 480, !6, i64 488, !6, i64 496, !6, i64 504, !6, i64 512, !6, i64 520, !6, i64 528, !6, i64 536, !6, i64 544, !6, i64 552, !6, i64 560, !6, i64 568, !6, i64 576, !6, i64 584, !6, i64 592, !6, i64 600, !6, i64 608, !6, i64 616, !6, i64 624, !6, i64 632, !6, i64 640, !6, i64 648, !6, i64 656, !6, i64 664, !6, i64 672, !6, i64 680, !6, i64 688}
!11 = !{!"int", !7, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!10, !11, i64 316}
!15 = !{!10, !11, i64 0}
!16 = !{!10, !11, i64 4}
!17 = !{!10, !11, i64 8}
!18 = !{!10, !11, i64 48}
!19 = !{!10, !12, i64 56}
!20 = !{!12, !12, i64 0}
!21 = !{!10, !6, i64 600}
!22 = !{!10, !6, i64 616}
!23 = !{!10, !6, i64 608}
!24 = !{!10, !6, i64 624}
!25 = !{!10, !6, i64 472}
!26 = !{!10, !6, i64 488}
!27 = !{!10, !6, i64 544}
!28 = !{!10, !6, i64 632}
!29 = !{!10, !6, i64 560}
!30 = !{!10, !6, i64 576}
!31 = !{!10, !6, i64 640}
!32 = !{!10, !6, i64 504}
!33 = !{!10, !6, i64 536}
!34 = !{!10, !6, i64 552}
!35 = !{!10, !6, i64 568}
!36 = !{!10, !6, i64 584}
!37 = !{!10, !6, i64 680}
!38 = !{!10, !6, i64 688}
!39 = !{!10, !6, i64 416}
!40 = !{!10, !6, i64 440}
!41 = !{!10, !6, i64 424}
!42 = !{!10, !6, i64 448}
!43 = !{!10, !6, i64 432}
!44 = !{!10, !6, i64 456}
!45 = !{!10, !6, i64 528}
!46 = !{!10, !11, i64 88}
!47 = !{!10, !11, i64 92}
!48 = !{!10, !11, i64 96}
!49 = distinct !{!49, !50}
!50 = !{!"llvm.loop.mustprogress"}
!51 = distinct !{!51, !50}
!52 = distinct !{!52, !50}
!53 = distinct !{!53, !50}
!54 = distinct !{!54, !50}
!55 = distinct !{!55, !50}
!56 = distinct !{!56, !50}
!57 = distinct !{!57, !50}
!58 = distinct !{!58, !50}
!59 = distinct !{!59, !50}
!60 = distinct !{!60, !50}
!61 = distinct !{!61, !50}
!62 = distinct !{!62, !50}
!63 = distinct !{!63, !50}
!64 = distinct !{!64, !50}
!65 = distinct !{!65, !50}
!66 = distinct !{!66, !50}
!67 = distinct !{!67, !50}
!68 = distinct !{!68, !50}
!69 = distinct !{!69, !50}
!70 = distinct !{!70, !50}
!71 = distinct !{!71, !50}
!72 = distinct !{!72, !50}
!73 = distinct !{!73, !50}
!74 = distinct !{!74, !50}
!75 = !{!10, !6, i64 592}
!76 = !{!10, !12, i64 136}
!77 = !{!10, !12, i64 144}
!78 = !{!10, !11, i64 400}
!79 = !{!10, !11, i64 124}
!80 = !{!10, !11, i64 128}
!81 = !{!10, !11, i64 132}


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

@.str = external hidden unnamed_addr constant [11 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [84 x i8], align 1
@__PRETTY_FUNCTION__.lu_build_factors = external hidden unnamed_addr constant [37 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [24 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @lu_build_factors(ptr nocapture noundef %0) local_unnamed_addr #0 {
  %2 = getelementptr inbounds i8, ptr %0, i64 84
  %3 = load i32, ptr %2, align 4, !tbaa !5
  %4 = getelementptr inbounds i8, ptr %0, i64 316
  %5 = load i32, ptr %4, align 4, !tbaa !12
  %6 = load i32, ptr %0, align 8, !tbaa !13
  %7 = getelementptr inbounds i8, ptr %0, i64 4
  %8 = load i32, ptr %7, align 4, !tbaa !14
  %9 = getelementptr inbounds i8, ptr %0, i64 8
  %10 = load i32, ptr %9, align 8, !tbaa !15
  %11 = getelementptr inbounds i8, ptr %0, i64 48
  %12 = load i32, ptr %11, align 8, !tbaa !16
  %13 = getelementptr inbounds i8, ptr %0, i64 56
  %14 = load double, ptr %13, align 8, !tbaa !17
  %15 = getelementptr inbounds i8, ptr %0, i64 600
  %16 = load ptr, ptr %15, align 8, !tbaa !18
  %17 = getelementptr inbounds i8, ptr %0, i64 616
  %18 = load ptr, ptr %17, align 8, !tbaa !19
  %19 = getelementptr inbounds i8, ptr %0, i64 608
  %20 = load ptr, ptr %19, align 8, !tbaa !20
  %21 = getelementptr inbounds i8, ptr %0, i64 624
  %22 = load ptr, ptr %21, align 8, !tbaa !21
  %23 = getelementptr inbounds i8, ptr %0, i64 472
  %24 = load ptr, ptr %23, align 8, !tbaa !22
  %25 = getelementptr inbounds i8, ptr %0, i64 488
  %26 = load ptr, ptr %25, align 8, !tbaa !23
  %27 = getelementptr inbounds i8, ptr %0, i64 544
  %28 = load ptr, ptr %27, align 8, !tbaa !24
  %29 = getelementptr inbounds i8, ptr %0, i64 632
  %30 = load ptr, ptr %29, align 8, !tbaa !25
  %31 = ptrtoint ptr %30 to i64
  %32 = getelementptr inbounds i8, ptr %0, i64 560
  %33 = load ptr, ptr %32, align 8, !tbaa !26
  %34 = getelementptr inbounds i8, ptr %0, i64 576
  %35 = load ptr, ptr %34, align 8, !tbaa !27
  %36 = getelementptr inbounds i8, ptr %0, i64 640
  %37 = load ptr, ptr %36, align 8, !tbaa !28
  %38 = getelementptr inbounds i8, ptr %0, i64 504
  %39 = load ptr, ptr %38, align 8, !tbaa !29
  %40 = getelementptr inbounds i8, ptr %0, i64 536
  %41 = load ptr, ptr %40, align 8, !tbaa !30
  %42 = getelementptr inbounds i8, ptr %0, i64 552
  %43 = load ptr, ptr %42, align 8, !tbaa !31
  %44 = getelementptr inbounds i8, ptr %0, i64 568
  %45 = load ptr, ptr %44, align 8, !tbaa !32
  %46 = getelementptr inbounds i8, ptr %0, i64 584
  %47 = load ptr, ptr %46, align 8, !tbaa !33
  %48 = getelementptr inbounds i8, ptr %0, i64 680
  %49 = load ptr, ptr %48, align 8, !tbaa !34
  %50 = getelementptr inbounds i8, ptr %0, i64 688
  %51 = load ptr, ptr %50, align 8, !tbaa !35
  %52 = getelementptr inbounds i8, ptr %0, i64 416
  %53 = load ptr, ptr %52, align 8, !tbaa !36
  %54 = ptrtoint ptr %53 to i64
  %55 = getelementptr inbounds i8, ptr %0, i64 440
  %56 = load ptr, ptr %55, align 8, !tbaa !37
  %57 = getelementptr inbounds i8, ptr %0, i64 424
  %58 = load ptr, ptr %57, align 8, !tbaa !38
  %59 = getelementptr inbounds i8, ptr %0, i64 448
  %60 = load ptr, ptr %59, align 8, !tbaa !39
  %61 = getelementptr inbounds i8, ptr %0, i64 432
  %62 = load ptr, ptr %61, align 8, !tbaa !40
  %63 = getelementptr inbounds i8, ptr %0, i64 456
  %64 = load ptr, ptr %63, align 8, !tbaa !41
  %65 = getelementptr inbounds i8, ptr %0, i64 528
  %66 = load ptr, ptr %65, align 8, !tbaa !42
  %67 = sext i32 %5 to i64
  %68 = getelementptr inbounds i32, ptr %30, i64 %67
  %69 = load i32, ptr %68, align 4, !tbaa !43
  %70 = sub nsw i32 %69, %5
  %71 = getelementptr inbounds i32, ptr %37, i64 %67
  %72 = load i32, ptr %71, align 4, !tbaa !43
  %73 = add nsw i32 %70, %3
  %74 = shl nsw i32 %73, 1
  %75 = icmp slt i32 %6, %74
  br i1 %75, label %76, label %79

76:                                               ; preds = %1
  %77 = sub nsw i32 %74, %6
  %78 = getelementptr inbounds i8, ptr %0, i64 88
  store i32 %77, ptr %78, align 8, !tbaa !44
  br label %79

79:                                               ; preds = %76, %1
  %.0 = phi i32 [ 1, %76 ], [ 0, %1 ]
  %80 = add nsw i32 %72, %3
  %.not = icmp sgt i32 %8, %80
  br i1 %.not, label %84, label %81

81:                                               ; preds = %79
  %reass.sub = sub i32 %80, %8
  %82 = add i32 %reass.sub, 1
  %83 = getelementptr inbounds i8, ptr %0, i64 92
  store i32 %82, ptr %83, align 4, !tbaa !45
  br label %84

84:                                               ; preds = %81, %79
  %.1 = phi i32 [ 1, %81 ], [ %.0, %79 ]
  %85 = sitofp i32 %72 to double
  %86 = tail call double @llvm.fmuladd.f64(double %14, double %85, double %85)
  %87 = mul nsw i32 %12, %3
  %88 = sitofp i32 %87 to double
  %89 = fadd double %86, %88
  %90 = fptosi double %89 to i32
  %91 = icmp slt i32 %10, %90
  br i1 %91, label %.thread, label %94

.thread:                                          ; preds = %84
  %92 = sub nsw i32 %90, %10
  %93 = getelementptr inbounds i8, ptr %0, i64 96
  store i32 %92, ptr %93, align 8, !tbaa !46
  br label %524

94:                                               ; preds = %84
  %.not471 = icmp eq i32 %.1, 0
  br i1 %.not471, label %.preheader492, label %524

.preheader492:                                    ; preds = %94
  %95 = icmp sgt i32 %3, 0
  br i1 %95, label %.lr.ph499.preheader, label %._crit_edge.thread

.lr.ph499.preheader:                              ; preds = %.preheader492
  %96 = zext nneg i32 %3 to i64
  %97 = shl nuw nsw i64 %96, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %26, i8 -1, i64 %97, i1 false), !tbaa !43
  %98 = zext nneg i32 %3 to i64
  %99 = shl nuw nsw i64 %98, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %24, i8 -1, i64 %99, i1 false), !tbaa !43
  %wide.trip.count = zext nneg i32 %3 to i64
  %100 = add nsw i64 %wide.trip.count, -1
  %xtraiter = and i64 %wide.trip.count, 1
  %101 = icmp eq i64 %100, 0
  br i1 %101, label %._crit_edge.unr-lcssa, label %.lr.ph499.preheader.new

.lr.ph499.preheader.new:                          ; preds = %.lr.ph499.preheader
  %unroll_iter = and i64 %wide.trip.count, 2147483646
  br label %.lr.ph499

.lr.ph499:                                        ; preds = %116, %.lr.ph499.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph499.preheader.new ], [ %indvars.iv.next.1, %116 ]
  %.0436498 = phi i32 [ %5, %.lr.ph499.preheader.new ], [ %.1437.1, %116 ]
  %niter = phi i64 [ 0, %.lr.ph499.preheader.new ], [ %niter.next.1, %116 ]
  %102 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv
  %103 = load i32, ptr %102, align 4, !tbaa !43
  %104 = icmp slt i32 %103, 0
  br i1 %104, label %105, label %.lr.ph499.1

105:                                              ; preds = %.lr.ph499
  %106 = add nsw i32 %.0436498, 1
  store i32 %.0436498, ptr %102, align 4, !tbaa !43
  br label %.lr.ph499.1

.lr.ph499.1:                                      ; preds = %105, %.lr.ph499
  %107 = phi i32 [ %.0436498, %105 ], [ %103, %.lr.ph499 ]
  %.1437 = phi i32 [ %106, %105 ], [ %.0436498, %.lr.ph499 ]
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds i32, ptr %26, i64 %108
  %110 = trunc nuw nsw i64 %indvars.iv to i32
  store i32 %110, ptr %109, align 4, !tbaa !43
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %111 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv.next
  %112 = load i32, ptr %111, align 4, !tbaa !43
  %113 = icmp slt i32 %112, 0
  br i1 %113, label %114, label %116

114:                                              ; preds = %.lr.ph499.1
  %115 = add nsw i32 %.1437, 1
  store i32 %.1437, ptr %111, align 4, !tbaa !43
  br label %116

116:                                              ; preds = %114, %.lr.ph499.1
  %117 = phi i32 [ %.1437, %114 ], [ %112, %.lr.ph499.1 ]
  %.1437.1 = phi i32 [ %115, %114 ], [ %.1437, %.lr.ph499.1 ]
  %118 = sext i32 %117 to i64
  %119 = getelementptr inbounds i32, ptr %26, i64 %118
  %120 = trunc nuw nsw i64 %indvars.iv.next to i32
  store i32 %120, ptr %119, align 4, !tbaa !43
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.unr-lcssa, label %.lr.ph499, !llvm.loop !47

._crit_edge.unr-lcssa:                            ; preds = %116, %.lr.ph499.preheader
  %.1437.lcssa.ph = phi i32 [ poison, %.lr.ph499.preheader ], [ %.1437.1, %116 ]
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph499.preheader ], [ %indvars.iv.next.1, %116 ]
  %.0436498.unr = phi i32 [ %5, %.lr.ph499.preheader ], [ %.1437.1, %116 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph499.epil

.lr.ph499.epil:                                   ; preds = %._crit_edge.unr-lcssa
  %121 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv.unr
  %122 = load i32, ptr %121, align 4, !tbaa !43
  %123 = icmp slt i32 %122, 0
  br i1 %123, label %124, label %._crit_edge.epilog-lcssa

124:                                              ; preds = %.lr.ph499.epil
  %125 = add nsw i32 %.0436498.unr, 1
  store i32 %.0436498.unr, ptr %121, align 4, !tbaa !43
  br label %._crit_edge.epilog-lcssa

._crit_edge.epilog-lcssa:                         ; preds = %124, %.lr.ph499.epil
  %126 = phi i32 [ %.0436498.unr, %124 ], [ %122, %.lr.ph499.epil ]
  %.1437.epil = phi i32 [ %125, %124 ], [ %.0436498.unr, %.lr.ph499.epil ]
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds i32, ptr %26, i64 %127
  %129 = trunc nuw nsw i64 %indvars.iv.unr to i32
  store i32 %129, ptr %128, align 4, !tbaa !43
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.unr-lcssa, %._crit_edge.epilog-lcssa
  %.1437.lcssa = phi i32 [ %.1437.lcssa.ph, %._crit_edge.unr-lcssa ], [ %.1437.epil, %._crit_edge.epilog-lcssa ]
  %130 = icmp eq i32 %.1437.lcssa, %3
  br i1 %130, label %.preheader489, label %133

._crit_edge.thread:                               ; preds = %.preheader492
  %131 = icmp eq i32 %5, %3
  br i1 %131, label %._crit_edge503, label %133

.preheader489:                                    ; preds = %._crit_edge
  br i1 %95, label %.lr.ph502.preheader, label %._crit_edge503

.lr.ph502.preheader:                              ; preds = %.preheader489
  %xtraiter767 = and i64 %wide.trip.count, 1
  %132 = icmp eq i64 %100, 0
  br i1 %132, label %._crit_edge503.loopexit.unr-lcssa, label %.lr.ph502.preheader.new

.lr.ph502.preheader.new:                          ; preds = %.lr.ph502.preheader
  %unroll_iter770 = and i64 %wide.trip.count, 2147483646
  br label %.lr.ph502

133:                                              ; preds = %._crit_edge.thread, %._crit_edge
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 219, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

.lr.ph502:                                        ; preds = %148, %.lr.ph502.preheader.new
  %indvars.iv605 = phi i64 [ 0, %.lr.ph502.preheader.new ], [ %indvars.iv.next606.1, %148 ]
  %.2438501 = phi i32 [ %5, %.lr.ph502.preheader.new ], [ %.3439.1, %148 ]
  %niter771 = phi i64 [ 0, %.lr.ph502.preheader.new ], [ %niter771.next.1, %148 ]
  %134 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv605
  %135 = load i32, ptr %134, align 4, !tbaa !43
  %136 = icmp slt i32 %135, 0
  br i1 %136, label %137, label %.lr.ph502.1

137:                                              ; preds = %.lr.ph502
  %138 = add nsw i32 %.2438501, 1
  store i32 %.2438501, ptr %134, align 4, !tbaa !43
  br label %.lr.ph502.1

.lr.ph502.1:                                      ; preds = %137, %.lr.ph502
  %139 = phi i32 [ %.2438501, %137 ], [ %135, %.lr.ph502 ]
  %.3439 = phi i32 [ %138, %137 ], [ %.2438501, %.lr.ph502 ]
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i32, ptr %24, i64 %140
  %142 = trunc nuw nsw i64 %indvars.iv605 to i32
  store i32 %142, ptr %141, align 4, !tbaa !43
  %indvars.iv.next606 = or disjoint i64 %indvars.iv605, 1
  %143 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv.next606
  %144 = load i32, ptr %143, align 4, !tbaa !43
  %145 = icmp slt i32 %144, 0
  br i1 %145, label %146, label %148

146:                                              ; preds = %.lr.ph502.1
  %147 = add nsw i32 %.3439, 1
  store i32 %.3439, ptr %143, align 4, !tbaa !43
  br label %148

148:                                              ; preds = %146, %.lr.ph502.1
  %149 = phi i32 [ %.3439, %146 ], [ %144, %.lr.ph502.1 ]
  %.3439.1 = phi i32 [ %147, %146 ], [ %.3439, %.lr.ph502.1 ]
  %150 = sext i32 %149 to i64
  %151 = getelementptr inbounds i32, ptr %24, i64 %150
  %152 = trunc nuw nsw i64 %indvars.iv.next606 to i32
  store i32 %152, ptr %151, align 4, !tbaa !43
  %indvars.iv.next606.1 = add nuw nsw i64 %indvars.iv605, 2
  %niter771.next.1 = add i64 %niter771, 2
  %niter771.ncmp.1 = icmp eq i64 %niter771.next.1, %unroll_iter770
  br i1 %niter771.ncmp.1, label %._crit_edge503.loopexit.unr-lcssa, label %.lr.ph502, !llvm.loop !49

._crit_edge503.loopexit.unr-lcssa:                ; preds = %148, %.lr.ph502.preheader
  %.3439.lcssa.ph = phi i32 [ poison, %.lr.ph502.preheader ], [ %.3439.1, %148 ]
  %indvars.iv605.unr = phi i64 [ 0, %.lr.ph502.preheader ], [ %indvars.iv.next606.1, %148 ]
  %.2438501.unr = phi i32 [ %5, %.lr.ph502.preheader ], [ %.3439.1, %148 ]
  %lcmp.mod768.not = icmp eq i64 %xtraiter767, 0
  br i1 %lcmp.mod768.not, label %._crit_edge503, label %.lr.ph502.epil

.lr.ph502.epil:                                   ; preds = %._crit_edge503.loopexit.unr-lcssa
  %153 = getelementptr inbounds i32, ptr %18, i64 %indvars.iv605.unr
  %154 = load i32, ptr %153, align 4, !tbaa !43
  %155 = icmp slt i32 %154, 0
  br i1 %155, label %156, label %._crit_edge503.loopexit.epilog-lcssa

156:                                              ; preds = %.lr.ph502.epil
  %157 = add nsw i32 %.2438501.unr, 1
  store i32 %.2438501.unr, ptr %153, align 4, !tbaa !43
  br label %._crit_edge503.loopexit.epilog-lcssa

._crit_edge503.loopexit.epilog-lcssa:             ; preds = %156, %.lr.ph502.epil
  %158 = phi i32 [ %.2438501.unr, %156 ], [ %154, %.lr.ph502.epil ]
  %.3439.epil = phi i32 [ %157, %156 ], [ %.2438501.unr, %.lr.ph502.epil ]
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds i32, ptr %24, i64 %159
  %161 = trunc nuw nsw i64 %indvars.iv605.unr to i32
  store i32 %161, ptr %160, align 4, !tbaa !43
  br label %._crit_edge503

._crit_edge503:                                   ; preds = %._crit_edge503.loopexit.epilog-lcssa, %._crit_edge503.loopexit.unr-lcssa, %._crit_edge.thread, %.preheader489
  %.2438.lcssa = phi i32 [ %5, %.preheader489 ], [ %5, %._crit_edge.thread ], [ %.3439.lcssa.ph, %._crit_edge503.loopexit.unr-lcssa ], [ %.3439.epil, %._crit_edge503.loopexit.epilog-lcssa ]
  %162 = icmp eq i32 %.2438.lcssa, %3
  br i1 %162, label %.preheader488, label %163

.preheader488:                                    ; preds = %._crit_edge503
  br i1 %95, label %.lr.ph506.preheader, label %.preheader486

.lr.ph506.preheader:                              ; preds = %.preheader488
  %wide.trip.count613 = zext nneg i32 %3 to i64
  br label %.lr.ph506

163:                                              ; preds = %._crit_edge503
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 227, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

164:                                              ; preds = %.lr.ph506
  %indvars.iv.next611 = add nuw nsw i64 %indvars.iv610, 1
  %exitcond614.not = icmp eq i64 %indvars.iv.next611, %wide.trip.count613
  br i1 %exitcond614.not, label %.preheader487, label %.lr.ph506, !llvm.loop !50

.preheader487:                                    ; preds = %164
  br i1 %95, label %.lr.ph508.preheader, label %.preheader486

.lr.ph508.preheader:                              ; preds = %.preheader487
  %wide.trip.count618 = zext nneg i32 %3 to i64
  br label %.lr.ph508

.lr.ph506:                                        ; preds = %.lr.ph506.preheader, %164
  %indvars.iv610 = phi i64 [ 0, %.lr.ph506.preheader ], [ %indvars.iv.next611, %164 ]
  %165 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv610
  %166 = load i32, ptr %165, align 4, !tbaa !43
  %167 = icmp sgt i32 %166, -1
  br i1 %167, label %164, label %168

168:                                              ; preds = %.lr.ph506
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 231, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

169:                                              ; preds = %.lr.ph508
  %indvars.iv.next616 = add nuw nsw i64 %indvars.iv615, 1
  %exitcond619.not = icmp eq i64 %indvars.iv.next616, %wide.trip.count618
  br i1 %exitcond619.not, label %.preheader486, label %.lr.ph508, !llvm.loop !51

.preheader486:                                    ; preds = %169, %.preheader488, %.preheader487
  %170 = icmp slt i32 %5, %3
  br i1 %170, label %.lr.ph510.preheader, label %._crit_edge511.._crit_edge516_crit_edge

.lr.ph510.preheader:                              ; preds = %.preheader486
  %wide.trip.count623 = sext i32 %3 to i64
  %171 = sub nsw i64 %wide.trip.count623, %67
  %xtraiter772 = and i64 %171, 3
  %lcmp.mod773.not = icmp eq i64 %xtraiter772, 0
  br i1 %lcmp.mod773.not, label %.lr.ph510.prol.loopexit, label %.lr.ph510.prol

.lr.ph510.prol:                                   ; preds = %.lr.ph510.preheader, %.lr.ph510.prol
  %indvars.iv620.prol = phi i64 [ %indvars.iv.next621.prol, %.lr.ph510.prol ], [ %67, %.lr.ph510.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph510.prol ], [ 0, %.lr.ph510.preheader ]
  %172 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv620.prol
  %173 = load i32, ptr %172, align 4, !tbaa !43
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds double, ptr %49, i64 %174
  store double 1.000000e+00, ptr %175, align 8, !tbaa !52
  %indvars.iv.next621.prol = add nsw i64 %indvars.iv620.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter772
  br i1 %prol.iter.cmp.not, label %.lr.ph510.prol.loopexit, label %.lr.ph510.prol, !llvm.loop !53

.lr.ph510.prol.loopexit:                          ; preds = %.lr.ph510.prol, %.lr.ph510.preheader
  %indvars.iv620.unr = phi i64 [ %67, %.lr.ph510.preheader ], [ %indvars.iv.next621.prol, %.lr.ph510.prol ]
  %176 = sub nsw i64 %67, %wide.trip.count623
  %177 = icmp ugt i64 %176, -4
  br i1 %177, label %._crit_edge511, label %.lr.ph510.preheader.new

.lr.ph510.preheader.new:                          ; preds = %.lr.ph510.prol.loopexit
  %invariant.gep = getelementptr i8, ptr %24, i64 4
  %invariant.gep798 = getelementptr i8, ptr %24, i64 8
  %invariant.gep800 = getelementptr i8, ptr %24, i64 12
  br label %.lr.ph510

.lr.ph508:                                        ; preds = %.lr.ph508.preheader, %169
  %indvars.iv615 = phi i64 [ 0, %.lr.ph508.preheader ], [ %indvars.iv.next616, %169 ]
  %178 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv615
  %179 = load i32, ptr %178, align 4, !tbaa !43
  %180 = icmp sgt i32 %179, -1
  br i1 %180, label %169, label %181

181:                                              ; preds = %.lr.ph508
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 233, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

.lr.ph510:                                        ; preds = %.lr.ph510, %.lr.ph510.preheader.new
  %indvars.iv620 = phi i64 [ %indvars.iv620.unr, %.lr.ph510.preheader.new ], [ %indvars.iv.next621.3, %.lr.ph510 ]
  %182 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv620
  %183 = load i32, ptr %182, align 4, !tbaa !43
  %184 = sext i32 %183 to i64
  %185 = getelementptr inbounds double, ptr %49, i64 %184
  store double 1.000000e+00, ptr %185, align 8, !tbaa !52
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv620
  %186 = load i32, ptr %gep, align 4, !tbaa !43
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds double, ptr %49, i64 %187
  store double 1.000000e+00, ptr %188, align 8, !tbaa !52
  %gep799 = getelementptr i32, ptr %invariant.gep798, i64 %indvars.iv620
  %189 = load i32, ptr %gep799, align 4, !tbaa !43
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds double, ptr %49, i64 %190
  store double 1.000000e+00, ptr %191, align 8, !tbaa !52
  %gep801 = getelementptr i32, ptr %invariant.gep800, i64 %indvars.iv620
  %192 = load i32, ptr %gep801, align 4, !tbaa !43
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds double, ptr %49, i64 %193
  store double 1.000000e+00, ptr %194, align 8, !tbaa !52
  %indvars.iv.next621.3 = add nsw i64 %indvars.iv620, 4
  %exitcond624.not.3 = icmp eq i64 %indvars.iv.next621.3, %wide.trip.count623
  br i1 %exitcond624.not.3, label %._crit_edge511, label %.lr.ph510, !llvm.loop !55

._crit_edge511:                                   ; preds = %.lr.ph510, %.lr.ph510.prol.loopexit
  br i1 %170, label %.lr.ph515.preheader, label %._crit_edge511.._crit_edge516_crit_edge

._crit_edge511.._crit_edge516_crit_edge:          ; preds = %.preheader486, %._crit_edge511
  %.pre715 = sext i32 %3 to i64
  br label %._crit_edge516

.lr.ph515.preheader:                              ; preds = %._crit_edge511
  %195 = load i32, ptr %68, align 4, !tbaa !43
  %196 = sext i32 %195 to i64
  %wide.trip.count632 = sext i32 %3 to i64
  %197 = sub nsw i64 %wide.trip.count623, %67
  %min.iters.check = icmp ult i64 %197, 16
  br i1 %min.iters.check, label %.lr.ph515.preheader765, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph515.preheader
  %198 = shl nsw i64 %67, 2
  %199 = add i64 %198, %31
  %200 = add i64 %199, 4
  %201 = shl nsw i64 %196, 2
  %202 = add i64 %201, %54
  %203 = sub i64 %200, %202
  %diff.check = icmp ult i64 %203, 32
  br i1 %diff.check, label %.lr.ph515.preheader765, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %197, -8
  %ind.end = add nsw i64 %n.vec, %67
  %ind.end753 = add nsw i64 %n.vec, %196
  %.splatinsert = insertelement <4 x i64> poison, i64 %196, i64 0
  %.splat = shufflevector <4 x i64> %.splatinsert, <4 x i64> poison, <4 x i32> zeroinitializer
  %induction = add <4 x i64> %.splat, <i64 0, i64 1, i64 2, i64 3>
  %invariant.gep802 = getelementptr i32, ptr %53, i64 %196
  %invariant.gep804 = getelementptr i32, ptr %30, i64 %67
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i64> [ %induction, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %gep803 = getelementptr i32, ptr %invariant.gep802, i64 %index
  %204 = getelementptr inbounds i8, ptr %gep803, i64 16
  store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, ptr %gep803, align 4, !tbaa !43
  store <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, ptr %204, align 4, !tbaa !43
  %gep805 = getelementptr i32, ptr %invariant.gep804, i64 %index
  %205 = getelementptr i8, ptr %gep805, i64 4
  %206 = trunc <4 x i64> %vec.ind to <4 x i32>
  %207 = add <4 x i32> %206, <i32 1, i32 1, i32 1, i32 1>
  %208 = trunc <4 x i64> %vec.ind to <4 x i32>
  %209 = add <4 x i32> %208, <i32 5, i32 5, i32 5, i32 5>
  %210 = getelementptr i8, ptr %gep805, i64 20
  store <4 x i32> %207, ptr %205, align 4, !tbaa !43
  store <4 x i32> %209, ptr %210, align 4, !tbaa !43
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i64> %vec.ind, <i64 8, i64 8, i64 8, i64 8>
  %211 = icmp eq i64 %index.next, %n.vec
  br i1 %211, label %middle.block, label %vector.body, !llvm.loop !56

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %197, %n.vec
  br i1 %cmp.n, label %._crit_edge516, label %.lr.ph515.preheader765

.lr.ph515.preheader765:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph515.preheader
  %indvars.iv627.ph = phi i64 [ %67, %vector.memcheck ], [ %67, %.lr.ph515.preheader ], [ %ind.end, %middle.block ]
  %indvars.iv625.ph = phi i64 [ %196, %vector.memcheck ], [ %196, %.lr.ph515.preheader ], [ %ind.end753, %middle.block ]
  %212 = sub nsw i64 %wide.trip.count623, %indvars.iv627.ph
  %xtraiter774 = and i64 %212, 3
  %lcmp.mod775.not = icmp eq i64 %xtraiter774, 0
  br i1 %lcmp.mod775.not, label %.lr.ph515.prol.loopexit, label %.lr.ph515.prol

.lr.ph515.prol:                                   ; preds = %.lr.ph515.preheader765, %.lr.ph515.prol
  %indvars.iv627.prol = phi i64 [ %indvars.iv.next628.prol, %.lr.ph515.prol ], [ %indvars.iv627.ph, %.lr.ph515.preheader765 ]
  %indvars.iv625.prol = phi i64 [ %indvars.iv.next626.prol, %.lr.ph515.prol ], [ %indvars.iv625.ph, %.lr.ph515.preheader765 ]
  %prol.iter776 = phi i64 [ %prol.iter776.next, %.lr.ph515.prol ], [ 0, %.lr.ph515.preheader765 ]
  %indvars.iv.next626.prol = add nsw i64 %indvars.iv625.prol, 1
  %213 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv625.prol
  store i32 -1, ptr %213, align 4, !tbaa !43
  %indvars.iv.next628.prol = add nsw i64 %indvars.iv627.prol, 1
  %214 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv.next628.prol
  %215 = trunc nsw i64 %indvars.iv.next626.prol to i32
  store i32 %215, ptr %214, align 4, !tbaa !43
  %prol.iter776.next = add i64 %prol.iter776, 1
  %prol.iter776.cmp.not = icmp eq i64 %prol.iter776.next, %xtraiter774
  br i1 %prol.iter776.cmp.not, label %.lr.ph515.prol.loopexit, label %.lr.ph515.prol, !llvm.loop !59

.lr.ph515.prol.loopexit:                          ; preds = %.lr.ph515.prol, %.lr.ph515.preheader765
  %indvars.iv627.unr = phi i64 [ %indvars.iv627.ph, %.lr.ph515.preheader765 ], [ %indvars.iv.next628.prol, %.lr.ph515.prol ]
  %indvars.iv625.unr = phi i64 [ %indvars.iv625.ph, %.lr.ph515.preheader765 ], [ %indvars.iv.next626.prol, %.lr.ph515.prol ]
  %216 = sub nsw i64 %indvars.iv627.ph, %wide.trip.count623
  %217 = icmp ugt i64 %216, -4
  br i1 %217, label %._crit_edge516, label %.lr.ph515.preheader765.new

.lr.ph515.preheader765.new:                       ; preds = %.lr.ph515.prol.loopexit
  %invariant.gep806 = getelementptr i8, ptr %30, i64 4
  %invariant.gep808 = getelementptr i8, ptr %30, i64 8
  %invariant.gep810 = getelementptr i8, ptr %30, i64 12
  br label %.lr.ph515

.lr.ph515:                                        ; preds = %.lr.ph515, %.lr.ph515.preheader765.new
  %indvars.iv627 = phi i64 [ %indvars.iv627.unr, %.lr.ph515.preheader765.new ], [ %indvars.iv.next628.3, %.lr.ph515 ]
  %indvars.iv625 = phi i64 [ %indvars.iv625.unr, %.lr.ph515.preheader765.new ], [ %indvars.iv.next626.3, %.lr.ph515 ]
  %indvars.iv.next626 = add nsw i64 %indvars.iv625, 1
  %218 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv625
  store i32 -1, ptr %218, align 4, !tbaa !43
  %gep807 = getelementptr i32, ptr %invariant.gep806, i64 %indvars.iv627
  %219 = trunc nsw i64 %indvars.iv.next626 to i32
  store i32 %219, ptr %gep807, align 4, !tbaa !43
  %indvars.iv.next626.1 = add nsw i64 %indvars.iv625, 2
  %220 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv.next626
  store i32 -1, ptr %220, align 4, !tbaa !43
  %gep809 = getelementptr i32, ptr %invariant.gep808, i64 %indvars.iv627
  %221 = trunc nsw i64 %indvars.iv.next626.1 to i32
  store i32 %221, ptr %gep809, align 4, !tbaa !43
  %indvars.iv.next626.2 = add nsw i64 %indvars.iv625, 3
  %222 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv.next626.1
  store i32 -1, ptr %222, align 4, !tbaa !43
  %gep811 = getelementptr i32, ptr %invariant.gep810, i64 %indvars.iv627
  %223 = trunc nsw i64 %indvars.iv.next626.2 to i32
  store i32 %223, ptr %gep811, align 4, !tbaa !43
  %indvars.iv.next626.3 = add nsw i64 %indvars.iv625, 4
  %224 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv.next626.2
  store i32 -1, ptr %224, align 4, !tbaa !43
  %indvars.iv.next628.3 = add nsw i64 %indvars.iv627, 4
  %225 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv.next628.3
  %226 = trunc nsw i64 %indvars.iv.next626.3 to i32
  store i32 %226, ptr %225, align 4, !tbaa !43
  %exitcond633.not.3 = icmp eq i64 %indvars.iv.next628.3, %wide.trip.count632
  br i1 %exitcond633.not.3, label %._crit_edge516, label %.lr.ph515, !llvm.loop !60

._crit_edge516:                                   ; preds = %.lr.ph515.prol.loopexit, %.lr.ph515, %middle.block, %._crit_edge511.._crit_edge516_crit_edge
  %.pre-phi716 = phi i64 [ %.pre715, %._crit_edge511.._crit_edge516_crit_edge ], [ %wide.trip.count632, %middle.block ], [ %wide.trip.count632, %.lr.ph515 ], [ %wide.trip.count632, %.lr.ph515.prol.loopexit ]
  %227 = getelementptr inbounds i32, ptr %30, i64 %.pre-phi716
  %228 = load i32, ptr %227, align 4, !tbaa !43
  %229 = icmp eq i32 %228, %73
  br i1 %229, label %.preheader485, label %232

.preheader485:                                    ; preds = %._crit_edge516
  br i1 %95, label %.lr.ph518.preheader, label %._crit_edge519

.lr.ph518.preheader:                              ; preds = %.preheader485
  %wide.trip.count637 = zext nneg i32 %3 to i64
  %230 = add nsw i64 %wide.trip.count637, -1
  %xtraiter777 = and i64 %wide.trip.count637, 3
  %231 = icmp ult i64 %230, 3
  br i1 %231, label %._crit_edge519.loopexit.unr-lcssa, label %.lr.ph518.preheader.new

.lr.ph518.preheader.new:                          ; preds = %.lr.ph518.preheader
  %unroll_iter779 = and i64 %wide.trip.count637, 2147483644
  br label %.lr.ph518

232:                                              ; preds = %._crit_edge516
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 254, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

.lr.ph518:                                        ; preds = %.lr.ph518, %.lr.ph518.preheader.new
  %indvars.iv634 = phi i64 [ 0, %.lr.ph518.preheader.new ], [ %indvars.iv.next635.3, %.lr.ph518 ]
  %niter780 = phi i64 [ 0, %.lr.ph518.preheader.new ], [ %niter780.next.3, %.lr.ph518 ]
  %233 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv634
  %234 = load i32, ptr %233, align 4, !tbaa !43
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i32, ptr %30, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !43
  %238 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv634
  store i32 %237, ptr %238, align 4, !tbaa !43
  %indvars.iv.next635 = or disjoint i64 %indvars.iv634, 1
  %239 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv.next635
  %240 = load i32, ptr %239, align 4, !tbaa !43
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds i32, ptr %30, i64 %241
  %243 = load i32, ptr %242, align 4, !tbaa !43
  %244 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv.next635
  store i32 %243, ptr %244, align 4, !tbaa !43
  %indvars.iv.next635.1 = or disjoint i64 %indvars.iv634, 2
  %245 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv.next635.1
  %246 = load i32, ptr %245, align 4, !tbaa !43
  %247 = sext i32 %246 to i64
  %248 = getelementptr inbounds i32, ptr %30, i64 %247
  %249 = load i32, ptr %248, align 4, !tbaa !43
  %250 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv.next635.1
  store i32 %249, ptr %250, align 4, !tbaa !43
  %indvars.iv.next635.2 = or disjoint i64 %indvars.iv634, 3
  %251 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv.next635.2
  %252 = load i32, ptr %251, align 4, !tbaa !43
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds i32, ptr %30, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !43
  %256 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv.next635.2
  store i32 %255, ptr %256, align 4, !tbaa !43
  %indvars.iv.next635.3 = add nuw nsw i64 %indvars.iv634, 4
  %niter780.next.3 = add i64 %niter780, 4
  %niter780.ncmp.3 = icmp eq i64 %niter780.next.3, %unroll_iter779
  br i1 %niter780.ncmp.3, label %._crit_edge519.loopexit.unr-lcssa, label %.lr.ph518, !llvm.loop !61

._crit_edge519.loopexit.unr-lcssa:                ; preds = %.lr.ph518, %.lr.ph518.preheader
  %indvars.iv634.unr = phi i64 [ 0, %.lr.ph518.preheader ], [ %indvars.iv.next635.3, %.lr.ph518 ]
  %lcmp.mod778.not = icmp eq i64 %xtraiter777, 0
  br i1 %lcmp.mod778.not, label %._crit_edge519, label %.lr.ph518.epil

.lr.ph518.epil:                                   ; preds = %._crit_edge519.loopexit.unr-lcssa, %.lr.ph518.epil
  %indvars.iv634.epil = phi i64 [ %indvars.iv.next635.epil, %.lr.ph518.epil ], [ %indvars.iv634.unr, %._crit_edge519.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph518.epil ], [ 0, %._crit_edge519.loopexit.unr-lcssa ]
  %257 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv634.epil
  %258 = load i32, ptr %257, align 4, !tbaa !43
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds i32, ptr %30, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !43
  %262 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv634.epil
  store i32 %261, ptr %262, align 4, !tbaa !43
  %indvars.iv.next635.epil = add nuw nsw i64 %indvars.iv634.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter777
  br i1 %epil.iter.cmp.not, label %._crit_edge519, label %.lr.ph518.epil, !llvm.loop !62

._crit_edge519:                                   ; preds = %._crit_edge519.loopexit.unr-lcssa, %.lr.ph518.epil, %.preheader485
  %263 = shl nsw i64 %.pre-phi716, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %66, i8 0, i64 %263, i1 false)
  %264 = icmp sgt i32 %73, 0
  br i1 %264, label %.lr.ph522.preheader, label %.preheader484

.lr.ph522.preheader:                              ; preds = %._crit_edge519
  %wide.trip.count642 = zext nneg i32 %73 to i64
  %xtraiter781 = and i64 %wide.trip.count642, 1
  %265 = icmp eq i32 %73, 1
  br i1 %265, label %.preheader484.loopexit.unr-lcssa, label %.lr.ph522.preheader.new

.lr.ph522.preheader.new:                          ; preds = %.lr.ph522.preheader
  %unroll_iter784 = and i64 %wide.trip.count642, 2147483646
  br label %.lr.ph522

.preheader484.loopexit.unr-lcssa:                 ; preds = %290, %.lr.ph522.preheader
  %indvars.iv639.unr = phi i64 [ 0, %.lr.ph522.preheader ], [ %indvars.iv.next640.1, %290 ]
  %lcmp.mod783.not = icmp eq i64 %xtraiter781, 0
  br i1 %lcmp.mod783.not, label %.preheader484, label %.lr.ph522.epil

.lr.ph522.epil:                                   ; preds = %.preheader484.loopexit.unr-lcssa
  %266 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv639.unr
  %267 = load i32, ptr %266, align 4, !tbaa !43
  %268 = icmp sgt i32 %267, -1
  br i1 %268, label %269, label %.preheader484

269:                                              ; preds = %.lr.ph522.epil
  %270 = zext nneg i32 %267 to i64
  %271 = getelementptr inbounds i32, ptr %66, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !43
  %273 = add nsw i32 %272, 1
  store i32 %273, ptr %271, align 4, !tbaa !43
  br label %.preheader484

.preheader484:                                    ; preds = %.preheader484.loopexit.unr-lcssa, %269, %.lr.ph522.epil, %._crit_edge519
  br i1 %95, label %.lr.ph525.preheader, label %._crit_edge526.thread

.lr.ph525.preheader:                              ; preds = %.preheader484
  %wide.trip.count647 = zext nneg i32 %3 to i64
  br label %.lr.ph525

.lr.ph522:                                        ; preds = %290, %.lr.ph522.preheader.new
  %indvars.iv639 = phi i64 [ 0, %.lr.ph522.preheader.new ], [ %indvars.iv.next640.1, %290 ]
  %niter785 = phi i64 [ 0, %.lr.ph522.preheader.new ], [ %niter785.next.1, %290 ]
  %274 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv639
  %275 = load i32, ptr %274, align 4, !tbaa !43
  %276 = icmp sgt i32 %275, -1
  br i1 %276, label %277, label %.lr.ph522.1

277:                                              ; preds = %.lr.ph522
  %278 = zext nneg i32 %275 to i64
  %279 = getelementptr inbounds i32, ptr %66, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !43
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %279, align 4, !tbaa !43
  br label %.lr.ph522.1

.lr.ph522.1:                                      ; preds = %.lr.ph522, %277
  %indvars.iv.next640 = or disjoint i64 %indvars.iv639, 1
  %282 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv.next640
  %283 = load i32, ptr %282, align 4, !tbaa !43
  %284 = icmp sgt i32 %283, -1
  br i1 %284, label %285, label %290

285:                                              ; preds = %.lr.ph522.1
  %286 = zext nneg i32 %283 to i64
  %287 = getelementptr inbounds i32, ptr %66, i64 %286
  %288 = load i32, ptr %287, align 4, !tbaa !43
  %289 = add nsw i32 %288, 1
  store i32 %289, ptr %287, align 4, !tbaa !43
  br label %290

290:                                              ; preds = %285, %.lr.ph522.1
  %indvars.iv.next640.1 = add nuw nsw i64 %indvars.iv639, 2
  %niter785.next.1 = add i64 %niter785, 2
  %niter785.ncmp.1 = icmp eq i64 %niter785.next.1, %unroll_iter784
  br i1 %niter785.ncmp.1, label %.preheader484.loopexit.unr-lcssa, label %.lr.ph522, !llvm.loop !63

.lr.ph525:                                        ; preds = %.lr.ph525.preheader, %.lr.ph525
  %indvars.iv644 = phi i64 [ 0, %.lr.ph525.preheader ], [ %indvars.iv.next645, %.lr.ph525 ]
  %.1427524 = phi i32 [ %73, %.lr.ph525.preheader ], [ %299, %.lr.ph525 ]
  %291 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv644
  %292 = load i32, ptr %291, align 4, !tbaa !43
  %293 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv644
  store i32 %.1427524, ptr %293, align 4, !tbaa !43
  %294 = sext i32 %292 to i64
  %295 = getelementptr inbounds i32, ptr %33, i64 %294
  store i32 %.1427524, ptr %295, align 4, !tbaa !43
  %296 = getelementptr inbounds i32, ptr %66, i64 %294
  %297 = load i32, ptr %296, align 4, !tbaa !43
  %298 = add nsw i32 %297, %.1427524
  %299 = add nsw i32 %298, 1
  %300 = sext i32 %298 to i64
  %301 = getelementptr inbounds i32, ptr %53, i64 %300
  store i32 -1, ptr %301, align 4, !tbaa !43
  %302 = load i32, ptr %293, align 4, !tbaa !43
  store i32 %302, ptr %296, align 4, !tbaa !43
  %indvars.iv.next645 = add nuw nsw i64 %indvars.iv644, 1
  %exitcond648.not = icmp eq i64 %indvars.iv.next645, %wide.trip.count647
  br i1 %exitcond648.not, label %._crit_edge526, label %.lr.ph525, !llvm.loop !64

._crit_edge526:                                   ; preds = %.lr.ph525
  %303 = icmp eq i32 %299, %74
  br i1 %303, label %.preheader483, label %305

._crit_edge526.thread:                            ; preds = %.preheader484
  %304 = icmp eq i32 %73, 0
  br i1 %304, label %._crit_edge536, label %305

.preheader483:                                    ; preds = %._crit_edge526
  br i1 %95, label %.lr.ph533.preheader, label %._crit_edge536

.lr.ph533.preheader:                              ; preds = %.preheader483
  %wide.trip.count655 = zext nneg i32 %3 to i64
  br label %.lr.ph533

305:                                              ; preds = %._crit_edge526.thread, %._crit_edge526
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 277, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

.preheader482:                                    ; preds = %._crit_edge531
  br i1 %95, label %.lr.ph535.preheader, label %._crit_edge536

.lr.ph535.preheader:                              ; preds = %.preheader482
  %wide.trip.count660 = zext nneg i32 %3 to i64
  br label %.lr.ph535

.lr.ph533:                                        ; preds = %.lr.ph533.preheader, %._crit_edge531
  %indvars.iv652 = phi i64 [ 0, %.lr.ph533.preheader ], [ %indvars.iv.next653, %._crit_edge531 ]
  %306 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv652
  %307 = load i32, ptr %306, align 4, !tbaa !43
  %308 = getelementptr inbounds i32, ptr %30, i64 %indvars.iv652
  %309 = load i32, ptr %308, align 4, !tbaa !43
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %53, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !43
  %313 = icmp sgt i32 %312, -1
  br i1 %313, label %.lr.ph530, label %._crit_edge531

.lr.ph530:                                        ; preds = %.lr.ph533, %.lr.ph530
  %indvars.iv649 = phi i64 [ %indvars.iv.next650, %.lr.ph530 ], [ %310, %.lr.ph533 ]
  %314 = phi i32 [ %325, %.lr.ph530 ], [ %312, %.lr.ph533 ]
  %315 = zext nneg i32 %314 to i64
  %316 = getelementptr inbounds i32, ptr %66, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !43
  %318 = add nsw i32 %317, 1
  store i32 %318, ptr %316, align 4, !tbaa !43
  %319 = sext i32 %317 to i64
  %320 = getelementptr inbounds i32, ptr %53, i64 %319
  store i32 %307, ptr %320, align 4, !tbaa !43
  %321 = getelementptr inbounds double, ptr %56, i64 %indvars.iv649
  %322 = load double, ptr %321, align 8, !tbaa !52
  %323 = getelementptr inbounds double, ptr %56, i64 %319
  store double %322, ptr %323, align 8, !tbaa !52
  %indvars.iv.next650 = add nsw i64 %indvars.iv649, 1
  %324 = getelementptr inbounds i32, ptr %53, i64 %indvars.iv.next650
  %325 = load i32, ptr %324, align 4, !tbaa !43
  %326 = icmp sgt i32 %325, -1
  br i1 %326, label %.lr.ph530, label %._crit_edge531, !llvm.loop !65

._crit_edge531:                                   ; preds = %.lr.ph530, %.lr.ph533
  %indvars.iv.next653 = add nuw nsw i64 %indvars.iv652, 1
  %exitcond656.not = icmp eq i64 %indvars.iv.next653, %wide.trip.count655
  br i1 %exitcond656.not, label %.preheader482, label %.lr.ph533, !llvm.loop !66

327:                                              ; preds = %.lr.ph535
  %indvars.iv.next658 = add nuw nsw i64 %indvars.iv657, 1
  %exitcond661.not = icmp eq i64 %indvars.iv.next658, %wide.trip.count660
  br i1 %exitcond661.not, label %._crit_edge536, label %.lr.ph535, !llvm.loop !67

.lr.ph535:                                        ; preds = %.lr.ph535.preheader, %327
  %indvars.iv657 = phi i64 [ 0, %.lr.ph535.preheader ], [ %indvars.iv.next658, %327 ]
  %328 = getelementptr inbounds i32, ptr %66, i64 %indvars.iv657
  %329 = load i32, ptr %328, align 4, !tbaa !43
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %53, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !43
  %333 = icmp eq i32 %332, -1
  br i1 %333, label %327, label %334

334:                                              ; preds = %.lr.ph535
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 291, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

._crit_edge536:                                   ; preds = %327, %._crit_edge526.thread, %.preheader483, %.preheader482
  store i32 %74, ptr %39, align 4, !tbaa !43
  tail call void @lu_file_empty(i32 noundef %3, ptr noundef %41, ptr noundef %43, ptr noundef %45, ptr noundef %47, i32 noundef %10) #8
  tail call void @llvm.memset.p0.i64(ptr align 4 %66, i8 0, i64 %263, i1 false)
  %335 = icmp eq i32 %5, %3
  br i1 %335, label %.preheader478, label %.preheader481

.preheader481:                                    ; preds = %._crit_edge536
  %336 = icmp sgt i32 %5, 0
  br i1 %336, label %.lr.ph549, label %.preheader479

.lr.ph549:                                        ; preds = %.preheader481
  %337 = sitofp i32 %12 to double
  %wide.trip.count668 = zext nneg i32 %5 to i64
  br label %372

.preheader478:                                    ; preds = %._crit_edge536
  br i1 %95, label %.lr.ph567, label %.loopexit.thread

.lr.ph567:                                        ; preds = %.preheader478
  %338 = sitofp i32 %12 to double
  %wide.trip.count684 = zext nneg i32 %3 to i64
  br label %339

339:                                              ; preds = %.lr.ph567, %._crit_edge561
  %indvars.iv681 = phi i64 [ 0, %.lr.ph567 ], [ %indvars.iv.next682, %._crit_edge561 ]
  %.2428566 = phi i32 [ 0, %.lr.ph567 ], [ %371, %._crit_edge561 ]
  %340 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv681
  %341 = load i32, ptr %340, align 4, !tbaa !43
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %41, i64 %342
  store i32 %.2428566, ptr %343, align 4, !tbaa !43
  %344 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv681
  %345 = load i32, ptr %344, align 4, !tbaa !43
  %indvars.iv.next682 = add nuw nsw i64 %indvars.iv681, 1
  %346 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next682
  %347 = load i32, ptr %346, align 4, !tbaa !43
  %348 = icmp slt i32 %345, %347
  br i1 %348, label %.lr.ph560.preheader, label %._crit_edge561

.lr.ph560.preheader:                              ; preds = %339
  %349 = sext i32 %345 to i64
  %350 = sext i32 %.2428566 to i64
  br label %.lr.ph560

.lr.ph560:                                        ; preds = %.lr.ph560.preheader, %.lr.ph560
  %indvars.iv676 = phi i64 [ %350, %.lr.ph560.preheader ], [ %indvars.iv.next677, %.lr.ph560 ]
  %indvars.iv674 = phi i64 [ %349, %.lr.ph560.preheader ], [ %indvars.iv.next675, %.lr.ph560 ]
  %.0433556 = phi i32 [ 0, %.lr.ph560.preheader ], [ %361, %.lr.ph560 ]
  %351 = getelementptr inbounds i32, ptr %58, i64 %indvars.iv674
  %352 = load i32, ptr %351, align 4, !tbaa !43
  %353 = getelementptr inbounds i32, ptr %62, i64 %indvars.iv676
  store i32 %352, ptr %353, align 4, !tbaa !43
  %354 = getelementptr inbounds double, ptr %60, i64 %indvars.iv674
  %355 = load double, ptr %354, align 8, !tbaa !52
  %indvars.iv.next677 = add nsw i64 %indvars.iv676, 1
  %356 = getelementptr inbounds double, ptr %64, i64 %indvars.iv676
  store double %355, ptr %356, align 8, !tbaa !52
  %357 = sext i32 %352 to i64
  %358 = getelementptr inbounds i32, ptr %66, i64 %357
  %359 = load i32, ptr %358, align 4, !tbaa !43
  %360 = add nsw i32 %359, 1
  store i32 %360, ptr %358, align 4, !tbaa !43
  %361 = add nuw nsw i32 %.0433556, 1
  %indvars.iv.next675 = add nsw i64 %indvars.iv674, 1
  %362 = load i32, ptr %346, align 4, !tbaa !43
  %363 = sext i32 %362 to i64
  %364 = icmp slt i64 %indvars.iv.next675, %363
  br i1 %364, label %.lr.ph560, label %._crit_edge561.loopexit, !llvm.loop !68

._crit_edge561.loopexit:                          ; preds = %.lr.ph560
  %365 = trunc nsw i64 %indvars.iv.next677 to i32
  br label %._crit_edge561

._crit_edge561:                                   ; preds = %._crit_edge561.loopexit, %339
  %.0433.lcssa = phi i32 [ 0, %339 ], [ %361, %._crit_edge561.loopexit ]
  %.3.lcssa = phi i32 [ %.2428566, %339 ], [ %365, %._crit_edge561.loopexit ]
  %366 = getelementptr inbounds i32, ptr %43, i64 %342
  store i32 %.3.lcssa, ptr %366, align 4, !tbaa !43
  %367 = uitofp nneg i32 %.0433.lcssa to double
  %368 = tail call double @llvm.fmuladd.f64(double %14, double %367, double %338)
  %369 = sitofp i32 %.3.lcssa to double
  %370 = fadd double %368, %369
  %371 = fptosi double %370 to i32
  tail call void @lu_list_move(i32 noundef %341, i32 noundef 0, ptr noundef %45, ptr noundef %47, i32 noundef %3, ptr noundef null)
  %exitcond685.not = icmp eq i64 %indvars.iv.next682, %wide.trip.count684
  br i1 %exitcond685.not, label %.loopexit, label %339, !llvm.loop !69

.preheader479:                                    ; preds = %._crit_edge542, %.preheader481
  %.0431.lcssa = phi i32 [ 0, %.preheader481 ], [ %411, %._crit_edge542 ]
  %.4.lcssa = phi i32 [ 0, %.preheader481 ], [ %410, %._crit_edge542 ]
  br i1 %170, label %.lr.ph554, label %.loopexit

372:                                              ; preds = %.lr.ph549, %._crit_edge542
  %indvars.iv665 = phi i64 [ 0, %.lr.ph549 ], [ %indvars.iv.next666, %._crit_edge542 ]
  %.4548 = phi i32 [ 0, %.lr.ph549 ], [ %410, %._crit_edge542 ]
  %.0431547 = phi i32 [ 0, %.lr.ph549 ], [ %411, %._crit_edge542 ]
  %373 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv665
  %374 = load i32, ptr %373, align 4, !tbaa !43
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds i32, ptr %41, i64 %375
  store i32 %.4548, ptr %376, align 4, !tbaa !43
  %377 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv665
  %378 = load i32, ptr %377, align 4, !tbaa !43
  %indvars.iv.next666 = add nuw nsw i64 %indvars.iv665, 1
  %379 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next666
  %380 = load i32, ptr %379, align 4, !tbaa !43
  %381 = icmp slt i32 %378, %380
  br i1 %381, label %.lr.ph541.preheader, label %._crit_edge542

.lr.ph541.preheader:                              ; preds = %372
  %382 = sext i32 %378 to i64
  br label %.lr.ph541

.lr.ph541:                                        ; preds = %.lr.ph541.preheader, %401
  %383 = phi i32 [ %380, %.lr.ph541.preheader ], [ %402, %401 ]
  %indvars.iv662 = phi i64 [ %382, %.lr.ph541.preheader ], [ %indvars.iv.next663, %401 ]
  %.5538 = phi i32 [ %.4548, %.lr.ph541.preheader ], [ %.6, %401 ]
  %.1434537 = phi i32 [ 0, %.lr.ph541.preheader ], [ %.2435, %401 ]
  %384 = getelementptr inbounds i32, ptr %58, i64 %indvars.iv662
  %385 = load i32, ptr %384, align 4, !tbaa !43
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %18, i64 %386
  %388 = load i32, ptr %387, align 4, !tbaa !43
  %389 = icmp slt i32 %388, %5
  br i1 %389, label %390, label %401

390:                                              ; preds = %.lr.ph541
  %391 = sext i32 %.5538 to i64
  %392 = getelementptr inbounds i32, ptr %62, i64 %391
  store i32 %385, ptr %392, align 4, !tbaa !43
  %393 = getelementptr inbounds double, ptr %60, i64 %indvars.iv662
  %394 = load double, ptr %393, align 8, !tbaa !52
  %395 = add nsw i32 %.5538, 1
  %396 = getelementptr inbounds double, ptr %64, i64 %391
  store double %394, ptr %396, align 8, !tbaa !52
  %397 = getelementptr inbounds i32, ptr %66, i64 %386
  %398 = load i32, ptr %397, align 4, !tbaa !43
  %399 = add nsw i32 %398, 1
  store i32 %399, ptr %397, align 4, !tbaa !43
  %400 = add nsw i32 %.1434537, 1
  %.pre = load i32, ptr %379, align 4, !tbaa !43
  br label %401

401:                                              ; preds = %.lr.ph541, %390
  %402 = phi i32 [ %.pre, %390 ], [ %383, %.lr.ph541 ]
  %.2435 = phi i32 [ %400, %390 ], [ %.1434537, %.lr.ph541 ]
  %.6 = phi i32 [ %395, %390 ], [ %.5538, %.lr.ph541 ]
  %indvars.iv.next663 = add nsw i64 %indvars.iv662, 1
  %403 = sext i32 %402 to i64
  %404 = icmp slt i64 %indvars.iv.next663, %403
  br i1 %404, label %.lr.ph541, label %._crit_edge542, !llvm.loop !70

._crit_edge542:                                   ; preds = %401, %372
  %.1434.lcssa = phi i32 [ 0, %372 ], [ %.2435, %401 ]
  %.5.lcssa = phi i32 [ %.4548, %372 ], [ %.6, %401 ]
  %405 = getelementptr inbounds i32, ptr %43, i64 %375
  store i32 %.5.lcssa, ptr %405, align 4, !tbaa !43
  %406 = sitofp i32 %.1434.lcssa to double
  %407 = tail call double @llvm.fmuladd.f64(double %14, double %406, double %337)
  %408 = sitofp i32 %.5.lcssa to double
  %409 = fadd double %407, %408
  %410 = fptosi double %409 to i32
  tail call void @lu_list_move(i32 noundef %374, i32 noundef 0, ptr noundef %45, ptr noundef %47, i32 noundef %3, ptr noundef null)
  %411 = add nsw i32 %.1434.lcssa, %.0431547
  %exitcond669.not = icmp eq i64 %indvars.iv.next666, %wide.trip.count668
  br i1 %exitcond669.not, label %.preheader479, label %372, !llvm.loop !71

.lr.ph554:                                        ; preds = %.preheader479, %.lr.ph554
  %indvars.iv670 = phi i64 [ %indvars.iv.next671, %.lr.ph554 ], [ %67, %.preheader479 ]
  %.7553 = phi i32 [ %417, %.lr.ph554 ], [ %.4.lcssa, %.preheader479 ]
  %412 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv670
  %413 = load i32, ptr %412, align 4, !tbaa !43
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds i32, ptr %41, i64 %414
  store i32 %.7553, ptr %415, align 4, !tbaa !43
  %416 = getelementptr inbounds i32, ptr %43, i64 %414
  store i32 %.7553, ptr %416, align 4, !tbaa !43
  %417 = add nsw i32 %.7553, %12
  tail call void @lu_list_move(i32 noundef %413, i32 noundef 0, ptr noundef %45, ptr noundef %47, i32 noundef %3, ptr noundef null)
  %indvars.iv.next671 = add nsw i64 %indvars.iv670, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next671 to i32
  %exitcond673.not = icmp eq i32 %3, %lftr.wideiv
  br i1 %exitcond673.not, label %.loopexit, label %.lr.ph554, !llvm.loop !72

.loopexit:                                        ; preds = %.lr.ph554, %._crit_edge561, %.preheader479
  %.1432 = phi i32 [ %.0431.lcssa, %.preheader479 ], [ %72, %._crit_edge561 ], [ %.0431.lcssa, %.lr.ph554 ]
  %.8 = phi i32 [ %.4.lcssa, %.preheader479 ], [ %371, %._crit_edge561 ], [ %417, %.lr.ph554 ]
  %418 = getelementptr inbounds i32, ptr %43, i64 %.pre-phi716
  %419 = load i32, ptr %418, align 4, !tbaa !43
  %.not472 = icmp sgt i32 %.8, %419
  br i1 %.not472, label %423, label %424

.loopexit.thread:                                 ; preds = %.preheader478
  %420 = getelementptr inbounds i32, ptr %43, i64 %.pre-phi716
  %421 = load i32, ptr %420, align 4, !tbaa !43
  %.not472721 = icmp slt i32 %421, 0
  br i1 %.not472721, label %423, label %.thread724

.thread724:                                       ; preds = %.loopexit.thread
  %422 = getelementptr inbounds i32, ptr %41, i64 %.pre-phi716
  store i32 0, ptr %422, align 4, !tbaa !43
  store i32 -1, ptr %58, align 4, !tbaa !43
  br label %._crit_edge573.thread

423:                                              ; preds = %.loopexit.thread, %.loopexit
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 363, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

424:                                              ; preds = %.loopexit
  %425 = getelementptr inbounds i32, ptr %41, i64 %.pre-phi716
  store i32 %.8, ptr %425, align 4, !tbaa !43
  store i32 -1, ptr %58, align 4, !tbaa !43
  br i1 %95, label %.lr.ph572.preheader, label %._crit_edge573.thread

.lr.ph572.preheader:                              ; preds = %424
  %wide.trip.count689 = zext nneg i32 %3 to i64
  br label %.lr.ph572

.lr.ph572:                                        ; preds = %.lr.ph572.preheader, %442
  %indvars.iv686 = phi i64 [ 0, %.lr.ph572.preheader ], [ %indvars.iv.next687, %442 ]
  %.9570 = phi i32 [ 1, %.lr.ph572.preheader ], [ %.10, %442 ]
  %426 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv686
  %427 = load i32, ptr %426, align 4, !tbaa !43
  %428 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv686
  %429 = load i32, ptr %428, align 4, !tbaa !43
  %430 = sext i32 %427 to i64
  %431 = getelementptr inbounds i32, ptr %66, i64 %430
  %432 = load i32, ptr %431, align 4, !tbaa !43
  %433 = icmp eq i32 %432, 0
  %434 = sext i32 %429 to i64
  %435 = getelementptr inbounds i32, ptr %37, i64 %434
  br i1 %433, label %436, label %437

436:                                              ; preds = %.lr.ph572
  store i32 0, ptr %435, align 4, !tbaa !43
  br label %442

437:                                              ; preds = %.lr.ph572
  store i32 %.9570, ptr %435, align 4, !tbaa !43
  %438 = add nsw i32 %432, %.9570
  %439 = add nsw i32 %438, 1
  %440 = sext i32 %438 to i64
  %441 = getelementptr inbounds i32, ptr %58, i64 %440
  store i32 -1, ptr %441, align 4, !tbaa !43
  %.pre714 = load i32, ptr %435, align 4, !tbaa !43
  br label %442

442:                                              ; preds = %437, %436
  %443 = phi i32 [ %.pre714, %437 ], [ 0, %436 ]
  %.10 = phi i32 [ %439, %437 ], [ %.9570, %436 ]
  store i32 %443, ptr %431, align 4, !tbaa !43
  %indvars.iv.next687 = add nuw nsw i64 %indvars.iv686, 1
  %exitcond690.not = icmp eq i64 %indvars.iv.next687, %wide.trip.count689
  br i1 %exitcond690.not, label %._crit_edge573, label %.lr.ph572, !llvm.loop !73

._crit_edge573.thread:                            ; preds = %.thread724, %424
  %.1432722727.ph = phi i32 [ %72, %.thread724 ], [ %.1432, %424 ]
  %444 = getelementptr inbounds i32, ptr %37, i64 %.pre-phi716
  store i32 1, ptr %444, align 4, !tbaa !43
  br label %._crit_edge590

._crit_edge573:                                   ; preds = %442
  %445 = getelementptr inbounds i32, ptr %37, i64 %.pre-phi716
  store i32 %.10, ptr %445, align 4, !tbaa !43
  br i1 %95, label %.lr.ph581.preheader, label %._crit_edge590

.lr.ph581.preheader:                              ; preds = %._crit_edge573
  %wide.trip.count697 = zext nneg i32 %3 to i64
  br label %.lr.ph581

.preheader477:                                    ; preds = %._crit_edge578
  br i1 %95, label %.lr.ph583.preheader, label %._crit_edge590

.lr.ph583.preheader:                              ; preds = %.preheader477
  %wide.trip.count702 = zext nneg i32 %3 to i64
  br label %.lr.ph583

.lr.ph581:                                        ; preds = %.lr.ph581.preheader, %._crit_edge578
  %indvars.iv694 = phi i64 [ 0, %.lr.ph581.preheader ], [ %indvars.iv.next695, %._crit_edge578 ]
  %446 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv694
  %447 = load i32, ptr %446, align 4, !tbaa !43
  %448 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv694
  %449 = load i32, ptr %448, align 4, !tbaa !43
  %450 = sext i32 %447 to i64
  %451 = getelementptr inbounds i32, ptr %41, i64 %450
  %452 = load i32, ptr %451, align 4, !tbaa !43
  %453 = getelementptr inbounds i32, ptr %43, i64 %450
  %454 = load i32, ptr %453, align 4, !tbaa !43
  %455 = icmp slt i32 %452, %454
  br i1 %455, label %.lr.ph577.preheader, label %._crit_edge578

.lr.ph577.preheader:                              ; preds = %.lr.ph581
  %456 = sext i32 %452 to i64
  br label %.lr.ph577

.lr.ph577:                                        ; preds = %.lr.ph577.preheader, %465
  %indvars.iv691 = phi i64 [ %456, %.lr.ph577.preheader ], [ %indvars.iv.next692, %465 ]
  %457 = getelementptr inbounds i32, ptr %62, i64 %indvars.iv691
  %458 = load i32, ptr %457, align 4, !tbaa !43
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds i32, ptr %66, i64 %459
  %461 = load i32, ptr %460, align 4, !tbaa !43
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %460, align 4, !tbaa !43
  %463 = icmp sgt i32 %461, 0
  br i1 %463, label %465, label %464

464:                                              ; preds = %.lr.ph577
  tail call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, i32 noundef 397, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

465:                                              ; preds = %.lr.ph577
  %466 = zext nneg i32 %461 to i64
  %467 = getelementptr inbounds i32, ptr %58, i64 %466
  store i32 %449, ptr %467, align 4, !tbaa !43
  %468 = getelementptr inbounds double, ptr %64, i64 %indvars.iv691
  %469 = load double, ptr %468, align 8, !tbaa !52
  %470 = getelementptr inbounds double, ptr %60, i64 %466
  store double %469, ptr %470, align 8, !tbaa !52
  %indvars.iv.next692 = add nsw i64 %indvars.iv691, 1
  %471 = load i32, ptr %453, align 4, !tbaa !43
  %472 = sext i32 %471 to i64
  %473 = icmp slt i64 %indvars.iv.next692, %472
  br i1 %473, label %.lr.ph577, label %._crit_edge578, !llvm.loop !74

._crit_edge578:                                   ; preds = %465, %.lr.ph581
  %indvars.iv.next695 = add nuw nsw i64 %indvars.iv694, 1
  %exitcond698.not = icmp eq i64 %indvars.iv.next695, %wide.trip.count697
  br i1 %exitcond698.not, label %.preheader477, label %.lr.ph581, !llvm.loop !75

474:                                              ; preds = %.lr.ph583
  %indvars.iv.next700 = add nuw nsw i64 %indvars.iv699, 1
  %exitcond703.not = icmp eq i64 %indvars.iv.next700, %wide.trip.count702
  br i1 %exitcond703.not, label %.preheader476, label %.lr.ph583, !llvm.loop !76

.preheader476:                                    ; preds = %474
  br i1 %95, label %.lr.ph585.preheader, label %._crit_edge590

.lr.ph585.preheader:                              ; preds = %.preheader476
  %xtraiter786 = and i64 %wide.trip.count689, 1
  %475 = icmp eq i32 %3, 1
  br i1 %475, label %.preheader.unr-lcssa, label %.lr.ph585.preheader.new

.lr.ph585.preheader.new:                          ; preds = %.lr.ph585.preheader
  %unroll_iter789 = and i64 %wide.trip.count689, 2147483646
  br label %.lr.ph585

.lr.ph583:                                        ; preds = %.lr.ph583.preheader, %474
  %indvars.iv699 = phi i64 [ 0, %.lr.ph583.preheader ], [ %indvars.iv.next700, %474 ]
  %476 = getelementptr inbounds i32, ptr %66, i64 %indvars.iv699
  %477 = load i32, ptr %476, align 4, !tbaa !43
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds i32, ptr %58, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !43
  %481 = icmp eq i32 %480, -1
  br i1 %481, label %474, label %482

482:                                              ; preds = %.lr.ph583
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 405, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_build_factors) #7
  unreachable

.preheader.unr-lcssa:                             ; preds = %.lr.ph585, %.lr.ph585.preheader
  %indvars.iv704.unr = phi i64 [ 0, %.lr.ph585.preheader ], [ %indvars.iv.next705.1, %.lr.ph585 ]
  %lcmp.mod788.not = icmp eq i64 %xtraiter786, 0
  br i1 %lcmp.mod788.not, label %.preheader, label %.lr.ph585.epil

.lr.ph585.epil:                                   ; preds = %.preheader.unr-lcssa
  %483 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv704.unr
  %484 = load i32, ptr %483, align 4, !tbaa !43
  %485 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv704.unr
  %486 = load i32, ptr %485, align 4, !tbaa !43
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds i32, ptr %20, i64 %487
  store i32 %484, ptr %488, align 4, !tbaa !43
  %489 = sext i32 %484 to i64
  %490 = getelementptr inbounds i32, ptr %22, i64 %489
  store i32 %486, ptr %490, align 4, !tbaa !43
  br label %.preheader

.preheader:                                       ; preds = %.preheader.unr-lcssa, %.lr.ph585.epil
  br i1 %95, label %.lr.ph589.preheader, label %._crit_edge590

.lr.ph589.preheader:                              ; preds = %.preheader
  %wide.trip.count712 = zext nneg i32 %3 to i64
  br label %.lr.ph589

.lr.ph585:                                        ; preds = %.lr.ph585, %.lr.ph585.preheader.new
  %indvars.iv704 = phi i64 [ 0, %.lr.ph585.preheader.new ], [ %indvars.iv.next705.1, %.lr.ph585 ]
  %niter790 = phi i64 [ 0, %.lr.ph585.preheader.new ], [ %niter790.next.1, %.lr.ph585 ]
  %491 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv704
  %492 = load i32, ptr %491, align 4, !tbaa !43
  %493 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv704
  %494 = load i32, ptr %493, align 4, !tbaa !43
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds i32, ptr %20, i64 %495
  store i32 %492, ptr %496, align 4, !tbaa !43
  %497 = sext i32 %492 to i64
  %498 = getelementptr inbounds i32, ptr %22, i64 %497
  store i32 %494, ptr %498, align 4, !tbaa !43
  %indvars.iv.next705 = or disjoint i64 %indvars.iv704, 1
  %499 = getelementptr inbounds i32, ptr %26, i64 %indvars.iv.next705
  %500 = load i32, ptr %499, align 4, !tbaa !43
  %501 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv.next705
  %502 = load i32, ptr %501, align 4, !tbaa !43
  %503 = sext i32 %502 to i64
  %504 = getelementptr inbounds i32, ptr %20, i64 %503
  store i32 %500, ptr %504, align 4, !tbaa !43
  %505 = sext i32 %500 to i64
  %506 = getelementptr inbounds i32, ptr %22, i64 %505
  store i32 %502, ptr %506, align 4, !tbaa !43
  %indvars.iv.next705.1 = add nuw nsw i64 %indvars.iv704, 2
  %niter790.next.1 = add i64 %niter790, 2
  %niter790.ncmp.1 = icmp eq i64 %niter790.next.1, %unroll_iter789
  br i1 %niter790.ncmp.1, label %.preheader.unr-lcssa, label %.lr.ph585, !llvm.loop !77

.lr.ph589:                                        ; preds = %.lr.ph589.preheader, %.lr.ph589
  %indvars.iv709 = phi i64 [ 0, %.lr.ph589.preheader ], [ %indvars.iv.next710, %.lr.ph589 ]
  %.0420588 = phi double [ 0.000000e+00, %.lr.ph589.preheader ], [ %514, %.lr.ph589 ]
  %.0421587 = phi double [ 0x7FF0000000000000, %.lr.ph589.preheader ], [ %515, %.lr.ph589 ]
  %507 = getelementptr inbounds i32, ptr %22, i64 %indvars.iv709
  %508 = load i32, ptr %507, align 4, !tbaa !43
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds double, ptr %49, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !52
  %512 = getelementptr inbounds double, ptr %51, i64 %indvars.iv709
  store double %511, ptr %512, align 8, !tbaa !52
  %513 = tail call double @llvm.fabs.f64(double %511)
  %514 = tail call double @llvm.maxnum.f64(double %513, double %.0420588)
  %515 = tail call double @llvm.minnum.f64(double %513, double %.0421587)
  %indvars.iv.next710 = add nuw nsw i64 %indvars.iv709, 1
  %exitcond713.not = icmp eq i64 %indvars.iv.next710, %wide.trip.count712
  br i1 %exitcond713.not, label %._crit_edge590, label %.lr.ph589, !llvm.loop !78

._crit_edge590:                                   ; preds = %.lr.ph589, %._crit_edge573, %._crit_edge573.thread, %.preheader477, %.preheader476, %.preheader
  %.1432722727730732734736 = phi i32 [ %.1432, %.preheader ], [ %.1432, %.preheader476 ], [ %.1432, %.preheader477 ], [ %.1432, %._crit_edge573 ], [ %.1432722727.ph, %._crit_edge573.thread ], [ %.1432, %.lr.ph589 ]
  %.0421.lcssa = phi double [ 0x7FF0000000000000, %.preheader ], [ 0x7FF0000000000000, %.preheader476 ], [ 0x7FF0000000000000, %.preheader477 ], [ 0x7FF0000000000000, %._crit_edge573 ], [ 0x7FF0000000000000, %._crit_edge573.thread ], [ %515, %.lr.ph589 ]
  %.0420.lcssa = phi double [ 0.000000e+00, %.preheader ], [ 0.000000e+00, %.preheader476 ], [ 0.000000e+00, %.preheader477 ], [ 0.000000e+00, %._crit_edge573 ], [ 0.000000e+00, %._crit_edge573.thread ], [ %514, %.lr.ph589 ]
  %516 = getelementptr inbounds i8, ptr %0, i64 592
  %517 = load ptr, ptr %516, align 8, !tbaa !79
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %517, ptr align 4 %26, i64 %263, i1 false)
  %518 = getelementptr inbounds i8, ptr %0, i64 136
  store double %.0421.lcssa, ptr %518, align 8, !tbaa !80
  %519 = getelementptr inbounds i8, ptr %0, i64 144
  store double %.0420.lcssa, ptr %519, align 8, !tbaa !81
  %520 = getelementptr inbounds i8, ptr %0, i64 400
  store i32 %3, ptr %520, align 8, !tbaa !82
  %521 = getelementptr inbounds i8, ptr %0, i64 124
  store i32 %70, ptr %521, align 4, !tbaa !83
  %522 = getelementptr inbounds i8, ptr %0, i64 128
  store i32 %.1432722727730732734736, ptr %522, align 8, !tbaa !84
  %523 = getelementptr inbounds i8, ptr %0, i64 132
  store i32 0, ptr %523, align 4, !tbaa !85
  br label %524

524:                                              ; preds = %.thread, %94, %._crit_edge590
  %.2475 = phi i32 [ 1, %.thread ], [ 1, %94 ], [ 0, %._crit_edge590 ]
  ret i32 %.2475
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #2

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

declare void @lu_file_empty(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: inlinehint nounwind uwtable
declare hidden void @lu_list_move(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.maxnum.f64(double, double) #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.minnum.f64(double, double) #1

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #6

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { noreturn nounwind "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 nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { "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 = { inlinehint 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 #6 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #7 = { noreturn nounwind }
attributes #8 = { 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, !7, i64 84}
!6 = !{!"lu", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !7, i64 40, !7, i64 44, !7, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !7, i64 80, !7, i64 84, !7, i64 88, !7, i64 92, !7, i64 96, !7, i64 100, !7, i64 104, !7, i64 108, !7, i64 112, !7, i64 116, !7, i64 120, !7, i64 124, !7, i64 128, !7, i64 132, !10, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208, !10, i64 216, !7, i64 224, !7, i64 228, !7, i64 232, !10, i64 240, !10, i64 248, !10, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !7, i64 312, !7, i64 316, !7, i64 320, !7, i64 324, !7, i64 328, !7, i64 332, !7, i64 336, !7, i64 340, !10, i64 344, !10, i64 352, !10, i64 360, !10, i64 368, !7, i64 376, !7, i64 380, !7, i64 384, !7, i64 388, !7, i64 392, !7, i64 396, !7, i64 400, !7, i64 404, !7, i64 408, !7, i64 412, !11, i64 416, !11, i64 424, !11, i64 432, !11, i64 440, !11, i64 448, !11, i64 456, !11, i64 464, !11, i64 472, !11, i64 480, !11, i64 488, !11, i64 496, !11, i64 504, !11, i64 512, !11, i64 520, !11, i64 528, !11, i64 536, !11, i64 544, !11, i64 552, !11, i64 560, !11, i64 568, !11, i64 576, !11, i64 584, !11, i64 592, !11, i64 600, !11, i64 608, !11, i64 616, !11, i64 624, !11, i64 632, !11, i64 640, !11, i64 648, !11, i64 656, !11, i64 664, !11, i64 672, !11, i64 680, !11, i64 688}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!6, !7, i64 316}
!13 = !{!6, !7, i64 0}
!14 = !{!6, !7, i64 4}
!15 = !{!6, !7, i64 8}
!16 = !{!6, !7, i64 48}
!17 = !{!6, !10, i64 56}
!18 = !{!6, !11, i64 600}
!19 = !{!6, !11, i64 616}
!20 = !{!6, !11, i64 608}
!21 = !{!6, !11, i64 624}
!22 = !{!6, !11, i64 472}
!23 = !{!6, !11, i64 488}
!24 = !{!6, !11, i64 544}
!25 = !{!6, !11, i64 632}
!26 = !{!6, !11, i64 560}
!27 = !{!6, !11, i64 576}
!28 = !{!6, !11, i64 640}
!29 = !{!6, !11, i64 504}
!30 = !{!6, !11, i64 536}
!31 = !{!6, !11, i64 552}
!32 = !{!6, !11, i64 568}
!33 = !{!6, !11, i64 584}
!34 = !{!6, !11, i64 680}
!35 = !{!6, !11, i64 688}
!36 = !{!6, !11, i64 416}
!37 = !{!6, !11, i64 440}
!38 = !{!6, !11, i64 424}
!39 = !{!6, !11, i64 448}
!40 = !{!6, !11, i64 432}
!41 = !{!6, !11, i64 456}
!42 = !{!6, !11, i64 528}
!43 = !{!7, !7, i64 0}
!44 = !{!6, !7, i64 88}
!45 = !{!6, !7, i64 92}
!46 = !{!6, !7, i64 96}
!47 = distinct !{!47, !48}
!48 = !{!"llvm.loop.mustprogress"}
!49 = distinct !{!49, !48}
!50 = distinct !{!50, !48}
!51 = distinct !{!51, !48}
!52 = !{!10, !10, i64 0}
!53 = distinct !{!53, !54}
!54 = !{!"llvm.loop.unroll.disable"}
!55 = distinct !{!55, !48}
!56 = distinct !{!56, !48, !57, !58}
!57 = !{!"llvm.loop.isvectorized", i32 1}
!58 = !{!"llvm.loop.unroll.runtime.disable"}
!59 = distinct !{!59, !54}
!60 = distinct !{!60, !48, !57}
!61 = distinct !{!61, !48}
!62 = distinct !{!62, !54}
!63 = distinct !{!63, !48}
!64 = distinct !{!64, !48}
!65 = distinct !{!65, !48}
!66 = distinct !{!66, !48}
!67 = distinct !{!67, !48}
!68 = distinct !{!68, !48}
!69 = distinct !{!69, !48}
!70 = distinct !{!70, !48}
!71 = distinct !{!71, !48}
!72 = distinct !{!72, !48}
!73 = distinct !{!73, !48}
!74 = distinct !{!74, !48}
!75 = distinct !{!75, !48}
!76 = distinct !{!76, !48}
!77 = distinct !{!77, !48}
!78 = distinct !{!78, !48}
!79 = !{!6, !11, i64 592}
!80 = !{!6, !10, i64 136}
!81 = !{!6, !10, i64 144}
!82 = !{!6, !7, i64 400}
!83 = !{!6, !7, i64 124}
!84 = !{!6, !7, i64 128}
!85 = !{!6, !7, i64 132}


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