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

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

156:                                              ; preds = %8
  %157 = load i8, ptr %16, align 1, !tbaa !11
  %158 = sext i8 %157 to i32
  %159 = icmp eq i32 %158, 84
  br i1 %159, label %160, label %479

160:                                              ; preds = %156, %8
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #4
  %161 = load ptr, ptr %9, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.lu, ptr %161, i32 0, i32 85
  %163 = load ptr, ptr %162, align 8, !tbaa !42
  store ptr %163, ptr %60, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #4
  %164 = load ptr, ptr %9, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.lu, ptr %164, i32 0, i32 85
  %166 = load ptr, ptr %165, align 8, !tbaa !42
  %167 = load i32, ptr %17, align 4, !tbaa !9
  %168 = sext i32 %167 to i64
  %169 = getelementptr inbounds i32, ptr %166, i64 %168
  store ptr %169, ptr %61, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %62) #4
  %170 = load ptr, ptr %9, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.lu, ptr %170, i32 0, i32 102
  %172 = load ptr, ptr %171, align 8, !tbaa !43
  store ptr %172, ptr %62, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %63) #4
  %173 = load ptr, ptr %9, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.lu, ptr %173, i32 0, i32 103
  %175 = load ptr, ptr %174, align 8, !tbaa !44
  store ptr %175, ptr %63, align 8, !tbaa !5
  %176 = load ptr, ptr %9, align 8, !tbaa !5
  %177 = getelementptr inbounds %struct.lu, ptr %176, i32 0, i32 66
  %178 = load i32, ptr %177, align 4, !tbaa !45
  %179 = add nsw i32 %178, 1
  store i32 %179, ptr %177, align 4, !tbaa !45
  store i32 %179, ptr %55, align 4, !tbaa !9
  %180 = load i32, ptr %17, align 4, !tbaa !9
  %181 = load ptr, ptr %33, align 8, !tbaa !5
  %182 = load ptr, ptr %34, align 8, !tbaa !5
  %183 = load ptr, ptr %41, align 8, !tbaa !5
  %184 = load i32, ptr %10, align 4, !tbaa !9
  %185 = load ptr, ptr %11, align 8, !tbaa !5
  %186 = load ptr, ptr %60, align 8, !tbaa !5
  %187 = load ptr, ptr %63, align 8, !tbaa !5
  %188 = load ptr, ptr %43, align 8, !tbaa !5
  %189 = load i32, ptr %55, align 4, !tbaa !9
  %190 = call i32 @lu_solve_symbolic(i32 noundef %180, ptr noundef %181, ptr noundef %182, ptr noundef %183, i32 noundef %184, ptr noundef %185, ptr noundef %186, ptr noundef %187, ptr noundef %188, i32 noundef %189)
  store i32 %190, ptr %49, align 4, !tbaa !9
  %191 = load i32, ptr %17, align 4, !tbaa !9
  %192 = load i32, ptr %49, align 4, !tbaa !9
  %193 = sub nsw i32 %191, %192
  store i32 %193, ptr %54, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %194

194:                                              ; preds = %212, %160
  %195 = load i32, ptr %47, align 4, !tbaa !9
  %196 = load i32, ptr %10, align 4, !tbaa !9
  %197 = icmp slt i32 %195, %196
  br i1 %197, label %198, label %215

198:                                              ; preds = %194
  %199 = load ptr, ptr %12, align 8, !tbaa !5
  %200 = load i32, ptr %47, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds double, ptr %199, i64 %201
  %203 = load double, ptr %202, align 8, !tbaa !19
  %204 = load ptr, ptr %62, align 8, !tbaa !5
  %205 = load ptr, ptr %11, align 8, !tbaa !5
  %206 = load i32, ptr %47, 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
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds double, ptr %204, i64 %210
  store double %203, ptr %211, align 8, !tbaa !19
  br label %212

212:                                              ; preds = %198
  %213 = load i32, ptr %47, align 4, !tbaa !9
  %214 = add nsw i32 %213, 1
  store i32 %214, ptr %47, align 4, !tbaa !9
  br label %194, !llvm.loop !46

215:                                              ; preds = %194
  %216 = load i32, ptr %54, align 4, !tbaa !9
  %217 = load ptr, ptr %60, align 8, !tbaa !5
  %218 = load i32, ptr %49, align 4, !tbaa !9
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %217, i64 %219
  %221 = load ptr, ptr %33, align 8, !tbaa !5
  %222 = load ptr, ptr %34, align 8, !tbaa !5
  %223 = load ptr, ptr %41, align 8, !tbaa !5
  %224 = load ptr, ptr %42, align 8, !tbaa !5
  %225 = load ptr, ptr %35, align 8, !tbaa !5
  %226 = load double, ptr %21, align 8, !tbaa !19
  %227 = load ptr, ptr %62, align 8, !tbaa !5
  %228 = load ptr, ptr %61, align 8, !tbaa !5
  %229 = call i32 @lu_solve_triangular(i32 noundef %216, ptr noundef %220, ptr noundef %221, ptr noundef %222, ptr noundef %223, ptr noundef %224, ptr noundef %225, double noundef %226, ptr noundef %227, ptr noundef %228, ptr noundef %58)
  store i32 %229, ptr %53, align 4, !tbaa !9
  %230 = load ptr, ptr %9, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.lu, ptr %230, i32 0, i32 66
  %232 = load i32, ptr %231, align 4, !tbaa !45
  %233 = add nsw i32 %232, 1
  store i32 %233, ptr %231, align 4, !tbaa !45
  store i32 %233, ptr %55, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %234

234:                                              ; preds = %272, %215
  %235 = load i32, ptr %47, align 4, !tbaa !9
  %236 = load i32, ptr %53, align 4, !tbaa !9
  %237 = icmp slt i32 %235, %236
  br i1 %237, label %238, label %275

238:                                              ; preds = %234
  %239 = load ptr, ptr %61, align 8, !tbaa !5
  %240 = load i32, ptr %47, align 4, !tbaa !9
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds i32, ptr %239, i64 %241
  %243 = load i32, ptr %242, align 4, !tbaa !9
  store i32 %243, ptr %45, align 4, !tbaa !9
  %244 = load ptr, ptr %23, align 8, !tbaa !5
  %245 = load i32, ptr %45, align 4, !tbaa !9
  %246 = sext i32 %245 to i64
  %247 = getelementptr inbounds i32, ptr %244, i64 %246
  %248 = load i32, ptr %247, align 4, !tbaa !9
  store i32 %248, ptr %44, align 4, !tbaa !9
  %249 = load i32, ptr %44, align 4, !tbaa !9
  %250 = load ptr, ptr %61, align 8, !tbaa !5
  %251 = load i32, ptr %47, align 4, !tbaa !9
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %250, i64 %252
  store i32 %249, ptr %253, align 4, !tbaa !9
  %254 = load ptr, ptr %62, align 8, !tbaa !5
  %255 = load i32, ptr %45, align 4, !tbaa !9
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds double, ptr %254, i64 %256
  %258 = load double, ptr %257, align 8, !tbaa !19
  %259 = load ptr, ptr %15, align 8, !tbaa !5
  %260 = load i32, ptr %44, align 4, !tbaa !9
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds double, ptr %259, i64 %261
  store double %258, ptr %262, align 8, !tbaa !19
  %263 = load ptr, ptr %62, align 8, !tbaa !5
  %264 = load i32, ptr %45, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds double, ptr %263, i64 %265
  store double 0.000000e+00, ptr %266, align 8, !tbaa !19
  %267 = load i32, ptr %55, align 4, !tbaa !9
  %268 = load ptr, ptr %43, align 8, !tbaa !5
  %269 = load i32, ptr %44, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i32, ptr %268, i64 %270
  store i32 %267, ptr %271, align 4, !tbaa !9
  br label %272

272:                                              ; preds = %238
  %273 = load i32, ptr %47, align 4, !tbaa !9
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %47, align 4, !tbaa !9
  br label %234, !llvm.loop !48

275:                                              ; preds = %234
  %276 = load i32, ptr %18, align 4, !tbaa !9
  %277 = sub nsw i32 %276, 1
  store i32 %277, ptr %48, align 4, !tbaa !9
  br label %278

278:                                              ; preds = %359, %275
  %279 = load i32, ptr %48, align 4, !tbaa !9
  %280 = icmp sge i32 %279, 0
  br i1 %280, label %281, label %362

281:                                              ; preds = %278
  %282 = load ptr, ptr %25, align 8, !tbaa !5
  %283 = load i32, ptr %48, align 4, !tbaa !9
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds i32, ptr %282, i64 %284
  %286 = load i32, ptr %285, align 4, !tbaa !9
  store i32 %286, ptr %51, align 4, !tbaa !9
  %287 = load ptr, ptr %15, align 8, !tbaa !5
  %288 = load i32, ptr %51, align 4, !tbaa !9
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds double, ptr %287, i64 %289
  %291 = load double, ptr %290, align 8, !tbaa !19
  %292 = fcmp une double %291, 0.000000e+00
  br i1 %292, label %293, label %358

293:                                              ; preds = %281
  %294 = load ptr, ptr %15, align 8, !tbaa !5
  %295 = load i32, ptr %51, align 4, !tbaa !9
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds double, ptr %294, i64 %296
  %298 = load double, ptr %297, align 8, !tbaa !19
  store double %298, ptr %56, align 8, !tbaa !19
  %299 = load ptr, ptr %32, align 8, !tbaa !5
  %300 = load i32, ptr %48, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i32, ptr %299, i64 %301
  %303 = load i32, ptr %302, align 4, !tbaa !9
  store i32 %303, ptr %50, align 4, !tbaa !9
  br label %304

304:                                              ; preds = %354, %293
  %305 = load i32, ptr %50, align 4, !tbaa !9
  %306 = load ptr, ptr %32, align 8, !tbaa !5
  %307 = load i32, ptr %48, align 4, !tbaa !9
  %308 = add nsw i32 %307, 1
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %306, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !9
  %312 = icmp slt i32 %305, %311
  br i1 %312, label %313, label %357

313:                                              ; preds = %304
  %314 = load ptr, ptr %37, align 8, !tbaa !5
  %315 = load i32, ptr %50, align 4, !tbaa !9
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds i32, ptr %314, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !9
  store i32 %318, ptr %44, align 4, !tbaa !9
  %319 = load ptr, ptr %43, align 8, !tbaa !5
  %320 = load i32, ptr %44, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %319, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !9
  %324 = load i32, ptr %55, align 4, !tbaa !9
  %325 = icmp ne i32 %323, %324
  br i1 %325, label %326, label %338

326:                                              ; preds = %313
  %327 = load i32, ptr %55, align 4, !tbaa !9
  %328 = load ptr, ptr %43, align 8, !tbaa !5
  %329 = load i32, ptr %44, align 4, !tbaa !9
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %328, i64 %330
  store i32 %327, ptr %331, align 4, !tbaa !9
  %332 = load i32, ptr %44, align 4, !tbaa !9
  %333 = load ptr, ptr %61, align 8, !tbaa !5
  %334 = load i32, ptr %53, align 4, !tbaa !9
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %53, align 4, !tbaa !9
  %336 = sext i32 %334 to i64
  %337 = getelementptr inbounds i32, ptr %333, i64 %336
  store i32 %332, ptr %337, align 4, !tbaa !9
  br label %338

338:                                              ; preds = %326, %313
  %339 = load double, ptr %56, align 8, !tbaa !19
  %340 = load ptr, ptr %38, align 8, !tbaa !5
  %341 = load i32, ptr %50, align 4, !tbaa !9
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds double, ptr %340, i64 %342
  %344 = load double, ptr %343, align 8, !tbaa !19
  %345 = load ptr, ptr %15, align 8, !tbaa !5
  %346 = load i32, ptr %44, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds double, ptr %345, i64 %347
  %349 = load double, ptr %348, align 8, !tbaa !19
  %350 = fneg double %339
  %351 = call double @llvm.fmuladd.f64(double %350, double %344, double %349)
  store double %351, ptr %348, align 8, !tbaa !19
  %352 = load i32, ptr %59, align 4, !tbaa !9
  %353 = add nsw i32 %352, 1
  store i32 %353, ptr %59, align 4, !tbaa !9
  br label %354

354:                                              ; preds = %338
  %355 = load i32, ptr %50, align 4, !tbaa !9
  %356 = add nsw i32 %355, 1
  store i32 %356, ptr %50, align 4, !tbaa !9
  br label %304, !llvm.loop !49

357:                                              ; preds = %304
  br label %358

358:                                              ; preds = %357, %281
  br label %359

359:                                              ; preds = %358
  %360 = load i32, ptr %48, align 4, !tbaa !9
  %361 = add nsw i32 %360, -1
  store i32 %361, ptr %48, align 4, !tbaa !9
  br label %278, !llvm.loop !50

