; LLVM IR from ekoontz/graphlab :: src/graphlab/extern/metis/libmetis (kfmetis)

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

@.str.31 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [29 x i8], align 1

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

declare i64 @libmetis__idxsum(i64 noundef, ptr noundef, i64 noundef) #1

declare i64 @libmetis__ComputeCut(ptr noundef, ptr noundef) #1

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

declare ptr @libmetis__idxsmalloc(i64 noundef, i64 noundef, ptr noundef) #1

declare ptr @libmetis__idxmalloc(i64 noundef, ptr noundef) #1

declare i32 @mprintf(ptr noundef, ...) #1

; Function Attrs: nounwind uwtable
define dso_local void @RefineTopLevelSeparators(ptr noundef %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8) #2 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i64, 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 i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca [5 x i64], align 16
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca [4 x ptr], align 16
  %44 = alloca ptr, align 8
  %45 = alloca ptr, align 8
  %46 = alloca [3 x ptr], align 16
  %47 = alloca [3 x ptr], align 16
  store ptr %0, ptr %10, align 8, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !5
  store i64 %2, ptr %12, align 8, !tbaa !9
  store ptr %3, ptr %13, align 8, !tbaa !5
  store ptr %4, ptr %14, align 8, !tbaa !5
  store ptr %5, ptr %15, align 8, !tbaa !5
  store ptr %6, ptr %16, align 8, !tbaa !5
  store ptr %7, ptr %17, align 8, !tbaa !5
  store ptr %8, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 40, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %46) #5
  call void @llvm.lifetime.start.p0(i64 24, ptr %47) #5
  %48 = load ptr, ptr %11, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.graphdef, ptr %48, i32 0, i32 0
  %50 = load i64, ptr %49, align 8, !tbaa !11
  store i64 %50, ptr %25, align 8, !tbaa !9
  %51 = load ptr, ptr %11, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.graphdef, ptr %51, i32 0, i32 2
  %53 = load ptr, ptr %52, align 8, !tbaa !14
  store ptr %53, ptr %37, align 8, !tbaa !5
  %54 = load ptr, ptr %11, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.graphdef, ptr %54, i32 0, i32 3
  %56 = load ptr, ptr %55, align 8, !tbaa !15
  store ptr %56, ptr %39, align 8, !tbaa !5
  %57 = load ptr, ptr %11, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.graphdef, ptr %57, i32 0, i32 5
  %59 = load ptr, ptr %58, align 8, !tbaa !16
  store ptr %59, ptr %38, align 8, !tbaa !5
  %60 = load ptr, ptr %11, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.graphdef, ptr %60, i32 0, i32 6
  %62 = load ptr, ptr %61, align 8, !tbaa !17
  store ptr %62, ptr %40, align 8, !tbaa !5
  %63 = load i64, ptr %12, align 8, !tbaa !9
  %64 = call ptr @libmetis__idxsmalloc(i64 noundef %63, i64 noundef 0, ptr noundef @.str.31)
  store ptr %64, ptr %42, align 8, !tbaa !5
  %65 = load i64, ptr %12, align 8, !tbaa !9
  %66 = call ptr @libmetis__idxsmalloc(i64 noundef %65, i64 noundef 0, ptr noundef @.str.32)
  %67 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 0
  store ptr %66, ptr %67, align 16, !tbaa !5
  %68 = load i64, ptr %12, align 8, !tbaa !9
  %69 = call ptr @libmetis__idxsmalloc(i64 noundef %68, i64 noundef 0, ptr noundef @.str.32)
  %70 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 1
  store ptr %69, ptr %70, align 8, !tbaa !5
  %71 = load i64, ptr %12, align 8, !tbaa !9
  %72 = call ptr @libmetis__idxsmalloc(i64 noundef %71, i64 noundef 0, ptr noundef @.str.32)
  %73 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 2
  store ptr %72, ptr %73, align 16, !tbaa !5
  %74 = load i64, ptr %12, align 8, !tbaa !9
  %75 = call ptr @libmetis__idxsmalloc(i64 noundef %74, i64 noundef 0, ptr noundef @.str.33)
  %76 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 0
  store ptr %75, ptr %76, align 16, !tbaa !5
  %77 = load i64, ptr %12, align 8, !tbaa !9
  %78 = call ptr @libmetis__idxsmalloc(i64 noundef %77, i64 noundef 0, ptr noundef @.str.33)
  %79 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 1
  store ptr %78, ptr %79, align 8, !tbaa !5
  %80 = load i64, ptr %12, align 8, !tbaa !9
  %81 = call ptr @libmetis__idxsmalloc(i64 noundef %80, i64 noundef 0, ptr noundef @.str.33)
  %82 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 2
  store ptr %81, ptr %82, align 16, !tbaa !5
  %83 = load i64, ptr %12, align 8, !tbaa !9
  %84 = call ptr @libmetis__idxsmalloc(i64 noundef %83, i64 noundef 0, ptr noundef @.str.33)
  %85 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  store ptr %84, ptr %85, align 8, !tbaa !5
  %86 = load i64, ptr %12, align 8, !tbaa !9
  %87 = call ptr @libmetis__idxsmalloc(i64 noundef %86, i64 noundef -1, ptr noundef @.str.34)
  store ptr %87, ptr %44, align 8, !tbaa !5
  %88 = load i64, ptr %12, align 8, !tbaa !9
  %89 = call ptr @libmetis__idxmalloc(i64 noundef %88, ptr noundef @.str.35)
  store ptr %89, ptr %45, align 8, !tbaa !5
  %90 = load i64, ptr %25, align 8, !tbaa !9
  %91 = call ptr @libmetis__idxmalloc(i64 noundef %90, ptr noundef @.str.36)
  store ptr %91, ptr %41, align 8, !tbaa !5
  %92 = load i64, ptr %12, align 8, !tbaa !9
  %93 = call ptr @gk_fmalloc(i64 noundef %92, ptr noundef @.str.37)
  %94 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 0
  store ptr %93, ptr %94, align 16, !tbaa !5
  %95 = load i64, ptr %12, align 8, !tbaa !9
  %96 = call ptr @gk_fmalloc(i64 noundef %95, ptr noundef @.str.38)
  %97 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 1
  store ptr %96, ptr %97, align 8, !tbaa !5
  %98 = load i64, ptr %12, align 8, !tbaa !9
  %99 = call ptr @gk_fmalloc(i64 noundef %98, ptr noundef @.str.39)
  %100 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 2
  store ptr %99, ptr %100, align 16, !tbaa !5
  %101 = load ptr, ptr %11, align 8, !tbaa !5
  %102 = load ptr, ptr %13, align 8, !tbaa !5
  %103 = call i64 @libmetis__ComputeCut(ptr noundef %101, ptr noundef %102)
  store i64 %103, ptr %26, align 8, !tbaa !9
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %104

104:                                              ; preds = %138, %9
  %105 = load i64, ptr %19, align 8, !tbaa !9
  %106 = load i64, ptr %25, align 8, !tbaa !9
  %107 = icmp slt i64 %105, %106
  br i1 %107, label %108, label %141

108:                                              ; preds = %104
  %109 = load ptr, ptr %39, align 8, !tbaa !5
  %110 = load i64, ptr %19, align 8, !tbaa !9
  %111 = getelementptr inbounds i64, ptr %109, i64 %110
  %112 = load i64, ptr %111, align 8, !tbaa !9
  %113 = load ptr, ptr %42, align 8, !tbaa !5
  %114 = load ptr, ptr %13, align 8, !tbaa !5
  %115 = load i64, ptr %19, align 8, !tbaa !9
  %116 = getelementptr inbounds i64, ptr %114, i64 %115
  %117 = load i64, ptr %116, align 8, !tbaa !9
  %118 = getelementptr inbounds i64, ptr %113, i64 %117
  %119 = load i64, ptr %118, align 8, !tbaa !9
  %120 = add nsw i64 %119, %112
  store i64 %120, ptr %118, align 8, !tbaa !9
  %121 = load ptr, ptr %39, align 8, !tbaa !5
  %122 = load i64, ptr %19, align 8, !tbaa !9
  %123 = getelementptr inbounds i64, ptr %121, i64 %122
  %124 = load i64, ptr %123, align 8, !tbaa !9
  %125 = load ptr, ptr %14, align 8, !tbaa !5
  %126 = load i64, ptr %19, align 8, !tbaa !9
  %127 = getelementptr inbounds i64, ptr %125, i64 %126
  %128 = load i64, ptr %127, align 8, !tbaa !9
  %129 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 %128
  %130 = load ptr, ptr %129, align 8, !tbaa !5
  %131 = load ptr, ptr %13, align 8, !tbaa !5
  %132 = load i64, ptr %19, align 8, !tbaa !9
  %133 = getelementptr inbounds i64, ptr %131, i64 %132
  %134 = load i64, ptr %133, align 8, !tbaa !9
  %135 = getelementptr inbounds i64, ptr %130, i64 %134
  %136 = load i64, ptr %135, align 8, !tbaa !9
  %137 = add nsw i64 %136, %124
  store i64 %137, ptr %135, align 8, !tbaa !9
  br label %138

138:                                              ; preds = %108
  %139 = load i64, ptr %19, align 8, !tbaa !9
  %140 = add nsw i64 %139, 1
  store i64 %140, ptr %19, align 8, !tbaa !9
  br label %104, !llvm.loop !18

141:                                              ; preds = %104
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %142

142:                                              ; preds = %219, %141
  %143 = load i64, ptr %19, align 8, !tbaa !9
  %144 = load i64, ptr %12, align 8, !tbaa !9
  %145 = icmp slt i64 %143, %144
  br i1 %145, label %146, label %222

146:                                              ; preds = %142
  %147 = load ptr, ptr %16, align 8, !tbaa !5
  %148 = load i64, ptr %19, align 8, !tbaa !9
  %149 = mul nsw i64 2, %148
  %150 = getelementptr inbounds i64, ptr %147, i64 %149
  %151 = load i64, ptr %150, align 8, !tbaa !9
  %152 = sitofp i64 %151 to double
  %153 = call double @log(double noundef %152) #5
  %154 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 0
  %155 = load ptr, ptr %154, align 16, !tbaa !5
  %156 = load i64, ptr %19, align 8, !tbaa !9
  %157 = getelementptr inbounds i64, ptr %155, i64 %156
  %158 = load i64, ptr %157, align 8, !tbaa !9
  %159 = sitofp i64 %158 to double
  %160 = call double @log(double noundef %159) #5
  %161 = fdiv double %153, %160
  %162 = fptrunc double %161 to float
  %163 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 0
  %164 = load ptr, ptr %163, align 16, !tbaa !5
  %165 = load i64, ptr %19, align 8, !tbaa !9
  %166 = getelementptr inbounds float, ptr %164, i64 %165
  store float %162, ptr %166, align 4, !tbaa !20
  %167 = load ptr, ptr %16, align 8, !tbaa !5
  %168 = load i64, ptr %19, align 8, !tbaa !9
  %169 = mul nsw i64 2, %168
  %170 = add nsw i64 %169, 1
  %171 = getelementptr inbounds i64, ptr %167, i64 %170
  %172 = load i64, ptr %171, align 8, !tbaa !9
  %173 = sitofp i64 %172 to double
  %174 = call double @log(double noundef %173) #5
  %175 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 1
  %176 = load ptr, ptr %175, align 8, !tbaa !5
  %177 = load i64, ptr %19, align 8, !tbaa !9
  %178 = getelementptr inbounds i64, ptr %176, i64 %177
  %179 = load i64, ptr %178, align 8, !tbaa !9
  %180 = sitofp i64 %179 to double
  %181 = call double @log(double noundef %180) #5
  %182 = fdiv double %174, %181
  %183 = fptrunc double %182 to float
  %184 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 1
  %185 = load ptr, ptr %184, align 8, !tbaa !5
  %186 = load i64, ptr %19, align 8, !tbaa !9
  %187 = getelementptr inbounds float, ptr %185, i64 %186
  store float %183, ptr %187, align 4, !tbaa !20
  %188 = load ptr, ptr %15, align 8, !tbaa !5
  %189 = load i64, ptr %19, align 8, !tbaa !9
  %190 = getelementptr inbounds i64, ptr %188, i64 %189
  %191 = load i64, ptr %190, align 8, !tbaa !9
  %192 = load ptr, ptr %16, align 8, !tbaa !5
  %193 = load i64, ptr %19, align 8, !tbaa !9
  %194 = mul nsw i64 2, %193
  %195 = getelementptr inbounds i64, ptr %192, i64 %194
  %196 = load i64, ptr %195, align 8, !tbaa !9
  %197 = load ptr, ptr %16, align 8, !tbaa !5
  %198 = load i64, ptr %19, align 8, !tbaa !9
  %199 = mul nsw i64 2, %198
  %200 = add nsw i64 %199, 1
  %201 = getelementptr inbounds i64, ptr %197, i64 %200
  %202 = load i64, ptr %201, align 8, !tbaa !9
  %203 = add nsw i64 %196, %202
  %204 = sub nsw i64 %191, %203
  %205 = sitofp i64 %204 to double
  %206 = call double @log(double noundef %205) #5
  %207 = load ptr, ptr %17, align 8, !tbaa !5
  %208 = load i64, ptr %19, align 8, !tbaa !9
  %209 = getelementptr inbounds i64, ptr %207, i64 %208
  %210 = load i64, ptr %209, align 8, !tbaa !9
  %211 = sitofp i64 %210 to double
  %212 = call double @log(double noundef %211) #5
  %213 = fdiv double %206, %212
  %214 = fptrunc double %213 to float
  %215 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 2
  %216 = load ptr, ptr %215, align 16, !tbaa !5
  %217 = load i64, ptr %19, align 8, !tbaa !9
  %218 = getelementptr inbounds float, ptr %216, i64 %217
  store float %214, ptr %218, align 4, !tbaa !20
  br label %219

219:                                              ; preds = %146
  %220 = load i64, ptr %19, align 8, !tbaa !9
  %221 = add nsw i64 %220, 1
  store i64 %221, ptr %19, align 8, !tbaa !9
  br label %142, !llvm.loop !22

222:                                              ; preds = %142
  %223 = load i64, ptr %12, align 8, !tbaa !9
  %224 = load ptr, ptr %42, align 8, !tbaa !5
  %225 = call i64 @libmetis__idxsum(i64 noundef %223, ptr noundef %224, i64 noundef 1)
  %226 = sitofp i64 %225 to double
  %227 = fmul double 1.030000e+00, %226
  %228 = load i64, ptr %12, align 8, !tbaa !9
  %229 = sitofp i64 %228 to double
  %230 = fdiv double %227, %229
  %231 = fptrunc double %230 to float
  %232 = fptosi float %231 to i32
  %233 = sext i32 %232 to i64
  store i64 %233, ptr %32, align 8, !tbaa !9
  %234 = load i64, ptr %12, align 8, !tbaa !9
  %235 = load ptr, ptr %42, align 8, !tbaa !5
  %236 = call i64 @libmetis__idxsum(i64 noundef %234, ptr noundef %235, i64 noundef 1)
  %237 = load i64, ptr %12, align 8, !tbaa !9
  %238 = load ptr, ptr %17, align 8, !tbaa !5
  %239 = call i64 @libmetis__idxsum(i64 noundef %237, ptr noundef %238, i64 noundef 1)
  %240 = sub nsw i64 %236, %239
  %241 = sitofp i64 %240 to double
  %242 = fmul double 1.100000e+00, %241
  %243 = load i64, ptr %12, align 8, !tbaa !9
  %244 = sitofp i64 %243 to double
  %245 = fmul double 2.000000e+00, %244
  %246 = fdiv double %242, %245
  %247 = fptosi double %246 to i64
  store i64 %247, ptr %33, align 8, !tbaa !9
  %248 = load i64, ptr %12, align 8, !tbaa !9
  %249 = load ptr, ptr %17, align 8, !tbaa !5
  %250 = call i64 @libmetis__idxsum(i64 noundef %248, ptr noundef %249, i64 noundef 1)
  %251 = load i64, ptr %12, align 8, !tbaa !9
  %252 = sdiv i64 %250, %251
  store i64 %252, ptr %29, align 8, !tbaa !9
  %253 = load i64, ptr %12, align 8, !tbaa !9
  %254 = load ptr, ptr %15, align 8, !tbaa !5
  %255 = call i64 @libmetis__idxsum(i64 noundef %253, ptr noundef %254, i64 noundef 1)
  %256 = load i64, ptr %12, align 8, !tbaa !9
  %257 = sdiv i64 %255, %256
  store i64 %257, ptr %30, align 8, !tbaa !9
  %258 = load ptr, ptr %37, align 8, !tbaa !5
  %259 = load i64, ptr %25, align 8, !tbaa !9
  %260 = getelementptr inbounds i64, ptr %258, i64 %259
  %261 = load i64, ptr %260, align 8, !tbaa !9
  %262 = sitofp i64 %261 to double
  %263 = load i64, ptr %25, align 8, !tbaa !9
  %264 = sitofp i64 %263 to double
  %265 = fmul double 1.000000e+00, %264
  %266 = fdiv double %262, %265
  %267 = fptosi double %266 to i64
  store i64 %267, ptr %35, align 8, !tbaa !9
  %268 = load i64, ptr %29, align 8, !tbaa !9
  %269 = load i64, ptr %30, align 8, !tbaa !9
  %270 = load i64, ptr %35, align 8, !tbaa !9
  %271 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.40, i64 noundef %268, i64 noundef %269, i64 noundef %270)
  store i64 0, ptr %28, align 8, !tbaa !9
  br label %272

