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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.lu = type { i32, i32, i32, double, double, double, i32, i32, i32, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, double, double, double, double, double, double, double, i32, i32, i32, double, double, double, double, double, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, double, double, double, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [77 x i8], align 1
@__PRETTY_FUNCTION__.lu_update = external hidden unnamed_addr constant [38 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1

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

169:                                              ; preds = %2
  br label %171

170:                                              ; preds = %2
  call void @__assert_fail(ptr noundef @.str, ptr noundef @.str.1, i32 noundef 470, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

171:                                              ; preds = %169
  store double 0.000000e+00, ptr %60, align 8, !tbaa !9
  store i32 0, ptr %52, align 4, !tbaa !14
  %172 = load ptr, ptr %15, align 8, !tbaa !5
  %173 = load i32, ptr %6, align 4, !tbaa !14
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds i32, ptr %172, i64 %174
  %176 = load i32, ptr %175, align 4, !tbaa !14
  store i32 %176, ptr %43, align 4, !tbaa !14
  %177 = load i32, ptr %43, align 4, !tbaa !14
  store i32 %177, ptr %44, align 4, !tbaa !14
  br label %178

178:                                              ; preds = %212, %171
  %179 = load ptr, ptr %25, align 8, !tbaa !5
  %180 = load i32, ptr %44, align 4, !tbaa !14
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i32, ptr %179, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !14
  store i32 %183, ptr %37, align 4, !tbaa !14
  %184 = icmp sge i32 %183, 0
  br i1 %184, label %185, label %215

185:                                              ; preds = %178
  %186 = load i32, ptr %37, align 4, !tbaa !14
  %187 = load i32, ptr %34, align 4, !tbaa !14
  %188 = icmp ne i32 %186, %187
  br i1 %188, label %189, label %205

189:                                              ; preds = %185
  %190 = load i32, ptr %37, align 4, !tbaa !14
  %191 = load ptr, ptr %25, align 8, !tbaa !5
  %192 = load i32, ptr %43, align 4, !tbaa !14
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i32, ptr %191, i64 %193
  store i32 %190, ptr %194, align 4, !tbaa !14
  %195 = load ptr, ptr %26, align 8, !tbaa !5
  %196 = load i32, ptr %44, align 4, !tbaa !14
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds double, ptr %195, i64 %197
  %199 = load double, ptr %198, align 8, !tbaa !9
  %200 = load ptr, ptr %26, align 8, !tbaa !5
  %201 = load i32, ptr %43, align 4, !tbaa !14
  %202 = add nsw i32 %201, 1
  store i32 %202, ptr %43, align 4, !tbaa !14
  %203 = sext i32 %201 to i64
  %204 = getelementptr inbounds double, ptr %200, i64 %203
  store double %199, ptr %204, align 8, !tbaa !9
  br label %211

205:                                              ; preds = %185
  %206 = load ptr, ptr %26, align 8, !tbaa !5
  %207 = load i32, ptr %44, align 4, !tbaa !14
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  %210 = load double, ptr %209, align 8, !tbaa !9
  store double %210, ptr %60, align 8, !tbaa !9
  store i32 1, ptr %52, align 4, !tbaa !14
  br label %211

211:                                              ; preds = %205, %189
  br label %212

212:                                              ; preds = %211
  %213 = load i32, ptr %44, align 4, !tbaa !14
  %214 = add nsw i32 %213, 1
  store i32 %214, ptr %44, align 4, !tbaa !14
  br label %178, !llvm.loop !41

215:                                              ; preds = %178
  %216 = load i32, ptr %52, align 4, !tbaa !14
  %217 = icmp ne i32 %216, 0
  br i1 %217, label %218, label %229

218:                                              ; preds = %215
  %219 = load i32, ptr %34, align 4, !tbaa !14
  %220 = load ptr, ptr %25, align 8, !tbaa !5
  %221 = load i32, ptr %43, align 4, !tbaa !14
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds i32, ptr %220, i64 %222
  store i32 %219, ptr %223, align 4, !tbaa !14
  %224 = load double, ptr %60, align 8, !tbaa !9
  %225 = load ptr, ptr %26, align 8, !tbaa !5
  %226 = load i32, ptr %43, align 4, !tbaa !14
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds double, ptr %225, i64 %227
  store double %224, ptr %228, align 8, !tbaa !9
  br label %229

229:                                              ; preds = %218, %215
  %230 = load i32, ptr %43, align 4, !tbaa !14
  %231 = load ptr, ptr %15, align 8, !tbaa !5
  %232 = load i32, ptr %6, align 4, !tbaa !14
  %233 = sext i32 %232 to i64
  %234 = getelementptr inbounds i32, ptr %231, i64 %233
  %235 = load i32, ptr %234, align 4, !tbaa !14
  %236 = sub nsw i32 %230, %235
  store i32 %236, ptr %56, align 4, !tbaa !14
  %237 = load ptr, ptr %16, align 8, !tbaa !5
  %238 = load i32, ptr %7, align 4, !tbaa !14
  %239 = add nsw i32 %238, 1
  %240 = sext i32 %239 to i64
  %241 = getelementptr inbounds i32, ptr %237, i64 %240
  %242 = load i32, ptr %241, align 4, !tbaa !14
  %243 = load ptr, ptr %16, align 8, !tbaa !5
  %244 = load i32, ptr %7, align 4, !tbaa !14
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds i32, ptr %243, i64 %245
  %247 = load i32, ptr %246, align 4, !tbaa !14
  %248 = sub nsw i32 %242, %247
  store i32 %248, ptr %55, align 4, !tbaa !14
  %249 = load ptr, ptr %4, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.lu, ptr %249, i32 0, i32 66
  %251 = load i32, ptr %250, align 4, !tbaa !43
  %252 = add nsw i32 %251, 1
  store i32 %252, ptr %250, align 4, !tbaa !43
  store i32 %252, ptr %51, align 4, !tbaa !14
  %253 = load ptr, ptr %16, align 8, !tbaa !5
  %254 = load i32, ptr %7, align 4, !tbaa !14
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds i32, ptr %253, i64 %255
  %257 = load i32, ptr %256, align 4, !tbaa !14
  store i32 %257, ptr %44, align 4, !tbaa !14
  br label %258

258:                                              ; preds = %287, %229
  %259 = load i32, ptr %44, align 4, !tbaa !14
  %260 = load ptr, ptr %16, align 8, !tbaa !5
  %261 = load i32, ptr %7, align 4, !tbaa !14
  %262 = add nsw i32 %261, 1
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds i32, ptr %260, i64 %263
  %265 = load i32, ptr %264, align 4, !tbaa !14
  %266 = icmp slt i32 %259, %265
  br i1 %266, label %267, label %290

267:                                              ; preds = %258
  %268 = load ptr, ptr %23, align 8, !tbaa !5
  %269 = load i32, ptr %44, align 4, !tbaa !14
  %270 = sext i32 %269 to i64
  %271 = getelementptr inbounds i32, ptr %268, i64 %270
  %272 = load i32, ptr %271, align 4, !tbaa !14
  store i32 %272, ptr %37, align 4, !tbaa !14
  %273 = load i32, ptr %51, align 4, !tbaa !14
  %274 = load ptr, ptr %29, align 8, !tbaa !5
  %275 = load i32, ptr %37, align 4, !tbaa !14
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i32, ptr %274, i64 %276
  store i32 %273, ptr %277, align 4, !tbaa !14
  %278 = load ptr, ptr %24, align 8, !tbaa !5
  %279 = load i32, ptr %44, align 4, !tbaa !14
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds double, ptr %278, i64 %280
  %282 = load double, ptr %281, align 8, !tbaa !9
  %283 = load ptr, ptr %32, align 8, !tbaa !5
  %284 = load i32, ptr %37, align 4, !tbaa !14
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds double, ptr %283, i64 %285
  store double %282, ptr %286, align 8, !tbaa !9
  br label %287

287:                                              ; preds = %267
  %288 = load i32, ptr %44, align 4, !tbaa !14
  %289 = add nsw i32 %288, 1
  store i32 %289, ptr %44, align 4, !tbaa !14
  br label %258, !llvm.loop !44

290:                                              ; preds = %258
  %291 = load double, ptr %60, align 8, !tbaa !9
  store double %291, ptr %61, align 8, !tbaa !9
  store i32 0, ptr %53, align 4, !tbaa !14
  %292 = load ptr, ptr %15, align 8, !tbaa !5
  %293 = load i32, ptr %6, align 4, !tbaa !14
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds i32, ptr %292, i64 %294
  %296 = load i32, ptr %295, align 4, !tbaa !14
  store i32 %296, ptr %44, align 4, !tbaa !14
  br label %297

297:                                              ; preds = %343, %290
  %298 = load i32, ptr %44, align 4, !tbaa !14
  %299 = load ptr, ptr %15, align 8, !tbaa !5
  %300 = load i32, ptr %6, align 4, !tbaa !14
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i32, ptr %299, i64 %301
  %303 = load i32, ptr %302, align 4, !tbaa !14
  %304 = load i32, ptr %56, align 4, !tbaa !14
  %305 = add nsw i32 %303, %304
  %306 = icmp slt i32 %298, %305
  br i1 %306, label %307, label %346

307:                                              ; preds = %297
  %308 = load ptr, ptr %25, align 8, !tbaa !5
  %309 = load i32, ptr %44, align 4, !tbaa !14
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %308, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !14
  store i32 %312, ptr %37, align 4, !tbaa !14
  %313 = load i32, ptr %37, align 4, !tbaa !14
  %314 = load i32, ptr %34, align 4, !tbaa !14
  %315 = icmp ne i32 %313, %314
  br i1 %315, label %316, label %317

316:                                              ; preds = %307
  br label %318

317:                                              ; preds = %307
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 546, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

318:                                              ; preds = %316
  %319 = load ptr, ptr %29, align 8, !tbaa !5
  %320 = load i32, ptr %37, align 4, !tbaa !14
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %319, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !14
  %324 = load i32, ptr %51, align 4, !tbaa !14
  %325 = icmp eq i32 %323, %324
  br i1 %325, label %326, label %342

326:                                              ; preds = %318
  %327 = load ptr, ptr %26, align 8, !tbaa !5
  %328 = load i32, ptr %44, align 4, !tbaa !14
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds double, ptr %327, i64 %329
  %331 = load double, ptr %330, align 8, !tbaa !9
  %332 = load ptr, ptr %32, align 8, !tbaa !5
  %333 = load i32, ptr %37, align 4, !tbaa !14
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds double, ptr %332, i64 %334
  %336 = load double, ptr %335, align 8, !tbaa !9
  %337 = load double, ptr %61, align 8, !tbaa !9
  %338 = fneg double %331
  %339 = call double @llvm.fmuladd.f64(double %338, double %336, double %337)
  store double %339, ptr %61, align 8, !tbaa !9
  %340 = load i32, ptr %53, align 4, !tbaa !14
  %341 = add nsw i32 %340, 1
  store i32 %341, ptr %53, align 4, !tbaa !14
  br label %342

342:                                              ; preds = %326, %318
  br label %343

343:                                              ; preds = %342
  %344 = load i32, ptr %44, align 4, !tbaa !14
  %345 = add nsw i32 %344, 1
  store i32 %345, ptr %44, align 4, !tbaa !14
  br label %297, !llvm.loop !45

346:                                              ; preds = %297
  %347 = load double, ptr %61, align 8, !tbaa !9
  %348 = fcmp oeq double %347, 0.000000e+00
  br i1 %348, label %356, label %349

349:                                              ; preds = %346
  %350 = load double, ptr %61, align 8, !tbaa !9
  %351 = call double @llvm.fabs.f64(double %350)
  %352 = load ptr, ptr %4, align 8, !tbaa !5
  %353 = getelementptr inbounds %struct.lu, ptr %352, i32 0, i32 4
  %354 = load double, ptr %353, align 8, !tbaa !46
  %355 = fcmp olt double %351, %354
  br i1 %355, label %356, label %358

356:                                              ; preds = %349, %346
  store i32 -6, ptr %36, align 4, !tbaa !14
  %357 = load i32, ptr %36, align 4, !tbaa !14
  store i32 %357, ptr %3, align 4
  store i32 1, ptr %63, align 4
  br label %1397

358:                                              ; preds = %349
  %359 = load double, ptr %61, align 8, !tbaa !9
  %360 = load double, ptr %5, align 8, !tbaa !9
  %361 = load double, ptr %35, align 8, !tbaa !9
  %362 = fneg double %360
  %363 = call double @llvm.fmuladd.f64(double %362, double %361, double %359)
  %364 = call double @llvm.fabs.f64(double %363)
  store double %364, ptr %62, align 8, !tbaa !9
  store i32 0, ptr %48, align 4, !tbaa !14
  %365 = load ptr, ptr %15, align 8, !tbaa !5
  %366 = load i32, ptr %6, align 4, !tbaa !14
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %365, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !14
  store i32 %369, ptr %44, align 4, !tbaa !14
  br label %370

370:                                              ; preds = %441, %358
  %371 = load i32, ptr %44, align 4, !tbaa !14
  %372 = load ptr, ptr %15, align 8, !tbaa !5
  %373 = load i32, ptr %6, align 4, !tbaa !14
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds i32, ptr %372, i64 %374
  %376 = load i32, ptr %375, align 4, !tbaa !14
  %377 = load i32, ptr %56, align 4, !tbaa !14
  %378 = add nsw i32 %376, %377
  %379 = icmp slt i32 %371, %378
  br i1 %379, label %380, label %444

380:                                              ; preds = %370
  %381 = load ptr, ptr %25, align 8, !tbaa !5
  %382 = load i32, ptr %44, align 4, !tbaa !14
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds i32, ptr %381, i64 %383
  %385 = load i32, ptr %384, align 4, !tbaa !14
  store i32 %385, ptr %37, align 4, !tbaa !14
  %386 = load i32, ptr %37, align 4, !tbaa !14
  %387 = load i32, ptr %34, align 4, !tbaa !14
  %388 = icmp ne i32 %386, %387
  br i1 %388, label %389, label %390

389:                                              ; preds = %380
  br label %391

390:                                              ; preds = %380
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 573, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

391:                                              ; preds = %389
  %392 = load ptr, ptr %12, align 8, !tbaa !5
  %393 = load i32, ptr %37, align 4, !tbaa !14
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds i32, ptr %392, i64 %394
  %396 = load i32, ptr %395, align 4, !tbaa !14
  store i32 %396, ptr %38, align 4, !tbaa !14
  %397 = load ptr, ptr %19, align 8, !tbaa !5
  %398 = load i32, ptr %38, align 4, !tbaa !14
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %397, i64 %399
  %401 = load i32, ptr %400, align 4, !tbaa !14
  store i32 %401, ptr %39, align 4, !tbaa !14
  %402 = load ptr, ptr %18, align 8, !tbaa !5
  %403 = load i32, ptr %38, align 4, !tbaa !14
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds i32, ptr %402, i64 %404
  %406 = load i32, ptr %405, align 4, !tbaa !14
  %407 = load ptr, ptr %17, align 8, !tbaa !5
  %408 = load i32, ptr %39, align 4, !tbaa !14
  %409 = sext i32 %408 to i64
  %410 = getelementptr inbounds i32, ptr %407, i64 %409
  %411 = load i32, ptr %410, align 4, !tbaa !14
  %412 = icmp eq i32 %406, %411
  br i1 %412, label %413, label %440

413:                                              ; preds = %391
  %414 = load ptr, ptr %18, align 8, !tbaa !5
  %415 = load i32, ptr %38, align 4, !tbaa !14
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds i32, ptr %414, i64 %416
  %418 = load i32, ptr %417, align 4, !tbaa !14
  %419 = load ptr, ptr %17, align 8, !tbaa !5
  %420 = load i32, ptr %38, align 4, !tbaa !14
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %419, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !14
  %424 = sub nsw i32 %418, %423
  store i32 %424, ptr %41, align 4, !tbaa !14
  %425 = load i32, ptr %41, align 4, !tbaa !14
  %426 = add nsw i32 %425, 1
  %427 = load i32, ptr %48, align 4, !tbaa !14
  %428 = add nsw i32 %427, %426
  store i32 %428, ptr %48, align 4, !tbaa !14
  %429 = load double, ptr %10, align 8, !tbaa !9
  %430 = load i32, ptr %41, align 4, !tbaa !14
  %431 = add nsw i32 %430, 1
  %432 = sitofp i32 %431 to double
  %433 = load i32, ptr %9, align 4, !tbaa !14
  %434 = sitofp i32 %433 to double
  %435 = call double @llvm.fmuladd.f64(double %429, double %432, double %434)
  %436 = load i32, ptr %48, align 4, !tbaa !14
  %437 = sitofp i32 %436 to double
  %438 = fadd double %437, %435
  %439 = fptosi double %438 to i32
  store i32 %439, ptr %48, align 4, !tbaa !14
  br label %440

440:                                              ; preds = %413, %391
  br label %441

441:                                              ; preds = %440
  %442 = load i32, ptr %44, align 4, !tbaa !14
  %443 = add nsw i32 %442, 1
  store i32 %443, ptr %44, align 4, !tbaa !14
  br label %370, !llvm.loop !47

444:                                              ; preds = %370
  %445 = load ptr, ptr %18, align 8, !tbaa !5
  %446 = load i32, ptr %6, align 4, !tbaa !14
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds i32, ptr %445, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !14
  %450 = load ptr, ptr %17, align 8, !tbaa !5
  %451 = load i32, ptr %6, align 4, !tbaa !14
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds i32, ptr %450, i64 %452
  %454 = load i32, ptr %453, align 4, !tbaa !14
  %455 = sub nsw i32 %449, %454
  store i32 %455, ptr %47, align 4, !tbaa !14
  %456 = load i32, ptr %48, align 4, !tbaa !14
  %457 = load i32, ptr %47, align 4, !tbaa !14
  %458 = icmp sgt i32 %456, %457
  br i1 %458, label %459, label %466

459:                                              ; preds = %444
  %460 = load i32, ptr %48, align 4, !tbaa !14
  %461 = load i32, ptr %47, align 4, !tbaa !14
  %462 = sub nsw i32 %460, %461
  %463 = load ptr, ptr %4, align 8, !tbaa !5
  %464 = getelementptr inbounds %struct.lu, ptr %463, i32 0, i32 16
  store i32 %462, ptr %464, align 8, !tbaa !48
  store i32 1, ptr %36, align 4, !tbaa !14
  %465 = load i32, ptr %36, align 4, !tbaa !14
  store i32 %465, ptr %3, align 4
  store i32 1, ptr %63, align 4
  br label %1397

466:                                              ; preds = %444
  store i32 0, ptr %41, align 4, !tbaa !14
  %467 = load ptr, ptr %15, align 8, !tbaa !5
  %468 = load i32, ptr %34, align 4, !tbaa !14
  %469 = sext i32 %468 to i64
  %470 = getelementptr inbounds i32, ptr %467, i64 %469
  %471 = load i32, ptr %470, align 4, !tbaa !14
  store i32 %471, ptr %44, align 4, !tbaa !14
  br label %472

472:                                              ; preds = %528, %466
  %473 = load ptr, ptr %25, align 8, !tbaa !5
  %474 = load i32, ptr %44, align 4, !tbaa !14
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i32, ptr %473, i64 %475
  %477 = load i32, ptr %476, align 4, !tbaa !14
  store i32 %477, ptr %37, align 4, !tbaa !14
  %478 = icmp sge i32 %477, 0
  br i1 %478, label %479, label %531

479:                                              ; preds = %472
  %480 = load ptr, ptr %12, align 8, !tbaa !5
  %481 = load i32, ptr %37, align 4, !tbaa !14
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds i32, ptr %480, i64 %482
  %484 = load i32, ptr %483, align 4, !tbaa !14
  store i32 %484, ptr %38, align 4, !tbaa !14
  %485 = load ptr, ptr %18, align 8, !tbaa !5
  %486 = load i32, ptr %38, align 4, !tbaa !14
  %487 = sext i32 %486 to i64
  %488 = getelementptr inbounds i32, ptr %485, i64 %487
  %489 = load i32, ptr %488, align 4, !tbaa !14
  %490 = add nsw i32 %489, -1
  store i32 %490, ptr %488, align 4, !tbaa !14
  store i32 %489, ptr %45, align 4, !tbaa !14
  %491 = load i32, ptr %33, align 4, !tbaa !14
  %492 = load ptr, ptr %27, align 8, !tbaa !5
  %493 = load ptr, ptr %17, align 8, !tbaa !5
  %494 = load i32, ptr %38, align 4, !tbaa !14
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds i32, ptr %493, i64 %495
  %497 = load i32, ptr %496, align 4, !tbaa !14
  %498 = load i32, ptr %45, align 4, !tbaa !14
  %499 = call i32 @find(i32 noundef %491, ptr noundef %492, i32 noundef %497, i32 noundef %498)
  store i32 %499, ptr %46, align 4, !tbaa !14
  %500 = load i32, ptr %46, align 4, !tbaa !14
  %501 = load i32, ptr %45, align 4, !tbaa !14
  %502 = icmp slt i32 %500, %501
  br i1 %502, label %503, label %504

503:                                              ; preds = %479
  br label %505

504:                                              ; preds = %479
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.1, i32 noundef 600, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

505:                                              ; preds = %503
  %506 = load ptr, ptr %27, align 8, !tbaa !5
  %507 = load i32, ptr %45, align 4, !tbaa !14
  %508 = sub nsw i32 %507, 1
  %509 = sext i32 %508 to i64
  %510 = getelementptr inbounds i32, ptr %506, i64 %509
  %511 = load i32, ptr %510, align 4, !tbaa !14
  %512 = load ptr, ptr %27, align 8, !tbaa !5
  %513 = load i32, ptr %46, align 4, !tbaa !14
  %514 = sext i32 %513 to i64
  %515 = getelementptr inbounds i32, ptr %512, i64 %514
  store i32 %511, ptr %515, align 4, !tbaa !14
  %516 = load ptr, ptr %28, align 8, !tbaa !5
  %517 = load i32, ptr %45, align 4, !tbaa !14
  %518 = sub nsw i32 %517, 1
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds double, ptr %516, i64 %519
  %521 = load double, ptr %520, align 8, !tbaa !9
  %522 = load ptr, ptr %28, align 8, !tbaa !5
  %523 = load i32, ptr %46, align 4, !tbaa !14
  %524 = sext i32 %523 to i64
  %525 = getelementptr inbounds double, ptr %522, i64 %524
  store double %521, ptr %525, align 8, !tbaa !9
  %526 = load i32, ptr %41, align 4, !tbaa !14
  %527 = add nsw i32 %526, 1
  store i32 %527, ptr %41, align 4, !tbaa !14
  br label %528

528:                                              ; preds = %505
  %529 = load i32, ptr %44, align 4, !tbaa !14
  %530 = add nsw i32 %529, 1
  store i32 %530, ptr %44, align 4, !tbaa !14
  br label %472, !llvm.loop !49

531:                                              ; preds = %472
  %532 = load i32, ptr %41, align 4, !tbaa !14
  %533 = load i32, ptr %8, align 4, !tbaa !14
  %534 = sub nsw i32 %533, %532
  store i32 %534, ptr %8, align 4, !tbaa !14
  %535 = load ptr, ptr %15, align 8, !tbaa !5
  %536 = load i32, ptr %34, align 4, !tbaa !14
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds i32, ptr %535, i64 %537
  %539 = load i32, ptr %538, align 4, !tbaa !14
  store i32 %539, ptr %44, align 4, !tbaa !14
  br label %540

540:                                              ; preds = %552, %531
  %541 = load ptr, ptr %25, align 8, !tbaa !5
  %542 = load i32, ptr %44, align 4, !tbaa !14
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds i32, ptr %541, i64 %543
  %545 = load i32, ptr %544, align 4, !tbaa !14
  %546 = icmp sge i32 %545, 0
  br i1 %546, label %547, label %555

547:                                              ; preds = %540
  %548 = load ptr, ptr %25, align 8, !tbaa !5
  %549 = load i32, ptr %44, align 4, !tbaa !14
  %550 = sext i32 %549 to i64
  %551 = getelementptr inbounds i32, ptr %548, i64 %550
  store i32 -1, ptr %551, align 4, !tbaa !14
  br label %552

552:                                              ; preds = %547
  %553 = load i32, ptr %44, align 4, !tbaa !14
  %554 = add nsw i32 %553, 1
  store i32 %554, ptr %44, align 4, !tbaa !14
  br label %540, !llvm.loop !50

555:                                              ; preds = %540
  %556 = load ptr, ptr %15, align 8, !tbaa !5
  %557 = load i32, ptr %6, align 4, !tbaa !14
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds i32, ptr %556, i64 %558
  %560 = load i32, ptr %559, align 4, !tbaa !14
  %561 = load ptr, ptr %15, align 8, !tbaa !5
  %562 = load i32, ptr %34, align 4, !tbaa !14
  %563 = sext i32 %562 to i64
  %564 = getelementptr inbounds i32, ptr %561, i64 %563
  store i32 %560, ptr %564, align 4, !tbaa !14
  %565 = load i32, ptr %56, align 4, !tbaa !14
  %566 = load ptr, ptr %15, align 8, !tbaa !5
  %567 = load i32, ptr %6, align 4, !tbaa !14
  %568 = sext i32 %567 to i64
  %569 = getelementptr inbounds i32, ptr %566, i64 %568
  %570 = load i32, ptr %569, align 4, !tbaa !14
  %571 = add nsw i32 %570, %565
  store i32 %571, ptr %569, align 4, !tbaa !14
  %572 = load ptr, ptr %25, align 8, !tbaa !5
  %573 = load ptr, ptr %15, align 8, !tbaa !5
  %574 = load i32, ptr %6, align 4, !tbaa !14
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds i32, ptr %573, i64 %575
  %577 = load i32, ptr %576, align 4, !tbaa !14
  %578 = add nsw i32 %577, 1
  store i32 %578, ptr %576, align 4, !tbaa !14
  %579 = sext i32 %577 to i64
  %580 = getelementptr inbounds i32, ptr %572, i64 %579
  store i32 -1, ptr %580, align 4, !tbaa !14
  %581 = load ptr, ptr %15, align 8, !tbaa !5
  %582 = load i32, ptr %34, align 4, !tbaa !14
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds i32, ptr %581, i64 %583
  %585 = load i32, ptr %584, align 4, !tbaa !14
  store i32 %585, ptr %44, align 4, !tbaa !14
  br label %586

586:                                              ; preds = %666, %555
  %587 = load ptr, ptr %25, align 8, !tbaa !5
  %588 = load i32, ptr %44, align 4, !tbaa !14
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds i32, ptr %587, i64 %589
  %591 = load i32, ptr %590, align 4, !tbaa !14
  store i32 %591, ptr %37, align 4, !tbaa !14
  %592 = icmp sge i32 %591, 0
  br i1 %592, label %593, label %669

593:                                              ; preds = %586
  %594 = load ptr, ptr %12, align 8, !tbaa !5
  %595 = load i32, ptr %37, align 4, !tbaa !14
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds i32, ptr %594, i64 %596
  %598 = load i32, ptr %597, align 4, !tbaa !14
  store i32 %598, ptr %38, align 4, !tbaa !14
  %599 = load ptr, ptr %19, align 8, !tbaa !5
  %600 = load i32, ptr %38, align 4, !tbaa !14
  %601 = sext i32 %600 to i64
  %602 = getelementptr inbounds i32, ptr %599, i64 %601
  %603 = load i32, ptr %602, align 4, !tbaa !14
  store i32 %603, ptr %39, align 4, !tbaa !14
  %604 = load ptr, ptr %18, align 8, !tbaa !5
  %605 = load i32, ptr %38, align 4, !tbaa !14
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds i32, ptr %604, i64 %606
  %608 = load i32, ptr %607, align 4, !tbaa !14
  %609 = load ptr, ptr %17, align 8, !tbaa !5
  %610 = load i32, ptr %39, align 4, !tbaa !14
  %611 = sext i32 %610 to i64
  %612 = getelementptr inbounds i32, ptr %609, i64 %611
  %613 = load i32, ptr %612, align 4, !tbaa !14
  %614 = icmp eq i32 %608, %613
  br i1 %614, label %615, label %645

615:                                              ; preds = %593
  %616 = load ptr, ptr %18, align 8, !tbaa !5
  %617 = load i32, ptr %38, align 4, !tbaa !14
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds i32, ptr %616, i64 %618
  %620 = load i32, ptr %619, align 4, !tbaa !14
  %621 = load ptr, ptr %17, align 8, !tbaa !5
  %622 = load i32, ptr %38, align 4, !tbaa !14
  %623 = sext i32 %622 to i64
  %624 = getelementptr inbounds i32, ptr %621, i64 %623
  %625 = load i32, ptr %624, align 4, !tbaa !14
  %626 = sub nsw i32 %620, %625
  store i32 %626, ptr %41, align 4, !tbaa !14
  %627 = load double, ptr %10, align 8, !tbaa !9
  %628 = load i32, ptr %41, align 4, !tbaa !14
  %629 = add nsw i32 %628, 1
  %630 = sitofp i32 %629 to double
  %631 = call double @llvm.fmuladd.f64(double %627, double %630, double 1.000000e+00)
  %632 = load i32, ptr %9, align 4, !tbaa !14
  %633 = sitofp i32 %632 to double
  %634 = fadd double %631, %633
  %635 = fptosi double %634 to i32
  store i32 %635, ptr %47, align 4, !tbaa !14
  %636 = load i32, ptr %38, align 4, !tbaa !14
  %637 = load i32, ptr %6, align 4, !tbaa !14
  %638 = load ptr, ptr %17, align 8, !tbaa !5
  %639 = load ptr, ptr %18, align 8, !tbaa !5
  %640 = load ptr, ptr %19, align 8, !tbaa !5
  %641 = load ptr, ptr %20, align 8, !tbaa !5
  %642 = load ptr, ptr %27, align 8, !tbaa !5
  %643 = load ptr, ptr %28, align 8, !tbaa !5
  %644 = load i32, ptr %47, align 4, !tbaa !14
  call void @lu_file_reappend(i32 noundef %636, i32 noundef %637, ptr noundef %638, ptr noundef %639, ptr noundef %640, ptr noundef %641, ptr noundef %642, ptr noundef %643, i32 noundef %644)
  br label %645

645:                                              ; preds = %615, %593
  %646 = load ptr, ptr %18, align 8, !tbaa !5
  %647 = load i32, ptr %38, align 4, !tbaa !14
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds i32, ptr %646, i64 %648
  %650 = load i32, ptr %649, align 4, !tbaa !14
  %651 = add nsw i32 %650, 1
  store i32 %651, ptr %649, align 4, !tbaa !14
  store i32 %650, ptr %45, align 4, !tbaa !14
  %652 = load i32, ptr %33, align 4, !tbaa !14
  %653 = load ptr, ptr %27, align 8, !tbaa !5
  %654 = load i32, ptr %45, align 4, !tbaa !14
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  store i32 %652, ptr %656, align 4, !tbaa !14
  %657 = load ptr, ptr %26, align 8, !tbaa !5
  %658 = load i32, ptr %44, align 4, !tbaa !14
  %659 = sext i32 %658 to i64
  %660 = getelementptr inbounds double, ptr %657, i64 %659
  %661 = load double, ptr %660, align 8, !tbaa !9
  %662 = load ptr, ptr %28, align 8, !tbaa !5
  %663 = load i32, ptr %45, align 4, !tbaa !14
  %664 = sext i32 %663 to i64
  %665 = getelementptr inbounds double, ptr %662, i64 %664
  store double %661, ptr %665, align 8, !tbaa !9
  br label %666

666:                                              ; preds = %645
  %667 = load i32, ptr %44, align 4, !tbaa !14
  %668 = add nsw i32 %667, 1
  store i32 %668, ptr %44, align 4, !tbaa !14
  br label %586, !llvm.loop !51

669:                                              ; preds = %586
  %670 = load i32, ptr %56, align 4, !tbaa !14
  %671 = load i32, ptr %8, align 4, !tbaa !14
  %672 = add nsw i32 %671, %670
  store i32 %672, ptr %8, align 4, !tbaa !14
  %673 = load double, ptr %60, align 8, !tbaa !9
  %674 = load ptr, ptr %21, align 8, !tbaa !5
  %675 = load i32, ptr %33, align 4, !tbaa !14
  %676 = sext i32 %675 to i64
  %677 = getelementptr inbounds double, ptr %674, i64 %676
  store double %673, ptr %677, align 8, !tbaa !9
  %678 = load double, ptr %60, align 8, !tbaa !9
  %679 = load ptr, ptr %22, align 8, !tbaa !5
  %680 = load i32, ptr %34, align 4, !tbaa !14
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds double, ptr %679, i64 %681
  store double %678, ptr %682, align 8, !tbaa !9
  store ptr null, ptr %59, align 8, !tbaa !5
  store ptr null, ptr %58, align 8, !tbaa !5
  %683 = load i32, ptr %52, align 4, !tbaa !14
  %684 = icmp ne i32 %683, 0
  br i1 %684, label %685, label %757

685:                                              ; preds = %669
  %686 = load i32, ptr %53, align 4, !tbaa !14
  %687 = icmp eq i32 %686, 0
  %688 = zext i1 %687 to i32
  store i32 %688, ptr %54, align 4, !tbaa !14
  %689 = load i32, ptr %54, align 4, !tbaa !14
  %690 = icmp ne i32 %689, 0
  br i1 %690, label %691, label %756

691:                                              ; preds = %685
  %692 = load ptr, ptr %4, align 8, !tbaa !5
  %693 = getelementptr inbounds %struct.lu, ptr %692, i32 0, i32 26
  %694 = load double, ptr %693, align 8, !tbaa !52
  %695 = load double, ptr %61, align 8, !tbaa !9
  %696 = call double @llvm.fabs.f64(double %695)
  %697 = call double @llvm.minnum.f64(double %694, double %696)
  %698 = load ptr, ptr %4, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.lu, ptr %698, i32 0, i32 26
  store double %697, ptr %699, align 8, !tbaa !52
  %700 = load ptr, ptr %4, align 8, !tbaa !5
  %701 = getelementptr inbounds %struct.lu, ptr %700, i32 0, i32 27
  %702 = load double, ptr %701, align 8, !tbaa !53
  %703 = load double, ptr %61, align 8, !tbaa !9
  %704 = call double @llvm.fabs.f64(double %703)
  %705 = call double @llvm.maxnum.f64(double %702, double %704)
  %706 = load ptr, ptr %4, align 8, !tbaa !5
  %707 = getelementptr inbounds %struct.lu, ptr %706, i32 0, i32 27
  store double %705, ptr %707, align 8, !tbaa !53
  %708 = load i32, ptr %55, align 4, !tbaa !14
  %709 = add nsw i32 %708, 1
  store i32 %709, ptr %57, align 4, !tbaa !14
  %710 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %710, ptr %59, align 8, !tbaa !5
  %711 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %711, ptr %58, align 8, !tbaa !5
  %712 = load i32, ptr %34, align 4, !tbaa !14
  %713 = load ptr, ptr %59, align 8, !tbaa !5
  %714 = getelementptr inbounds i32, ptr %713, i64 0
  store i32 %712, ptr %714, align 4, !tbaa !14
  %715 = load i32, ptr %33, align 4, !tbaa !14
  %716 = load ptr, ptr %58, align 8, !tbaa !5
  %717 = getelementptr inbounds i32, ptr %716, i64 0
  store i32 %715, ptr %717, align 4, !tbaa !14
  %718 = load ptr, ptr %16, align 8, !tbaa !5
  %719 = load i32, ptr %7, align 4, !tbaa !14
  %720 = sext i32 %719 to i64
  %721 = getelementptr inbounds i32, ptr %718, i64 %720
  %722 = load i32, ptr %721, align 4, !tbaa !14
  store i32 %722, ptr %44, align 4, !tbaa !14
  store i32 1, ptr %40, align 4, !tbaa !14
  br label %723

723:                                              ; preds = %748, %691
  %724 = load i32, ptr %40, align 4, !tbaa !14
  %725 = load i32, ptr %57, align 4, !tbaa !14
  %726 = icmp slt i32 %724, %725
  br i1 %726, label %727, label %751

727:                                              ; preds = %723
  %728 = load ptr, ptr %23, align 8, !tbaa !5
  %729 = load i32, ptr %44, align 4, !tbaa !14
  %730 = add nsw i32 %729, 1
  store i32 %730, ptr %44, align 4, !tbaa !14
  %731 = sext i32 %729 to i64
  %732 = getelementptr inbounds i32, ptr %728, i64 %731
  %733 = load i32, ptr %732, align 4, !tbaa !14
  store i32 %733, ptr %37, align 4, !tbaa !14
  %734 = load i32, ptr %37, align 4, !tbaa !14
  %735 = load ptr, ptr %59, align 8, !tbaa !5
  %736 = load i32, ptr %40, align 4, !tbaa !14
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds i32, ptr %735, i64 %737
  store i32 %734, ptr %738, align 4, !tbaa !14
  %739 = load ptr, ptr %12, align 8, !tbaa !5
  %740 = load i32, ptr %37, align 4, !tbaa !14
  %741 = sext i32 %740 to i64
  %742 = getelementptr inbounds i32, ptr %739, i64 %741
  %743 = load i32, ptr %742, align 4, !tbaa !14
  %744 = load ptr, ptr %58, align 8, !tbaa !5
  %745 = load i32, ptr %40, align 4, !tbaa !14
  %746 = sext i32 %745 to i64
  %747 = getelementptr inbounds i32, ptr %744, i64 %746
  store i32 %743, ptr %747, align 4, !tbaa !14
  br label %748

748:                                              ; preds = %727
  %749 = load i32, ptr %40, align 4, !tbaa !14
  %750 = add nsw i32 %749, 1
  store i32 %750, ptr %40, align 4, !tbaa !14
  br label %723, !llvm.loop !54

751:                                              ; preds = %723
  %752 = load ptr, ptr %4, align 8, !tbaa !5
  %753 = getelementptr inbounds %struct.lu, ptr %752, i32 0, i32 22
  %754 = load i32, ptr %753, align 8, !tbaa !55
  %755 = add nsw i32 %754, 1
  store i32 %755, ptr %753, align 8, !tbaa !55
  br label %756

756:                                              ; preds = %751, %685
  br label %1021

757:                                              ; preds = %669
  call void @llvm.lifetime.start.p0(i64 8, ptr %64) #5
  %758 = load ptr, ptr %30, align 8, !tbaa !5
  store ptr %758, ptr %64, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #5
  %759 = load ptr, ptr %31, align 8, !tbaa !5
  store ptr %759, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #5
  %760 = load ptr, ptr %32, align 8, !tbaa !5
  store ptr %760, ptr %68, align 8, !tbaa !5
  %761 = load i32, ptr %6, align 4, !tbaa !14
  %762 = load i32, ptr %33, align 4, !tbaa !14
  %763 = load ptr, ptr %17, align 8, !tbaa !5
  %764 = load ptr, ptr %18, align 8, !tbaa !5
  %765 = load ptr, ptr %27, align 8, !tbaa !5
  %766 = load ptr, ptr %64, align 8, !tbaa !5
  %767 = load ptr, ptr %29, align 8, !tbaa !5
  %768 = load ptr, ptr %31, align 8, !tbaa !5
  %769 = call i32 @bfs_path(i32 noundef %761, i32 noundef %762, ptr noundef %763, ptr noundef %764, ptr noundef %765, ptr noundef %766, ptr noundef %767, ptr noundef %768)
  store i32 %769, ptr %65, align 4, !tbaa !14
  %770 = load i32, ptr %65, align 4, !tbaa !14
  %771 = load i32, ptr %6, align 4, !tbaa !14
  %772 = sub nsw i32 %771, 1
  %773 = icmp slt i32 %770, %772
  br i1 %773, label %774, label %775

774:                                              ; preds = %757
  br label %776

775:                                              ; preds = %757
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 710, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

776:                                              ; preds = %774
  %777 = load ptr, ptr %64, align 8, !tbaa !5
  %778 = load i32, ptr %65, align 4, !tbaa !14
  %779 = sext i32 %778 to i64
  %780 = getelementptr inbounds i32, ptr %777, i64 %779
  %781 = load i32, ptr %780, align 4, !tbaa !14
  %782 = load i32, ptr %33, align 4, !tbaa !14
  %783 = icmp eq i32 %781, %782
  br i1 %783, label %784, label %785

784:                                              ; preds = %776
  br label %786

785:                                              ; preds = %776
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.1, i32 noundef 711, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

786:                                              ; preds = %784
  store i32 1, ptr %54, align 4, !tbaa !14
  %787 = load i32, ptr %6, align 4, !tbaa !14
  store i32 %787, ptr %67, align 4, !tbaa !14
  %788 = load ptr, ptr %4, align 8, !tbaa !5
  %789 = getelementptr inbounds %struct.lu, ptr %788, i32 0, i32 66
  %790 = load i32, ptr %789, align 4, !tbaa !43
  %791 = add nsw i32 %790, 1
  store i32 %791, ptr %789, align 4, !tbaa !43
  store i32 %791, ptr %51, align 4, !tbaa !14
  %792 = load i32, ptr %65, align 4, !tbaa !14
  store i32 %792, ptr %42, align 4, !tbaa !14
  br label %793

793:                                              ; preds = %881, %786
  %794 = load i32, ptr %42, align 4, !tbaa !14
  %795 = load i32, ptr %6, align 4, !tbaa !14
  %796 = sub nsw i32 %795, 1
  %797 = icmp slt i32 %794, %796
  br i1 %797, label %798, label %801

798:                                              ; preds = %793
  %799 = load i32, ptr %54, align 4, !tbaa !14
  %800 = icmp ne i32 %799, 0
  br label %801

801:                                              ; preds = %798, %793
  %802 = phi i1 [ false, %793 ], [ %800, %798 ]
  br i1 %802, label %803, label %884

803:                                              ; preds = %801
  %804 = load ptr, ptr %64, align 8, !tbaa !5
  %805 = load i32, ptr %42, align 4, !tbaa !14
  %806 = sext i32 %805 to i64
  %807 = getelementptr inbounds i32, ptr %804, i64 %806
  %808 = load i32, ptr %807, align 4, !tbaa !14
  store i32 %808, ptr %38, align 4, !tbaa !14
  %809 = load ptr, ptr %64, align 8, !tbaa !5
  %810 = load i32, ptr %42, align 4, !tbaa !14
  %811 = add nsw i32 %810, 1
  %812 = sext i32 %811 to i64
  %813 = getelementptr inbounds i32, ptr %809, i64 %812
  %814 = load i32, ptr %813, align 4, !tbaa !14
  store i32 %814, ptr %39, align 4, !tbaa !14
  %815 = load i32, ptr %39, align 4, !tbaa !14
  %816 = load ptr, ptr %27, align 8, !tbaa !5
  %817 = load ptr, ptr %17, align 8, !tbaa !5
  %818 = load i32, ptr %38, align 4, !tbaa !14
  %819 = sext i32 %818 to i64
  %820 = getelementptr inbounds i32, ptr %817, i64 %819
  %821 = load i32, ptr %820, align 4, !tbaa !14
  %822 = load ptr, ptr %18, align 8, !tbaa !5
  %823 = load i32, ptr %38, align 4, !tbaa !14
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds i32, ptr %822, i64 %824
  %826 = load i32, ptr %825, align 4, !tbaa !14
  %827 = call i32 @find(i32 noundef %815, ptr noundef %816, i32 noundef %821, i32 noundef %826)
  store i32 %827, ptr %46, align 4, !tbaa !14
  %828 = load i32, ptr %46, align 4, !tbaa !14
  %829 = load ptr, ptr %18, align 8, !tbaa !5
  %830 = load i32, ptr %38, align 4, !tbaa !14
  %831 = sext i32 %830 to i64
  %832 = getelementptr inbounds i32, ptr %829, i64 %831
  %833 = load i32, ptr %832, align 4, !tbaa !14
  %834 = icmp slt i32 %828, %833
  br i1 %834, label %835, label %836

835:                                              ; preds = %803
  br label %837

836:                                              ; preds = %803
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 738, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

837:                                              ; preds = %835
  %838 = load i32, ptr %38, align 4, !tbaa !14
  %839 = load ptr, ptr %27, align 8, !tbaa !5
  %840 = load i32, ptr %46, align 4, !tbaa !14
  %841 = sext i32 %840 to i64
  %842 = getelementptr inbounds i32, ptr %839, i64 %841
  store i32 %838, ptr %842, align 4, !tbaa !14
  %843 = load i32, ptr %38, align 4, !tbaa !14
  %844 = load ptr, ptr %17, align 8, !tbaa !5
  %845 = load ptr, ptr %18, align 8, !tbaa !5
  %846 = load ptr, ptr %27, align 8, !tbaa !5
  %847 = load i32, ptr %67, align 4, !tbaa !14
  %848 = load ptr, ptr %66, align 8, !tbaa !5
  %849 = load ptr, ptr %68, align 8, !tbaa !5
  %850 = load ptr, ptr %29, align 8, !tbaa !5
  %851 = load i32, ptr %51, align 4, !tbaa !14
  %852 = call i32 @lu_dfs(i32 noundef %843, ptr noundef %844, ptr noundef %845, ptr noundef %846, i32 noundef %847, ptr noundef %848, ptr noundef %849, ptr noundef %850, i32 noundef %851)
  store i32 %852, ptr %67, align 4, !tbaa !14
  %853 = load ptr, ptr %66, align 8, !tbaa !5
  %854 = load i32, ptr %67, align 4, !tbaa !14
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds i32, ptr %853, i64 %855
  %857 = load i32, ptr %856, align 4, !tbaa !14
  %858 = load i32, ptr %38, align 4, !tbaa !14
  %859 = icmp eq i32 %857, %858
  br i1 %859, label %860, label %861

860:                                              ; preds = %837
  br label %862

861:                                              ; preds = %837
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 742, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

862:                                              ; preds = %860
  %863 = load i32, ptr %39, align 4, !tbaa !14
  %864 = load ptr, ptr %66, align 8, !tbaa !5
  %865 = load i32, ptr %67, align 4, !tbaa !14
  %866 = sext i32 %865 to i64
  %867 = getelementptr inbounds i32, ptr %864, i64 %866
  store i32 %863, ptr %867, align 4, !tbaa !14
  %868 = load i32, ptr %39, align 4, !tbaa !14
  %869 = load ptr, ptr %27, align 8, !tbaa !5
  %870 = load i32, ptr %46, align 4, !tbaa !14
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds i32, ptr %869, i64 %871
  store i32 %868, ptr %872, align 4, !tbaa !14
  %873 = load ptr, ptr %29, align 8, !tbaa !5
  %874 = load i32, ptr %39, align 4, !tbaa !14
  %875 = sext i32 %874 to i64
  %876 = getelementptr inbounds i32, ptr %873, i64 %875
  %877 = load i32, ptr %876, align 4, !tbaa !14
  %878 = load i32, ptr %51, align 4, !tbaa !14
  %879 = icmp ne i32 %877, %878
  %880 = zext i1 %879 to i32
  store i32 %880, ptr %54, align 4, !tbaa !14
  br label %881

881:                                              ; preds = %862
  %882 = load i32, ptr %42, align 4, !tbaa !14
  %883 = add nsw i32 %882, 1
  store i32 %883, ptr %42, align 4, !tbaa !14
  br label %793, !llvm.loop !56

884:                                              ; preds = %801
  %885 = load i32, ptr %54, align 4, !tbaa !14
  %886 = icmp ne i32 %885, 0
  br i1 %886, label %887, label %961

887:                                              ; preds = %884
  %888 = load ptr, ptr %64, align 8, !tbaa !5
  %889 = load i32, ptr %6, align 4, !tbaa !14
  %890 = sub nsw i32 %889, 1
  %891 = sext i32 %890 to i64
  %892 = getelementptr inbounds i32, ptr %888, i64 %891
  %893 = load i32, ptr %892, align 4, !tbaa !14
  store i32 %893, ptr %38, align 4, !tbaa !14
  %894 = load i32, ptr %38, align 4, !tbaa !14
  %895 = load ptr, ptr %17, align 8, !tbaa !5
  %896 = load ptr, ptr %18, align 8, !tbaa !5
  %897 = load ptr, ptr %27, align 8, !tbaa !5
  %898 = load i32, ptr %67, align 4, !tbaa !14
  %899 = load ptr, ptr %66, align 8, !tbaa !5
  %900 = load ptr, ptr %68, align 8, !tbaa !5
  %901 = load ptr, ptr %29, align 8, !tbaa !5
  %902 = load i32, ptr %51, align 4, !tbaa !14
  %903 = call i32 @lu_dfs(i32 noundef %894, ptr noundef %895, ptr noundef %896, ptr noundef %897, i32 noundef %898, ptr noundef %899, ptr noundef %900, ptr noundef %901, i32 noundef %902)
  store i32 %903, ptr %67, align 4, !tbaa !14
  %904 = load ptr, ptr %66, align 8, !tbaa !5
  %905 = load i32, ptr %67, align 4, !tbaa !14
  %906 = sext i32 %905 to i64
  %907 = getelementptr inbounds i32, ptr %904, i64 %906
  %908 = load i32, ptr %907, align 4, !tbaa !14
  %909 = load i32, ptr %38, align 4, !tbaa !14
  %910 = icmp eq i32 %908, %909
  br i1 %910, label %911, label %912

911:                                              ; preds = %887
  br label %913

912:                                              ; preds = %887
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.1, i32 noundef 761, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

913:                                              ; preds = %911
  %914 = load i32, ptr %33, align 4, !tbaa !14
  %915 = load ptr, ptr %66, align 8, !tbaa !5
  %916 = load i32, ptr %67, align 4, !tbaa !14
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds i32, ptr %915, i64 %917
  store i32 %914, ptr %918, align 4, !tbaa !14
  %919 = load ptr, ptr %29, align 8, !tbaa !5
  %920 = load i32, ptr %38, align 4, !tbaa !14
  %921 = sext i32 %920 to i64
  %922 = getelementptr inbounds i32, ptr %919, i64 %921
  %923 = load i32, ptr %922, align 4, !tbaa !14
  %924 = add nsw i32 %923, -1
  store i32 %924, ptr %922, align 4, !tbaa !14
  %925 = load ptr, ptr %15, align 8, !tbaa !5
  %926 = load i32, ptr %34, align 4, !tbaa !14
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds i32, ptr %925, i64 %927
  %929 = load i32, ptr %928, align 4, !tbaa !14
  store i32 %929, ptr %44, align 4, !tbaa !14
  br label %930

930:                                              ; preds = %951, %913
  %931 = load ptr, ptr %25, align 8, !tbaa !5
  %932 = load i32, ptr %44, align 4, !tbaa !14
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds i32, ptr %931, i64 %933
  %935 = load i32, ptr %934, align 4, !tbaa !14
  store i32 %935, ptr %37, align 4, !tbaa !14
  %936 = icmp sge i32 %935, 0
  br i1 %936, label %937, label %954

937:                                              ; preds = %930
  %938 = load ptr, ptr %29, align 8, !tbaa !5
  %939 = load ptr, ptr %12, align 8, !tbaa !5
  %940 = load i32, ptr %37, align 4, !tbaa !14
  %941 = sext i32 %940 to i64
  %942 = getelementptr inbounds i32, ptr %939, i64 %941
  %943 = load i32, ptr %942, align 4, !tbaa !14
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds i32, ptr %938, i64 %944
  %946 = load i32, ptr %945, align 4, !tbaa !14
  %947 = load i32, ptr %51, align 4, !tbaa !14
  %948 = icmp eq i32 %946, %947
  br i1 %948, label %949, label %950

949:                                              ; preds = %937
  store i32 0, ptr %54, align 4, !tbaa !14
  br label %950

950:                                              ; preds = %949, %937
  br label %951

951:                                              ; preds = %950
  %952 = load i32, ptr %44, align 4, !tbaa !14
  %953 = add nsw i32 %952, 1
  store i32 %953, ptr %44, align 4, !tbaa !14
  br label %930, !llvm.loop !57

954:                                              ; preds = %930
  %955 = load ptr, ptr %29, align 8, !tbaa !5
  %956 = load i32, ptr %38, align 4, !tbaa !14
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds i32, ptr %955, i64 %957
  %959 = load i32, ptr %958, align 4, !tbaa !14
  %960 = add nsw i32 %959, 1
  store i32 %960, ptr %958, align 4, !tbaa !14
  br label %961

961:                                              ; preds = %954, %884
  %962 = load i32, ptr %54, align 4, !tbaa !14
  %963 = icmp ne i32 %962, 0
  br i1 %963, label %964, label %1020

964:                                              ; preds = %961
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #5
  %965 = load i32, ptr %6, align 4, !tbaa !14
  %966 = load i32, ptr %65, align 4, !tbaa !14
  %967 = sub nsw i32 %965, %966
  %968 = sub nsw i32 %967, 1
  store i32 %968, ptr %69, align 4, !tbaa !14
  %969 = load ptr, ptr %4, align 8, !tbaa !5
  %970 = load ptr, ptr %64, align 8, !tbaa !5
  %971 = load i32, ptr %65, align 4, !tbaa !14
  %972 = sext i32 %971 to i64
  %973 = getelementptr inbounds i32, ptr %970, i64 %972
  %974 = load i32, ptr %69, align 4, !tbaa !14
  call void @permute(ptr noundef %969, ptr noundef %973, i32 noundef %974)
  %975 = load i32, ptr %8, align 4, !tbaa !14
  %976 = add nsw i32 %975, -1
  store i32 %976, ptr %8, align 4, !tbaa !14
  %977 = load ptr, ptr %66, align 8, !tbaa !5
  %978 = load i32, ptr %67, align 4, !tbaa !14
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds i32, ptr %977, i64 %979
  %981 = load i32, ptr %980, align 4, !tbaa !14
  %982 = load i32, ptr %33, align 4, !tbaa !14
  %983 = icmp eq i32 %981, %982
  br i1 %983, label %984, label %985

984:                                              ; preds = %964
  br label %986

985:                                              ; preds = %964
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 782, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

986:                                              ; preds = %984
  %987 = load ptr, ptr %66, align 8, !tbaa !5
  %988 = load i32, ptr %67, align 4, !tbaa !14
  %989 = sext i32 %988 to i64
  %990 = getelementptr inbounds i32, ptr %987, i64 %989
  store ptr %990, ptr %58, align 8, !tbaa !5
  %991 = load ptr, ptr %30, align 8, !tbaa !5
  %992 = load i32, ptr %67, align 4, !tbaa !14
  %993 = sext i32 %992 to i64
  %994 = getelementptr inbounds i32, ptr %991, i64 %993
  store ptr %994, ptr %59, align 8, !tbaa !5
  %995 = load i32, ptr %6, align 4, !tbaa !14
  %996 = load i32, ptr %67, align 4, !tbaa !14
  %997 = sub nsw i32 %995, %996
  store i32 %997, ptr %57, align 4, !tbaa !14
  store i32 0, ptr %40, align 4, !tbaa !14
  br label %998

998:                                              ; preds = %1016, %986
  %999 = load i32, ptr %40, align 4, !tbaa !14
  %1000 = load i32, ptr %57, align 4, !tbaa !14
  %1001 = icmp slt i32 %999, %1000
  br i1 %1001, label %1002, label %1019

1002:                                             ; preds = %998
  %1003 = load ptr, ptr %11, align 8, !tbaa !5
  %1004 = load ptr, ptr %58, align 8, !tbaa !5
  %1005 = load i32, ptr %40, align 4, !tbaa !14
  %1006 = sext i32 %1005 to i64
  %1007 = getelementptr inbounds i32, ptr %1004, i64 %1006
  %1008 = load i32, ptr %1007, align 4, !tbaa !14
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds i32, ptr %1003, i64 %1009
  %1011 = load i32, ptr %1010, align 4, !tbaa !14
  %1012 = load ptr, ptr %59, align 8, !tbaa !5
  %1013 = load i32, ptr %40, align 4, !tbaa !14
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds i32, ptr %1012, i64 %1014
  store i32 %1011, ptr %1015, align 4, !tbaa !14
  br label %1016

1016:                                             ; preds = %1002
  %1017 = load i32, ptr %40, align 4, !tbaa !14
  %1018 = add nsw i32 %1017, 1
  store i32 %1018, ptr %40, align 4, !tbaa !14
  br label %998, !llvm.loop !58

1019:                                             ; preds = %998
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #5
  br label %1020

1020:                                             ; preds = %1019, %961
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %64) #5
  br label %1021

1021:                                             ; preds = %1020, %756
  %1022 = load i32, ptr %54, align 4, !tbaa !14
  %1023 = icmp ne i32 %1022, 0
  br i1 %1023, label %1231, label %1024

1024:                                             ; preds = %1021
  %1025 = load ptr, ptr %17, align 8, !tbaa !5
  %1026 = load i32, ptr %33, align 4, !tbaa !14
  %1027 = sext i32 %1026 to i64
  %1028 = getelementptr inbounds i32, ptr %1025, i64 %1027
  %1029 = load i32, ptr %1028, align 4, !tbaa !14
  store i32 %1029, ptr %44, align 4, !tbaa !14
  br label %1030

1030:                                             ; preds = %1109, %1024
  %1031 = load i32, ptr %44, align 4, !tbaa !14
  %1032 = load ptr, ptr %18, align 8, !tbaa !5
  %1033 = load i32, ptr %33, align 4, !tbaa !14
  %1034 = sext i32 %1033 to i64
  %1035 = getelementptr inbounds i32, ptr %1032, i64 %1034
  %1036 = load i32, ptr %1035, align 4, !tbaa !14
  %1037 = icmp slt i32 %1031, %1036
  br i1 %1037, label %1038, label %1112

1038:                                             ; preds = %1030
  %1039 = load ptr, ptr %27, align 8, !tbaa !5
  %1040 = load i32, ptr %44, align 4, !tbaa !14
  %1041 = sext i32 %1040 to i64
  %1042 = getelementptr inbounds i32, ptr %1039, i64 %1041
  %1043 = load i32, ptr %1042, align 4, !tbaa !14
  store i32 %1043, ptr %38, align 4, !tbaa !14
  %1044 = load i32, ptr %38, align 4, !tbaa !14
  %1045 = load i32, ptr %33, align 4, !tbaa !14
  %1046 = icmp ne i32 %1044, %1045
  br i1 %1046, label %1047, label %1048

1047:                                             ; preds = %1038
  br label %1049

1048:                                             ; preds = %1038
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.1, i32 noundef 803, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

1049:                                             ; preds = %1047
  store i32 -1, ptr %46, align 4, !tbaa !14
  %1050 = load ptr, ptr %15, align 8, !tbaa !5
  %1051 = load ptr, ptr %11, align 8, !tbaa !5
  %1052 = load i32, ptr %38, align 4, !tbaa !14
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds i32, ptr %1051, i64 %1053
  %1055 = load i32, ptr %1054, align 4, !tbaa !14
  %1056 = sext i32 %1055 to i64
  %1057 = getelementptr inbounds i32, ptr %1050, i64 %1056
  %1058 = load i32, ptr %1057, align 4, !tbaa !14
  store i32 %1058, ptr %45, align 4, !tbaa !14
  br label %1059

1059:                                             ; preds = %1073, %1049
  %1060 = load ptr, ptr %25, align 8, !tbaa !5
  %1061 = load i32, ptr %45, align 4, !tbaa !14
  %1062 = sext i32 %1061 to i64
  %1063 = getelementptr inbounds i32, ptr %1060, i64 %1062
  %1064 = load i32, ptr %1063, align 4, !tbaa !14
  store i32 %1064, ptr %37, align 4, !tbaa !14
  %1065 = icmp sge i32 %1064, 0
  br i1 %1065, label %1066, label %1076

1066:                                             ; preds = %1059
  %1067 = load i32, ptr %37, align 4, !tbaa !14
  %1068 = load i32, ptr %34, align 4, !tbaa !14
  %1069 = icmp eq i32 %1067, %1068
  br i1 %1069, label %1070, label %1072

1070:                                             ; preds = %1066
  %1071 = load i32, ptr %45, align 4, !tbaa !14
  store i32 %1071, ptr %46, align 4, !tbaa !14
  br label %1072

1072:                                             ; preds = %1070, %1066
  br label %1073

1073:                                             ; preds = %1072
  %1074 = load i32, ptr %45, align 4, !tbaa !14
  %1075 = add nsw i32 %1074, 1
  store i32 %1075, ptr %45, align 4, !tbaa !14
  br label %1059, !llvm.loop !59

1076:                                             ; preds = %1059
  %1077 = load i32, ptr %46, align 4, !tbaa !14
  %1078 = icmp sge i32 %1077, 0
  br i1 %1078, label %1079, label %1080

1079:                                             ; preds = %1076
  br label %1081

1080:                                             ; preds = %1076
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 809, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

1081:                                             ; preds = %1079
  %1082 = load ptr, ptr %25, align 8, !tbaa !5
  %1083 = load i32, ptr %45, align 4, !tbaa !14
  %1084 = sub nsw i32 %1083, 1
  %1085 = sext i32 %1084 to i64
  %1086 = getelementptr inbounds i32, ptr %1082, i64 %1085
  %1087 = load i32, ptr %1086, align 4, !tbaa !14
  %1088 = load ptr, ptr %25, align 8, !tbaa !5
  %1089 = load i32, ptr %46, align 4, !tbaa !14
  %1090 = sext i32 %1089 to i64
  %1091 = getelementptr inbounds i32, ptr %1088, i64 %1090
  store i32 %1087, ptr %1091, align 4, !tbaa !14
  %1092 = load ptr, ptr %26, align 8, !tbaa !5
  %1093 = load i32, ptr %45, align 4, !tbaa !14
  %1094 = sub nsw i32 %1093, 1
  %1095 = sext i32 %1094 to i64
  %1096 = getelementptr inbounds double, ptr %1092, i64 %1095
  %1097 = load double, ptr %1096, align 8, !tbaa !9
  %1098 = load ptr, ptr %26, align 8, !tbaa !5
  %1099 = load i32, ptr %46, align 4, !tbaa !14
  %1100 = sext i32 %1099 to i64
  %1101 = getelementptr inbounds double, ptr %1098, i64 %1100
  store double %1097, ptr %1101, align 8, !tbaa !9
  %1102 = load ptr, ptr %25, align 8, !tbaa !5
  %1103 = load i32, ptr %45, align 4, !tbaa !14
  %1104 = sub nsw i32 %1103, 1
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds i32, ptr %1102, i64 %1105
  store i32 -1, ptr %1106, align 4, !tbaa !14
  %1107 = load i32, ptr %8, align 4, !tbaa !14
  %1108 = add nsw i32 %1107, -1
  store i32 %1108, ptr %8, align 4, !tbaa !14
  br label %1109

1109:                                             ; preds = %1081
  %1110 = load i32, ptr %44, align 4, !tbaa !14
  %1111 = add nsw i32 %1110, 1
  store i32 %1111, ptr %44, align 4, !tbaa !14
  br label %1030, !llvm.loop !60

1112:                                             ; preds = %1030
  %1113 = load ptr, ptr %17, align 8, !tbaa !5
  %1114 = load i32, ptr %33, align 4, !tbaa !14
  %1115 = sext i32 %1114 to i64
  %1116 = getelementptr inbounds i32, ptr %1113, i64 %1115
  %1117 = load i32, ptr %1116, align 4, !tbaa !14
  %1118 = load ptr, ptr %18, align 8, !tbaa !5
  %1119 = load i32, ptr %33, align 4, !tbaa !14
  %1120 = sext i32 %1119 to i64
  %1121 = getelementptr inbounds i32, ptr %1118, i64 %1120
  store i32 %1117, ptr %1121, align 4, !tbaa !14
  %1122 = load double, ptr %61, align 8, !tbaa !9
  %1123 = load ptr, ptr %21, align 8, !tbaa !5
  %1124 = load i32, ptr %33, align 4, !tbaa !14
  %1125 = sext i32 %1124 to i64
  %1126 = getelementptr inbounds double, ptr %1123, i64 %1125
  store double %1122, ptr %1126, align 8, !tbaa !9
  %1127 = load double, ptr %61, align 8, !tbaa !9
  %1128 = load ptr, ptr %22, align 8, !tbaa !5
  %1129 = load i32, ptr %34, align 4, !tbaa !14
  %1130 = sext i32 %1129 to i64
  %1131 = getelementptr inbounds double, ptr %1128, i64 %1130
  store double %1127, ptr %1131, align 8, !tbaa !9
  %1132 = load ptr, ptr %4, align 8, !tbaa !5
  %1133 = getelementptr inbounds %struct.lu, ptr %1132, i32 0, i32 26
  %1134 = load double, ptr %1133, align 8, !tbaa !52
  %1135 = load double, ptr %61, align 8, !tbaa !9
  %1136 = call double @llvm.fabs.f64(double %1135)
  %1137 = call double @llvm.minnum.f64(double %1134, double %1136)
  %1138 = load ptr, ptr %4, align 8, !tbaa !5
  %1139 = getelementptr inbounds %struct.lu, ptr %1138, i32 0, i32 26
  store double %1137, ptr %1139, align 8, !tbaa !52
  %1140 = load ptr, ptr %4, align 8, !tbaa !5
  %1141 = getelementptr inbounds %struct.lu, ptr %1140, i32 0, i32 27
  %1142 = load double, ptr %1141, align 8, !tbaa !53
  %1143 = load double, ptr %61, align 8, !tbaa !9
  %1144 = call double @llvm.fabs.f64(double %1143)
  %1145 = call double @llvm.maxnum.f64(double %1142, double %1144)
  %1146 = load ptr, ptr %4, align 8, !tbaa !5
  %1147 = getelementptr inbounds %struct.lu, ptr %1146, i32 0, i32 27
  store double %1145, ptr %1147, align 8, !tbaa !53
  store i32 0, ptr %41, align 4, !tbaa !14
  %1148 = load ptr, ptr %16, align 8, !tbaa !5
  %1149 = load i32, ptr %7, align 4, !tbaa !14
  %1150 = sext i32 %1149 to i64
  %1151 = getelementptr inbounds i32, ptr %1148, i64 %1150
  %1152 = load i32, ptr %1151, align 4, !tbaa !14
  store i32 %1152, ptr %43, align 4, !tbaa !14
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #5
  store double 0.000000e+00, ptr %70, align 8, !tbaa !9
  %1153 = load i32, ptr %43, align 4, !tbaa !14
  store i32 %1153, ptr %44, align 4, !tbaa !14
  br label %1154

1154:                                             ; preds = %1201, %1112
  %1155 = load i32, ptr %44, align 4, !tbaa !14
  %1156 = load ptr, ptr %16, align 8, !tbaa !5
  %1157 = load i32, ptr %7, align 4, !tbaa !14
  %1158 = add nsw i32 %1157, 1
  %1159 = sext i32 %1158 to i64
  %1160 = getelementptr inbounds i32, ptr %1156, i64 %1159
  %1161 = load i32, ptr %1160, align 4, !tbaa !14
  %1162 = icmp slt i32 %1155, %1161
  br i1 %1162, label %1163, label %1204

1163:                                             ; preds = %1154
  %1164 = load ptr, ptr %24, align 8, !tbaa !5
  %1165 = load i32, ptr %44, align 4, !tbaa !14
  %1166 = sext i32 %1165 to i64
  %1167 = getelementptr inbounds double, ptr %1164, i64 %1166
  %1168 = load double, ptr %1167, align 8, !tbaa !9
  %1169 = fcmp une double %1168, 0.000000e+00
  br i1 %1169, label %1170, label %1200

1170:                                             ; preds = %1163
  %1171 = load double, ptr %70, align 8, !tbaa !9
  %1172 = load ptr, ptr %24, align 8, !tbaa !5
  %1173 = load i32, ptr %44, align 4, !tbaa !14
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds double, ptr %1172, i64 %1174
  %1176 = load double, ptr %1175, align 8, !tbaa !9
  %1177 = call double @llvm.fabs.f64(double %1176)
  %1178 = call double @llvm.maxnum.f64(double %1171, double %1177)
  store double %1178, ptr %70, align 8, !tbaa !9
  %1179 = load ptr, ptr %23, align 8, !tbaa !5
  %1180 = load i32, ptr %44, align 4, !tbaa !14
  %1181 = sext i32 %1180 to i64
  %1182 = getelementptr inbounds i32, ptr %1179, i64 %1181
  %1183 = load i32, ptr %1182, align 4, !tbaa !14
  %1184 = load ptr, ptr %23, align 8, !tbaa !5
  %1185 = load i32, ptr %43, align 4, !tbaa !14
  %1186 = sext i32 %1185 to i64
  %1187 = getelementptr inbounds i32, ptr %1184, i64 %1186
  store i32 %1183, ptr %1187, align 4, !tbaa !14
  %1188 = load ptr, ptr %24, align 8, !tbaa !5
  %1189 = load i32, ptr %44, align 4, !tbaa !14
  %1190 = sext i32 %1189 to i64
  %1191 = getelementptr inbounds double, ptr %1188, i64 %1190
  %1192 = load double, ptr %1191, align 8, !tbaa !9
  %1193 = load ptr, ptr %24, align 8, !tbaa !5
  %1194 = load i32, ptr %43, align 4, !tbaa !14
  %1195 = add nsw i32 %1194, 1
  store i32 %1195, ptr %43, align 4, !tbaa !14
  %1196 = sext i32 %1194 to i64
  %1197 = getelementptr inbounds double, ptr %1193, i64 %1196
  store double %1192, ptr %1197, align 8, !tbaa !9
  %1198 = load i32, ptr %41, align 4, !tbaa !14
  %1199 = add nsw i32 %1198, 1
  store i32 %1199, ptr %41, align 4, !tbaa !14
  br label %1200

1200:                                             ; preds = %1170, %1163
  br label %1201

1201:                                             ; preds = %1200
  %1202 = load i32, ptr %44, align 4, !tbaa !14
  %1203 = add nsw i32 %1202, 1
  store i32 %1203, ptr %44, align 4, !tbaa !14
  br label %1154, !llvm.loop !61

1204:                                             ; preds = %1154
  %1205 = load i32, ptr %43, align 4, !tbaa !14
  %1206 = load ptr, ptr %16, align 8, !tbaa !5
  %1207 = load i32, ptr %7, align 4, !tbaa !14
  %1208 = add nsw i32 %1207, 1
  %1209 = sext i32 %1208 to i64
  %1210 = getelementptr inbounds i32, ptr %1206, i64 %1209
  store i32 %1205, ptr %1210, align 4, !tbaa !14
  %1211 = load i32, ptr %41, align 4, !tbaa !14
  %1212 = load ptr, ptr %4, align 8, !tbaa !5
  %1213 = getelementptr inbounds %struct.lu, ptr %1212, i32 0, i32 25
  %1214 = load i32, ptr %1213, align 4, !tbaa !62
  %1215 = add nsw i32 %1214, %1211
  store i32 %1215, ptr %1213, align 4, !tbaa !62
  %1216 = load ptr, ptr %4, align 8, !tbaa !5
  %1217 = getelementptr inbounds %struct.lu, ptr %1216, i32 0, i32 28
  %1218 = load double, ptr %1217, align 8, !tbaa !63
  %1219 = load double, ptr %70, align 8, !tbaa !9
  %1220 = call double @llvm.maxnum.f64(double %1218, double %1219)
  %1221 = load ptr, ptr %4, align 8, !tbaa !5
  %1222 = getelementptr inbounds %struct.lu, ptr %1221, i32 0, i32 28
  store double %1220, ptr %1222, align 8, !tbaa !63
  store i32 1, ptr %57, align 4, !tbaa !14
  store ptr %34, ptr %59, align 8, !tbaa !5
  store ptr %33, ptr %58, align 8, !tbaa !5
  %1223 = load ptr, ptr %4, align 8, !tbaa !5
  %1224 = getelementptr inbounds %struct.lu, ptr %1223, i32 0, i32 18
  %1225 = load i32, ptr %1224, align 8, !tbaa !15
  %1226 = add nsw i32 %1225, 1
  store i32 %1226, ptr %1224, align 8, !tbaa !15
  %1227 = load ptr, ptr %4, align 8, !tbaa !5
  %1228 = getelementptr inbounds %struct.lu, ptr %1227, i32 0, i32 21
  %1229 = load i32, ptr %1228, align 4, !tbaa !64
  %1230 = add nsw i32 %1229, 1
  store i32 %1230, ptr %1228, align 4, !tbaa !64
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #5
  br label %1231

1231:                                             ; preds = %1204, %1021
  %1232 = load ptr, ptr %4, align 8, !tbaa !5
  %1233 = getelementptr inbounds %struct.lu, ptr %1232, i32 0, i32 67
  %1234 = load i32, ptr %1233, align 8, !tbaa !65
  %1235 = load i32, ptr %57, align 4, !tbaa !14
  %1236 = add nsw i32 %1234, %1235
  %1237 = load i32, ptr %6, align 4, !tbaa !14
  %1238 = mul nsw i32 2, %1237
  %1239 = icmp sgt i32 %1236, %1238
  br i1 %1239, label %1240, label %1242

1240:                                             ; preds = %1231
  %1241 = load ptr, ptr %4, align 8, !tbaa !5
  call void @lu_garbage_perm(ptr noundef %1241)
  br label %1242

1242:                                             ; preds = %1240, %1231
  %1243 = load ptr, ptr %4, align 8, !tbaa !5
  %1244 = getelementptr inbounds %struct.lu, ptr %1243, i32 0, i32 67
  %1245 = load i32, ptr %1244, align 8, !tbaa !65
  store i32 %1245, ptr %43, align 4, !tbaa !14
  store i32 0, ptr %40, align 4, !tbaa !14
  br label %1246

1246:                                             ; preds = %1261, %1242
  %1247 = load i32, ptr %40, align 4, !tbaa !14
  %1248 = load i32, ptr %57, align 4, !tbaa !14
  %1249 = icmp slt i32 %1247, %1248
  br i1 %1249, label %1250, label %1264

1250:                                             ; preds = %1246
  %1251 = load ptr, ptr %59, align 8, !tbaa !5
  %1252 = load i32, ptr %40, align 4, !tbaa !14
  %1253 = sext i32 %1252 to i64
  %1254 = getelementptr inbounds i32, ptr %1251, i64 %1253
  %1255 = load i32, ptr %1254, align 4, !tbaa !14
  %1256 = load ptr, ptr %14, align 8, !tbaa !5
  %1257 = load i32, ptr %43, align 4, !tbaa !14
  %1258 = add nsw i32 %1257, 1
  store i32 %1258, ptr %43, align 4, !tbaa !14
  %1259 = sext i32 %1257 to i64
  %1260 = getelementptr inbounds i32, ptr %1256, i64 %1259
  store i32 %1255, ptr %1260, align 4, !tbaa !14
  br label %1261

1261:                                             ; preds = %1250
  %1262 = load i32, ptr %40, align 4, !tbaa !14
  %1263 = add nsw i32 %1262, 1
  store i32 %1263, ptr %40, align 4, !tbaa !14
  br label %1246, !llvm.loop !66

1264:                                             ; preds = %1246
  %1265 = load ptr, ptr %4, align 8, !tbaa !5
  %1266 = getelementptr inbounds %struct.lu, ptr %1265, i32 0, i32 67
  %1267 = load i32, ptr %1266, align 8, !tbaa !65
  store i32 %1267, ptr %43, align 4, !tbaa !14
  store i32 0, ptr %40, align 4, !tbaa !14
  br label %1268

1268:                                             ; preds = %1283, %1264
  %1269 = load i32, ptr %40, align 4, !tbaa !14
  %1270 = load i32, ptr %57, align 4, !tbaa !14
  %1271 = icmp slt i32 %1269, %1270
  br i1 %1271, label %1272, label %1286

1272:                                             ; preds = %1268
  %1273 = load ptr, ptr %58, align 8, !tbaa !5
  %1274 = load i32, ptr %40, align 4, !tbaa !14
  %1275 = sext i32 %1274 to i64
  %1276 = getelementptr inbounds i32, ptr %1273, i64 %1275
  %1277 = load i32, ptr %1276, align 4, !tbaa !14
  %1278 = load ptr, ptr %13, align 8, !tbaa !5
  %1279 = load i32, ptr %43, align 4, !tbaa !14
  %1280 = add nsw i32 %1279, 1
  store i32 %1280, ptr %43, align 4, !tbaa !14
  %1281 = sext i32 %1279 to i64
  %1282 = getelementptr inbounds i32, ptr %1278, i64 %1281
  store i32 %1277, ptr %1282, align 4, !tbaa !14
  br label %1283

1283:                                             ; preds = %1272
  %1284 = load i32, ptr %40, align 4, !tbaa !14
  %1285 = add nsw i32 %1284, 1
  store i32 %1285, ptr %40, align 4, !tbaa !14
  br label %1268, !llvm.loop !67

1286:                                             ; preds = %1268
  %1287 = load i32, ptr %57, align 4, !tbaa !14
  %1288 = load ptr, ptr %4, align 8, !tbaa !5
  %1289 = getelementptr inbounds %struct.lu, ptr %1288, i32 0, i32 67
  %1290 = load i32, ptr %1289, align 8, !tbaa !65
  %1291 = add nsw i32 %1290, %1287
  store i32 %1291, ptr %1289, align 8, !tbaa !65
  %1292 = load ptr, ptr %15, align 8, !tbaa !5
  %1293 = load i32, ptr %6, align 4, !tbaa !14
  %1294 = sext i32 %1293 to i64
  %1295 = getelementptr inbounds i32, ptr %1292, i64 %1294
  %1296 = load i32, ptr %1295, align 4, !tbaa !14
  store i32 %1296, ptr %49, align 4, !tbaa !14
  %1297 = load i32, ptr %49, align 4, !tbaa !14
  %1298 = load i32, ptr %8, align 4, !tbaa !14
  %1299 = sub nsw i32 %1297, %1298
  %1300 = load i32, ptr %6, align 4, !tbaa !14
  %1301 = sub nsw i32 %1299, %1300
  %1302 = sitofp i32 %1301 to double
  %1303 = load ptr, ptr %4, align 8, !tbaa !5
  %1304 = getelementptr inbounds %struct.lu, ptr %1303, i32 0, i32 10
  %1305 = load double, ptr %1304, align 8, !tbaa !68
  %1306 = load i32, ptr %49, align 4, !tbaa !14
  %1307 = sitofp i32 %1306 to double
  %1308 = fmul double %1305, %1307
  %1309 = fcmp ogt double %1302, %1308
  br i1 %1309, label %1310, label %1322

1310:                                             ; preds = %1286
  %1311 = load i32, ptr %6, align 4, !tbaa !14
  %1312 = load ptr, ptr %15, align 8, !tbaa !5
  %1313 = load ptr, ptr %25, align 8, !tbaa !5
  %1314 = load ptr, ptr %26, align 8, !tbaa !5
  %1315 = call i32 @compress_packed(i32 noundef %1311, ptr noundef %1312, ptr noundef %1313, ptr noundef %1314)
  store i32 %1315, ptr %41, align 4, !tbaa !14
  %1316 = load i32, ptr %41, align 4, !tbaa !14
  %1317 = load i32, ptr %8, align 4, !tbaa !14
  %1318 = icmp eq i32 %1316, %1317
  br i1 %1318, label %1319, label %1320

1319:                                             ; preds = %1310
  br label %1321

1320:                                             ; preds = %1310
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.1, i32 noundef 879, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

1321:                                             ; preds = %1319
  br label %1322

1322:                                             ; preds = %1321, %1286
  %1323 = load ptr, ptr %17, align 8, !tbaa !5
  %1324 = load i32, ptr %6, align 4, !tbaa !14
  %1325 = sext i32 %1324 to i64
  %1326 = getelementptr inbounds i32, ptr %1323, i64 %1325
  %1327 = load i32, ptr %1326, align 4, !tbaa !14
  store i32 %1327, ptr %49, align 4, !tbaa !14
  %1328 = load i32, ptr %8, align 4, !tbaa !14
  %1329 = sitofp i32 %1328 to double
  %1330 = load double, ptr %10, align 8, !tbaa !9
  %1331 = load i32, ptr %8, align 4, !tbaa !14
  %1332 = sitofp i32 %1331 to double
  %1333 = call double @llvm.fmuladd.f64(double %1330, double %1332, double %1329)
  %1334 = load i32, ptr %6, align 4, !tbaa !14
  %1335 = load i32, ptr %9, align 4, !tbaa !14
  %1336 = mul nsw i32 %1334, %1335
  %1337 = sitofp i32 %1336 to double
  %1338 = fadd double %1333, %1337
  %1339 = fptosi double %1338 to i32
  store i32 %1339, ptr %50, align 4, !tbaa !14
  %1340 = load i32, ptr %49, align 4, !tbaa !14
  %1341 = load i32, ptr %50, align 4, !tbaa !14
  %1342 = sub nsw i32 %1340, %1341
  %1343 = sitofp i32 %1342 to double
  %1344 = load ptr, ptr %4, align 8, !tbaa !5
  %1345 = getelementptr inbounds %struct.lu, ptr %1344, i32 0, i32 10
  %1346 = load double, ptr %1345, align 8, !tbaa !68
  %1347 = load i32, ptr %49, align 4, !tbaa !14
  %1348 = sitofp i32 %1347 to double
  %1349 = fmul double %1346, %1348
  %1350 = fcmp ogt double %1343, %1349
  br i1 %1350, label %1351, label %1367

1351:                                             ; preds = %1322
  %1352 = load i32, ptr %6, align 4, !tbaa !14
  %1353 = load ptr, ptr %17, align 8, !tbaa !5
  %1354 = load ptr, ptr %18, align 8, !tbaa !5
  %1355 = load ptr, ptr %19, align 8, !tbaa !5
  %1356 = load ptr, ptr %27, align 8, !tbaa !5
  %1357 = load ptr, ptr %28, align 8, !tbaa !5
  %1358 = load double, ptr %10, align 8, !tbaa !9
  %1359 = load i32, ptr %9, align 4, !tbaa !14
  %1360 = call i32 @lu_file_compress(i32 noundef %1352, ptr noundef %1353, ptr noundef %1354, ptr noundef %1355, ptr noundef %1356, ptr noundef %1357, double noundef %1358, i32 noundef %1359)
  store i32 %1360, ptr %41, align 4, !tbaa !14
  %1361 = load i32, ptr %41, align 4, !tbaa !14
  %1362 = load i32, ptr %8, align 4, !tbaa !14
  %1363 = icmp eq i32 %1361, %1362
  br i1 %1363, label %1364, label %1365

1364:                                             ; preds = %1351
  br label %1366

1365:                                             ; preds = %1351
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.1, i32 noundef 889, ptr noundef @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

1366:                                             ; preds = %1364
  br label %1367

1367:                                             ; preds = %1366, %1322
  %1368 = load double, ptr %62, align 8, !tbaa !9
  %1369 = load double, ptr %61, align 8, !tbaa !9
  %1370 = call double @llvm.fabs.f64(double %1369)
  %1371 = fadd double 1.000000e+00, %1370
  %1372 = fdiv double %1368, %1371
  %1373 = load ptr, ptr %4, align 8, !tbaa !5
  %1374 = getelementptr inbounds %struct.lu, ptr %1373, i32 0, i32 60
  store double %1372, ptr %1374, align 8, !tbaa !69
  %1375 = load i32, ptr %8, align 4, !tbaa !14
  %1376 = load ptr, ptr %4, align 8, !tbaa !5
  %1377 = getelementptr inbounds %struct.lu, ptr %1376, i32 0, i32 24
  store i32 %1375, ptr %1377, align 8, !tbaa !16
  %1378 = load ptr, ptr %4, align 8, !tbaa !5
  %1379 = getelementptr inbounds %struct.lu, ptr %1378, i32 0, i32 65
  store i32 -1, ptr %1379, align 8, !tbaa !40
  %1380 = load ptr, ptr %4, align 8, !tbaa !5
  %1381 = getelementptr inbounds %struct.lu, ptr %1380, i32 0, i32 64
  store i32 -1, ptr %1381, align 4, !tbaa !70
  %1382 = load i32, ptr %55, align 4, !tbaa !14
  %1383 = sitofp i32 %1382 to double
  %1384 = load ptr, ptr %4, align 8, !tbaa !5
  %1385 = getelementptr inbounds %struct.lu, ptr %1384, i32 0, i32 29
  %1386 = load double, ptr %1385, align 8, !tbaa !71
  %1387 = fadd double %1386, %1383
  store double %1387, ptr %1385, align 8, !tbaa !71
  %1388 = load ptr, ptr %4, align 8, !tbaa !5
  %1389 = getelementptr inbounds %struct.lu, ptr %1388, i32 0, i32 17
  %1390 = load i32, ptr %1389, align 4, !tbaa !72
  %1391 = add nsw i32 %1390, 1
  store i32 %1391, ptr %1389, align 4, !tbaa !72
  %1392 = load ptr, ptr %4, align 8, !tbaa !5
  %1393 = getelementptr inbounds %struct.lu, ptr %1392, i32 0, i32 20
  %1394 = load i32, ptr %1393, align 8, !tbaa !73
  %1395 = add nsw i32 %1394, 1
  store i32 %1395, ptr %1393, align 8, !tbaa !73
  %1396 = load i32, ptr %36, align 4, !tbaa !14
  store i32 %1396, ptr %3, align 4
  store i32 1, ptr %63, align 4
  br label %1397

1397:                                             ; preds = %1367, %459, %356
  call void @llvm.lifetime.end.p0(i64 8, ptr %62) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  %1398 = load i32, ptr %3, align 4
  ret i32 %1398
}

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

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 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: nounwind uwtable
declare hidden i32 @find(i32 noundef, ptr noundef, i32 noundef, i32 noundef) #0

declare void @lu_file_reappend(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @bfs_path(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i32 @lu_dfs(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) #4

; Function Attrs: nounwind uwtable
declare hidden void @permute(ptr noundef, ptr noundef, i32 noundef) #0

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

declare void @lu_garbage_perm(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare hidden i32 @compress_packed(i32 noundef, ptr noundef, ptr noundef, ptr noundef) #0

declare i32 @lu_file_compress(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, i32 noundef) #4

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

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

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


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

@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [77 x i8], align 1
@__PRETTY_FUNCTION__.lu_update = external hidden unnamed_addr constant [38 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [22 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 -6, 2) i32 @lu_update(ptr noundef %0, double noundef %1) local_unnamed_addr #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = getelementptr inbounds i8, ptr %0, i64 84
  %6 = load i32, ptr %5, align 4, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %0, i64 104
  %8 = load i32, ptr %7, align 8, !tbaa !12
  %9 = getelementptr inbounds i8, ptr %0, i64 128
  %10 = load i32, ptr %9, align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %0, i64 48
  %12 = load i32, ptr %11, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %0, i64 56
  %14 = load double, ptr %13, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %0, i64 608
  %16 = load ptr, ptr %15, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %0, i64 624
  %18 = load ptr, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %0, i64 472
  %20 = load ptr, ptr %19, align 8, !tbaa !18
  %21 = ptrtoint ptr %20 to i64
  %22 = getelementptr inbounds i8, ptr %0, i64 488
  %23 = load ptr, ptr %22, align 8, !tbaa !19
  %24 = ptrtoint ptr %23 to i64
  %25 = getelementptr inbounds i8, ptr %0, i64 640
  %26 = load ptr, ptr %25, align 8, !tbaa !20
  %27 = getelementptr inbounds i8, ptr %0, i64 504
  %28 = load ptr, ptr %27, align 8, !tbaa !21
  %29 = getelementptr inbounds i8, ptr %0, i64 536
  %30 = load ptr, ptr %29, align 8, !tbaa !22
  %31 = getelementptr inbounds i8, ptr %0, i64 552
  %32 = load ptr, ptr %31, align 8, !tbaa !23
  %33 = getelementptr inbounds i8, ptr %0, i64 568
  %34 = load ptr, ptr %33, align 8, !tbaa !24
  %35 = getelementptr inbounds i8, ptr %0, i64 584
  %36 = load ptr, ptr %35, align 8, !tbaa !25
  %37 = getelementptr inbounds i8, ptr %0, i64 680
  %38 = load ptr, ptr %37, align 8, !tbaa !26
  %39 = getelementptr inbounds i8, ptr %0, i64 688
  %40 = load ptr, ptr %39, align 8, !tbaa !27
  %41 = getelementptr inbounds i8, ptr %0, i64 416
  %42 = load ptr, ptr %41, align 8, !tbaa !28
  %43 = getelementptr inbounds i8, ptr %0, i64 440
  %44 = load ptr, ptr %43, align 8, !tbaa !29
  %45 = getelementptr inbounds i8, ptr %0, i64 424
  %46 = load ptr, ptr %45, align 8, !tbaa !30
  %47 = getelementptr inbounds i8, ptr %0, i64 448
  %48 = load ptr, ptr %47, align 8, !tbaa !31
  %49 = getelementptr inbounds i8, ptr %0, i64 432
  %50 = load ptr, ptr %49, align 8, !tbaa !32
  %51 = getelementptr inbounds i8, ptr %0, i64 456
  %52 = load ptr, ptr %51, align 8, !tbaa !33
  %53 = getelementptr inbounds i8, ptr %0, i64 656
  %54 = load ptr, ptr %53, align 8, !tbaa !34
  %55 = getelementptr inbounds i8, ptr %0, i64 528
  %56 = load ptr, ptr %55, align 8, !tbaa !35
  %57 = sext i32 %6 to i64
  %58 = getelementptr inbounds i32, ptr %56, i64 %57
  %59 = getelementptr inbounds i8, ptr %0, i64 672
  %60 = load ptr, ptr %59, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #5
  %61 = getelementptr inbounds i8, ptr %0, i64 392
  %62 = load i32, ptr %61, align 8, !tbaa !37
  store i32 %62, ptr %3, align 4, !tbaa !38
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #5
  %63 = sext i32 %62 to i64
  %64 = getelementptr inbounds i32, ptr %16, i64 %63
  %65 = load i32, ptr %64, align 4, !tbaa !38
  store i32 %65, ptr %4, align 4, !tbaa !38
  %66 = getelementptr inbounds double, ptr %38, i64 %63
  %67 = load double, ptr %66, align 8, !tbaa !39
  %68 = icmp slt i32 %8, %6
  br i1 %68, label %70, label %69

69:                                               ; preds = %2
  tail call void @__assert_fail(ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 470, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

70:                                               ; preds = %2
  %71 = getelementptr inbounds i32, ptr %26, i64 %57
  %72 = load i32, ptr %71, align 4, !tbaa !38
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds i32, ptr %46, i64 %73
  %75 = load i32, ptr %74, align 4, !tbaa !38
  %76 = icmp sgt i32 %75, -1
  br i1 %76, label %.lr.ph, label %._crit_edge.thread

.lr.ph:                                           ; preds = %70, %88
  %indvars.iv = phi i64 [ %indvars.iv.next, %88 ], [ %73, %70 ]
  %77 = phi i32 [ %90, %88 ], [ %75, %70 ]
  %.0511615 = phi double [ %.1512, %88 ], [ 0.000000e+00, %70 ]
  %.0535614 = phi i32 [ %.1536, %88 ], [ 0, %70 ]
  %.0548612 = phi i32 [ %.1549, %88 ], [ %72, %70 ]
  %.not583 = icmp eq i32 %77, %65
  br i1 %.not583, label %85, label %78

78:                                               ; preds = %.lr.ph
  %79 = sext i32 %.0548612 to i64
  %80 = getelementptr inbounds i32, ptr %46, i64 %79
  store i32 %77, ptr %80, align 4, !tbaa !38
  %81 = getelementptr inbounds double, ptr %48, i64 %indvars.iv
  %82 = load double, ptr %81, align 8, !tbaa !39
  %83 = add nsw i32 %.0548612, 1
  %84 = getelementptr inbounds double, ptr %48, i64 %79
  store double %82, ptr %84, align 8, !tbaa !39
  br label %88

85:                                               ; preds = %.lr.ph
  %86 = getelementptr inbounds double, ptr %48, i64 %indvars.iv
  %87 = load double, ptr %86, align 8, !tbaa !39
  br label %88

88:                                               ; preds = %78, %85
  %.1549 = phi i32 [ %83, %78 ], [ %.0548612, %85 ]
  %.1536 = phi i32 [ %.0535614, %78 ], [ 1, %85 ]
  %.1512 = phi double [ %.0511615, %78 ], [ %87, %85 ]
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %89 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv.next
  %90 = load i32, ptr %89, align 4, !tbaa !38
  %91 = icmp sgt i32 %90, -1
  br i1 %91, label %.lr.ph, label %._crit_edge, !llvm.loop !40

._crit_edge:                                      ; preds = %88
  %.not = icmp eq i32 %.1536, 0
  br i1 %.not, label %._crit_edge.thread, label %92

92:                                               ; preds = %._crit_edge
  %93 = sext i32 %.1549 to i64
  %94 = getelementptr inbounds i32, ptr %46, i64 %93
  store i32 %65, ptr %94, align 4, !tbaa !38
  %95 = getelementptr inbounds double, ptr %48, i64 %93
  store double %.1512, ptr %95, align 8, !tbaa !39
  br label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %70, %92, %._crit_edge
  %.not791 = phi i1 [ false, %92 ], [ true, %._crit_edge ], [ true, %70 ]
  %.0511.lcssa790 = phi double [ %.1512, %92 ], [ %.1512, %._crit_edge ], [ 0.000000e+00, %70 ]
  %.0548.lcssa789 = phi i32 [ %.1549, %92 ], [ %.1549, %._crit_edge ], [ %72, %70 ]
  %96 = load i32, ptr %71, align 4, !tbaa !38
  %97 = sub nsw i32 %.0548.lcssa789, %96
  %98 = sext i32 %8 to i64
  %99 = getelementptr i32, ptr %28, i64 %98
  %100 = getelementptr i8, ptr %99, i64 4
  %101 = load i32, ptr %100, align 4, !tbaa !38
  %102 = load i32, ptr %99, align 4, !tbaa !38
  %103 = sub nsw i32 %101, %102
  %104 = getelementptr inbounds i8, ptr %0, i64 396
  %105 = load i32, ptr %104, align 4, !tbaa !42
  %106 = add nsw i32 %105, 1
  store i32 %106, ptr %104, align 4, !tbaa !42
  %107 = load i32, ptr %99, align 4, !tbaa !38
  %108 = load i32, ptr %100, align 4, !tbaa !38
  %109 = icmp slt i32 %107, %108
  br i1 %109, label %.lr.ph620.preheader, label %._crit_edge621

.lr.ph620.preheader:                              ; preds = %._crit_edge.thread
  %110 = sext i32 %107 to i64
  br label %.lr.ph620

.lr.ph620:                                        ; preds = %.lr.ph620.preheader, %.lr.ph620
  %indvars.iv711 = phi i64 [ %110, %.lr.ph620.preheader ], [ %indvars.iv.next712, %.lr.ph620 ]
  %111 = getelementptr inbounds i32, ptr %42, i64 %indvars.iv711
  %112 = load i32, ptr %111, align 4, !tbaa !38
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds i32, ptr %54, i64 %113
  store i32 %106, ptr %114, align 4, !tbaa !38
  %115 = getelementptr inbounds double, ptr %44, i64 %indvars.iv711
  %116 = load double, ptr %115, align 8, !tbaa !39
  %117 = getelementptr inbounds double, ptr %60, i64 %113
  store double %116, ptr %117, align 8, !tbaa !39
  %indvars.iv.next712 = add nsw i64 %indvars.iv711, 1
  %118 = load i32, ptr %100, align 4, !tbaa !38
  %119 = sext i32 %118 to i64
  %120 = icmp slt i64 %indvars.iv.next712, %119
  br i1 %120, label %.lr.ph620, label %._crit_edge621, !llvm.loop !43

._crit_edge621:                                   ; preds = %.lr.ph620, %._crit_edge.thread
  %121 = load i32, ptr %71, align 4, !tbaa !38
  %122 = add nsw i32 %121, %97
  %123 = icmp sgt i32 %97, 0
  br i1 %123, label %.lr.ph626.preheader, label %._crit_edge627

.lr.ph626.preheader:                              ; preds = %._crit_edge621
  %124 = sext i32 %121 to i64
  %125 = sext i32 %122 to i64
  br label %.lr.ph626

.lr.ph626:                                        ; preds = %.lr.ph626.preheader, %142
  %indvars.iv714 = phi i64 [ %124, %.lr.ph626.preheader ], [ %indvars.iv.next715, %142 ]
  %.0509624 = phi double [ %.0511.lcssa790, %.lr.ph626.preheader ], [ %.1510, %142 ]
  %.0533623 = phi i32 [ 0, %.lr.ph626.preheader ], [ %.1534, %142 ]
  %126 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv714
  %127 = load i32, ptr %126, align 4, !tbaa !38
  %.not582 = icmp eq i32 %127, %65
  br i1 %.not582, label %128, label %129

128:                                              ; preds = %.lr.ph626
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 546, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

129:                                              ; preds = %.lr.ph626
  %130 = sext i32 %127 to i64
  %131 = getelementptr inbounds i32, ptr %54, i64 %130
  %132 = load i32, ptr %131, align 4, !tbaa !38
  %133 = icmp eq i32 %132, %106
  br i1 %133, label %134, label %142

134:                                              ; preds = %129
  %135 = getelementptr inbounds double, ptr %48, i64 %indvars.iv714
  %136 = load double, ptr %135, align 8, !tbaa !39
  %137 = getelementptr inbounds double, ptr %60, i64 %130
  %138 = load double, ptr %137, align 8, !tbaa !39
  %139 = fneg double %136
  %140 = tail call double @llvm.fmuladd.f64(double %139, double %138, double %.0509624)
  %141 = add nsw i32 %.0533623, 1
  br label %142

142:                                              ; preds = %129, %134
  %.1534 = phi i32 [ %141, %134 ], [ %.0533623, %129 ]
  %.1510 = phi double [ %140, %134 ], [ %.0509624, %129 ]
  %indvars.iv.next715 = add nsw i64 %indvars.iv714, 1
  %143 = icmp slt i64 %indvars.iv.next715, %125
  br i1 %143, label %.lr.ph626, label %._crit_edge627, !llvm.loop !44

._crit_edge627:                                   ; preds = %142, %._crit_edge621
  %.0533.lcssa = phi i32 [ 0, %._crit_edge621 ], [ %.1534, %142 ]
  %.0509.lcssa = phi double [ %.0511.lcssa790, %._crit_edge621 ], [ %.1510, %142 ]
  %144 = fcmp oeq double %.0509.lcssa, 0.000000e+00
  br i1 %144, label %620, label %145

145:                                              ; preds = %._crit_edge627
  %146 = tail call double @llvm.fabs.f64(double %.0509.lcssa)
  %147 = getelementptr inbounds i8, ptr %0, i64 24
  %148 = load double, ptr %147, align 8, !tbaa !45
  %149 = fcmp olt double %146, %148
  br i1 %149, label %620, label %150

150:                                              ; preds = %145
  %151 = fneg double %1
  %152 = tail call double @llvm.fmuladd.f64(double %151, double %67, double %.0509.lcssa)
  %153 = tail call double @llvm.fabs.f64(double %152)
  br i1 %123, label %.lr.ph634, label %._crit_edge635

.lr.ph634:                                        ; preds = %150
  %154 = sitofp i32 %12 to double
  %155 = sext i32 %121 to i64
  %156 = sext i32 %122 to i64
  br label %157

157:                                              ; preds = %.lr.ph634, %185
  %indvars.iv717 = phi i64 [ %155, %.lr.ph634 ], [ %indvars.iv.next718, %185 ]
  %.0538632 = phi i32 [ 0, %.lr.ph634 ], [ %.1539, %185 ]
  %158 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv717
  %159 = load i32, ptr %158, align 4, !tbaa !38
  %.not581 = icmp eq i32 %159, %65
  br i1 %.not581, label %160, label %161

160:                                              ; preds = %157
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 573, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

161:                                              ; preds = %157
  %162 = sext i32 %159 to i64
  %163 = getelementptr inbounds i32, ptr %18, i64 %162
  %164 = load i32, ptr %163, align 4, !tbaa !38
  %165 = sext i32 %164 to i64
  %166 = getelementptr inbounds i32, ptr %34, i64 %165
  %167 = load i32, ptr %166, align 4, !tbaa !38
  %168 = getelementptr inbounds i32, ptr %32, i64 %165
  %169 = load i32, ptr %168, align 4, !tbaa !38
  %170 = sext i32 %167 to i64
  %171 = getelementptr inbounds i32, ptr %30, i64 %170
  %172 = load i32, ptr %171, align 4, !tbaa !38
  %173 = icmp eq i32 %169, %172
  br i1 %173, label %174, label %185

174:                                              ; preds = %161
  %175 = getelementptr inbounds i32, ptr %30, i64 %165
  %176 = load i32, ptr %175, align 4, !tbaa !38
  %177 = sub nsw i32 %169, %176
  %178 = add nsw i32 %177, 1
  %179 = add nsw i32 %178, %.0538632
  %180 = sitofp i32 %178 to double
  %181 = tail call double @llvm.fmuladd.f64(double %14, double %180, double %154)
  %182 = sitofp i32 %179 to double
  %183 = fadd double %181, %182
  %184 = fptosi double %183 to i32
  br label %185

185:                                              ; preds = %161, %174
  %.1539 = phi i32 [ %184, %174 ], [ %.0538632, %161 ]
  %indvars.iv.next718 = add nsw i64 %indvars.iv717, 1
  %186 = icmp slt i64 %indvars.iv.next718, %156
  br i1 %186, label %157, label %._crit_edge635, !llvm.loop !46

._crit_edge635:                                   ; preds = %185, %150
  %.0538.lcssa = phi i32 [ 0, %150 ], [ %.1539, %185 ]
  %187 = getelementptr inbounds i32, ptr %32, i64 %57
  %188 = load i32, ptr %187, align 4, !tbaa !38
  %189 = getelementptr inbounds i32, ptr %30, i64 %57
  %190 = load i32, ptr %189, align 4, !tbaa !38
  %191 = sub nsw i32 %188, %190
  %192 = icmp sgt i32 %.0538.lcssa, %191
  br i1 %192, label %193, label %196

193:                                              ; preds = %._crit_edge635
  %194 = sub nsw i32 %.0538.lcssa, %191
  %195 = getelementptr inbounds i8, ptr %0, i64 96
  store i32 %194, ptr %195, align 8, !tbaa !47
  br label %620

196:                                              ; preds = %._crit_edge635
  %197 = sext i32 %65 to i64
  %198 = getelementptr inbounds i32, ptr %26, i64 %197
  %199 = load i32, ptr %198, align 4, !tbaa !38
  %200 = sext i32 %199 to i64
  %201 = getelementptr inbounds i32, ptr %46, i64 %200
  %202 = load i32, ptr %201, align 4, !tbaa !38
  %203 = icmp sgt i32 %202, -1
  br i1 %203, label %.lr.ph640, label %._crit_edge646

.lr.ph640:                                        ; preds = %196, %217
  %indvars.iv720 = phi i64 [ %indvars.iv.next721, %217 ], [ %200, %196 ]
  %204 = phi i32 [ %228, %217 ], [ %202, %196 ]
  %.0526638 = phi i32 [ %226, %217 ], [ 0, %196 ]
  %205 = zext nneg i32 %204 to i64
  %206 = getelementptr inbounds i32, ptr %18, i64 %205
  %207 = load i32, ptr %206, align 4, !tbaa !38
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds i32, ptr %32, i64 %208
  %210 = load i32, ptr %209, align 4, !tbaa !38
  %211 = add nsw i32 %210, -1
  store i32 %211, ptr %209, align 4, !tbaa !38
  %212 = getelementptr inbounds i32, ptr %30, i64 %208
  %213 = load i32, ptr %212, align 4, !tbaa !38
  %214 = tail call i32 @find(i32 noundef %62, ptr noundef %50, i32 noundef %213, i32 noundef %210)
  %215 = icmp slt i32 %214, %210
  br i1 %215, label %217, label %216

216:                                              ; preds = %.lr.ph640
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.1, i32 noundef 600, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

217:                                              ; preds = %.lr.ph640
  %218 = sext i32 %211 to i64
  %219 = getelementptr inbounds i32, ptr %50, i64 %218
  %220 = load i32, ptr %219, align 4, !tbaa !38
  %221 = sext i32 %214 to i64
  %222 = getelementptr inbounds i32, ptr %50, i64 %221
  store i32 %220, ptr %222, align 4, !tbaa !38
  %223 = getelementptr inbounds double, ptr %52, i64 %218
  %224 = load double, ptr %223, align 8, !tbaa !39
  %225 = getelementptr inbounds double, ptr %52, i64 %221
  store double %224, ptr %225, align 8, !tbaa !39
  %226 = add nuw nsw i32 %.0526638, 1
  %indvars.iv.next721 = add nsw i64 %indvars.iv720, 1
  %227 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv.next721
  %228 = load i32, ptr %227, align 4, !tbaa !38
  %229 = icmp sgt i32 %228, -1
  br i1 %229, label %.lr.ph640, label %._crit_edge641, !llvm.loop !48

._crit_edge641:                                   ; preds = %217
  %.pre = load i32, ptr %198, align 4, !tbaa !38
  %.phi.trans.insert = sext i32 %.pre to i64
  %.phi.trans.insert774 = getelementptr inbounds i32, ptr %46, i64 %.phi.trans.insert
  %.pre775 = load i32, ptr %.phi.trans.insert774, align 4, !tbaa !38
  %230 = sub nsw i32 %10, %226
  %231 = icmp sgt i32 %.pre775, -1
  br i1 %231, label %.lr.ph645.preheader, label %._crit_edge646

.lr.ph645.preheader:                              ; preds = %._crit_edge641
  %232 = getelementptr inbounds i32, ptr %46, i64 %.phi.trans.insert
  br label %.lr.ph645

.lr.ph645:                                        ; preds = %.lr.ph645.preheader, %.lr.ph645
  %indvars.iv723 = phi i64 [ %.phi.trans.insert, %.lr.ph645.preheader ], [ %indvars.iv.next724, %.lr.ph645 ]
  %233 = phi ptr [ %232, %.lr.ph645.preheader ], [ %234, %.lr.ph645 ]
  store i32 -1, ptr %233, align 4, !tbaa !38
  %indvars.iv.next724 = add nsw i64 %indvars.iv723, 1
  %234 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv.next724
  %235 = load i32, ptr %234, align 4, !tbaa !38
  %236 = icmp sgt i32 %235, -1
  br i1 %236, label %.lr.ph645, label %._crit_edge646, !llvm.loop !49

._crit_edge646:                                   ; preds = %.lr.ph645, %196, %._crit_edge641
  %237 = phi i32 [ %230, %._crit_edge641 ], [ %10, %196 ], [ %230, %.lr.ph645 ]
  %238 = load i32, ptr %71, align 4, !tbaa !38
  store i32 %238, ptr %198, align 4, !tbaa !38
  %239 = add nsw i32 %238, %97
  %240 = add nsw i32 %239, 1
  store i32 %240, ptr %71, align 4, !tbaa !38
  %241 = sext i32 %239 to i64
  %242 = getelementptr inbounds i32, ptr %46, i64 %241
  store i32 -1, ptr %242, align 4, !tbaa !38
  %243 = load i32, ptr %198, align 4, !tbaa !38
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds i32, ptr %46, i64 %244
  %246 = load i32, ptr %245, align 4, !tbaa !38
  %247 = icmp sgt i32 %246, -1
  br i1 %247, label %.lr.ph649, label %._crit_edge650

.lr.ph649:                                        ; preds = %._crit_edge646
  %248 = sitofp i32 %12 to double
  br label %249

249:                                              ; preds = %.lr.ph649, %272
  %indvars.iv726 = phi i64 [ %244, %.lr.ph649 ], [ %indvars.iv.next727, %272 ]
  %250 = phi i32 [ %246, %.lr.ph649 ], [ %281, %272 ]
  %251 = zext nneg i32 %250 to i64
  %252 = getelementptr inbounds i32, ptr %18, i64 %251
  %253 = load i32, ptr %252, align 4, !tbaa !38
  %254 = sext i32 %253 to i64
  %255 = getelementptr inbounds i32, ptr %34, i64 %254
  %256 = load i32, ptr %255, align 4, !tbaa !38
  %257 = getelementptr inbounds i32, ptr %32, i64 %254
  %258 = load i32, ptr %257, align 4, !tbaa !38
  %259 = sext i32 %256 to i64
  %260 = getelementptr inbounds i32, ptr %30, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !38
  %262 = icmp eq i32 %258, %261
  br i1 %262, label %263, label %272

263:                                              ; preds = %249
  %264 = getelementptr inbounds i32, ptr %30, i64 %254
  %265 = load i32, ptr %264, align 4, !tbaa !38
  %266 = add i32 %258, 1
  %267 = sub i32 %266, %265
  %268 = sitofp i32 %267 to double
  %269 = tail call double @llvm.fmuladd.f64(double %14, double %268, double 1.000000e+00)
  %270 = fadd double %269, %248
  %271 = fptosi double %270 to i32
  tail call void @lu_file_reappend(i32 noundef %253, i32 noundef %6, ptr noundef nonnull %30, ptr noundef nonnull %32, ptr noundef nonnull %34, ptr noundef %36, ptr noundef %50, ptr noundef %52, i32 noundef %271) #5
  %.pre776 = load i32, ptr %257, align 4, !tbaa !38
  br label %272

272:                                              ; preds = %263, %249
  %273 = phi i32 [ %.pre776, %263 ], [ %258, %249 ]
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %257, align 4, !tbaa !38
  %275 = sext i32 %273 to i64
  %276 = getelementptr inbounds i32, ptr %50, i64 %275
  store i32 %62, ptr %276, align 4, !tbaa !38
  %277 = getelementptr inbounds double, ptr %48, i64 %indvars.iv726
  %278 = load double, ptr %277, align 8, !tbaa !39
  %279 = getelementptr inbounds double, ptr %52, i64 %275
  store double %278, ptr %279, align 8, !tbaa !39
  %indvars.iv.next727 = add nsw i64 %indvars.iv726, 1
  %280 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv.next727
  %281 = load i32, ptr %280, align 4, !tbaa !38
  %282 = icmp sgt i32 %281, -1
  br i1 %282, label %249, label %._crit_edge650, !llvm.loop !50

._crit_edge650:                                   ; preds = %272, %._crit_edge646
  %283 = add nsw i32 %237, %97
  store double %.0511.lcssa790, ptr %66, align 8, !tbaa !39
  %284 = getelementptr inbounds double, ptr %40, i64 %197
  store double %.0511.lcssa790, ptr %284, align 8, !tbaa !39
  br i1 %.not791, label %323, label %285

285:                                              ; preds = %._crit_edge650
  %.not784 = icmp eq i32 %.0533.lcssa, 0
  br i1 %.not784, label %286, label %.thread588

286:                                              ; preds = %285
  %287 = getelementptr inbounds i8, ptr %0, i64 136
  %288 = load double, ptr %287, align 8, !tbaa !51
  %289 = tail call double @llvm.minnum.f64(double %288, double %146)
  store double %289, ptr %287, align 8, !tbaa !51
  %290 = getelementptr inbounds i8, ptr %0, i64 144
  %291 = load double, ptr %290, align 8, !tbaa !52
  %292 = tail call double @llvm.maxnum.f64(double %291, double %146)
  store double %292, ptr %290, align 8, !tbaa !52
  %293 = add nsw i32 %103, 1
  store i32 %65, ptr %56, align 4, !tbaa !38
  store i32 %62, ptr %58, align 4, !tbaa !38
  %.not578651 = icmp slt i32 %103, 1
  br i1 %.not578651, label %._crit_edge656, label %.lr.ph655.preheader

.lr.ph655.preheader:                              ; preds = %286
  %294 = load i32, ptr %99, align 4, !tbaa !38
  %295 = sext i32 %294 to i64
  %296 = add i32 %101, 1
  %297 = sub i32 %296, %102
  %wide.trip.count = zext i32 %297 to i64
  %298 = add nsw i64 %wide.trip.count, -1
  %xtraiter = and i64 %298, 1
  %299 = icmp eq i32 %297, 2
  br i1 %299, label %._crit_edge656.loopexit.unr-lcssa, label %.lr.ph655.preheader.new

.lr.ph655.preheader.new:                          ; preds = %.lr.ph655.preheader
  %unroll_iter = and i64 %298, -2
  %invariant.gep = getelementptr i8, ptr %42, i64 4
  br label %.lr.ph655

.lr.ph655:                                        ; preds = %.lr.ph655, %.lr.ph655.preheader.new
  %indvars.iv731 = phi i64 [ %295, %.lr.ph655.preheader.new ], [ %indvars.iv.next732.1, %.lr.ph655 ]
  %indvars.iv729 = phi i64 [ 1, %.lr.ph655.preheader.new ], [ %indvars.iv.next730.1, %.lr.ph655 ]
  %niter = phi i64 [ 0, %.lr.ph655.preheader.new ], [ %niter.next.1, %.lr.ph655 ]
  %300 = getelementptr inbounds i32, ptr %42, i64 %indvars.iv731
  %301 = load i32, ptr %300, align 4, !tbaa !38
  %302 = getelementptr inbounds i32, ptr %56, i64 %indvars.iv729
  store i32 %301, ptr %302, align 4, !tbaa !38
  %303 = sext i32 %301 to i64
  %304 = getelementptr inbounds i32, ptr %18, i64 %303
  %305 = load i32, ptr %304, align 4, !tbaa !38
  %306 = getelementptr inbounds i32, ptr %58, i64 %indvars.iv729
  store i32 %305, ptr %306, align 4, !tbaa !38
  %indvars.iv.next730 = add nuw nsw i64 %indvars.iv729, 1
  %indvars.iv.next732.1 = add nsw i64 %indvars.iv731, 2
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv731
  %307 = load i32, ptr %gep, align 4, !tbaa !38
  %308 = getelementptr inbounds i32, ptr %56, i64 %indvars.iv.next730
  store i32 %307, ptr %308, align 4, !tbaa !38
  %309 = sext i32 %307 to i64
  %310 = getelementptr inbounds i32, ptr %18, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !38
  %312 = getelementptr inbounds i32, ptr %58, i64 %indvars.iv.next730
  store i32 %311, ptr %312, align 4, !tbaa !38
  %indvars.iv.next730.1 = add nuw nsw i64 %indvars.iv729, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge656.loopexit.unr-lcssa, label %.lr.ph655, !llvm.loop !53

._crit_edge656.loopexit.unr-lcssa:                ; preds = %.lr.ph655, %.lr.ph655.preheader
  %indvars.iv731.unr = phi i64 [ %295, %.lr.ph655.preheader ], [ %indvars.iv.next732.1, %.lr.ph655 ]
  %indvars.iv729.unr = phi i64 [ 1, %.lr.ph655.preheader ], [ %indvars.iv.next730.1, %.lr.ph655 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge656, label %.lr.ph655.epil

.lr.ph655.epil:                                   ; preds = %._crit_edge656.loopexit.unr-lcssa
  %313 = getelementptr inbounds i32, ptr %42, i64 %indvars.iv731.unr
  %314 = load i32, ptr %313, align 4, !tbaa !38
  %315 = getelementptr inbounds i32, ptr %56, i64 %indvars.iv729.unr
  store i32 %314, ptr %315, align 4, !tbaa !38
  %316 = sext i32 %314 to i64
  %317 = getelementptr inbounds i32, ptr %18, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !38
  %319 = getelementptr inbounds i32, ptr %58, i64 %indvars.iv729.unr
  store i32 %318, ptr %319, align 4, !tbaa !38
  br label %._crit_edge656

._crit_edge656:                                   ; preds = %.lr.ph655.epil, %._crit_edge656.loopexit.unr-lcssa, %286
  %320 = getelementptr inbounds i8, ptr %0, i64 120
  %321 = load i32, ptr %320, align 8, !tbaa !54
  %322 = add nsw i32 %321, 1
  store i32 %322, ptr %320, align 8, !tbaa !54
  br label %.loopexit

323:                                              ; preds = %._crit_edge650
  %324 = tail call i32 @bfs_path(i32 noundef %6, i32 noundef %62, ptr noundef %30, ptr noundef %32, ptr noundef %50, ptr noundef %56, ptr noundef %54, ptr noundef %58)
  %325 = add nsw i32 %6, -1
  %326 = icmp slt i32 %324, %325
  br i1 %326, label %328, label %327

327:                                              ; preds = %323
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 710, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

328:                                              ; preds = %323
  %329 = sext i32 %324 to i64
  %330 = getelementptr inbounds i32, ptr %56, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !38
  %332 = icmp eq i32 %331, %62
  br i1 %332, label %.lr.ph660.preheader, label %333

333:                                              ; preds = %328
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, i32 noundef 711, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

.lr.ph660.preheader:                              ; preds = %328
  %334 = load i32, ptr %104, align 4, !tbaa !42
  %335 = add nsw i32 %334, 1
  store i32 %335, ptr %104, align 4, !tbaa !42
  %336 = sext i32 %325 to i64
  br label %.lr.ph660

.lr.ph660:                                        ; preds = %.lr.ph660.preheader, %359
  %indvars.iv736 = phi i64 [ %329, %.lr.ph660.preheader ], [ %indvars.iv.next737, %359 ]
  %.0507658 = phi i32 [ %6, %.lr.ph660.preheader ], [ %353, %359 ]
  %337 = getelementptr inbounds i32, ptr %56, i64 %indvars.iv736
  %338 = load i32, ptr %337, align 4, !tbaa !38
  %indvars.iv.next737 = add nsw i64 %indvars.iv736, 1
  %339 = getelementptr inbounds i32, ptr %56, i64 %indvars.iv.next737
  %340 = load i32, ptr %339, align 4, !tbaa !38
  %341 = sext i32 %338 to i64
  %342 = getelementptr inbounds i32, ptr %30, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !38
  %344 = getelementptr inbounds i32, ptr %32, i64 %341
  %345 = load i32, ptr %344, align 4, !tbaa !38
  %346 = tail call i32 @find(i32 noundef %340, ptr noundef %50, i32 noundef %343, i32 noundef %345)
  %347 = load i32, ptr %344, align 4, !tbaa !38
  %348 = icmp slt i32 %346, %347
  br i1 %348, label %350, label %349

349:                                              ; preds = %.lr.ph660
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 738, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

350:                                              ; preds = %.lr.ph660
  %351 = sext i32 %346 to i64
  %352 = getelementptr inbounds i32, ptr %50, i64 %351
  store i32 %338, ptr %352, align 4, !tbaa !38
  %353 = tail call i32 @lu_dfs(i32 noundef %338, ptr noundef nonnull %30, ptr noundef nonnull %32, ptr noundef %50, i32 noundef %.0507658, ptr noundef nonnull %58, ptr noundef %60, ptr noundef %54, i32 noundef %335) #5
  %354 = sext i32 %353 to i64
  %355 = getelementptr inbounds i32, ptr %58, i64 %354
  %356 = load i32, ptr %355, align 4, !tbaa !38
  %357 = icmp eq i32 %356, %338
  br i1 %357, label %359, label %358

358:                                              ; preds = %350
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 742, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

359:                                              ; preds = %350
  store i32 %340, ptr %355, align 4, !tbaa !38
  store i32 %340, ptr %352, align 4, !tbaa !38
  %360 = sext i32 %340 to i64
  %361 = getelementptr inbounds i32, ptr %54, i64 %360
  %362 = load i32, ptr %361, align 4, !tbaa !38
  %363 = icmp ne i32 %362, %335
  %364 = icmp slt i64 %indvars.iv.next737, %336
  %365 = select i1 %364, i1 %363, i1 false
  br i1 %365, label %.lr.ph660, label %._crit_edge661, !llvm.loop !55

._crit_edge661:                                   ; preds = %359
  br i1 %363, label %366, label %.thread588

366:                                              ; preds = %._crit_edge661
  %367 = sext i32 %325 to i64
  %368 = getelementptr inbounds i32, ptr %56, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !38
  %370 = tail call i32 @lu_dfs(i32 noundef %369, ptr noundef nonnull %30, ptr noundef nonnull %32, ptr noundef nonnull %50, i32 noundef %353, ptr noundef nonnull %58, ptr noundef %60, ptr noundef nonnull %54, i32 noundef %335) #5
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds i32, ptr %58, i64 %371
  %373 = load i32, ptr %372, align 4, !tbaa !38
  %374 = icmp eq i32 %373, %369
  br i1 %374, label %376, label %375

375:                                              ; preds = %366
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.1, i32 noundef 761, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

376:                                              ; preds = %366
  store i32 %62, ptr %372, align 4, !tbaa !38
  %377 = sext i32 %369 to i64
  %378 = getelementptr inbounds i32, ptr %54, i64 %377
  %379 = load i32, ptr %378, align 4, !tbaa !38
  %380 = add nsw i32 %379, -1
  store i32 %380, ptr %378, align 4, !tbaa !38
  %381 = load i32, ptr %198, align 4, !tbaa !38
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds i32, ptr %46, i64 %382
  %384 = load i32, ptr %383, align 4, !tbaa !38
  %385 = icmp sgt i32 %384, -1
  br i1 %385, label %.lr.ph667, label %._crit_edge668.thread

._crit_edge668.thread:                            ; preds = %376
  store i32 %379, ptr %378, align 4, !tbaa !38
  br label %397

.lr.ph667:                                        ; preds = %376, %.lr.ph667
  %indvars.iv739 = phi i64 [ %indvars.iv.next740, %.lr.ph667 ], [ %382, %376 ]
  %386 = phi i32 [ %395, %.lr.ph667 ], [ %384, %376 ]
  %.1530665 = phi i32 [ %spec.select, %.lr.ph667 ], [ 1, %376 ]
  %387 = zext nneg i32 %386 to i64
  %388 = getelementptr inbounds i32, ptr %18, i64 %387
  %389 = load i32, ptr %388, align 4, !tbaa !38
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds i32, ptr %54, i64 %390
  %392 = load i32, ptr %391, align 4, !tbaa !38
  %393 = icmp eq i32 %392, %335
  %spec.select = select i1 %393, i32 0, i32 %.1530665
  %indvars.iv.next740 = add nsw i64 %indvars.iv739, 1
  %394 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv.next740
  %395 = load i32, ptr %394, align 4, !tbaa !38
  %396 = icmp sgt i32 %395, -1
  br i1 %396, label %.lr.ph667, label %._crit_edge668, !llvm.loop !56

._crit_edge668:                                   ; preds = %.lr.ph667
  store i32 %379, ptr %378, align 4, !tbaa !38
  %.not577 = icmp eq i32 %spec.select, 0
  br i1 %.not577, label %.thread588, label %397

397:                                              ; preds = %._crit_edge668.thread, %._crit_edge668
  %398 = xor i32 %324, -1
  %399 = add i32 %6, %398
  tail call void @permute(ptr noundef %0, ptr noundef nonnull %330, i32 noundef %399)
  %400 = add nsw i32 %283, -1
  %401 = load i32, ptr %372, align 4, !tbaa !38
  %402 = icmp eq i32 %401, %62
  br i1 %402, label %404, label %403

403:                                              ; preds = %397
  tail call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, i32 noundef 782, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

404:                                              ; preds = %397
  %405 = getelementptr inbounds i32, ptr %56, i64 %371
  %406 = sub nsw i32 %6, %370
  %407 = icmp sgt i32 %406, 0
  br i1 %407, label %.lr.ph672.preheader, label %.loopexit

.lr.ph672.preheader:                              ; preds = %404
  %wide.trip.count745 = zext nneg i32 %406 to i64
  %xtraiter834 = and i64 %wide.trip.count745, 3
  %408 = icmp ult i32 %406, 4
  br i1 %408, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph672.preheader.new

.lr.ph672.preheader.new:                          ; preds = %.lr.ph672.preheader
  %unroll_iter836 = and i64 %wide.trip.count745, 2147483644
  br label %.lr.ph672

.lr.ph672:                                        ; preds = %.lr.ph672, %.lr.ph672.preheader.new
  %indvars.iv742 = phi i64 [ 0, %.lr.ph672.preheader.new ], [ %indvars.iv.next743.3, %.lr.ph672 ]
  %niter837 = phi i64 [ 0, %.lr.ph672.preheader.new ], [ %niter837.next.3, %.lr.ph672 ]
  %409 = getelementptr inbounds i32, ptr %372, i64 %indvars.iv742
  %410 = load i32, ptr %409, align 4, !tbaa !38
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds i32, ptr %16, i64 %411
  %413 = load i32, ptr %412, align 4, !tbaa !38
  %414 = getelementptr inbounds i32, ptr %405, i64 %indvars.iv742
  store i32 %413, ptr %414, align 4, !tbaa !38
  %indvars.iv.next743 = or disjoint i64 %indvars.iv742, 1
  %415 = getelementptr inbounds i32, ptr %372, i64 %indvars.iv.next743
  %416 = load i32, ptr %415, align 4, !tbaa !38
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds i32, ptr %16, i64 %417
  %419 = load i32, ptr %418, align 4, !tbaa !38
  %420 = getelementptr inbounds i32, ptr %405, i64 %indvars.iv.next743
  store i32 %419, ptr %420, align 4, !tbaa !38
  %indvars.iv.next743.1 = or disjoint i64 %indvars.iv742, 2
  %421 = getelementptr inbounds i32, ptr %372, i64 %indvars.iv.next743.1
  %422 = load i32, ptr %421, align 4, !tbaa !38
  %423 = sext i32 %422 to i64
  %424 = getelementptr inbounds i32, ptr %16, i64 %423
  %425 = load i32, ptr %424, align 4, !tbaa !38
  %426 = getelementptr inbounds i32, ptr %405, i64 %indvars.iv.next743.1
  store i32 %425, ptr %426, align 4, !tbaa !38
  %indvars.iv.next743.2 = or disjoint i64 %indvars.iv742, 3
  %427 = getelementptr inbounds i32, ptr %372, i64 %indvars.iv.next743.2
  %428 = load i32, ptr %427, align 4, !tbaa !38
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds i32, ptr %16, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !38
  %432 = getelementptr inbounds i32, ptr %405, i64 %indvars.iv.next743.2
  store i32 %431, ptr %432, align 4, !tbaa !38
  %indvars.iv.next743.3 = add nuw nsw i64 %indvars.iv742, 4
  %niter837.next.3 = add i64 %niter837, 4
  %niter837.ncmp.3 = icmp eq i64 %niter837.next.3, %unroll_iter836
  br i1 %niter837.ncmp.3, label %.loopexit.loopexit.unr-lcssa, label %.lr.ph672, !llvm.loop !57

.thread588:                                       ; preds = %._crit_edge661, %._crit_edge668, %285
  %433 = getelementptr inbounds i32, ptr %30, i64 %63
  %434 = load i32, ptr %433, align 4, !tbaa !38
  %435 = getelementptr inbounds i32, ptr %32, i64 %63
  %436 = load i32, ptr %435, align 4, !tbaa !38
  %437 = icmp slt i32 %434, %436
  br i1 %437, label %.lr.ph682.preheader, label %._crit_edge683

.lr.ph682.preheader:                              ; preds = %.thread588
  %438 = sext i32 %434 to i64
  br label %.lr.ph682

.lr.ph682:                                        ; preds = %.lr.ph682.preheader, %460
  %indvars.iv750 = phi i64 [ %438, %.lr.ph682.preheader ], [ %indvars.iv.next751, %460 ]
  %.2681 = phi i32 [ %283, %.lr.ph682.preheader ], [ %469, %460 ]
  %439 = getelementptr inbounds i32, ptr %50, i64 %indvars.iv750
  %440 = load i32, ptr %439, align 4, !tbaa !38
  %.not580 = icmp eq i32 %440, %62
  br i1 %.not580, label %441, label %442

441:                                              ; preds = %.lr.ph682
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.1, i32 noundef 803, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

442:                                              ; preds = %.lr.ph682
  %443 = sext i32 %440 to i64
  %444 = getelementptr inbounds i32, ptr %16, i64 %443
  %445 = load i32, ptr %444, align 4, !tbaa !38
  %446 = sext i32 %445 to i64
  %447 = getelementptr inbounds i32, ptr %26, i64 %446
  %448 = load i32, ptr %447, align 4, !tbaa !38
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds i32, ptr %46, i64 %449
  %451 = load i32, ptr %450, align 4, !tbaa !38
  %452 = icmp sgt i32 %451, -1
  br i1 %452, label %.lr.ph676, label %._crit_edge677.thread

.lr.ph676:                                        ; preds = %442, %.lr.ph676
  %indvars.iv747 = phi i64 [ %indvars.iv.next748, %.lr.ph676 ], [ %449, %442 ]
  %453 = phi i32 [ %457, %.lr.ph676 ], [ %451, %442 ]
  %.0540674 = phi i32 [ %spec.select584, %.lr.ph676 ], [ -1, %442 ]
  %454 = icmp eq i32 %453, %65
  %455 = trunc nsw i64 %indvars.iv747 to i32
  %spec.select584 = select i1 %454, i32 %455, i32 %.0540674
  %indvars.iv.next748 = add nsw i64 %indvars.iv747, 1
  %456 = getelementptr inbounds i32, ptr %46, i64 %indvars.iv.next748
  %457 = load i32, ptr %456, align 4, !tbaa !38
  %458 = icmp sgt i32 %457, -1
  br i1 %458, label %.lr.ph676, label %._crit_edge677, !llvm.loop !58

._crit_edge677:                                   ; preds = %.lr.ph676
  %459 = icmp sgt i32 %spec.select584, -1
  br i1 %459, label %460, label %._crit_edge677.thread

._crit_edge677.thread:                            ; preds = %442, %._crit_edge677
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 809, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

460:                                              ; preds = %._crit_edge677
  %sext = shl i64 %indvars.iv747, 32
  %461 = ashr exact i64 %sext, 32
  %462 = getelementptr inbounds i32, ptr %46, i64 %461
  %463 = load i32, ptr %462, align 4, !tbaa !38
  %464 = zext nneg i32 %spec.select584 to i64
  %465 = getelementptr inbounds i32, ptr %46, i64 %464
  store i32 %463, ptr %465, align 4, !tbaa !38
  %466 = getelementptr inbounds double, ptr %48, i64 %461
  %467 = load double, ptr %466, align 8, !tbaa !39
  %468 = getelementptr inbounds double, ptr %48, i64 %464
  store double %467, ptr %468, align 8, !tbaa !39
  store i32 -1, ptr %462, align 4, !tbaa !38
  %469 = add nsw i32 %.2681, -1
  %indvars.iv.next751 = add nsw i64 %indvars.iv750, 1
  %470 = load i32, ptr %435, align 4, !tbaa !38
  %471 = sext i32 %470 to i64
  %472 = icmp slt i64 %indvars.iv.next751, %471
  br i1 %472, label %.lr.ph682, label %._crit_edge683.loopexit, !llvm.loop !59

._crit_edge683.loopexit:                          ; preds = %460
  %.pre777 = load i32, ptr %433, align 4, !tbaa !38
  br label %._crit_edge683

._crit_edge683:                                   ; preds = %._crit_edge683.loopexit, %.thread588
  %473 = phi i32 [ %434, %.thread588 ], [ %.pre777, %._crit_edge683.loopexit ]
  %.2.lcssa = phi i32 [ %283, %.thread588 ], [ %469, %._crit_edge683.loopexit ]
  store i32 %473, ptr %435, align 4, !tbaa !38
  store double %.0509.lcssa, ptr %66, align 8, !tbaa !39
  store double %.0509.lcssa, ptr %284, align 8, !tbaa !39
  %474 = getelementptr inbounds i8, ptr %0, i64 136
  %475 = load double, ptr %474, align 8, !tbaa !51
  %476 = tail call double @llvm.minnum.f64(double %475, double %146)
  store double %476, ptr %474, align 8, !tbaa !51
  %477 = getelementptr inbounds i8, ptr %0, i64 144
  %478 = load double, ptr %477, align 8, !tbaa !52
  %479 = tail call double @llvm.maxnum.f64(double %478, double %146)
  store double %479, ptr %477, align 8, !tbaa !52
  %480 = load i32, ptr %99, align 4, !tbaa !38
  %481 = load i32, ptr %100, align 4, !tbaa !38
  %482 = icmp slt i32 %480, %481
  br i1 %482, label %.lr.ph690.preheader, label %._crit_edge691

.lr.ph690.preheader:                              ; preds = %._crit_edge683
  %483 = sext i32 %480 to i64
  br label %.lr.ph690

.lr.ph690:                                        ; preds = %.lr.ph690.preheader, %498
  %484 = phi i32 [ %481, %.lr.ph690.preheader ], [ %499, %498 ]
  %indvars.iv753 = phi i64 [ %483, %.lr.ph690.preheader ], [ %indvars.iv.next754, %498 ]
  %.0688 = phi double [ 0.000000e+00, %.lr.ph690.preheader ], [ %.1, %498 ]
  %.1527687 = phi i32 [ 0, %.lr.ph690.preheader ], [ %.2528, %498 ]
  %.2550685 = phi i32 [ %480, %.lr.ph690.preheader ], [ %.3551, %498 ]
  %485 = getelementptr inbounds double, ptr %44, i64 %indvars.iv753
  %486 = load double, ptr %485, align 8, !tbaa !39
  %487 = fcmp une double %486, 0.000000e+00
  br i1 %487, label %488, label %498

488:                                              ; preds = %.lr.ph690
  %489 = tail call double @llvm.fabs.f64(double %486)
  %490 = tail call double @llvm.maxnum.f64(double %.0688, double %489)
  %491 = getelementptr inbounds i32, ptr %42, i64 %indvars.iv753
  %492 = load i32, ptr %491, align 4, !tbaa !38
  %493 = sext i32 %.2550685 to i64
  %494 = getelementptr inbounds i32, ptr %42, i64 %493
  store i32 %492, ptr %494, align 4, !tbaa !38
  %495 = add nsw i32 %.2550685, 1
  %496 = getelementptr inbounds double, ptr %44, i64 %493
  store double %486, ptr %496, align 8, !tbaa !39
  %497 = add nsw i32 %.1527687, 1
  %.pre778 = load i32, ptr %100, align 4, !tbaa !38
  br label %498

498:                                              ; preds = %.lr.ph690, %488
  %499 = phi i32 [ %.pre778, %488 ], [ %484, %.lr.ph690 ]
  %.3551 = phi i32 [ %495, %488 ], [ %.2550685, %.lr.ph690 ]
  %.2528 = phi i32 [ %497, %488 ], [ %.1527687, %.lr.ph690 ]
  %.1 = phi double [ %490, %488 ], [ %.0688, %.lr.ph690 ]
  %indvars.iv.next754 = add nsw i64 %indvars.iv753, 1
  %500 = sext i32 %499 to i64
  %501 = icmp slt i64 %indvars.iv.next754, %500
  br i1 %501, label %.lr.ph690, label %._crit_edge691, !llvm.loop !60

._crit_edge691:                                   ; preds = %498, %._crit_edge683
  %.2550.lcssa = phi i32 [ %480, %._crit_edge683 ], [ %.3551, %498 ]
  %.1527.lcssa = phi i32 [ 0, %._crit_edge683 ], [ %.2528, %498 ]
  %.0.lcssa = phi double [ 0.000000e+00, %._crit_edge683 ], [ %.1, %498 ]
  store i32 %.2550.lcssa, ptr %100, align 4, !tbaa !38
  %502 = getelementptr inbounds i8, ptr %0, i64 132
  %503 = load i32, ptr %502, align 4, !tbaa !61
  %504 = add nsw i32 %503, %.1527.lcssa
  store i32 %504, ptr %502, align 4, !tbaa !61
  %505 = getelementptr inbounds i8, ptr %0, i64 152
  %506 = load double, ptr %505, align 8, !tbaa !62
  %507 = tail call double @llvm.maxnum.f64(double %506, double %.0.lcssa)
  store double %507, ptr %505, align 8, !tbaa !62
  %508 = load i32, ptr %7, align 8, !tbaa !12
  %509 = add nsw i32 %508, 1
  store i32 %509, ptr %7, align 8, !tbaa !12
  %510 = getelementptr inbounds i8, ptr %0, i64 116
  %511 = load i32, ptr %510, align 4, !tbaa !63
  %512 = add nsw i32 %511, 1
  store i32 %512, ptr %510, align 4, !tbaa !63
  br label %.loopexit

.loopexit.loopexit.unr-lcssa:                     ; preds = %.lr.ph672, %.lr.ph672.preheader
  %indvars.iv742.unr = phi i64 [ 0, %.lr.ph672.preheader ], [ %indvars.iv.next743.3, %.lr.ph672 ]
  %lcmp.mod835.not = icmp eq i64 %xtraiter834, 0
  br i1 %lcmp.mod835.not, label %.loopexit, label %.lr.ph672.epil

.lr.ph672.epil:                                   ; preds = %.loopexit.loopexit.unr-lcssa, %.lr.ph672.epil
  %indvars.iv742.epil = phi i64 [ %indvars.iv.next743.epil, %.lr.ph672.epil ], [ %indvars.iv742.unr, %.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph672.epil ], [ 0, %.loopexit.loopexit.unr-lcssa ]
  %513 = getelementptr inbounds i32, ptr %372, i64 %indvars.iv742.epil
  %514 = load i32, ptr %513, align 4, !tbaa !38
  %515 = sext i32 %514 to i64
  %516 = getelementptr inbounds i32, ptr %16, i64 %515
  %517 = load i32, ptr %516, align 4, !tbaa !38
  %518 = getelementptr inbounds i32, ptr %405, i64 %indvars.iv742.epil
  store i32 %517, ptr %518, align 4, !tbaa !38
  %indvars.iv.next743.epil = add nuw nsw i64 %indvars.iv742.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter834
  br i1 %epil.iter.cmp.not, label %.loopexit, label %.lr.ph672.epil, !llvm.loop !64

.loopexit:                                        ; preds = %.loopexit.loopexit.unr-lcssa, %.lr.ph672.epil, %._crit_edge656, %404, %._crit_edge691
  %.2521 = phi i32 [ 1, %._crit_edge691 ], [ %293, %._crit_edge656 ], [ %406, %404 ], [ %406, %.lr.ph672.epil ], [ %406, %.loopexit.loopexit.unr-lcssa ]
  %.2518 = phi ptr [ %3, %._crit_edge691 ], [ %58, %._crit_edge656 ], [ %372, %404 ], [ %372, %.lr.ph672.epil ], [ %372, %.loopexit.loopexit.unr-lcssa ]
  %.2515 = phi ptr [ %4, %._crit_edge691 ], [ %56, %._crit_edge656 ], [ %405, %404 ], [ %405, %.lr.ph672.epil ], [ %405, %.loopexit.loopexit.unr-lcssa ]
  %.3 = phi i32 [ %.2.lcssa, %._crit_edge691 ], [ %283, %._crit_edge656 ], [ %400, %404 ], [ %400, %.lr.ph672.epil ], [ %400, %.loopexit.loopexit.unr-lcssa ]
  %.2518810 = ptrtoint ptr %.2518 to i64
  %.2515806 = ptrtoint ptr %.2515 to i64
  %519 = getelementptr inbounds i8, ptr %0, i64 400
  %520 = load i32, ptr %519, align 8, !tbaa !66
  %521 = add nsw i32 %520, %.2521
  %522 = shl nsw i32 %6, 1
  %523 = icmp sgt i32 %521, %522
  br i1 %523, label %524, label %525

524:                                              ; preds = %.loopexit
  tail call void @lu_garbage_perm(ptr noundef nonnull %0) #5
  %.pre779 = load i32, ptr %519, align 8, !tbaa !66
  br label %525

525:                                              ; preds = %524, %.loopexit
  %526 = phi i32 [ %.pre779, %524 ], [ %520, %.loopexit ]
  %527 = icmp sgt i32 %.2521, 0
  br i1 %527, label %.lr.ph698.preheader, label %._crit_edge704

.lr.ph698.preheader:                              ; preds = %525
  %528 = sext i32 %526 to i64
  %wide.trip.count763 = zext nneg i32 %.2521 to i64
  %min.iters.check = icmp ult i32 %.2521, 8
  br i1 %min.iters.check, label %.lr.ph698.preheader829, label %vector.memcheck

vector.memcheck:                                  ; preds = %.lr.ph698.preheader
  %529 = shl nsw i64 %528, 2
  %530 = add i64 %529, %24
  %531 = sub i64 %530, %.2515806
  %diff.check = icmp ult i64 %531, 32
  br i1 %diff.check, label %.lr.ph698.preheader829, label %vector.ph

vector.ph:                                        ; preds = %vector.memcheck
  %n.vec = and i64 %wide.trip.count763, 2147483640
  %ind.end = add nsw i64 %n.vec, %528
  %invariant.gep847 = getelementptr i32, ptr %23, i64 %528
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %532 = getelementptr inbounds i32, ptr %.2515, i64 %index
  %533 = getelementptr inbounds i8, ptr %532, i64 16
  %wide.load = load <4 x i32>, ptr %532, align 4, !tbaa !38
  %wide.load808 = load <4 x i32>, ptr %533, align 4, !tbaa !38
  %gep848 = getelementptr i32, ptr %invariant.gep847, i64 %index
  %534 = getelementptr inbounds i8, ptr %gep848, i64 16
  store <4 x i32> %wide.load, ptr %gep848, align 4, !tbaa !38
  store <4 x i32> %wide.load808, ptr %534, align 4, !tbaa !38
  %index.next = add nuw i64 %index, 8
  %535 = icmp eq i64 %index.next, %n.vec
  br i1 %535, label %middle.block, label %vector.body, !llvm.loop !67

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count763
  br i1 %cmp.n, label %._crit_edge699, label %.lr.ph698.preheader829

.lr.ph698.preheader829:                           ; preds = %middle.block, %vector.memcheck, %.lr.ph698.preheader
  %indvars.iv758.ph = phi i64 [ %528, %vector.memcheck ], [ %528, %.lr.ph698.preheader ], [ %ind.end, %middle.block ]
  %indvars.iv756.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.lr.ph698.preheader ], [ %n.vec, %middle.block ]
  %xtraiter838 = and i64 %wide.trip.count763, 3
  %lcmp.mod839.not = icmp eq i64 %xtraiter838, 0
  br i1 %lcmp.mod839.not, label %.lr.ph698.prol.loopexit, label %.lr.ph698.prol

.lr.ph698.prol:                                   ; preds = %.lr.ph698.preheader829, %.lr.ph698.prol
  %indvars.iv758.prol = phi i64 [ %indvars.iv.next759.prol, %.lr.ph698.prol ], [ %indvars.iv758.ph, %.lr.ph698.preheader829 ]
  %indvars.iv756.prol = phi i64 [ %indvars.iv.next757.prol, %.lr.ph698.prol ], [ %indvars.iv756.ph, %.lr.ph698.preheader829 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.lr.ph698.prol ], [ 0, %.lr.ph698.preheader829 ]
  %536 = getelementptr inbounds i32, ptr %.2515, i64 %indvars.iv756.prol
  %537 = load i32, ptr %536, align 4, !tbaa !38
  %indvars.iv.next759.prol = add nsw i64 %indvars.iv758.prol, 1
  %538 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv758.prol
  store i32 %537, ptr %538, align 4, !tbaa !38
  %indvars.iv.next757.prol = add nuw nsw i64 %indvars.iv756.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter838
  br i1 %prol.iter.cmp.not, label %.lr.ph698.prol.loopexit, label %.lr.ph698.prol, !llvm.loop !70

.lr.ph698.prol.loopexit:                          ; preds = %.lr.ph698.prol, %.lr.ph698.preheader829
  %indvars.iv758.unr = phi i64 [ %indvars.iv758.ph, %.lr.ph698.preheader829 ], [ %indvars.iv.next759.prol, %.lr.ph698.prol ]
  %indvars.iv756.unr = phi i64 [ %indvars.iv756.ph, %.lr.ph698.preheader829 ], [ %indvars.iv.next757.prol, %.lr.ph698.prol ]
  %539 = sub nsw i64 %indvars.iv756.ph, %wide.trip.count763
  %540 = icmp ugt i64 %539, -4
  br i1 %540, label %._crit_edge699, label %.lr.ph698.preheader829.new

.lr.ph698.preheader829.new:                       ; preds = %.lr.ph698.prol.loopexit
  %invariant.gep849 = getelementptr i8, ptr %23, i64 4
  %invariant.gep851 = getelementptr i8, ptr %23, i64 8
  %invariant.gep853 = getelementptr i8, ptr %23, i64 12
  br label %.lr.ph698

.lr.ph698:                                        ; preds = %.lr.ph698, %.lr.ph698.preheader829.new
  %indvars.iv758 = phi i64 [ %indvars.iv758.unr, %.lr.ph698.preheader829.new ], [ %indvars.iv.next759.3, %.lr.ph698 ]
  %indvars.iv756 = phi i64 [ %indvars.iv756.unr, %.lr.ph698.preheader829.new ], [ %indvars.iv.next757.3, %.lr.ph698 ]
  %541 = getelementptr inbounds i32, ptr %.2515, i64 %indvars.iv756
  %542 = load i32, ptr %541, align 4, !tbaa !38
  %543 = getelementptr inbounds i32, ptr %23, i64 %indvars.iv758
  store i32 %542, ptr %543, align 4, !tbaa !38
  %indvars.iv.next757 = add nuw nsw i64 %indvars.iv756, 1
  %544 = getelementptr inbounds i32, ptr %.2515, i64 %indvars.iv.next757
  %545 = load i32, ptr %544, align 4, !tbaa !38
  %gep850 = getelementptr i32, ptr %invariant.gep849, i64 %indvars.iv758
  store i32 %545, ptr %gep850, align 4, !tbaa !38
  %indvars.iv.next757.1 = add nuw nsw i64 %indvars.iv756, 2
  %546 = getelementptr inbounds i32, ptr %.2515, i64 %indvars.iv.next757.1
  %547 = load i32, ptr %546, align 4, !tbaa !38
  %gep852 = getelementptr i32, ptr %invariant.gep851, i64 %indvars.iv758
  store i32 %547, ptr %gep852, align 4, !tbaa !38
  %indvars.iv.next757.2 = add nuw nsw i64 %indvars.iv756, 3
  %548 = getelementptr inbounds i32, ptr %.2515, i64 %indvars.iv.next757.2
  %549 = load i32, ptr %548, align 4, !tbaa !38
  %indvars.iv.next759.3 = add nsw i64 %indvars.iv758, 4
  %gep854 = getelementptr i32, ptr %invariant.gep853, i64 %indvars.iv758
  store i32 %549, ptr %gep854, align 4, !tbaa !38
  %indvars.iv.next757.3 = add nuw nsw i64 %indvars.iv756, 4
  %exitcond764.not.3 = icmp eq i64 %indvars.iv.next757.3, %wide.trip.count763
  br i1 %exitcond764.not.3, label %._crit_edge699, label %.lr.ph698, !llvm.loop !71

._crit_edge699:                                   ; preds = %.lr.ph698.prol.loopexit, %.lr.ph698, %middle.block
  %.pre780 = load i32, ptr %519, align 8, !tbaa !66
  br i1 %527, label %.lr.ph703.preheader, label %._crit_edge704

.lr.ph703.preheader:                              ; preds = %._crit_edge699
  %550 = sext i32 %.pre780 to i64
  %wide.trip.count772 = zext nneg i32 %.2521 to i64
  %min.iters.check814 = icmp ult i32 %.2521, 8
  br i1 %min.iters.check814, label %.lr.ph703.preheader828, label %vector.memcheck809

vector.memcheck809:                               ; preds = %.lr.ph703.preheader
  %551 = shl nsw i64 %550, 2
  %552 = add i64 %551, %21
  %553 = sub i64 %552, %.2518810
  %diff.check811 = icmp ult i64 %553, 32
  br i1 %diff.check811, label %.lr.ph703.preheader828, label %vector.ph815

vector.ph815:                                     ; preds = %vector.memcheck809
  %n.vec817 = and i64 %wide.trip.count763, 2147483640
  %ind.end818 = add nsw i64 %n.vec817, %550
  %invariant.gep855 = getelementptr i32, ptr %20, i64 %550
  br label %vector.body821

vector.body821:                                   ; preds = %vector.body821, %vector.ph815
  %index822 = phi i64 [ 0, %vector.ph815 ], [ %index.next826, %vector.body821 ]
  %554 = getelementptr inbounds i32, ptr %.2518, i64 %index822
  %555 = getelementptr inbounds i8, ptr %554, i64 16
  %wide.load824 = load <4 x i32>, ptr %554, align 4, !tbaa !38
  %wide.load825 = load <4 x i32>, ptr %555, align 4, !tbaa !38
  %gep856 = getelementptr i32, ptr %invariant.gep855, i64 %index822
  %556 = getelementptr inbounds i8, ptr %gep856, i64 16
  store <4 x i32> %wide.load824, ptr %gep856, align 4, !tbaa !38
  store <4 x i32> %wide.load825, ptr %556, align 4, !tbaa !38
  %index.next826 = add nuw i64 %index822, 8
  %557 = icmp eq i64 %index.next826, %n.vec817
  br i1 %557, label %middle.block812, label %vector.body821, !llvm.loop !72

middle.block812:                                  ; preds = %vector.body821
  %cmp.n827 = icmp eq i64 %n.vec817, %wide.trip.count763
  br i1 %cmp.n827, label %._crit_edge704.loopexit, label %.lr.ph703.preheader828

.lr.ph703.preheader828:                           ; preds = %middle.block812, %vector.memcheck809, %.lr.ph703.preheader
  %indvars.iv767.ph = phi i64 [ %550, %vector.memcheck809 ], [ %550, %.lr.ph703.preheader ], [ %ind.end818, %middle.block812 ]
  %indvars.iv765.ph = phi i64 [ 0, %vector.memcheck809 ], [ 0, %.lr.ph703.preheader ], [ %n.vec817, %middle.block812 ]
  %xtraiter840 = and i64 %wide.trip.count763, 3
  %lcmp.mod841.not = icmp eq i64 %xtraiter840, 0
  br i1 %lcmp.mod841.not, label %.lr.ph703.prol.loopexit, label %.lr.ph703.prol

.lr.ph703.prol:                                   ; preds = %.lr.ph703.preheader828, %.lr.ph703.prol
  %indvars.iv767.prol = phi i64 [ %indvars.iv.next768.prol, %.lr.ph703.prol ], [ %indvars.iv767.ph, %.lr.ph703.preheader828 ]
  %indvars.iv765.prol = phi i64 [ %indvars.iv.next766.prol, %.lr.ph703.prol ], [ %indvars.iv765.ph, %.lr.ph703.preheader828 ]
  %prol.iter842 = phi i64 [ %prol.iter842.next, %.lr.ph703.prol ], [ 0, %.lr.ph703.preheader828 ]
  %558 = getelementptr inbounds i32, ptr %.2518, i64 %indvars.iv765.prol
  %559 = load i32, ptr %558, align 4, !tbaa !38
  %indvars.iv.next768.prol = add nsw i64 %indvars.iv767.prol, 1
  %560 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv767.prol
  store i32 %559, ptr %560, align 4, !tbaa !38
  %indvars.iv.next766.prol = add nuw nsw i64 %indvars.iv765.prol, 1
  %prol.iter842.next = add i64 %prol.iter842, 1
  %prol.iter842.cmp.not = icmp eq i64 %prol.iter842.next, %xtraiter840
  br i1 %prol.iter842.cmp.not, label %.lr.ph703.prol.loopexit, label %.lr.ph703.prol, !llvm.loop !73

.lr.ph703.prol.loopexit:                          ; preds = %.lr.ph703.prol, %.lr.ph703.preheader828
  %indvars.iv767.unr = phi i64 [ %indvars.iv767.ph, %.lr.ph703.preheader828 ], [ %indvars.iv.next768.prol, %.lr.ph703.prol ]
  %indvars.iv765.unr = phi i64 [ %indvars.iv765.ph, %.lr.ph703.preheader828 ], [ %indvars.iv.next766.prol, %.lr.ph703.prol ]
  %561 = sub nsw i64 %indvars.iv765.ph, %wide.trip.count763
  %562 = icmp ugt i64 %561, -4
  br i1 %562, label %._crit_edge704.loopexit, label %.lr.ph703.preheader828.new

.lr.ph703.preheader828.new:                       ; preds = %.lr.ph703.prol.loopexit
  %invariant.gep857 = getelementptr i8, ptr %20, i64 4
  %invariant.gep859 = getelementptr i8, ptr %20, i64 8
  %invariant.gep861 = getelementptr i8, ptr %20, i64 12
  br label %.lr.ph703

.lr.ph703:                                        ; preds = %.lr.ph703, %.lr.ph703.preheader828.new
  %indvars.iv767 = phi i64 [ %indvars.iv767.unr, %.lr.ph703.preheader828.new ], [ %indvars.iv.next768.3, %.lr.ph703 ]
  %indvars.iv765 = phi i64 [ %indvars.iv765.unr, %.lr.ph703.preheader828.new ], [ %indvars.iv.next766.3, %.lr.ph703 ]
  %563 = getelementptr inbounds i32, ptr %.2518, i64 %indvars.iv765
  %564 = load i32, ptr %563, align 4, !tbaa !38
  %565 = getelementptr inbounds i32, ptr %20, i64 %indvars.iv767
  store i32 %564, ptr %565, align 4, !tbaa !38
  %indvars.iv.next766 = add nuw nsw i64 %indvars.iv765, 1
  %566 = getelementptr inbounds i32, ptr %.2518, i64 %indvars.iv.next766
  %567 = load i32, ptr %566, align 4, !tbaa !38
  %gep858 = getelementptr i32, ptr %invariant.gep857, i64 %indvars.iv767
  store i32 %567, ptr %gep858, align 4, !tbaa !38
  %indvars.iv.next766.1 = add nuw nsw i64 %indvars.iv765, 2
  %568 = getelementptr inbounds i32, ptr %.2518, i64 %indvars.iv.next766.1
  %569 = load i32, ptr %568, align 4, !tbaa !38
  %gep860 = getelementptr i32, ptr %invariant.gep859, i64 %indvars.iv767
  store i32 %569, ptr %gep860, align 4, !tbaa !38
  %indvars.iv.next766.2 = add nuw nsw i64 %indvars.iv765, 3
  %570 = getelementptr inbounds i32, ptr %.2518, i64 %indvars.iv.next766.2
  %571 = load i32, ptr %570, align 4, !tbaa !38
  %indvars.iv.next768.3 = add nsw i64 %indvars.iv767, 4
  %gep862 = getelementptr i32, ptr %invariant.gep861, i64 %indvars.iv767
  store i32 %571, ptr %gep862, align 4, !tbaa !38
  %indvars.iv.next766.3 = add nuw nsw i64 %indvars.iv765, 4
  %exitcond773.not.3 = icmp eq i64 %indvars.iv.next766.3, %wide.trip.count772
  br i1 %exitcond773.not.3, label %._crit_edge704.loopexit, label %.lr.ph703, !llvm.loop !74

._crit_edge704.loopexit:                          ; preds = %.lr.ph703.prol.loopexit, %.lr.ph703, %middle.block812
  %.pre781 = load i32, ptr %519, align 8, !tbaa !66
  br label %._crit_edge704

._crit_edge704:                                   ; preds = %525, %._crit_edge704.loopexit, %._crit_edge699
  %572 = phi i32 [ %.pre781, %._crit_edge704.loopexit ], [ %.pre780, %._crit_edge699 ], [ %526, %525 ]
  %573 = add nsw i32 %572, %.2521
  store i32 %573, ptr %519, align 8, !tbaa !66
  %574 = load i32, ptr %71, align 4, !tbaa !38
  %575 = add i32 %.3, %6
  %576 = sub i32 %574, %575
  %577 = sitofp i32 %576 to double
  %578 = getelementptr inbounds i8, ptr %0, i64 64
  %579 = load double, ptr %578, align 8, !tbaa !75
  %580 = sitofp i32 %574 to double
  %581 = fmul double %579, %580
  %582 = fcmp olt double %581, %577
  br i1 %582, label %583, label %587

583:                                              ; preds = %._crit_edge704
  %584 = tail call i32 @compress_packed(i32 noundef %6, ptr noundef nonnull %26, ptr noundef %46, ptr noundef %48)
  %585 = icmp eq i32 %584, %.3
  br i1 %585, label %._crit_edge782, label %586

._crit_edge782:                                   ; preds = %583
  %.pre783 = load double, ptr %578, align 8, !tbaa !75
  br label %587

586:                                              ; preds = %583
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.1, i32 noundef 879, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

587:                                              ; preds = %._crit_edge782, %._crit_edge704
  %588 = phi double [ %.pre783, %._crit_edge782 ], [ %579, %._crit_edge704 ]
  %589 = load i32, ptr %189, align 4, !tbaa !38
  %590 = sitofp i32 %.3 to double
  %591 = tail call double @llvm.fmuladd.f64(double %14, double %590, double %590)
  %592 = mul nsw i32 %12, %6
  %593 = sitofp i32 %592 to double
  %594 = fadd double %591, %593
  %595 = fptosi double %594 to i32
  %596 = sub nsw i32 %589, %595
  %597 = sitofp i32 %596 to double
  %598 = sitofp i32 %589 to double
  %599 = fmul double %588, %598
  %600 = fcmp olt double %599, %597
  br i1 %600, label %601, label %605

601:                                              ; preds = %587
  %602 = tail call i32 @lu_file_compress(i32 noundef %6, ptr noundef nonnull %30, ptr noundef %32, ptr noundef %34, ptr noundef %50, ptr noundef %52, double noundef %14, i32 noundef %12) #5
  %603 = icmp eq i32 %602, %.3
  br i1 %603, label %605, label %604

604:                                              ; preds = %601
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.1, i32 noundef 889, ptr noundef nonnull @__PRETTY_FUNCTION__.lu_update) #6
  unreachable

605:                                              ; preds = %601, %587
  %606 = fadd double %146, 1.000000e+00
  %607 = fdiv double %153, %606
  %608 = getelementptr inbounds i8, ptr %0, i64 368
  store double %607, ptr %608, align 8, !tbaa !76
  store i32 %.3, ptr %9, align 8, !tbaa !13
  store i32 -1, ptr %61, align 8, !tbaa !37
  %609 = getelementptr inbounds i8, ptr %0, i64 388
  store i32 -1, ptr %609, align 4, !tbaa !77
  %610 = sitofp i32 %103 to double
  %611 = getelementptr inbounds i8, ptr %0, i64 160
  %612 = load double, ptr %611, align 8, !tbaa !78
  %613 = fadd double %612, %610
  store double %613, ptr %611, align 8, !tbaa !78
  %614 = getelementptr inbounds i8, ptr %0, i64 100
  %615 = load i32, ptr %614, align 4, !tbaa !79
  %616 = add nsw i32 %615, 1
  store i32 %616, ptr %614, align 4, !tbaa !79
  %617 = getelementptr inbounds i8, ptr %0, i64 112
  %618 = load i32, ptr %617, align 8, !tbaa !80
  %619 = add nsw i32 %618, 1
  store i32 %619, ptr %617, align 8, !tbaa !80
  br label %620

620:                                              ; preds = %._crit_edge627, %145, %605, %193
  %.0504 = phi i32 [ 1, %193 ], [ 0, %605 ], [ -6, %145 ], [ -6, %._crit_edge627 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #5
  ret i32 %.0504
}

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

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

; Function Attrs: mustprogress nocallback nofree 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: nounwind uwtable
declare hidden i32 @find(i32 noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #0

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

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

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

; Function Attrs: nounwind uwtable
declare hidden i32 @bfs_path(i32 noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @lu_dfs(i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare hidden void @permute(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #0

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

declare void @lu_garbage_perm(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare hidden i32 @compress_packed(i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

declare i32 @lu_file_compress(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, double noundef, i32 noundef) local_unnamed_addr #4

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

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

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


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