362:                                              ; preds = %278
  %363 = load i32, ptr %53, align 4, !tbaa !9
  %364 = load i32, ptr %20, align 4, !tbaa !9
  %365 = icmp sle i32 %363, %364
  br i1 %365, label %366, label %398

366:                                              ; preds = %362
  %367 = load ptr, ptr %9, align 8, !tbaa !5
  %368 = getelementptr inbounds %struct.lu, ptr %367, i32 0, i32 66
  %369 = load i32, ptr %368, align 4, !tbaa !45
  %370 = add nsw i32 %369, 1
  store i32 %370, ptr %368, align 4, !tbaa !45
  store i32 %370, ptr %55, align 4, !tbaa !9
  %371 = load i32, ptr %17, align 4, !tbaa !9
  %372 = load ptr, ptr %29, align 8, !tbaa !5
  %373 = load ptr, ptr %37, align 8, !tbaa !5
  %374 = load i32, ptr %53, align 4, !tbaa !9
  %375 = load ptr, ptr %61, align 8, !tbaa !5
  %376 = load ptr, ptr %60, align 8, !tbaa !5
  %377 = load ptr, ptr %63, align 8, !tbaa !5
  %378 = load ptr, ptr %43, align 8, !tbaa !5
  %379 = load i32, ptr %55, align 4, !tbaa !9
  %380 = call i32 @lu_solve_symbolic(i32 noundef %371, ptr noundef %372, ptr noundef null, ptr noundef %373, i32 noundef %374, ptr noundef %375, ptr noundef %376, ptr noundef %377, ptr noundef %378, i32 noundef %379)
  store i32 %380, ptr %49, align 4, !tbaa !9
  %381 = load i32, ptr %17, align 4, !tbaa !9
  %382 = load i32, ptr %49, align 4, !tbaa !9
  %383 = sub nsw i32 %381, %382
  store i32 %383, ptr %54, align 4, !tbaa !9
  %384 = load i32, ptr %54, align 4, !tbaa !9
  %385 = load ptr, ptr %60, align 8, !tbaa !5
  %386 = load i32, ptr %49, align 4, !tbaa !9
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds i32, ptr %385, i64 %387
  %389 = load ptr, ptr %29, align 8, !tbaa !5
  %390 = load ptr, ptr %37, align 8, !tbaa !5
  %391 = load ptr, ptr %38, align 8, !tbaa !5
  %392 = load double, ptr %21, align 8, !tbaa !19
  %393 = load ptr, ptr %15, align 8, !tbaa !5
  %394 = load ptr, ptr %14, align 8, !tbaa !5
  %395 = call i32 @lu_solve_triangular(i32 noundef %384, ptr noundef %388, ptr noundef %389, ptr noundef null, ptr noundef %390, ptr noundef %391, ptr noundef null, double noundef %392, ptr noundef %393, ptr noundef %394, ptr noundef %57)
  store i32 %395, ptr %53, align 4, !tbaa !9
  %396 = load i32, ptr %53, align 4, !tbaa !9
  %397 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 %396, ptr %397, align 4, !tbaa !9
  br label %478

398:                                              ; preds = %362
  store i32 0, ptr %53, align 4, !tbaa !9
  %399 = load i32, ptr %17, align 4, !tbaa !9
  %400 = sub nsw i32 %399, 1
  store i32 %400, ptr %46, align 4, !tbaa !9
  br label %401

401:                                              ; preds = %472, %398
  %402 = load i32, ptr %46, align 4, !tbaa !9
  %403 = icmp sge i32 %402, 0
  br i1 %403, label %404, label %475

404:                                              ; preds = %401
  %405 = load ptr, ptr %22, align 8, !tbaa !5
  %406 = load i32, ptr %46, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !9
  store i32 %409, ptr %51, align 4, !tbaa !9
  %410 = load ptr, ptr %15, align 8, !tbaa !5
  %411 = load i32, ptr %51, align 4, !tbaa !9
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds double, ptr %410, i64 %412
  %414 = load double, ptr %413, align 8, !tbaa !19
  %415 = fcmp une double %414, 0.000000e+00
  br i1 %415, label %416, label %471

416:                                              ; preds = %404
  %417 = load ptr, ptr %15, align 8, !tbaa !5
  %418 = load i32, ptr %51, align 4, !tbaa !9
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds double, ptr %417, i64 %419
  %421 = load double, ptr %420, align 8, !tbaa !19
  store double %421, ptr %56, align 8, !tbaa !19
  %422 = load ptr, ptr %30, align 8, !tbaa !5
  %423 = load i32, ptr %46, align 4, !tbaa !9
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds i32, ptr %422, i64 %424
  %426 = load i32, ptr %425, align 4, !tbaa !9
  store i32 %426, ptr %50, align 4, !tbaa !9
  br label %427

427:                                              ; preds = %450, %416
  %428 = load ptr, ptr %37, align 8, !tbaa !5
  %429 = load i32, ptr %50, align 4, !tbaa !9
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds i32, ptr %428, i64 %430
  %432 = load i32, ptr %431, align 4, !tbaa !9
  store i32 %432, ptr %44, align 4, !tbaa !9
  %433 = icmp sge i32 %432, 0
  br i1 %433, label %434, label %453

434:                                              ; preds = %427
  %435 = load double, ptr %56, align 8, !tbaa !19
  %436 = load ptr, ptr %38, align 8, !tbaa !5
  %437 = load i32, ptr %50, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds double, ptr %436, i64 %438
  %440 = load double, ptr %439, align 8, !tbaa !19
  %441 = load ptr, ptr %15, align 8, !tbaa !5
  %442 = load i32, ptr %44, align 4, !tbaa !9
  %443 = sext i32 %442 to i64
  %444 = getelementptr inbounds double, ptr %441, i64 %443
  %445 = load double, ptr %444, align 8, !tbaa !19
  %446 = fneg double %435
  %447 = call double @llvm.fmuladd.f64(double %446, double %440, double %445)
  store double %447, ptr %444, align 8, !tbaa !19
  %448 = load i32, ptr %57, align 4, !tbaa !9
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %57, align 4, !tbaa !9
  br label %450

450:                                              ; preds = %434
  %451 = load i32, ptr %50, align 4, !tbaa !9
  %452 = add nsw i32 %451, 1
  store i32 %452, ptr %50, align 4, !tbaa !9
  br label %427, !llvm.loop !51

453:                                              ; preds = %427
  %454 = load double, ptr %56, align 8, !tbaa !19
  %455 = call double @llvm.fabs.f64(double %454)
  %456 = load double, ptr %21, align 8, !tbaa !19
  %457 = fcmp ogt double %455, %456
  br i1 %457, label %458, label %465

458:                                              ; preds = %453
  %459 = load i32, ptr %51, align 4, !tbaa !9
  %460 = load ptr, ptr %14, align 8, !tbaa !5
  %461 = load i32, ptr %53, align 4, !tbaa !9
  %462 = add nsw i32 %461, 1
  store i32 %462, ptr %53, align 4, !tbaa !9
  %463 = sext i32 %461 to i64
  %464 = getelementptr inbounds i32, ptr %460, i64 %463
  store i32 %459, ptr %464, align 4, !tbaa !9
  br label %470

465:                                              ; preds = %453
  %466 = load ptr, ptr %15, align 8, !tbaa !5
  %467 = load i32, ptr %51, align 4, !tbaa !9
  %468 = sext i32 %467 to i64
  %469 = getelementptr inbounds double, ptr %466, i64 %468
  store double 0.000000e+00, ptr %469, align 8, !tbaa !19
  br label %470

470:                                              ; preds = %465, %458
  br label %471

471:                                              ; preds = %470, %404
  br label %472

472:                                              ; preds = %471
  %473 = load i32, ptr %46, align 4, !tbaa !9
  %474 = add nsw i32 %473, -1
  store i32 %474, ptr %46, align 4, !tbaa !9
  br label %401, !llvm.loop !52

475:                                              ; preds = %401
  %476 = load i32, ptr %53, align 4, !tbaa !9
  %477 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 %476, ptr %477, align 4, !tbaa !9
  br label %478

478:                                              ; preds = %475, %366
  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 8, ptr %61) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #4
  br label %858

479:                                              ; preds = %156
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #4
  %480 = load ptr, ptr %9, align 8, !tbaa !5
  %481 = getelementptr inbounds %struct.lu, ptr %480, i32 0, i32 85
  %482 = load ptr, ptr %481, align 8, !tbaa !42
  store ptr %482, ptr %64, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %65) #4
  %483 = load ptr, ptr %9, align 8, !tbaa !5
  %484 = getelementptr inbounds %struct.lu, ptr %483, i32 0, i32 85
  %485 = load ptr, ptr %484, align 8, !tbaa !42
  %486 = load i32, ptr %17, align 4, !tbaa !9
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds i32, ptr %485, i64 %487
  store ptr %488, ptr %65, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #4
  %489 = load ptr, ptr %9, align 8, !tbaa !5
  %490 = getelementptr inbounds %struct.lu, ptr %489, i32 0, i32 102
  %491 = load ptr, ptr %490, align 8, !tbaa !43
  store ptr %491, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %67) #4
  %492 = load ptr, ptr %9, align 8, !tbaa !5
  %493 = getelementptr inbounds %struct.lu, ptr %492, i32 0, i32 103
  %494 = load ptr, ptr %493, align 8, !tbaa !44
  store ptr %494, ptr %67, align 8, !tbaa !5
  %495 = load ptr, ptr %9, align 8, !tbaa !5
  %496 = getelementptr inbounds %struct.lu, ptr %495, i32 0, i32 66
  %497 = load i32, ptr %496, align 4, !tbaa !45
  %498 = add nsw i32 %497, 1
  store i32 %498, ptr %496, align 4, !tbaa !45
  store i32 %498, ptr %55, align 4, !tbaa !9
  %499 = load i32, ptr %17, align 4, !tbaa !9
  %500 = load ptr, ptr %28, align 8, !tbaa !5
  %501 = load ptr, ptr %37, align 8, !tbaa !5
  %502 = load i32, ptr %10, align 4, !tbaa !9
  %503 = load ptr, ptr %11, align 8, !tbaa !5
  %504 = load ptr, ptr %64, align 8, !tbaa !5
  %505 = load ptr, ptr %67, align 8, !tbaa !5
  %506 = load ptr, ptr %43, align 8, !tbaa !5
  %507 = load i32, ptr %55, align 4, !tbaa !9
  %508 = call i32 @lu_solve_symbolic(i32 noundef %499, ptr noundef %500, ptr noundef null, ptr noundef %501, i32 noundef %502, ptr noundef %503, ptr noundef %504, ptr noundef %505, ptr noundef %506, i32 noundef %507)
  store i32 %508, ptr %49, align 4, !tbaa !9
  %509 = load i32, ptr %17, align 4, !tbaa !9
  %510 = load i32, ptr %49, align 4, !tbaa !9
  %511 = sub nsw i32 %509, %510
  store i32 %511, ptr %54, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %512

512:                                              ; preds = %530, %479
  %513 = load i32, ptr %47, align 4, !tbaa !9
  %514 = load i32, ptr %10, align 4, !tbaa !9
  %515 = icmp slt i32 %513, %514
  br i1 %515, label %516, label %533

516:                                              ; preds = %512
  %517 = load ptr, ptr %12, align 8, !tbaa !5
  %518 = load i32, ptr %47, align 4, !tbaa !9
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds double, ptr %517, i64 %519
  %521 = load double, ptr %520, align 8, !tbaa !19
  %522 = load ptr, ptr %66, align 8, !tbaa !5
  %523 = load ptr, ptr %11, align 8, !tbaa !5
  %524 = load i32, ptr %47, align 4, !tbaa !9
  %525 = sext i32 %524 to i64
  %526 = getelementptr inbounds i32, ptr %523, i64 %525
  %527 = load i32, ptr %526, align 4, !tbaa !9
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds double, ptr %522, i64 %528
  store double %521, ptr %529, align 8, !tbaa !19
  br label %530

530:                                              ; preds = %516
  %531 = load i32, ptr %47, align 4, !tbaa !9
  %532 = add nsw i32 %531, 1
  store i32 %532, ptr %47, align 4, !tbaa !9
  br label %512, !llvm.loop !53