272:                                              ; preds = %1100, %222
  %273 = load i64, ptr %28, align 8, !tbaa !9
  %274 = icmp slt i64 %273, 10
  br i1 %274, label %275, label %1103

275:                                              ; preds = %272
  %276 = load i64, ptr %25, align 8, !tbaa !9
  %277 = load ptr, ptr %41, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %276, ptr noundef %277, i64 noundef 1)
  %278 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 4
  store i64 0, ptr %278, align 16, !tbaa !9
  %279 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 3
  store i64 0, ptr %279, align 8, !tbaa !9
  %280 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 2
  store i64 0, ptr %280, align 16, !tbaa !9
  %281 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 1
  store i64 0, ptr %281, align 8, !tbaa !9
  %282 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 0
  store i64 0, ptr %282, align 16, !tbaa !9
  store i64 0, ptr %34, align 8, !tbaa !9
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %283

283:                                              ; preds = %1078, %275
  %284 = load i64, ptr %20, align 8, !tbaa !9
  %285 = load i64, ptr %25, align 8, !tbaa !9
  %286 = icmp slt i64 %284, %285
  br i1 %286, label %287, label %1081

287:                                              ; preds = %283
  %288 = load ptr, ptr %41, align 8, !tbaa !5
  %289 = load i64, ptr %20, align 8, !tbaa !9
  %290 = getelementptr inbounds i64, ptr %288, i64 %289
  %291 = load i64, ptr %290, align 8, !tbaa !9
  store i64 %291, ptr %19, align 8, !tbaa !9
  %292 = load ptr, ptr %13, align 8, !tbaa !5
  %293 = load i64, ptr %19, align 8, !tbaa !9
  %294 = getelementptr inbounds i64, ptr %292, i64 %293
  %295 = load i64, ptr %294, align 8, !tbaa !9
  store i64 %295, ptr %23, align 8, !tbaa !9
  store i64 0, ptr %27, align 8, !tbaa !9
  %296 = load ptr, ptr %37, align 8, !tbaa !5
  %297 = load i64, ptr %19, align 8, !tbaa !9
  %298 = getelementptr inbounds i64, ptr %296, i64 %297
  %299 = load i64, ptr %298, align 8, !tbaa !9
  store i64 %299, ptr %21, align 8, !tbaa !9
  br label %300

300:                                              ; preds = %375, %287
  %301 = load i64, ptr %21, align 8, !tbaa !9
  %302 = load ptr, ptr %37, align 8, !tbaa !5
  %303 = load i64, ptr %19, align 8, !tbaa !9
  %304 = add nsw i64 %303, 1
  %305 = getelementptr inbounds i64, ptr %302, i64 %304
  %306 = load i64, ptr %305, align 8, !tbaa !9
  %307 = icmp slt i64 %301, %306
  br i1 %307, label %308, label %378

308:                                              ; preds = %300
  %309 = load ptr, ptr %13, align 8, !tbaa !5
  %310 = load ptr, ptr %38, align 8, !tbaa !5
  %311 = load i64, ptr %21, align 8, !tbaa !9
  %312 = getelementptr inbounds i64, ptr %310, i64 %311
  %313 = load i64, ptr %312, align 8, !tbaa !9
  %314 = getelementptr inbounds i64, ptr %309, i64 %313
  %315 = load i64, ptr %314, align 8, !tbaa !9
  store i64 %315, ptr %24, align 8, !tbaa !9
  %316 = load ptr, ptr %44, align 8, !tbaa !5
  %317 = load i64, ptr %24, align 8, !tbaa !9
  %318 = getelementptr inbounds i64, ptr %316, i64 %317
  %319 = load i64, ptr %318, align 8, !tbaa !9
  store i64 %319, ptr %22, align 8, !tbaa !9
  %320 = icmp eq i64 %319, -1
  br i1 %320, label %321, label %347

321:                                              ; preds = %308
  %322 = load i64, ptr %27, align 8, !tbaa !9
  %323 = add nsw i64 %322, 1
  store i64 %323, ptr %27, align 8, !tbaa !9
  store i64 %322, ptr %22, align 8, !tbaa !9
  %324 = load ptr, ptr %44, align 8, !tbaa !5
  %325 = load i64, ptr %24, align 8, !tbaa !9
  %326 = getelementptr inbounds i64, ptr %324, i64 %325
  store i64 %322, ptr %326, align 8, !tbaa !9
  %327 = load i64, ptr %24, align 8, !tbaa !9
  %328 = load ptr, ptr %45, align 8, !tbaa !5
  %329 = load i64, ptr %22, align 8, !tbaa !9
  %330 = getelementptr inbounds i64, ptr %328, i64 %329
  store i64 %327, ptr %330, align 8, !tbaa !9
  %331 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %332 = load ptr, ptr %331, align 8, !tbaa !5
  %333 = load i64, ptr %22, align 8, !tbaa !9
  %334 = getelementptr inbounds i64, ptr %332, i64 %333
  store i64 0, ptr %334, align 8, !tbaa !9
  %335 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 2
  %336 = load ptr, ptr %335, align 16, !tbaa !5
  %337 = load i64, ptr %22, align 8, !tbaa !9
  %338 = getelementptr inbounds i64, ptr %336, i64 %337
  store i64 0, ptr %338, align 8, !tbaa !9
  %339 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 1
  %340 = load ptr, ptr %339, align 8, !tbaa !5
  %341 = load i64, ptr %22, align 8, !tbaa !9
  %342 = getelementptr inbounds i64, ptr %340, i64 %341
  store i64 0, ptr %342, align 8, !tbaa !9
  %343 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 0
  %344 = load ptr, ptr %343, align 16, !tbaa !5
  %345 = load i64, ptr %22, align 8, !tbaa !9
  %346 = getelementptr inbounds i64, ptr %344, i64 %345
  store i64 0, ptr %346, align 8, !tbaa !9
  br label %347

347:                                              ; preds = %321, %308
  %348 = load ptr, ptr %40, align 8, !tbaa !5
  %349 = load i64, ptr %21, align 8, !tbaa !9
  %350 = getelementptr inbounds i64, ptr %348, i64 %349
  %351 = load i64, ptr %350, align 8, !tbaa !9
  %352 = load ptr, ptr %14, align 8, !tbaa !5
  %353 = load ptr, ptr %38, align 8, !tbaa !5
  %354 = load i64, ptr %21, align 8, !tbaa !9
  %355 = getelementptr inbounds i64, ptr %353, i64 %354
  %356 = load i64, ptr %355, align 8, !tbaa !9
  %357 = getelementptr inbounds i64, ptr %352, i64 %356
  %358 = load i64, ptr %357, align 8, !tbaa !9
  %359 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 %358
  %360 = load ptr, ptr %359, align 8, !tbaa !5
  %361 = load i64, ptr %22, align 8, !tbaa !9
  %362 = getelementptr inbounds i64, ptr %360, i64 %361
  %363 = load i64, ptr %362, align 8, !tbaa !9
  %364 = add nsw i64 %363, %351
  store i64 %364, ptr %362, align 8, !tbaa !9
  %365 = load ptr, ptr %40, align 8, !tbaa !5
  %366 = load i64, ptr %21, align 8, !tbaa !9
  %367 = getelementptr inbounds i64, ptr %365, i64 %366
  %368 = load i64, ptr %367, align 8, !tbaa !9
  %369 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %370 = load ptr, ptr %369, align 8, !tbaa !5
  %371 = load i64, ptr %22, align 8, !tbaa !9
  %372 = getelementptr inbounds i64, ptr %370, i64 %371
  %373 = load i64, ptr %372, align 8, !tbaa !9
  %374 = add nsw i64 %373, %368
  store i64 %374, ptr %372, align 8, !tbaa !9
  br label %375

375:                                              ; preds = %347
  %376 = load i64, ptr %21, align 8, !tbaa !9
  %377 = add nsw i64 %376, 1
  store i64 %377, ptr %21, align 8, !tbaa !9
  br label %300, !llvm.loop !23

378:                                              ; preds = %300
  %379 = load ptr, ptr %44, align 8, !tbaa !5
  %380 = load i64, ptr %23, align 8, !tbaa !9
  %381 = getelementptr inbounds i64, ptr %379, i64 %380
  %382 = load i64, ptr %381, align 8, !tbaa !9
  %383 = icmp ne i64 %382, -1
  br i1 %383, label %384, label %393

384:                                              ; preds = %378
  %385 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %386 = load ptr, ptr %385, align 8, !tbaa !5
  %387 = load ptr, ptr %44, align 8, !tbaa !5
  %388 = load i64, ptr %23, align 8, !tbaa !9
  %389 = getelementptr inbounds i64, ptr %387, i64 %388
  %390 = load i64, ptr %389, align 8, !tbaa !9
  %391 = getelementptr inbounds i64, ptr %386, i64 %390
  %392 = load i64, ptr %391, align 8, !tbaa !9
  br label %394

393:                                              ; preds = %378
  br label %394

394:                                              ; preds = %393, %384
  %395 = phi i64 [ %392, %384 ], [ 0, %393 ]
  store i64 %395, ptr %31, align 8, !tbaa !9
  %396 = load ptr, ptr %14, align 8, !tbaa !5
  %397 = load i64, ptr %19, align 8, !tbaa !9
  %398 = getelementptr inbounds i64, ptr %396, i64 %397
  %399 = load i64, ptr %398, align 8, !tbaa !9
  %400 = icmp eq i64 %399, 2
  br i1 %400, label %401, label %631

401:                                              ; preds = %394
  store i64 -1, ptr %24, align 8, !tbaa !9
  store i64 0, ptr %21, align 8, !tbaa !9
  br label %402

402:                                              ; preds = %544, %401
  %403 = load i64, ptr %21, align 8, !tbaa !9
  %404 = load i64, ptr %27, align 8, !tbaa !9
  %405 = icmp slt i64 %403, %404
  br i1 %405, label %406, label %547

406:                                              ; preds = %402
  %407 = load ptr, ptr %45, align 8, !tbaa !5
  %408 = load i64, ptr %21, align 8, !tbaa !9
  %409 = getelementptr inbounds i64, ptr %407, i64 %408
  %410 = load i64, ptr %409, align 8, !tbaa !9
  %411 = load i64, ptr %23, align 8, !tbaa !9
  %412 = icmp eq i64 %410, %411
  br i1 %412, label %428, label %413

413:                                              ; preds = %406
  %414 = load ptr, ptr %42, align 8, !tbaa !5
  %415 = load ptr, ptr %45, align 8, !tbaa !5
  %416 = load i64, ptr %21, align 8, !tbaa !9
  %417 = getelementptr inbounds i64, ptr %415, i64 %416
  %418 = load i64, ptr %417, align 8, !tbaa !9
  %419 = getelementptr inbounds i64, ptr %414, i64 %418
  %420 = load i64, ptr %419, align 8, !tbaa !9
  %421 = load ptr, ptr %39, align 8, !tbaa !5
  %422 = load i64, ptr %19, align 8, !tbaa !9
  %423 = getelementptr inbounds i64, ptr %421, i64 %422
  %424 = load i64, ptr %423, align 8, !tbaa !9
  %425 = add nsw i64 %420, %424
  %426 = load i64, ptr %32, align 8, !tbaa !9
  %427 = icmp sgt i64 %425, %426
  br i1 %427, label %428, label %429

428:                                              ; preds = %413, %406
  br label %544

429:                                              ; preds = %413
  %430 = load ptr, ptr %15, align 8, !tbaa !5
  %431 = load ptr, ptr %45, align 8, !tbaa !5
  %432 = load i64, ptr %21, align 8, !tbaa !9
  %433 = getelementptr inbounds i64, ptr %431, i64 %432
  %434 = load i64, ptr %433, align 8, !tbaa !9
  %435 = getelementptr inbounds i64, ptr %430, i64 %434
  %436 = load i64, ptr %435, align 8, !tbaa !9
  %437 = load ptr, ptr %15, align 8, !tbaa !5
  %438 = load i64, ptr %23, align 8, !tbaa !9
  %439 = getelementptr inbounds i64, ptr %437, i64 %438
  %440 = load i64, ptr %439, align 8, !tbaa !9
  %441 = load i64, ptr %30, align 8, !tbaa !9
  %442 = icmp sge i64 %440, %441
  br i1 %442, label %443, label %448

443:                                              ; preds = %429
  %444 = load ptr, ptr %15, align 8, !tbaa !5
  %445 = load i64, ptr %23, align 8, !tbaa !9
  %446 = getelementptr inbounds i64, ptr %444, i64 %445
  %447 = load i64, ptr %446, align 8, !tbaa !9
  br label %450

448:                                              ; preds = %429
  %449 = load i64, ptr %30, align 8, !tbaa !9
  br label %450

450:                                              ; preds = %448, %443
  %451 = phi i64 [ %447, %443 ], [ %449, %448 ]
  %452 = icmp sgt i64 %436, %451
  br i1 %452, label %453, label %471

453:                                              ; preds = %450
  %454 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 0
  %455 = load i64, ptr %454, align 16, !tbaa !9
  %456 = add nsw i64 %455, 1
  store i64 %456, ptr %454, align 16, !tbaa !9
  %457 = load ptr, ptr %18, align 8, !tbaa !5
  %458 = load i64, ptr %23, align 8, !tbaa !9
  %459 = getelementptr inbounds i64, ptr %457, i64 %458
  %460 = load i64, ptr %459, align 8, !tbaa !9
  %461 = load ptr, ptr %17, align 8, !tbaa !5
  %462 = load i64, ptr %23, align 8, !tbaa !9
  %463 = getelementptr inbounds i64, ptr %461, i64 %462
  %464 = load i64, ptr %463, align 8, !tbaa !9
  %465 = icmp slt i64 %460, %464
  br i1 %465, label %466, label %470

466:                                              ; preds = %453
  %467 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 2
  %468 = load i64, ptr %467, align 16, !tbaa !9
  %469 = add nsw i64 %468, 1
  store i64 %469, ptr %467, align 16, !tbaa !9
  br label %470

470:                                              ; preds = %466, %453
  br label %544

471:                                              ; preds = %450
  %472 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 0
  %473 = load ptr, ptr %472, align 16, !tbaa !5
  %474 = load i64, ptr %21, align 8, !tbaa !9
  %475 = getelementptr inbounds i64, ptr %473, i64 %474
  %476 = load i64, ptr %475, align 8, !tbaa !9
  %477 = icmp sgt i64 %476, 0
  br i1 %477, label %478, label %490

478:                                              ; preds = %471
  %479 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 0
  %480 = load ptr, ptr %479, align 16, !tbaa !5
  %481 = load ptr, ptr %45, align 8, !tbaa !5
  %482 = load i64, ptr %21, align 8, !tbaa !9
  %483 = getelementptr inbounds i64, ptr %481, i64 %482
  %484 = load i64, ptr %483, align 8, !tbaa !9
  %485 = getelementptr inbounds i64, ptr %480, i64 %484
  %486 = load i64, ptr %485, align 8, !tbaa !9
  %487 = load i64, ptr %33, align 8, !tbaa !9
  %488 = icmp sgt i64 %486, %487
  br i1 %488, label %489, label %490

