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

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

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

165:                                              ; preds = %8
  %166 = load ptr, ptr %15, align 8, !tbaa !5
  %167 = icmp ne ptr %166, null
  br i1 %167, label %168, label %171

168:                                              ; preds = %165
  %169 = load ptr, ptr %16, align 8, !tbaa !5
  %170 = icmp ne ptr %169, null
  br label %171

171:                                              ; preds = %168, %165, %8
  %172 = phi i1 [ false, %165 ], [ false, %8 ], [ %170, %168 ]
  %173 = zext i1 %172 to i32
  store i32 %173, ptr %65, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #4
  store i32 0, ptr %66, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #4
  store i32 0, ptr %67, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #4
  store i32 0, ptr %68, align 4, !tbaa !9
  %174 = load i8, ptr %17, align 1, !tbaa !11
  %175 = sext i8 %174 to i32
  %176 = icmp eq i32 %175, 116
  br i1 %176, label %181, label %177

177:                                              ; preds = %171
  %178 = load i8, ptr %17, align 1, !tbaa !11
  %179 = sext i8 %178 to i32
  %180 = icmp eq i32 %179, 84
  br i1 %180, label %181, label %644

181:                                              ; preds = %177, %171
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #4
  %182 = load ptr, ptr %10, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.lu, ptr %182, i32 0, i32 85
  %184 = load ptr, ptr %183, align 8, !tbaa !42
  store ptr %184, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #4
  %185 = load ptr, ptr %10, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.lu, ptr %185, i32 0, i32 85
  %187 = load ptr, ptr %186, align 8, !tbaa !42
  %188 = load i32, ptr %18, align 4, !tbaa !9
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds i32, ptr %187, i64 %189
  store ptr %190, ptr %70, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #4
  %191 = load ptr, ptr %10, align 8, !tbaa !5
  %192 = getelementptr inbounds %struct.lu, ptr %191, i32 0, i32 102
  %193 = load ptr, ptr %192, align 8, !tbaa !43
  store ptr %193, ptr %71, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #4
  %194 = load ptr, ptr %10, align 8, !tbaa !5
  %195 = getelementptr inbounds %struct.lu, ptr %194, i32 0, i32 103
  %196 = load ptr, ptr %195, align 8, !tbaa !44
  store ptr %196, ptr %72, align 8, !tbaa !5
  %197 = load ptr, ptr %12, align 8, !tbaa !5
  %198 = getelementptr inbounds i32, ptr %197, i64 0
  %199 = load i32, ptr %198, align 4, !tbaa !9
  store i32 %199, ptr %54, align 4, !tbaa !9
  %200 = load ptr, ptr %24, align 8, !tbaa !5
  %201 = load i32, ptr %54, align 4, !tbaa !9
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds i32, ptr %200, i64 %202
  %204 = load i32, ptr %203, align 4, !tbaa !9
  store i32 %204, ptr %53, align 4, !tbaa !9
  %205 = load ptr, ptr %34, align 8, !tbaa !5
  %206 = load i32, ptr %54, align 4, !tbaa !9
  %207 = sext i32 %206 to i64
  %208 = getelementptr inbounds i32, ptr %205, i64 %207
  %209 = load i32, ptr %208, align 4, !tbaa !9
  store i32 %209, ptr %60, align 4, !tbaa !9
  %210 = load ptr, ptr %35, align 8, !tbaa !5
  %211 = load i32, ptr %54, align 4, !tbaa !9
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds i32, ptr %210, i64 %212
  %214 = load i32, ptr %213, align 4, !tbaa !9
  store i32 %214, ptr %61, align 4, !tbaa !9
  %215 = load ptr, ptr %10, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.lu, ptr %215, i32 0, i32 66
  %217 = load i32, ptr %216, align 4, !tbaa !45
  %218 = add nsw i32 %217, 1
  store i32 %218, ptr %216, align 4, !tbaa !45
  store i32 %218, ptr %57, align 4, !tbaa !9
  %219 = load i32, ptr %18, align 4, !tbaa !9
  %220 = load ptr, ptr %34, align 8, !tbaa !5
  %221 = load ptr, ptr %35, align 8, !tbaa !5
  %222 = load ptr, ptr %42, align 8, !tbaa !5
  %223 = load i32, ptr %61, align 4, !tbaa !9
  %224 = load i32, ptr %60, align 4, !tbaa !9
  %225 = sub nsw i32 %223, %224
  %226 = load ptr, ptr %42, align 8, !tbaa !5
  %227 = load i32, ptr %60, align 4, !tbaa !9
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds i32, ptr %226, i64 %228
  %230 = load ptr, ptr %69, align 8, !tbaa !5
  %231 = load ptr, ptr %72, align 8, !tbaa !5
  %232 = load ptr, ptr %44, align 8, !tbaa !5
  %233 = load i32, ptr %57, align 4, !tbaa !9
  %234 = call i32 @lu_solve_symbolic(i32 noundef %219, ptr noundef %220, ptr noundef %221, ptr noundef %222, i32 noundef %225, ptr noundef %229, ptr noundef %230, ptr noundef %231, ptr noundef %232, i32 noundef %233)
  store i32 %234, ptr %50, align 4, !tbaa !9
  %235 = load i32, ptr %18, align 4, !tbaa !9
  %236 = load i32, ptr %50, align 4, !tbaa !9
  %237 = sub nsw i32 %235, %236
  store i32 %237, ptr %56, align 4, !tbaa !9
  %238 = load ptr, ptr %10, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.lu, ptr %238, i32 0, i32 0
  %240 = load i32, ptr %239, align 8, !tbaa !46
  %241 = load ptr, ptr %33, align 8, !tbaa !5
  %242 = load i32, ptr %19, align 4, !tbaa !9
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds i32, ptr %241, i64 %243
  %245 = load i32, ptr %244, align 4, !tbaa !9
  %246 = sub nsw i32 %240, %245
  store i32 %246, ptr %58, align 4, !tbaa !9
  %247 = load i32, ptr %58, align 4, !tbaa !9
  %248 = load i32, ptr %56, align 4, !tbaa !9
  %249 = icmp slt i32 %247, %248
  br i1 %249, label %250, label %256

250:                                              ; preds = %181
  %251 = load i32, ptr %56, align 4, !tbaa !9
  %252 = load i32, ptr %58, align 4, !tbaa !9
  %253 = sub nsw i32 %251, %252
  %254 = load ptr, ptr %10, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.lu, ptr %254, i32 0, i32 14
  store i32 %253, ptr %255, align 8, !tbaa !47
  store i32 1, ptr %9, align 4
  store i32 1, ptr %73, align 4
  br label %641

256:                                              ; preds = %181
  %257 = load i32, ptr %60, align 4, !tbaa !9
  store i32 %257, ptr %51, align 4, !tbaa !9
  br label %258

258:                                              ; preds = %276, %256
  %259 = load i32, ptr %51, align 4, !tbaa !9
  %260 = load i32, ptr %61, align 4, !tbaa !9
  %261 = icmp slt i32 %259, %260
  br i1 %261, label %262, label %279

262:                                              ; preds = %258
  %263 = load ptr, ptr %43, align 8, !tbaa !5
  %264 = load i32, ptr %51, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds double, ptr %263, i64 %265
  %267 = load double, ptr %266, align 8, !tbaa !19
  %268 = load ptr, ptr %71, align 8, !tbaa !5
  %269 = load ptr, ptr %42, align 8, !tbaa !5
  %270 = load i32, ptr %51, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds i32, ptr %269, i64 %271
  %273 = load i32, ptr %272, align 4, !tbaa !9
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds double, ptr %268, i64 %274
  store double %267, ptr %275, align 8, !tbaa !19
  br label %276

276:                                              ; preds = %262
  %277 = load i32, ptr %51, align 4, !tbaa !9
  %278 = add nsw i32 %277, 1
  store i32 %278, ptr %51, align 4, !tbaa !9
  br label %258, !llvm.loop !48

279:                                              ; preds = %258
  %280 = load i32, ptr %56, align 4, !tbaa !9
  %281 = load ptr, ptr %69, align 8, !tbaa !5
  %282 = load i32, ptr %50, align 4, !tbaa !9
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds i32, ptr %281, i64 %283
  %285 = load ptr, ptr %34, align 8, !tbaa !5
  %286 = load ptr, ptr %35, align 8, !tbaa !5
  %287 = load ptr, ptr %42, align 8, !tbaa !5
  %288 = load ptr, ptr %43, align 8, !tbaa !5
  %289 = load ptr, ptr %36, align 8, !tbaa !5
  %290 = load ptr, ptr %71, align 8, !tbaa !5
  %291 = load ptr, ptr %70, align 8, !tbaa !5
  %292 = call i32 @lu_solve_triangular(i32 noundef %280, ptr noundef %284, ptr noundef %285, ptr noundef %286, ptr noundef %287, ptr noundef %288, ptr noundef %289, double noundef 0.000000e+00, ptr noundef %290, ptr noundef %291, ptr noundef %67)
  %293 = load ptr, ptr %33, align 8, !tbaa !5
  %294 = load i32, ptr %19, align 4, !tbaa !9
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds i32, ptr %293, i64 %295
  %297 = load i32, ptr %296, align 4, !tbaa !9
  store i32 %297, ptr %52, align 4, !tbaa !9
  %298 = load i32, ptr %50, align 4, !tbaa !9
  store i32 %298, ptr %49, align 4, !tbaa !9
  br label %299

299:                                              ; preds = %333, %279
  %300 = load i32, ptr %49, align 4, !tbaa !9
  %301 = load i32, ptr %18, align 4, !tbaa !9
  %302 = icmp slt i32 %300, %301
  br i1 %302, label %303, label %336

303:                                              ; preds = %299
  %304 = load ptr, ptr %69, align 8, !tbaa !5
  %305 = load i32, ptr %49, align 4, !tbaa !9
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds i32, ptr %304, i64 %306
  %308 = load i32, ptr %307, align 4, !tbaa !9
  store i32 %308, ptr %46, align 4, !tbaa !9
  %309 = load ptr, ptr %24, align 8, !tbaa !5
  %310 = load i32, ptr %46, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds i32, ptr %309, i64 %311
  %313 = load i32, ptr %312, align 4, !tbaa !9
  store i32 %313, ptr %45, align 4, !tbaa !9
  %314 = load i32, ptr %45, align 4, !tbaa !9
  %315 = load ptr, ptr %38, align 8, !tbaa !5
  %316 = load i32, ptr %52, align 4, !tbaa !9
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds i32, ptr %315, i64 %317
  store i32 %314, ptr %318, align 4, !tbaa !9
  %319 = load ptr, ptr %71, align 8, !tbaa !5
  %320 = load i32, ptr %46, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds double, ptr %319, i64 %321
  %323 = load double, ptr %322, align 8, !tbaa !19
  %324 = load ptr, ptr %39, align 8, !tbaa !5
  %325 = load i32, ptr %52, align 4, !tbaa !9
  %326 = add nsw i32 %325, 1
  store i32 %326, ptr %52, align 4, !tbaa !9
  %327 = sext i32 %325 to i64
  %328 = getelementptr inbounds double, ptr %324, i64 %327
  store double %323, ptr %328, align 8, !tbaa !19
  %329 = load ptr, ptr %71, align 8, !tbaa !5
  %330 = load i32, ptr %46, align 4, !tbaa !9
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds double, ptr %329, i64 %331
  store double 0.000000e+00, ptr %332, align 8, !tbaa !19
  br label %333

333:                                              ; preds = %303
  %334 = load i32, ptr %49, align 4, !tbaa !9
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %49, align 4, !tbaa !9
  br label %299, !llvm.loop !50

336:                                              ; preds = %299
  %337 = load i32, ptr %52, align 4, !tbaa !9
  %338 = load ptr, ptr %33, align 8, !tbaa !5
  %339 = load i32, ptr %19, align 4, !tbaa !9
  %340 = add nsw i32 %339, 1
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds i32, ptr %338, i64 %341
  store i32 %337, ptr %342, align 4, !tbaa !9
  %343 = load i32, ptr %53, align 4, !tbaa !9
  %344 = load ptr, ptr %26, align 8, !tbaa !5
  %345 = load i32, ptr %19, align 4, !tbaa !9
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds i32, ptr %344, i64 %346
  store i32 %343, ptr %347, align 4, !tbaa !9
  %348 = load i32, ptr %54, align 4, !tbaa !9
  %349 = load ptr, ptr %10, align 8, !tbaa !5
  %350 = getelementptr inbounds %struct.lu, ptr %349, i32 0, i32 65
  store i32 %348, ptr %350, align 8, !tbaa !51
  %351 = load i32, ptr %65, align 4, !tbaa !9
  %352 = icmp ne i32 %351, 0
  br i1 %352, label %354, label %353

353:                                              ; preds = %336
  store i32 8, ptr %73, align 4
  br label %641

354:                                              ; preds = %336
  %355 = load ptr, ptr %10, align 8, !tbaa !5
  %356 = getelementptr inbounds %struct.lu, ptr %355, i32 0, i32 66
  %357 = load i32, ptr %356, align 4, !tbaa !45
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %356, align 4, !tbaa !45
  store i32 %358, ptr %57, align 4, !tbaa !9
  %359 = load i32, ptr %53, align 4, !tbaa !9
  %360 = load ptr, ptr %70, align 8, !tbaa !5
  %361 = getelementptr inbounds i32, ptr %360, i64 0
  store i32 %359, ptr %361, align 4, !tbaa !9
  %362 = load i32, ptr %57, align 4, !tbaa !9
  %363 = load ptr, ptr %44, align 8, !tbaa !5
  %364 = load i32, ptr %53, align 4, !tbaa !9
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds i32, ptr %363, i64 %365
  store i32 %362, ptr %366, align 4, !tbaa !9
  %367 = load ptr, ptr %36, align 8, !tbaa !5
  %368 = load i32, ptr %54, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds double, ptr %367, i64 %369
  %371 = load double, ptr %370, align 8, !tbaa !19
  store double %371, ptr %64, align 8, !tbaa !19
  %372 = load double, ptr %64, align 8, !tbaa !19
  %373 = fdiv double 1.000000e+00, %372
  %374 = load ptr, ptr %16, align 8, !tbaa !5
  %375 = load i32, ptr %53, align 4, !tbaa !9
  %376 = sext i32 %375 to i64
  %377 = getelementptr inbounds double, ptr %374, i64 %376
  store double %373, ptr %377, align 8, !tbaa !19
  %378 = load double, ptr %22, align 8, !tbaa !19
  %379 = load double, ptr %64, align 8, !tbaa !19
  %380 = call double @llvm.fabs.f64(double %379)
  %381 = fmul double %378, %380
  store double %381, ptr %63, align 8, !tbaa !19
  store i32 1, ptr %55, align 4, !tbaa !9
  %382 = load ptr, ptr %33, align 8, !tbaa !5
  %383 = load i32, ptr %19, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %382, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !9
  store i32 %386, ptr %51, align 4, !tbaa !9
  br label %387

387:                                              ; preds = %434, %354
  %388 = load i32, ptr %51, align 4, !tbaa !9
  %389 = load ptr, ptr %33, align 8, !tbaa !5
  %390 = load i32, ptr %19, align 4, !tbaa !9
  %391 = add nsw i32 %390, 1
  %392 = sext i32 %391 to i64
  %393 = getelementptr inbounds i32, ptr %389, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !9
  %395 = icmp slt i32 %388, %394
  br i1 %395, label %396, label %437

396:                                              ; preds = %387
  %397 = load ptr, ptr %39, align 8, !tbaa !5
  %398 = load i32, ptr %51, align 4, !tbaa !9
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds double, ptr %397, i64 %399
  %401 = load double, ptr %400, align 8, !tbaa !19
  %402 = call double @llvm.fabs.f64(double %401)
  %403 = load double, ptr %63, align 8, !tbaa !19
  %404 = fcmp ogt double %402, %403
  br i1 %404, label %405, label %433

405:                                              ; preds = %396
  %406 = load ptr, ptr %38, align 8, !tbaa !5
  %407 = load i32, ptr %51, align 4, !tbaa !9
  %408 = sext i32 %407 to i64
  %409 = getelementptr inbounds i32, ptr %406, i64 %408
  %410 = load i32, ptr %409, align 4, !tbaa !9
  store i32 %410, ptr %45, align 4, !tbaa !9
  %411 = load ptr, ptr %70, align 8, !tbaa !5
  %412 = load i32, ptr %55, align 4, !tbaa !9
  %413 = add nsw i32 %412, 1
  store i32 %413, ptr %55, align 4, !tbaa !9
  %414 = sext i32 %412 to i64
  %415 = getelementptr inbounds i32, ptr %411, i64 %414
  store i32 %410, ptr %415, align 4, !tbaa !9
  %416 = load i32, ptr %57, align 4, !tbaa !9
  %417 = load ptr, ptr %44, align 8, !tbaa !5
  %418 = load i32, ptr %45, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds i32, ptr %417, i64 %419
  store i32 %416, ptr %420, align 4, !tbaa !9
  %421 = load ptr, ptr %39, align 8, !tbaa !5
  %422 = load i32, ptr %51, align 4, !tbaa !9
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds double, ptr %421, i64 %423
  %425 = load double, ptr %424, align 8, !tbaa !19
  %426 = fneg double %425
  %427 = load double, ptr %64, align 8, !tbaa !19
  %428 = fdiv double %426, %427
  %429 = load ptr, ptr %16, align 8, !tbaa !5
  %430 = load i32, ptr %45, align 4, !tbaa !9
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds double, ptr %429, i64 %431
  store double %428, ptr %432, align 8, !tbaa !19
  br label %433

433:                                              ; preds = %405, %396
  br label %434

434:                                              ; preds = %433
  %435 = load i32, ptr %51, align 4, !tbaa !9
  %436 = add nsw i32 %435, 1
  store i32 %436, ptr %51, align 4, !tbaa !9
  br label %387, !llvm.loop !52

437:                                              ; preds = %387
  %438 = load i32, ptr %19, align 4, !tbaa !9
  %439 = sub nsw i32 %438, 1
  store i32 %439, ptr %49, align 4, !tbaa !9
  br label %440

440:                                              ; preds = %521, %437
  %441 = load i32, ptr %49, align 4, !tbaa !9
  %442 = icmp sge i32 %441, 0
  br i1 %442, label %443, label %524

443:                                              ; preds = %440
  %444 = load ptr, ptr %26, align 8, !tbaa !5
  %445 = load i32, ptr %49, align 4, !tbaa !9
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds i32, ptr %444, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !9
  store i32 %448, ptr %53, align 4, !tbaa !9
  %449 = load ptr, ptr %16, align 8, !tbaa !5
  %450 = load i32, ptr %53, align 4, !tbaa !9
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds double, ptr %449, i64 %451
  %453 = load double, ptr %452, align 8, !tbaa !19
  %454 = fcmp une double %453, 0.000000e+00
  br i1 %454, label %455, label %520