533:                                              ; preds = %512
  %534 = load i32, ptr %54, align 4, !tbaa !9
  %535 = load ptr, ptr %64, align 8, !tbaa !5
  %536 = load i32, ptr %49, align 4, !tbaa !9
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds i32, ptr %535, i64 %537
  %539 = load ptr, ptr %28, align 8, !tbaa !5
  %540 = load ptr, ptr %37, align 8, !tbaa !5
  %541 = load ptr, ptr %38, align 8, !tbaa !5
  %542 = load double, ptr %21, align 8, !tbaa !19
  %543 = load ptr, ptr %66, align 8, !tbaa !5
  %544 = load ptr, ptr %65, align 8, !tbaa !5
  %545 = call i32 @lu_solve_triangular(i32 noundef %534, ptr noundef %538, ptr noundef %539, ptr noundef null, ptr noundef %540, ptr noundef %541, ptr noundef null, double noundef %542, ptr noundef %543, ptr noundef %544, ptr noundef %57)
  store i32 %545, ptr %53, align 4, !tbaa !9
  %546 = load i32, ptr %53, align 4, !tbaa !9
  %547 = load i32, ptr %54, align 4, !tbaa !9
  %548 = icmp slt i32 %546, %547
  br i1 %548, label %549, label %602

549:                                              ; preds = %533
  %550 = load i32, ptr %49, align 4, !tbaa !9
  store i32 %550, ptr %48, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %551

551:                                              ; preds = %579, %549
  %552 = load i32, ptr %47, align 4, !tbaa !9
  %553 = load i32, ptr %53, align 4, !tbaa !9
  %554 = icmp slt i32 %552, %553
  br i1 %554, label %555, label %582

555:                                              ; preds = %551
  %556 = load ptr, ptr %64, align 8, !tbaa !5
  %557 = load i32, ptr %48, align 4, !tbaa !9
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds i32, ptr %556, i64 %558
  %560 = load i32, ptr %559, align 4, !tbaa !9
  store i32 %560, ptr %44, align 4, !tbaa !9
  %561 = load i32, ptr %44, align 4, !tbaa !9
  %562 = load ptr, ptr %65, align 8, !tbaa !5
  %563 = load i32, ptr %47, align 4, !tbaa !9
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds i32, ptr %562, i64 %564
  %566 = load i32, ptr %565, align 4, !tbaa !9
  %567 = icmp eq i32 %561, %566
  br i1 %567, label %568, label %571

568:                                              ; preds = %555
  %569 = load i32, ptr %47, align 4, !tbaa !9
  %570 = add nsw i32 %569, 1
  store i32 %570, ptr %47, align 4, !tbaa !9
  br label %578

571:                                              ; preds = %555
  %572 = load ptr, ptr %43, align 8, !tbaa !5
  %573 = load i32, ptr %44, align 4, !tbaa !9
  %574 = sext i32 %573 to i64
  %575 = getelementptr inbounds i32, ptr %572, i64 %574
  %576 = load i32, ptr %575, align 4, !tbaa !9
  %577 = add nsw i32 %576, -1
  store i32 %577, ptr %575, align 4, !tbaa !9
  br label %578

578:                                              ; preds = %571, %568
  br label %579

579:                                              ; preds = %578
  %580 = load i32, ptr %48, align 4, !tbaa !9
  %581 = add nsw i32 %580, 1
  store i32 %581, ptr %48, align 4, !tbaa !9
  br label %551, !llvm.loop !54

582:                                              ; preds = %551
  br label %583

583:                                              ; preds = %598, %582
  %584 = load i32, ptr %48, align 4, !tbaa !9
  %585 = load i32, ptr %17, align 4, !tbaa !9
  %586 = icmp slt i32 %584, %585
  br i1 %586, label %587, label %601

587:                                              ; preds = %583
  %588 = load ptr, ptr %43, align 8, !tbaa !5
  %589 = load ptr, ptr %64, align 8, !tbaa !5
  %590 = load i32, ptr %48, align 4, !tbaa !9
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds i32, ptr %589, i64 %591
  %593 = load i32, ptr %592, align 4, !tbaa !9
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds i32, ptr %588, i64 %594
  %596 = load i32, ptr %595, align 4, !tbaa !9
  %597 = add nsw i32 %596, -1
  store i32 %597, ptr %595, align 4, !tbaa !9
  br label %598

598:                                              ; preds = %587
  %599 = load i32, ptr %48, align 4, !tbaa !9
  %600 = add nsw i32 %599, 1
  store i32 %600, ptr %48, align 4, !tbaa !9
  br label %583, !llvm.loop !55

601:                                              ; preds = %583
  br label %602

602:                                              ; preds = %601, %533
  %603 = load ptr, ptr %32, align 8, !tbaa !5
  %604 = getelementptr inbounds i32, ptr %603, i64 0
  %605 = load i32, ptr %604, align 4, !tbaa !9
  store i32 %605, ptr %50, align 4, !tbaa !9
  store i32 0, ptr %48, align 4, !tbaa !9
  br label %606

606:                                              ; preds = %676, %602
  %607 = load i32, ptr %48, align 4, !tbaa !9
  %608 = load i32, ptr %18, align 4, !tbaa !9
  %609 = icmp slt i32 %607, %608
  br i1 %609, label %610, label %679

610:                                              ; preds = %606
  %611 = load ptr, ptr %25, align 8, !tbaa !5
  %612 = load i32, ptr %48, align 4, !tbaa !9
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds i32, ptr %611, i64 %613
  %615 = load i32, ptr %614, align 4, !tbaa !9
  store i32 %615, ptr %51, align 4, !tbaa !9
  store double 0.000000e+00, ptr %56, align 8, !tbaa !19
  br label %616

616:                                              ; preds = %642, %610
  %617 = load i32, ptr %50, align 4, !tbaa !9
  %618 = load ptr, ptr %32, align 8, !tbaa !5
  %619 = load i32, ptr %48, align 4, !tbaa !9
  %620 = add nsw i32 %619, 1
  %621 = sext i32 %620 to i64
  %622 = getelementptr inbounds i32, ptr %618, i64 %621
  %623 = load i32, ptr %622, align 4, !tbaa !9
  %624 = icmp slt i32 %617, %623
  br i1 %624, label %625, label %645

625:                                              ; preds = %616
  %626 = load ptr, ptr %66, align 8, !tbaa !5
  %627 = load ptr, ptr %37, align 8, !tbaa !5
  %628 = load i32, ptr %50, align 4, !tbaa !9
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %627, i64 %629
  %631 = load i32, ptr %630, align 4, !tbaa !9
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds double, ptr %626, i64 %632
  %634 = load double, ptr %633, align 8, !tbaa !19
  %635 = load ptr, ptr %38, align 8, !tbaa !5
  %636 = load i32, ptr %50, align 4, !tbaa !9
  %637 = sext i32 %636 to i64
  %638 = getelementptr inbounds double, ptr %635, i64 %637
  %639 = load double, ptr %638, align 8, !tbaa !19
  %640 = load double, ptr %56, align 8, !tbaa !19
  %641 = call double @llvm.fmuladd.f64(double %634, double %639, double %640)
  store double %641, ptr %56, align 8, !tbaa !19
  br label %642

642:                                              ; preds = %625
  %643 = load i32, ptr %50, align 4, !tbaa !9
  %644 = add nsw i32 %643, 1
  store i32 %644, ptr %50, align 4, !tbaa !9
  br label %616, !llvm.loop !56

645:                                              ; preds = %616
  %646 = load double, ptr %56, align 8, !tbaa !19
  %647 = load ptr, ptr %66, align 8, !tbaa !5
  %648 = load i32, ptr %51, align 4, !tbaa !9
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds double, ptr %647, i64 %649
  %651 = load double, ptr %650, align 8, !tbaa !19
  %652 = fsub double %651, %646
  store double %652, ptr %650, align 8, !tbaa !19
  %653 = load double, ptr %56, align 8, !tbaa !19
  %654 = fcmp une double %653, 0.000000e+00
  br i1 %654, label %655, label %675

655:                                              ; preds = %645
  %656 = load ptr, ptr %43, align 8, !tbaa !5
  %657 = load i32, ptr %51, align 4, !tbaa !9
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds i32, ptr %656, i64 %658
  %660 = load i32, ptr %659, align 4, !tbaa !9
  %661 = load i32, ptr %55, align 4, !tbaa !9
  %662 = icmp ne i32 %660, %661
  br i1 %662, label %663, label %675

663:                                              ; preds = %655
  %664 = load i32, ptr %55, align 4, !tbaa !9
  %665 = load ptr, ptr %43, align 8, !tbaa !5
  %666 = load i32, ptr %51, align 4, !tbaa !9
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds i32, ptr %665, i64 %667
  store i32 %664, ptr %668, align 4, !tbaa !9
  %669 = load i32, ptr %51, align 4, !tbaa !9
  %670 = load ptr, ptr %65, align 8, !tbaa !5
  %671 = load i32, ptr %53, align 4, !tbaa !9
  %672 = add nsw i32 %671, 1
  store i32 %672, ptr %53, align 4, !tbaa !9
  %673 = sext i32 %671 to i64
  %674 = getelementptr inbounds i32, ptr %670, i64 %673
  store i32 %669, ptr %674, align 4, !tbaa !9
  br label %675

675:                                              ; preds = %663, %655, %645
  br label %676

676:                                              ; preds = %675
  %677 = load i32, ptr %48, align 4, !tbaa !9
  %678 = add nsw i32 %677, 1
  store i32 %678, ptr %48, align 4, !tbaa !9
  br label %606, !llvm.loop !57

679:                                              ; preds = %606
  %680 = load ptr, ptr %32, align 8, !tbaa !5
  %681 = load i32, ptr %18, align 4, !tbaa !9
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds i32, ptr %680, i64 %682
  %684 = load i32, ptr %683, align 4, !tbaa !9
  %685 = load ptr, ptr %32, align 8, !tbaa !5
  %686 = getelementptr inbounds i32, ptr %685, i64 0
  %687 = load i32, ptr %686, align 4, !tbaa !9
  %688 = sub nsw i32 %684, %687
  %689 = load i32, ptr %59, align 4, !tbaa !9
  %690 = add nsw i32 %689, %688
  store i32 %690, ptr %59, align 4, !tbaa !9
  %691 = load i32, ptr %53, align 4, !tbaa !9
  %692 = load i32, ptr %20, align 4, !tbaa !9
  %693 = icmp sle i32 %691, %692
  br i1 %693, label %694, label %762

694:                                              ; preds = %679
  %695 = load ptr, ptr %9, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.lu, ptr %695, i32 0, i32 66
  %697 = load i32, ptr %696, align 4, !tbaa !45
  %698 = add nsw i32 %697, 1
  store i32 %698, ptr %696, align 4, !tbaa !45
  store i32 %698, ptr %55, align 4, !tbaa !9
  %699 = load i32, ptr %17, align 4, !tbaa !9
  %700 = load ptr, ptr %31, align 8, !tbaa !5
  %701 = load ptr, ptr %39, align 8, !tbaa !5
  %702 = load i32, ptr %53, align 4, !tbaa !9
  %703 = load ptr, ptr %65, align 8, !tbaa !5
  %704 = load ptr, ptr %64, align 8, !tbaa !5
  %705 = load ptr, ptr %67, align 8, !tbaa !5
  %706 = load ptr, ptr %43, align 8, !tbaa !5
  %707 = load i32, ptr %55, align 4, !tbaa !9
  %708 = call i32 @lu_solve_symbolic(i32 noundef %699, ptr noundef %700, ptr noundef null, ptr noundef %701, i32 noundef %702, ptr noundef %703, ptr noundef %704, ptr noundef %705, ptr noundef %706, i32 noundef %707)
  store i32 %708, ptr %49, align 4, !tbaa !9
  %709 = load i32, ptr %17, align 4, !tbaa !9
  %710 = load i32, ptr %49, align 4, !tbaa !9
  %711 = sub nsw i32 %709, %710
  store i32 %711, ptr %54, align 4, !tbaa !9
  %712 = load i32, ptr %54, align 4, !tbaa !9
  %713 = load ptr, ptr %64, align 8, !tbaa !5
  %714 = load i32, ptr %49, align 4, !tbaa !9
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds i32, ptr %713, i64 %715
  %717 = load ptr, ptr %31, align 8, !tbaa !5
  %718 = load ptr, ptr %39, align 8, !tbaa !5
  %719 = load ptr, ptr %40, align 8, !tbaa !5
  %720 = load ptr, ptr %36, align 8, !tbaa !5
  %721 = load double, ptr %21, align 8, !tbaa !19
  %722 = load ptr, ptr %66, align 8, !tbaa !5
  %723 = load ptr, ptr %14, align 8, !tbaa !5
  %724 = call i32 @lu_solve_triangular(i32 noundef %712, ptr noundef %716, ptr noundef %717, ptr noundef null, ptr noundef %718, ptr noundef %719, ptr noundef %720, double noundef %721, ptr noundef %722, ptr noundef %723, ptr noundef %58)
  store i32 %724, ptr %53, align 4, !tbaa !9
  store i32 0, ptr %47, align 4, !tbaa !9
  br label %725

725:                                              ; preds = %758, %694
  %726 = load i32, ptr %47, align 4, !tbaa !9
  %727 = load i32, ptr %53, align 4, !tbaa !9
  %728 = icmp slt i32 %726, %727
  br i1 %728, label %729, label %761