489:                                              ; preds = %478
  br label %544

490:                                              ; preds = %478, %471
  %491 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 1
  %492 = load ptr, ptr %491, align 8, !tbaa !5
  %493 = load i64, ptr %21, align 8, !tbaa !9
  %494 = getelementptr inbounds i64, ptr %492, i64 %493
  %495 = load i64, ptr %494, align 8, !tbaa !9
  %496 = icmp sgt i64 %495, 0
  br i1 %496, label %497, label %509

497:                                              ; preds = %490
  %498 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 1
  %499 = load ptr, ptr %498, align 8, !tbaa !5
  %500 = load ptr, ptr %45, align 8, !tbaa !5
  %501 = load i64, ptr %21, align 8, !tbaa !9
  %502 = getelementptr inbounds i64, ptr %500, i64 %501
  %503 = load i64, ptr %502, align 8, !tbaa !9
  %504 = getelementptr inbounds i64, ptr %499, i64 %503
  %505 = load i64, ptr %504, align 8, !tbaa !9
  %506 = load i64, ptr %33, align 8, !tbaa !9
  %507 = icmp sgt i64 %505, %506
  br i1 %507, label %508, label %509

508:                                              ; preds = %497
  br label %544

509:                                              ; preds = %497, %490
  %510 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 0
  %511 = load ptr, ptr %510, align 16, !tbaa !5
  %512 = load i64, ptr %21, align 8, !tbaa !9
  %513 = getelementptr inbounds i64, ptr %511, i64 %512
  %514 = load i64, ptr %513, align 8, !tbaa !9
  %515 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 1
  %516 = load ptr, ptr %515, align 8, !tbaa !5
  %517 = load i64, ptr %21, align 8, !tbaa !9
  %518 = getelementptr inbounds i64, ptr %516, i64 %517
  %519 = load i64, ptr %518, align 8, !tbaa !9
  %520 = mul nsw i64 %514, %519
  %521 = icmp eq i64 %520, 0
  br i1 %521, label %522, label %543

522:                                              ; preds = %509
  %523 = load i64, ptr %24, align 8, !tbaa !9
  %524 = icmp eq i64 %523, -1
  br i1 %524, label %537, label %525

525:                                              ; preds = %522
  %526 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %527 = load ptr, ptr %526, align 8, !tbaa !5
  %528 = load i64, ptr %24, align 8, !tbaa !9
  %529 = getelementptr inbounds i64, ptr %527, i64 %528
  %530 = load i64, ptr %529, align 8, !tbaa !9
  %531 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %532 = load ptr, ptr %531, align 8, !tbaa !5
  %533 = load i64, ptr %21, align 8, !tbaa !9
  %534 = getelementptr inbounds i64, ptr %532, i64 %533
  %535 = load i64, ptr %534, align 8, !tbaa !9
  %536 = icmp slt i64 %530, %535
  br i1 %536, label %537, label %539

537:                                              ; preds = %525, %522
  %538 = load i64, ptr %21, align 8, !tbaa !9
  br label %541

539:                                              ; preds = %525
  %540 = load i64, ptr %24, align 8, !tbaa !9
  br label %541

541:                                              ; preds = %539, %537
  %542 = phi i64 [ %538, %537 ], [ %540, %539 ]
  store i64 %542, ptr %24, align 8, !tbaa !9
  br label %543

543:                                              ; preds = %541, %509
  br label %544

544:                                              ; preds = %543, %508, %489, %470, %428
  %545 = load i64, ptr %21, align 8, !tbaa !9
  %546 = add nsw i64 %545, 1
  store i64 %546, ptr %21, align 8, !tbaa !9
  br label %402, !llvm.loop !24

547:                                              ; preds = %402
  %548 = load i64, ptr %24, align 8, !tbaa !9
  %549 = icmp eq i64 %548, -1
  br i1 %549, label %550, label %564

550:                                              ; preds = %547
  %551 = load ptr, ptr %18, align 8, !tbaa !5
  %552 = load i64, ptr %23, align 8, !tbaa !9
  %553 = getelementptr inbounds i64, ptr %551, i64 %552
  %554 = load i64, ptr %553, align 8, !tbaa !9
  %555 = load ptr, ptr %17, align 8, !tbaa !5
  %556 = load i64, ptr %23, align 8, !tbaa !9
  %557 = getelementptr inbounds i64, ptr %555, i64 %556
  %558 = load i64, ptr %557, align 8, !tbaa !9
  %559 = icmp slt i64 %554, %558
  br i1 %559, label %560, label %564

560:                                              ; preds = %550
  %561 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 1
  %562 = load i64, ptr %561, align 8, !tbaa !9
  %563 = add nsw i64 %562, 1
  store i64 %563, ptr %561, align 8, !tbaa !9
  br label %564

564:                                              ; preds = %560, %550, %547
  %565 = load i64, ptr %24, align 8, !tbaa !9
  %566 = icmp ne i64 %565, -1
  br i1 %566, label %567, label %586

567:                                              ; preds = %564
  %568 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %569 = load ptr, ptr %568, align 8, !tbaa !5
  %570 = load i64, ptr %24, align 8, !tbaa !9
  %571 = getelementptr inbounds i64, ptr %569, i64 %570
  %572 = load i64, ptr %571, align 8, !tbaa !9
  %573 = load i64, ptr %31, align 8, !tbaa !9
  %574 = icmp slt i64 %572, %573
  br i1 %574, label %575, label %586

575:                                              ; preds = %567
  %576 = load ptr, ptr %18, align 8, !tbaa !5
  %577 = load i64, ptr %23, align 8, !tbaa !9
  %578 = getelementptr inbounds i64, ptr %576, i64 %577
  %579 = load i64, ptr %578, align 8, !tbaa !9
  %580 = load ptr, ptr %17, align 8, !tbaa !5
  %581 = load i64, ptr %23, align 8, !tbaa !9
  %582 = getelementptr inbounds i64, ptr %580, i64 %581
  %583 = load i64, ptr %582, align 8, !tbaa !9
  %584 = icmp sgt i64 %579, %583
  br i1 %584, label %585, label %586

585:                                              ; preds = %575
  store i64 -1, ptr %24, align 8, !tbaa !9
  br label %586

586:                                              ; preds = %585, %575, %567, %564
  %587 = load i64, ptr %24, align 8, !tbaa !9
  %588 = icmp ne i64 %587, -1
  br i1 %588, label %589, label %607

589:                                              ; preds = %586
  %590 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %591 = load ptr, ptr %590, align 8, !tbaa !5
  %592 = load i64, ptr %24, align 8, !tbaa !9
  %593 = getelementptr inbounds i64, ptr %591, i64 %592
  %594 = load i64, ptr %593, align 8, !tbaa !9
  %595 = load i64, ptr %31, align 8, !tbaa !9
  %596 = icmp slt i64 %594, %595
  br i1 %596, label %597, label %607

597:                                              ; preds = %589
  %598 = call i32 @rand() #5
  %599 = sitofp i32 %598 to double
  %600 = fmul double 0x3E18000000000000, %599
  %601 = fptosi double %600 to i32
  %602 = icmp eq i32 %601, 0
  br i1 %602, label %603, label %607

603:                                              ; preds = %597
  %604 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 3
  %605 = load i64, ptr %604, align 8, !tbaa !9
  %606 = add nsw i64 %605, 1
  store i64 %606, ptr %604, align 8, !tbaa !9
  store i64 -1, ptr %24, align 8, !tbaa !9
  br label %607

607:                                              ; preds = %603, %597, %589, %586
  %608 = load i64, ptr %24, align 8, !tbaa !9
  %609 = icmp ne i64 %608, -1
  br i1 %609, label %610, label %630

610:                                              ; preds = %607
  %611 = load i64, ptr %31, align 8, !tbaa !9
  %612 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %613 = load ptr, ptr %612, align 8, !tbaa !5
  %614 = load i64, ptr %24, align 8, !tbaa !9
  %615 = getelementptr inbounds i64, ptr %613, i64 %614
  %616 = load i64, ptr %615, align 8, !tbaa !9
  %617 = sub nsw i64 %611, %616
  %618 = sitofp i64 %617 to double
  %619 = load i64, ptr %35, align 8, !tbaa !9
  %620 = sitofp i64 %619 to double
  %621 = load i64, ptr %28, align 8, !tbaa !9
  %622 = sitofp i64 %621 to double
  %623 = call double @llvm.fmuladd.f64(double 7.000000e-02, double %622, double 9.000000e-01)
  %624 = fmul double %620, %623
  %625 = fcmp ogt double %618, %624
  br i1 %625, label %626, label %630

626:                                              ; preds = %610
  %627 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 4
  %628 = load i64, ptr %627, align 16, !tbaa !9
  %629 = add nsw i64 %628, 1
  store i64 %629, ptr %627, align 16, !tbaa !9
  store i64 -1, ptr %24, align 8, !tbaa !9
  br label %630

630:                                              ; preds = %626, %610, %607
  br label %789

631:                                              ; preds = %394
  store i64 -1, ptr %24, align 8, !tbaa !9
  store i64 0, ptr %21, align 8, !tbaa !9
  br label %632

632:                                              ; preds = %749, %631
  %633 = load i64, ptr %21, align 8, !tbaa !9
  %634 = load i64, ptr %27, align 8, !tbaa !9
  %635 = icmp slt i64 %633, %634
  br i1 %635, label %636, label %752

636:                                              ; preds = %632
  %637 = load ptr, ptr %45, align 8, !tbaa !5
  %638 = load i64, ptr %21, align 8, !tbaa !9
  %639 = getelementptr inbounds i64, ptr %637, i64 %638
  %640 = load i64, ptr %639, align 8, !tbaa !9
  %641 = load i64, ptr %23, align 8, !tbaa !9
  %642 = icmp eq i64 %640, %641
  br i1 %642, label %658, label %643

643:                                              ; preds = %636
  %644 = load ptr, ptr %42, align 8, !tbaa !5
  %645 = load ptr, ptr %45, align 8, !tbaa !5
  %646 = load i64, ptr %21, align 8, !tbaa !9
  %647 = getelementptr inbounds i64, ptr %645, i64 %646
  %648 = load i64, ptr %647, align 8, !tbaa !9
  %649 = getelementptr inbounds i64, ptr %644, i64 %648
  %650 = load i64, ptr %649, align 8, !tbaa !9
  %651 = load ptr, ptr %39, align 8, !tbaa !5
  %652 = load i64, ptr %19, align 8, !tbaa !9
  %653 = getelementptr inbounds i64, ptr %651, i64 %652
  %654 = load i64, ptr %653, align 8, !tbaa !9
  %655 = add nsw i64 %650, %654
  %656 = load i64, ptr %32, align 8, !tbaa !9
  %657 = icmp sgt i64 %655, %656
  br i1 %657, label %658, label %659

658:                                              ; preds = %643, %636
  br label %749

659:                                              ; preds = %643
  %660 = load ptr, ptr %18, align 8, !tbaa !5
  %661 = load ptr, ptr %45, align 8, !tbaa !5
  %662 = load i64, ptr %21, align 8, !tbaa !9
  %663 = getelementptr inbounds i64, ptr %661, i64 %662
  %664 = load i64, ptr %663, align 8, !tbaa !9
  %665 = getelementptr inbounds i64, ptr %660, i64 %664
  %666 = load i64, ptr %665, align 8, !tbaa !9
  %667 = load ptr, ptr %17, align 8, !tbaa !5
  %668 = load ptr, ptr %45, align 8, !tbaa !5
  %669 = load i64, ptr %21, align 8, !tbaa !9
  %670 = getelementptr inbounds i64, ptr %668, i64 %669
  %671 = load i64, ptr %670, align 8, !tbaa !9
  %672 = getelementptr inbounds i64, ptr %667, i64 %671
  %673 = load i64, ptr %672, align 8, !tbaa !9
  %674 = icmp slt i64 %666, %673
  br i1 %674, label %675, label %676

675:                                              ; preds = %659
  br label %749

676:                                              ; preds = %659
  %677 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 0
  %678 = load ptr, ptr %677, align 16, !tbaa !5
  %679 = load i64, ptr %21, align 8, !tbaa !9
  %680 = getelementptr inbounds i64, ptr %678, i64 %679
  %681 = load i64, ptr %680, align 8, !tbaa !9
  %682 = icmp sgt i64 %681, 0
  br i1 %682, label %683, label %695

683:                                              ; preds = %676
  %684 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 0
  %685 = load ptr, ptr %684, align 16, !tbaa !5
  %686 = load ptr, ptr %45, align 8, !tbaa !5
  %687 = load i64, ptr %21, align 8, !tbaa !9
  %688 = getelementptr inbounds i64, ptr %686, i64 %687
  %689 = load i64, ptr %688, align 8, !tbaa !9
  %690 = getelementptr inbounds i64, ptr %685, i64 %689
  %691 = load i64, ptr %690, align 8, !tbaa !9
  %692 = load i64, ptr %33, align 8, !tbaa !9
  %693 = icmp sgt i64 %691, %692
  br i1 %693, label %694, label %695

694:                                              ; preds = %683
  br label %749

695:                                              ; preds = %683, %676
  %696 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 1
  %697 = load ptr, ptr %696, align 8, !tbaa !5
  %698 = load i64, ptr %21, align 8, !tbaa !9
  %699 = getelementptr inbounds i64, ptr %697, i64 %698
  %700 = load i64, ptr %699, align 8, !tbaa !9
  %701 = icmp sgt i64 %700, 0
  br i1 %701, label %702, label %714

702:                                              ; preds = %695
  %703 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 1
  %704 = load ptr, ptr %703, align 8, !tbaa !5
  %705 = load ptr, ptr %45, align 8, !tbaa !5
  %706 = load i64, ptr %21, align 8, !tbaa !9
  %707 = getelementptr inbounds i64, ptr %705, i64 %706
  %708 = load i64, ptr %707, align 8, !tbaa !9
  %709 = getelementptr inbounds i64, ptr %704, i64 %708
  %710 = load i64, ptr %709, align 8, !tbaa !9
  %711 = load i64, ptr %33, align 8, !tbaa !9
  %712 = icmp sgt i64 %710, %711
  br i1 %712, label %713, label %714

713:                                              ; preds = %702
  br label %749

714:                                              ; preds = %702, %695
  %715 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 0
  %716 = load ptr, ptr %715, align 16, !tbaa !5
  %717 = load i64, ptr %21, align 8, !tbaa !9
  %718 = getelementptr inbounds i64, ptr %716, i64 %717
  %719 = load i64, ptr %718, align 8, !tbaa !9
  %720 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 1
  %721 = load ptr, ptr %720, align 8, !tbaa !5
  %722 = load i64, ptr %21, align 8, !tbaa !9
  %723 = getelementptr inbounds i64, ptr %721, i64 %722
  %724 = load i64, ptr %723, align 8, !tbaa !9
  %725 = mul nsw i64 %719, %724
  %726 = icmp eq i64 %725, 0
  br i1 %726, label %727, label %748

727:                                              ; preds = %714
  %728 = load i64, ptr %24, align 8, !tbaa !9
  %729 = icmp eq i64 %728, -1
  br i1 %729, label %742, label %730

730:                                              ; preds = %727
  %731 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %732 = load ptr, ptr %731, align 8, !tbaa !5
  %733 = load i64, ptr %24, align 8, !tbaa !9
  %734 = getelementptr inbounds i64, ptr %732, i64 %733
  %735 = load i64, ptr %734, align 8, !tbaa !9
  %736 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %737 = load ptr, ptr %736, align 8, !tbaa !5
  %738 = load i64, ptr %21, align 8, !tbaa !9
  %739 = getelementptr inbounds i64, ptr %737, i64 %738
  %740 = load i64, ptr %739, align 8, !tbaa !9
  %741 = icmp slt i64 %735, %740
  br i1 %741, label %742, label %744

742:                                              ; preds = %730, %727
  %743 = load i64, ptr %21, align 8, !tbaa !9
  br label %746

744:                                              ; preds = %730
  %745 = load i64, ptr %24, align 8, !tbaa !9
  br label %746

746:                                              ; preds = %744, %742
  %747 = phi i64 [ %743, %742 ], [ %745, %744 ]
  store i64 %747, ptr %24, align 8, !tbaa !9
  br label %748