455:                                              ; preds = %443
  %456 = load ptr, ptr %16, align 8, !tbaa !5
  %457 = load i32, ptr %53, align 4, !tbaa !9
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds double, ptr %456, i64 %458
  %460 = load double, ptr %459, align 8, !tbaa !19
  store double %460, ptr %62, align 8, !tbaa !19
  %461 = load ptr, ptr %33, align 8, !tbaa !5
  %462 = load i32, ptr %49, align 4, !tbaa !9
  %463 = sext i32 %462 to i64
  %464 = getelementptr inbounds i32, ptr %461, i64 %463
  %465 = load i32, ptr %464, align 4, !tbaa !9
  store i32 %465, ptr %51, align 4, !tbaa !9
  br label %466

466:                                              ; preds = %516, %455
  %467 = load i32, ptr %51, align 4, !tbaa !9
  %468 = load ptr, ptr %33, align 8, !tbaa !5
  %469 = load i32, ptr %49, align 4, !tbaa !9
  %470 = add nsw i32 %469, 1
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds i32, ptr %468, i64 %471
  %473 = load i32, ptr %472, align 4, !tbaa !9
  %474 = icmp slt i32 %467, %473
  br i1 %474, label %475, label %519

475:                                              ; preds = %466
  %476 = load ptr, ptr %38, align 8, !tbaa !5
  %477 = load i32, ptr %51, align 4, !tbaa !9
  %478 = sext i32 %477 to i64
  %479 = getelementptr inbounds i32, ptr %476, i64 %478
  %480 = load i32, ptr %479, align 4, !tbaa !9
  store i32 %480, ptr %45, align 4, !tbaa !9
  %481 = load ptr, ptr %44, align 8, !tbaa !5
  %482 = load i32, ptr %45, align 4, !tbaa !9
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i32, ptr %481, i64 %483
  %485 = load i32, ptr %484, align 4, !tbaa !9
  %486 = load i32, ptr %57, align 4, !tbaa !9
  %487 = icmp ne i32 %485, %486
  br i1 %487, label %488, label %500

488:                                              ; preds = %475
  %489 = load i32, ptr %57, align 4, !tbaa !9
  %490 = load ptr, ptr %44, align 8, !tbaa !5
  %491 = load i32, ptr %45, align 4, !tbaa !9
  %492 = sext i32 %491 to i64
  %493 = getelementptr inbounds i32, ptr %490, i64 %492
  store i32 %489, ptr %493, align 4, !tbaa !9
  %494 = load i32, ptr %45, align 4, !tbaa !9
  %495 = load ptr, ptr %70, align 8, !tbaa !5
  %496 = load i32, ptr %55, align 4, !tbaa !9
  %497 = add nsw i32 %496, 1
  store i32 %497, ptr %55, align 4, !tbaa !9
  %498 = sext i32 %496 to i64
  %499 = getelementptr inbounds i32, ptr %495, i64 %498
  store i32 %494, ptr %499, align 4, !tbaa !9
  br label %500

500:                                              ; preds = %488, %475
  %501 = load double, ptr %62, align 8, !tbaa !19
  %502 = load ptr, ptr %39, align 8, !tbaa !5
  %503 = load i32, ptr %51, align 4, !tbaa !9
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds double, ptr %502, i64 %504
  %506 = load double, ptr %505, align 8, !tbaa !19
  %507 = load ptr, ptr %16, align 8, !tbaa !5
  %508 = load i32, ptr %45, align 4, !tbaa !9
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds double, ptr %507, i64 %509
  %511 = load double, ptr %510, align 8, !tbaa !19
  %512 = fneg double %501
  %513 = call double @llvm.fmuladd.f64(double %512, double %506, double %511)
  store double %513, ptr %510, align 8, !tbaa !19
  %514 = load i32, ptr %68, align 4, !tbaa !9
  %515 = add nsw i32 %514, 1
  store i32 %515, ptr %68, align 4, !tbaa !9
  br label %516

516:                                              ; preds = %500
  %517 = load i32, ptr %51, align 4, !tbaa !9
  %518 = add nsw i32 %517, 1
  store i32 %518, ptr %51, align 4, !tbaa !9
  br label %466, !llvm.loop !53

519:                                              ; preds = %466
  br label %520

520:                                              ; preds = %519, %443
  br label %521

521:                                              ; preds = %520
  %522 = load i32, ptr %49, align 4, !tbaa !9
  %523 = add nsw i32 %522, -1
  store i32 %523, ptr %49, align 4, !tbaa !9
  br label %440, !llvm.loop !54

524:                                              ; preds = %440
  %525 = load i32, ptr %55, align 4, !tbaa !9
  %526 = load i32, ptr %21, align 4, !tbaa !9
  %527 = icmp sle i32 %525, %526
  br i1 %527, label %528, label %560

528:                                              ; preds = %524
  %529 = load ptr, ptr %10, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.lu, ptr %529, i32 0, i32 66
  %531 = load i32, ptr %530, align 4, !tbaa !45
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %530, align 4, !tbaa !45
  store i32 %532, ptr %57, align 4, !tbaa !9
  %533 = load i32, ptr %18, align 4, !tbaa !9
  %534 = load ptr, ptr %30, align 8, !tbaa !5
  %535 = load ptr, ptr %38, align 8, !tbaa !5
  %536 = load i32, ptr %55, align 4, !tbaa !9
  %537 = load ptr, ptr %70, align 8, !tbaa !5
  %538 = load ptr, ptr %69, align 8, !tbaa !5
  %539 = load ptr, ptr %72, align 8, !tbaa !5
  %540 = load ptr, ptr %44, align 8, !tbaa !5
  %541 = load i32, ptr %57, align 4, !tbaa !9
  %542 = call i32 @lu_solve_symbolic(i32 noundef %533, ptr noundef %534, ptr noundef null, ptr noundef %535, i32 noundef %536, ptr noundef %537, ptr noundef %538, ptr noundef %539, ptr noundef %540, i32 noundef %541)
  store i32 %542, ptr %50, align 4, !tbaa !9
  %543 = load i32, ptr %18, align 4, !tbaa !9
  %544 = load i32, ptr %50, align 4, !tbaa !9
  %545 = sub nsw i32 %543, %544
  store i32 %545, ptr %56, align 4, !tbaa !9
  %546 = load i32, ptr %56, align 4, !tbaa !9
  %547 = load ptr, ptr %69, align 8, !tbaa !5
  %548 = load i32, ptr %50, align 4, !tbaa !9
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds i32, ptr %547, i64 %549
  %551 = load ptr, ptr %30, align 8, !tbaa !5
  %552 = load ptr, ptr %38, align 8, !tbaa !5
  %553 = load ptr, ptr %39, align 8, !tbaa !5
  %554 = load double, ptr %22, align 8, !tbaa !19
  %555 = load ptr, ptr %16, align 8, !tbaa !5
  %556 = load ptr, ptr %15, align 8, !tbaa !5
  %557 = call i32 @lu_solve_triangular(i32 noundef %546, ptr noundef %550, ptr noundef %551, ptr noundef null, ptr noundef %552, ptr noundef %553, ptr noundef null, double noundef %554, ptr noundef %555, ptr noundef %556, ptr noundef %66)
  store i32 %557, ptr %55, align 4, !tbaa !9
  %558 = load i32, ptr %55, align 4, !tbaa !9
  %559 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 %558, ptr %559, align 4, !tbaa !9
  br label %640

560:                                              ; preds = %524
  store i32 0, ptr %55, align 4, !tbaa !9
  %561 = load i32, ptr %18, align 4, !tbaa !9
  %562 = sub nsw i32 %561, 1
  store i32 %562, ptr %47, align 4, !tbaa !9
  br label %563

563:                                              ; preds = %634, %560
  %564 = load i32, ptr %47, align 4, !tbaa !9
  %565 = icmp sge i32 %564, 0
  br i1 %565, label %566, label %637

566:                                              ; preds = %563
  %567 = load ptr, ptr %23, align 8, !tbaa !5
  %568 = load i32, ptr %47, align 4, !tbaa !9
  %569 = sext i32 %568 to i64
  %570 = getelementptr inbounds i32, ptr %567, i64 %569
  %571 = load i32, ptr %570, align 4, !tbaa !9
  store i32 %571, ptr %53, align 4, !tbaa !9
  %572 = load ptr, ptr %16, align 8, !tbaa !5
  %573 = load i32, ptr %53, align 4, !tbaa !9
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds double, ptr %572, i64 %574
  %576 = load double, ptr %575, align 8, !tbaa !19
  %577 = fcmp une double %576, 0.000000e+00
  br i1 %577, label %578, label %633

578:                                              ; preds = %566
  %579 = load ptr, ptr %16, align 8, !tbaa !5
  %580 = load i32, ptr %53, align 4, !tbaa !9
  %581 = sext i32 %580 to i64
  %582 = getelementptr inbounds double, ptr %579, i64 %581
  %583 = load double, ptr %582, align 8, !tbaa !19
  store double %583, ptr %62, align 8, !tbaa !19
  %584 = load ptr, ptr %31, align 8, !tbaa !5
  %585 = load i32, ptr %47, align 4, !tbaa !9
  %586 = sext i32 %585 to i64
  %587 = getelementptr inbounds i32, ptr %584, i64 %586
  %588 = load i32, ptr %587, align 4, !tbaa !9
  store i32 %588, ptr %51, align 4, !tbaa !9
  br label %589

589:                                              ; preds = %612, %578
  %590 = load ptr, ptr %38, align 8, !tbaa !5
  %591 = load i32, ptr %51, align 4, !tbaa !9
  %592 = sext i32 %591 to i64
  %593 = getelementptr inbounds i32, ptr %590, i64 %592
  %594 = load i32, ptr %593, align 4, !tbaa !9
  store i32 %594, ptr %45, align 4, !tbaa !9
  %595 = icmp sge i32 %594, 0
  br i1 %595, label %596, label %615

596:                                              ; preds = %589
  %597 = load double, ptr %62, align 8, !tbaa !19
  %598 = load ptr, ptr %39, align 8, !tbaa !5
  %599 = load i32, ptr %51, align 4, !tbaa !9
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds double, ptr %598, i64 %600
  %602 = load double, ptr %601, align 8, !tbaa !19
  %603 = load ptr, ptr %16, align 8, !tbaa !5
  %604 = load i32, ptr %45, align 4, !tbaa !9
  %605 = sext i32 %604 to i64
  %606 = getelementptr inbounds double, ptr %603, i64 %605
  %607 = load double, ptr %606, align 8, !tbaa !19
  %608 = fneg double %597
  %609 = call double @llvm.fmuladd.f64(double %608, double %602, double %607)
  store double %609, ptr %606, align 8, !tbaa !19
  %610 = load i32, ptr %66, align 4, !tbaa !9
  %611 = add nsw i32 %610, 1
  store i32 %611, ptr %66, align 4, !tbaa !9
  br label %612

612:                                              ; preds = %596
  %613 = load i32, ptr %51, align 4, !tbaa !9
  %614 = add nsw i32 %613, 1
  store i32 %614, ptr %51, align 4, !tbaa !9
  br label %589, !llvm.loop !55

615:                                              ; preds = %589
  %616 = load double, ptr %62, align 8, !tbaa !19
  %617 = call double @llvm.fabs.f64(double %616)
  %618 = load double, ptr %22, align 8, !tbaa !19
  %619 = fcmp ogt double %617, %618
  br i1 %619, label %620, label %627

620:                                              ; preds = %615
  %621 = load i32, ptr %53, align 4, !tbaa !9
  %622 = load ptr, ptr %15, align 8, !tbaa !5
  %623 = load i32, ptr %55, align 4, !tbaa !9
  %624 = add nsw i32 %623, 1
  store i32 %624, ptr %55, align 4, !tbaa !9
  %625 = sext i32 %623 to i64
  %626 = getelementptr inbounds i32, ptr %622, i64 %625
  store i32 %621, ptr %626, align 4, !tbaa !9
  br label %632

627:                                              ; preds = %615
  %628 = load ptr, ptr %16, align 8, !tbaa !5
  %629 = load i32, ptr %53, align 4, !tbaa !9
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds double, ptr %628, i64 %630
  store double 0.000000e+00, ptr %631, align 8, !tbaa !19
  br label %632

632:                                              ; preds = %627, %620
  br label %633

633:                                              ; preds = %632, %566
  br label %634

634:                                              ; preds = %633
  %635 = load i32, ptr %47, align 4, !tbaa !9
  %636 = add nsw i32 %635, -1
  store i32 %636, ptr %47, align 4, !tbaa !9
  br label %563, !llvm.loop !56

637:                                              ; preds = %563
  %638 = load i32, ptr %55, align 4, !tbaa !9
  %639 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 %638, ptr %639, align 4, !tbaa !9
  br label %640

640:                                              ; preds = %637, %528
  store i32 0, ptr %73, align 4
  br label %641

641:                                              ; preds = %640, %353, %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #4
  %642 = load i32, ptr %73, align 4
  switch i32 %642, label %1140 [
    i32 0, label %643
    i32 8, label %1118
  ]

643:                                              ; preds = %641
  br label %1117

644:                                              ; preds = %177
  call void @llvm.lifetime.start.p0(i64 8, ptr %74) #4
  %645 = load ptr, ptr %10, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.lu, ptr %645, i32 0, i32 85
  %647 = load ptr, ptr %646, align 8, !tbaa !42
  store ptr %647, ptr %74, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %75) #4
  %648 = load ptr, ptr %10, align 8, !tbaa !5
  %649 = getelementptr inbounds %struct.lu, ptr %648, i32 0, i32 85
  %650 = load ptr, ptr %649, align 8, !tbaa !42
  %651 = load i32, ptr %18, align 4, !tbaa !9
  %652 = sext i32 %651 to i64
  %653 = getelementptr inbounds i32, ptr %650, i64 %652
  store ptr %653, ptr %75, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %76) #4
  %654 = load ptr, ptr %10, align 8, !tbaa !5
  %655 = getelementptr inbounds %struct.lu, ptr %654, i32 0, i32 102
  %656 = load ptr, ptr %655, align 8, !tbaa !43
  store ptr %656, ptr %76, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #4
  %657 = load ptr, ptr %10, align 8, !tbaa !5
  %658 = getelementptr inbounds %struct.lu, ptr %657, i32 0, i32 103
  %659 = load ptr, ptr %658, align 8, !tbaa !44
  store ptr %659, ptr %77, align 8, !tbaa !5
  %660 = load ptr, ptr %10, align 8, !tbaa !5
  %661 = getelementptr inbounds %struct.lu, ptr %660, i32 0, i32 66
  %662 = load i32, ptr %661, align 4, !tbaa !45
  %663 = add nsw i32 %662, 1
  store i32 %663, ptr %661, align 4, !tbaa !45
  store i32 %663, ptr %57, align 4, !tbaa !9
  %664 = load i32, ptr %18, align 4, !tbaa !9
  %665 = load ptr, ptr %29, align 8, !tbaa !5
  %666 = load ptr, ptr %38, align 8, !tbaa !5
  %667 = load i32, ptr %11, align 4, !tbaa !9
  %668 = load ptr, ptr %12, align 8, !tbaa !5
  %669 = load ptr, ptr %74, align 8, !tbaa !5
  %670 = load ptr, ptr %77, align 8, !tbaa !5
  %671 = load ptr, ptr %44, align 8, !tbaa !5
  %672 = load i32, ptr %57, align 4, !tbaa !9
  %673 = call i32 @lu_solve_symbolic(i32 noundef %664, ptr noundef %665, ptr noundef null, ptr noundef %666, i32 noundef %667, ptr noundef %668, ptr noundef %669, ptr noundef %670, ptr noundef %671, i32 noundef %672)
  store i32 %673, ptr %50, align 4, !tbaa !9
  %674 = load i32, ptr %18, align 4, !tbaa !9
  %675 = load i32, ptr %50, align 4, !tbaa !9
  %676 = sub nsw i32 %674, %675
  store i32 %676, ptr %56, align 4, !tbaa !9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %677

677:                                              ; preds = %695, %644
  %678 = load i32, ptr %48, align 4, !tbaa !9
  %679 = load i32, ptr %11, align 4, !tbaa !9
  %680 = icmp slt i32 %678, %679
  br i1 %680, label %681, label %698

681:                                              ; preds = %677
  %682 = load ptr, ptr %13, align 8, !tbaa !5
  %683 = load i32, ptr %48, align 4, !tbaa !9
  %684 = sext i32 %683 to i64
  %685 = getelementptr inbounds double, ptr %682, i64 %684
  %686 = load double, ptr %685, align 8, !tbaa !19
  %687 = load ptr, ptr %76, align 8, !tbaa !5
  %688 = load ptr, ptr %12, align 8, !tbaa !5
  %689 = load i32, ptr %48, align 4, !tbaa !9
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds i32, ptr %688, i64 %690
  %692 = load i32, ptr %691, align 4, !tbaa !9
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds double, ptr %687, i64 %693
  store double %686, ptr %694, align 8, !tbaa !19
  br label %695

695:                                              ; preds = %681
  %696 = load i32, ptr %48, align 4, !tbaa !9
  %697 = add nsw i32 %696, 1
  store i32 %697, ptr %48, align 4, !tbaa !9
  br label %677, !llvm.loop !57

698:                                              ; preds = %677
  %699 = load i32, ptr %56, align 4, !tbaa !9
  %700 = load ptr, ptr %74, align 8, !tbaa !5
  %701 = load i32, ptr %50, align 4, !tbaa !9
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds i32, ptr %700, i64 %702
  %704 = load ptr, ptr %29, align 8, !tbaa !5
  %705 = load ptr, ptr %38, align 8, !tbaa !5
  %706 = load ptr, ptr %39, align 8, !tbaa !5
  %707 = load double, ptr %22, align 8, !tbaa !19
  %708 = load ptr, ptr %76, align 8, !tbaa !5
  %709 = load ptr, ptr %75, align 8, !tbaa !5
  %710 = call i32 @lu_solve_triangular(i32 noundef %699, ptr noundef %703, ptr noundef %704, ptr noundef null, ptr noundef %705, ptr noundef %706, ptr noundef null, double noundef %707, ptr noundef %708, ptr noundef %709, ptr noundef %66)
  store i32 %710, ptr %55, align 4, !tbaa !9
  %711 = load i32, ptr %55, align 4, !tbaa !9
  %712 = load i32, ptr %56, align 4, !tbaa !9
  %713 = icmp slt i32 %711, %712
  br i1 %713, label %714, label %767