729:                                              ; preds = %725
  %730 = load ptr, ptr %14, align 8, !tbaa !5
  %731 = load i32, ptr %47, align 4, !tbaa !9
  %732 = sext i32 %731 to i64
  %733 = getelementptr inbounds i32, ptr %730, i64 %732
  %734 = load i32, ptr %733, align 4, !tbaa !9
  store i32 %734, ptr %44, align 4, !tbaa !9
  %735 = load ptr, ptr %24, align 8, !tbaa !5
  %736 = load i32, ptr %44, align 4, !tbaa !9
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds i32, ptr %735, i64 %737
  %739 = load i32, ptr %738, align 4, !tbaa !9
  store i32 %739, ptr %45, align 4, !tbaa !9
  %740 = load i32, ptr %45, align 4, !tbaa !9
  %741 = load ptr, ptr %14, align 8, !tbaa !5
  %742 = load i32, ptr %47, align 4, !tbaa !9
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds i32, ptr %741, i64 %743
  store i32 %740, ptr %744, align 4, !tbaa !9
  %745 = load ptr, ptr %66, align 8, !tbaa !5
  %746 = load i32, ptr %44, align 4, !tbaa !9
  %747 = sext i32 %746 to i64
  %748 = getelementptr inbounds double, ptr %745, i64 %747
  %749 = load double, ptr %748, align 8, !tbaa !19
  %750 = load ptr, ptr %15, align 8, !tbaa !5
  %751 = load i32, ptr %45, align 4, !tbaa !9
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds double, ptr %750, i64 %752
  store double %749, ptr %753, align 8, !tbaa !19
  %754 = load ptr, ptr %66, align 8, !tbaa !5
  %755 = load i32, ptr %44, align 4, !tbaa !9
  %756 = sext i32 %755 to i64
  %757 = getelementptr inbounds double, ptr %754, i64 %756
  store double 0.000000e+00, ptr %757, align 8, !tbaa !19
  br label %758

758:                                              ; preds = %729
  %759 = load i32, ptr %47, align 4, !tbaa !9
  %760 = add nsw i32 %759, 1
  store i32 %760, ptr %47, align 4, !tbaa !9
  br label %725, !llvm.loop !58

761:                                              ; preds = %725
  br label %855

762:                                              ; preds = %679
  store i32 0, ptr %53, align 4, !tbaa !9
  %763 = load i32, ptr %19, align 4, !tbaa !9
  %764 = sub nsw i32 %763, 1
  store i32 %764, ptr %46, align 4, !tbaa !9
  br label %765

765:                                              ; preds = %851, %762
  %766 = load i32, ptr %46, align 4, !tbaa !9
  %767 = icmp sge i32 %766, 0
  br i1 %767, label %768, label %854

768:                                              ; preds = %765
  %769 = load ptr, ptr %27, align 8, !tbaa !5
  %770 = load i32, ptr %46, align 4, !tbaa !9
  %771 = sext i32 %770 to i64
  %772 = getelementptr inbounds i32, ptr %769, i64 %771
  %773 = load i32, ptr %772, align 4, !tbaa !9
  store i32 %773, ptr %51, align 4, !tbaa !9
  %774 = load ptr, ptr %26, align 8, !tbaa !5
  %775 = load i32, ptr %46, align 4, !tbaa !9
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds i32, ptr %774, i64 %776
  %778 = load i32, ptr %777, align 4, !tbaa !9
  store i32 %778, ptr %52, align 4, !tbaa !9
  %779 = load ptr, ptr %66, align 8, !tbaa !5
  %780 = load i32, ptr %51, align 4, !tbaa !9
  %781 = sext i32 %780 to i64
  %782 = getelementptr inbounds double, ptr %779, i64 %781
  %783 = load double, ptr %782, align 8, !tbaa !19
  %784 = fcmp une double %783, 0.000000e+00
  br i1 %784, label %785, label %850

785:                                              ; preds = %768
  %786 = load ptr, ptr %66, align 8, !tbaa !5
  %787 = load i32, ptr %51, align 4, !tbaa !9
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds double, ptr %786, i64 %788
  %790 = load double, ptr %789, align 8, !tbaa !19
  %791 = load ptr, ptr %36, align 8, !tbaa !5
  %792 = load i32, ptr %51, align 4, !tbaa !9
  %793 = sext i32 %792 to i64
  %794 = getelementptr inbounds double, ptr %791, i64 %793
  %795 = load double, ptr %794, align 8, !tbaa !19
  %796 = fdiv double %790, %795
  store double %796, ptr %56, align 8, !tbaa !19
  %797 = load ptr, ptr %66, align 8, !tbaa !5
  %798 = load i32, ptr %51, align 4, !tbaa !9
  %799 = sext i32 %798 to i64
  %800 = getelementptr inbounds double, ptr %797, i64 %799
  store double 0.000000e+00, ptr %800, align 8, !tbaa !19
  %801 = load ptr, ptr %31, align 8, !tbaa !5
  %802 = load i32, ptr %51, align 4, !tbaa !9
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds i32, ptr %801, i64 %803
  %805 = load i32, ptr %804, align 4, !tbaa !9
  store i32 %805, ptr %50, align 4, !tbaa !9
  br label %806

806:                                              ; preds = %829, %785
  %807 = load ptr, ptr %39, align 8, !tbaa !5
  %808 = load i32, ptr %50, align 4, !tbaa !9
  %809 = sext i32 %808 to i64
  %810 = getelementptr inbounds i32, ptr %807, i64 %809
  %811 = load i32, ptr %810, align 4, !tbaa !9
  store i32 %811, ptr %44, align 4, !tbaa !9
  %812 = icmp sge i32 %811, 0
  br i1 %812, label %813, label %832

813:                                              ; preds = %806
  %814 = load double, ptr %56, align 8, !tbaa !19
  %815 = load ptr, ptr %40, align 8, !tbaa !5
  %816 = load i32, ptr %50, align 4, !tbaa !9
  %817 = sext i32 %816 to i64
  %818 = getelementptr inbounds double, ptr %815, i64 %817
  %819 = load double, ptr %818, align 8, !tbaa !19
  %820 = load ptr, ptr %66, align 8, !tbaa !5
  %821 = load i32, ptr %44, align 4, !tbaa !9
  %822 = sext i32 %821 to i64
  %823 = getelementptr inbounds double, ptr %820, i64 %822
  %824 = load double, ptr %823, align 8, !tbaa !19
  %825 = fneg double %814
  %826 = call double @llvm.fmuladd.f64(double %825, double %819, double %824)
  store double %826, ptr %823, align 8, !tbaa !19
  %827 = load i32, ptr %58, align 4, !tbaa !9
  %828 = add nsw i32 %827, 1
  store i32 %828, ptr %58, align 4, !tbaa !9
  br label %829

829:                                              ; preds = %813
  %830 = load i32, ptr %50, align 4, !tbaa !9
  %831 = add nsw i32 %830, 1
  store i32 %831, ptr %50, align 4, !tbaa !9
  br label %806, !llvm.loop !59

832:                                              ; preds = %806
  %833 = load double, ptr %56, align 8, !tbaa !19
  %834 = call double @llvm.fabs.f64(double %833)
  %835 = load double, ptr %21, align 8, !tbaa !19
  %836 = fcmp ogt double %834, %835
  br i1 %836, label %837, label %849

837:                                              ; preds = %832
  %838 = load i32, ptr %52, align 4, !tbaa !9
  %839 = load ptr, ptr %14, align 8, !tbaa !5
  %840 = load i32, ptr %53, align 4, !tbaa !9
  %841 = add nsw i32 %840, 1
  store i32 %841, ptr %53, align 4, !tbaa !9
  %842 = sext i32 %840 to i64
  %843 = getelementptr inbounds i32, ptr %839, i64 %842
  store i32 %838, ptr %843, align 4, !tbaa !9
  %844 = load double, ptr %56, align 8, !tbaa !19
  %845 = load ptr, ptr %15, align 8, !tbaa !5
  %846 = load i32, ptr %52, align 4, !tbaa !9
  %847 = sext i32 %846 to i64
  %848 = getelementptr inbounds double, ptr %845, i64 %847
  store double %844, ptr %848, align 8, !tbaa !19
  br label %849

849:                                              ; preds = %837, %832
  br label %850

850:                                              ; preds = %849, %768
  br label %851

851:                                              ; preds = %850
  %852 = load i32, ptr %46, align 4, !tbaa !9
  %853 = add nsw i32 %852, -1
  store i32 %853, ptr %46, align 4, !tbaa !9
  br label %765, !llvm.loop !60

854:                                              ; preds = %765
  br label %855

855:                                              ; preds = %854, %761
  %856 = load i32, ptr %53, align 4, !tbaa !9
  %857 = load ptr, ptr %13, align 8, !tbaa !5
  store i32 %856, ptr %857, align 4, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %67) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %65) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #4
  br label %858

858:                                              ; preds = %855, %478
  %859 = load i32, ptr %57, align 4, !tbaa !9
  %860 = load ptr, ptr %9, align 8, !tbaa !5
  %861 = getelementptr inbounds %struct.lu, ptr %860, i32 0, i32 37
  %862 = load i32, ptr %861, align 8, !tbaa !61
  %863 = add nsw i32 %862, %859
  store i32 %863, ptr %861, align 8, !tbaa !61
  %864 = load i32, ptr %58, align 4, !tbaa !9
  %865 = load ptr, ptr %9, align 8, !tbaa !5
  %866 = getelementptr inbounds %struct.lu, ptr %865, i32 0, i32 38
  %867 = load i32, ptr %866, align 4, !tbaa !62
  %868 = add nsw i32 %867, %864
  store i32 %868, ptr %866, align 4, !tbaa !62
  %869 = load i32, ptr %59, align 4, !tbaa !9
  %870 = load ptr, ptr %9, align 8, !tbaa !5
  %871 = getelementptr inbounds %struct.lu, ptr %870, i32 0, i32 39
  %872 = load i32, ptr %871, align 8, !tbaa !63
  %873 = add nsw i32 %872, %869
  store i32 %873, ptr %871, align 8, !tbaa !63
  %874 = load i32, ptr %59, align 4, !tbaa !9
  %875 = sitofp i32 %874 to double
  %876 = load ptr, ptr %9, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.lu, ptr %876, i32 0, i32 29
  %878 = load double, ptr %877, align 8, !tbaa !64
  %879 = fadd double %878, %875
  store double %879, ptr %877, align 8, !tbaa !64
  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 8, 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 4, 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 8, 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
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #4
  ret void
}