748:                                              ; preds = %746, %714
  br label %749

749:                                              ; preds = %748, %713, %694, %675, %658
  %750 = load i64, ptr %21, align 8, !tbaa !9
  %751 = add nsw i64 %750, 1
  store i64 %751, ptr %21, align 8, !tbaa !9
  br label %632, !llvm.loop !25

752:                                              ; preds = %632
  %753 = load i64, ptr %24, align 8, !tbaa !9
  %754 = icmp ne i64 %753, -1
  br i1 %754, label %755, label %788

755:                                              ; preds = %752
  %756 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %757 = load ptr, ptr %756, align 8, !tbaa !5
  %758 = load i64, ptr %24, align 8, !tbaa !9
  %759 = getelementptr inbounds i64, ptr %757, i64 %758
  %760 = load i64, ptr %759, align 8, !tbaa !9
  %761 = load i64, ptr %31, align 8, !tbaa !9
  %762 = icmp slt i64 %760, %761
  br i1 %762, label %763, label %764

763:                                              ; preds = %755
  store i64 -1, ptr %24, align 8, !tbaa !9
  br label %787

764:                                              ; preds = %755
  %765 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %766 = load ptr, ptr %765, align 8, !tbaa !5
  %767 = load i64, ptr %24, align 8, !tbaa !9
  %768 = getelementptr inbounds i64, ptr %766, i64 %767
  %769 = load i64, ptr %768, align 8, !tbaa !9
  %770 = load i64, ptr %31, align 8, !tbaa !9
  %771 = icmp eq i64 %769, %770
  br i1 %771, label %772, label %786

772:                                              ; preds = %764
  %773 = load ptr, ptr %15, align 8, !tbaa !5
  %774 = load i64, ptr %23, align 8, !tbaa !9
  %775 = getelementptr inbounds i64, ptr %773, i64 %774
  %776 = load i64, ptr %775, align 8, !tbaa !9
  %777 = load ptr, ptr %15, align 8, !tbaa !5
  %778 = load ptr, ptr %45, align 8, !tbaa !5
  %779 = load i64, ptr %24, align 8, !tbaa !9
  %780 = getelementptr inbounds i64, ptr %778, i64 %779
  %781 = load i64, ptr %780, align 8, !tbaa !9
  %782 = getelementptr inbounds i64, ptr %777, i64 %781
  %783 = load i64, ptr %782, align 8, !tbaa !9
  %784 = icmp slt i64 %776, %783
  br i1 %784, label %785, label %786

785:                                              ; preds = %772
  store i64 -1, ptr %24, align 8, !tbaa !9
  br label %786

786:                                              ; preds = %785, %772, %764
  br label %787

787:                                              ; preds = %786, %763
  br label %788

788:                                              ; preds = %787, %752
  br label %789

789:                                              ; preds = %788, %630
  %790 = load i64, ptr %24, align 8, !tbaa !9
  %791 = icmp ne i64 %790, -1
  br i1 %791, label %792, label %1051

792:                                              ; preds = %789
  %793 = load ptr, ptr %14, align 8, !tbaa !5
  %794 = load i64, ptr %19, align 8, !tbaa !9
  %795 = getelementptr inbounds i64, ptr %793, i64 %794
  %796 = load i64, ptr %795, align 8, !tbaa !9
  %797 = icmp eq i64 %796, 2
  br i1 %797, label %798, label %836

798:                                              ; preds = %792
  %799 = load ptr, ptr %17, align 8, !tbaa !5
  %800 = load i64, ptr %23, align 8, !tbaa !9
  %801 = getelementptr inbounds i64, ptr %799, i64 %800
  %802 = load i64, ptr %801, align 8, !tbaa !9
  %803 = sitofp i64 %802 to double
  %804 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 2
  %805 = load ptr, ptr %804, align 16, !tbaa !5
  %806 = load i64, ptr %23, align 8, !tbaa !9
  %807 = getelementptr inbounds float, ptr %805, i64 %806
  %808 = load float, ptr %807, align 4, !tbaa !20
  %809 = fpext float %808 to double
  %810 = call double @pow(double noundef %803, double noundef %809) #5
  %811 = load ptr, ptr %17, align 8, !tbaa !5
  %812 = load i64, ptr %23, align 8, !tbaa !9
  %813 = getelementptr inbounds i64, ptr %811, i64 %812
  %814 = load i64, ptr %813, align 8, !tbaa !9
  %815 = load ptr, ptr %39, align 8, !tbaa !5
  %816 = load i64, ptr %19, align 8, !tbaa !9
  %817 = getelementptr inbounds i64, ptr %815, i64 %816
  %818 = load i64, ptr %817, align 8, !tbaa !9
  %819 = sub nsw i64 %814, %818
  %820 = sitofp i64 %819 to double
  %821 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 2
  %822 = load ptr, ptr %821, align 16, !tbaa !5
  %823 = load i64, ptr %23, align 8, !tbaa !9
  %824 = getelementptr inbounds float, ptr %822, i64 %823
  %825 = load float, ptr %824, align 4, !tbaa !20
  %826 = fpext float %825 to double
  %827 = call double @pow(double noundef %820, double noundef %826) #5
  %828 = fsub double %810, %827
  %829 = load ptr, ptr %15, align 8, !tbaa !5
  %830 = load i64, ptr %23, align 8, !tbaa !9
  %831 = getelementptr inbounds i64, ptr %829, i64 %830
  %832 = load i64, ptr %831, align 8, !tbaa !9
  %833 = sitofp i64 %832 to double
  %834 = fsub double %833, %828
  %835 = fptosi double %834 to i64
  store i64 %835, ptr %831, align 8, !tbaa !9
  br label %892

836:                                              ; preds = %792
  %837 = load ptr, ptr %14, align 8, !tbaa !5
  %838 = load i64, ptr %19, align 8, !tbaa !9
  %839 = getelementptr inbounds i64, ptr %837, i64 %838
  %840 = load i64, ptr %839, align 8, !tbaa !9
  %841 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 %840
  %842 = load ptr, ptr %841, align 8, !tbaa !5
  %843 = load i64, ptr %23, align 8, !tbaa !9
  %844 = getelementptr inbounds i64, ptr %842, i64 %843
  %845 = load i64, ptr %844, align 8, !tbaa !9
  %846 = sitofp i64 %845 to double
  %847 = load ptr, ptr %14, align 8, !tbaa !5
  %848 = load i64, ptr %19, align 8, !tbaa !9
  %849 = getelementptr inbounds i64, ptr %847, i64 %848
  %850 = load i64, ptr %849, align 8, !tbaa !9
  %851 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 %850
  %852 = load ptr, ptr %851, align 8, !tbaa !5
  %853 = load i64, ptr %23, align 8, !tbaa !9
  %854 = getelementptr inbounds float, ptr %852, i64 %853
  %855 = load float, ptr %854, align 4, !tbaa !20
  %856 = fpext float %855 to double
  %857 = call double @pow(double noundef %846, double noundef %856) #5
  %858 = load ptr, ptr %14, align 8, !tbaa !5
  %859 = load i64, ptr %19, align 8, !tbaa !9
  %860 = getelementptr inbounds i64, ptr %858, i64 %859
  %861 = load i64, ptr %860, align 8, !tbaa !9
  %862 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 %861
  %863 = load ptr, ptr %862, align 8, !tbaa !5
  %864 = load i64, ptr %23, align 8, !tbaa !9
  %865 = getelementptr inbounds i64, ptr %863, i64 %864
  %866 = load i64, ptr %865, align 8, !tbaa !9
  %867 = load ptr, ptr %39, align 8, !tbaa !5
  %868 = load i64, ptr %19, align 8, !tbaa !9
  %869 = getelementptr inbounds i64, ptr %867, i64 %868
  %870 = load i64, ptr %869, align 8, !tbaa !9
  %871 = sub nsw i64 %866, %870
  %872 = sitofp i64 %871 to double
  %873 = load ptr, ptr %14, align 8, !tbaa !5
  %874 = load i64, ptr %19, align 8, !tbaa !9
  %875 = getelementptr inbounds i64, ptr %873, i64 %874
  %876 = load i64, ptr %875, align 8, !tbaa !9
  %877 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 %876
  %878 = load ptr, ptr %877, align 8, !tbaa !5
  %879 = load i64, ptr %23, align 8, !tbaa !9
  %880 = getelementptr inbounds float, ptr %878, i64 %879
  %881 = load float, ptr %880, align 4, !tbaa !20
  %882 = fpext float %881 to double
  %883 = call double @pow(double noundef %872, double noundef %882) #5
  %884 = fsub double %857, %883
  %885 = load ptr, ptr %15, align 8, !tbaa !5
  %886 = load i64, ptr %23, align 8, !tbaa !9
  %887 = getelementptr inbounds i64, ptr %885, i64 %886
  %888 = load i64, ptr %887, align 8, !tbaa !9
  %889 = sitofp i64 %888 to double
  %890 = fsub double %889, %884
  %891 = fptosi double %890 to i64
  store i64 %891, ptr %887, align 8, !tbaa !9
  br label %892

892:                                              ; preds = %836, %798
  %893 = load ptr, ptr %14, align 8, !tbaa !5
  %894 = load i64, ptr %19, align 8, !tbaa !9
  %895 = getelementptr inbounds i64, ptr %893, i64 %894
  %896 = load i64, ptr %895, align 8, !tbaa !9
  %897 = icmp eq i64 %896, 2
  br i1 %897, label %898, label %908

898:                                              ; preds = %892
  %899 = load ptr, ptr %39, align 8, !tbaa !5
  %900 = load i64, ptr %19, align 8, !tbaa !9
  %901 = getelementptr inbounds i64, ptr %899, i64 %900
  %902 = load i64, ptr %901, align 8, !tbaa !9
  %903 = load ptr, ptr %17, align 8, !tbaa !5
  %904 = load i64, ptr %23, align 8, !tbaa !9
  %905 = getelementptr inbounds i64, ptr %903, i64 %904
  %906 = load i64, ptr %905, align 8, !tbaa !9
  %907 = sub nsw i64 %906, %902
  store i64 %907, ptr %905, align 8, !tbaa !9
  br label %908

908:                                              ; preds = %898, %892
  %909 = load ptr, ptr %39, align 8, !tbaa !5
  %910 = load i64, ptr %19, align 8, !tbaa !9
  %911 = getelementptr inbounds i64, ptr %909, i64 %910
  %912 = load i64, ptr %911, align 8, !tbaa !9
  %913 = load ptr, ptr %42, align 8, !tbaa !5
  %914 = load i64, ptr %23, align 8, !tbaa !9
  %915 = getelementptr inbounds i64, ptr %913, i64 %914
  %916 = load i64, ptr %915, align 8, !tbaa !9
  %917 = sub nsw i64 %916, %912
  store i64 %917, ptr %915, align 8, !tbaa !9
  %918 = load ptr, ptr %39, align 8, !tbaa !5
  %919 = load i64, ptr %19, align 8, !tbaa !9
  %920 = getelementptr inbounds i64, ptr %918, i64 %919
  %921 = load i64, ptr %920, align 8, !tbaa !9
  %922 = load ptr, ptr %14, align 8, !tbaa !5
  %923 = load i64, ptr %19, align 8, !tbaa !9
  %924 = getelementptr inbounds i64, ptr %922, i64 %923
  %925 = load i64, ptr %924, align 8, !tbaa !9
  %926 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 %925
  %927 = load ptr, ptr %926, align 8, !tbaa !5
  %928 = load i64, ptr %23, align 8, !tbaa !9
  %929 = getelementptr inbounds i64, ptr %927, i64 %928
  %930 = load i64, ptr %929, align 8, !tbaa !9
  %931 = sub nsw i64 %930, %921
  store i64 %931, ptr %929, align 8, !tbaa !9
  %932 = load ptr, ptr %45, align 8, !tbaa !5
  %933 = load i64, ptr %24, align 8, !tbaa !9
  %934 = getelementptr inbounds i64, ptr %932, i64 %933
  %935 = load i64, ptr %934, align 8, !tbaa !9
  %936 = load ptr, ptr %13, align 8, !tbaa !5
  %937 = load i64, ptr %19, align 8, !tbaa !9
  %938 = getelementptr inbounds i64, ptr %936, i64 %937
  store i64 %935, ptr %938, align 8, !tbaa !9
  %939 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 0
  %940 = load ptr, ptr %939, align 16, !tbaa !5
  %941 = load i64, ptr %24, align 8, !tbaa !9
  %942 = getelementptr inbounds i64, ptr %940, i64 %941
  %943 = load i64, ptr %942, align 8, !tbaa !9
  %944 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 1
  %945 = load ptr, ptr %944, align 8, !tbaa !5
  %946 = load i64, ptr %24, align 8, !tbaa !9
  %947 = getelementptr inbounds i64, ptr %945, i64 %946
  %948 = load i64, ptr %947, align 8, !tbaa !9
  %949 = icmp sgt i64 %943, %948
  %950 = zext i1 %949 to i64
  %951 = select i1 %949, i32 0, i32 1
  %952 = sext i32 %951 to i64
  %953 = load ptr, ptr %14, align 8, !tbaa !5
  %954 = load i64, ptr %19, align 8, !tbaa !9
  %955 = getelementptr inbounds i64, ptr %953, i64 %954
  store i64 %952, ptr %955, align 8, !tbaa !9
  %956 = load ptr, ptr %14, align 8, !tbaa !5
  %957 = load i64, ptr %19, align 8, !tbaa !9
  %958 = getelementptr inbounds i64, ptr %956, i64 %957
  %959 = load i64, ptr %958, align 8, !tbaa !9
  %960 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 %959
  %961 = load ptr, ptr %960, align 8, !tbaa !5
  %962 = load i64, ptr %24, align 8, !tbaa !9
  %963 = getelementptr inbounds i64, ptr %961, i64 %962
  %964 = load i64, ptr %963, align 8, !tbaa !9
  %965 = load ptr, ptr %39, align 8, !tbaa !5
  %966 = load i64, ptr %19, align 8, !tbaa !9
  %967 = getelementptr inbounds i64, ptr %965, i64 %966
  %968 = load i64, ptr %967, align 8, !tbaa !9
  %969 = add nsw i64 %964, %968
  %970 = sitofp i64 %969 to double
  %971 = load ptr, ptr %14, align 8, !tbaa !5
  %972 = load i64, ptr %19, align 8, !tbaa !9
  %973 = getelementptr inbounds i64, ptr %971, i64 %972
  %974 = load i64, ptr %973, align 8, !tbaa !9
  %975 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 %974
  %976 = load ptr, ptr %975, align 8, !tbaa !5
  %977 = load i64, ptr %24, align 8, !tbaa !9
  %978 = getelementptr inbounds float, ptr %976, i64 %977
  %979 = load float, ptr %978, align 4, !tbaa !20
  %980 = fpext float %979 to double
  %981 = call double @pow(double noundef %970, double noundef %980) #5
  %982 = load ptr, ptr %14, align 8, !tbaa !5
  %983 = load i64, ptr %19, align 8, !tbaa !9
  %984 = getelementptr inbounds i64, ptr %982, i64 %983
  %985 = load i64, ptr %984, align 8, !tbaa !9
  %986 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 %985
  %987 = load ptr, ptr %986, align 8, !tbaa !5
  %988 = load i64, ptr %24, align 8, !tbaa !9
  %989 = getelementptr inbounds i64, ptr %987, i64 %988
  %990 = load i64, ptr %989, align 8, !tbaa !9
  %991 = sitofp i64 %990 to double
  %992 = load ptr, ptr %14, align 8, !tbaa !5
  %993 = load i64, ptr %19, align 8, !tbaa !9
  %994 = getelementptr inbounds i64, ptr %992, i64 %993
  %995 = load i64, ptr %994, align 8, !tbaa !9
  %996 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 %995
  %997 = load ptr, ptr %996, align 8, !tbaa !5
  %998 = load i64, ptr %24, align 8, !tbaa !9
  %999 = getelementptr inbounds float, ptr %997, i64 %998
  %1000 = load float, ptr %999, align 4, !tbaa !20
  %1001 = fpext float %1000 to double
  %1002 = call double @pow(double noundef %991, double noundef %1001) #5
  %1003 = fsub double %981, %1002
  %1004 = load ptr, ptr %15, align 8, !tbaa !5
  %1005 = load i64, ptr %24, align 8, !tbaa !9
  %1006 = getelementptr inbounds i64, ptr %1004, i64 %1005
  %1007 = load i64, ptr %1006, align 8, !tbaa !9
  %1008 = sitofp i64 %1007 to double
  %1009 = fadd double %1008, %1003
  %1010 = fptosi double %1009 to i64
  store i64 %1010, ptr %1006, align 8, !tbaa !9
  %1011 = load ptr, ptr %39, align 8, !tbaa !5
  %1012 = load i64, ptr %19, align 8, !tbaa !9
  %1013 = getelementptr inbounds i64, ptr %1011, i64 %1012
  %1014 = load i64, ptr %1013, align 8, !tbaa !9
  %1015 = load ptr, ptr %42, align 8, !tbaa !5
  %1016 = load ptr, ptr %45, align 8, !tbaa !5
  %1017 = load i64, ptr %24, align 8, !tbaa !9
  %1018 = getelementptr inbounds i64, ptr %1016, i64 %1017
  %1019 = load i64, ptr %1018, align 8, !tbaa !9
  %1020 = getelementptr inbounds i64, ptr %1015, i64 %1019
  %1021 = load i64, ptr %1020, align 8, !tbaa !9
  %1022 = add nsw i64 %1021, %1014
  store i64 %1022, ptr %1020, align 8, !tbaa !9
  %1023 = load ptr, ptr %39, align 8, !tbaa !5
  %1024 = load i64, ptr %19, align 8, !tbaa !9
  %1025 = getelementptr inbounds i64, ptr %1023, i64 %1024
  %1026 = load i64, ptr %1025, align 8, !tbaa !9
  %1027 = load ptr, ptr %14, align 8, !tbaa !5
  %1028 = load i64, ptr %19, align 8, !tbaa !9
  %1029 = getelementptr inbounds i64, ptr %1027, i64 %1028
  %1030 = load i64, ptr %1029, align 8, !tbaa !9
  %1031 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 %1030
  %1032 = load ptr, ptr %1031, align 8, !tbaa !5
  %1033 = load ptr, ptr %45, align 8, !tbaa !5
  %1034 = load i64, ptr %24, align 8, !tbaa !9
  %1035 = getelementptr inbounds i64, ptr %1033, i64 %1034
  %1036 = load i64, ptr %1035, align 8, !tbaa !9
  %1037 = getelementptr inbounds i64, ptr %1032, i64 %1036
  %1038 = load i64, ptr %1037, align 8, !tbaa !9
  %1039 = add nsw i64 %1038, %1026
  store i64 %1039, ptr %1037, align 8, !tbaa !9
  %1040 = load i64, ptr %26, align 8, !tbaa !9
  %1041 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %1042 = load ptr, ptr %1041, align 8, !tbaa !5
  %1043 = load i64, ptr %24, align 8, !tbaa !9
  %1044 = getelementptr inbounds i64, ptr %1042, i64 %1043
  %1045 = load i64, ptr %1044, align 8, !tbaa !9
  %1046 = load i64, ptr %31, align 8, !tbaa !9
  %1047 = sub nsw i64 %1045, %1046
  %1048 = sub nsw i64 %1040, %1047
  store i64 %1048, ptr %26, align 8, !tbaa !9
  %1049 = load i64, ptr %34, align 8, !tbaa !9
  %1050 = add nsw i64 %1049, 1
  store i64 %1050, ptr %34, align 8, !tbaa !9
  br label %1051