714:                                              ; preds = %698
  %715 = load i32, ptr %50, align 4, !tbaa !9
  store i32 %715, ptr %49, align 4, !tbaa !9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %716

716:                                              ; preds = %744, %714
  %717 = load i32, ptr %48, align 4, !tbaa !9
  %718 = load i32, ptr %55, align 4, !tbaa !9
  %719 = icmp slt i32 %717, %718
  br i1 %719, label %720, label %747

720:                                              ; preds = %716
  %721 = load ptr, ptr %74, align 8, !tbaa !5
  %722 = load i32, ptr %49, align 4, !tbaa !9
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds i32, ptr %721, i64 %723
  %725 = load i32, ptr %724, align 4, !tbaa !9
  store i32 %725, ptr %45, align 4, !tbaa !9
  %726 = load i32, ptr %45, align 4, !tbaa !9
  %727 = load ptr, ptr %75, align 8, !tbaa !5
  %728 = load i32, ptr %48, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds i32, ptr %727, i64 %729
  %731 = load i32, ptr %730, align 4, !tbaa !9
  %732 = icmp eq i32 %726, %731
  br i1 %732, label %733, label %736

733:                                              ; preds = %720
  %734 = load i32, ptr %48, align 4, !tbaa !9
  %735 = add nsw i32 %734, 1
  store i32 %735, ptr %48, align 4, !tbaa !9
  br label %743

736:                                              ; preds = %720
  %737 = load ptr, ptr %44, align 8, !tbaa !5
  %738 = load i32, ptr %45, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds i32, ptr %737, i64 %739
  %741 = load i32, ptr %740, align 4, !tbaa !9
  %742 = add nsw i32 %741, -1
  store i32 %742, ptr %740, align 4, !tbaa !9
  br label %743

743:                                              ; preds = %736, %733
  br label %744

744:                                              ; preds = %743
  %745 = load i32, ptr %49, align 4, !tbaa !9
  %746 = add nsw i32 %745, 1
  store i32 %746, ptr %49, align 4, !tbaa !9
  br label %716, !llvm.loop !58

747:                                              ; preds = %716
  br label %748

748:                                              ; preds = %763, %747
  %749 = load i32, ptr %49, align 4, !tbaa !9
  %750 = load i32, ptr %18, align 4, !tbaa !9
  %751 = icmp slt i32 %749, %750
  br i1 %751, label %752, label %766

752:                                              ; preds = %748
  %753 = load ptr, ptr %44, align 8, !tbaa !5
  %754 = load ptr, ptr %74, align 8, !tbaa !5
  %755 = load i32, ptr %49, align 4, !tbaa !9
  %756 = sext i32 %755 to i64
  %757 = getelementptr inbounds i32, ptr %754, i64 %756
  %758 = load i32, ptr %757, align 4, !tbaa !9
  %759 = sext i32 %758 to i64
  %760 = getelementptr inbounds i32, ptr %753, i64 %759
  %761 = load i32, ptr %760, align 4, !tbaa !9
  %762 = add nsw i32 %761, -1
  store i32 %762, ptr %760, align 4, !tbaa !9
  br label %763

763:                                              ; preds = %752
  %764 = load i32, ptr %49, align 4, !tbaa !9
  %765 = add nsw i32 %764, 1
  store i32 %765, ptr %49, align 4, !tbaa !9
  br label %748, !llvm.loop !59

766:                                              ; preds = %748
  br label %767

767:                                              ; preds = %766, %698
  %768 = load ptr, ptr %33, align 8, !tbaa !5
  %769 = getelementptr inbounds i32, ptr %768, i64 0
  %770 = load i32, ptr %769, align 4, !tbaa !9
  store i32 %770, ptr %51, align 4, !tbaa !9
  store i32 0, ptr %49, align 4, !tbaa !9
  br label %771

771:                                              ; preds = %841, %767
  %772 = load i32, ptr %49, align 4, !tbaa !9
  %773 = load i32, ptr %19, align 4, !tbaa !9
  %774 = icmp slt i32 %772, %773
  br i1 %774, label %775, label %844

775:                                              ; preds = %771
  %776 = load ptr, ptr %26, align 8, !tbaa !5
  %777 = load i32, ptr %49, align 4, !tbaa !9
  %778 = sext i32 %777 to i64
  %779 = getelementptr inbounds i32, ptr %776, i64 %778
  %780 = load i32, ptr %779, align 4, !tbaa !9
  store i32 %780, ptr %53, align 4, !tbaa !9
  store double 0.000000e+00, ptr %62, align 8, !tbaa !19
  br label %781

781:                                              ; preds = %807, %775
  %782 = load i32, ptr %51, align 4, !tbaa !9
  %783 = load ptr, ptr %33, align 8, !tbaa !5
  %784 = load i32, ptr %49, align 4, !tbaa !9
  %785 = add nsw i32 %784, 1
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds i32, ptr %783, i64 %786
  %788 = load i32, ptr %787, align 4, !tbaa !9
  %789 = icmp slt i32 %782, %788
  br i1 %789, label %790, label %810

790:                                              ; preds = %781
  %791 = load ptr, ptr %76, align 8, !tbaa !5
  %792 = load ptr, ptr %38, align 8, !tbaa !5
  %793 = load i32, ptr %51, align 4, !tbaa !9
  %794 = sext i32 %793 to i64
  %795 = getelementptr inbounds i32, ptr %792, i64 %794
  %796 = load i32, ptr %795, align 4, !tbaa !9
  %797 = sext i32 %796 to i64
  %798 = getelementptr inbounds double, ptr %791, i64 %797
  %799 = load double, ptr %798, align 8, !tbaa !19
  %800 = load ptr, ptr %39, align 8, !tbaa !5
  %801 = load i32, ptr %51, align 4, !tbaa !9
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds double, ptr %800, i64 %802
  %804 = load double, ptr %803, align 8, !tbaa !19
  %805 = load double, ptr %62, align 8, !tbaa !19
  %806 = call double @llvm.fmuladd.f64(double %799, double %804, double %805)
  store double %806, ptr %62, align 8, !tbaa !19
  br label %807

807:                                              ; preds = %790
  %808 = load i32, ptr %51, align 4, !tbaa !9
  %809 = add nsw i32 %808, 1
  store i32 %809, ptr %51, align 4, !tbaa !9
  br label %781, !llvm.loop !60

810:                                              ; preds = %781
  %811 = load double, ptr %62, align 8, !tbaa !19
  %812 = load ptr, ptr %76, align 8, !tbaa !5
  %813 = load i32, ptr %53, align 4, !tbaa !9
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds double, ptr %812, i64 %814
  %816 = load double, ptr %815, align 8, !tbaa !19
  %817 = fsub double %816, %811
  store double %817, ptr %815, align 8, !tbaa !19
  %818 = load double, ptr %62, align 8, !tbaa !19
  %819 = fcmp une double %818, 0.000000e+00
  br i1 %819, label %820, label %840

820:                                              ; preds = %810
  %821 = load ptr, ptr %44, align 8, !tbaa !5
  %822 = load i32, ptr %53, align 4, !tbaa !9
  %823 = sext i32 %822 to i64
  %824 = getelementptr inbounds i32, ptr %821, i64 %823
  %825 = load i32, ptr %824, align 4, !tbaa !9
  %826 = load i32, ptr %57, align 4, !tbaa !9
  %827 = icmp ne i32 %825, %826
  br i1 %827, label %828, label %840

828:                                              ; preds = %820
  %829 = load i32, ptr %57, align 4, !tbaa !9
  %830 = load ptr, ptr %44, align 8, !tbaa !5
  %831 = load i32, ptr %53, align 4, !tbaa !9
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds i32, ptr %830, i64 %832
  store i32 %829, ptr %833, align 4, !tbaa !9
  %834 = load i32, ptr %53, align 4, !tbaa !9
  %835 = load ptr, ptr %75, align 8, !tbaa !5
  %836 = load i32, ptr %55, align 4, !tbaa !9
  %837 = add nsw i32 %836, 1
  store i32 %837, ptr %55, align 4, !tbaa !9
  %838 = sext i32 %836 to i64
  %839 = getelementptr inbounds i32, ptr %835, i64 %838
  store i32 %834, ptr %839, align 4, !tbaa !9
  br label %840

840:                                              ; preds = %828, %820, %810
  br label %841

841:                                              ; preds = %840
  %842 = load i32, ptr %49, align 4, !tbaa !9
  %843 = add nsw i32 %842, 1
  store i32 %843, ptr %49, align 4, !tbaa !9
  br label %771, !llvm.loop !61

844:                                              ; preds = %771
  %845 = load ptr, ptr %33, align 8, !tbaa !5
  %846 = load i32, ptr %19, align 4, !tbaa !9
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds i32, ptr %845, i64 %847
  %849 = load i32, ptr %848, align 4, !tbaa !9
  %850 = load ptr, ptr %33, align 8, !tbaa !5
  %851 = getelementptr inbounds i32, ptr %850, i64 0
  %852 = load i32, ptr %851, align 4, !tbaa !9
  %853 = sub nsw i32 %849, %852
  %854 = load i32, ptr %68, align 4, !tbaa !9
  %855 = add nsw i32 %854, %853
  store i32 %855, ptr %68, align 4, !tbaa !9
  %856 = load ptr, ptr %10, align 8, !tbaa !5
  %857 = getelementptr inbounds %struct.lu, ptr %856, i32 0, i32 1
  %858 = load i32, ptr %857, align 4, !tbaa !62
  %859 = load ptr, ptr %32, align 8, !tbaa !5
  %860 = load i32, ptr %18, align 4, !tbaa !9
  %861 = sext i32 %860 to i64
  %862 = getelementptr inbounds i32, ptr %859, i64 %861
  %863 = load i32, ptr %862, align 4, !tbaa !9
  %864 = sub nsw i32 %858, %863
  store i32 %864, ptr %58, align 4, !tbaa !9
  %865 = load i32, ptr %55, align 4, !tbaa !9
  %866 = add nsw i32 %865, 1
  store i32 %866, ptr %59, align 4, !tbaa !9
  %867 = load i32, ptr %58, align 4, !tbaa !9
  %868 = load i32, ptr %59, align 4, !tbaa !9
  %869 = icmp slt i32 %867, %868
  br i1 %869, label %870, label %893

870:                                              ; preds = %844
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %871

871:                                              ; preds = %884, %870
  %872 = load i32, ptr %48, align 4, !tbaa !9
  %873 = load i32, ptr %55, align 4, !tbaa !9
  %874 = icmp slt i32 %872, %873
  br i1 %874, label %875, label %887

875:                                              ; preds = %871
  %876 = load ptr, ptr %76, align 8, !tbaa !5
  %877 = load ptr, ptr %75, align 8, !tbaa !5
  %878 = load i32, ptr %48, align 4, !tbaa !9
  %879 = sext i32 %878 to i64
  %880 = getelementptr inbounds i32, ptr %877, i64 %879
  %881 = load i32, ptr %880, align 4, !tbaa !9
  %882 = sext i32 %881 to i64
  %883 = getelementptr inbounds double, ptr %876, i64 %882
  store double 0.000000e+00, ptr %883, align 8, !tbaa !19
  br label %884

884:                                              ; preds = %875
  %885 = load i32, ptr %48, align 4, !tbaa !9
  %886 = add nsw i32 %885, 1
  store i32 %886, ptr %48, align 4, !tbaa !9
  br label %871, !llvm.loop !63

887:                                              ; preds = %871
  %888 = load i32, ptr %59, align 4, !tbaa !9
  %889 = load i32, ptr %58, align 4, !tbaa !9
  %890 = sub nsw i32 %888, %889
  %891 = load ptr, ptr %10, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.lu, ptr %891, i32 0, i32 15
  store i32 %890, ptr %892, align 4, !tbaa !64
  store i32 1, ptr %9, align 4
  store i32 1, ptr %73, align 4
  br label %1114

893:                                              ; preds = %844
  %894 = load ptr, ptr %32, align 8, !tbaa !5
  %895 = load i32, ptr %18, align 4, !tbaa !9
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds i32, ptr %894, i64 %896
  %898 = load i32, ptr %897, align 4, !tbaa !9
  store i32 %898, ptr %52, align 4, !tbaa !9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %899

899:                                              ; preds = %932, %893
  %900 = load i32, ptr %48, align 4, !tbaa !9
  %901 = load i32, ptr %55, align 4, !tbaa !9
  %902 = icmp slt i32 %900, %901
  br i1 %902, label %903, label %935

903:                                              ; preds = %899
  %904 = load ptr, ptr %75, align 8, !tbaa !5
  %905 = load i32, ptr %48, align 4, !tbaa !9
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds i32, ptr %904, i64 %906
  %908 = load i32, ptr %907, align 4, !tbaa !9
  store i32 %908, ptr %45, align 4, !tbaa !9
  %909 = load i32, ptr %45, align 4, !tbaa !9
  %910 = load ptr, ptr %40, align 8, !tbaa !5
  %911 = load i32, ptr %52, align 4, !tbaa !9
  %912 = sext i32 %911 to i64
  %913 = getelementptr inbounds i32, ptr %910, i64 %912
  store i32 %909, ptr %913, align 4, !tbaa !9
  %914 = load ptr, ptr %76, align 8, !tbaa !5
  %915 = load i32, ptr %45, align 4, !tbaa !9
  %916 = sext i32 %915 to i64
  %917 = getelementptr inbounds double, ptr %914, i64 %916
  %918 = load double, ptr %917, align 8, !tbaa !19
  %919 = load ptr, ptr %41, align 8, !tbaa !5
  %920 = load i32, ptr %52, align 4, !tbaa !9
  %921 = add nsw i32 %920, 1
  store i32 %921, ptr %52, align 4, !tbaa !9
  %922 = sext i32 %920 to i64
  %923 = getelementptr inbounds double, ptr %919, i64 %922
  store double %918, ptr %923, align 8, !tbaa !19
  %924 = load i32, ptr %65, align 4, !tbaa !9
  %925 = icmp ne i32 %924, 0
  br i1 %925, label %931, label %926

926:                                              ; preds = %903
  %927 = load ptr, ptr %76, align 8, !tbaa !5
  %928 = load i32, ptr %45, align 4, !tbaa !9
  %929 = sext i32 %928 to i64
  %930 = getelementptr inbounds double, ptr %927, i64 %929
  store double 0.000000e+00, ptr %930, align 8, !tbaa !19
  br label %931

931:                                              ; preds = %926, %903
  br label %932

932:                                              ; preds = %931
  %933 = load i32, ptr %48, align 4, !tbaa !9
  %934 = add nsw i32 %933, 1
  store i32 %934, ptr %48, align 4, !tbaa !9
  br label %899, !llvm.loop !65

935:                                              ; preds = %899
  %936 = load ptr, ptr %40, align 8, !tbaa !5
  %937 = load i32, ptr %52, align 4, !tbaa !9
  %938 = add nsw i32 %937, 1
  store i32 %938, ptr %52, align 4, !tbaa !9
  %939 = sext i32 %937 to i64
  %940 = getelementptr inbounds i32, ptr %936, i64 %939
  store i32 -1, ptr %940, align 4, !tbaa !9
  %941 = load ptr, ptr %10, align 8, !tbaa !5
  %942 = getelementptr inbounds %struct.lu, ptr %941, i32 0, i32 64
  store i32 0, ptr %942, align 4, !tbaa !66
  %943 = load i32, ptr %65, align 4, !tbaa !9
  %944 = icmp ne i32 %943, 0
  br i1 %944, label %946, label %945

945:                                              ; preds = %935
  store i32 8, ptr %73, align 4
  br label %1114

946:                                              ; preds = %935
  %947 = load i32, ptr %55, align 4, !tbaa !9
  %948 = load i32, ptr %21, align 4, !tbaa !9
  %949 = icmp sle i32 %947, %948
  br i1 %949, label %950, label %1018

950:                                              ; preds = %946
  %951 = load ptr, ptr %10, align 8, !tbaa !5
  %952 = getelementptr inbounds %struct.lu, ptr %951, i32 0, i32 66
  %953 = load i32, ptr %952, align 4, !tbaa !45
  %954 = add nsw i32 %953, 1
  store i32 %954, ptr %952, align 4, !tbaa !45
  store i32 %954, ptr %57, align 4, !tbaa !9
  %955 = load i32, ptr %18, align 4, !tbaa !9
  %956 = load ptr, ptr %32, align 8, !tbaa !5
  %957 = load ptr, ptr %40, align 8, !tbaa !5
  %958 = load i32, ptr %55, align 4, !tbaa !9
  %959 = load ptr, ptr %75, align 8, !tbaa !5
  %960 = load ptr, ptr %74, align 8, !tbaa !5
  %961 = load ptr, ptr %77, align 8, !tbaa !5
  %962 = load ptr, ptr %44, align 8, !tbaa !5
  %963 = load i32, ptr %57, align 4, !tbaa !9
  %964 = call i32 @lu_solve_symbolic(i32 noundef %955, ptr noundef %956, ptr noundef null, ptr noundef %957, i32 noundef %958, ptr noundef %959, ptr noundef %960, ptr noundef %961, ptr noundef %962, i32 noundef %963)
  store i32 %964, ptr %50, align 4, !tbaa !9
  %965 = load i32, ptr %18, align 4, !tbaa !9
  %966 = load i32, ptr %50, align 4, !tbaa !9
  %967 = sub nsw i32 %965, %966
  store i32 %967, ptr %56, align 4, !tbaa !9
  %968 = load i32, ptr %56, align 4, !tbaa !9
  %969 = load ptr, ptr %74, align 8, !tbaa !5
  %970 = load i32, ptr %50, align 4, !tbaa !9
  %971 = sext i32 %970 to i64
  %972 = getelementptr inbounds i32, ptr %969, i64 %971
  %973 = load ptr, ptr %32, align 8, !tbaa !5
  %974 = load ptr, ptr %40, align 8, !tbaa !5
  %975 = load ptr, ptr %41, align 8, !tbaa !5
  %976 = load ptr, ptr %37, align 8, !tbaa !5
  %977 = load double, ptr %22, align 8, !tbaa !19
  %978 = load ptr, ptr %76, align 8, !tbaa !5
  %979 = load ptr, ptr %15, align 8, !tbaa !5
  %980 = call i32 @lu_solve_triangular(i32 noundef %968, ptr noundef %972, ptr noundef %973, ptr noundef null, ptr noundef %974, ptr noundef %975, ptr noundef %976, double noundef %977, ptr noundef %978, ptr noundef %979, ptr noundef %67)
  store i32 %980, ptr %55, align 4, !tbaa !9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %981