; 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.fmuladd.f64(double, double, double) #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fabs.f64(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 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}
!48 = distinct !{!48, !47}
!49 = distinct !{!49, !47}
!50 = distinct !{!50, !47}
!51 = distinct !{!51, !47}
!52 = distinct !{!52, !47}
!53 = distinct !{!53, !47}
!54 = distinct !{!54, !47}
!55 = distinct !{!55, !47}
!56 = distinct !{!56, !47}
!57 = distinct !{!57, !47}
!58 = distinct !{!58, !47}
!59 = distinct !{!59, !47}
!60 = distinct !{!60, !47}
!61 = !{!13, !10, i64 224}
!62 = !{!13, !10, i64 228}
!63 = !{!13, !10, i64 232}
!64 = !{!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 void @lu_solve_sparse(ptr nocapture noundef %0, i32 noundef %1, ptr noundef %2, ptr nocapture noundef readonly %3, ptr nocapture 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
  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
  %68 = and i8 %7, -33
  %or.cond = icmp eq i8 %68, 84
  %69 = getelementptr inbounds i8, ptr %0, i64 528
  %70 = load ptr, ptr %69, align 8, !tbaa !39
  %71 = sext i32 %12 to i64
  %72 = getelementptr inbounds i32, ptr %70, i64 %71
  %73 = getelementptr inbounds i8, ptr %0, i64 664
  %74 = load ptr, ptr %73, align 8, !tbaa !40
  %75 = getelementptr inbounds i8, ptr %0, i64 672
  %76 = load ptr, ptr %75, align 8, !tbaa !41
  %77 = getelementptr inbounds i8, ptr %0, i64 396
  %78 = load i32, ptr %77, align 4, !tbaa !42
  %79 = add nsw i32 %78, 1
  store i32 %79, ptr %77, align 4, !tbaa !42
  %80 = icmp sgt i32 %1, 0
  br i1 %or.cond, label %81, label %236

81:                                               ; preds = %8
  %82 = tail call i32 @lu_solve_symbolic(i32 noundef %12, ptr noundef %47, ptr noundef %49, ptr noundef %63, i32 noundef %1, ptr noundef %2, ptr noundef %70, ptr noundef %76, ptr noundef %67, i32 noundef %79) #4
  %83 = sub nsw i32 %12, %82
  br i1 %80, label %.lr.ph427.preheader, label %._crit_edge428

.lr.ph427.preheader:                              ; preds = %81
  %wide.trip.count503 = zext nneg i32 %1 to i64
  %xtraiter551 = and i64 %wide.trip.count503, 3
  %84 = icmp ult i32 %1, 4
  br i1 %84, label %._crit_edge428.loopexit.unr-lcssa, label %.lr.ph427.preheader.new

.lr.ph427.preheader.new:                          ; preds = %.lr.ph427.preheader
  %unroll_iter554 = and i64 %wide.trip.count503, 2147483644
  br label %.lr.ph427

.lr.ph427:                                        ; preds = %.lr.ph427, %.lr.ph427.preheader.new
  %indvars.iv500 = phi i64 [ 0, %.lr.ph427.preheader.new ], [ %indvars.iv.next501.3, %.lr.ph427 ]
  %niter555 = phi i64 [ 0, %.lr.ph427.preheader.new ], [ %niter555.next.3, %.lr.ph427 ]
  %85 = getelementptr inbounds double, ptr %3, i64 %indvars.iv500
  %86 = load double, ptr %85, align 8, !tbaa !43
  %87 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv500
  %88 = load i32, ptr %87, align 4, !tbaa !38
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds double, ptr %74, i64 %89
  store double %86, ptr %90, align 8, !tbaa !43
  %indvars.iv.next501 = or disjoint i64 %indvars.iv500, 1
  %91 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next501
  %92 = load double, ptr %91, align 8, !tbaa !43
  %93 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next501
  %94 = load i32, ptr %93, align 4, !tbaa !38
  %95 = sext i32 %94 to i64
  %96 = getelementptr inbounds double, ptr %74, i64 %95
  store double %92, ptr %96, align 8, !tbaa !43
  %indvars.iv.next501.1 = or disjoint i64 %indvars.iv500, 2
  %97 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next501.1
  %98 = load double, ptr %97, align 8, !tbaa !43
  %99 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next501.1
  %100 = load i32, ptr %99, align 4, !tbaa !38
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds double, ptr %74, i64 %101
  store double %98, ptr %102, align 8, !tbaa !43
  %indvars.iv.next501.2 = or disjoint i64 %indvars.iv500, 3
  %103 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next501.2
  %104 = load double, ptr %103, align 8, !tbaa !43
  %105 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next501.2
  %106 = load i32, ptr %105, align 4, !tbaa !38
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds double, ptr %74, i64 %107
  store double %104, ptr %108, align 8, !tbaa !43
  %indvars.iv.next501.3 = add nuw nsw i64 %indvars.iv500, 4
  %niter555.next.3 = add i64 %niter555, 4
  %niter555.ncmp.3 = icmp eq i64 %niter555.next.3, %unroll_iter554
  br i1 %niter555.ncmp.3, label %._crit_edge428.loopexit.unr-lcssa, label %.lr.ph427, !llvm.loop !44

._crit_edge428.loopexit.unr-lcssa:                ; preds = %.lr.ph427, %.lr.ph427.preheader
  %indvars.iv500.unr = phi i64 [ 0, %.lr.ph427.preheader ], [ %indvars.iv.next501.3, %.lr.ph427 ]
  %lcmp.mod553.not = icmp eq i64 %xtraiter551, 0
  br i1 %lcmp.mod553.not, label %._crit_edge428, label %.lr.ph427.epil

.lr.ph427.epil:                                   ; preds = %._crit_edge428.loopexit.unr-lcssa, %.lr.ph427.epil
  %indvars.iv500.epil = phi i64 [ %indvars.iv.next501.epil, %.lr.ph427.epil ], [ %indvars.iv500.unr, %._crit_edge428.loopexit.unr-lcssa ]
  %epil.iter552 = phi i64 [ %epil.iter552.next, %.lr.ph427.epil ], [ 0, %._crit_edge428.loopexit.unr-lcssa ]
  %109 = getelementptr inbounds double, ptr %3, i64 %indvars.iv500.epil
  %110 = load double, ptr %109, align 8, !tbaa !43
  %111 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv500.epil
  %112 = load i32, ptr %111, align 4, !tbaa !38
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds double, ptr %74, i64 %113
  store double %110, ptr %114, align 8, !tbaa !43
  %indvars.iv.next501.epil = add nuw nsw i64 %indvars.iv500.epil, 1
  %epil.iter552.next = add i64 %epil.iter552, 1
  %epil.iter552.cmp.not = icmp eq i64 %epil.iter552.next, %xtraiter551
  br i1 %epil.iter552.cmp.not, label %._crit_edge428, label %.lr.ph427.epil, !llvm.loop !46

._crit_edge428:                                   ; preds = %._crit_edge428.loopexit.unr-lcssa, %.lr.ph427.epil, %81
  %115 = sext i32 %82 to i64
  %116 = getelementptr inbounds i32, ptr %70, i64 %115
  %117 = call i32 @lu_solve_triangular(i32 noundef %83, ptr noundef %116, ptr noundef %47, ptr noundef %49, ptr noundef %63, ptr noundef %65, ptr noundef %51, double noundef %23, ptr noundef %74, ptr noundef %72, ptr noundef nonnull %10) #4
  %118 = load i32, ptr %77, align 4, !tbaa !42
  %119 = add nsw i32 %118, 1
  store i32 %119, ptr %77, align 4, !tbaa !42
  %120 = icmp sgt i32 %117, 0
  br i1 %120, label %.lr.ph431.preheader, label %.preheader380

.lr.ph431.preheader:                              ; preds = %._crit_edge428
  %wide.trip.count508 = zext nneg i32 %117 to i64
  %xtraiter556 = and i64 %wide.trip.count508, 1
  %121 = icmp eq i32 %117, 1
  br i1 %121, label %.preheader380.loopexit.unr-lcssa, label %.lr.ph431.preheader.new

.lr.ph431.preheader.new:                          ; preds = %.lr.ph431.preheader
  %unroll_iter559 = and i64 %wide.trip.count508, 2147483646
  br label %.lr.ph431

.preheader380.loopexit.unr-lcssa:                 ; preds = %.lr.ph431, %.lr.ph431.preheader
  %indvars.iv505.unr = phi i64 [ 0, %.lr.ph431.preheader ], [ %indvars.iv.next506.1, %.lr.ph431 ]
  %lcmp.mod558.not = icmp eq i64 %xtraiter556, 0
  br i1 %lcmp.mod558.not, label %.preheader380, label %.lr.ph431.epil

.lr.ph431.epil:                                   ; preds = %.preheader380.loopexit.unr-lcssa
  %122 = getelementptr inbounds i32, ptr %72, i64 %indvars.iv505.unr
  %123 = load i32, ptr %122, align 4, !tbaa !38
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds i32, ptr %27, i64 %124
  %126 = load i32, ptr %125, align 4, !tbaa !38
  store i32 %126, ptr %122, align 4, !tbaa !38
  %127 = getelementptr inbounds double, ptr %74, i64 %124
  %128 = load double, ptr %127, align 8, !tbaa !43
  %129 = sext i32 %126 to i64
  %130 = getelementptr inbounds double, ptr %6, i64 %129
  store double %128, ptr %130, align 8, !tbaa !43
  store double 0.000000e+00, ptr %127, align 8, !tbaa !43
  %131 = getelementptr inbounds i32, ptr %67, i64 %129
  store i32 %119, ptr %131, align 4, !tbaa !38
  br label %.preheader380

.preheader380:                                    ; preds = %.lr.ph431.epil, %.preheader380.loopexit.unr-lcssa, %._crit_edge428
  %132 = icmp sgt i32 %14, 0
  br i1 %132, label %.lr.ph444.preheader, label %._crit_edge445

.lr.ph444.preheader:                              ; preds = %.preheader380
  %133 = zext nneg i32 %14 to i64
  br label %.lr.ph444

.lr.ph431:                                        ; preds = %.lr.ph431, %.lr.ph431.preheader.new
  %indvars.iv505 = phi i64 [ 0, %.lr.ph431.preheader.new ], [ %indvars.iv.next506.1, %.lr.ph431 ]
  %niter560 = phi i64 [ 0, %.lr.ph431.preheader.new ], [ %niter560.next.1, %.lr.ph431 ]
  %134 = getelementptr inbounds i32, ptr %72, i64 %indvars.iv505
  %135 = load i32, ptr %134, align 4, !tbaa !38
  %136 = sext i32 %135 to i64
  %137 = getelementptr inbounds i32, ptr %27, i64 %136
  %138 = load i32, ptr %137, align 4, !tbaa !38
  store i32 %138, ptr %134, align 4, !tbaa !38
  %139 = getelementptr inbounds double, ptr %74, i64 %136
  %140 = load double, ptr %139, align 8, !tbaa !43
  %141 = sext i32 %138 to i64
  %142 = getelementptr inbounds double, ptr %6, i64 %141
  store double %140, ptr %142, align 8, !tbaa !43
  store double 0.000000e+00, ptr %139, align 8, !tbaa !43
  %143 = getelementptr inbounds i32, ptr %67, i64 %141
  store i32 %119, ptr %143, align 4, !tbaa !38
  %indvars.iv.next506 = or disjoint i64 %indvars.iv505, 1
  %144 = getelementptr inbounds i32, ptr %72, i64 %indvars.iv.next506
  %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
  store i32 %148, ptr %144, align 4, !tbaa !38
  %149 = getelementptr inbounds double, ptr %74, i64 %146
  %150 = load double, ptr %149, align 8, !tbaa !43
  %151 = sext i32 %148 to i64
  %152 = getelementptr inbounds double, ptr %6, i64 %151
  store double %150, ptr %152, align 8, !tbaa !43
  store double 0.000000e+00, ptr %149, align 8, !tbaa !43
  %153 = getelementptr inbounds i32, ptr %67, i64 %151
  store i32 %119, ptr %153, align 4, !tbaa !38
  %indvars.iv.next506.1 = add nuw nsw i64 %indvars.iv505, 2
  %niter560.next.1 = add i64 %niter560, 2
  %niter560.ncmp.1 = icmp eq i64 %niter560.next.1, %unroll_iter559
  br i1 %niter560.ncmp.1, label %.preheader380.loopexit.unr-lcssa, label %.lr.ph431, !llvm.loop !48

.lr.ph444:                                        ; preds = %.lr.ph444.preheader, %.loopexit379
  %indvars.iv513 = phi i64 [ %133, %.lr.ph444.preheader ], [ %indvars.iv.next514, %.loopexit379 ]
  %.0352441 = phi i32 [ 0, %.lr.ph444.preheader ], [ %.2354, %.loopexit379 ]
  %.0357440 = phi i32 [ %117, %.lr.ph444.preheader ], [ %.3360, %.loopexit379 ]
  %indvars.iv.next514 = add nsw i64 %indvars.iv513, -1
  %154 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next514
  %155 = load i32, ptr %154, align 4, !tbaa !38
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds double, ptr %6, i64 %156
  %158 = load double, ptr %157, align 8, !tbaa !43
  %159 = fcmp une double %158, 0.000000e+00
  br i1 %159, label %160, label %.loopexit379

160:                                              ; preds = %.lr.ph444
  %161 = getelementptr inbounds i32, ptr %45, i64 %indvars.iv.next514
  %162 = load i32, ptr %161, align 4, !tbaa !38
  %163 = getelementptr inbounds i32, ptr %45, i64 %indvars.iv513
  %164 = load i32, ptr %163, align 4, !tbaa !38
  %165 = icmp slt i32 %162, %164
  br i1 %165, label %.lr.ph436, label %.loopexit379

.lr.ph436:                                        ; preds = %160
  %166 = fneg double %158
  %167 = sext i32 %162 to i64
  br label %168

168:                                              ; preds = %.lr.ph436, %179
  %169 = phi i32 [ %164, %.lr.ph436 ], [ %180, %179 ]
  %indvars.iv510 = phi i64 [ %167, %.lr.ph436 ], [ %indvars.iv.next511, %179 ]
  %.1353433 = phi i32 [ %.0352441, %.lr.ph436 ], [ %186, %179 ]
  %.1358432 = phi i32 [ %.0357440, %.lr.ph436 ], [ %.2359, %179 ]
  %170 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv510
  %171 = load i32, ptr %170, align 4, !tbaa !38
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds i32, ptr %67, i64 %172
  %174 = load i32, ptr %173, align 4, !tbaa !38
  %.not378 = icmp eq i32 %174, %119
  br i1 %.not378, label %179, label %175

175:                                              ; preds = %168
  store i32 %119, ptr %173, align 4, !tbaa !38
  %176 = add nsw i32 %.1358432, 1
  %177 = sext i32 %.1358432 to i64
  %178 = getelementptr inbounds i32, ptr %72, i64 %177
  store i32 %171, ptr %178, align 4, !tbaa !38
  %.pre522 = load i32, ptr %163, align 4, !tbaa !38
  br label %179

179:                                              ; preds = %175, %168
  %180 = phi i32 [ %.pre522, %175 ], [ %169, %168 ]
  %.2359 = phi i32 [ %176, %175 ], [ %.1358432, %168 ]
  %181 = getelementptr inbounds double, ptr %57, i64 %indvars.iv510
  %182 = load double, ptr %181, align 8, !tbaa !43
  %183 = getelementptr inbounds double, ptr %6, i64 %172
  %184 = load double, ptr %183, align 8, !tbaa !43
  %185 = call double @llvm.fmuladd.f64(double %166, double %182, double %184)
  store double %185, ptr %183, align 8, !tbaa !43
  %186 = add nsw i32 %.1353433, 1
  %indvars.iv.next511 = add nsw i64 %indvars.iv510, 1
  %187 = sext i32 %180 to i64
  %188 = icmp slt i64 %indvars.iv.next511, %187
  br i1 %188, label %168, label %.loopexit379, !llvm.loop !49

.loopexit379:                                     ; preds = %179, %160, %.lr.ph444
  %.3360 = phi i32 [ %.0357440, %.lr.ph444 ], [ %.0357440, %160 ], [ %.2359, %179 ]
  %.2354 = phi i32 [ %.0352441, %.lr.ph444 ], [ %.0352441, %160 ], [ %186, %179 ]
  %189 = icmp sgt i64 %indvars.iv513, 1
  br i1 %189, label %.lr.ph444, label %._crit_edge445, !llvm.loop !50

._crit_edge445:                                   ; preds = %.loopexit379, %.preheader380
  %.0357.lcssa = phi i32 [ %117, %.preheader380 ], [ %.3360, %.loopexit379 ]
  %.0352.lcssa = phi i32 [ 0, %.preheader380 ], [ %.2354, %.loopexit379 ]
  %.not376 = icmp sgt i32 %.0357.lcssa, %21
  br i1 %.not376, label %.preheader, label %192

.preheader:                                       ; preds = %._crit_edge445
  %190 = icmp sgt i32 %12, 0
  br i1 %190, label %.lr.ph461.preheader, label %.loopexit

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

192:                                              ; preds = %._crit_edge445
  %193 = load i32, ptr %77, align 4, !tbaa !42
  %194 = add nsw i32 %193, 1
  store i32 %194, ptr %77, align 4, !tbaa !42
  %195 = call i32 @lu_solve_symbolic(i32 noundef %12, ptr noundef %39, ptr noundef null, ptr noundef %55, i32 noundef %.0357.lcssa, ptr noundef %72, ptr noundef %70, ptr noundef %76, ptr noundef %67, i32 noundef %194) #4
  %196 = sub nsw i32 %12, %195
  %197 = sext i32 %195 to i64
  %198 = getelementptr inbounds i32, ptr %70, i64 %197
  %199 = call i32 @lu_solve_triangular(i32 noundef %196, ptr noundef %198, ptr noundef %39, ptr noundef null, ptr noundef %55, ptr noundef %57, ptr noundef null, double noundef %23, ptr noundef %6, ptr noundef %5, ptr noundef nonnull %9) #4
  br label %.loopexit

.lr.ph461:                                        ; preds = %.lr.ph461.preheader, %234
  %indvars.iv519 = phi i64 [ %191, %.lr.ph461.preheader ], [ %indvars.iv.next520, %234 ]
  %.4361459 = phi i32 [ 0, %.lr.ph461.preheader ], [ %.5362, %234 ]
  %.promoted455458 = phi i32 [ %.promoted452, %.lr.ph461.preheader ], [ %.promoted453, %234 ]
  %indvars.iv.next520 = add nsw i64 %indvars.iv519, -1
  %200 = getelementptr inbounds i32, ptr %25, i64 %indvars.iv.next520
  %201 = load i32, ptr %200, align 4, !tbaa !38
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds double, ptr %6, i64 %202
  %204 = load double, ptr %203, align 8, !tbaa !43
  %205 = fcmp une double %204, 0.000000e+00
  br i1 %205, label %206, label %234

206:                                              ; preds = %.lr.ph461
  %207 = getelementptr inbounds i32, ptr %41, i64 %indvars.iv.next520
  %208 = load i32, ptr %207, align 4, !tbaa !38
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i32, ptr %55, i64 %209
  %211 = load i32, ptr %210, align 4, !tbaa !38
  %212 = icmp sgt i32 %211, -1
  br i1 %212, label %.lr.ph450, label %._crit_edge451

.lr.ph450:                                        ; preds = %206
  %213 = fneg double %204
  br label %214

214:                                              ; preds = %.lr.ph450, %214
  %indvars.iv516 = phi i64 [ %209, %.lr.ph450 ], [ %indvars.iv.next517, %214 ]
  %215 = phi i32 [ %211, %.lr.ph450 ], [ %225, %214 ]
  %216 = phi i32 [ %.promoted455458, %.lr.ph450 ], [ %223, %214 ]
  %217 = getelementptr inbounds double, ptr %57, i64 %indvars.iv516
  %218 = load double, ptr %217, align 8, !tbaa !43
  %219 = zext nneg i32 %215 to i64
  %220 = getelementptr inbounds double, ptr %6, i64 %219
  %221 = load double, ptr %220, align 8, !tbaa !43
  %222 = call double @llvm.fmuladd.f64(double %213, double %218, double %221)
  store double %222, ptr %220, align 8, !tbaa !43
  %223 = add nsw i32 %216, 1
  store i32 %223, ptr %9, align 4, !tbaa !38
  %indvars.iv.next517 = add nsw i64 %indvars.iv516, 1
  %224 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next517
  %225 = load i32, ptr %224, align 4, !tbaa !38
  %226 = icmp sgt i32 %225, -1
  br i1 %226, label %214, label %._crit_edge451, !llvm.loop !51

._crit_edge451:                                   ; preds = %214, %206
  %.promoted454 = phi i32 [ %.promoted455458, %206 ], [ %223, %214 ]
  %227 = call double @llvm.fabs.f64(double %204)
  %228 = fcmp ogt double %227, %23
  br i1 %228, label %229, label %233

229:                                              ; preds = %._crit_edge451
  %230 = add nsw i32 %.4361459, 1
  %231 = sext i32 %.4361459 to i64
  %232 = getelementptr inbounds i32, ptr %5, i64 %231
  store i32 %201, ptr %232, align 4, !tbaa !38
  br label %234

233:                                              ; preds = %._crit_edge451
  store double 0.000000e+00, ptr %203, align 8, !tbaa !43
  br label %234

234:                                              ; preds = %.lr.ph461, %233, %229
  %.promoted453 = phi i32 [ %.promoted454, %229 ], [ %.promoted454, %233 ], [ %.promoted455458, %.lr.ph461 ]
  %.5362 = phi i32 [ %230, %229 ], [ %.4361459, %233 ], [ %.4361459, %.lr.ph461 ]
  %235 = icmp sgt i64 %indvars.iv519, 1
  br i1 %235, label %.lr.ph461, label %.loopexit, !llvm.loop !52

236:                                              ; preds = %8
  %237 = 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 %70, ptr noundef %76, ptr noundef %67, i32 noundef %79) #4
  %238 = sub nsw i32 %12, %237
  br i1 %80, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %236
  %wide.trip.count = zext nneg i32 %1 to i64
  %xtraiter = and i64 %wide.trip.count, 3
  %239 = icmp ult i32 %1, 4
  br i1 %239, 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 ]
  %240 = getelementptr inbounds double, ptr %3, i64 %indvars.iv
  %241 = load double, ptr %240, align 8, !tbaa !43
  %242 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv
  %243 = load i32, ptr %242, align 4, !tbaa !38
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds double, ptr %74, i64 %244
  store double %241, ptr %245, align 8, !tbaa !43
  %indvars.iv.next = or disjoint i64 %indvars.iv, 1
  %246 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next
  %247 = load double, ptr %246, align 8, !tbaa !43
  %248 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next
  %249 = load i32, ptr %248, align 4, !tbaa !38
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds double, ptr %74, i64 %250
  store double %247, ptr %251, align 8, !tbaa !43
  %indvars.iv.next.1 = or disjoint i64 %indvars.iv, 2
  %252 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next.1
  %253 = load double, ptr %252, align 8, !tbaa !43
  %254 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next.1
  %255 = load i32, ptr %254, align 4, !tbaa !38
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds double, ptr %74, i64 %256
  store double %253, ptr %257, align 8, !tbaa !43
  %indvars.iv.next.2 = or disjoint i64 %indvars.iv, 3
  %258 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.next.2
  %259 = load double, ptr %258, align 8, !tbaa !43
  %260 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.next.2
  %261 = load i32, ptr %260, align 4, !tbaa !38
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds double, ptr %74, i64 %262
  store double %259, ptr %263, align 8, !tbaa !43
  %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 !53