1051:                                             ; preds = %908, %789
  %1052 = load ptr, ptr %37, align 8, !tbaa !5
  %1053 = load i64, ptr %19, align 8, !tbaa !9
  %1054 = getelementptr inbounds i64, ptr %1052, i64 %1053
  %1055 = load i64, ptr %1054, align 8, !tbaa !9
  store i64 %1055, ptr %21, align 8, !tbaa !9
  br label %1056

1056:                                             ; preds = %1074, %1051
  %1057 = load i64, ptr %21, align 8, !tbaa !9
  %1058 = load ptr, ptr %37, align 8, !tbaa !5
  %1059 = load i64, ptr %19, align 8, !tbaa !9
  %1060 = add nsw i64 %1059, 1
  %1061 = getelementptr inbounds i64, ptr %1058, i64 %1060
  %1062 = load i64, ptr %1061, align 8, !tbaa !9
  %1063 = icmp slt i64 %1057, %1062
  br i1 %1063, label %1064, label %1077

1064:                                             ; preds = %1056
  %1065 = load ptr, ptr %44, align 8, !tbaa !5
  %1066 = load ptr, ptr %13, align 8, !tbaa !5
  %1067 = load ptr, ptr %38, align 8, !tbaa !5
  %1068 = load i64, ptr %21, align 8, !tbaa !9
  %1069 = getelementptr inbounds i64, ptr %1067, i64 %1068
  %1070 = load i64, ptr %1069, align 8, !tbaa !9
  %1071 = getelementptr inbounds i64, ptr %1066, i64 %1070
  %1072 = load i64, ptr %1071, align 8, !tbaa !9
  %1073 = getelementptr inbounds i64, ptr %1065, i64 %1072
  store i64 -1, ptr %1073, align 8, !tbaa !9
  br label %1074

1074:                                             ; preds = %1064
  %1075 = load i64, ptr %21, align 8, !tbaa !9
  %1076 = add nsw i64 %1075, 1
  store i64 %1076, ptr %21, align 8, !tbaa !9
  br label %1056, !llvm.loop !26

1077:                                             ; preds = %1056
  br label %1078

1078:                                             ; preds = %1077
  %1079 = load i64, ptr %20, align 8, !tbaa !9
  %1080 = add nsw i64 %1079, 1
  store i64 %1080, ptr %20, align 8, !tbaa !9
  br label %283, !llvm.loop !27

1081:                                             ; preds = %283
  %1082 = load i64, ptr %28, align 8, !tbaa !9
  %1083 = load i64, ptr %34, align 8, !tbaa !9
  %1084 = load i64, ptr %26, align 8, !tbaa !9
  %1085 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 0
  %1086 = load i64, ptr %1085, align 16, !tbaa !9
  %1087 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 1
  %1088 = load i64, ptr %1087, align 8, !tbaa !9
  %1089 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 2
  %1090 = load i64, ptr %1089, align 16, !tbaa !9
  %1091 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 3
  %1092 = load i64, ptr %1091, align 8, !tbaa !9
  %1093 = getelementptr inbounds [5 x i64], ptr %36, i64 0, i64 4
  %1094 = load i64, ptr %1093, align 16, !tbaa !9
  %1095 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.41, i64 noundef %1082, i64 noundef %1083, i64 noundef %1084, i64 noundef %1086, i64 noundef %1088, i64 noundef %1090, i64 noundef %1092, i64 noundef %1094)
  %1096 = load i64, ptr %34, align 8, !tbaa !9
  %1097 = icmp eq i64 %1096, 0
  br i1 %1097, label %1098, label %1099

1098:                                             ; preds = %1081
  br label %1103

1099:                                             ; preds = %1081
  br label %1100

1100:                                             ; preds = %1099
  %1101 = load i64, ptr %28, align 8, !tbaa !9
  %1102 = add nsw i64 %1101, 1
  store i64 %1102, ptr %28, align 8, !tbaa !9
  br label %272, !llvm.loop !28

1103:                                             ; preds = %1098, %272
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %1104

1104:                                             ; preds = %1123, %1103
  %1105 = load i64, ptr %19, align 8, !tbaa !9
  %1106 = load i64, ptr %12, align 8, !tbaa !9
  %1107 = icmp slt i64 %1105, %1106
  br i1 %1107, label %1108, label %1126

1108:                                             ; preds = %1104
  %1109 = load i64, ptr %19, align 8, !tbaa !9
  %1110 = load ptr, ptr %42, align 8, !tbaa !5
  %1111 = load i64, ptr %19, align 8, !tbaa !9
  %1112 = getelementptr inbounds i64, ptr %1110, i64 %1111
  %1113 = load i64, ptr %1112, align 8, !tbaa !9
  %1114 = load ptr, ptr %17, align 8, !tbaa !5
  %1115 = load i64, ptr %19, align 8, !tbaa !9
  %1116 = getelementptr inbounds i64, ptr %1114, i64 %1115
  %1117 = load i64, ptr %1116, align 8, !tbaa !9
  %1118 = load ptr, ptr %15, align 8, !tbaa !5
  %1119 = load i64, ptr %19, align 8, !tbaa !9
  %1120 = getelementptr inbounds i64, ptr %1118, i64 %1119
  %1121 = load i64, ptr %1120, align 8, !tbaa !9
  %1122 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.42, i64 noundef %1109, i64 noundef %1113, i64 noundef %1117, i64 noundef %1121)
  br label %1123

1123:                                             ; preds = %1108
  %1124 = load i64, ptr %19, align 8, !tbaa !9
  %1125 = add nsw i64 %1124, 1
  store i64 %1125, ptr %19, align 8, !tbaa !9
  br label %1104, !llvm.loop !29

1126:                                             ; preds = %1104
  %1127 = load ptr, ptr %42, align 8, !tbaa !5
  %1128 = getelementptr inbounds i64, ptr %1127, i64 10
  %1129 = load i64, ptr %1128, align 8, !tbaa !9
  %1130 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 0
  %1131 = load ptr, ptr %1130, align 16, !tbaa !5
  %1132 = getelementptr inbounds i64, ptr %1131, i64 10
  %1133 = load i64, ptr %1132, align 8, !tbaa !9
  %1134 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 1
  %1135 = load ptr, ptr %1134, align 8, !tbaa !5
  %1136 = getelementptr inbounds i64, ptr %1135, i64 10
  %1137 = load i64, ptr %1136, align 8, !tbaa !9
  %1138 = load ptr, ptr %42, align 8, !tbaa !5
  %1139 = getelementptr inbounds i64, ptr %1138, i64 15
  %1140 = load i64, ptr %1139, align 8, !tbaa !9
  %1141 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 0
  %1142 = load ptr, ptr %1141, align 16, !tbaa !5
  %1143 = getelementptr inbounds i64, ptr %1142, i64 15
  %1144 = load i64, ptr %1143, align 8, !tbaa !9
  %1145 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 1
  %1146 = load ptr, ptr %1145, align 8, !tbaa !5
  %1147 = getelementptr inbounds i64, ptr %1146, i64 15
  %1148 = load i64, ptr %1147, align 8, !tbaa !9
  %1149 = load i64, ptr %32, align 8, !tbaa !9
  %1150 = load i64, ptr %33, align 8, !tbaa !9
  %1151 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.43, i64 noundef %1129, i64 noundef %1133, i64 noundef %1137, i64 noundef %1140, i64 noundef %1144, i64 noundef %1148, i64 noundef %1149, i64 noundef %1150)
  %1152 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 0
  %1153 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 1
  %1154 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 2
  %1155 = getelementptr inbounds [4 x ptr], ptr %43, i64 0, i64 3
  %1156 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 0
  %1157 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 1
  %1158 = getelementptr inbounds [3 x ptr], ptr %46, i64 0, i64 2
  %1159 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 0
  %1160 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 1
  %1161 = getelementptr inbounds [3 x ptr], ptr %47, i64 0, i64 2
  call void (ptr, ...) @gk_free(ptr noundef %42, ptr noundef %1152, ptr noundef %1153, ptr noundef %1154, ptr noundef %1155, ptr noundef %44, ptr noundef %45, ptr noundef %41, ptr noundef %1156, ptr noundef %1157, ptr noundef %1158, ptr noundef %1159, ptr noundef %1160, ptr noundef %1161, ptr noundef null)
  call void @llvm.lifetime.end.p0(i64 24, ptr %47) #5
  call void @llvm.lifetime.end.p0(i64 24, ptr %46) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 40, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, 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
  ret void
}

declare void @gk_free(ptr noundef, ...) #1

declare ptr @gk_fmalloc(i64 noundef, ptr noundef) #1

; Function Attrs: nounwind
declare double @log(double noundef) #3

declare void @libmetis__RandomPermute(i64 noundef, ptr noundef, i64 noundef) #1

; Function Attrs: nounwind
declare i32 @rand() #3

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

; Function Attrs: nounwind
declare double @pow(double noundef, double noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { 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 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !13, i64 56, !13, i64 60, !13, i64 64, !13, i64 68, !13, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !10, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !10, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!13 = !{!"int", !7, i64 0}
!14 = !{!12, !6, i64 16}
!15 = !{!12, !6, i64 24}
!16 = !{!12, !6, i64 40}
!17 = !{!12, !6, i64 48}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !7, i64 0}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}


; 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.31 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [50 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [29 x i8], align 1

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

declare i64 @libmetis__idxsum(i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

declare i64 @libmetis__ComputeCut(ptr noundef, ptr noundef) local_unnamed_addr #1

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

declare ptr @libmetis__idxsmalloc(i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #1

declare ptr @libmetis__idxmalloc(i64 noundef, ptr noundef) local_unnamed_addr #1

declare i32 @mprintf(ptr noundef, ...) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @RefineTopLevelSeparators(ptr nocapture noundef readnone %0, ptr noundef %1, i64 noundef %2, ptr noundef %3, ptr nocapture noundef %4, ptr noundef %5, ptr nocapture noundef readonly %6, ptr noundef %7, ptr nocapture noundef readonly %8) local_unnamed_addr #2 {
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca [4 x ptr], align 16
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca [3 x ptr], align 16
  %16 = alloca [3 x ptr], align 16
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #7
  %17 = load i64, ptr %1, align 8, !tbaa !5
  %.fr438 = freeze i64 %17
  %18 = getelementptr inbounds i8, ptr %1, i64 16
  %19 = load ptr, ptr %18, align 8, !tbaa !12
  %20 = getelementptr inbounds i8, ptr %1, i64 24
  %21 = load ptr, ptr %20, align 8, !tbaa !13
  %22 = getelementptr inbounds i8, ptr %1, i64 40
  %23 = load ptr, ptr %22, align 8, !tbaa !14
  %24 = getelementptr inbounds i8, ptr %1, i64 48
  %25 = load ptr, ptr %24, align 8, !tbaa !15
  %26 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef 0, ptr noundef nonnull @.str.31) #7
  store ptr %26, ptr %11, align 8, !tbaa !16
  %27 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef 0, ptr noundef nonnull @.str.32) #7
  store ptr %27, ptr %15, align 16, !tbaa !16
  %28 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef 0, ptr noundef nonnull @.str.32) #7
  %29 = getelementptr inbounds i8, ptr %15, i64 8
  store ptr %28, ptr %29, align 8, !tbaa !16
  %30 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef 0, ptr noundef nonnull @.str.32) #7
  %31 = getelementptr inbounds i8, ptr %15, i64 16
  store ptr %30, ptr %31, align 16, !tbaa !16
  %32 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef 0, ptr noundef nonnull @.str.33) #7
  store ptr %32, ptr %12, align 16, !tbaa !16
  %33 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef 0, ptr noundef nonnull @.str.33) #7
  %34 = getelementptr inbounds i8, ptr %12, i64 8
  store ptr %33, ptr %34, align 8, !tbaa !16
  %35 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef 0, ptr noundef nonnull @.str.33) #7
  %36 = getelementptr inbounds i8, ptr %12, i64 16
  store ptr %35, ptr %36, align 16, !tbaa !16
  %37 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef 0, ptr noundef nonnull @.str.33) #7
  %38 = getelementptr inbounds i8, ptr %12, i64 24
  store ptr %37, ptr %38, align 8, !tbaa !16
  %39 = tail call ptr @libmetis__idxsmalloc(i64 noundef %2, i64 noundef -1, ptr noundef nonnull @.str.34) #7
  store ptr %39, ptr %13, align 8, !tbaa !16
  %40 = tail call ptr @libmetis__idxmalloc(i64 noundef %2, ptr noundef nonnull @.str.35) #7
  store ptr %40, ptr %14, align 8, !tbaa !16
  %41 = tail call ptr @libmetis__idxmalloc(i64 noundef %.fr438, ptr noundef nonnull @.str.36) #7
  store ptr %41, ptr %10, align 8, !tbaa !16
  %42 = tail call ptr @gk_fmalloc(i64 noundef %2, ptr noundef nonnull @.str.37) #7
  store ptr %42, ptr %16, align 16, !tbaa !16
  %43 = tail call ptr @gk_fmalloc(i64 noundef %2, ptr noundef nonnull @.str.38) #7
  %44 = getelementptr inbounds i8, ptr %16, i64 8
  store ptr %43, ptr %44, align 8, !tbaa !16
  %45 = tail call ptr @gk_fmalloc(i64 noundef %2, ptr noundef nonnull @.str.39) #7
  %46 = getelementptr inbounds i8, ptr %16, i64 16
  store ptr %45, ptr %46, align 16, !tbaa !16
  %47 = tail call i64 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %3) #7
  %48 = icmp sgt i64 %.fr438, 0
  br i1 %48, label %.lr.ph, label %.preheader386