981:                                              ; preds = %1014, %950
  %982 = load i32, ptr %48, align 4, !tbaa !9
  %983 = load i32, ptr %55, align 4, !tbaa !9
  %984 = icmp slt i32 %982, %983
  br i1 %984, label %985, label %1017

985:                                              ; preds = %981
  %986 = load ptr, ptr %15, align 8, !tbaa !5
  %987 = load i32, ptr %48, align 4, !tbaa !9
  %988 = sext i32 %987 to i64
  %989 = getelementptr inbounds i32, ptr %986, i64 %988
  %990 = load i32, ptr %989, align 4, !tbaa !9
  store i32 %990, ptr %45, align 4, !tbaa !9
  %991 = load ptr, ptr %25, align 8, !tbaa !5
  %992 = load i32, ptr %45, align 4, !tbaa !9
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds i32, ptr %991, i64 %993
  %995 = load i32, ptr %994, align 4, !tbaa !9
  store i32 %995, ptr %46, align 4, !tbaa !9
  %996 = load i32, ptr %46, align 4, !tbaa !9
  %997 = load ptr, ptr %15, align 8, !tbaa !5
  %998 = load i32, ptr %48, align 4, !tbaa !9
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds i32, ptr %997, i64 %999
  store i32 %996, ptr %1000, align 4, !tbaa !9
  %1001 = load ptr, ptr %76, align 8, !tbaa !5
  %1002 = load i32, ptr %45, align 4, !tbaa !9
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds double, ptr %1001, i64 %1003
  %1005 = load double, ptr %1004, align 8, !tbaa !19
  %1006 = load ptr, ptr %16, align 8, !tbaa !5
  %1007 = load i32, ptr %46, align 4, !tbaa !9
  %1008 = sext i32 %1007 to i64
  %1009 = getelementptr inbounds double, ptr %1006, i64 %1008
  store double %1005, ptr %1009, align 8, !tbaa !19
  %1010 = load ptr, ptr %76, align 8, !tbaa !5
  %1011 = load i32, ptr %45, align 4, !tbaa !9
  %1012 = sext i32 %1011 to i64
  %1013 = getelementptr inbounds double, ptr %1010, i64 %1012
  store double 0.000000e+00, ptr %1013, align 8, !tbaa !19
  br label %1014

1014:                                             ; preds = %985
  %1015 = load i32, ptr %48, align 4, !tbaa !9
  %1016 = add nsw i32 %1015, 1
  store i32 %1016, ptr %48, align 4, !tbaa !9
  br label %981, !llvm.loop !67

1017:                                             ; preds = %981
  br label %1111

1018:                                             ; preds = %946
  store i32 0, ptr %55, align 4, !tbaa !9
  %1019 = load i32, ptr %20, align 4, !tbaa !9
  %1020 = sub nsw i32 %1019, 1
  store i32 %1020, ptr %47, align 4, !tbaa !9
  br label %1021

1021:                                             ; preds = %1107, %1018
  %1022 = load i32, ptr %47, align 4, !tbaa !9
  %1023 = icmp sge i32 %1022, 0
  br i1 %1023, label %1024, label %1110

1024:                                             ; preds = %1021
  %1025 = load ptr, ptr %28, align 8, !tbaa !5
  %1026 = load i32, ptr %47, align 4, !tbaa !9
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds i32, ptr %1025, i64 %1027
  %1029 = load i32, ptr %1028, align 4, !tbaa !9
  store i32 %1029, ptr %53, align 4, !tbaa !9
  %1030 = load ptr, ptr %27, align 8, !tbaa !5
  %1031 = load i32, ptr %47, align 4, !tbaa !9
  %1032 = sext i32 %1031 to i64
  %1033 = getelementptr inbounds i32, ptr %1030, i64 %1032
  %1034 = load i32, ptr %1033, align 4, !tbaa !9
  store i32 %1034, ptr %54, align 4, !tbaa !9
  %1035 = load ptr, ptr %76, align 8, !tbaa !5
  %1036 = load i32, ptr %53, align 4, !tbaa !9
  %1037 = sext i32 %1036 to i64
  %1038 = getelementptr inbounds double, ptr %1035, i64 %1037
  %1039 = load double, ptr %1038, align 8, !tbaa !19
  %1040 = fcmp une double %1039, 0.000000e+00
  br i1 %1040, label %1041, label %1106

1041:                                             ; preds = %1024
  %1042 = load ptr, ptr %76, align 8, !tbaa !5
  %1043 = load i32, ptr %53, align 4, !tbaa !9
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds double, ptr %1042, i64 %1044
  %1046 = load double, ptr %1045, align 8, !tbaa !19
  %1047 = load ptr, ptr %37, align 8, !tbaa !5
  %1048 = load i32, ptr %53, align 4, !tbaa !9
  %1049 = sext i32 %1048 to i64
  %1050 = getelementptr inbounds double, ptr %1047, i64 %1049
  %1051 = load double, ptr %1050, align 8, !tbaa !19
  %1052 = fdiv double %1046, %1051
  store double %1052, ptr %62, align 8, !tbaa !19
  %1053 = load ptr, ptr %76, align 8, !tbaa !5
  %1054 = load i32, ptr %53, align 4, !tbaa !9
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds double, ptr %1053, i64 %1055
  store double 0.000000e+00, ptr %1056, align 8, !tbaa !19
  %1057 = load ptr, ptr %32, align 8, !tbaa !5
  %1058 = load i32, ptr %53, align 4, !tbaa !9
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds i32, ptr %1057, i64 %1059
  %1061 = load i32, ptr %1060, align 4, !tbaa !9
  store i32 %1061, ptr %51, align 4, !tbaa !9
  br label %1062

1062:                                             ; preds = %1085, %1041
  %1063 = load ptr, ptr %40, align 8, !tbaa !5
  %1064 = load i32, ptr %51, align 4, !tbaa !9
  %1065 = sext i32 %1064 to i64
  %1066 = getelementptr inbounds i32, ptr %1063, i64 %1065
  %1067 = load i32, ptr %1066, align 4, !tbaa !9
  store i32 %1067, ptr %45, align 4, !tbaa !9
  %1068 = icmp sge i32 %1067, 0
  br i1 %1068, label %1069, label %1088

1069:                                             ; preds = %1062
  %1070 = load double, ptr %62, align 8, !tbaa !19
  %1071 = load ptr, ptr %41, align 8, !tbaa !5
  %1072 = load i32, ptr %51, align 4, !tbaa !9
  %1073 = sext i32 %1072 to i64
  %1074 = getelementptr inbounds double, ptr %1071, i64 %1073
  %1075 = load double, ptr %1074, align 8, !tbaa !19
  %1076 = load ptr, ptr %76, align 8, !tbaa !5
  %1077 = load i32, ptr %45, align 4, !tbaa !9
  %1078 = sext i32 %1077 to i64
  %1079 = getelementptr inbounds double, ptr %1076, i64 %1078
  %1080 = load double, ptr %1079, align 8, !tbaa !19
  %1081 = fneg double %1070
  %1082 = call double @llvm.fmuladd.f64(double %1081, double %1075, double %1080)
  store double %1082, ptr %1079, align 8, !tbaa !19
  %1083 = load i32, ptr %67, align 4, !tbaa !9
  %1084 = add nsw i32 %1083, 1
  store i32 %1084, ptr %67, align 4, !tbaa !9
  br label %1085

1085:                                             ; preds = %1069
  %1086 = load i32, ptr %51, align 4, !tbaa !9
  %1087 = add nsw i32 %1086, 1
  store i32 %1087, ptr %51, align 4, !tbaa !9
  br label %1062, !llvm.loop !68

1088:                                             ; preds = %1062
  %1089 = load double, ptr %62, align 8, !tbaa !19
  %1090 = call double @llvm.fabs.f64(double %1089)
  %1091 = load double, ptr %22, align 8, !tbaa !19
  %1092 = fcmp ogt double %1090, %1091
  br i1 %1092, label %1093, label %1105

1093:                                             ; preds = %1088
  %1094 = load i32, ptr %54, align 4, !tbaa !9
  %1095 = load ptr, ptr %15, align 8, !tbaa !5
  %1096 = load i32, ptr %55, align 4, !tbaa !9
  %1097 = add nsw i32 %1096, 1
  store i32 %1097, ptr %55, align 4, !tbaa !9
  %1098 = sext i32 %1096 to i64
  %1099 = getelementptr inbounds i32, ptr %1095, i64 %1098
  store i32 %1094, ptr %1099, align 4, !tbaa !9
  %1100 = load double, ptr %62, align 8, !tbaa !19
  %1101 = load ptr, ptr %16, align 8, !tbaa !5
  %1102 = load i32, ptr %54, align 4, !tbaa !9
  %1103 = sext i32 %1102 to i64
  %1104 = getelementptr inbounds double, ptr %1101, i64 %1103
  store double %1100, ptr %1104, align 8, !tbaa !19
  br label %1105

1105:                                             ; preds = %1093, %1088
  br label %1106

1106:                                             ; preds = %1105, %1024
  br label %1107

1107:                                             ; preds = %1106
  %1108 = load i32, ptr %47, align 4, !tbaa !9
  %1109 = add nsw i32 %1108, -1
  store i32 %1109, ptr %47, align 4, !tbaa !9
  br label %1021, !llvm.loop !69

1110:                                             ; preds = %1021
  br label %1111

1111:                                             ; preds = %1110, %1017
  %1112 = load i32, ptr %55, align 4, !tbaa !9
  %1113 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 %1112, ptr %1113, align 4, !tbaa !9
  store i32 0, ptr %73, align 4
  br label %1114

1114:                                             ; preds = %1111, %945, %887
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %76) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %75) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %74) #4
  %1115 = load i32, ptr %73, align 4
  switch i32 %1115, label %1140 [
    i32 0, label %1116
    i32 8, label %1118
  ]

1116:                                             ; preds = %1114
  br label %1117

1117:                                             ; preds = %1116, %643
  br label %1118

1118:                                             ; preds = %1117, %1114, %641
  %1119 = load i32, ptr %66, align 4, !tbaa !9
  %1120 = load ptr, ptr %10, align 8, !tbaa !5
  %1121 = getelementptr inbounds %struct.lu, ptr %1120, i32 0, i32 37
  %1122 = load i32, ptr %1121, align 8, !tbaa !70
  %1123 = add nsw i32 %1122, %1119
  store i32 %1123, ptr %1121, align 8, !tbaa !70
  %1124 = load i32, ptr %67, align 4, !tbaa !9
  %1125 = load ptr, ptr %10, align 8, !tbaa !5
  %1126 = getelementptr inbounds %struct.lu, ptr %1125, i32 0, i32 38
  %1127 = load i32, ptr %1126, align 4, !tbaa !71
  %1128 = add nsw i32 %1127, %1124
  store i32 %1128, ptr %1126, align 4, !tbaa !71
  %1129 = load i32, ptr %68, align 4, !tbaa !9
  %1130 = load ptr, ptr %10, align 8, !tbaa !5
  %1131 = getelementptr inbounds %struct.lu, ptr %1130, i32 0, i32 39
  %1132 = load i32, ptr %1131, align 8, !tbaa !72
  %1133 = add nsw i32 %1132, %1129
  store i32 %1133, ptr %1131, align 8, !tbaa !72
  %1134 = load i32, ptr %68, align 4, !tbaa !9
  %1135 = sitofp i32 %1134 to double
  %1136 = load ptr, ptr %10, align 8, !tbaa !5
  %1137 = getelementptr inbounds %struct.lu, ptr %1136, i32 0, i32 29
  %1138 = load double, ptr %1137, align 8, !tbaa !73
  %1139 = fadd double %1138, %1135
  store double %1139, ptr %1137, align 8, !tbaa !73
  store i32 0, ptr %9, align 4
  store i32 1, ptr %73, align 4
  br label %1140

1140:                                             ; preds = %1118, %1114, %641
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %63) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #4
  %1141 = load i32, ptr %9, align 4
  ret i32 %1141
}

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