._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 ]
  %264 = getelementptr inbounds double, ptr %3, i64 %indvars.iv.epil
  %265 = load double, ptr %264, align 8, !tbaa !43
  %266 = getelementptr inbounds i32, ptr %2, i64 %indvars.iv.epil
  %267 = load i32, ptr %266, align 4, !tbaa !38
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds double, ptr %74, i64 %268
  store double %265, ptr %269, align 8, !tbaa !43
  %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 !54

._crit_edge:                                      ; preds = %._crit_edge.loopexit.unr-lcssa, %.lr.ph.epil, %236
  %270 = sext i32 %237 to i64
  %271 = getelementptr inbounds i32, ptr %70, i64 %270
  %272 = call i32 @lu_solve_triangular(i32 noundef %238, ptr noundef %271, ptr noundef %37, ptr noundef null, ptr noundef %55, ptr noundef %57, ptr noundef null, double noundef %23, ptr noundef %74, ptr noundef %72, ptr noundef nonnull %9) #4
  %273 = icmp slt i32 %272, %238
  br i1 %273, label %.preheader386, label %.loopexit385

.preheader386:                                    ; preds = %._crit_edge
  %274 = icmp sgt i32 %272, 0
  br i1 %274, label %.lr.ph390, label %.preheader384

.preheader384.loopexit:                           ; preds = %300
  %275 = trunc nsw i64 %indvars.iv.next472 to i32
  br label %.preheader384

.preheader384:                                    ; preds = %.preheader384.loopexit, %.preheader386
  %.1344.lcssa = phi i32 [ %237, %.preheader386 ], [ %275, %.preheader384.loopexit ]
  %276 = icmp slt i32 %.1344.lcssa, %12
  br i1 %276, label %.lr.ph392.preheader, label %.loopexit385

.lr.ph392.preheader:                              ; preds = %.preheader384
  %277 = sext i32 %.1344.lcssa to i64
  %278 = sub nsw i64 %71, %277
  %xtraiter541 = and i64 %278, 3
  %lcmp.mod542.not = icmp eq i64 %xtraiter541, 0
  br i1 %lcmp.mod542.not, label %.lr.ph392.prol.loopexit, label %.lr.ph392.prol

.lr.ph392.prol:                                   ; preds = %.lr.ph392.preheader, %.lr.ph392.prol
  %indvars.iv474.prol = phi i64 [ %indvars.iv.next475.prol, %.lr.ph392.prol ], [ %277, %.lr.ph392.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph392.prol ], [ 0, %.lr.ph392.preheader ]
  %279 = getelementptr inbounds i32, ptr %70, i64 %indvars.iv474.prol
  %280 = load i32, ptr %279, align 4, !tbaa !38
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds i32, ptr %67, i64 %281
  %283 = load i32, ptr %282, align 4, !tbaa !38
  %284 = add nsw i32 %283, -1
  store i32 %284, ptr %282, align 4, !tbaa !38
  %indvars.iv.next475.prol = add nsw i64 %indvars.iv474.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter541
  br i1 %prol.iter.cmp.not, label %.lr.ph392.prol.loopexit, label %.lr.ph392.prol, !llvm.loop !55

.lr.ph392.prol.loopexit:                          ; preds = %.lr.ph392.prol, %.lr.ph392.preheader
  %indvars.iv474.unr = phi i64 [ %277, %.lr.ph392.preheader ], [ %indvars.iv.next475.prol, %.lr.ph392.prol ]
  %285 = sub nsw i64 %277, %71
  %286 = icmp ugt i64 %285, -4
  br i1 %286, label %.loopexit385, label %.lr.ph392.preheader.new

.lr.ph392.preheader.new:                          ; preds = %.lr.ph392.prol.loopexit
  %invariant.gep = getelementptr i8, ptr %70, i64 4
  %invariant.gep565 = getelementptr i8, ptr %70, i64 8
  %invariant.gep567 = getelementptr i8, ptr %70, i64 12
  br label %.lr.ph392