.preheader386:                                    ; preds = %.lr.ph, %9
  %49 = icmp sgt i64 %2, 0
  br i1 %49, label %.lr.ph389, label %._crit_edge

.lr.ph:                                           ; preds = %9, %.lr.ph
  %.0387 = phi i64 [ %66, %.lr.ph ], [ 0, %9 ]
  %50 = getelementptr inbounds i64, ptr %21, i64 %.0387
  %51 = load i64, ptr %50, align 8, !tbaa !17
  %52 = getelementptr inbounds i64, ptr %3, i64 %.0387
  %53 = load i64, ptr %52, align 8, !tbaa !17
  %54 = getelementptr inbounds i64, ptr %26, i64 %53
  %55 = load i64, ptr %54, align 8, !tbaa !17
  %56 = add nsw i64 %55, %51
  store i64 %56, ptr %54, align 8, !tbaa !17
  %57 = load i64, ptr %50, align 8, !tbaa !17
  %58 = getelementptr inbounds i64, ptr %4, i64 %.0387
  %59 = load i64, ptr %58, align 8, !tbaa !17
  %60 = getelementptr inbounds [3 x ptr], ptr %15, i64 0, i64 %59
  %61 = load ptr, ptr %60, align 8, !tbaa !16
  %62 = load i64, ptr %52, align 8, !tbaa !17
  %63 = getelementptr inbounds i64, ptr %61, i64 %62
  %64 = load i64, ptr %63, align 8, !tbaa !17
  %65 = add nsw i64 %64, %57
  store i64 %65, ptr %63, align 8, !tbaa !17
  %66 = add nuw nsw i64 %.0387, 1
  %exitcond.not = icmp eq i64 %66, %.fr438
  br i1 %exitcond.not, label %.preheader386, label %.lr.ph, !llvm.loop !18

.lr.ph389:                                        ; preds = %.preheader386, %.lr.ph389
  %.1388 = phi i64 [ %106, %.lr.ph389 ], [ 0, %.preheader386 ]
  %67 = shl nuw nsw i64 %.1388, 1
  %68 = getelementptr inbounds i64, ptr %6, i64 %67
  %69 = load i64, ptr %68, align 8, !tbaa !17
  %70 = sitofp i64 %69 to double
  %71 = tail call double @log(double noundef %70) #7
  %72 = getelementptr inbounds i64, ptr %27, i64 %.1388
  %73 = load i64, ptr %72, align 8, !tbaa !17
  %74 = sitofp i64 %73 to double
  %75 = tail call double @log(double noundef %74) #7
  %76 = fdiv double %71, %75
  %77 = fptrunc double %76 to float
  %78 = getelementptr inbounds float, ptr %42, i64 %.1388
  store float %77, ptr %78, align 4, !tbaa !20
  %79 = or disjoint i64 %67, 1
  %80 = getelementptr inbounds i64, ptr %6, i64 %79
  %81 = load i64, ptr %80, align 8, !tbaa !17
  %82 = sitofp i64 %81 to double
  %83 = tail call double @log(double noundef %82) #7
  %84 = getelementptr inbounds i64, ptr %28, i64 %.1388
  %85 = load i64, ptr %84, align 8, !tbaa !17
  %86 = sitofp i64 %85 to double
  %87 = tail call double @log(double noundef %86) #7
  %88 = fdiv double %83, %87
  %89 = fptrunc double %88 to float
  %90 = getelementptr inbounds float, ptr %43, i64 %.1388
  store float %89, ptr %90, align 4, !tbaa !20
  %91 = getelementptr inbounds i64, ptr %5, i64 %.1388
  %92 = load i64, ptr %91, align 8, !tbaa !17
  %93 = load i64, ptr %68, align 8, !tbaa !17
  %94 = load i64, ptr %80, align 8, !tbaa !17
  %95 = add i64 %93, %94
  %96 = sub i64 %92, %95
  %97 = sitofp i64 %96 to double
  %98 = tail call double @log(double noundef %97) #7
  %99 = getelementptr inbounds i64, ptr %7, i64 %.1388
  %100 = load i64, ptr %99, align 8, !tbaa !17
  %101 = sitofp i64 %100 to double
  %102 = tail call double @log(double noundef %101) #7
  %103 = fdiv double %98, %102
  %104 = fptrunc double %103 to float
  %105 = getelementptr inbounds float, ptr %45, i64 %.1388
  store float %104, ptr %105, align 4, !tbaa !20
  %106 = add nuw nsw i64 %.1388, 1
  %exitcond439.not = icmp eq i64 %106, %2
  br i1 %exitcond439.not, label %._crit_edge, label %.lr.ph389, !llvm.loop !22

._crit_edge:                                      ; preds = %.lr.ph389, %.preheader386
  %107 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %26, i64 noundef 1) #7
  %108 = sitofp i64 %107 to double
  %109 = fmul double %108, 1.030000e+00
  %110 = sitofp i64 %2 to double
  %111 = fdiv double %109, %110
  %112 = fptrunc double %111 to float
  %113 = fptosi float %112 to i32
  %114 = sext i32 %113 to i64
  %115 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %26, i64 noundef 1) #7
  %116 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %7, i64 noundef 1) #7
  %117 = sub nsw i64 %115, %116
  %118 = sitofp i64 %117 to double
  %119 = fmul double %118, 1.100000e+00
  %120 = fmul double %110, 2.000000e+00
  %121 = fdiv double %119, %120
  %122 = fptosi double %121 to i64
  %123 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %7, i64 noundef 1) #7
  %124 = sdiv i64 %123, %2
  %125 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %5, i64 noundef 1) #7
  %126 = sdiv i64 %125, %2
  %127 = getelementptr inbounds i64, ptr %19, i64 %.fr438
  %128 = load i64, ptr %127, align 8, !tbaa !17
  %129 = sitofp i64 %128 to double
  %130 = sitofp i64 %.fr438 to double
  %131 = fdiv double %129, %130
  %132 = fptosi double %131 to i64
  %133 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.40, i64 noundef %124, i64 noundef %126, i64 noundef %132) #7
  %134 = sitofp i64 %132 to double
  br i1 %48, label %.lr.ph421.us, label %.split

.lr.ph421.us:                                     ; preds = %._crit_edge, %._crit_edge422.us
  %.0318431.us = phi i64 [ %.2320.us, %._crit_edge422.us ], [ %47, %._crit_edge ]
  %.0323430.us = phi i64 [ %493, %._crit_edge422.us ], [ 0, %._crit_edge ]
  tail call void @libmetis__RandomPermute(i64 noundef %.fr438, ptr noundef %41, i64 noundef 1) #7
  %135 = load ptr, ptr %14, align 8
  %136 = uitofp nneg i64 %.0323430.us to double
  %137 = tail call double @llvm.fmuladd.f64(double %136, double 7.000000e-02, double 9.000000e-01)
  %138 = fmul double %137, %134
  %139 = load ptr, ptr %46, align 16
  %140 = load ptr, ptr %11, align 8
  %141 = load ptr, ptr %12, align 16
  %142 = load ptr, ptr %34, align 8
  br label %143

143:                                              ; preds = %.lr.ph421.us, %._crit_edge411.us
  %.0307419.us = phi i64 [ 0, %.lr.ph421.us ], [ %381, %._crit_edge411.us ]
  %.sroa.0.0418.us = phi i64 [ 0, %.lr.ph421.us ], [ %.sroa.0.3376.us, %._crit_edge411.us ]
  %.sroa.6.0417.us = phi i64 [ 0, %.lr.ph421.us ], [ %.sroa.6.2375.us, %._crit_edge411.us ]
  %.sroa.10.0416.us = phi i64 [ 0, %.lr.ph421.us ], [ %.sroa.10.3374.us, %._crit_edge411.us ]
  %.sroa.14.0415.us = phi i64 [ 0, %.lr.ph421.us ], [ %.sroa.14.2373.us, %._crit_edge411.us ]
  %.sroa.18.0414.us = phi i64 [ 0, %.lr.ph421.us ], [ %.sroa.18.1372.us, %._crit_edge411.us ]
  %.0316413.us = phi i64 [ 0, %.lr.ph421.us ], [ %.1317.us, %._crit_edge411.us ]
  %.1319412.us = phi i64 [ %.0318431.us, %.lr.ph421.us ], [ %.2320.us, %._crit_edge411.us ]
  %144 = getelementptr inbounds i64, ptr %41, i64 %.0307419.us
  %145 = load i64, ptr %144, align 8, !tbaa !17
  %146 = getelementptr inbounds i64, ptr %3, i64 %145
  %147 = load i64, ptr %146, align 8, !tbaa !17
  %148 = getelementptr inbounds i64, ptr %19, i64 %145
  %149 = load i64, ptr %148, align 8, !tbaa !17
  %150 = getelementptr i8, ptr %148, i64 8
  %151 = load i64, ptr %150, align 8, !tbaa !17
  %152 = icmp slt i64 %149, %151
  br i1 %152, label %.lr.ph393.us, label %._crit_edge394.us

._crit_edge394.us:                                ; preds = %454, %143
  %.0321.lcssa.us = phi i64 [ 0, %143 ], [ %.1322.us, %454 ]
  %153 = getelementptr inbounds i64, ptr %39, i64 %147
  %154 = load i64, ptr %153, align 8, !tbaa !17
  %.not.us = icmp eq i64 %154, -1
  br i1 %.not.us, label %158, label %155

155:                                              ; preds = %._crit_edge394.us
  %156 = getelementptr inbounds i64, ptr %37, i64 %154
  %157 = load i64, ptr %156, align 8, !tbaa !17
  br label %158

158:                                              ; preds = %155, %._crit_edge394.us
  %159 = phi i64 [ %157, %155 ], [ 0, %._crit_edge394.us ]
  %160 = getelementptr inbounds i64, ptr %4, i64 %145
  %161 = load i64, ptr %160, align 8, !tbaa !17
  %162 = icmp eq i64 %161, 2
  %163 = icmp sgt i64 %.0321.lcssa.us, 0
  br i1 %162, label %.preheader.us, label %.preheader385.us

._crit_edge398.us:                                ; preds = %220
  %.not336.us = icmp eq i64 %.5.us, -1
  br i1 %.not336.us, label %.thread364.us, label %164

164:                                              ; preds = %._crit_edge398.us
  %165 = getelementptr inbounds i64, ptr %37, i64 %.5.us
  %166 = load i64, ptr %165, align 8, !tbaa !17
  %167 = icmp slt i64 %166, %159
  br i1 %167, label %.thread364.us, label %168

168:                                              ; preds = %164
  %169 = icmp eq i64 %166, %159
  br i1 %169, label %170, label %245

170:                                              ; preds = %168
  %171 = getelementptr inbounds i64, ptr %5, i64 %147
  %172 = load i64, ptr %171, align 8, !tbaa !17
  %173 = getelementptr inbounds i64, ptr %135, i64 %.5.us
  %174 = load i64, ptr %173, align 8, !tbaa !17
  %175 = getelementptr inbounds i64, ptr %5, i64 %174
  %176 = load i64, ptr %175, align 8, !tbaa !17
  %177 = icmp slt i64 %172, %176
  br i1 %177, label %.thread364.us, label %245

178:                                              ; preds = %.lr.ph397.us, %220
  %.2310396.us = phi i64 [ 0, %.lr.ph397.us ], [ %221, %220 ]
  %.4395.us = phi i64 [ -1, %.lr.ph397.us ], [ %.5.us, %220 ]
  %179 = getelementptr inbounds i64, ptr %135, i64 %.2310396.us
  %180 = load i64, ptr %179, align 8, !tbaa !17
  %181 = icmp eq i64 %180, %147
  br i1 %181, label %220, label %182

182:                                              ; preds = %178
  %183 = getelementptr inbounds i64, ptr %476, i64 %180
  %184 = load i64, ptr %183, align 8, !tbaa !17
  %185 = load i64, ptr %477, align 8, !tbaa !17
  %186 = add nsw i64 %185, %184
  %187 = icmp sgt i64 %186, %114
  br i1 %187, label %220, label %188

188:                                              ; preds = %182
  %189 = getelementptr inbounds i64, ptr %8, i64 %180
  %190 = load i64, ptr %189, align 8, !tbaa !17
  %191 = getelementptr inbounds i64, ptr %7, i64 %180
  %192 = load i64, ptr %191, align 8, !tbaa !17
  %193 = icmp slt i64 %190, %192
  br i1 %193, label %220, label %194

194:                                              ; preds = %188
  %195 = getelementptr inbounds i64, ptr %478, i64 %.2310396.us
  %196 = load i64, ptr %195, align 8, !tbaa !17
  %197 = icmp sgt i64 %196, 0
  br i1 %197, label %198, label %202

198:                                              ; preds = %194
  %199 = getelementptr inbounds i64, ptr %479, i64 %180
  %200 = load i64, ptr %199, align 8, !tbaa !17
  %201 = icmp sgt i64 %200, %122
  br i1 %201, label %220, label %202

202:                                              ; preds = %198, %194
  %203 = getelementptr inbounds i64, ptr %480, i64 %.2310396.us
  %204 = load i64, ptr %203, align 8, !tbaa !17
  %205 = icmp sgt i64 %204, 0
  br i1 %205, label %207, label %206

206:                                              ; preds = %202
  %.old378.us = mul nsw i64 %204, %196
  %.old379.us = icmp eq i64 %.old378.us, 0
  br i1 %.old379.us, label %212, label %220

207:                                              ; preds = %202
  %208 = getelementptr inbounds i64, ptr %481, i64 %180
  %209 = load i64, ptr %208, align 8, !tbaa !17
  %210 = icmp sle i64 %209, %122
  %211 = icmp eq i64 %196, 0
  %or.cond380.us = and i1 %211, %210
  br i1 %or.cond380.us, label %212, label %220

212:                                              ; preds = %207, %206
  %213 = icmp eq i64 %.4395.us, -1
  br i1 %213, label %220, label %214

214:                                              ; preds = %212
  %215 = getelementptr inbounds i64, ptr %37, i64 %.4395.us
  %216 = load i64, ptr %215, align 8, !tbaa !17
  %217 = getelementptr inbounds i64, ptr %37, i64 %.2310396.us
  %218 = load i64, ptr %217, align 8, !tbaa !17
  %219 = icmp slt i64 %216, %218
  %spec.select347.us = select i1 %219, i64 %.2310396.us, i64 %.4395.us
  br label %220

220:                                              ; preds = %214, %212, %207, %206, %198, %188, %182, %178
  %.5.us = phi i64 [ %.4395.us, %178 ], [ %.4395.us, %182 ], [ %.4395.us, %188 ], [ %.4395.us, %198 ], [ %.4395.us, %207 ], [ %.4395.us, %206 ], [ %.2310396.us, %212 ], [ %spec.select347.us, %214 ]
  %221 = add nuw nsw i64 %.2310396.us, 1
  %exitcond440.not = icmp eq i64 %221, %.0321.lcssa.us
  br i1 %exitcond440.not, label %._crit_edge398.us, label %178, !llvm.loop !23

._crit_edge405.us:                                ; preds = %437
  %222 = icmp eq i64 %.1313.us, -1
  br i1 %222, label %.thread.us, label %223

223:                                              ; preds = %._crit_edge405.us
  %224 = getelementptr inbounds i64, ptr %37, i64 %.1313.us
  %225 = load i64, ptr %224, align 8, !tbaa !17
  %226 = icmp slt i64 %225, %159
  br i1 %226, label %227, label %240