declare i32 @lu_solve_symbolic(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #2

declare i32 @lu_solve_triangular(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

; 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 = { "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !10, i64 84}
!13 = !{!"lu", !10, i64 0, !10, i64 4, !10, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !10, i64 40, !10, i64 44, !10, i64 48, !14, i64 56, !14, i64 64, !14, i64 72, !10, i64 80, !10, i64 84, !10, i64 88, !10, i64 92, !10, i64 96, !10, i64 100, !10, i64 104, !10, i64 108, !10, i64 112, !10, i64 116, !10, i64 120, !10, i64 124, !10, i64 128, !10, i64 132, !14, i64 136, !14, i64 144, !14, i64 152, !14, i64 160, !14, i64 168, !14, i64 176, !14, i64 184, !14, i64 192, !14, i64 200, !14, i64 208, !14, i64 216, !10, i64 224, !10, i64 228, !10, i64 232, !14, i64 240, !14, i64 248, !14, i64 256, !14, i64 264, !14, i64 272, !14, i64 280, !14, i64 288, !14, i64 296, !14, i64 304, !10, i64 312, !10, i64 316, !10, i64 320, !10, i64 324, !10, i64 328, !10, i64 332, !10, i64 336, !10, i64 340, !14, i64 344, !14, i64 352, !14, i64 360, !14, i64 368, !10, i64 376, !10, i64 380, !10, i64 384, !10, i64 388, !10, i64 392, !10, i64 396, !10, i64 400, !10, i64 404, !10, i64 408, !10, 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}
!14 = !{!"double", !7, i64 0}
!15 = !{!13, !10, i64 104}
!16 = !{!13, !10, i64 400}
!17 = !{!13, !14, i64 72}
!18 = !{!13, !14, i64 16}
!19 = !{!14, !14, i64 0}
!20 = !{!13, !6, i64 592}
!21 = !{!13, !6, i64 608}
!22 = !{!13, !6, i64 624}
!23 = !{!13, !6, i64 512}
!24 = !{!13, !6, i64 472}
!25 = !{!13, !6, i64 488}
!26 = !{!13, !6, i64 544}
!27 = !{!13, !6, i64 560}
!28 = !{!13, !6, i64 576}
!29 = !{!13, !6, i64 640}
!30 = !{!13, !6, i64 504}
!31 = !{!13, !6, i64 536}
!32 = !{!13, !6, i64 552}
!33 = !{!13, !6, i64 680}
!34 = !{!13, !6, i64 688}
!35 = !{!13, !6, i64 416}
!36 = !{!13, !6, i64 440}
!37 = !{!13, !6, i64 424}
!38 = !{!13, !6, i64 448}
!39 = !{!13, !6, i64 432}
!40 = !{!13, !6, i64 456}
!41 = !{!13, !6, i64 656}
!42 = !{!13, !6, i64 528}
!43 = !{!13, !6, i64 664}
!44 = !{!13, !6, i64 672}
!45 = !{!13, !10, i64 396}
!46 = !{!13, !10, i64 0}
!47 = !{!13, !10, i64 88}
!48 = distinct !{!48, !49}
!49 = !{!"llvm.loop.mustprogress"}
!50 = distinct !{!50, !49}
!51 = !{!13, !10, i64 392}
!52 = distinct !{!52, !49}
!53 = distinct !{!53, !49}
!54 = distinct !{!54, !49}
!55 = distinct !{!55, !49}
!56 = distinct !{!56, !49}
!57 = distinct !{!57, !49}
!58 = distinct !{!58, !49}
!59 = distinct !{!59, !49}
!60 = distinct !{!60, !49}
!61 = distinct !{!61, !49}
!62 = !{!13, !10, i64 4}
!63 = distinct !{!63, !49}
!64 = !{!13, !10, i64 92}
!65 = distinct !{!65, !49}
!66 = !{!13, !10, i64 388}
!67 = distinct !{!67, !49}
!68 = distinct !{!68, !49}
!69 = distinct !{!69, !49}
!70 = !{!13, !10, i64 224}
!71 = !{!13, !10, i64 228}
!72 = !{!13, !10, i64 232}
!73 = !{!13, !14, i64 160}


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

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @lu_solve_for_update(ptr nocapture noundef %0, i32 noundef %1, ptr noundef %2, ptr nocapture noundef readonly %3, ptr noundef writeonly %4, ptr noundef %5, ptr noundef %6, i8 noundef signext %7) local_unnamed_addr #0 {
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = getelementptr inbounds i8, ptr %0, i64 84
  %12 = load i32, ptr %11, align 4, !tbaa !5
  %13 = getelementptr inbounds i8, ptr %0, i64 104
  %14 = load i32, ptr %13, align 8, !tbaa !12
  %15 = getelementptr inbounds i8, ptr %0, i64 400
  %16 = load i32, ptr %15, align 8, !tbaa !13
  %17 = getelementptr inbounds i8, ptr %0, i64 72
  %18 = load double, ptr %17, align 8, !tbaa !14
  %19 = sitofp i32 %12 to double
  %20 = fmul double %18, %19
  %21 = fptosi double %20 to i32
  %22 = getelementptr inbounds i8, ptr %0, i64 16
  %23 = load double, ptr %22, align 8, !tbaa !15
  %24 = getelementptr inbounds i8, ptr %0, i64 592
  %25 = load ptr, ptr %24, align 8, !tbaa !16
  %26 = getelementptr inbounds i8, ptr %0, i64 608
  %27 = load ptr, ptr %26, align 8, !tbaa !17
  %28 = getelementptr inbounds i8, ptr %0, i64 624
  %29 = load ptr, ptr %28, align 8, !tbaa !18
  %30 = getelementptr inbounds i8, ptr %0, i64 512
  %31 = load ptr, ptr %30, align 8, !tbaa !19
  %32 = getelementptr inbounds i8, ptr %0, i64 472
  %33 = load ptr, ptr %32, align 8, !tbaa !20
  %34 = getelementptr inbounds i8, ptr %0, i64 488
  %35 = load ptr, ptr %34, align 8, !tbaa !21
  %36 = getelementptr inbounds i8, ptr %0, i64 544
  %37 = load ptr, ptr %36, align 8, !tbaa !22
  %38 = getelementptr inbounds i8, ptr %0, i64 560
  %39 = load ptr, ptr %38, align 8, !tbaa !23
  %40 = getelementptr inbounds i8, ptr %0, i64 576
  %41 = load ptr, ptr %40, align 8, !tbaa !24
  %42 = getelementptr inbounds i8, ptr %0, i64 640
  %43 = load ptr, ptr %42, align 8, !tbaa !25
  %44 = getelementptr inbounds i8, ptr %0, i64 504
  %45 = load ptr, ptr %44, align 8, !tbaa !26
  %46 = getelementptr inbounds i8, ptr %0, i64 536
  %47 = load ptr, ptr %46, align 8, !tbaa !27
  %48 = getelementptr inbounds i8, ptr %0, i64 552
  %49 = load ptr, ptr %48, align 8, !tbaa !28
  %50 = getelementptr inbounds i8, ptr %0, i64 680
  %51 = load ptr, ptr %50, align 8, !tbaa !29
  %52 = getelementptr inbounds i8, ptr %0, i64 688
  %53 = load ptr, ptr %52, align 8, !tbaa !30
  %54 = getelementptr inbounds i8, ptr %0, i64 416
  %55 = load ptr, ptr %54, align 8, !tbaa !31
  %56 = getelementptr inbounds i8, ptr %0, i64 440
  %57 = load ptr, ptr %56, align 8, !tbaa !32
  %58 = getelementptr inbounds i8, ptr %0, i64 424
  %59 = load ptr, ptr %58, align 8, !tbaa !33
  %60 = getelementptr inbounds i8, ptr %0, i64 448
  %61 = load ptr, ptr %60, align 8, !tbaa !34
  %62 = getelementptr inbounds i8, ptr %0, i64 432
  %63 = load ptr, ptr %62, align 8, !tbaa !35
  %64 = getelementptr inbounds i8, ptr %0, i64 456
  %65 = load ptr, ptr %64, align 8, !tbaa !36
  %66 = getelementptr inbounds i8, ptr %0, i64 656
  %67 = load ptr, ptr %66, align 8, !tbaa !37
  %68 = icmp ne ptr %4, null
  %69 = icmp ne ptr %5, null
  %or.cond = and i1 %68, %69
  %70 = icmp ne ptr %6, null
  %spec.select = and i1 %or.cond, %70
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #4
  store i32 0, ptr %9, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  store i32 0, ptr %10, align 4, !tbaa !38
  %71 = and i8 %7, -33
  %or.cond4 = icmp eq i8 %71, 84
  %72 = getelementptr inbounds i8, ptr %0, i64 528
  %73 = load ptr, ptr %72, align 8, !tbaa !39
  %74 = sext i32 %12 to i64
  %75 = getelementptr inbounds i32, ptr %73, i64 %74
  %76 = getelementptr inbounds i8, ptr %0, i64 664
  %77 = load ptr, ptr %76, align 8, !tbaa !40
  %78 = getelementptr inbounds i8, ptr %0, i64 672
  %79 = load ptr, ptr %78, align 8, !tbaa !41
  br i1 %or.cond4, label %80, label %298

80:                                               ; preds = %8
  %81 = load i32, ptr %2, align 4, !tbaa !38
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds i32, ptr %27, i64 %82
  %84 = load i32, ptr %83, align 4, !tbaa !38
  %85 = getelementptr inbounds i32, ptr %47, i64 %82
  %86 = load i32, ptr %85, align 4, !tbaa !38
  %87 = getelementptr inbounds i32, ptr %49, i64 %82
  %88 = load i32, ptr %87, align 4, !tbaa !38
  %89 = getelementptr inbounds i8, ptr %0, i64 396
  %90 = load i32, ptr %89, align 4, !tbaa !42
  %91 = add nsw i32 %90, 1
  store i32 %91, ptr %89, align 4, !tbaa !42
  %92 = sub nsw i32 %88, %86
  %93 = sext i32 %86 to i64
  %94 = getelementptr inbounds i32, ptr %63, i64 %93
  %95 = tail call i32 @lu_solve_symbolic(i32 noundef %12, ptr noundef %47, ptr noundef %49, ptr noundef %63, i32 noundef %92, ptr noundef %94, ptr noundef %73, ptr noundef %79, ptr noundef %67, i32 noundef %91) #4
  %96 = sub nsw i32 %12, %95
  %97 = load i32, ptr %0, align 8, !tbaa !43
  %98 = sext i32 %14 to i64
  %99 = getelementptr inbounds i32, ptr %45, i64 %98
  %100 = load i32, ptr %99, align 4, !tbaa !38
  %101 = sub nsw i32 %97, %100
  %102 = icmp slt i32 %101, %96
  br i1 %102, label %295, label %.preheader503

.preheader503:                                    ; preds = %80
  %103 = icmp slt i32 %86, %88
  br i1 %103, label %.lr.ph559.preheader, label %._crit_edge560

.lr.ph559.preheader:                              ; preds = %.preheader503
  %wide.trip.count658 = sext i32 %88 to i64
  %104 = sub nsw i64 %wide.trip.count658, %93
  %xtraiter724 = and i64 %104, 3
  %lcmp.mod725.not = icmp eq i64 %xtraiter724, 0
  br i1 %lcmp.mod725.not, label %.lr.ph559.prol.loopexit, label %.lr.ph559.prol

.lr.ph559.prol:                                   ; preds = %.lr.ph559.preheader, %.lr.ph559.prol
  %indvars.iv655.prol = phi i64 [ %indvars.iv.next656.prol, %.lr.ph559.prol ], [ %93, %.lr.ph559.preheader ]
  %prol.iter726 = phi i64 [ %prol.iter726.next, %.lr.ph559.prol ], [ 0, %.lr.ph559.preheader ]
  %105 = getelementptr inbounds double, ptr %65, i64 %indvars.iv655.prol
  %106 = load double, ptr %105, align 8, !tbaa !44
  %107 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv655.prol
  %108 = load i32, ptr %107, align 4, !tbaa !38
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds double, ptr %77, i64 %109
  store double %106, ptr %110, align 8, !tbaa !44
  %indvars.iv.next656.prol = add nsw i64 %indvars.iv655.prol, 1
  %prol.iter726.next = add i64 %prol.iter726, 1
  %prol.iter726.cmp.not = icmp eq i64 %prol.iter726.next, %xtraiter724
  br i1 %prol.iter726.cmp.not, label %.lr.ph559.prol.loopexit, label %.lr.ph559.prol, !llvm.loop !45

.lr.ph559.prol.loopexit:                          ; preds = %.lr.ph559.prol, %.lr.ph559.preheader
  %indvars.iv655.unr = phi i64 [ %93, %.lr.ph559.preheader ], [ %indvars.iv.next656.prol, %.lr.ph559.prol ]
  %111 = sub nsw i64 %93, %wide.trip.count658
  %112 = icmp ugt i64 %111, -4
  br i1 %112, label %._crit_edge560, label %.lr.ph559

.lr.ph559:                                        ; preds = %.lr.ph559.prol.loopexit, %.lr.ph559
  %indvars.iv655 = phi i64 [ %indvars.iv.next656.3, %.lr.ph559 ], [ %indvars.iv655.unr, %.lr.ph559.prol.loopexit ]
  %113 = getelementptr inbounds double, ptr %65, i64 %indvars.iv655
  %114 = load double, ptr %113, align 8, !tbaa !44
  %115 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv655
  %116 = load i32, ptr %115, align 4, !tbaa !38
  %117 = sext i32 %116 to i64
  %118 = getelementptr inbounds double, ptr %77, i64 %117
  store double %114, ptr %118, align 8, !tbaa !44
  %indvars.iv.next656 = add nsw i64 %indvars.iv655, 1
  %119 = getelementptr inbounds double, ptr %65, i64 %indvars.iv.next656
  %120 = load double, ptr %119, align 8, !tbaa !44
  %121 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv.next656
  %122 = load i32, ptr %121, align 4, !tbaa !38
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds double, ptr %77, i64 %123
  store double %120, ptr %124, align 8, !tbaa !44
  %indvars.iv.next656.1 = add nsw i64 %indvars.iv655, 2
  %125 = getelementptr inbounds double, ptr %65, i64 %indvars.iv.next656.1
  %126 = load double, ptr %125, align 8, !tbaa !44
  %127 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv.next656.1
  %128 = load i32, ptr %127, align 4, !tbaa !38
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds double, ptr %77, i64 %129
  store double %126, ptr %130, align 8, !tbaa !44
  %indvars.iv.next656.2 = add nsw i64 %indvars.iv655, 3
  %131 = getelementptr inbounds double, ptr %65, i64 %indvars.iv.next656.2
  %132 = load double, ptr %131, align 8, !tbaa !44
  %133 = getelementptr inbounds i32, ptr %63, i64 %indvars.iv.next656.2
  %134 = load i32, ptr %133, align 4, !tbaa !38
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds double, ptr %77, i64 %135
  store double %132, ptr %136, align 8, !tbaa !44
  %indvars.iv.next656.3 = add nsw i64 %indvars.iv655, 4
  %exitcond659.not.3 = icmp eq i64 %indvars.iv.next656.3, %wide.trip.count658
  br i1 %exitcond659.not.3, label %._crit_edge560, label %.lr.ph559, !llvm.loop !47

._crit_edge560:                                   ; preds = %.lr.ph559.prol.loopexit, %.lr.ph559, %.preheader503
  %137 = sext i32 %95 to i64
  %138 = getelementptr inbounds i32, ptr %73, i64 %137
  %139 = call i32 @lu_solve_triangular(i32 noundef %96, ptr noundef %138, ptr noundef %47, ptr noundef %49, ptr noundef %63, ptr noundef %65, ptr noundef %51, double noundef 0.000000e+00, ptr noundef %77, ptr noundef %75, ptr noundef nonnull %10) #4
  %140 = load i32, ptr %99, align 4, !tbaa !38
  %141 = icmp slt i32 %95, %12
  br i1 %141, label %.lr.ph564.preheader, label %._crit_edge565

.lr.ph564.preheader:                              ; preds = %._crit_edge560
  %142 = sext i32 %140 to i64
  %143 = sub nsw i64 %74, %137
  %xtraiter727 = and i64 %143, 1
  %lcmp.mod728.not = icmp eq i64 %xtraiter727, 0
  br i1 %lcmp.mod728.not, label %.lr.ph564.prol.loopexit, label %.lr.ph564.prol

.lr.ph564.prol:                                   ; preds = %.lr.ph564.preheader
  %144 = getelementptr inbounds i32, ptr %73, i64 %137
  %145 = load i32, ptr %144, align 4, !tbaa !38
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds i32, ptr %27, i64 %146
  %148 = load i32, ptr %147, align 4, !tbaa !38
  %149 = getelementptr inbounds i32, ptr %55, i64 %142
  store i32 %148, ptr %149, align 4, !tbaa !38
  %150 = getelementptr inbounds double, ptr %77, i64 %146
  %151 = load double, ptr %150, align 8, !tbaa !44
  %indvars.iv.next663.prol = add nsw i64 %142, 1
  %152 = getelementptr inbounds double, ptr %57, i64 %142
  store double %151, ptr %152, align 8, !tbaa !44
  store double 0.000000e+00, ptr %150, align 8, !tbaa !44
  %indvars.iv.next661.prol = add nsw i64 %137, 1
  br label %.lr.ph564.prol.loopexit

.lr.ph564.prol.loopexit:                          ; preds = %.lr.ph564.prol, %.lr.ph564.preheader
  %indvars.iv.next663.lcssa.unr = phi i64 [ poison, %.lr.ph564.preheader ], [ %indvars.iv.next663.prol, %.lr.ph564.prol ]
  %indvars.iv662.unr = phi i64 [ %142, %.lr.ph564.preheader ], [ %indvars.iv.next663.prol, %.lr.ph564.prol ]
  %indvars.iv660.unr = phi i64 [ %137, %.lr.ph564.preheader ], [ %indvars.iv.next661.prol, %.lr.ph564.prol ]
  %153 = add nsw i64 %74, -1
  %154 = icmp eq i64 %153, %137
  br i1 %154, label %._crit_edge565.loopexit, label %.lr.ph564.preheader.new

.lr.ph564.preheader.new:                          ; preds = %.lr.ph564.prol.loopexit
  %invariant.gep738 = getelementptr i8, ptr %73, i64 4
  br label %.lr.ph564

.lr.ph564:                                        ; preds = %.lr.ph564, %.lr.ph564.preheader.new
  %indvars.iv662 = phi i64 [ %indvars.iv662.unr, %.lr.ph564.preheader.new ], [ %indvars.iv.next663.1, %.lr.ph564 ]
  %indvars.iv660 = phi i64 [ %indvars.iv660.unr, %.lr.ph564.preheader.new ], [ %indvars.iv.next661.1, %.lr.ph564 ]
  %155 = getelementptr inbounds i32, ptr %73, i64 %indvars.iv660
  %156 = load i32, ptr %155, align 4, !tbaa !38
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds i32, ptr %27, i64 %157
  %159 = load i32, ptr %158, align 4, !tbaa !38
  %160 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv662
  store i32 %159, ptr %160, align 4, !tbaa !38
  %161 = getelementptr inbounds double, ptr %77, i64 %157
  %162 = load double, ptr %161, align 8, !tbaa !44
  %indvars.iv.next663 = add nsw i64 %indvars.iv662, 1
  %163 = getelementptr inbounds double, ptr %57, i64 %indvars.iv662
  store double %162, ptr %163, align 8, !tbaa !44
  store double 0.000000e+00, ptr %161, align 8, !tbaa !44
  %gep739 = getelementptr i32, ptr %invariant.gep738, i64 %indvars.iv660
  %164 = load i32, ptr %gep739, align 4, !tbaa !38
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds i32, ptr %27, i64 %165
  %167 = load i32, ptr %166, align 4, !tbaa !38
  %168 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next663
  store i32 %167, ptr %168, align 4, !tbaa !38
  %169 = getelementptr inbounds double, ptr %77, i64 %165
  %170 = load double, ptr %169, align 8, !tbaa !44
  %indvars.iv.next663.1 = add nsw i64 %indvars.iv662, 2
  %171 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next663
  store double %170, ptr %171, align 8, !tbaa !44
  store double 0.000000e+00, ptr %169, align 8, !tbaa !44
  %indvars.iv.next661.1 = add nsw i64 %indvars.iv660, 2
  %exitcond668.not.1 = icmp eq i64 %indvars.iv.next661.1, %74
  br i1 %exitcond668.not.1, label %._crit_edge565.loopexit, label %.lr.ph564, !llvm.loop !49

._crit_edge565.loopexit:                          ; preds = %.lr.ph564, %.lr.ph564.prol.loopexit
  %indvars.iv.next663.lcssa = phi i64 [ %indvars.iv.next663.lcssa.unr, %.lr.ph564.prol.loopexit ], [ %indvars.iv.next663.1, %.lr.ph564 ]
  %172 = trunc nsw i64 %indvars.iv.next663.lcssa to i32
  br label %._crit_edge565

._crit_edge565:                                   ; preds = %._crit_edge565.loopexit, %._crit_edge560
  %.0467.lcssa = phi i32 [ %140, %._crit_edge560 ], [ %172, %._crit_edge565.loopexit ]
  %173 = getelementptr i8, ptr %99, i64 4
  store i32 %.0467.lcssa, ptr %173, align 4, !tbaa !38
  %174 = getelementptr inbounds i32, ptr %31, i64 %98
  store i32 %84, ptr %174, align 4, !tbaa !38
  %175 = getelementptr inbounds i8, ptr %0, i64 392
  store i32 %81, ptr %175, align 8, !tbaa !50
  br i1 %spec.select, label %176, label %.thread

176:                                              ; preds = %._crit_edge565
  %177 = load i32, ptr %89, align 4, !tbaa !42
  %178 = add nsw i32 %177, 1
  store i32 %178, ptr %89, align 4, !tbaa !42
  store i32 %84, ptr %75, align 4, !tbaa !38
  %179 = sext i32 %84 to i64
  %180 = getelementptr inbounds i32, ptr %67, i64 %179
  store i32 %178, ptr %180, align 4, !tbaa !38
  %181 = getelementptr inbounds double, ptr %51, i64 %82
  %182 = load double, ptr %181, align 8, !tbaa !44
  %183 = fdiv double 1.000000e+00, %182
  %184 = getelementptr inbounds double, ptr %6, i64 %179
  store double %183, ptr %184, align 8, !tbaa !44
  %185 = call double @llvm.fabs.f64(double %182)
  %186 = fmul double %23, %185
  %187 = load i32, ptr %99, align 4, !tbaa !38
  %188 = load i32, ptr %173, align 4, !tbaa !38
  %189 = icmp slt i32 %187, %188
  br i1 %189, label %.lr.ph570.preheader, label %.preheader502

.lr.ph570.preheader:                              ; preds = %176
  %190 = sext i32 %187 to i64
  br label %.lr.ph570

.preheader502:                                    ; preds = %209, %176
  %.0470.lcssa = phi i32 [ 1, %176 ], [ %.1471, %209 ]
  %191 = icmp sgt i32 %14, 0
  br i1 %191, label %.lr.ph584.preheader, label %._crit_edge585

.lr.ph584.preheader:                              ; preds = %.preheader502
  %192 = zext nneg i32 %14 to i64
  br label %.lr.ph584

.lr.ph570:                                        ; preds = %.lr.ph570.preheader, %209
  %193 = phi i32 [ %188, %.lr.ph570.preheader ], [ %210, %209 ]
  %indvars.iv669 = phi i64 [ %190, %.lr.ph570.preheader ], [ %indvars.iv.next670, %209 ]
  %.0470567 = phi i32 [ 1, %.lr.ph570.preheader ], [ %.1471, %209 ]
  %194 = getelementptr inbounds double, ptr %57, i64 %indvars.iv669
  %195 = load double, ptr %194, align 8, !tbaa !44
  %196 = call double @llvm.fabs.f64(double %195)
  %197 = fcmp ogt double %196, %186
  br i1 %197, label %198, label %209

198:                                              ; preds = %.lr.ph570
  %199 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv669
  %200 = load i32, ptr %199, align 4, !tbaa !38
  %201 = add nsw i32 %.0470567, 1
  %202 = sext i32 %.0470567 to i64
  %203 = getelementptr inbounds i32, ptr %75, i64 %202
  store i32 %200, ptr %203, align 4, !tbaa !38
  %204 = sext i32 %200 to i64
  %205 = getelementptr inbounds i32, ptr %67, i64 %204
  store i32 %178, ptr %205, align 4, !tbaa !38
  %206 = fneg double %195
  %207 = fdiv double %206, %182
  %208 = getelementptr inbounds double, ptr %6, i64 %204
  store double %207, ptr %208, align 8, !tbaa !44
  %.pre684 = load i32, ptr %173, align 4, !tbaa !38
  br label %209

209:                                              ; preds = %.lr.ph570, %198
  %210 = phi i32 [ %.pre684, %198 ], [ %193, %.lr.ph570 ]
  %.1471 = phi i32 [ %201, %198 ], [ %.0470567, %.lr.ph570 ]
  %indvars.iv.next670 = add nsw i64 %indvars.iv669, 1
  %211 = sext i32 %210 to i64
  %212 = icmp slt i64 %indvars.iv.next670, %211
  br i1 %212, label %.lr.ph570, label %.preheader502, !llvm.loop !51

.lr.ph584:                                        ; preds = %.lr.ph584.preheader, %.loopexit501
  %indvars.iv675 = phi i64 [ %192, %.lr.ph584.preheader ], [ %indvars.iv.next676, %.loopexit501 ]
  %.0462581 = phi i32 [ 0, %.lr.ph584.preheader ], [ %.2464, %.loopexit501 ]
  %.2472580 = phi i32 [ %.0470.lcssa, %.lr.ph584.preheader ], [ %.5475, %.loopexit501 ]
  %indvars.iv.next676 = add nsw i64 %indvars.iv675, -1
  %213 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next676
  %214 = load i32, ptr %213, align 4, !tbaa !38
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds double, ptr %6, i64 %215
  %217 = load double, ptr %216, align 8, !tbaa !44
  %218 = fcmp une double %217, 0.000000e+00
  br i1 %218, label %219, label %.loopexit501

219:                                              ; preds = %.lr.ph584
  %220 = getelementptr inbounds i32, ptr %45, i64 %indvars.iv.next676
  %221 = load i32, ptr %220, align 4, !tbaa !38
  %222 = getelementptr inbounds i32, ptr %45, i64 %indvars.iv675
  %223 = load i32, ptr %222, align 4, !tbaa !38
  %224 = icmp slt i32 %221, %223
  br i1 %224, label %.lr.ph576, label %.loopexit501

.lr.ph576:                                        ; preds = %219
  %225 = fneg double %217
  %226 = sext i32 %221 to i64
  br label %227

227:                                              ; preds = %.lr.ph576, %238
  %228 = phi i32 [ %223, %.lr.ph576 ], [ %239, %238 ]
  %indvars.iv672 = phi i64 [ %226, %.lr.ph576 ], [ %indvars.iv.next673, %238 ]
  %.1463573 = phi i32 [ %.0462581, %.lr.ph576 ], [ %245, %238 ]
  %.3473572 = phi i32 [ %.2472580, %.lr.ph576 ], [ %.4474, %238 ]
  %229 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv672
  %230 = load i32, ptr %229, align 4, !tbaa !38
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds i32, ptr %67, i64 %231
  %233 = load i32, ptr %232, align 4, !tbaa !38
  %.not495 = icmp eq i32 %233, %178
  br i1 %.not495, label %238, label %234

234:                                              ; preds = %227
  store i32 %178, ptr %232, align 4, !tbaa !38
  %235 = add nsw i32 %.3473572, 1
  %236 = sext i32 %.3473572 to i64
  %237 = getelementptr inbounds i32, ptr %75, i64 %236
  store i32 %230, ptr %237, align 4, !tbaa !38
  %.pre685 = load i32, ptr %222, align 4, !tbaa !38
  br label %238

238:                                              ; preds = %234, %227
  %239 = phi i32 [ %.pre685, %234 ], [ %228, %227 ]
  %.4474 = phi i32 [ %235, %234 ], [ %.3473572, %227 ]
  %240 = getelementptr inbounds double, ptr %57, i64 %indvars.iv672
  %241 = load double, ptr %240, align 8, !tbaa !44
  %242 = getelementptr inbounds double, ptr %6, i64 %231
  %243 = load double, ptr %242, align 8, !tbaa !44
  %244 = call double @llvm.fmuladd.f64(double %225, double %241, double %243)
  store double %244, ptr %242, align 8, !tbaa !44
  %245 = add nsw i32 %.1463573, 1
  %indvars.iv.next673 = add nsw i64 %indvars.iv672, 1
  %246 = sext i32 %239 to i64
  %247 = icmp slt i64 %indvars.iv.next673, %246
  br i1 %247, label %227, label %.loopexit501, !llvm.loop !52

.loopexit501:                                     ; preds = %238, %219, %.lr.ph584
  %.5475 = phi i32 [ %.2472580, %.lr.ph584 ], [ %.2472580, %219 ], [ %.4474, %238 ]
  %.2464 = phi i32 [ %.0462581, %.lr.ph584 ], [ %.0462581, %219 ], [ %245, %238 ]
  %248 = icmp sgt i64 %indvars.iv675, 1
  br i1 %248, label %.lr.ph584, label %._crit_edge585, !llvm.loop !53

._crit_edge585:                                   ; preds = %.loopexit501, %.preheader502
  %.2472.lcssa = phi i32 [ %.0470.lcssa, %.preheader502 ], [ %.5475, %.loopexit501 ]
  %.0462.lcssa = phi i32 [ 0, %.preheader502 ], [ %.2464, %.loopexit501 ]
  %.not494 = icmp sgt i32 %.2472.lcssa, %21
  br i1 %.not494, label %.preheader, label %251

.preheader:                                       ; preds = %._crit_edge585
  %249 = icmp sgt i32 %12, 0
  br i1 %249, label %.lr.ph601.preheader, label %.thread.sink.split

.lr.ph601.preheader:                              ; preds = %.preheader
  %.promoted592 = load i32, ptr %9, align 4, !tbaa !38
  %250 = zext nneg i32 %12 to i64
  br label %.lr.ph601

251:                                              ; preds = %._crit_edge585
  %252 = load i32, ptr %89, align 4, !tbaa !42
  %253 = add nsw i32 %252, 1
  store i32 %253, ptr %89, align 4, !tbaa !42
  %254 = call i32 @lu_solve_symbolic(i32 noundef %12, ptr noundef %39, ptr noundef null, ptr noundef %55, i32 noundef %.2472.lcssa, ptr noundef nonnull %75, ptr noundef %73, ptr noundef %79, ptr noundef %67, i32 noundef %253) #4
  %255 = sub nsw i32 %12, %254
  %256 = sext i32 %254 to i64
  %257 = getelementptr inbounds i32, ptr %73, i64 %256
  %258 = call i32 @lu_solve_triangular(i32 noundef %255, ptr noundef %257, ptr noundef %39, ptr noundef null, ptr noundef %55, ptr noundef %57, ptr noundef null, double noundef %23, ptr noundef nonnull %6, ptr noundef nonnull %5, ptr noundef nonnull %9) #4
  br label %.thread.sink.split

.lr.ph601:                                        ; preds = %.lr.ph601.preheader, %293
  %indvars.iv681 = phi i64 [ %250, %.lr.ph601.preheader ], [ %indvars.iv.next682, %293 ]
  %.6476599 = phi i32 [ 0, %.lr.ph601.preheader ], [ %.7, %293 ]
  %.promoted595598 = phi i32 [ %.promoted592, %.lr.ph601.preheader ], [ %.promoted593, %293 ]
  %indvars.iv.next682 = add nsw i64 %indvars.iv681, -1
  %259 = getelementptr inbounds i32, ptr %25, i64 %indvars.iv.next682
  %260 = load i32, ptr %259, align 4, !tbaa !38
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds double, ptr %6, i64 %261
  %263 = load double, ptr %262, align 8, !tbaa !44
  %264 = fcmp une double %263, 0.000000e+00
  br i1 %264, label %265, label %293

265:                                              ; preds = %.lr.ph601
  %266 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv.next682
  %267 = load i32, ptr %266, align 4, !tbaa !38
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds i32, ptr %55, i64 %268
  %270 = load i32, ptr %269, align 4, !tbaa !38
  %271 = icmp sgt i32 %270, -1
  br i1 %271, label %.lr.ph590, label %._crit_edge591

.lr.ph590:                                        ; preds = %265
  %272 = fneg double %263
  br label %273

273:                                              ; preds = %.lr.ph590, %273
  %indvars.iv678 = phi i64 [ %268, %.lr.ph590 ], [ %indvars.iv.next679, %273 ]
  %274 = phi i32 [ %270, %.lr.ph590 ], [ %284, %273 ]
  %275 = phi i32 [ %.promoted595598, %.lr.ph590 ], [ %282, %273 ]
  %276 = getelementptr inbounds double, ptr %57, i64 %indvars.iv678
  %277 = load double, ptr %276, align 8, !tbaa !44
  %278 = zext nneg i32 %274 to i64
  %279 = getelementptr inbounds double, ptr %6, i64 %278
  %280 = load double, ptr %279, align 8, !tbaa !44
  %281 = call double @llvm.fmuladd.f64(double %272, double %277, double %280)
  store double %281, ptr %279, align 8, !tbaa !44
  %282 = add nsw i32 %275, 1
  store i32 %282, ptr %9, align 4, !tbaa !38
  %indvars.iv.next679 = add nsw i64 %indvars.iv678, 1
  %283 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next679
  %284 = load i32, ptr %283, align 4, !tbaa !38
  %285 = icmp sgt i32 %284, -1
  br i1 %285, label %273, label %._crit_edge591, !llvm.loop !54

._crit_edge591:                                   ; preds = %273, %265
  %.promoted594 = phi i32 [ %.promoted595598, %265 ], [ %282, %273 ]
  %286 = call double @llvm.fabs.f64(double %263)
  %287 = fcmp ogt double %286, %23
  br i1 %287, label %288, label %292

288:                                              ; preds = %._crit_edge591
  %289 = add nsw i32 %.6476599, 1
  %290 = sext i32 %.6476599 to i64
  %291 = getelementptr inbounds i32, ptr %5, i64 %290
  store i32 %260, ptr %291, align 4, !tbaa !38
  br label %293

292:                                              ; preds = %._crit_edge591
  store double 0.000000e+00, ptr %262, align 8, !tbaa !44
  br label %293

293:                                              ; preds = %.lr.ph601, %292, %288
  %.promoted593 = phi i32 [ %.promoted594, %288 ], [ %.promoted594, %292 ], [ %.promoted595598, %.lr.ph601 ]
  %.7 = phi i32 [ %289, %288 ], [ %.6476599, %292 ], [ %.6476599, %.lr.ph601 ]
  %294 = icmp sgt i64 %indvars.iv681, 1
  br i1 %294, label %.lr.ph601, label %.thread.sink.split, !llvm.loop !55

295:                                              ; preds = %80
  %296 = sub nsw i32 %96, %101
  %297 = getelementptr inbounds i8, ptr %0, i64 88
  store i32 %296, ptr %297, align 8, !tbaa !56
  br label %615

298:                                              ; preds = %8
  %299 = getelementptr inbounds i8, ptr %0, i64 396
  %300 = load i32, ptr %299, align 4, !tbaa !42
  %301 = add nsw i32 %300, 1
  store i32 %301, ptr %299, align 4, !tbaa !42
  %302 = tail call i32 @lu_solve_symbolic(i32 noundef %12, ptr noundef %37, ptr noundef null, ptr noundef %55, i32 noundef %1, ptr noundef %2, ptr noundef %73, ptr noundef %79, ptr noundef %67, i32 noundef %301) #4
  %303 = sub nsw i32 %12, %302
  %304 = icmp sgt i32 %1, 0
  br i1 %304, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %298
  %wide.trip.count = zext nneg i32 %1 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %305 = icmp ult i32 %1, 4
  br i1 %305, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph.preheader.new

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

.lr.ph:                                           ; preds = %.lr.ph, %.lr.ph.preheader.new
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader.new ], [ %indvars.iv.next.3, %.lr.ph ]
  %niter = phi i64 [ 0, %.lr.ph.preheader.new ], [ %niter.next.3, %.lr.ph ]
  %306 = getelementptr inbounds double, ptr %3, i64 %indvars.iv
  %307 = load double, ptr %306, align 8, !tbaa !44
  %308 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv
  %309 = load i32, ptr %308, align 4, !tbaa !38
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds double, ptr %77, i64 %310
  store double %307, ptr %311, align 8, !tbaa !44
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %312 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next
  %313 = load double, ptr %312, align 8, !tbaa !44
  %314 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next
  %315 = load i32, ptr %314, align 4, !tbaa !38
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds double, ptr %77, i64 %316
  store double %313, ptr %317, align 8, !tbaa !44
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %318 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next.1
  %319 = load double, ptr %318, align 8, !tbaa !44
  %320 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next.1
  %321 = load i32, ptr %320, align 4, !tbaa !38
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds double, ptr %77, i64 %322
  store double %319, ptr %323, align 8, !tbaa !44
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %324 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next.2
  %325 = load double, ptr %324, align 8, !tbaa !44
  %326 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next.2
  %327 = load i32, ptr %326, align 4, !tbaa !38
  %328 = sext i32 %327 to i64
  %329 = getelementptr inbounds double, ptr %77, i64 %328
  store double %325, ptr %329, align 8, !tbaa !44
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %._crit_edge.loopexit.unr-lcssa, label %.lr.ph, !llvm.loop !57

._crit_edge.loopexit.unr-lcssa:                   ; preds = %.lr.ph, %.lr.ph.preheader
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next.3, %.lr.ph ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge, label %.lr.ph.epil

.lr.ph.epil:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.epil ], [ %indvars.iv.unr, %._crit_edge.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.epil ], [ 0, %._crit_edge.loopexit.unr-lcssa ]
  %330 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.epil
  %331 = load double, ptr %330, align 8, !tbaa !44
  %332 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.epil
  %333 = load i32, ptr %332, align 4, !tbaa !38
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds double, ptr %77, i64 %334
  store double %331, ptr %335, align 8, !tbaa !44
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %._crit_edge, label %.lr.ph.epil, !llvm.loop !58

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %298
  %336 = sext i32 %302 to i64
  %337 = getelementptr inbounds i32, ptr %73, i64 %336
  %338 = call i32 @lu_solve_triangular(i32 noundef %303, ptr noundef %337, ptr noundef %37, ptr noundef null, ptr noundef %55, ptr noundef %57, ptr noundef null, double noundef %23, ptr noundef %77, ptr noundef %75, ptr noundef nonnull %9) #4
  %339 = icmp slt i32 %338, %303
  br i1 %339, label %.preheader511, label %.loopexit510

.preheader511:                                    ; preds = %._crit_edge
  %340 = icmp sgt i32 %338, 0
  br i1 %340, label %.lr.ph515, label %.preheader509

.preheader509.loopexit:                           ; preds = %366
  %341 = trunc nsw i64 %indvars.iv.next613 to i32
  br label %.preheader509

.preheader509:                                    ; preds = %.preheader509.loopexit, %.preheader511
  %.2453.lcssa = phi i32 [ %302, %.preheader511 ], [ %341, %.preheader509.loopexit ]
  %342 = icmp slt i32 %.2453.lcssa, %12
  br i1 %342, label %.lr.ph517.preheader, label %.loopexit510

.lr.ph517.preheader:                              ; preds = %.preheader509
  %343 = sext i32 %.2453.lcssa to i64
  %344 = sub nsw i64 %74, %343
  %xtraiter703 = and i64 %344, 3
  %lcmp.mod704.not = icmp eq i64 %xtraiter703, 0
  br i1 %lcmp.mod704.not, label %.lr.ph517.prol.loopexit, label %.lr.ph517.prol

.lr.ph517.prol:                                   ; preds = %.lr.ph517.preheader, %.lr.ph517.prol
  %indvars.iv615.prol = phi i64 [ %indvars.iv.next616.prol, %.lr.ph517.prol ], [ %343, %.lr.ph517.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph517.prol ], [ 0, %.lr.ph517.preheader ]
  %345 = getelementptr inbounds i32, ptr %73, i64 %indvars.iv615.prol
  %346 = load i32, ptr %345, align 4, !tbaa !38
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i32, ptr %67, i64 %347
  %349 = load i32, ptr %348, align 4, !tbaa !38
  %350 = add nsw i32 %349, -1
  store i32 %350, ptr %348, align 4, !tbaa !38
  %indvars.iv.next616.prol = add nsw i64 %indvars.iv615.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter703
  br i1 %prol.iter.cmp.not, label %.lr.ph517.prol.loopexit, label %.lr.ph517.prol, !llvm.loop !59

.lr.ph517.prol.loopexit:                          ; preds = %.lr.ph517.prol, %.lr.ph517.preheader
  %indvars.iv615.unr = phi i64 [ %343, %.lr.ph517.preheader ], [ %indvars.iv.next616.prol, %.lr.ph517.prol ]
  %351 = sub nsw i64 %343, %74
  %352 = icmp ugt i64 %351, -4
  br i1 %352, label %.loopexit510, label %.lr.ph517.preheader.new

.lr.ph517.preheader.new:                          ; preds = %.lr.ph517.prol.loopexit
  %invariant.gep = getelementptr i8, ptr %73, i64 4
  %invariant.gep734 = getelementptr i8, ptr %73, i64 8
  %invariant.gep736 = getelementptr i8, ptr %73, i64 12
  br label %.lr.ph517

.lr.ph515:                                        ; preds = %.preheader511, %366
  %indvars.iv612 = phi i64 [ %indvars.iv.next613, %366 ], [ %336, %.preheader511 ]
  %.1449514 = phi i32 [ %.2450, %366 ], [ 0, %.preheader511 ]
  %353 = getelementptr inbounds i32, ptr %73, i64 %indvars.iv612
  %354 = load i32, ptr %353, align 4, !tbaa !38
  %355 = sext i32 %.1449514 to i64
  %356 = getelementptr inbounds i32, ptr %75, i64 %355
  %357 = load i32, ptr %356, align 4, !tbaa !38
  %358 = icmp eq i32 %354, %357
  br i1 %358, label %359, label %361

359:                                              ; preds = %.lr.ph515
  %360 = add nsw i32 %.1449514, 1
  br label %366

361:                                              ; preds = %.lr.ph515
  %362 = sext i32 %354 to i64
  %363 = getelementptr inbounds i32, ptr %67, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !38
  %365 = add nsw i32 %364, -1
  store i32 %365, ptr %363, align 4, !tbaa !38
  br label %366

366:                                              ; preds = %359, %361
  %.2450 = phi i32 [ %360, %359 ], [ %.1449514, %361 ]
  %indvars.iv.next613 = add nsw i64 %indvars.iv612, 1
  %367 = icmp slt i32 %.2450, %338
  br i1 %367, label %.lr.ph515, label %.preheader509.loopexit, !llvm.loop !60

.lr.ph517:                                        ; preds = %.lr.ph517, %.lr.ph517.preheader.new
  %indvars.iv615 = phi i64 [ %indvars.iv615.unr, %.lr.ph517.preheader.new ], [ %indvars.iv.next616.3, %.lr.ph517 ]
  %368 = getelementptr inbounds i32, ptr %73, i64 %indvars.iv615
  %369 = load i32, ptr %368, align 4, !tbaa !38
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds i32, ptr %67, i64 %370
  %372 = load i32, ptr %371, align 4, !tbaa !38
  %373 = add nsw i32 %372, -1
  store i32 %373, ptr %371, align 4, !tbaa !38
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv615
  %374 = load i32, ptr %gep, align 4, !tbaa !38
  %375 = sext i32 %374 to i64
  %376 = getelementptr inbounds i32, ptr %67, i64 %375
  %377 = load i32, ptr %376, align 4, !tbaa !38
  %378 = add nsw i32 %377, -1
  store i32 %378, ptr %376, align 4, !tbaa !38
  %gep735 = getelementptr i32, ptr %invariant.gep734, i64 %indvars.iv615
  %379 = load i32, ptr %gep735, align 4, !tbaa !38
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds i32, ptr %67, i64 %380
  %382 = load i32, ptr %381, align 4, !tbaa !38
  %383 = add nsw i32 %382, -1
  store i32 %383, ptr %381, align 4, !tbaa !38
  %gep737 = getelementptr i32, ptr %invariant.gep736, i64 %indvars.iv615
  %384 = load i32, ptr %gep737, align 4, !tbaa !38
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds i32, ptr %67, i64 %385
  %387 = load i32, ptr %386, align 4, !tbaa !38
  %388 = add nsw i32 %387, -1
  store i32 %388, ptr %386, align 4, !tbaa !38
  %indvars.iv.next616.3 = add nsw i64 %indvars.iv615, 4
  %exitcond619.not.3 = icmp eq i64 %indvars.iv.next616.3, %74
  br i1 %exitcond619.not.3, label %.loopexit510, label %.lr.ph517, !llvm.loop !61

.loopexit510:                                     ; preds = %.lr.ph517.prol.loopexit, %.lr.ph517, %.preheader509, %._crit_edge
  %389 = load i32, ptr %45, align 4, !tbaa !38
  %390 = icmp sgt i32 %14, 0
  br i1 %390, label %.lr.ph530.preheader, label %._crit_edge531

.lr.ph530.preheader:                              ; preds = %.loopexit510
  %wide.trip.count628 = zext nneg i32 %14 to i64
  br label %.lr.ph530

.lr.ph530:                                        ; preds = %.lr.ph530.preheader, %._crit_edge522.thread
  %indvars.iv625 = phi i64 [ 0, %.lr.ph530.preheader ], [ %indvars.iv.next626, %._crit_edge522.thread ]
  %.4460527 = phi i32 [ %389, %.lr.ph530.preheader ], [ %.5461.lcssa688, %._crit_edge522.thread ]
  %.8526 = phi i32 [ %338, %.lr.ph530.preheader ], [ %.9, %._crit_edge522.thread ]
  %391 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv625
  %392 = load i32, ptr %391, align 4, !tbaa !38
  %indvars.iv.next626 = add nuw nsw i64 %indvars.iv625, 1
  %393 = getelementptr inbounds i32, ptr %45, i64 %indvars.iv.next626
  %394 = load i32, ptr %393, align 4, !tbaa !38
  %395 = icmp slt i32 %.4460527, %394
  br i1 %395, label %.lr.ph521.preheader, label %._crit_edge522.thread

.lr.ph521.preheader:                              ; preds = %.lr.ph530
  %396 = sext i32 %.4460527 to i64
  %wide.trip.count623 = sext i32 %394 to i64
  %397 = sub nsw i64 %wide.trip.count623, %396
  %xtraiter705 = and i64 %397, 3
  %lcmp.mod706.not = icmp eq i64 %xtraiter705, 0
  br i1 %lcmp.mod706.not, label %.lr.ph521.prol.loopexit, label %.lr.ph521.prol

.lr.ph521.prol:                                   ; preds = %.lr.ph521.preheader, %.lr.ph521.prol
  %indvars.iv620.prol = phi i64 [ %indvars.iv.next621.prol, %.lr.ph521.prol ], [ %396, %.lr.ph521.preheader ]
  %.0469518.prol = phi double [ %405, %.lr.ph521.prol ], [ 0.000000e+00, %.lr.ph521.preheader ]
  %prol.iter707 = phi i64 [ %prol.iter707.next, %.lr.ph521.prol ], [ 0, %.lr.ph521.preheader ]
  %398 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv620.prol
  %399 = load i32, ptr %398, align 4, !tbaa !38
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds double, ptr %77, i64 %400
  %402 = load double, ptr %401, align 8, !tbaa !44
  %403 = getelementptr inbounds double, ptr %57, i64 %indvars.iv620.prol
  %404 = load double, ptr %403, align 8, !tbaa !44
  %405 = call double @llvm.fmuladd.f64(double %402, double %404, double %.0469518.prol)
  %indvars.iv.next621.prol = add nsw i64 %indvars.iv620.prol, 1
  %prol.iter707.next = add i64 %prol.iter707, 1
  %prol.iter707.cmp.not = icmp eq i64 %prol.iter707.next, %xtraiter705
  br i1 %prol.iter707.cmp.not, label %.lr.ph521.prol.loopexit, label %.lr.ph521.prol, !llvm.loop !62

.lr.ph521.prol.loopexit:                          ; preds = %.lr.ph521.prol, %.lr.ph521.preheader
  %.lcssa702.unr = phi double [ poison, %.lr.ph521.preheader ], [ %405, %.lr.ph521.prol ]
  %indvars.iv620.unr = phi i64 [ %396, %.lr.ph521.preheader ], [ %indvars.iv.next621.prol, %.lr.ph521.prol ]
  %.0469518.unr = phi double [ 0.000000e+00, %.lr.ph521.preheader ], [ %405, %.lr.ph521.prol ]
  %406 = sub nsw i64 %396, %wide.trip.count623
  %407 = icmp ugt i64 %406, -4
  br i1 %407, label %._crit_edge522, label %.lr.ph521

.lr.ph521:                                        ; preds = %.lr.ph521.prol.loopexit, %.lr.ph521
  %indvars.iv620 = phi i64 [ %indvars.iv.next621.3, %.lr.ph521 ], [ %indvars.iv620.unr, %.lr.ph521.prol.loopexit ]
  %.0469518 = phi double [ %439, %.lr.ph521 ], [ %.0469518.unr, %.lr.ph521.prol.loopexit ]
  %408 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv620
  %409 = load i32, ptr %408, align 4, !tbaa !38
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds double, ptr %77, i64 %410
  %412 = load double, ptr %411, align 8, !tbaa !44
  %413 = getelementptr inbounds double, ptr %57, i64 %indvars.iv620
  %414 = load double, ptr %413, align 8, !tbaa !44
  %415 = call double @llvm.fmuladd.f64(double %412, double %414, double %.0469518)
  %indvars.iv.next621 = add nsw i64 %indvars.iv620, 1
  %416 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next621
  %417 = load i32, ptr %416, align 4, !tbaa !38
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds double, ptr %77, i64 %418
  %420 = load double, ptr %419, align 8, !tbaa !44
  %421 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next621
  %422 = load double, ptr %421, align 8, !tbaa !44
  %423 = call double @llvm.fmuladd.f64(double %420, double %422, double %415)
  %indvars.iv.next621.1 = add nsw i64 %indvars.iv620, 2
  %424 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next621.1
  %425 = load i32, ptr %424, align 4, !tbaa !38
  %426 = sext i32 %425 to i64
  %427 = getelementptr inbounds double, ptr %77, i64 %426
  %428 = load double, ptr %427, align 8, !tbaa !44
  %429 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next621.1
  %430 = load double, ptr %429, align 8, !tbaa !44
  %431 = call double @llvm.fmuladd.f64(double %428, double %430, double %423)
  %indvars.iv.next621.2 = add nsw i64 %indvars.iv620, 3
  %432 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next621.2
  %433 = load i32, ptr %432, align 4, !tbaa !38
  %434 = sext i32 %433 to i64
  %435 = getelementptr inbounds double, ptr %77, i64 %434
  %436 = load double, ptr %435, align 8, !tbaa !44
  %437 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next621.2
  %438 = load double, ptr %437, align 8, !tbaa !44
  %439 = call double @llvm.fmuladd.f64(double %436, double %438, double %431)
  %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_edge522, label %.lr.ph521, !llvm.loop !63

._crit_edge522:                                   ; preds = %.lr.ph521, %.lr.ph521.prol.loopexit
  %.lcssa702 = phi double [ %.lcssa702.unr, %.lr.ph521.prol.loopexit ], [ %439, %.lr.ph521 ]
  %440 = sext i32 %392 to i64
  %441 = getelementptr inbounds double, ptr %77, i64 %440
  %442 = load double, ptr %441, align 8, !tbaa !44
  %443 = fsub double %442, %.lcssa702
  store double %443, ptr %441, align 8, !tbaa !44
  %444 = fcmp une double %.lcssa702, 0.000000e+00
  br i1 %444, label %445, label %._crit_edge522.thread

445:                                              ; preds = %._crit_edge522
  %446 = getelementptr inbounds i32, ptr %67, i64 %440
  %447 = load i32, ptr %446, align 4, !tbaa !38
  %.not493 = icmp eq i32 %447, %301
  br i1 %.not493, label %._crit_edge522.thread, label %448

448:                                              ; preds = %445
  store i32 %301, ptr %446, align 4, !tbaa !38
  %449 = add nsw i32 %.8526, 1
  %450 = sext i32 %.8526 to i64
  %451 = getelementptr inbounds i32, ptr %75, i64 %450
  store i32 %392, ptr %451, align 4, !tbaa !38
  br label %._crit_edge522.thread

._crit_edge522.thread:                            ; preds = %.lr.ph530, %._crit_edge522, %445, %448
  %.5461.lcssa688 = phi i32 [ %394, %448 ], [ %394, %445 ], [ %394, %._crit_edge522 ], [ %.4460527, %.lr.ph530 ]
  %.9 = phi i32 [ %449, %448 ], [ %.8526, %445 ], [ %.8526, %._crit_edge522 ], [ %.8526, %.lr.ph530 ]
  %exitcond629.not = icmp eq i64 %indvars.iv.next626, %wide.trip.count628
  br i1 %exitcond629.not, label %._crit_edge531.loopexit, label %.lr.ph530, !llvm.loop !64

._crit_edge531.loopexit:                          ; preds = %._crit_edge522.thread
  %.pre = load i32, ptr %45, align 4, !tbaa !38
  br label %._crit_edge531

._crit_edge531:                                   ; preds = %._crit_edge531.loopexit, %.loopexit510
  %452 = phi i32 [ %389, %.loopexit510 ], [ %.pre, %._crit_edge531.loopexit ]
  %.8.lcssa = phi i32 [ %338, %.loopexit510 ], [ %.9, %._crit_edge531.loopexit ]
  %453 = sext i32 %14 to i64
  %454 = getelementptr inbounds i32, ptr %45, i64 %453
  %455 = load i32, ptr %454, align 4, !tbaa !38
  %456 = sub nsw i32 %455, %452
  %457 = getelementptr inbounds i8, ptr %0, i64 4
  %458 = load i32, ptr %457, align 4, !tbaa !65
  %459 = getelementptr inbounds i32, ptr %43, i64 %74
  %460 = load i32, ptr %459, align 4, !tbaa !38
  %461 = sub nsw i32 %458, %460
  %462 = add nsw i32 %.8.lcssa, 1
  %.not = icmp sgt i32 %461, %.8.lcssa
  %463 = icmp sgt i32 %.8.lcssa, 0
  br i1 %.not, label %.preheader507, label %.preheader508

.preheader508:                                    ; preds = %._crit_edge531
  br i1 %463, label %.lr.ph534.preheader, label %._crit_edge535

.lr.ph534.preheader:                              ; preds = %.preheader508
  %wide.trip.count633 = zext nneg i32 %.8.lcssa to i64
  %xtraiter708 = and i64 %wide.trip.count633, 3
  %464 = icmp ult i32 %.8.lcssa, 4
  br i1 %464, label %._crit_edge535.loopexit.unr-lcssa, label %.lr.ph534.preheader.new

.lr.ph534.preheader.new:                          ; preds = %.lr.ph534.preheader
  %unroll_iter711 = and i64 %wide.trip.count633, 2147483644
  br label %.lr.ph534

.preheader507:                                    ; preds = %._crit_edge531
  br i1 %463, label %.lr.ph538.preheader, label %._crit_edge539

.lr.ph538.preheader:                              ; preds = %.preheader507
  %465 = sext i32 %460 to i64
  %wide.trip.count642 = zext nneg i32 %.8.lcssa to i64
  %xtraiter713 = and i64 %wide.trip.count642, 1
  %466 = icmp eq i32 %.8.lcssa, 1
  br i1 %466, label %._crit_edge539.loopexit.unr-lcssa, label %.lr.ph538.preheader.new

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

.lr.ph534:                                        ; preds = %.lr.ph534, %.lr.ph534.preheader.new
  %indvars.iv630 = phi i64 [ 0, %.lr.ph534.preheader.new ], [ %indvars.iv.next631.3, %.lr.ph534 ]
  %niter712 = phi i64 [ 0, %.lr.ph534.preheader.new ], [ %niter712.next.3, %.lr.ph534 ]
  %467 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv630
  %468 = load i32, ptr %467, align 4, !tbaa !38
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds double, ptr %77, i64 %469
  store double 0.000000e+00, ptr %470, align 8, !tbaa !44
  %indvars.iv.next631 = or disjoint i64 %indvars.iv630, 1
  %471 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv.next631
  %472 = load i32, ptr %471, align 4, !tbaa !38
  %473 = sext i32 %472 to i64
  %474 = getelementptr inbounds double, ptr %77, i64 %473
  store double 0.000000e+00, ptr %474, align 8, !tbaa !44
  %indvars.iv.next631.1 = or disjoint i64 %indvars.iv630, 2
  %475 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv.next631.1
  %476 = load i32, ptr %475, align 4, !tbaa !38
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds double, ptr %77, i64 %477
  store double 0.000000e+00, ptr %478, align 8, !tbaa !44
  %indvars.iv.next631.2 = or disjoint i64 %indvars.iv630, 3
  %479 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv.next631.2
  %480 = load i32, ptr %479, align 4, !tbaa !38
  %481 = sext i32 %480 to i64
  %482 = getelementptr inbounds double, ptr %77, i64 %481
  store double 0.000000e+00, ptr %482, align 8, !tbaa !44
  %indvars.iv.next631.3 = add nuw nsw i64 %indvars.iv630, 4
  %niter712.next.3 = add i64 %niter712, 4
  %niter712.ncmp.3 = icmp eq i64 %niter712.next.3, %unroll_iter711
  br i1 %niter712.ncmp.3, label %._crit_edge535.loopexit.unr-lcssa, label %.lr.ph534, !llvm.loop !66

.lr.ph538:                                        ; preds = %499, %.lr.ph538.preheader.new
  %indvars.iv637 = phi i64 [ %465, %.lr.ph538.preheader.new ], [ %indvars.iv.next638.1, %499 ]
  %indvars.iv635 = phi i64 [ 0, %.lr.ph538.preheader.new ], [ %indvars.iv.next636.1, %499 ]
  %niter718 = phi i64 [ 0, %.lr.ph538.preheader.new ], [ %niter718.next.1, %499 ]
  %483 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv635
  %484 = load i32, ptr %483, align 4, !tbaa !38
  %485 = getelementptr inbounds i32, ptr %59, i64 %indvars.iv637
  store i32 %484, ptr %485, align 4, !tbaa !38
  %486 = sext i32 %484 to i64
  %487 = getelementptr inbounds double, ptr %77, i64 %486
  %488 = load double, ptr %487, align 8, !tbaa !44
  %indvars.iv.next638 = add nsw i64 %indvars.iv637, 1
  %489 = getelementptr inbounds double, ptr %61, i64 %indvars.iv637
  store double %488, ptr %489, align 8, !tbaa !44
  br i1 %spec.select, label %.lr.ph538.1, label %490

490:                                              ; preds = %.lr.ph538
  store double 0.000000e+00, ptr %487, align 8, !tbaa !44
  br label %.lr.ph538.1

.lr.ph538.1:                                      ; preds = %.lr.ph538, %490
  %indvars.iv.next636 = or disjoint i64 %indvars.iv635, 1
  %491 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv.next636
  %492 = load i32, ptr %491, align 4, !tbaa !38
  %493 = getelementptr inbounds i32, ptr %59, i64 %indvars.iv.next638
  store i32 %492, ptr %493, align 4, !tbaa !38
  %494 = sext i32 %492 to i64
  %495 = getelementptr inbounds double, ptr %77, i64 %494
  %496 = load double, ptr %495, align 8, !tbaa !44
  %indvars.iv.next638.1 = add nsw i64 %indvars.iv637, 2
  %497 = getelementptr inbounds double, ptr %61, i64 %indvars.iv.next638
  store double %496, ptr %497, align 8, !tbaa !44
  br i1 %spec.select, label %499, label %498

498:                                              ; preds = %.lr.ph538.1
  store double 0.000000e+00, ptr %495, align 8, !tbaa !44
  br label %499

499:                                              ; preds = %498, %.lr.ph538.1
  %indvars.iv.next636.1 = add nuw nsw i64 %indvars.iv635, 2
  %niter718.next.1 = add i64 %niter718, 2
  %niter718.ncmp.1 = icmp eq i64 %niter718.next.1, %unroll_iter717
  br i1 %niter718.ncmp.1, label %._crit_edge539.loopexit.unr-lcssa, label %.lr.ph538, !llvm.loop !67

._crit_edge539.loopexit.unr-lcssa:                ; preds = %499, %.lr.ph538.preheader
  %indvars.iv.next638.lcssa.ph = phi i64 [ poison, %.lr.ph538.preheader ], [ %indvars.iv.next638.1, %499 ]
  %indvars.iv637.unr = phi i64 [ %465, %.lr.ph538.preheader ], [ %indvars.iv.next638.1, %499 ]
  %indvars.iv635.unr = phi i64 [ 0, %.lr.ph538.preheader ], [ %indvars.iv.next636.1, %499 ]
  %lcmp.mod715.not = icmp eq i64 %xtraiter713, 0
  br i1 %lcmp.mod715.not, label %._crit_edge539.loopexit, label %.lr.ph538.epil

.lr.ph538.epil:                                   ; preds = %._crit_edge539.loopexit.unr-lcssa
  %500 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv635.unr
  %501 = load i32, ptr %500, align 4, !tbaa !38
  %502 = getelementptr inbounds i32, ptr %59, i64 %indvars.iv637.unr
  store i32 %501, ptr %502, align 4, !tbaa !38
  %503 = sext i32 %501 to i64
  %504 = getelementptr inbounds double, ptr %77, i64 %503
  %505 = load double, ptr %504, align 8, !tbaa !44
  %indvars.iv.next638.epil = add nsw i64 %indvars.iv637.unr, 1
  %506 = getelementptr inbounds double, ptr %61, i64 %indvars.iv637.unr
  store double %505, ptr %506, align 8, !tbaa !44
  br i1 %spec.select, label %._crit_edge539.loopexit, label %507

507:                                              ; preds = %.lr.ph538.epil
  store double 0.000000e+00, ptr %504, align 8, !tbaa !44
  br label %._crit_edge539.loopexit

._crit_edge539.loopexit:                          ; preds = %.lr.ph538.epil, %507, %._crit_edge539.loopexit.unr-lcssa
  %indvars.iv.next638.lcssa = phi i64 [ %indvars.iv.next638.lcssa.ph, %._crit_edge539.loopexit.unr-lcssa ], [ %indvars.iv.next638.epil, %507 ], [ %indvars.iv.next638.epil, %.lr.ph538.epil ]
  %508 = trunc nsw i64 %indvars.iv.next638.lcssa to i32
  br label %._crit_edge539

._crit_edge539:                                   ; preds = %._crit_edge539.loopexit, %.preheader507
  %.1468.lcssa = phi i32 [ %460, %.preheader507 ], [ %508, %._crit_edge539.loopexit ]
  %509 = sext i32 %.1468.lcssa to i64
  %510 = getelementptr inbounds i32, ptr %59, i64 %509
  store i32 -1, ptr %510, align 4, !tbaa !38
  %511 = getelementptr inbounds i8, ptr %0, i64 388
  store i32 0, ptr %511, align 4, !tbaa !68
  br i1 %spec.select, label %512, label %.thread

512:                                              ; preds = %._crit_edge539
  %.not492 = icmp sgt i32 %.8.lcssa, %21
  br i1 %.not492, label %.preheader504, label %515

.preheader504:                                    ; preds = %512
  %513 = icmp sgt i32 %16, 0
  br i1 %513, label %.lr.ph556.preheader, label %.thread.sink.split

.lr.ph556.preheader:                              ; preds = %.preheader504
  %.promoted548 = load i32, ptr %10, align 4, !tbaa !38
  %514 = zext nneg i32 %16 to i64
  br label %.lr.ph556

515:                                              ; preds = %512
  %516 = load i32, ptr %299, align 4, !tbaa !42
  %517 = add nsw i32 %516, 1
  store i32 %517, ptr %299, align 4, !tbaa !42
  %518 = call i32 @lu_solve_symbolic(i32 noundef %12, ptr noundef %43, ptr noundef null, ptr noundef nonnull %59, i32 noundef %.8.lcssa, ptr noundef %75, ptr noundef %73, ptr noundef %79, ptr noundef %67, i32 noundef %517) #4
  %519 = sub nsw i32 %12, %518
  %520 = sext i32 %518 to i64
  %521 = getelementptr inbounds i32, ptr %73, i64 %520
  %522 = call i32 @lu_solve_triangular(i32 noundef %519, ptr noundef %521, ptr noundef %43, ptr noundef null, ptr noundef nonnull %59, ptr noundef %61, ptr noundef %53, double noundef %23, ptr noundef %77, ptr noundef nonnull %5, ptr noundef nonnull %10) #4
  %523 = icmp sgt i32 %522, 0
  br i1 %523, label %.lr.ph543.preheader, label %.thread.sink.split

.lr.ph543.preheader:                              ; preds = %515
  %wide.trip.count647 = zext nneg i32 %522 to i64
  %xtraiter719 = and i64 %wide.trip.count647, 1
  %524 = icmp eq i32 %522, 1
  br i1 %524, label %.thread.sink.split.loopexit701.unr-lcssa, label %.lr.ph543.preheader.new

.lr.ph543.preheader.new:                          ; preds = %.lr.ph543.preheader
  %unroll_iter722 = and i64 %wide.trip.count647, 2147483646
  br label %.lr.ph543

.lr.ph543:                                        ; preds = %.lr.ph543, %.lr.ph543.preheader.new
  %indvars.iv644 = phi i64 [ 0, %.lr.ph543.preheader.new ], [ %indvars.iv.next645.1, %.lr.ph543 ]
  %niter723 = phi i64 [ 0, %.lr.ph543.preheader.new ], [ %niter723.next.1, %.lr.ph543 ]
  %525 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv644
  %526 = load i32, ptr %525, align 4, !tbaa !38
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds i32, ptr %29, i64 %527
  %529 = load i32, ptr %528, align 4, !tbaa !38
  store i32 %529, ptr %525, align 4, !tbaa !38
  %530 = getelementptr inbounds double, ptr %77, i64 %527
  %531 = load double, ptr %530, align 8, !tbaa !44
  %532 = sext i32 %529 to i64
  %533 = getelementptr inbounds double, ptr %6, i64 %532
  store double %531, ptr %533, align 8, !tbaa !44
  store double 0.000000e+00, ptr %530, align 8, !tbaa !44
  %indvars.iv.next645 = or disjoint i64 %indvars.iv644, 1
  %534 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv.next645
  %535 = load i32, ptr %534, align 4, !tbaa !38
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds i32, ptr %29, i64 %536
  %538 = load i32, ptr %537, align 4, !tbaa !38
  store i32 %538, ptr %534, align 4, !tbaa !38
  %539 = getelementptr inbounds double, ptr %77, i64 %536
  %540 = load double, ptr %539, align 8, !tbaa !44
  %541 = sext i32 %538 to i64
  %542 = getelementptr inbounds double, ptr %6, i64 %541
  store double %540, ptr %542, align 8, !tbaa !44
  store double 0.000000e+00, ptr %539, align 8, !tbaa !44
  %indvars.iv.next645.1 = add nuw nsw i64 %indvars.iv644, 2
  %niter723.next.1 = add i64 %niter723, 2
  %niter723.ncmp.1 = icmp eq i64 %niter723.next.1, %unroll_iter722
  br i1 %niter723.ncmp.1, label %.thread.sink.split.loopexit701.unr-lcssa, label %.lr.ph543, !llvm.loop !69

.lr.ph556:                                        ; preds = %.lr.ph556.preheader, %583
  %indvars.iv652 = phi i64 [ %514, %.lr.ph556.preheader ], [ %indvars.iv.next653, %583 ]
  %.10554 = phi i32 [ 0, %.lr.ph556.preheader ], [ %.11, %583 ]
  %.promoted551553 = phi i32 [ %.promoted548, %.lr.ph556.preheader ], [ %.promoted549, %583 ]
  %indvars.iv.next653 = add nsw i64 %indvars.iv652, -1
  %543 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv.next653
  %544 = load i32, ptr %543, align 4, !tbaa !38
  %545 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv.next653
  %546 = load i32, ptr %545, align 4, !tbaa !38
  %547 = sext i32 %544 to i64
  %548 = getelementptr inbounds double, ptr %77, i64 %547
  %549 = load double, ptr %548, align 8, !tbaa !44
  %550 = fcmp une double %549, 0.000000e+00
  br i1 %550, label %551, label %583

551:                                              ; preds = %.lr.ph556
  %552 = getelementptr inbounds double, ptr %53, i64 %547
  %553 = load double, ptr %552, align 8, !tbaa !44
  %554 = fdiv double %549, %553
  store double 0.000000e+00, ptr %548, align 8, !tbaa !44
  %555 = getelementptr inbounds i32, ptr %43, i64 %547
  %556 = load i32, ptr %555, align 4, !tbaa !38
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds i32, ptr %59, i64 %557
  %559 = load i32, ptr %558, align 4, !tbaa !38
  %560 = icmp sgt i32 %559, -1
  br i1 %560, label %.lr.ph546, label %._crit_edge547

.lr.ph546:                                        ; preds = %551
  %561 = fneg double %554
  br label %562

562:                                              ; preds = %.lr.ph546, %562
  %indvars.iv649 = phi i64 [ %557, %.lr.ph546 ], [ %indvars.iv.next650, %562 ]
  %563 = phi i32 [ %559, %.lr.ph546 ], [ %573, %562 ]
  %564 = phi i32 [ %.promoted551553, %.lr.ph546 ], [ %571, %562 ]
  %565 = getelementptr inbounds double, ptr %61, i64 %indvars.iv649
  %566 = load double, ptr %565, align 8, !tbaa !44
  %567 = zext nneg i32 %563 to i64
  %568 = getelementptr inbounds double, ptr %77, i64 %567
  %569 = load double, ptr %568, align 8, !tbaa !44
  %570 = call double @llvm.fmuladd.f64(double %561, double %566, double %569)
  store double %570, ptr %568, align 8, !tbaa !44
  %571 = add nsw i32 %564, 1
  store i32 %571, ptr %10, align 4, !tbaa !38
  %indvars.iv.next650 = add nsw i64 %indvars.iv649, 1
  %572 = getelementptr inbounds i32, ptr %59, i64 %indvars.iv.next650
  %573 = load i32, ptr %572, align 4, !tbaa !38
  %574 = icmp sgt i32 %573, -1
  br i1 %574, label %562, label %._crit_edge547, !llvm.loop !70

._crit_edge547:                                   ; preds = %562, %551
  %.promoted550 = phi i32 [ %.promoted551553, %551 ], [ %571, %562 ]
  %575 = call double @llvm.fabs.f64(double %554)
  %576 = fcmp ogt double %575, %23
  br i1 %576, label %577, label %583

577:                                              ; preds = %._crit_edge547
  %578 = add nsw i32 %.10554, 1
  %579 = sext i32 %.10554 to i64
  %580 = getelementptr inbounds i32, ptr %5, i64 %579
  store i32 %546, ptr %580, align 4, !tbaa !38
  %581 = sext i32 %546 to i64
  %582 = getelementptr inbounds double, ptr %6, i64 %581
  store double %554, ptr %582, align 8, !tbaa !44
  br label %583

583:                                              ; preds = %.lr.ph556, %577, %._crit_edge547
  %.promoted549 = phi i32 [ %.promoted550, %577 ], [ %.promoted550, %._crit_edge547 ], [ %.promoted551553, %.lr.ph556 ]
  %.11 = phi i32 [ %578, %577 ], [ %.10554, %._crit_edge547 ], [ %.10554, %.lr.ph556 ]
  %584 = icmp sgt i64 %indvars.iv652, 1
  br i1 %584, label %.lr.ph556, label %.thread.sink.split, !llvm.loop !71

._crit_edge535.loopexit.unr-lcssa:                ; preds = %.lr.ph534, %.lr.ph534.preheader
  %indvars.iv630.unr = phi i64 [ 0, %.lr.ph534.preheader ], [ %indvars.iv.next631.3, %.lr.ph534 ]
  %lcmp.mod710.not = icmp eq i64 %xtraiter708, 0
  br i1 %lcmp.mod710.not, label %._crit_edge535, label %.lr.ph534.epil

.lr.ph534.epil:                                   ; preds = %._crit_edge535.loopexit.unr-lcssa, %.lr.ph534.epil
  %indvars.iv630.epil = phi i64 [ %indvars.iv.next631.epil, %.lr.ph534.epil ], [ %indvars.iv630.unr, %._crit_edge535.loopexit.unr-lcssa ]
  %epil.iter709 = phi i64 [ %epil.iter709.next, %.lr.ph534.epil ], [ 0, %._crit_edge535.loopexit.unr-lcssa ]
  %585 = getelementptr inbounds i32, ptr %75, i64 %indvars.iv630.epil
  %586 = load i32, ptr %585, align 4, !tbaa !38
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds double, ptr %77, i64 %587
  store double 0.000000e+00, ptr %588, align 8, !tbaa !44
  %indvars.iv.next631.epil = add nuw nsw i64 %indvars.iv630.epil, 1
  %epil.iter709.next = add i64 %epil.iter709, 1
  %epil.iter709.cmp.not = icmp eq i64 %epil.iter709.next, %xtraiter708
  br i1 %epil.iter709.cmp.not, label %._crit_edge535, label %.lr.ph534.epil, !llvm.loop !72

._crit_edge535:                                   ; preds = %._crit_edge535.loopexit.unr-lcssa, %.lr.ph534.epil, %.preheader508
  %589 = sub i32 %462, %461
  %590 = getelementptr inbounds i8, ptr %0, i64 92
  store i32 %589, ptr %590, align 4, !tbaa !73
  br label %615

.thread.sink.split.loopexit701.unr-lcssa:         ; preds = %.lr.ph543, %.lr.ph543.preheader
  %indvars.iv644.unr = phi i64 [ 0, %.lr.ph543.preheader ], [ %indvars.iv.next645.1, %.lr.ph543 ]
  %lcmp.mod721.not = icmp eq i64 %xtraiter719, 0
  br i1 %lcmp.mod721.not, label %.thread.sink.split, label %.lr.ph543.epil

.lr.ph543.epil:                                   ; preds = %.thread.sink.split.loopexit701.unr-lcssa
  %591 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv644.unr
  %592 = load i32, ptr %591, align 4, !tbaa !38
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds i32, ptr %29, i64 %593
  %595 = load i32, ptr %594, align 4, !tbaa !38
  store i32 %595, ptr %591, align 4, !tbaa !38
  %596 = getelementptr inbounds double, ptr %77, i64 %593
  %597 = load double, ptr %596, align 8, !tbaa !44
  %598 = sext i32 %595 to i64
  %599 = getelementptr inbounds double, ptr %6, i64 %598
  store double %597, ptr %599, align 8, !tbaa !44
  store double 0.000000e+00, ptr %596, align 8, !tbaa !44
  br label %.thread.sink.split

.thread.sink.split:                               ; preds = %.lr.ph543.epil, %.thread.sink.split.loopexit701.unr-lcssa, %583, %293, %.preheader504, %515, %251, %.preheader
  %.12.sink = phi i32 [ %258, %251 ], [ 0, %.preheader ], [ 0, %.preheader504 ], [ %522, %515 ], [ %.7, %293 ], [ %.11, %583 ], [ %522, %.thread.sink.split.loopexit701.unr-lcssa ], [ %522, %.lr.ph543.epil ]
  %.4466.ph = phi i32 [ %.0462.lcssa, %251 ], [ %.0462.lcssa, %.preheader ], [ %456, %.preheader504 ], [ %456, %515 ], [ %.0462.lcssa, %293 ], [ %456, %583 ], [ %456, %.thread.sink.split.loopexit701.unr-lcssa ], [ %456, %.lr.ph543.epil ]
  store i32 %.12.sink, ptr %4, align 4, !tbaa !38
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %._crit_edge539, %._crit_edge565
  %.4466 = phi i32 [ 0, %._crit_edge565 ], [ %456, %._crit_edge539 ], [ %.4466.ph, %.thread.sink.split ]
  %600 = load i32, ptr %9, align 4, !tbaa !38
  %601 = getelementptr inbounds i8, ptr %0, i64 224
  %602 = load i32, ptr %601, align 8, !tbaa !74
  %603 = add nsw i32 %602, %600
  store i32 %603, ptr %601, align 8, !tbaa !74
  %604 = load i32, ptr %10, align 4, !tbaa !38
  %605 = getelementptr inbounds i8, ptr %0, i64 228
  %606 = load i32, ptr %605, align 4, !tbaa !75
  %607 = add nsw i32 %606, %604
  store i32 %607, ptr %605, align 4, !tbaa !75
  %608 = getelementptr inbounds i8, ptr %0, i64 232
  %609 = load i32, ptr %608, align 8, !tbaa !76
  %610 = add nsw i32 %609, %.4466
  store i32 %610, ptr %608, align 8, !tbaa !76
  %611 = sitofp i32 %.4466 to double
  %612 = getelementptr inbounds i8, ptr %0, i64 160
  %613 = load double, ptr %612, align 8, !tbaa !77
  %614 = fadd double %613, %611
  store double %614, ptr %612, align 8, !tbaa !77
  br label %615

615:                                              ; preds = %._crit_edge535, %295, %.thread
  %.2 = phi i32 [ 1, %295 ], [ 0, %.thread ], [ 1, %._crit_edge535 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #4
  ret i32 %.2
}

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

declare i32 @lu_solve_symbolic(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

declare i32 @lu_solve_triangular(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !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 104}
!13 = !{!6, !7, i64 400}
!14 = !{!6, !10, i64 72}
!15 = !{!6, !10, i64 16}
!16 = !{!6, !11, i64 592}
!17 = !{!6, !11, i64 608}
!18 = !{!6, !11, i64 624}
!19 = !{!6, !11, i64 512}
!20 = !{!6, !11, i64 472}
!21 = !{!6, !11, i64 488}
!22 = !{!6, !11, i64 544}
!23 = !{!6, !11, i64 560}
!24 = !{!6, !11, i64 576}
!25 = !{!6, !11, i64 640}
!26 = !{!6, !11, i64 504}
!27 = !{!6, !11, i64 536}
!28 = !{!6, !11, i64 552}
!29 = !{!6, !11, i64 680}
!30 = !{!6, !11, i64 688}
!31 = !{!6, !11, i64 416}
!32 = !{!6, !11, i64 440}
!33 = !{!6, !11, i64 424}
!34 = !{!6, !11, i64 448}
!35 = !{!6, !11, i64 432}
!36 = !{!6, !11, i64 456}
!37 = !{!6, !11, i64 656}
!38 = !{!7, !7, i64 0}
!39 = !{!6, !11, i64 528}
!40 = !{!6, !11, i64 664}
!41 = !{!6, !11, i64 672}
!42 = !{!6, !7, i64 396}
!43 = !{!6, !7, i64 0}
!44 = !{!10, !10, i64 0}
!45 = distinct !{!45, !46}
!46 = !{!"llvm.loop.unroll.disable"}
!47 = distinct !{!47, !48}
!48 = !{!"llvm.loop.mustprogress"}
!49 = distinct !{!49, !48}
!50 = !{!6, !7, i64 392}
!51 = distinct !{!51, !48}
!52 = distinct !{!52, !48}
!53 = distinct !{!53, !48}
!54 = distinct !{!54, !48}
!55 = distinct !{!55, !48}
!56 = !{!6, !7, i64 88}
!57 = distinct !{!57, !48}
!58 = distinct !{!58, !46}
!59 = distinct !{!59, !46}
!60 = distinct !{!60, !48}
!61 = distinct !{!61, !48}
!62 = distinct !{!62, !46}
!63 = distinct !{!63, !48}
!64 = distinct !{!64, !48}
!65 = !{!6, !7, i64 4}
!66 = distinct !{!66, !48}
!67 = distinct !{!67, !48}
!68 = !{!6, !7, i64 388}
!69 = distinct !{!69, !48}
!70 = distinct !{!70, !48}
!71 = distinct !{!71, !48}
!72 = distinct !{!72, !46}
!73 = !{!6, !7, i64 92}
!74 = !{!6, !7, i64 224}
!75 = !{!6, !7, i64 228}
!76 = !{!6, !7, i64 232}
!77 = !{!6, !10, i64 160}


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