.lr.ph390:                                        ; preds = %.preheader386, %300
  %indvars.iv471 = phi i64 [ %indvars.iv.next472, %300 ], [ %270, %.preheader386 ]
  %.3389 = phi i32 [ %.4, %300 ], [ 0, %.preheader386 ]
  %287 = getelementptr inbounds i32, ptr %70, i64 %indvars.iv471
  %288 = load i32, ptr %287, align 4, !tbaa !38
  %289 = sext i32 %.3389 to i64
  %290 = getelementptr inbounds i32, ptr %72, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !38
  %292 = icmp eq i32 %288, %291
  br i1 %292, label %293, label %295

293:                                              ; preds = %.lr.ph390
  %294 = add nsw i32 %.3389, 1
  br label %300

295:                                              ; preds = %.lr.ph390
  %296 = sext i32 %288 to i64
  %297 = getelementptr inbounds i32, ptr %67, i64 %296
  %298 = load i32, ptr %297, align 4, !tbaa !38
  %299 = add nsw i32 %298, -1
  store i32 %299, ptr %297, align 4, !tbaa !38
  br label %300

300:                                              ; preds = %293, %295
  %.4 = phi i32 [ %294, %293 ], [ %.3389, %295 ]
  %indvars.iv.next472 = add nsw i64 %indvars.iv471, 1
  %301 = icmp slt i32 %.4, %272
  br i1 %301, label %.lr.ph390, label %.preheader384.loopexit, !llvm.loop !56

.lr.ph392:                                        ; preds = %.lr.ph392, %.lr.ph392.preheader.new
  %indvars.iv474 = phi i64 [ %indvars.iv474.unr, %.lr.ph392.preheader.new ], [ %indvars.iv.next475.3, %.lr.ph392 ]
  %302 = getelementptr inbounds i32, ptr %70, i64 %indvars.iv474
  %303 = load i32, ptr %302, align 4, !tbaa !38
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i32, ptr %67, i64 %304
  %306 = load i32, ptr %305, align 4, !tbaa !38
  %307 = add nsw i32 %306, -1
  store i32 %307, ptr %305, align 4, !tbaa !38
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv474
  %308 = load i32, ptr %gep, align 4, !tbaa !38
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %67, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !38
  %312 = add nsw i32 %311, -1
  store i32 %312, ptr %310, align 4, !tbaa !38
  %gep566 = getelementptr i32, ptr %invariant.gep565, i64 %indvars.iv474
  %313 = load i32, ptr %gep566, align 4, !tbaa !38
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds i32, ptr %67, i64 %314
  %316 = load i32, ptr %315, align 4, !tbaa !38
  %317 = add nsw i32 %316, -1
  store i32 %317, ptr %315, align 4, !tbaa !38
  %gep568 = getelementptr i32, ptr %invariant.gep567, i64 %indvars.iv474
  %318 = load i32, ptr %gep568, align 4, !tbaa !38
  %319 = sext i32 %318 to i64
  %320 = getelementptr inbounds i32, ptr %67, i64 %319
  %321 = load i32, ptr %320, align 4, !tbaa !38
  %322 = add nsw i32 %321, -1
  store i32 %322, ptr %320, align 4, !tbaa !38
  %indvars.iv.next475.3 = add nsw i64 %indvars.iv474, 4
  %exitcond478.not.3 = icmp eq i64 %indvars.iv.next475.3, %71
  br i1 %exitcond478.not.3, label %.loopexit385, label %.lr.ph392, !llvm.loop !57

.loopexit385:                                     ; preds = %.lr.ph392.prol.loopexit, %.lr.ph392, %.preheader384, %._crit_edge
  %323 = load i32, ptr %45, align 4, !tbaa !38
  %324 = icmp sgt i32 %14, 0
  br i1 %324, label %.lr.ph405.preheader, label %._crit_edge406

.lr.ph405.preheader:                              ; preds = %.loopexit385
  %wide.trip.count487 = zext nneg i32 %14 to i64
  br label %.lr.ph405

.lr.ph405:                                        ; preds = %.lr.ph405.preheader, %._crit_edge397.thread
  %indvars.iv484 = phi i64 [ 0, %.lr.ph405.preheader ], [ %indvars.iv.next485, %._crit_edge397.thread ]
  %.2349402 = phi i32 [ %323, %.lr.ph405.preheader ], [ %.3350.lcssa525, %._crit_edge397.thread ]
  %.6401 = phi i32 [ %272, %.lr.ph405.preheader ], [ %.7, %._crit_edge397.thread ]
  %325 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv484
  %326 = load i32, ptr %325, align 4, !tbaa !38
  %indvars.iv.next485 = add nuw nsw i64 %indvars.iv484, 1
  %327 = getelementptr inbounds i32, ptr %45, i64 %indvars.iv.next485
  %328 = load i32, ptr %327, align 4, !tbaa !38
  %329 = icmp slt i32 %.2349402, %328
  br i1 %329, label %.lr.ph396.preheader, label %._crit_edge397.thread

.lr.ph396.preheader:                              ; preds = %.lr.ph405
  %330 = sext i32 %.2349402 to i64
  %wide.trip.count482 = sext i32 %328 to i64
  %331 = sub nsw i64 %wide.trip.count482, %330
  %xtraiter543 = and i64 %331, 3
  %lcmp.mod544.not = icmp eq i64 %xtraiter543, 0
  br i1 %lcmp.mod544.not, label %.lr.ph396.prol.loopexit, label %.lr.ph396.prol

.lr.ph396.prol:                                   ; preds = %.lr.ph396.preheader, %.lr.ph396.prol
  %indvars.iv479.prol = phi i64 [ %indvars.iv.next480.prol, %.lr.ph396.prol ], [ %330, %.lr.ph396.preheader ]
  %.0356393.prol = phi double [ %339, %.lr.ph396.prol ], [ 0.000000e+00, %.lr.ph396.preheader ]
  %prol.iter545 = phi i64 [ %prol.iter545.next, %.lr.ph396.prol ], [ 0, %.lr.ph396.preheader ]
  %332 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv479.prol
  %333 = load i32, ptr %332, align 4, !tbaa !38
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds double, ptr %74, i64 %334
  %336 = load double, ptr %335, align 8, !tbaa !43
  %337 = getelementptr inbounds double, ptr %57, i64 %indvars.iv479.prol
  %338 = load double, ptr %337, align 8, !tbaa !43
  %339 = call double @llvm.fmuladd.f64(double %336, double %338, double %.0356393.prol)
  %indvars.iv.next480.prol = add nsw i64 %indvars.iv479.prol, 1
  %prol.iter545.next = add i64 %prol.iter545, 1
  %prol.iter545.cmp.not = icmp eq i64 %prol.iter545.next, %xtraiter543
  br i1 %prol.iter545.cmp.not, label %.lr.ph396.prol.loopexit, label %.lr.ph396.prol, !llvm.loop !58

.lr.ph396.prol.loopexit:                          ; preds = %.lr.ph396.prol, %.lr.ph396.preheader
  %.lcssa540.unr = phi double [ poison, %.lr.ph396.preheader ], [ %339, %.lr.ph396.prol ]
  %indvars.iv479.unr = phi i64 [ %330, %.lr.ph396.preheader ], [ %indvars.iv.next480.prol, %.lr.ph396.prol ]
  %.0356393.unr = phi double [ 0.000000e+00, %.lr.ph396.preheader ], [ %339, %.lr.ph396.prol ]
  %340 = sub nsw i64 %330, %wide.trip.count482
  %341 = icmp ugt i64 %340, -4
  br i1 %341, label %._crit_edge397, label %.lr.ph396

.lr.ph396:                                        ; preds = %.lr.ph396.prol.loopexit, %.lr.ph396
  %indvars.iv479 = phi i64 [ %indvars.iv.next480.3, %.lr.ph396 ], [ %indvars.iv479.unr, %.lr.ph396.prol.loopexit ]
  %.0356393 = phi double [ %373, %.lr.ph396 ], [ %.0356393.unr, %.lr.ph396.prol.loopexit ]
  %342 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv479
  %343 = load i32, ptr %342, align 4, !tbaa !38
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds double, ptr %74, i64 %344
  %346 = load double, ptr %345, align 8, !tbaa !43
  %347 = getelementptr inbounds double, ptr %57, i64 %indvars.iv479
  %348 = load double, ptr %347, align 8, !tbaa !43
  %349 = call double @llvm.fmuladd.f64(double %346, double %348, double %.0356393)
  %indvars.iv.next480 = add nsw i64 %indvars.iv479, 1
  %350 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next480
  %351 = load i32, ptr %350, align 4, !tbaa !38
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds double, ptr %74, i64 %352
  %354 = load double, ptr %353, align 8, !tbaa !43
  %355 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next480
  %356 = load double, ptr %355, align 8, !tbaa !43
  %357 = call double @llvm.fmuladd.f64(double %354, double %356, double %349)
  %indvars.iv.next480.1 = add nsw i64 %indvars.iv479, 2
  %358 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next480.1
  %359 = load i32, ptr %358, align 4, !tbaa !38
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds double, ptr %74, i64 %360
  %362 = load double, ptr %361, align 8, !tbaa !43
  %363 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next480.1
  %364 = load double, ptr %363, align 8, !tbaa !43
  %365 = call double @llvm.fmuladd.f64(double %362, double %364, double %357)
  %indvars.iv.next480.2 = add nsw i64 %indvars.iv479, 3
  %366 = getelementptr inbounds i32, ptr %55, i64 %indvars.iv.next480.2
  %367 = load i32, ptr %366, align 4, !tbaa !38
  %368 = sext i32 %367 to i64
  %369 = getelementptr inbounds double, ptr %74, i64 %368
  %370 = load double, ptr %369, align 8, !tbaa !43
  %371 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next480.2
  %372 = load double, ptr %371, align 8, !tbaa !43
  %373 = call double @llvm.fmuladd.f64(double %370, double %372, double %365)
  %indvars.iv.next480.3 = add nsw i64 %indvars.iv479, 4
  %exitcond483.not.3 = icmp eq i64 %indvars.iv.next480.3, %wide.trip.count482
  br i1 %exitcond483.not.3, label %._crit_edge397, label %.lr.ph396, !llvm.loop !59

._crit_edge397:                                   ; preds = %.lr.ph396, %.lr.ph396.prol.loopexit
  %.lcssa540 = phi double [ %.lcssa540.unr, %.lr.ph396.prol.loopexit ], [ %373, %.lr.ph396 ]
  %374 = sext i32 %326 to i64
  %375 = getelementptr inbounds double, ptr %74, i64 %374
  %376 = load double, ptr %375, align 8, !tbaa !43
  %377 = fsub double %376, %.lcssa540
  store double %377, ptr %375, align 8, !tbaa !43
  %378 = fcmp une double %.lcssa540, 0.000000e+00
  br i1 %378, label %379, label %._crit_edge397.thread

379:                                              ; preds = %._crit_edge397
  %380 = getelementptr inbounds i32, ptr %67, i64 %374
  %381 = load i32, ptr %380, align 4, !tbaa !38
  %.not375 = icmp eq i32 %381, %79
  br i1 %.not375, label %._crit_edge397.thread, label %382

382:                                              ; preds = %379
  store i32 %79, ptr %380, align 4, !tbaa !38
  %383 = add nsw i32 %.6401, 1
  %384 = sext i32 %.6401 to i64
  %385 = getelementptr inbounds i32, ptr %72, i64 %384
  store i32 %326, ptr %385, align 4, !tbaa !38
  br label %._crit_edge397.thread

._crit_edge397.thread:                            ; preds = %.lr.ph405, %._crit_edge397, %379, %382
  %.3350.lcssa525 = phi i32 [ %328, %382 ], [ %328, %379 ], [ %328, %._crit_edge397 ], [ %.2349402, %.lr.ph405 ]
  %.7 = phi i32 [ %383, %382 ], [ %.6401, %379 ], [ %.6401, %._crit_edge397 ], [ %.6401, %.lr.ph405 ]
  %exitcond488.not = icmp eq i64 %indvars.iv.next485, %wide.trip.count487
  br i1 %exitcond488.not, label %._crit_edge406.loopexit, label %.lr.ph405, !llvm.loop !60

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

._crit_edge406:                                   ; preds = %._crit_edge406.loopexit, %.loopexit385
  %386 = phi i32 [ %323, %.loopexit385 ], [ %.pre, %._crit_edge406.loopexit ]
  %.6.lcssa = phi i32 [ %272, %.loopexit385 ], [ %.7, %._crit_edge406.loopexit ]
  %387 = sext i32 %14 to i64
  %388 = getelementptr inbounds i32, ptr %45, i64 %387
  %389 = load i32, ptr %388, align 4, !tbaa !38
  %390 = sub nsw i32 %389, %386
  %.not = icmp sgt i32 %.6.lcssa, %21
  br i1 %.not, label %.preheader381, label %393