227:                                              ; preds = %223
  %228 = getelementptr inbounds i64, ptr %8, i64 %147
  %229 = load i64, ptr %228, align 8, !tbaa !17
  %230 = getelementptr inbounds i64, ptr %7, i64 %147
  %231 = load i64, ptr %230, align 8, !tbaa !17
  %232 = icmp sgt i64 %229, %231
  br i1 %232, label %.thread364.us, label %233

233:                                              ; preds = %227
  %234 = tail call i32 @rand() #7
  %235 = sitofp i32 %234 to double
  %236 = fmul double %235, 0x3E18000000000000
  %237 = fptosi double %236 to i32
  %238 = icmp eq i32 %237, 0
  %239 = add nsw i64 %.sroa.14.0415.us, 1
  br i1 %238, label %.thread364.us, label %._crit_edge444

._crit_edge444:                                   ; preds = %233
  %.pre445 = load i64, ptr %224, align 8, !tbaa !17
  br label %240

240:                                              ; preds = %223, %._crit_edge444
  %241 = phi i64 [ %.pre445, %._crit_edge444 ], [ %225, %223 ]
  %242 = sub nsw i64 %159, %241
  %243 = sitofp i64 %242 to double
  %244 = fcmp olt double %138, %243
  br i1 %244, label %370, label %._crit_edge446

._crit_edge446:                                   ; preds = %240
  %.pre447 = load i64, ptr %160, align 8, !tbaa !17
  br label %245

245:                                              ; preds = %._crit_edge446, %170, %168
  %246 = phi i64 [ %.pre447, %._crit_edge446 ], [ %161, %170 ], [ %161, %168 ]
  %.6.us = phi i64 [ %.1313.us, %._crit_edge446 ], [ %.5.us, %170 ], [ %.5.us, %168 ]
  %.sroa.10.3.us = phi i64 [ %.sroa.10.2.us, %._crit_edge446 ], [ %.sroa.10.0416.us, %170 ], [ %.sroa.10.0416.us, %168 ]
  %.sroa.0.3.us = phi i64 [ %.sroa.0.2.us, %._crit_edge446 ], [ %.sroa.0.0418.us, %170 ], [ %.sroa.0.0418.us, %168 ]
  %247 = icmp eq i64 %246, 2
  br i1 %247, label %271, label %248

248:                                              ; preds = %245
  %249 = getelementptr inbounds [3 x ptr], ptr %15, i64 0, i64 %246
  %250 = load ptr, ptr %249, align 8, !tbaa !16
  %251 = getelementptr inbounds i64, ptr %250, i64 %147
  %252 = load i64, ptr %251, align 8, !tbaa !17
  %253 = sitofp i64 %252 to double
  %254 = getelementptr inbounds [3 x ptr], ptr %16, i64 0, i64 %246
  %255 = load ptr, ptr %254, align 8, !tbaa !16
  %256 = getelementptr inbounds float, ptr %255, i64 %147
  %257 = load float, ptr %256, align 4, !tbaa !20
  %258 = fpext float %257 to double
  %259 = tail call double @pow(double noundef %253, double noundef %258) #7
  %260 = load i64, ptr %160, align 8, !tbaa !17
  %261 = getelementptr inbounds [3 x ptr], ptr %15, i64 0, i64 %260
  %262 = load ptr, ptr %261, align 8, !tbaa !16
  %263 = getelementptr inbounds i64, ptr %262, i64 %147
  %264 = load i64, ptr %263, align 8, !tbaa !17
  %265 = getelementptr inbounds i64, ptr %21, i64 %145
  %266 = load i64, ptr %265, align 8, !tbaa !17
  %267 = sub nsw i64 %264, %266
  %268 = getelementptr inbounds [3 x ptr], ptr %16, i64 0, i64 %260
  %269 = load ptr, ptr %268, align 8, !tbaa !16
  %270 = getelementptr inbounds float, ptr %269, i64 %147
  br label %283

271:                                              ; preds = %245
  %272 = getelementptr inbounds i64, ptr %7, i64 %147
  %273 = load i64, ptr %272, align 8, !tbaa !17
  %274 = sitofp i64 %273 to double
  %275 = getelementptr inbounds float, ptr %139, i64 %147
  %276 = load float, ptr %275, align 4, !tbaa !20
  %277 = fpext float %276 to double
  %278 = tail call double @pow(double noundef %274, double noundef %277) #7
  %279 = load i64, ptr %272, align 8, !tbaa !17
  %280 = getelementptr inbounds i64, ptr %21, i64 %145
  %281 = load i64, ptr %280, align 8, !tbaa !17
  %282 = sub nsw i64 %279, %281
  br label %283

283:                                              ; preds = %271, %248
  %.sink465 = phi ptr [ %275, %271 ], [ %270, %248 ]
  %.sink.in = phi i64 [ %282, %271 ], [ %267, %248 ]
  %.sink461 = phi double [ %278, %271 ], [ %259, %248 ]
  %.sink = sitofp i64 %.sink.in to double
  %284 = load float, ptr %.sink465, align 4, !tbaa !20
  %285 = fpext float %284 to double
  %286 = tail call double @pow(double noundef %.sink, double noundef %285) #7
  %287 = getelementptr inbounds i64, ptr %5, i64 %147
  %288 = load i64, ptr %287, align 8, !tbaa !17
  %289 = sitofp i64 %288 to double
  %290 = fsub double %286, %.sink461
  %291 = fadd double %290, %289
  %292 = fptosi double %291 to i64
  store i64 %292, ptr %287, align 8, !tbaa !17
  %293 = load i64, ptr %160, align 8, !tbaa !17
  %294 = icmp eq i64 %293, 2
  br i1 %294, label %295, label %301

295:                                              ; preds = %283
  %296 = getelementptr inbounds i64, ptr %21, i64 %145
  %297 = load i64, ptr %296, align 8, !tbaa !17
  %298 = getelementptr inbounds i64, ptr %7, i64 %147
  %299 = load i64, ptr %298, align 8, !tbaa !17
  %300 = sub nsw i64 %299, %297
  store i64 %300, ptr %298, align 8, !tbaa !17
  br label %301

301:                                              ; preds = %295, %283
  %302 = getelementptr inbounds i64, ptr %21, i64 %145
  %303 = load i64, ptr %302, align 8, !tbaa !17
  %304 = getelementptr inbounds i64, ptr %140, i64 %147
  %305 = load i64, ptr %304, align 8, !tbaa !17
  %306 = sub nsw i64 %305, %303
  store i64 %306, ptr %304, align 8, !tbaa !17
  %307 = load i64, ptr %302, align 8, !tbaa !17
  %308 = load i64, ptr %160, align 8, !tbaa !17
  %309 = getelementptr inbounds [3 x ptr], ptr %15, i64 0, i64 %308
  %310 = load ptr, ptr %309, align 8, !tbaa !16
  %311 = getelementptr inbounds i64, ptr %310, i64 %147
  %312 = load i64, ptr %311, align 8, !tbaa !17
  %313 = sub nsw i64 %312, %307
  store i64 %313, ptr %311, align 8, !tbaa !17
  %314 = getelementptr inbounds i64, ptr %135, i64 %.6.us
  %315 = load i64, ptr %314, align 8, !tbaa !17
  store i64 %315, ptr %146, align 8, !tbaa !17
  %316 = getelementptr inbounds i64, ptr %141, i64 %.6.us
  %317 = load i64, ptr %316, align 8, !tbaa !17
  %318 = getelementptr inbounds i64, ptr %142, i64 %.6.us
  %319 = load i64, ptr %318, align 8, !tbaa !17
  %320 = icmp sle i64 %317, %319
  %321 = zext i1 %320 to i64
  store i64 %321, ptr %160, align 8, !tbaa !17
  %322 = getelementptr inbounds [3 x ptr], ptr %15, i64 0, i64 %321
  %323 = load ptr, ptr %322, align 8, !tbaa !16
  %324 = getelementptr inbounds i64, ptr %323, i64 %.6.us
  %325 = load i64, ptr %324, align 8, !tbaa !17
  %326 = load i64, ptr %302, align 8, !tbaa !17
  %327 = add nsw i64 %326, %325
  %328 = sitofp i64 %327 to double
  %329 = getelementptr inbounds [3 x ptr], ptr %16, i64 0, i64 %321
  %330 = load ptr, ptr %329, align 8, !tbaa !16
  %331 = getelementptr inbounds float, ptr %330, i64 %.6.us
  %332 = load float, ptr %331, align 4, !tbaa !20
  %333 = fpext float %332 to double
  %334 = tail call double @pow(double noundef %328, double noundef %333) #7
  %335 = load i64, ptr %160, align 8, !tbaa !17
  %336 = getelementptr inbounds [3 x ptr], ptr %15, i64 0, i64 %335
  %337 = load ptr, ptr %336, align 8, !tbaa !16
  %338 = getelementptr inbounds i64, ptr %337, i64 %.6.us
  %339 = load i64, ptr %338, align 8, !tbaa !17
  %340 = sitofp i64 %339 to double
  %341 = getelementptr inbounds [3 x ptr], ptr %16, i64 0, i64 %335
  %342 = load ptr, ptr %341, align 8, !tbaa !16
  %343 = getelementptr inbounds float, ptr %342, i64 %.6.us
  %344 = load float, ptr %343, align 4, !tbaa !20
  %345 = fpext float %344 to double
  %346 = tail call double @pow(double noundef %340, double noundef %345) #7
  %347 = fsub double %334, %346
  %348 = getelementptr inbounds i64, ptr %5, i64 %.6.us
  %349 = load i64, ptr %348, align 8, !tbaa !17
  %350 = sitofp i64 %349 to double
  %351 = fadd double %347, %350
  %352 = fptosi double %351 to i64
  store i64 %352, ptr %348, align 8, !tbaa !17
  %353 = load i64, ptr %302, align 8, !tbaa !17
  %354 = load i64, ptr %314, align 8, !tbaa !17
  %355 = getelementptr inbounds i64, ptr %140, i64 %354
  %356 = load i64, ptr %355, align 8, !tbaa !17
  %357 = add nsw i64 %356, %353
  store i64 %357, ptr %355, align 8, !tbaa !17
  %358 = load i64, ptr %302, align 8, !tbaa !17
  %359 = load i64, ptr %160, align 8, !tbaa !17
  %360 = getelementptr inbounds [3 x ptr], ptr %15, i64 0, i64 %359
  %361 = load ptr, ptr %360, align 8, !tbaa !16
  %362 = load i64, ptr %314, align 8, !tbaa !17
  %363 = getelementptr inbounds i64, ptr %361, i64 %362
  %364 = load i64, ptr %363, align 8, !tbaa !17
  %365 = add nsw i64 %364, %358
  store i64 %365, ptr %363, align 8, !tbaa !17
  %366 = getelementptr inbounds i64, ptr %37, i64 %.6.us
  %367 = load i64, ptr %366, align 8, !tbaa !17
  %.neg.us = add i64 %159, %.1319412.us
  %368 = sub i64 %.neg.us, %367
  %369 = add nsw i64 %.0316413.us, 1
  br label %.thread364.us

370:                                              ; preds = %240
  %371 = add nsw i64 %.sroa.18.0414.us, 1
  br label %.thread364.us

.thread.us:                                       ; preds = %.preheader.us, %._crit_edge405.us
  %.sroa.0.1.lcssa.us456 = phi i64 [ %.sroa.0.2.us, %._crit_edge405.us ], [ %.sroa.0.0418.us, %.preheader.us ]
  %.sroa.10.1.lcssa.us455 = phi i64 [ %.sroa.10.2.us, %._crit_edge405.us ], [ %.sroa.10.0416.us, %.preheader.us ]
  %372 = getelementptr inbounds i64, ptr %8, i64 %147
  %373 = load i64, ptr %372, align 8, !tbaa !17
  %374 = getelementptr inbounds i64, ptr %7, i64 %147
  %375 = load i64, ptr %374, align 8, !tbaa !17
  %376 = icmp slt i64 %373, %375
  %377 = zext i1 %376 to i64
  %spec.select342.us = add nsw i64 %.sroa.6.0417.us, %377
  br label %.thread364.us

.thread364.us:                                    ; preds = %.preheader385.us, %.thread.us, %370, %301, %233, %227, %170, %164, %._crit_edge398.us
  %.sroa.0.3376.us = phi i64 [ %.sroa.0.3.us, %301 ], [ %.sroa.0.0418.us, %164 ], [ %.sroa.0.0418.us, %._crit_edge398.us ], [ %.sroa.0.2.us, %370 ], [ %.sroa.0.1.lcssa.us456, %.thread.us ], [ %.sroa.0.2.us, %227 ], [ %.sroa.0.2.us, %233 ], [ %.sroa.0.0418.us, %170 ], [ %.sroa.0.0418.us, %.preheader385.us ]
  %.sroa.6.2375.us = phi i64 [ %.sroa.6.0417.us, %301 ], [ %.sroa.6.0417.us, %164 ], [ %.sroa.6.0417.us, %._crit_edge398.us ], [ %.sroa.6.0417.us, %370 ], [ %spec.select342.us, %.thread.us ], [ %.sroa.6.0417.us, %227 ], [ %.sroa.6.0417.us, %233 ], [ %.sroa.6.0417.us, %170 ], [ %.sroa.6.0417.us, %.preheader385.us ]
  %.sroa.10.3374.us = phi i64 [ %.sroa.10.3.us, %301 ], [ %.sroa.10.0416.us, %164 ], [ %.sroa.10.0416.us, %._crit_edge398.us ], [ %.sroa.10.2.us, %370 ], [ %.sroa.10.1.lcssa.us455, %.thread.us ], [ %.sroa.10.2.us, %227 ], [ %.sroa.10.2.us, %233 ], [ %.sroa.10.0416.us, %170 ], [ %.sroa.10.0416.us, %.preheader385.us ]
  %.sroa.14.2373.us = phi i64 [ %.sroa.14.0415.us, %301 ], [ %.sroa.14.0415.us, %164 ], [ %.sroa.14.0415.us, %._crit_edge398.us ], [ %.sroa.14.0415.us, %370 ], [ %.sroa.14.0415.us, %.thread.us ], [ %.sroa.14.0415.us, %227 ], [ %239, %233 ], [ %.sroa.14.0415.us, %170 ], [ %.sroa.14.0415.us, %.preheader385.us ]
  %.sroa.18.1372.us = phi i64 [ %.sroa.18.0414.us, %301 ], [ %.sroa.18.0414.us, %164 ], [ %.sroa.18.0414.us, %._crit_edge398.us ], [ %371, %370 ], [ %.sroa.18.0414.us, %.thread.us ], [ %.sroa.18.0414.us, %227 ], [ %.sroa.18.0414.us, %233 ], [ %.sroa.18.0414.us, %170 ], [ %.sroa.18.0414.us, %.preheader385.us ]
  %.2320.us = phi i64 [ %368, %301 ], [ %.1319412.us, %164 ], [ %.1319412.us, %._crit_edge398.us ], [ %.1319412.us, %370 ], [ %.1319412.us, %.thread.us ], [ %.1319412.us, %227 ], [ %.1319412.us, %233 ], [ %.1319412.us, %170 ], [ %.1319412.us, %.preheader385.us ]
  %.1317.us = phi i64 [ %369, %301 ], [ %.0316413.us, %164 ], [ %.0316413.us, %._crit_edge398.us ], [ %.0316413.us, %370 ], [ %.0316413.us, %.thread.us ], [ %.0316413.us, %227 ], [ %.0316413.us, %233 ], [ %.0316413.us, %170 ], [ %.0316413.us, %.preheader385.us ]
  %378 = load i64, ptr %148, align 8, !tbaa !17
  %379 = load i64, ptr %150, align 8, !tbaa !17
  %380 = icmp slt i64 %378, %379
  br i1 %380, label %.lr.ph410.us, label %._crit_edge411.us

._crit_edge411.us:                                ; preds = %.lr.ph410.us, %.thread364.us
  %381 = add nuw nsw i64 %.0307419.us, 1
  %exitcond442.not = icmp eq i64 %381, %.fr438
  br i1 %exitcond442.not, label %._crit_edge422.us, label %143, !llvm.loop !24

.lr.ph410.us:                                     ; preds = %.thread364.us, %.lr.ph410.us
  %.3409.us = phi i64 [ %387, %.lr.ph410.us ], [ %378, %.thread364.us ]
  %382 = getelementptr inbounds i64, ptr %23, i64 %.3409.us
  %383 = load i64, ptr %382, align 8, !tbaa !17
  %384 = getelementptr inbounds i64, ptr %3, i64 %383
  %385 = load i64, ptr %384, align 8, !tbaa !17
  %386 = getelementptr inbounds i64, ptr %39, i64 %385
  store i64 -1, ptr %386, align 8, !tbaa !17
  %387 = add nsw i64 %.3409.us, 1
  %388 = load i64, ptr %150, align 8, !tbaa !17
  %389 = icmp slt i64 %387, %388
  br i1 %389, label %.lr.ph410.us, label %._crit_edge411.us, !llvm.loop !25

390:                                              ; preds = %.lr.ph404.us, %437
  %.1309403.us = phi i64 [ 0, %.lr.ph404.us ], [ %438, %437 ]
  %.sroa.0.1402.us = phi i64 [ %.sroa.0.0418.us, %.lr.ph404.us ], [ %.sroa.0.2.us, %437 ]
  %.sroa.10.1401.us = phi i64 [ %.sroa.10.0416.us, %.lr.ph404.us ], [ %.sroa.10.2.us, %437 ]
  %.0312400.us = phi i64 [ -1, %.lr.ph404.us ], [ %.1313.us, %437 ]
  %391 = getelementptr inbounds i64, ptr %135, i64 %.1309403.us
  %392 = load i64, ptr %391, align 8, !tbaa !17
  %393 = icmp eq i64 %392, %147
  br i1 %393, label %437, label %394

394:                                              ; preds = %390
  %395 = getelementptr inbounds i64, ptr %482, i64 %392
  %396 = load i64, ptr %395, align 8, !tbaa !17
  %397 = load i64, ptr %483, align 8, !tbaa !17
  %398 = add nsw i64 %397, %396
  %399 = icmp sgt i64 %398, %114
  br i1 %399, label %437, label %400

400:                                              ; preds = %394
  %401 = getelementptr inbounds i64, ptr %5, i64 %392
  %402 = load i64, ptr %401, align 8, !tbaa !17
  %403 = load i64, ptr %484, align 8, !tbaa !17
  %..us = tail call i64 @llvm.smax.i64(i64 %403, i64 %126)
  %404 = icmp sgt i64 %402, %..us
  br i1 %404, label %431, label %405

405:                                              ; preds = %400
  %406 = getelementptr inbounds i64, ptr %485, i64 %.1309403.us
  %407 = load i64, ptr %406, align 8, !tbaa !17
  %408 = icmp sgt i64 %407, 0
  br i1 %408, label %409, label %413

409:                                              ; preds = %405
  %410 = getelementptr inbounds i64, ptr %486, i64 %392
  %411 = load i64, ptr %410, align 8, !tbaa !17
  %412 = icmp sgt i64 %411, %122
  br i1 %412, label %437, label %413

413:                                              ; preds = %409, %405
  %414 = getelementptr inbounds i64, ptr %487, i64 %.1309403.us
  %415 = load i64, ptr %414, align 8, !tbaa !17
  %416 = icmp sgt i64 %415, 0
  br i1 %416, label %418, label %417

417:                                              ; preds = %413
  %.old.us = mul nsw i64 %415, %407
  %.old377.us = icmp eq i64 %.old.us, 0
  br i1 %.old377.us, label %423, label %437

418:                                              ; preds = %413
  %419 = getelementptr inbounds i64, ptr %488, i64 %392
  %420 = load i64, ptr %419, align 8, !tbaa !17
  %421 = icmp sle i64 %420, %122
  %422 = icmp eq i64 %407, 0
  %or.cond.us = and i1 %422, %421
  br i1 %or.cond.us, label %423, label %437

423:                                              ; preds = %418, %417
  %424 = icmp eq i64 %.0312400.us, -1
  br i1 %424, label %437, label %425

425:                                              ; preds = %423
  %426 = getelementptr inbounds i64, ptr %37, i64 %.0312400.us
  %427 = load i64, ptr %426, align 8, !tbaa !17
  %428 = getelementptr inbounds i64, ptr %37, i64 %.1309403.us
  %429 = load i64, ptr %428, align 8, !tbaa !17
  %430 = icmp slt i64 %427, %429
  %spec.select346.us = select i1 %430, i64 %.1309403.us, i64 %.0312400.us
  br label %437

431:                                              ; preds = %400
  %432 = add nsw i64 %.sroa.0.1402.us, 1
  %433 = load i64, ptr %489, align 8, !tbaa !17
  %434 = load i64, ptr %490, align 8, !tbaa !17
  %435 = icmp slt i64 %433, %434
  %436 = zext i1 %435 to i64
  %spec.select.us = add nsw i64 %.sroa.10.1401.us, %436
  br label %437

437:                                              ; preds = %431, %425, %423, %418, %417, %409, %394, %390
  %.1313.us = phi i64 [ %.0312400.us, %390 ], [ %.0312400.us, %394 ], [ %.0312400.us, %409 ], [ %.0312400.us, %418 ], [ %.0312400.us, %417 ], [ %.0312400.us, %431 ], [ %.1309403.us, %423 ], [ %spec.select346.us, %425 ]
  %.sroa.10.2.us = phi i64 [ %.sroa.10.1401.us, %390 ], [ %.sroa.10.1401.us, %394 ], [ %.sroa.10.1401.us, %409 ], [ %.sroa.10.1401.us, %418 ], [ %.sroa.10.1401.us, %417 ], [ %spec.select.us, %431 ], [ %.sroa.10.1401.us, %423 ], [ %.sroa.10.1401.us, %425 ]
  %.sroa.0.2.us = phi i64 [ %.sroa.0.1402.us, %390 ], [ %.sroa.0.1402.us, %394 ], [ %.sroa.0.1402.us, %409 ], [ %.sroa.0.1402.us, %418 ], [ %.sroa.0.1402.us, %417 ], [ %432, %431 ], [ %.sroa.0.1402.us, %423 ], [ %.sroa.0.1402.us, %425 ]
  %438 = add nuw nsw i64 %.1309403.us, 1
  %exitcond441.not = icmp eq i64 %438, %.0321.lcssa.us
  br i1 %exitcond441.not, label %._crit_edge405.us, label %390, !llvm.loop !26

439:                                              ; preds = %.lr.ph393.us, %454
  %.0308391.us = phi i64 [ %149, %.lr.ph393.us ], [ %469, %454 ]
  %.0321390.us = phi i64 [ 0, %.lr.ph393.us ], [ %.1322.us, %454 ]
  %440 = getelementptr inbounds i64, ptr %23, i64 %.0308391.us
  %441 = load i64, ptr %440, align 8, !tbaa !17
  %442 = getelementptr inbounds i64, ptr %3, i64 %441
  %443 = load i64, ptr %442, align 8, !tbaa !17
  %444 = getelementptr inbounds i64, ptr %39, i64 %443
  %445 = load i64, ptr %444, align 8, !tbaa !17
  %446 = icmp eq i64 %445, -1
  br i1 %446, label %447, label %454

447:                                              ; preds = %439
  %448 = add nsw i64 %.0321390.us, 1
  store i64 %.0321390.us, ptr %444, align 8, !tbaa !17
  %449 = getelementptr inbounds i64, ptr %472, i64 %.0321390.us
  store i64 %443, ptr %449, align 8, !tbaa !17
  %450 = getelementptr inbounds i64, ptr %37, i64 %.0321390.us
  store i64 0, ptr %450, align 8, !tbaa !17
  %451 = getelementptr inbounds i64, ptr %473, i64 %.0321390.us
  store i64 0, ptr %451, align 8, !tbaa !17
  %452 = getelementptr inbounds i64, ptr %474, i64 %.0321390.us
  store i64 0, ptr %452, align 8, !tbaa !17
  %453 = getelementptr inbounds i64, ptr %475, i64 %.0321390.us
  store i64 0, ptr %453, align 8, !tbaa !17
  %.pre = load i64, ptr %440, align 8, !tbaa !17
  br label %454

454:                                              ; preds = %447, %439
  %455 = phi i64 [ %.pre, %447 ], [ %441, %439 ]
  %.1322.us = phi i64 [ %448, %447 ], [ %.0321390.us, %439 ]
  %.0311.us = phi i64 [ %.0321390.us, %447 ], [ %445, %439 ]
  %456 = getelementptr inbounds i64, ptr %25, i64 %.0308391.us
  %457 = load i64, ptr %456, align 8, !tbaa !17
  %458 = getelementptr inbounds i64, ptr %4, i64 %455
  %459 = load i64, ptr %458, align 8, !tbaa !17
  %460 = getelementptr inbounds [4 x ptr], ptr %12, i64 0, i64 %459
  %461 = load ptr, ptr %460, align 8, !tbaa !16
  %462 = getelementptr inbounds i64, ptr %461, i64 %.0311.us
  %463 = load i64, ptr %462, align 8, !tbaa !17
  %464 = add nsw i64 %463, %457
  store i64 %464, ptr %462, align 8, !tbaa !17
  %465 = load i64, ptr %456, align 8, !tbaa !17
  %466 = getelementptr inbounds i64, ptr %37, i64 %.0311.us
  %467 = load i64, ptr %466, align 8, !tbaa !17
  %468 = add nsw i64 %467, %465
  store i64 %468, ptr %466, align 8, !tbaa !17
  %469 = add nsw i64 %.0308391.us, 1
  %470 = load i64, ptr %150, align 8, !tbaa !17
  %471 = icmp slt i64 %469, %470
  br i1 %471, label %439, label %._crit_edge394.us, !llvm.loop !27

.preheader.us:                                    ; preds = %158
  br i1 %163, label %.lr.ph404.us, label %.thread.us

.preheader385.us:                                 ; preds = %158
  br i1 %163, label %.lr.ph397.us, label %.thread364.us

.lr.ph393.us:                                     ; preds = %143
  %472 = load ptr, ptr %14, align 8
  %473 = load ptr, ptr %36, align 16
  %474 = load ptr, ptr %34, align 8
  %475 = load ptr, ptr %12, align 16
  br label %439

.lr.ph397.us:                                     ; preds = %.preheader385.us
  %476 = load ptr, ptr %11, align 8
  %477 = getelementptr inbounds i64, ptr %21, i64 %145
  %478 = load ptr, ptr %12, align 16
  %479 = load ptr, ptr %15, align 16
  %480 = load ptr, ptr %34, align 8
  %481 = load ptr, ptr %29, align 8
  br label %178

.lr.ph404.us:                                     ; preds = %.preheader.us
  %482 = load ptr, ptr %11, align 8
  %483 = getelementptr inbounds i64, ptr %21, i64 %145
  %484 = getelementptr inbounds i64, ptr %5, i64 %147
  %485 = load ptr, ptr %12, align 16
  %486 = load ptr, ptr %15, align 16
  %487 = load ptr, ptr %34, align 8
  %488 = load ptr, ptr %29, align 8
  %489 = getelementptr inbounds i64, ptr %8, i64 %147
  %490 = getelementptr inbounds i64, ptr %7, i64 %147
  br label %390

._crit_edge422.us:                                ; preds = %._crit_edge411.us
  %491 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.41, i64 noundef %.0323430.us, i64 noundef %.1317.us, i64 noundef %.2320.us, i64 noundef %.sroa.0.3376.us, i64 noundef %.sroa.6.2375.us, i64 noundef %.sroa.10.3374.us, i64 noundef %.sroa.14.2373.us, i64 noundef %.sroa.18.1372.us) #7
  %492 = icmp ne i64 %.1317.us, 0
  %493 = add nuw nsw i64 %.0323430.us, 1
  %494 = icmp ult i64 %.0323430.us, 9
  %or.cond = select i1 %492, i1 %494, i1 false
  br i1 %or.cond, label %.lr.ph421.us, label %.split433.us.loopexit, !llvm.loop !28

.split:                                           ; preds = %._crit_edge
  tail call void @libmetis__RandomPermute(i64 noundef %.fr438, ptr noundef %41, i64 noundef 1) #7
  %495 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.41, i64 noundef 0, i64 noundef 0, i64 noundef %47, i64 noundef 0, i64 noundef 0, i64 noundef 0, i64 noundef 0, i64 noundef 0) #7
  br label %.split433.us

.split433.us.loopexit:                            ; preds = %._crit_edge422.us
  %.pre448.pre = load ptr, ptr %11, align 8, !tbaa !16
  br label %.split433.us

.split433.us:                                     ; preds = %.split433.us.loopexit, %.split
  %.pre448 = phi ptr [ %.pre448.pre, %.split433.us.loopexit ], [ %26, %.split ]
  br i1 %49, label %.lr.ph436, label %._crit_edge437

.lr.ph436:                                        ; preds = %.split433.us, %.lr.ph436
  %.2434 = phi i64 [ %503, %.lr.ph436 ], [ 0, %.split433.us ]
  %496 = getelementptr inbounds i64, ptr %.pre448, i64 %.2434
  %497 = load i64, ptr %496, align 8, !tbaa !17
  %498 = getelementptr inbounds i64, ptr %7, i64 %.2434
  %499 = load i64, ptr %498, align 8, !tbaa !17
  %500 = getelementptr inbounds i64, ptr %5, i64 %.2434
  %501 = load i64, ptr %500, align 8, !tbaa !17
  %502 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.42, i64 noundef %.2434, i64 noundef %497, i64 noundef %499, i64 noundef %501) #7
  %503 = add nuw nsw i64 %.2434, 1
  %exitcond443.not = icmp eq i64 %503, %2
  br i1 %exitcond443.not, label %._crit_edge437, label %.lr.ph436, !llvm.loop !29

._crit_edge437:                                   ; preds = %.lr.ph436, %.split433.us
  %504 = getelementptr inbounds i8, ptr %.pre448, i64 80
  %505 = load i64, ptr %504, align 8, !tbaa !17
  %506 = load ptr, ptr %15, align 16, !tbaa !16
  %507 = getelementptr inbounds i8, ptr %506, i64 80
  %508 = load i64, ptr %507, align 8, !tbaa !17
  %509 = load ptr, ptr %29, align 8, !tbaa !16
  %510 = getelementptr inbounds i8, ptr %509, i64 80
  %511 = load i64, ptr %510, align 8, !tbaa !17
  %512 = getelementptr inbounds i8, ptr %.pre448, i64 120
  %513 = load i64, ptr %512, align 8, !tbaa !17
  %514 = getelementptr inbounds i8, ptr %506, i64 120
  %515 = load i64, ptr %514, align 8, !tbaa !17
  %516 = getelementptr inbounds i8, ptr %509, i64 120
  %517 = load i64, ptr %516, align 8, !tbaa !17
  %518 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.43, i64 noundef %505, i64 noundef %508, i64 noundef %511, i64 noundef %513, i64 noundef %515, i64 noundef %517, i64 noundef %114, i64 noundef %122) #7
  call void (ptr, ...) @gk_free(ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %34, ptr noundef nonnull %36, ptr noundef nonnull %38, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %10, ptr noundef nonnull %15, ptr noundef nonnull %29, ptr noundef nonnull %31, ptr noundef nonnull %16, ptr noundef nonnull %44, ptr noundef nonnull %46, ptr noundef null) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  ret void
}

declare void @gk_free(ptr noundef, ...) local_unnamed_addr #1

declare ptr @gk_fmalloc(i64 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @log(double noundef) local_unnamed_addr #3

declare void @libmetis__RandomPermute(i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #4

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @pow(double noundef, double noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #6

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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 #5 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { 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 0}
!6 = !{!"graphdef", !7, i64 0, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !11, i64 56, !11, i64 60, !11, i64 64, !11, i64 68, !11, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 120, !10, i64 128, !10, i64 136, !7, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !7, i64 208, !10, i64 216, !10, i64 224, !10, i64 232, !10, i64 240}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !10, i64 16}
!13 = !{!6, !10, i64 24}
!14 = !{!6, !10, i64 40}
!15 = !{!6, !10, i64 48}
!16 = !{!10, !10, i64 0}
!17 = !{!7, !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = !{!21, !21, i64 0}
!21 = !{!"float", !8, i64 0}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}
!26 = distinct !{!26, !19}
!27 = distinct !{!27, !19}
!28 = distinct !{!28, !19}
!29 = distinct !{!29, !19}


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