.preheader381:                                    ; preds = %._crit_edge406
  %391 = icmp sgt i32 %16, 0
  br i1 %391, label %.lr.ph423.preheader, label %.loopexit

.lr.ph423.preheader:                              ; preds = %.preheader381
  %.promoted415 = load i32, ptr %10, align 4, !tbaa !38
  %392 = zext nneg i32 %16 to i64
  br label %.lr.ph423

393:                                              ; preds = %._crit_edge406
  %394 = load i32, ptr %77, align 4, !tbaa !42
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %77, align 4, !tbaa !42
  %396 = call i32 @lu_solve_symbolic(i32 noundef %12, ptr noundef %43, ptr noundef null, ptr noundef %59, i32 noundef %.6.lcssa, ptr noundef %72, ptr noundef %70, ptr noundef %76, ptr noundef %67, i32 noundef %395) #4
  %397 = sub nsw i32 %12, %396
  %398 = sext i32 %396 to i64
  %399 = getelementptr inbounds i32, ptr %70, i64 %398
  %400 = call i32 @lu_solve_triangular(i32 noundef %397, ptr noundef %399, ptr noundef %43, ptr noundef null, ptr noundef %59, ptr noundef %61, ptr noundef %53, double noundef %23, ptr noundef %74, ptr noundef %5, ptr noundef nonnull %10) #4
  %401 = icmp sgt i32 %400, 0
  br i1 %401, label %.lr.ph410.preheader, label %.loopexit

.lr.ph410.preheader:                              ; preds = %393
  %wide.trip.count492 = zext nneg i32 %400 to i64
  %xtraiter546 = and i64 %wide.trip.count492, 1
  %402 = icmp eq i32 %400, 1
  br i1 %402, label %.loopexit.loopexit539.unr-lcssa, label %.lr.ph410.preheader.new

.lr.ph410.preheader.new:                          ; preds = %.lr.ph410.preheader
  %unroll_iter549 = and i64 %wide.trip.count492, 2147483646
  br label %.lr.ph410

.lr.ph410:                                        ; preds = %.lr.ph410, %.lr.ph410.preheader.new
  %indvars.iv489 = phi i64 [ 0, %.lr.ph410.preheader.new ], [ %indvars.iv.next490.1, %.lr.ph410 ]
  %niter550 = phi i64 [ 0, %.lr.ph410.preheader.new ], [ %niter550.next.1, %.lr.ph410 ]
  %403 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv489
  %404 = load i32, ptr %403, align 4, !tbaa !38
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds i32, ptr %29, i64 %405
  %407 = load i32, ptr %406, align 4, !tbaa !38
  store i32 %407, ptr %403, align 4, !tbaa !38
  %408 = getelementptr inbounds double, ptr %74, i64 %405
  %409 = load double, ptr %408, align 8, !tbaa !43
  %410 = sext i32 %407 to i64
  %411 = getelementptr inbounds double, ptr %6, i64 %410
  store double %409, ptr %411, align 8, !tbaa !43
  store double 0.000000e+00, ptr %408, align 8, !tbaa !43
  %indvars.iv.next490 = or disjoint i64 %indvars.iv489, 1
  %412 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv.next490
  %413 = load i32, ptr %412, align 4, !tbaa !38
  %414 = sext i32 %413 to i64
  %415 = getelementptr inbounds i32, ptr %29, i64 %414
  %416 = load i32, ptr %415, align 4, !tbaa !38
  store i32 %416, ptr %412, align 4, !tbaa !38
  %417 = getelementptr inbounds double, ptr %74, i64 %414
  %418 = load double, ptr %417, align 8, !tbaa !43
  %419 = sext i32 %416 to i64
  %420 = getelementptr inbounds double, ptr %6, i64 %419
  store double %418, ptr %420, align 8, !tbaa !43
  store double 0.000000e+00, ptr %417, align 8, !tbaa !43
  %indvars.iv.next490.1 = add nuw nsw i64 %indvars.iv489, 2
  %niter550.next.1 = add i64 %niter550, 2
  %niter550.ncmp.1 = icmp eq i64 %niter550.next.1, %unroll_iter549
  br i1 %niter550.ncmp.1, label %.loopexit.loopexit539.unr-lcssa, label %.lr.ph410, !llvm.loop !61

.lr.ph423:                                        ; preds = %.lr.ph423.preheader, %461
  %indvars.iv497 = phi i64 [ %392, %.lr.ph423.preheader ], [ %indvars.iv.next498, %461 ]
  %.8421 = phi i32 [ 0, %.lr.ph423.preheader ], [ %.9, %461 ]
  %.promoted418420 = phi i32 [ %.promoted415, %.lr.ph423.preheader ], [ %.promoted416, %461 ]
  %indvars.iv.next498 = add nsw i64 %indvars.iv497, -1
  %421 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv.next498
  %422 = load i32, ptr %421, align 4, !tbaa !38
  %423 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv.next498
  %424 = load i32, ptr %423, align 4, !tbaa !38
  %425 = sext i32 %422 to i64
  %426 = getelementptr inbounds double, ptr %74, i64 %425
  %427 = load double, ptr %426, align 8, !tbaa !43
  %428 = fcmp une double %427, 0.000000e+00
  br i1 %428, label %429, label %461

429:                                              ; preds = %.lr.ph423
  %430 = getelementptr inbounds double, ptr %53, i64 %425
  %431 = load double, ptr %430, align 8, !tbaa !43
  %432 = fdiv double %427, %431
  store double 0.000000e+00, ptr %426, align 8, !tbaa !43
  %433 = getelementptr inbounds i32, ptr %43, i64 %425
  %434 = load i32, ptr %433, align 4, !tbaa !38
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds i32, ptr %59, i64 %435
  %437 = load i32, ptr %436, align 4, !tbaa !38
  %438 = icmp sgt i32 %437, -1
  br i1 %438, label %.lr.ph413, label %._crit_edge414

.lr.ph413:                                        ; preds = %429
  %439 = fneg double %432
  br label %440

440:                                              ; preds = %.lr.ph413, %440
  %indvars.iv494 = phi i64 [ %435, %.lr.ph413 ], [ %indvars.iv.next495, %440 ]
  %441 = phi i32 [ %437, %.lr.ph413 ], [ %451, %440 ]
  %442 = phi i32 [ %.promoted418420, %.lr.ph413 ], [ %449, %440 ]
  %443 = getelementptr inbounds double, ptr %61, i64 %indvars.iv494
  %444 = load double, ptr %443, align 8, !tbaa !43
  %445 = zext nneg i32 %441 to i64
  %446 = getelementptr inbounds double, ptr %74, i64 %445
  %447 = load double, ptr %446, align 8, !tbaa !43
  %448 = call double @llvm.fmuladd.f64(double %439, double %444, double %447)
  store double %448, ptr %446, align 8, !tbaa !43
  %449 = add nsw i32 %442, 1
  store i32 %449, ptr %10, align 4, !tbaa !38
  %indvars.iv.next495 = add nsw i64 %indvars.iv494, 1
  %450 = getelementptr inbounds i32, ptr %59, i64 %indvars.iv.next495
  %451 = load i32, ptr %450, align 4, !tbaa !38
  %452 = icmp sgt i32 %451, -1
  br i1 %452, label %440, label %._crit_edge414, !llvm.loop !62

._crit_edge414:                                   ; preds = %440, %429
  %.promoted417 = phi i32 [ %.promoted418420, %429 ], [ %449, %440 ]
  %453 = call double @llvm.fabs.f64(double %432)
  %454 = fcmp ogt double %453, %23
  br i1 %454, label %455, label %461

455:                                              ; preds = %._crit_edge414
  %456 = add nsw i32 %.8421, 1
  %457 = sext i32 %.8421 to i64
  %458 = getelementptr inbounds i32, ptr %5, i64 %457
  store i32 %424, ptr %458, align 4, !tbaa !38
  %459 = sext i32 %424 to i64
  %460 = getelementptr inbounds double, ptr %6, i64 %459
  store double %432, ptr %460, align 8, !tbaa !43
  br label %461

461:                                              ; preds = %.lr.ph423, %455, %._crit_edge414
  %.promoted416 = phi i32 [ %.promoted417, %455 ], [ %.promoted417, %._crit_edge414 ], [ %.promoted418420, %.lr.ph423 ]
  %.9 = phi i32 [ %456, %455 ], [ %.8421, %._crit_edge414 ], [ %.8421, %.lr.ph423 ]
  %462 = icmp sgt i64 %indvars.iv497, 1
  br i1 %462, label %.lr.ph423, label %.loopexit, !llvm.loop !63

.loopexit.loopexit539.unr-lcssa:                  ; preds = %.lr.ph410, %.lr.ph410.preheader
  %indvars.iv489.unr = phi i64 [ 0, %.lr.ph410.preheader ], [ %indvars.iv.next490.1, %.lr.ph410 ]
  %lcmp.mod548.not = icmp eq i64 %xtraiter546, 0
  br i1 %lcmp.mod548.not, label %.loopexit, label %.lr.ph410.epil

.lr.ph410.epil:                                   ; preds = %.loopexit.loopexit539.unr-lcssa
  %463 = getelementptr inbounds i32, ptr %5, i64 %indvars.iv489.unr
  %464 = load i32, ptr %463, align 4, !tbaa !38
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds i32, ptr %29, i64 %465
  %467 = load i32, ptr %466, align 4, !tbaa !38
  store i32 %467, ptr %463, align 4, !tbaa !38
  %468 = getelementptr inbounds double, ptr %74, i64 %465
  %469 = load double, ptr %468, align 8, !tbaa !43
  %470 = sext i32 %467 to i64
  %471 = getelementptr inbounds double, ptr %6, i64 %470
  store double %469, ptr %471, align 8, !tbaa !43
  store double 0.000000e+00, ptr %468, align 8, !tbaa !43
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph410.epil, %.loopexit.loopexit539.unr-lcssa, %461, %234, %393, %.preheader381, %.preheader, %192
  %storemerge377 = phi i32 [ %199, %192 ], [ 0, %.preheader ], [ 0, %.preheader381 ], [ %400, %393 ], [ %.5362, %234 ], [ %.9, %461 ], [ %400, %.loopexit.loopexit539.unr-lcssa ], [ %400, %.lr.ph410.epil ]
  %.3355 = phi i32 [ %.0352.lcssa, %192 ], [ %.0352.lcssa, %.preheader ], [ %390, %.preheader381 ], [ %390, %393 ], [ %.0352.lcssa, %234 ], [ %390, %461 ], [ %390, %.loopexit.loopexit539.unr-lcssa ], [ %390, %.lr.ph410.epil ]
  store i32 %storemerge377, ptr %4, align 4, !tbaa !38
  %472 = load i32, ptr %9, align 4, !tbaa !38
  %473 = getelementptr inbounds i8, ptr %0, i64 224
  %474 = load i32, ptr %473, align 8, !tbaa !64
  %475 = add nsw i32 %474, %472
  store i32 %475, ptr %473, align 8, !tbaa !64
  %476 = load i32, ptr %10, align 4, !tbaa !38
  %477 = getelementptr inbounds i8, ptr %0, i64 228
  %478 = load i32, ptr %477, align 4, !tbaa !65
  %479 = add nsw i32 %478, %476
  store i32 %479, ptr %477, align 4, !tbaa !65
  %480 = getelementptr inbounds i8, ptr %0, i64 232
  %481 = load i32, ptr %480, align 8, !tbaa !66
  %482 = add nsw i32 %481, %.3355
  store i32 %482, ptr %480, align 8, !tbaa !66
  %483 = sitofp i32 %.3355 to double
  %484 = getelementptr inbounds i8, ptr %0, i64 160
  %485 = load double, ptr %484, align 8, !tbaa !67
  %486 = fadd double %485, %483
  store double %486, ptr %484, align 8, !tbaa !67
  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 void
}

; 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.fmuladd.f64(double, double, double) #3

; 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 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 = !{!10, !10, i64 0}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.unroll.disable"}
!48 = distinct !{!48, !45}
!49 = distinct !{!49, !45}
!50 = distinct !{!50, !45}
!51 = distinct !{!51, !45}
!52 = distinct !{!52, !45}
!53 = distinct !{!53, !45}
!54 = distinct !{!54, !47}
!55 = distinct !{!55, !47}
!56 = distinct !{!56, !45}
!57 = distinct !{!57, !45}
!58 = distinct !{!58, !47}
!59 = distinct !{!59, !45}
!60 = distinct !{!60, !45}
!61 = distinct !{!61, !45}
!62 = distinct !{!62, !45}
!63 = distinct !{!63, !45}
!64 = !{!6, !7, i64 224}
!65 = !{!6, !7, i64 228}
!66 = !{!6, !7, i64 232}
!67 = !{!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