; LLVM IR from ekoontz/graphlab :: src/graphlab/extern/metis/libmetis/kwayfm.ll_libmetis (Greedy_KWayEdgeBalance)

; 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.PQueueType = type { i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr }
%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 }
%struct.controldef = type { i64, i64, i64, i64, i64, i64, float, i64, i64, i64, i64, %struct.workspacedef, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.workspacedef = type { ptr, i64, i64, ptr, ptr, i64, ptr, ptr }
%struct.rinfodef = type { i64, i64, i64, ptr }
%struct.edegreedef = type { i64, i64 }

@.str.1 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [60 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 ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) #1

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

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

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

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

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

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

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

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

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

declare void @libmetis__PQueueReset(ptr noundef) #1

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) #1

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

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

declare void @libmetis__PQueueFree(ptr noundef, ptr noundef) #1

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

84:                                               ; preds = %129, %6
  %85 = load i64, ptr %13, align 8, !tbaa !9
  %86 = load i64, ptr %9, align 8, !tbaa !9
  %87 = icmp slt i64 %85, %86
  br i1 %87, label %88, label %132

88:                                               ; preds = %84
  %89 = load ptr, ptr %10, align 8, !tbaa !5
  %90 = load i64, ptr %13, align 8, !tbaa !9
  %91 = getelementptr inbounds float, ptr %89, i64 %90
  %92 = load float, ptr %91, align 4, !tbaa !11
  %93 = load i64, ptr %23, align 8, !tbaa !9
  %94 = sitofp i64 %93 to float
  %95 = fmul float %92, %94
  %96 = fptosi float %95 to i64
  %97 = load ptr, ptr %44, align 8, !tbaa !5
  %98 = load i64, ptr %13, align 8, !tbaa !9
  %99 = getelementptr inbounds i64, ptr %97, i64 %98
  store i64 %96, ptr %99, align 8, !tbaa !9
  %100 = load ptr, ptr %10, align 8, !tbaa !5
  %101 = load i64, ptr %13, align 8, !tbaa !9
  %102 = getelementptr inbounds float, ptr %100, i64 %101
  %103 = load float, ptr %102, align 4, !tbaa !11
  %104 = load i64, ptr %23, align 8, !tbaa !9
  %105 = sitofp i64 %104 to float
  %106 = fmul float %103, %105
  %107 = load float, ptr %11, align 4, !tbaa !11
  %108 = fmul float %106, %107
  %109 = fptosi float %108 to i64
  %110 = load ptr, ptr %42, align 8, !tbaa !5
  %111 = load i64, ptr %13, align 8, !tbaa !9
  %112 = getelementptr inbounds i64, ptr %110, i64 %111
  store i64 %109, ptr %112, align 8, !tbaa !9
  %113 = load ptr, ptr %10, align 8, !tbaa !5
  %114 = load i64, ptr %13, align 8, !tbaa !9
  %115 = getelementptr inbounds float, ptr %113, i64 %114
  %116 = load float, ptr %115, align 4, !tbaa !11
  %117 = load i64, ptr %23, align 8, !tbaa !9
  %118 = sitofp i64 %117 to float
  %119 = fmul float %116, %118
  %120 = fpext float %119 to double
  %121 = load float, ptr %11, align 4, !tbaa !11
  %122 = fpext float %121 to double
  %123 = fdiv double 1.000000e+00, %122
  %124 = fmul double %120, %123
  %125 = fptosi double %124 to i64
  %126 = load ptr, ptr %41, align 8, !tbaa !5
  %127 = load i64, ptr %13, align 8, !tbaa !9
  %128 = getelementptr inbounds i64, ptr %126, i64 %127
  store i64 %125, ptr %128, align 8, !tbaa !9
  br label %129

129:                                              ; preds = %88
  %130 = load i64, ptr %13, align 8, !tbaa !9
  %131 = add nsw i64 %130, 1
  store i64 %131, ptr %13, align 8, !tbaa !9
  br label %84, !llvm.loop !23

132:                                              ; preds = %84
  %133 = load ptr, ptr %7, align 8, !tbaa !5
  %134 = load i64, ptr %21, align 8, !tbaa !9
  %135 = call ptr @libmetis__idxwspacemalloc(ptr noundef %133, i64 noundef %134)
  store ptr %135, ptr %38, align 8, !tbaa !5
  %136 = load ptr, ptr %7, align 8, !tbaa !5
  %137 = load i64, ptr %21, align 8, !tbaa !9
  %138 = call ptr @libmetis__idxwspacemalloc(ptr noundef %136, i64 noundef %137)
  store ptr %138, ptr %43, align 8, !tbaa !5
  %139 = load ptr, ptr %7, align 8, !tbaa !5
  %140 = load i64, ptr %21, align 8, !tbaa !9
  %141 = load ptr, ptr %8, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.graphdef, ptr %141, i32 0, i32 13
  %143 = load ptr, ptr %142, align 8, !tbaa !25
  %144 = load i64, ptr %21, align 8, !tbaa !9
  %145 = load ptr, ptr %8, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.graphdef, ptr %145, i32 0, i32 13
  %147 = load ptr, ptr %146, align 8, !tbaa !25
  %148 = call i64 @libmetis__idxargmax(i64 noundef %144, ptr noundef %147)
  %149 = getelementptr inbounds i64, ptr %143, i64 %148
  %150 = load i64, ptr %149, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %139, ptr noundef %47, i64 noundef %140, i64 noundef %150)
  %151 = load ptr, ptr %7, align 8, !tbaa !5
  %152 = getelementptr inbounds %struct.controldef, ptr %151, i32 0, i32 1
  %153 = load i64, ptr %152, align 8, !tbaa !26
  %154 = and i64 %153, 8
  %155 = icmp ne i64 %154, 0
  br i1 %155, label %156, label %199

156:                                              ; preds = %132
  %157 = load ptr, ptr %37, align 8, !tbaa !5
  %158 = load i64, ptr %9, align 8, !tbaa !9
  %159 = load ptr, ptr %37, align 8, !tbaa !5
  %160 = call i64 @libmetis__idxargmin(i64 noundef %158, ptr noundef %159)
  %161 = getelementptr inbounds i64, ptr %157, i64 %160
  %162 = load i64, ptr %161, align 8, !tbaa !9
  %163 = load ptr, ptr %37, align 8, !tbaa !5
  %164 = load i64, ptr %9, align 8, !tbaa !9
  %165 = load ptr, ptr %37, align 8, !tbaa !5
  %166 = call i64 @libmetis__idxargmax(i64 noundef %164, ptr noundef %165)
  %167 = getelementptr inbounds i64, ptr %163, i64 %166
  %168 = load i64, ptr %167, align 8, !tbaa !9
  %169 = load ptr, ptr %41, align 8, !tbaa !5
  %170 = getelementptr inbounds i64, ptr %169, i64 0
  %171 = load i64, ptr %170, align 8, !tbaa !9
  %172 = load ptr, ptr %42, align 8, !tbaa !5
  %173 = getelementptr inbounds i64, ptr %172, i64 0
  %174 = load i64, ptr %173, align 8, !tbaa !9
  %175 = load i64, ptr %9, align 8, !tbaa !9
  %176 = sitofp i64 %175 to double
  %177 = fmul double 1.000000e+00, %176
  %178 = load ptr, ptr %37, align 8, !tbaa !5
  %179 = load i64, ptr %9, align 8, !tbaa !9
  %180 = load ptr, ptr %37, align 8, !tbaa !5
  %181 = call i64 @libmetis__idxargmax(i64 noundef %179, ptr noundef %180)
  %182 = getelementptr inbounds i64, ptr %178, i64 %181
  %183 = load i64, ptr %182, align 8, !tbaa !9
  %184 = sitofp i64 %183 to double
  %185 = fmul double %177, %184
  %186 = load i64, ptr %23, align 8, !tbaa !9
  %187 = sitofp i64 %186 to double
  %188 = fdiv double %185, %187
  %189 = load ptr, ptr %8, align 8, !tbaa !5
  %190 = getelementptr inbounds %struct.graphdef, ptr %189, i32 0, i32 0
  %191 = load i64, ptr %190, align 8, !tbaa !13
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.graphdef, ptr %192, i32 0, i32 20
  %194 = load i64, ptr %193, align 8, !tbaa !30
  %195 = load ptr, ptr %8, align 8, !tbaa !5
  %196 = getelementptr inbounds %struct.graphdef, ptr %195, i32 0, i32 16
  %197 = load i64, ptr %196, align 8, !tbaa !31
  %198 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, i64 noundef %162, i64 noundef %168, i64 noundef %171, i64 noundef %174, double noundef %188, i64 noundef %191, i64 noundef %194, i64 noundef %197)
  br label %199

199:                                              ; preds = %156, %132
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %200

200:                                              ; preds = %1004, %199
  %201 = load i64, ptr %20, align 8, !tbaa !9
  %202 = load i64, ptr %12, align 8, !tbaa !9
  %203 = icmp slt i64 %201, %202
  br i1 %203, label %204, label %1007

204:                                              ; preds = %200
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %205

205:                                              ; preds = %221, %204
  %206 = load i64, ptr %13, align 8, !tbaa !9
  %207 = load i64, ptr %9, align 8, !tbaa !9
  %208 = icmp slt i64 %206, %207
  br i1 %208, label %209, label %224

209:                                              ; preds = %205
  %210 = load ptr, ptr %37, align 8, !tbaa !5
  %211 = load i64, ptr %13, align 8, !tbaa !9
  %212 = getelementptr inbounds i64, ptr %210, i64 %211
  %213 = load i64, ptr %212, align 8, !tbaa !9
  %214 = load ptr, ptr %42, align 8, !tbaa !5
  %215 = load i64, ptr %13, align 8, !tbaa !9
  %216 = getelementptr inbounds i64, ptr %214, i64 %215
  %217 = load i64, ptr %216, align 8, !tbaa !9
  %218 = icmp sgt i64 %213, %217
  br i1 %218, label %219, label %220

219:                                              ; preds = %209
  br label %224

220:                                              ; preds = %209
  br label %221

221:                                              ; preds = %220
  %222 = load i64, ptr %13, align 8, !tbaa !9
  %223 = add nsw i64 %222, 1
  store i64 %223, ptr %13, align 8, !tbaa !9
  br label %205, !llvm.loop !32

224:                                              ; preds = %219, %205
  %225 = load i64, ptr %13, align 8, !tbaa !9
  %226 = load i64, ptr %9, align 8, !tbaa !9
  %227 = icmp eq i64 %225, %226
  br i1 %227, label %228, label %229

228:                                              ; preds = %224
  br label %1007

229:                                              ; preds = %224
  call void @libmetis__PQueueReset(ptr noundef %47)
  %230 = load i64, ptr %21, align 8, !tbaa !9
  %231 = load ptr, ptr %43, align 8, !tbaa !5
  %232 = call ptr @libmetis__idxset(i64 noundef %230, i64 noundef -1, ptr noundef %231)
  %233 = load ptr, ptr %8, align 8, !tbaa !5
  %234 = getelementptr inbounds %struct.graphdef, ptr %233, i32 0, i32 16
  %235 = load i64, ptr %234, align 8, !tbaa !31
  store i64 %235, ptr %31, align 8, !tbaa !9
  %236 = load ptr, ptr %8, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.graphdef, ptr %236, i32 0, i32 20
  %238 = load i64, ptr %237, align 8, !tbaa !30
  store i64 %238, ptr %22, align 8, !tbaa !9
  %239 = load i64, ptr %22, align 8, !tbaa !9
  %240 = load ptr, ptr %38, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %239, ptr noundef %240, i64 noundef 1)
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %241

241:                                              ; preds = %273, %229
  %242 = load i64, ptr %14, align 8, !tbaa !9
  %243 = load i64, ptr %22, align 8, !tbaa !9
  %244 = icmp slt i64 %242, %243
  br i1 %244, label %245, label %276

245:                                              ; preds = %241
  %246 = load ptr, ptr %40, align 8, !tbaa !5
  %247 = load ptr, ptr %38, align 8, !tbaa !5
  %248 = load i64, ptr %14, align 8, !tbaa !9
  %249 = getelementptr inbounds i64, ptr %247, i64 %248
  %250 = load i64, ptr %249, align 8, !tbaa !9
  %251 = getelementptr inbounds i64, ptr %246, i64 %250
  %252 = load i64, ptr %251, align 8, !tbaa !9
  store i64 %252, ptr %13, align 8, !tbaa !9
  %253 = load i64, ptr %13, align 8, !tbaa !9
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.graphdef, ptr %254, i32 0, i32 25
  %256 = load ptr, ptr %255, align 8, !tbaa !33
  %257 = load i64, ptr %13, align 8, !tbaa !9
  %258 = getelementptr inbounds %struct.rinfodef, ptr %256, i64 %257
  %259 = getelementptr inbounds %struct.rinfodef, ptr %258, i32 0, i32 1
  %260 = load i64, ptr %259, align 8, !tbaa !34
  %261 = load ptr, ptr %8, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.graphdef, ptr %261, i32 0, i32 25
  %263 = load ptr, ptr %262, align 8, !tbaa !33
  %264 = load i64, ptr %13, align 8, !tbaa !9
  %265 = getelementptr inbounds %struct.rinfodef, ptr %263, i64 %264
  %266 = getelementptr inbounds %struct.rinfodef, ptr %265, i32 0, i32 0
  %267 = load i64, ptr %266, align 8, !tbaa !36
  %268 = sub nsw i64 %260, %267
  %269 = call i64 @libmetis__PQueueInsert(ptr noundef %47, i64 noundef %253, i64 noundef %268)
  %270 = load ptr, ptr %43, align 8, !tbaa !5
  %271 = load i64, ptr %13, align 8, !tbaa !9
  %272 = getelementptr inbounds i64, ptr %270, i64 %271
  store i64 2, ptr %272, align 8, !tbaa !9
  br label %273

273:                                              ; preds = %245
  %274 = load i64, ptr %14, align 8, !tbaa !9
  %275 = add nsw i64 %274, 1
  store i64 %275, ptr %14, align 8, !tbaa !9
  br label %241, !llvm.loop !37

276:                                              ; preds = %241
  store i64 0, ptr %27, align 8, !tbaa !9
  br label %277

277:                                              ; preds = %956, %454, %371, %311, %276
  %278 = call i64 @libmetis__PQueueGetMax(ptr noundef %47)
  store i64 %278, ptr %13, align 8, !tbaa !9
  %279 = icmp eq i64 %278, -1
  br i1 %279, label %280, label %281

280:                                              ; preds = %277
  br label %959

281:                                              ; preds = %277
  %282 = load ptr, ptr %43, align 8, !tbaa !5
  %283 = load i64, ptr %13, align 8, !tbaa !9
  %284 = getelementptr inbounds i64, ptr %282, i64 %283
  store i64 1, ptr %284, align 8, !tbaa !9
  %285 = load ptr, ptr %8, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.graphdef, ptr %285, i32 0, i32 25
  %287 = load ptr, ptr %286, align 8, !tbaa !33
  %288 = load i64, ptr %13, align 8, !tbaa !9
  %289 = getelementptr inbounds %struct.rinfodef, ptr %287, i64 %288
  store ptr %289, ptr %46, align 8, !tbaa !5
  %290 = load ptr, ptr %36, align 8, !tbaa !5
  %291 = load i64, ptr %13, align 8, !tbaa !9
  %292 = getelementptr inbounds i64, ptr %290, i64 %291
  %293 = load i64, ptr %292, align 8, !tbaa !9
  store i64 %293, ptr %28, align 8, !tbaa !9
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.graphdef, ptr %294, i32 0, i32 3
  %296 = load ptr, ptr %295, align 8, !tbaa !38
  %297 = load i64, ptr %13, 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 %32, align 8, !tbaa !9
  %300 = load ptr, ptr %37, align 8, !tbaa !5
  %301 = load i64, ptr %28, align 8, !tbaa !9
  %302 = getelementptr inbounds i64, ptr %300, i64 %301
  %303 = load i64, ptr %302, align 8, !tbaa !9
  %304 = load i64, ptr %32, align 8, !tbaa !9
  %305 = sub nsw i64 %303, %304
  %306 = load ptr, ptr %41, align 8, !tbaa !5
  %307 = load i64, ptr %28, align 8, !tbaa !9
  %308 = getelementptr inbounds i64, ptr %306, i64 %307
  %309 = load i64, ptr %308, align 8, !tbaa !9
  %310 = icmp slt i64 %305, %309
  br i1 %310, label %311, label %312

311:                                              ; preds = %281
  br label %277

312:                                              ; preds = %281
  %313 = load ptr, ptr %46, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.rinfodef, ptr %313, i32 0, i32 3
  %315 = load ptr, ptr %314, align 8, !tbaa !39
  store ptr %315, ptr %45, align 8, !tbaa !5
  %316 = load ptr, ptr %46, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.rinfodef, ptr %316, i32 0, i32 2
  %318 = load i64, ptr %317, align 8, !tbaa !40
  store i64 %318, ptr %24, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %319

319:                                              ; preds = %364, %312
  %320 = load i64, ptr %18, align 8, !tbaa !9
  %321 = load i64, ptr %24, align 8, !tbaa !9
  %322 = icmp slt i64 %320, %321
  br i1 %322, label %323, label %367

323:                                              ; preds = %319
  %324 = load ptr, ptr %45, align 8, !tbaa !5
  %325 = load i64, ptr %18, align 8, !tbaa !9
  %326 = getelementptr inbounds %struct.edegreedef, ptr %324, i64 %325
  %327 = getelementptr inbounds %struct.edegreedef, ptr %326, i32 0, i32 0
  %328 = load i64, ptr %327, align 8, !tbaa !41
  store i64 %328, ptr %30, align 8, !tbaa !9
  %329 = load ptr, ptr %37, align 8, !tbaa !5
  %330 = load i64, ptr %30, align 8, !tbaa !9
  %331 = getelementptr inbounds i64, ptr %329, i64 %330
  %332 = load i64, ptr %331, align 8, !tbaa !9
  %333 = load i64, ptr %32, align 8, !tbaa !9
  %334 = add nsw i64 %332, %333
  %335 = load ptr, ptr %42, align 8, !tbaa !5
  %336 = load i64, ptr %30, align 8, !tbaa !9
  %337 = getelementptr inbounds i64, ptr %335, i64 %336
  %338 = load i64, ptr %337, align 8, !tbaa !9
  %339 = icmp sle i64 %334, %338
  br i1 %339, label %362, label %340

340:                                              ; preds = %323
  %341 = load ptr, ptr %44, align 8, !tbaa !5
  %342 = load i64, ptr %28, align 8, !tbaa !9
  %343 = getelementptr inbounds i64, ptr %341, i64 %342
  %344 = load i64, ptr %343, align 8, !tbaa !9
  %345 = load ptr, ptr %37, align 8, !tbaa !5
  %346 = load i64, ptr %30, align 8, !tbaa !9
  %347 = getelementptr inbounds i64, ptr %345, i64 %346
  %348 = load i64, ptr %347, align 8, !tbaa !9
  %349 = load i64, ptr %32, align 8, !tbaa !9
  %350 = add nsw i64 %348, %349
  %351 = mul nsw i64 %344, %350
  %352 = load ptr, ptr %44, align 8, !tbaa !5
  %353 = load i64, ptr %30, align 8, !tbaa !9
  %354 = getelementptr inbounds i64, ptr %352, i64 %353
  %355 = load i64, ptr %354, align 8, !tbaa !9
  %356 = load ptr, ptr %37, align 8, !tbaa !5
  %357 = load i64, ptr %28, align 8, !tbaa !9
  %358 = getelementptr inbounds i64, ptr %356, i64 %357
  %359 = load i64, ptr %358, align 8, !tbaa !9
  %360 = mul nsw i64 %355, %359
  %361 = icmp sle i64 %351, %360
  br i1 %361, label %362, label %363

362:                                              ; preds = %340, %323
  br label %367

363:                                              ; preds = %340
  br label %364

364:                                              ; preds = %363
  %365 = load i64, ptr %18, align 8, !tbaa !9
  %366 = add nsw i64 %365, 1
  store i64 %366, ptr %18, align 8, !tbaa !9
  br label %319, !llvm.loop !43

367:                                              ; preds = %362, %319
  %368 = load i64, ptr %18, align 8, !tbaa !9
  %369 = load i64, ptr %24, align 8, !tbaa !9
  %370 = icmp eq i64 %368, %369
  br i1 %370, label %371, label %372

371:                                              ; preds = %367
  br label %277

372:                                              ; preds = %367
  %373 = load i64, ptr %18, align 8, !tbaa !9
  %374 = add nsw i64 %373, 1
  store i64 %374, ptr %16, align 8, !tbaa !9
  br label %375

375:                                              ; preds = %415, %372
  %376 = load i64, ptr %16, align 8, !tbaa !9
  %377 = load i64, ptr %24, align 8, !tbaa !9
  %378 = icmp slt i64 %376, %377
  br i1 %378, label %379, label %418

379:                                              ; preds = %375
  %380 = load ptr, ptr %45, align 8, !tbaa !5
  %381 = load i64, ptr %16, align 8, !tbaa !9
  %382 = getelementptr inbounds %struct.edegreedef, ptr %380, i64 %381
  %383 = getelementptr inbounds %struct.edegreedef, ptr %382, i32 0, i32 0
  %384 = load i64, ptr %383, align 8, !tbaa !41
  store i64 %384, ptr %30, align 8, !tbaa !9
  %385 = load ptr, ptr %44, align 8, !tbaa !5
  %386 = load ptr, ptr %45, align 8, !tbaa !5
  %387 = load i64, ptr %18, align 8, !tbaa !9
  %388 = getelementptr inbounds %struct.edegreedef, ptr %386, i64 %387
  %389 = getelementptr inbounds %struct.edegreedef, ptr %388, i32 0, i32 0
  %390 = load i64, ptr %389, align 8, !tbaa !41
  %391 = getelementptr inbounds i64, ptr %385, i64 %390
  %392 = load i64, ptr %391, align 8, !tbaa !9
  %393 = load ptr, ptr %37, align 8, !tbaa !5
  %394 = load i64, ptr %30, align 8, !tbaa !9
  %395 = getelementptr inbounds i64, ptr %393, i64 %394
  %396 = load i64, ptr %395, align 8, !tbaa !9
  %397 = mul nsw i64 %392, %396
  %398 = load ptr, ptr %44, align 8, !tbaa !5
  %399 = load i64, ptr %30, align 8, !tbaa !9
  %400 = getelementptr inbounds i64, ptr %398, i64 %399
  %401 = load i64, ptr %400, align 8, !tbaa !9
  %402 = load ptr, ptr %37, align 8, !tbaa !5
  %403 = load ptr, ptr %45, align 8, !tbaa !5
  %404 = load i64, ptr %18, align 8, !tbaa !9
  %405 = getelementptr inbounds %struct.edegreedef, ptr %403, i64 %404
  %406 = getelementptr inbounds %struct.edegreedef, ptr %405, i32 0, i32 0
  %407 = load i64, ptr %406, align 8, !tbaa !41
  %408 = getelementptr inbounds i64, ptr %402, i64 %407
  %409 = load i64, ptr %408, align 8, !tbaa !9
  %410 = mul nsw i64 %401, %409
  %411 = icmp slt i64 %397, %410
  br i1 %411, label %412, label %414

412:                                              ; preds = %379
  %413 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %413, ptr %18, align 8, !tbaa !9
  br label %414

414:                                              ; preds = %412, %379
  br label %415

415:                                              ; preds = %414
  %416 = load i64, ptr %16, align 8, !tbaa !9
  %417 = add nsw i64 %416, 1
  store i64 %417, ptr %16, align 8, !tbaa !9
  br label %375, !llvm.loop !44

418:                                              ; preds = %375
  %419 = load ptr, ptr %45, align 8, !tbaa !5
  %420 = load i64, ptr %18, align 8, !tbaa !9
  %421 = getelementptr inbounds %struct.edegreedef, ptr %419, i64 %420
  %422 = getelementptr inbounds %struct.edegreedef, ptr %421, i32 0, i32 0
  %423 = load i64, ptr %422, align 8, !tbaa !41
  store i64 %423, ptr %30, align 8, !tbaa !9
  %424 = load ptr, ptr %37, align 8, !tbaa !5
  %425 = load i64, ptr %28, align 8, !tbaa !9
  %426 = getelementptr inbounds i64, ptr %424, i64 %425
  %427 = load i64, ptr %426, align 8, !tbaa !9
  %428 = load ptr, ptr %42, align 8, !tbaa !5
  %429 = load i64, ptr %28, align 8, !tbaa !9
  %430 = getelementptr inbounds i64, ptr %428, i64 %429
  %431 = load i64, ptr %430, align 8, !tbaa !9
  %432 = icmp slt i64 %427, %431
  br i1 %432, label %433, label %455

433:                                              ; preds = %418
  %434 = load ptr, ptr %37, align 8, !tbaa !5
  %435 = load i64, ptr %30, align 8, !tbaa !9
  %436 = getelementptr inbounds i64, ptr %434, i64 %435
  %437 = load i64, ptr %436, align 8, !tbaa !9
  %438 = load ptr, ptr %41, align 8, !tbaa !5
  %439 = load i64, ptr %30, align 8, !tbaa !9
  %440 = getelementptr inbounds i64, ptr %438, i64 %439
  %441 = load i64, ptr %440, align 8, !tbaa !9
  %442 = icmp sgt i64 %437, %441
  br i1 %442, label %443, label %455

443:                                              ; preds = %433
  %444 = load ptr, ptr %45, align 8, !tbaa !5
  %445 = load i64, ptr %18, align 8, !tbaa !9
  %446 = getelementptr inbounds %struct.edegreedef, ptr %444, i64 %445
  %447 = getelementptr inbounds %struct.edegreedef, ptr %446, i32 0, i32 1
  %448 = load i64, ptr %447, align 8, !tbaa !45
  %449 = load ptr, ptr %46, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.rinfodef, ptr %449, i32 0, i32 0
  %451 = load i64, ptr %450, align 8, !tbaa !36
  %452 = sub nsw i64 %448, %451
  %453 = icmp slt i64 %452, 0
  br i1 %453, label %454, label %455

454:                                              ; preds = %443
  br label %277

455:                                              ; preds = %443, %433, %418
  %456 = load ptr, ptr %45, align 8, !tbaa !5
  %457 = load i64, ptr %18, align 8, !tbaa !9
  %458 = getelementptr inbounds %struct.edegreedef, ptr %456, i64 %457
  %459 = getelementptr inbounds %struct.edegreedef, ptr %458, i32 0, i32 1
  %460 = load i64, ptr %459, align 8, !tbaa !45
  %461 = load ptr, ptr %46, align 8, !tbaa !5
  %462 = getelementptr inbounds %struct.rinfodef, ptr %461, i32 0, i32 0
  %463 = load i64, ptr %462, align 8, !tbaa !36
  %464 = sub nsw i64 %460, %463
  %465 = load ptr, ptr %8, align 8, !tbaa !5
  %466 = getelementptr inbounds %struct.graphdef, ptr %465, i32 0, i32 16
  %467 = load i64, ptr %466, align 8, !tbaa !31
  %468 = sub nsw i64 %467, %464
  store i64 %468, ptr %466, align 8, !tbaa !31
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = getelementptr inbounds %struct.controldef, ptr %469, i32 0, i32 1
  %471 = load i64, ptr %470, align 8, !tbaa !26
  %472 = and i64 %471, 32
  %473 = icmp ne i64 %472, 0
  br i1 %473, label %474, label %490

474:                                              ; preds = %455
  %475 = load i64, ptr %13, align 8, !tbaa !9
  %476 = load i64, ptr %30, align 8, !tbaa !9
  %477 = load ptr, ptr %45, align 8, !tbaa !5
  %478 = load i64, ptr %18, align 8, !tbaa !9
  %479 = getelementptr inbounds %struct.edegreedef, ptr %477, i64 %478
  %480 = getelementptr inbounds %struct.edegreedef, ptr %479, i32 0, i32 1
  %481 = load i64, ptr %480, align 8, !tbaa !45
  %482 = load ptr, ptr %46, align 8, !tbaa !5
  %483 = getelementptr inbounds %struct.rinfodef, ptr %482, i32 0, i32 0
  %484 = load i64, ptr %483, align 8, !tbaa !36
  %485 = sub nsw i64 %481, %484
  %486 = load ptr, ptr %8, align 8, !tbaa !5
  %487 = getelementptr inbounds %struct.graphdef, ptr %486, i32 0, i32 16
  %488 = load i64, ptr %487, align 8, !tbaa !31
  %489 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, i64 noundef %475, i64 noundef %476, i64 noundef %485, i64 noundef %488)
  br label %490

490:                                              ; preds = %474, %455
  %491 = load i64, ptr %30, align 8, !tbaa !9
  %492 = load ptr, ptr %36, align 8, !tbaa !5
  %493 = load i64, ptr %13, align 8, !tbaa !9
  %494 = getelementptr inbounds i64, ptr %492, i64 %493
  store i64 %491, ptr %494, align 8, !tbaa !9
  br label %495

495:                                              ; preds = %490
  %496 = load i64, ptr %32, align 8, !tbaa !9
  %497 = load ptr, ptr %37, align 8, !tbaa !5
  %498 = load i64, ptr %30, align 8, !tbaa !9
  %499 = getelementptr inbounds i64, ptr %497, i64 %498
  %500 = load i64, ptr %499, align 8, !tbaa !9
  %501 = add nsw i64 %500, %496
  store i64 %501, ptr %499, align 8, !tbaa !9
  %502 = load i64, ptr %32, align 8, !tbaa !9
  %503 = load ptr, ptr %37, align 8, !tbaa !5
  %504 = load i64, ptr %28, align 8, !tbaa !9
  %505 = getelementptr inbounds i64, ptr %503, i64 %504
  %506 = load i64, ptr %505, align 8, !tbaa !9
  %507 = sub nsw i64 %506, %502
  store i64 %507, ptr %505, align 8, !tbaa !9
  br label %508

508:                                              ; preds = %495
  br label %509

509:                                              ; preds = %508
  %510 = load ptr, ptr %46, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.rinfodef, ptr %510, i32 0, i32 0
  %512 = load i64, ptr %511, align 8, !tbaa !36
  %513 = load ptr, ptr %45, align 8, !tbaa !5
  %514 = load i64, ptr %18, align 8, !tbaa !9
  %515 = getelementptr inbounds %struct.edegreedef, ptr %513, i64 %514
  %516 = getelementptr inbounds %struct.edegreedef, ptr %515, i32 0, i32 1
  %517 = load i64, ptr %516, align 8, !tbaa !45
  %518 = sub nsw i64 %512, %517
  %519 = load ptr, ptr %46, align 8, !tbaa !5
  %520 = getelementptr inbounds %struct.rinfodef, ptr %519, i32 0, i32 1
  %521 = load i64, ptr %520, align 8, !tbaa !34
  %522 = add nsw i64 %521, %518
  store i64 %522, ptr %520, align 8, !tbaa !34
  br label %523

523:                                              ; preds = %509
  %524 = load ptr, ptr %46, align 8, !tbaa !5
  %525 = getelementptr inbounds %struct.rinfodef, ptr %524, i32 0, i32 0
  %526 = load i64, ptr %525, align 8, !tbaa !36
  store i64 %526, ptr %16, align 8, !tbaa !9
  %527 = load ptr, ptr %45, align 8, !tbaa !5
  %528 = load i64, ptr %18, align 8, !tbaa !9
  %529 = getelementptr inbounds %struct.edegreedef, ptr %527, i64 %528
  %530 = getelementptr inbounds %struct.edegreedef, ptr %529, i32 0, i32 1
  %531 = load i64, ptr %530, align 8, !tbaa !45
  %532 = load ptr, ptr %46, align 8, !tbaa !5
  %533 = getelementptr inbounds %struct.rinfodef, ptr %532, i32 0, i32 0
  store i64 %531, ptr %533, align 8, !tbaa !36
  %534 = load i64, ptr %16, align 8, !tbaa !9
  %535 = load ptr, ptr %45, align 8, !tbaa !5
  %536 = load i64, ptr %18, align 8, !tbaa !9
  %537 = getelementptr inbounds %struct.edegreedef, ptr %535, i64 %536
  %538 = getelementptr inbounds %struct.edegreedef, ptr %537, i32 0, i32 1
  store i64 %534, ptr %538, align 8, !tbaa !45
  br label %539

539:                                              ; preds = %523
  br label %540

540:                                              ; preds = %539
  %541 = load ptr, ptr %45, align 8, !tbaa !5
  %542 = load i64, ptr %18, align 8, !tbaa !9
  %543 = getelementptr inbounds %struct.edegreedef, ptr %541, i64 %542
  %544 = getelementptr inbounds %struct.edegreedef, ptr %543, i32 0, i32 1
  %545 = load i64, ptr %544, align 8, !tbaa !45
  %546 = icmp eq i64 %545, 0
  br i1 %546, label %547, label %557

547:                                              ; preds = %540
  %548 = load ptr, ptr %45, align 8, !tbaa !5
  %549 = load i64, ptr %18, align 8, !tbaa !9
  %550 = getelementptr inbounds %struct.edegreedef, ptr %548, i64 %549
  %551 = load ptr, ptr %45, align 8, !tbaa !5
  %552 = load ptr, ptr %46, align 8, !tbaa !5
  %553 = getelementptr inbounds %struct.rinfodef, ptr %552, i32 0, i32 2
  %554 = load i64, ptr %553, align 8, !tbaa !40
  %555 = add nsw i64 %554, -1
  store i64 %555, ptr %553, align 8, !tbaa !40
  %556 = getelementptr inbounds %struct.edegreedef, ptr %551, i64 %555
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %550, ptr align 8 %556, i64 16, i1 false), !tbaa.struct !46
  br label %563

557:                                              ; preds = %540
  %558 = load i64, ptr %28, align 8, !tbaa !9
  %559 = load ptr, ptr %45, align 8, !tbaa !5
  %560 = load i64, ptr %18, align 8, !tbaa !9
  %561 = getelementptr inbounds %struct.edegreedef, ptr %559, i64 %560
  %562 = getelementptr inbounds %struct.edegreedef, ptr %561, i32 0, i32 0
  store i64 %558, ptr %562, align 8, !tbaa !41
  br label %563

563:                                              ; preds = %557, %547
  %564 = load ptr, ptr %46, align 8, !tbaa !5
  %565 = getelementptr inbounds %struct.rinfodef, ptr %564, i32 0, i32 1
  %566 = load i64, ptr %565, align 8, !tbaa !34
  %567 = icmp eq i64 %566, 0
  br i1 %567, label %568, label %596

568:                                              ; preds = %563
  br label %569

569:                                              ; preds = %568
  %570 = load ptr, ptr %40, align 8, !tbaa !5
  %571 = load i64, ptr %22, align 8, !tbaa !9
  %572 = add nsw i64 %571, -1
  store i64 %572, ptr %22, align 8, !tbaa !9
  %573 = getelementptr inbounds i64, ptr %570, i64 %572
  %574 = load i64, ptr %573, align 8, !tbaa !9
  %575 = load ptr, ptr %40, align 8, !tbaa !5
  %576 = load ptr, ptr %39, align 8, !tbaa !5
  %577 = load i64, ptr %13, align 8, !tbaa !9
  %578 = getelementptr inbounds i64, ptr %576, i64 %577
  %579 = load i64, ptr %578, align 8, !tbaa !9
  %580 = getelementptr inbounds i64, ptr %575, i64 %579
  store i64 %574, ptr %580, align 8, !tbaa !9
  %581 = load ptr, ptr %39, align 8, !tbaa !5
  %582 = load i64, ptr %13, align 8, !tbaa !9
  %583 = getelementptr inbounds i64, ptr %581, i64 %582
  %584 = load i64, ptr %583, align 8, !tbaa !9
  %585 = load ptr, ptr %39, align 8, !tbaa !5
  %586 = load ptr, ptr %40, align 8, !tbaa !5
  %587 = load i64, ptr %22, align 8, !tbaa !9
  %588 = getelementptr inbounds i64, ptr %586, i64 %587
  %589 = load i64, ptr %588, align 8, !tbaa !9
  %590 = getelementptr inbounds i64, ptr %585, i64 %589
  store i64 %584, ptr %590, align 8, !tbaa !9
  %591 = load ptr, ptr %39, align 8, !tbaa !5
  %592 = load i64, ptr %13, align 8, !tbaa !9
  %593 = getelementptr inbounds i64, ptr %591, i64 %592
  store i64 -1, ptr %593, align 8, !tbaa !9
  br label %594

594:                                              ; preds = %569
  br label %595

595:                                              ; preds = %594
  br label %596

596:                                              ; preds = %595, %563
  %597 = load ptr, ptr %33, align 8, !tbaa !5
  %598 = load i64, ptr %13, align 8, !tbaa !9
  %599 = getelementptr inbounds i64, ptr %597, i64 %598
  %600 = load i64, ptr %599, align 8, !tbaa !9
  store i64 %600, ptr %16, align 8, !tbaa !9
  br label %601

601:                                              ; preds = %953, %596
  %602 = load i64, ptr %16, align 8, !tbaa !9
  %603 = load ptr, ptr %33, align 8, !tbaa !5
  %604 = load i64, ptr %13, align 8, !tbaa !9
  %605 = add nsw i64 %604, 1
  %606 = getelementptr inbounds i64, ptr %603, i64 %605
  %607 = load i64, ptr %606, align 8, !tbaa !9
  %608 = icmp slt i64 %602, %607
  br i1 %608, label %609, label %956

609:                                              ; preds = %601
  %610 = load ptr, ptr %34, align 8, !tbaa !5
  %611 = load i64, ptr %16, align 8, !tbaa !9
  %612 = getelementptr inbounds i64, ptr %610, i64 %611
  %613 = load i64, ptr %612, align 8, !tbaa !9
  store i64 %613, ptr %14, align 8, !tbaa !9
  %614 = load ptr, ptr %36, align 8, !tbaa !5
  %615 = load i64, ptr %14, align 8, !tbaa !9
  %616 = getelementptr inbounds i64, ptr %614, i64 %615
  %617 = load i64, ptr %616, align 8, !tbaa !9
  store i64 %617, ptr %29, align 8, !tbaa !9
  %618 = load ptr, ptr %8, align 8, !tbaa !5
  %619 = getelementptr inbounds %struct.graphdef, ptr %618, i32 0, i32 25
  %620 = load ptr, ptr %619, align 8, !tbaa !33
  %621 = load i64, ptr %14, align 8, !tbaa !9
  %622 = getelementptr inbounds %struct.rinfodef, ptr %620, i64 %621
  store ptr %622, ptr %46, align 8, !tbaa !5
  %623 = load ptr, ptr %46, align 8, !tbaa !5
  %624 = getelementptr inbounds %struct.rinfodef, ptr %623, i32 0, i32 3
  %625 = load ptr, ptr %624, align 8, !tbaa !39
  %626 = icmp eq ptr %625, null
  br i1 %626, label %627, label %654

627:                                              ; preds = %609
  %628 = load ptr, ptr %7, align 8, !tbaa !5
  %629 = getelementptr inbounds %struct.controldef, ptr %628, i32 0, i32 11
  %630 = getelementptr inbounds %struct.workspacedef, ptr %629, i32 0, i32 3
  %631 = load ptr, ptr %630, align 8, !tbaa !47
  %632 = load ptr, ptr %7, align 8, !tbaa !5
  %633 = getelementptr inbounds %struct.controldef, ptr %632, i32 0, i32 11
  %634 = getelementptr inbounds %struct.workspacedef, ptr %633, i32 0, i32 5
  %635 = load i64, ptr %634, align 8, !tbaa !48
  %636 = getelementptr inbounds %struct.edegreedef, ptr %631, i64 %635
  %637 = load ptr, ptr %46, align 8, !tbaa !5
  %638 = getelementptr inbounds %struct.rinfodef, ptr %637, i32 0, i32 3
  store ptr %636, ptr %638, align 8, !tbaa !39
  %639 = load ptr, ptr %33, align 8, !tbaa !5
  %640 = load i64, ptr %14, align 8, !tbaa !9
  %641 = add nsw i64 %640, 1
  %642 = getelementptr inbounds i64, ptr %639, i64 %641
  %643 = load i64, ptr %642, align 8, !tbaa !9
  %644 = load ptr, ptr %33, align 8, !tbaa !5
  %645 = load i64, ptr %14, align 8, !tbaa !9
  %646 = getelementptr inbounds i64, ptr %644, i64 %645
  %647 = load i64, ptr %646, align 8, !tbaa !9
  %648 = sub nsw i64 %643, %647
  %649 = load ptr, ptr %7, align 8, !tbaa !5
  %650 = getelementptr inbounds %struct.controldef, ptr %649, i32 0, i32 11
  %651 = getelementptr inbounds %struct.workspacedef, ptr %650, i32 0, i32 5
  %652 = load i64, ptr %651, align 8, !tbaa !48
  %653 = add nsw i64 %652, %648
  store i64 %653, ptr %651, align 8, !tbaa !48
  br label %654

654:                                              ; preds = %627, %609
  %655 = load ptr, ptr %46, align 8, !tbaa !5
  %656 = getelementptr inbounds %struct.rinfodef, ptr %655, i32 0, i32 3
  %657 = load ptr, ptr %656, align 8, !tbaa !39
  store ptr %657, ptr %45, align 8, !tbaa !5
  %658 = load ptr, ptr %46, align 8, !tbaa !5
  %659 = getelementptr inbounds %struct.rinfodef, ptr %658, i32 0, i32 1
  %660 = load i64, ptr %659, align 8, !tbaa !34
  %661 = load ptr, ptr %46, align 8, !tbaa !5
  %662 = getelementptr inbounds %struct.rinfodef, ptr %661, i32 0, i32 0
  %663 = load i64, ptr %662, align 8, !tbaa !36
  %664 = sub nsw i64 %660, %663
  store i64 %664, ptr %25, align 8, !tbaa !9
  %665 = load i64, ptr %29, align 8, !tbaa !9
  %666 = load i64, ptr %28, align 8, !tbaa !9
  %667 = icmp eq i64 %665, %666
  br i1 %667, label %668, label %712

668:                                              ; preds = %654
  br label %669

669:                                              ; preds = %668
  %670 = load ptr, ptr %35, align 8, !tbaa !5
  %671 = load i64, ptr %16, align 8, !tbaa !9
  %672 = getelementptr inbounds i64, ptr %670, i64 %671
  %673 = load i64, ptr %672, align 8, !tbaa !9
  %674 = load ptr, ptr %46, align 8, !tbaa !5
  %675 = getelementptr inbounds %struct.rinfodef, ptr %674, i32 0, i32 1
  %676 = load i64, ptr %675, align 8, !tbaa !34
  %677 = add nsw i64 %676, %673
  store i64 %677, ptr %675, align 8, !tbaa !34
  %678 = load ptr, ptr %35, align 8, !tbaa !5
  %679 = load i64, ptr %16, align 8, !tbaa !9
  %680 = getelementptr inbounds i64, ptr %678, i64 %679
  %681 = load i64, ptr %680, align 8, !tbaa !9
  %682 = load ptr, ptr %46, align 8, !tbaa !5
  %683 = getelementptr inbounds %struct.rinfodef, ptr %682, i32 0, i32 0
  %684 = load i64, ptr %683, align 8, !tbaa !36
  %685 = sub nsw i64 %684, %681
  store i64 %685, ptr %683, align 8, !tbaa !36
  br label %686

686:                                              ; preds = %669
  br label %687

687:                                              ; preds = %686
  %688 = load ptr, ptr %46, align 8, !tbaa !5
  %689 = getelementptr inbounds %struct.rinfodef, ptr %688, i32 0, i32 1
  %690 = load i64, ptr %689, align 8, !tbaa !34
  %691 = icmp sgt i64 %690, 0
  br i1 %691, label %692, label %711

692:                                              ; preds = %687
  %693 = load ptr, ptr %39, align 8, !tbaa !5
  %694 = load i64, ptr %14, align 8, !tbaa !9
  %695 = getelementptr inbounds i64, ptr %693, i64 %694
  %696 = load i64, ptr %695, align 8, !tbaa !9
  %697 = icmp eq i64 %696, -1
  br i1 %697, label %698, label %711

698:                                              ; preds = %692
  br label %699

699:                                              ; preds = %698
  %700 = load i64, ptr %14, align 8, !tbaa !9
  %701 = load ptr, ptr %40, align 8, !tbaa !5
  %702 = load i64, ptr %22, align 8, !tbaa !9
  %703 = getelementptr inbounds i64, ptr %701, i64 %702
  store i64 %700, ptr %703, align 8, !tbaa !9
  %704 = load i64, ptr %22, align 8, !tbaa !9
  %705 = add nsw i64 %704, 1
  store i64 %705, ptr %22, align 8, !tbaa !9
  %706 = load ptr, ptr %39, align 8, !tbaa !5
  %707 = load i64, ptr %14, align 8, !tbaa !9
  %708 = getelementptr inbounds i64, ptr %706, i64 %707
  store i64 %704, ptr %708, align 8, !tbaa !9
  br label %709

709:                                              ; preds = %699
  br label %710

710:                                              ; preds = %709
  br label %711

711:                                              ; preds = %710, %692, %687
  br label %776

712:                                              ; preds = %654
  %713 = load i64, ptr %29, align 8, !tbaa !9
  %714 = load i64, ptr %30, align 8, !tbaa !9
  %715 = icmp eq i64 %713, %714
  br i1 %715, label %716, label %775

716:                                              ; preds = %712
  br label %717

717:                                              ; preds = %716
  %718 = load ptr, ptr %35, align 8, !tbaa !5
  %719 = load i64, ptr %16, align 8, !tbaa !9
  %720 = getelementptr inbounds i64, ptr %718, i64 %719
  %721 = load i64, ptr %720, align 8, !tbaa !9
  %722 = load ptr, ptr %46, align 8, !tbaa !5
  %723 = getelementptr inbounds %struct.rinfodef, ptr %722, i32 0, i32 0
  %724 = load i64, ptr %723, align 8, !tbaa !36
  %725 = add nsw i64 %724, %721
  store i64 %725, ptr %723, align 8, !tbaa !36
  %726 = load ptr, ptr %35, align 8, !tbaa !5
  %727 = load i64, ptr %16, align 8, !tbaa !9
  %728 = getelementptr inbounds i64, ptr %726, i64 %727
  %729 = load i64, ptr %728, align 8, !tbaa !9
  %730 = load ptr, ptr %46, align 8, !tbaa !5
  %731 = getelementptr inbounds %struct.rinfodef, ptr %730, i32 0, i32 1
  %732 = load i64, ptr %731, align 8, !tbaa !34
  %733 = sub nsw i64 %732, %729
  store i64 %733, ptr %731, align 8, !tbaa !34
  br label %734

734:                                              ; preds = %717
  br label %735

735:                                              ; preds = %734
  %736 = load ptr, ptr %46, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.rinfodef, ptr %736, i32 0, i32 1
  %738 = load i64, ptr %737, align 8, !tbaa !34
  %739 = icmp eq i64 %738, 0
  br i1 %739, label %740, label %774

740:                                              ; preds = %735
  %741 = load ptr, ptr %39, align 8, !tbaa !5
  %742 = load i64, ptr %14, align 8, !tbaa !9
  %743 = getelementptr inbounds i64, ptr %741, i64 %742
  %744 = load i64, ptr %743, align 8, !tbaa !9
  %745 = icmp ne i64 %744, -1
  br i1 %745, label %746, label %774

746:                                              ; preds = %740
  br label %747

747:                                              ; preds = %746
  %748 = load ptr, ptr %40, align 8, !tbaa !5
  %749 = load i64, ptr %22, align 8, !tbaa !9
  %750 = add nsw i64 %749, -1
  store i64 %750, ptr %22, align 8, !tbaa !9
  %751 = getelementptr inbounds i64, ptr %748, i64 %750
  %752 = load i64, ptr %751, align 8, !tbaa !9
  %753 = load ptr, ptr %40, align 8, !tbaa !5
  %754 = load ptr, ptr %39, align 8, !tbaa !5
  %755 = load i64, ptr %14, align 8, !tbaa !9
  %756 = getelementptr inbounds i64, ptr %754, i64 %755
  %757 = load i64, ptr %756, align 8, !tbaa !9
  %758 = getelementptr inbounds i64, ptr %753, i64 %757
  store i64 %752, ptr %758, align 8, !tbaa !9
  %759 = load ptr, ptr %39, align 8, !tbaa !5
  %760 = load i64, ptr %14, align 8, !tbaa !9
  %761 = getelementptr inbounds i64, ptr %759, i64 %760
  %762 = load i64, ptr %761, align 8, !tbaa !9
  %763 = load ptr, ptr %39, align 8, !tbaa !5
  %764 = load ptr, ptr %40, align 8, !tbaa !5
  %765 = load i64, ptr %22, align 8, !tbaa !9
  %766 = getelementptr inbounds i64, ptr %764, i64 %765
  %767 = load i64, ptr %766, align 8, !tbaa !9
  %768 = getelementptr inbounds i64, ptr %763, i64 %767
  store i64 %762, ptr %768, align 8, !tbaa !9
  %769 = load ptr, ptr %39, align 8, !tbaa !5
  %770 = load i64, ptr %14, align 8, !tbaa !9
  %771 = getelementptr inbounds i64, ptr %769, i64 %770
  store i64 -1, ptr %771, align 8, !tbaa !9
  br label %772

772:                                              ; preds = %747
  br label %773

773:                                              ; preds = %772
  br label %774

774:                                              ; preds = %773, %740, %735
  br label %775

775:                                              ; preds = %774, %712
  br label %776

776:                                              ; preds = %775, %711
  %777 = load i64, ptr %29, align 8, !tbaa !9
  %778 = load i64, ptr %28, align 8, !tbaa !9
  %779 = icmp ne i64 %777, %778
  br i1 %779, label %780, label %833

780:                                              ; preds = %776
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %781

781:                                              ; preds = %829, %780
  %782 = load i64, ptr %18, align 8, !tbaa !9
  %783 = load ptr, ptr %46, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.rinfodef, ptr %783, i32 0, i32 2
  %785 = load i64, ptr %784, align 8, !tbaa !40
  %786 = icmp slt i64 %782, %785
  br i1 %786, label %787, label %832

787:                                              ; preds = %781
  %788 = load ptr, ptr %45, align 8, !tbaa !5
  %789 = load i64, ptr %18, align 8, !tbaa !9
  %790 = getelementptr inbounds %struct.edegreedef, ptr %788, i64 %789
  %791 = getelementptr inbounds %struct.edegreedef, ptr %790, i32 0, i32 0
  %792 = load i64, ptr %791, align 8, !tbaa !41
  %793 = load i64, ptr %28, align 8, !tbaa !9
  %794 = icmp eq i64 %792, %793
  br i1 %794, label %795, label %828

795:                                              ; preds = %787
  %796 = load ptr, ptr %45, align 8, !tbaa !5
  %797 = load i64, ptr %18, align 8, !tbaa !9
  %798 = getelementptr inbounds %struct.edegreedef, ptr %796, i64 %797
  %799 = getelementptr inbounds %struct.edegreedef, ptr %798, i32 0, i32 1
  %800 = load i64, ptr %799, align 8, !tbaa !45
  %801 = load ptr, ptr %35, align 8, !tbaa !5
  %802 = load i64, ptr %16, align 8, !tbaa !9
  %803 = getelementptr inbounds i64, ptr %801, i64 %802
  %804 = load i64, ptr %803, align 8, !tbaa !9
  %805 = icmp eq i64 %800, %804
  br i1 %805, label %806, label %816

806:                                              ; preds = %795
  %807 = load ptr, ptr %45, align 8, !tbaa !5
  %808 = load i64, ptr %18, align 8, !tbaa !9
  %809 = getelementptr inbounds %struct.edegreedef, ptr %807, i64 %808
  %810 = load ptr, ptr %45, align 8, !tbaa !5
  %811 = load ptr, ptr %46, align 8, !tbaa !5
  %812 = getelementptr inbounds %struct.rinfodef, ptr %811, i32 0, i32 2
  %813 = load i64, ptr %812, align 8, !tbaa !40
  %814 = add nsw i64 %813, -1
  store i64 %814, ptr %812, align 8, !tbaa !40
  %815 = getelementptr inbounds %struct.edegreedef, ptr %810, i64 %814
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %809, ptr align 8 %815, i64 16, i1 false), !tbaa.struct !46
  br label %827

816:                                              ; preds = %795
  %817 = load ptr, ptr %35, align 8, !tbaa !5
  %818 = load i64, ptr %16, align 8, !tbaa !9
  %819 = getelementptr inbounds i64, ptr %817, i64 %818
  %820 = load i64, ptr %819, align 8, !tbaa !9
  %821 = load ptr, ptr %45, align 8, !tbaa !5
  %822 = load i64, ptr %18, align 8, !tbaa !9
  %823 = getelementptr inbounds %struct.edegreedef, ptr %821, i64 %822
  %824 = getelementptr inbounds %struct.edegreedef, ptr %823, i32 0, i32 1
  %825 = load i64, ptr %824, align 8, !tbaa !45
  %826 = sub nsw i64 %825, %820
  store i64 %826, ptr %824, align 8, !tbaa !45
  br label %827

827:                                              ; preds = %816, %806
  br label %832

828:                                              ; preds = %787
  br label %829

829:                                              ; preds = %828
  %830 = load i64, ptr %18, align 8, !tbaa !9
  %831 = add nsw i64 %830, 1
  store i64 %831, ptr %18, align 8, !tbaa !9
  br label %781, !llvm.loop !49

832:                                              ; preds = %827, %781
  br label %833

833:                                              ; preds = %832, %776
  %834 = load i64, ptr %29, align 8, !tbaa !9
  %835 = load i64, ptr %30, align 8, !tbaa !9
  %836 = icmp ne i64 %834, %835
  br i1 %836, label %837, label %893

837:                                              ; preds = %833
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %838

838:                                              ; preds = %864, %837
  %839 = load i64, ptr %18, align 8, !tbaa !9
  %840 = load ptr, ptr %46, align 8, !tbaa !5
  %841 = getelementptr inbounds %struct.rinfodef, ptr %840, i32 0, i32 2
  %842 = load i64, ptr %841, align 8, !tbaa !40
  %843 = icmp slt i64 %839, %842
  br i1 %843, label %844, label %867

844:                                              ; preds = %838
  %845 = load ptr, ptr %45, align 8, !tbaa !5
  %846 = load i64, ptr %18, align 8, !tbaa !9
  %847 = getelementptr inbounds %struct.edegreedef, ptr %845, i64 %846
  %848 = getelementptr inbounds %struct.edegreedef, ptr %847, i32 0, i32 0
  %849 = load i64, ptr %848, align 8, !tbaa !41
  %850 = load i64, ptr %30, align 8, !tbaa !9
  %851 = icmp eq i64 %849, %850
  br i1 %851, label %852, label %863

852:                                              ; preds = %844
  %853 = load ptr, ptr %35, align 8, !tbaa !5
  %854 = load i64, ptr %16, align 8, !tbaa !9
  %855 = getelementptr inbounds i64, ptr %853, i64 %854
  %856 = load i64, ptr %855, align 8, !tbaa !9
  %857 = load ptr, ptr %45, align 8, !tbaa !5
  %858 = load i64, ptr %18, align 8, !tbaa !9
  %859 = getelementptr inbounds %struct.edegreedef, ptr %857, i64 %858
  %860 = getelementptr inbounds %struct.edegreedef, ptr %859, i32 0, i32 1
  %861 = load i64, ptr %860, align 8, !tbaa !45
  %862 = add nsw i64 %861, %856
  store i64 %862, ptr %860, align 8, !tbaa !45
  br label %867

863:                                              ; preds = %844
  br label %864

864:                                              ; preds = %863
  %865 = load i64, ptr %18, align 8, !tbaa !9
  %866 = add nsw i64 %865, 1
  store i64 %866, ptr %18, align 8, !tbaa !9
  br label %838, !llvm.loop !50

867:                                              ; preds = %852, %838
  %868 = load i64, ptr %18, align 8, !tbaa !9
  %869 = load ptr, ptr %46, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.rinfodef, ptr %869, i32 0, i32 2
  %871 = load i64, ptr %870, align 8, !tbaa !40
  %872 = icmp eq i64 %868, %871
  br i1 %872, label %873, label %892

873:                                              ; preds = %867
  %874 = load i64, ptr %30, align 8, !tbaa !9
  %875 = load ptr, ptr %45, align 8, !tbaa !5
  %876 = load ptr, ptr %46, align 8, !tbaa !5
  %877 = getelementptr inbounds %struct.rinfodef, ptr %876, i32 0, i32 2
  %878 = load i64, ptr %877, align 8, !tbaa !40
  %879 = getelementptr inbounds %struct.edegreedef, ptr %875, i64 %878
  %880 = getelementptr inbounds %struct.edegreedef, ptr %879, i32 0, i32 0
  store i64 %874, ptr %880, align 8, !tbaa !41
  %881 = load ptr, ptr %35, align 8, !tbaa !5
  %882 = load i64, ptr %16, align 8, !tbaa !9
  %883 = getelementptr inbounds i64, ptr %881, i64 %882
  %884 = load i64, ptr %883, align 8, !tbaa !9
  %885 = load ptr, ptr %45, align 8, !tbaa !5
  %886 = load ptr, ptr %46, align 8, !tbaa !5
  %887 = getelementptr inbounds %struct.rinfodef, ptr %886, i32 0, i32 2
  %888 = load i64, ptr %887, align 8, !tbaa !40
  %889 = add nsw i64 %888, 1
  store i64 %889, ptr %887, align 8, !tbaa !40
  %890 = getelementptr inbounds %struct.edegreedef, ptr %885, i64 %888
  %891 = getelementptr inbounds %struct.edegreedef, ptr %890, i32 0, i32 1
  store i64 %884, ptr %891, align 8, !tbaa !45
  br label %892

892:                                              ; preds = %873, %867
  br label %893

893:                                              ; preds = %892, %833
  %894 = load i64, ptr %29, align 8, !tbaa !9
  %895 = load i64, ptr %30, align 8, !tbaa !9
  %896 = icmp eq i64 %894, %895
  br i1 %896, label %901, label %897

897:                                              ; preds = %893
  %898 = load i64, ptr %29, align 8, !tbaa !9
  %899 = load i64, ptr %28, align 8, !tbaa !9
  %900 = icmp eq i64 %898, %899
  br i1 %900, label %901, label %952

901:                                              ; preds = %897, %893
  %902 = load ptr, ptr %46, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.rinfodef, ptr %902, i32 0, i32 1
  %904 = load i64, ptr %903, align 8, !tbaa !34
  %905 = load ptr, ptr %46, align 8, !tbaa !5
  %906 = getelementptr inbounds %struct.rinfodef, ptr %905, i32 0, i32 0
  %907 = load i64, ptr %906, align 8, !tbaa !36
  %908 = sub nsw i64 %904, %907
  store i64 %908, ptr %26, align 8, !tbaa !9
  %909 = load ptr, ptr %43, align 8, !tbaa !5
  %910 = load i64, ptr %14, align 8, !tbaa !9
  %911 = getelementptr inbounds i64, ptr %909, i64 %910
  %912 = load i64, ptr %911, align 8, !tbaa !9
  %913 = icmp eq i64 %912, 2
  br i1 %913, label %914, label %932

914:                                              ; preds = %901
  %915 = load ptr, ptr %46, align 8, !tbaa !5
  %916 = getelementptr inbounds %struct.rinfodef, ptr %915, i32 0, i32 1
  %917 = load i64, ptr %916, align 8, !tbaa !34
  %918 = icmp sgt i64 %917, 0
  br i1 %918, label %919, label %924

919:                                              ; preds = %914
  %920 = load i64, ptr %14, align 8, !tbaa !9
  %921 = load i64, ptr %25, align 8, !tbaa !9
  %922 = load i64, ptr %26, align 8, !tbaa !9
  %923 = call i64 @libmetis__PQueueUpdate(ptr noundef %47, i64 noundef %920, i64 noundef %921, i64 noundef %922)
  br label %931

924:                                              ; preds = %914
  %925 = load i64, ptr %14, align 8, !tbaa !9
  %926 = load i64, ptr %25, align 8, !tbaa !9
  %927 = call i64 @libmetis__PQueueDelete(ptr noundef %47, i64 noundef %925, i64 noundef %926)
  %928 = load ptr, ptr %43, align 8, !tbaa !5
  %929 = load i64, ptr %14, align 8, !tbaa !9
  %930 = getelementptr inbounds i64, ptr %928, i64 %929
  store i64 -1, ptr %930, align 8, !tbaa !9
  br label %931

931:                                              ; preds = %924, %919
  br label %951

932:                                              ; preds = %901
  %933 = load ptr, ptr %43, align 8, !tbaa !5
  %934 = load i64, ptr %14, align 8, !tbaa !9
  %935 = getelementptr inbounds i64, ptr %933, i64 %934
  %936 = load i64, ptr %935, align 8, !tbaa !9
  %937 = icmp eq i64 %936, -1
  br i1 %937, label %938, label %950

938:                                              ; preds = %932
  %939 = load ptr, ptr %46, align 8, !tbaa !5
  %940 = getelementptr inbounds %struct.rinfodef, ptr %939, i32 0, i32 1
  %941 = load i64, ptr %940, align 8, !tbaa !34
  %942 = icmp sgt i64 %941, 0
  br i1 %942, label %943, label %950

943:                                              ; preds = %938
  %944 = load i64, ptr %14, align 8, !tbaa !9
  %945 = load i64, ptr %26, align 8, !tbaa !9
  %946 = call i64 @libmetis__PQueueInsert(ptr noundef %47, i64 noundef %944, i64 noundef %945)
  %947 = load ptr, ptr %43, align 8, !tbaa !5
  %948 = load i64, ptr %14, align 8, !tbaa !9
  %949 = getelementptr inbounds i64, ptr %947, i64 %948
  store i64 2, ptr %949, align 8, !tbaa !9
  br label %950

950:                                              ; preds = %943, %938, %932
  br label %951

951:                                              ; preds = %950, %931
  br label %952

952:                                              ; preds = %951, %897
  br label %953

953:                                              ; preds = %952
  %954 = load i64, ptr %16, align 8, !tbaa !9
  %955 = add nsw i64 %954, 1
  store i64 %955, ptr %16, align 8, !tbaa !9
  br label %601, !llvm.loop !51

956:                                              ; preds = %601
  %957 = load i64, ptr %27, align 8, !tbaa !9
  %958 = add nsw i64 %957, 1
  store i64 %958, ptr %27, align 8, !tbaa !9
  br label %277

959:                                              ; preds = %280
  %960 = load i64, ptr %22, align 8, !tbaa !9
  %961 = load ptr, ptr %8, align 8, !tbaa !5
  %962 = getelementptr inbounds %struct.graphdef, ptr %961, i32 0, i32 20
  store i64 %960, ptr %962, align 8, !tbaa !30
  %963 = load ptr, ptr %7, align 8, !tbaa !5
  %964 = getelementptr inbounds %struct.controldef, ptr %963, i32 0, i32 1
  %965 = load i64, ptr %964, align 8, !tbaa !26
  %966 = and i64 %965, 8
  %967 = icmp ne i64 %966, 0
  br i1 %967, label %968, label %1003

968:                                              ; preds = %959
  %969 = load ptr, ptr %37, align 8, !tbaa !5
  %970 = load i64, ptr %9, align 8, !tbaa !9
  %971 = load ptr, ptr %37, align 8, !tbaa !5
  %972 = call i64 @libmetis__idxargmin(i64 noundef %970, ptr noundef %971)
  %973 = getelementptr inbounds i64, ptr %969, i64 %972
  %974 = load i64, ptr %973, align 8, !tbaa !9
  %975 = load ptr, ptr %37, align 8, !tbaa !5
  %976 = load i64, ptr %9, align 8, !tbaa !9
  %977 = load ptr, ptr %37, align 8, !tbaa !5
  %978 = call i64 @libmetis__idxargmax(i64 noundef %976, ptr noundef %977)
  %979 = getelementptr inbounds i64, ptr %975, i64 %978
  %980 = load i64, ptr %979, align 8, !tbaa !9
  %981 = load i64, ptr %9, align 8, !tbaa !9
  %982 = sitofp i64 %981 to double
  %983 = fmul double 1.000000e+00, %982
  %984 = load ptr, ptr %37, align 8, !tbaa !5
  %985 = load i64, ptr %9, align 8, !tbaa !9
  %986 = load ptr, ptr %37, align 8, !tbaa !5
  %987 = call i64 @libmetis__idxargmax(i64 noundef %985, ptr noundef %986)
  %988 = getelementptr inbounds i64, ptr %984, i64 %987
  %989 = load i64, ptr %988, align 8, !tbaa !9
  %990 = sitofp i64 %989 to double
  %991 = fmul double %983, %990
  %992 = load i64, ptr %23, align 8, !tbaa !9
  %993 = sitofp i64 %992 to double
  %994 = fdiv double %991, %993
  %995 = load ptr, ptr %8, align 8, !tbaa !5
  %996 = getelementptr inbounds %struct.graphdef, ptr %995, i32 0, i32 20
  %997 = load i64, ptr %996, align 8, !tbaa !30
  %998 = load i64, ptr %27, align 8, !tbaa !9
  %999 = load ptr, ptr %8, align 8, !tbaa !5
  %1000 = getelementptr inbounds %struct.graphdef, ptr %999, i32 0, i32 16
  %1001 = load i64, ptr %1000, align 8, !tbaa !31
  %1002 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %974, i64 noundef %980, double noundef %994, i64 noundef %997, i64 noundef %998, i64 noundef %1001)
  br label %1003

1003:                                             ; preds = %968, %959
  br label %1004

1004:                                             ; preds = %1003
  %1005 = load i64, ptr %20, align 8, !tbaa !9
  %1006 = add nsw i64 %1005, 1
  store i64 %1006, ptr %20, align 8, !tbaa !9
  br label %200, !llvm.loop !52

1007:                                             ; preds = %228, %200
  %1008 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libmetis__PQueueFree(ptr noundef %1008, ptr noundef %47)
  %1009 = load ptr, ptr %7, align 8, !tbaa !5
  %1010 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1009, i64 noundef %1010)
  %1011 = load ptr, ptr %7, align 8, !tbaa !5
  %1012 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1011, i64 noundef %1012)
  %1013 = load ptr, ptr %7, align 8, !tbaa !5
  %1014 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1013, i64 noundef %1014)
  %1015 = load ptr, ptr %7, align 8, !tbaa !5
  %1016 = load i64, ptr %21, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1015, i64 noundef %1016)
  %1017 = load ptr, ptr %7, align 8, !tbaa !5
  %1018 = load i64, ptr %21, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1017, i64 noundef %1018)
  call void @llvm.lifetime.end.p0(i64 88, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  ret void
}

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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = !{!14, !10, i64 0}
!14 = !{!"graphdef", !10, i64 0, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !15, i64 56, !15, i64 60, !15, i64 64, !15, i64 68, !15, 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}
!15 = !{!"int", !7, i64 0}
!16 = !{!14, !6, i64 16}
!17 = !{!14, !6, i64 40}
!18 = !{!14, !6, i64 48}
!19 = !{!14, !6, i64 160}
!20 = !{!14, !6, i64 152}
!21 = !{!14, !6, i64 128}
!22 = !{!14, !6, i64 136}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!14, !6, i64 88}
!26 = !{!27, !10, i64 8}
!27 = !{!"controldef", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !12, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !28, i64 88, !29, i64 152, !29, i64 160, !29, i64 168, !29, i64 176, !29, i64 184, !29, i64 192, !29, i64 200, !29, i64 208, !29, i64 216, !29, i64 224, !29, i64 232, !29, i64 240, !29, i64 248, !29, i64 256, !29, i64 264, !29, i64 272}
!28 = !{!"workspacedef", !6, i64 0, !10, i64 8, !10, i64 16, !6, i64 24, !6, i64 32, !10, i64 40, !6, i64 48, !6, i64 56}
!29 = !{!"double", !7, i64 0}
!30 = !{!14, !10, i64 144}
!31 = !{!14, !10, i64 112}
!32 = distinct !{!32, !24}
!33 = !{!14, !6, i64 184}
!34 = !{!35, !10, i64 8}
!35 = !{!"rinfodef", !10, i64 0, !10, i64 8, !10, i64 16, !6, i64 24}
!36 = !{!35, !10, i64 0}
!37 = distinct !{!37, !24}
!38 = !{!14, !6, i64 24}
!39 = !{!35, !6, i64 24}
!40 = !{!35, !10, i64 16}
!41 = !{!42, !10, i64 0}
!42 = !{!"edegreedef", !10, i64 0, !10, i64 8}
!43 = distinct !{!43, !24}
!44 = distinct !{!44, !24}
!45 = !{!42, !10, i64 8}
!46 = !{i64 0, i64 8, !9, i64 8, i64 8, !9}
!47 = !{!27, !6, i64 112}
!48 = !{!27, !10, i64 128}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = distinct !{!51, !24}
!52 = distinct !{!52, !24}


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

%struct.PQueueType = type { i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr }
%struct.rinfodef = type { i64, i64, i64, ptr }
%struct.edegreedef = type { i64, i64 }

@.str.1 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [60 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 ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #1

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

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

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

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

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

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

declare void @libmetis__idxwspacefree(ptr noundef, i64 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 void @libmetis__PQueueInit(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #1

declare void @libmetis__PQueueReset(ptr noundef) local_unnamed_addr #1

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #1

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

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

declare void @libmetis__PQueueFree(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__Greedy_KWayEdgeBalance(ptr noundef %0, ptr nocapture noundef %1, i64 noundef %2, ptr nocapture noundef readonly %3, float noundef %4, i64 noundef %5) local_unnamed_addr #3 {
  %7 = alloca %struct.PQueueType, align 8
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %7) #4
  %8 = load i64, ptr %1, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %1, i64 16
  %10 = load ptr, ptr %9, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %1, i64 40
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %1, i64 48
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = getelementptr inbounds i8, ptr %1, i64 160
  %16 = load ptr, ptr %15, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %1, i64 152
  %18 = load ptr, ptr %17, align 8, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %1, i64 128
  %20 = load ptr, ptr %19, align 8, !tbaa !17
  %21 = getelementptr inbounds i8, ptr %1, i64 136
  %22 = load ptr, ptr %21, align 8, !tbaa !18
  %23 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %24 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %25 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %2) #4
  %26 = tail call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %22, i64 noundef 1) #4
  %27 = icmp sgt i64 %2, 0
  br i1 %27, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %6
  %28 = sitofp i64 %26 to float
  %29 = fpext float %4 to double
  %30 = fdiv double 1.000000e+00, %29
  br label %31

31:                                               ; preds = %.lr.ph, %31
  %.0430 = phi i64 [ 0, %.lr.ph ], [ %44, %31 ]
  %32 = getelementptr inbounds float, ptr %3, i64 %.0430
  %33 = load float, ptr %32, align 4, !tbaa !19
  %34 = fmul float %33, %28
  %35 = fptosi float %34 to i64
  %36 = getelementptr inbounds i64, ptr %25, i64 %.0430
  store i64 %35, ptr %36, align 8, !tbaa !21
  %37 = fmul float %34, %4
  %38 = fptosi float %37 to i64
  %39 = getelementptr inbounds i64, ptr %24, i64 %.0430
  store i64 %38, ptr %39, align 8, !tbaa !21
  %40 = fpext float %34 to double
  %41 = fmul double %30, %40
  %42 = fptosi double %41 to i64
  %43 = getelementptr inbounds i64, ptr %23, i64 %.0430
  store i64 %42, ptr %43, align 8, !tbaa !21
  %44 = add nuw nsw i64 %.0430, 1
  %exitcond.not = icmp eq i64 %44, %2
  br i1 %exitcond.not, label %._crit_edge, label %31, !llvm.loop !22

._crit_edge:                                      ; preds = %31, %6
  %45 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #4
  %46 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #4
  %47 = getelementptr inbounds i8, ptr %1, i64 88
  %48 = load ptr, ptr %47, align 8, !tbaa !24
  %49 = tail call i64 @libmetis__idxargmax(i64 noundef %8, ptr noundef %48) #4
  %50 = getelementptr inbounds i64, ptr %48, i64 %49
  %51 = load i64, ptr %50, align 8, !tbaa !21
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %7, i64 noundef %8, i64 noundef %51) #4
  %52 = getelementptr inbounds i8, ptr %0, i64 8
  %53 = load i64, ptr %52, align 8, !tbaa !25
  %54 = and i64 %53, 8
  %.not = icmp eq i64 %54, 0
  br i1 %.not, label %78, label %55

55:                                               ; preds = %._crit_edge
  %56 = call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %22) #4
  %57 = getelementptr inbounds i64, ptr %22, i64 %56
  %58 = load i64, ptr %57, align 8, !tbaa !21
  %59 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %60 = getelementptr inbounds i64, ptr %22, i64 %59
  %61 = load i64, ptr %60, align 8, !tbaa !21
  %62 = load i64, ptr %23, align 8, !tbaa !21
  %63 = load i64, ptr %24, align 8, !tbaa !21
  %64 = sitofp i64 %2 to double
  %65 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %66 = getelementptr inbounds i64, ptr %22, i64 %65
  %67 = load i64, ptr %66, align 8, !tbaa !21
  %68 = sitofp i64 %67 to double
  %69 = fmul double %64, %68
  %70 = sitofp i64 %26 to double
  %71 = fdiv double %69, %70
  %72 = load i64, ptr %1, align 8, !tbaa !5
  %73 = getelementptr inbounds i8, ptr %1, i64 144
  %74 = load i64, ptr %73, align 8, !tbaa !29
  %75 = getelementptr inbounds i8, ptr %1, i64 112
  %76 = load i64, ptr %75, align 8, !tbaa !30
  %77 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, i64 noundef %58, i64 noundef %61, i64 noundef %62, i64 noundef %63, double noundef %71, i64 noundef %72, i64 noundef %74, i64 noundef %76) #4
  br label %78

78:                                               ; preds = %55, %._crit_edge
  %79 = icmp sgt i64 %5, 0
  br i1 %79, label %.preheader408.lr.ph, label %._crit_edge485

.preheader408.lr.ph:                              ; preds = %78
  %80 = getelementptr inbounds i8, ptr %1, i64 112
  %81 = getelementptr inbounds i8, ptr %1, i64 144
  %82 = getelementptr inbounds i8, ptr %1, i64 184
  %83 = getelementptr inbounds i8, ptr %1, i64 24
  %84 = getelementptr inbounds i8, ptr %0, i64 112
  %85 = getelementptr inbounds i8, ptr %0, i64 128
  %86 = sitofp i64 %2 to double
  %87 = sitofp i64 %26 to double
  br label %.preheader408

.preheader408:                                    ; preds = %.preheader408.lr.ph, %411
  %.0373484 = phi i64 [ 0, %.preheader408.lr.ph ], [ %412, %411 ]
  br i1 %27, label %.lr.ph432, label %._crit_edge433

.lr.ph432:                                        ; preds = %.preheader408, %93
  %.1431 = phi i64 [ %94, %93 ], [ 0, %.preheader408 ]
  %88 = getelementptr inbounds i64, ptr %22, i64 %.1431
  %89 = load i64, ptr %88, align 8, !tbaa !21
  %90 = getelementptr inbounds i64, ptr %24, i64 %.1431
  %91 = load i64, ptr %90, align 8, !tbaa !21
  %92 = icmp sgt i64 %89, %91
  br i1 %92, label %._crit_edge433, label %93

93:                                               ; preds = %.lr.ph432
  %94 = add nuw nsw i64 %.1431, 1
  %exitcond507.not = icmp eq i64 %94, %2
  br i1 %exitcond507.not, label %._crit_edge485, label %.lr.ph432, !llvm.loop !31

._crit_edge433:                                   ; preds = %.lr.ph432, %.preheader408
  %.1.lcssa = phi i64 [ 0, %.preheader408 ], [ %.1431, %.lr.ph432 ]
  %95 = icmp eq i64 %.1.lcssa, %2
  br i1 %95, label %._crit_edge485, label %96

96:                                               ; preds = %._crit_edge433
  call void @libmetis__PQueueReset(ptr noundef nonnull %7) #4
  %97 = call ptr @libmetis__idxset(i64 noundef %8, i64 noundef -1, ptr noundef %46) #4
  %98 = load i64, ptr %81, align 8, !tbaa !29
  call void @libmetis__RandomPermute(i64 noundef %98, ptr noundef %45, i64 noundef 1) #4
  %99 = icmp sgt i64 %98, 0
  br i1 %99, label %.lr.ph438, label %.preheader407

.preheader407:                                    ; preds = %.lr.ph438, %96
  %100 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %7) #4
  %101 = icmp eq i64 %100, -1
  br i1 %101, label %.outer._crit_edge, label %.lr.ph457

.lr.ph438:                                        ; preds = %96, %.lr.ph438
  %.0368436 = phi i64 [ %114, %.lr.ph438 ], [ 0, %96 ]
  %102 = getelementptr inbounds i64, ptr %45, i64 %.0368436
  %103 = load i64, ptr %102, align 8, !tbaa !21
  %104 = getelementptr inbounds i64, ptr %16, i64 %103
  %105 = load i64, ptr %104, align 8, !tbaa !21
  %106 = load ptr, ptr %82, align 8, !tbaa !32
  %107 = getelementptr inbounds %struct.rinfodef, ptr %106, i64 %105
  %108 = getelementptr inbounds i8, ptr %107, i64 8
  %109 = load i64, ptr %108, align 8, !tbaa !33
  %110 = load i64, ptr %107, align 8, !tbaa !35
  %111 = sub nsw i64 %109, %110
  %112 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %7, i64 noundef %105, i64 noundef %111) #4
  %113 = getelementptr inbounds i64, ptr %46, i64 %105
  store i64 2, ptr %113, align 8, !tbaa !21
  %114 = add nuw nsw i64 %.0368436, 1
  %exitcond508.not = icmp eq i64 %114, %98
  br i1 %exitcond508.not, label %.preheader407, label %.lr.ph438, !llvm.loop !36

115:                                              ; preds = %.lr.ph457, %.backedge
  %116 = phi i64 [ %392, %.lr.ph457 ], [ %131, %.backedge ]
  %117 = getelementptr inbounds i64, ptr %46, i64 %116
  store i64 1, ptr %117, align 8, !tbaa !21
  %118 = load ptr, ptr %82, align 8, !tbaa !32
  %119 = getelementptr inbounds %struct.rinfodef, ptr %118, i64 %116
  %120 = getelementptr inbounds i64, ptr %20, i64 %116
  %121 = load i64, ptr %120, align 8, !tbaa !21
  %122 = load ptr, ptr %83, align 8, !tbaa !37
  %123 = getelementptr inbounds i64, ptr %122, i64 %116
  %124 = load i64, ptr %123, align 8, !tbaa !21
  %125 = getelementptr inbounds i64, ptr %22, i64 %121
  %126 = load i64, ptr %125, align 8, !tbaa !21
  %127 = sub nsw i64 %126, %124
  %128 = getelementptr inbounds i64, ptr %23, i64 %121
  %129 = load i64, ptr %128, align 8, !tbaa !21
  %130 = icmp slt i64 %127, %129
  br i1 %130, label %.backedge, label %133

.backedge:                                        ; preds = %153, %115, %._crit_edge442, %217
  %131 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %7) #4
  %132 = icmp eq i64 %131, -1
  br i1 %132, label %.outer._crit_edge, label %115

133:                                              ; preds = %115
  %134 = getelementptr inbounds i8, ptr %119, i64 24
  %135 = load ptr, ptr %134, align 8, !tbaa !38
  %136 = getelementptr inbounds i8, ptr %119, i64 16
  %137 = load i64, ptr %136, align 8, !tbaa !39
  %138 = getelementptr inbounds i64, ptr %25, i64 %121
  %139 = icmp sgt i64 %137, 0
  br i1 %139, label %.lr.ph441, label %._crit_edge442

.lr.ph441:                                        ; preds = %133, %153
  %.0371439 = phi i64 [ %154, %153 ], [ 0, %133 ]
  %140 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %.0371439
  %141 = load i64, ptr %140, align 8, !tbaa !40
  %142 = getelementptr inbounds i64, ptr %22, i64 %141
  %143 = load i64, ptr %142, align 8, !tbaa !21
  %144 = add nsw i64 %143, %124
  %145 = getelementptr inbounds i64, ptr %24, i64 %141
  %146 = load i64, ptr %145, align 8, !tbaa !21
  %.not393 = icmp sgt i64 %144, %146
  br i1 %.not393, label %147, label %._crit_edge442

147:                                              ; preds = %.lr.ph441
  %148 = load i64, ptr %138, align 8, !tbaa !21
  %149 = mul nsw i64 %148, %144
  %150 = getelementptr inbounds i64, ptr %25, i64 %141
  %151 = load i64, ptr %150, align 8, !tbaa !21
  %152 = mul nsw i64 %151, %126
  %.not394 = icmp sgt i64 %149, %152
  br i1 %.not394, label %153, label %._crit_edge442

153:                                              ; preds = %147
  %154 = add nuw nsw i64 %.0371439, 1
  %exitcond509.not = icmp eq i64 %154, %137
  br i1 %exitcond509.not, label %.backedge, label %.lr.ph441, !llvm.loop !42

._crit_edge442:                                   ; preds = %147, %.lr.ph441, %133
  %.0371.lcssa = phi i64 [ 0, %133 ], [ %.0371439, %.lr.ph441 ], [ %.0371439, %147 ]
  %155 = icmp eq i64 %.0371.lcssa, %137
  br i1 %155, label %.backedge, label %.preheader406

.preheader406:                                    ; preds = %._crit_edge442
  %.0369448 = add nuw nsw i64 %.0371.lcssa, 1
  %156 = icmp slt i64 %.0369448, %137
  br i1 %156, label %.lr.ph451.preheader, label %._crit_edge452

.lr.ph451.preheader:                              ; preds = %.preheader406
  %157 = add i64 %137, -2
  %158 = sub i64 %.0371.lcssa, %137
  %159 = and i64 %158, 1
  %lcmp.mod.not.not = icmp eq i64 %159, 0
  br i1 %lcmp.mod.not.not, label %.lr.ph451.prol, label %.lr.ph451.prol.loopexit

.lr.ph451.prol:                                   ; preds = %.lr.ph451.preheader
  %160 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %.0369448
  %161 = load i64, ptr %160, align 8, !tbaa !40
  %162 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %.0371.lcssa
  %163 = load i64, ptr %162, align 8, !tbaa !40
  %164 = getelementptr inbounds i64, ptr %25, i64 %163
  %165 = load i64, ptr %164, align 8, !tbaa !21
  %166 = getelementptr inbounds i64, ptr %22, i64 %161
  %167 = load i64, ptr %166, align 8, !tbaa !21
  %168 = mul nsw i64 %167, %165
  %169 = getelementptr inbounds i64, ptr %25, i64 %161
  %170 = load i64, ptr %169, align 8, !tbaa !21
  %171 = getelementptr inbounds i64, ptr %22, i64 %163
  %172 = load i64, ptr %171, align 8, !tbaa !21
  %173 = mul nsw i64 %172, %170
  %174 = icmp slt i64 %168, %173
  %spec.select.prol = select i1 %174, i64 %.0369448, i64 %.0371.lcssa
  %.0369.prol = add nuw nsw i64 %.0371.lcssa, 2
  br label %.lr.ph451.prol.loopexit

.lr.ph451.prol.loopexit:                          ; preds = %.lr.ph451.prol, %.lr.ph451.preheader
  %spec.select.lcssa.unr = phi i64 [ poison, %.lr.ph451.preheader ], [ %spec.select.prol, %.lr.ph451.prol ]
  %.0369450.unr = phi i64 [ %.0369448, %.lr.ph451.preheader ], [ %.0369.prol, %.lr.ph451.prol ]
  %.1372449.unr = phi i64 [ %.0371.lcssa, %.lr.ph451.preheader ], [ %spec.select.prol, %.lr.ph451.prol ]
  %175 = icmp eq i64 %157, %.0371.lcssa
  br i1 %175, label %._crit_edge452, label %.lr.ph451

.lr.ph451:                                        ; preds = %.lr.ph451.prol.loopexit, %.lr.ph451
  %.0369450 = phi i64 [ %.0369.1, %.lr.ph451 ], [ %.0369450.unr, %.lr.ph451.prol.loopexit ]
  %.1372449 = phi i64 [ %spec.select.1, %.lr.ph451 ], [ %.1372449.unr, %.lr.ph451.prol.loopexit ]
  %176 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %.0369450
  %177 = load i64, ptr %176, align 8, !tbaa !40
  %178 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %.1372449
  %179 = load i64, ptr %178, align 8, !tbaa !40
  %180 = getelementptr inbounds i64, ptr %25, i64 %179
  %181 = load i64, ptr %180, align 8, !tbaa !21
  %182 = getelementptr inbounds i64, ptr %22, i64 %177
  %183 = load i64, ptr %182, align 8, !tbaa !21
  %184 = mul nsw i64 %183, %181
  %185 = getelementptr inbounds i64, ptr %25, i64 %177
  %186 = load i64, ptr %185, align 8, !tbaa !21
  %187 = getelementptr inbounds i64, ptr %22, i64 %179
  %188 = load i64, ptr %187, align 8, !tbaa !21
  %189 = mul nsw i64 %188, %186
  %190 = icmp slt i64 %184, %189
  %spec.select = select i1 %190, i64 %.0369450, i64 %.1372449
  %.0369 = add nuw nsw i64 %.0369450, 1
  %191 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %.0369
  %192 = load i64, ptr %191, align 8, !tbaa !40
  %193 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %spec.select
  %194 = load i64, ptr %193, align 8, !tbaa !40
  %195 = getelementptr inbounds i64, ptr %25, i64 %194
  %196 = load i64, ptr %195, align 8, !tbaa !21
  %197 = getelementptr inbounds i64, ptr %22, i64 %192
  %198 = load i64, ptr %197, align 8, !tbaa !21
  %199 = mul nsw i64 %198, %196
  %200 = getelementptr inbounds i64, ptr %25, i64 %192
  %201 = load i64, ptr %200, align 8, !tbaa !21
  %202 = getelementptr inbounds i64, ptr %22, i64 %194
  %203 = load i64, ptr %202, align 8, !tbaa !21
  %204 = mul nsw i64 %203, %201
  %205 = icmp slt i64 %199, %204
  %spec.select.1 = select i1 %205, i64 %.0369, i64 %spec.select
  %.0369.1 = add nuw nsw i64 %.0369450, 2
  %exitcond510.not.1 = icmp eq i64 %.0369.1, %137
  br i1 %exitcond510.not.1, label %._crit_edge452, label %.lr.ph451, !llvm.loop !43

._crit_edge452:                                   ; preds = %.lr.ph451.prol.loopexit, %.lr.ph451, %.preheader406
  %.1372.lcssa = phi i64 [ %.0371.lcssa, %.preheader406 ], [ %spec.select.lcssa.unr, %.lr.ph451.prol.loopexit ], [ %spec.select.1, %.lr.ph451 ]
  %206 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %.1372.lcssa
  %207 = load i64, ptr %206, align 8, !tbaa !40
  %208 = getelementptr inbounds i64, ptr %24, i64 %121
  %209 = load i64, ptr %208, align 8, !tbaa !21
  %210 = icmp slt i64 %126, %209
  br i1 %210, label %211, label %._crit_edge452._crit_edge

._crit_edge452._crit_edge:                        ; preds = %._crit_edge452
  %.pre = load i64, ptr %119, align 8, !tbaa !35
  br label %split

211:                                              ; preds = %._crit_edge452
  %212 = getelementptr inbounds i64, ptr %22, i64 %207
  %213 = load i64, ptr %212, align 8, !tbaa !21
  %214 = getelementptr inbounds i64, ptr %23, i64 %207
  %215 = load i64, ptr %214, align 8, !tbaa !21
  %216 = icmp sgt i64 %213, %215
  %.pre514 = load i64, ptr %119, align 8, !tbaa !35
  br i1 %216, label %217, label %split

217:                                              ; preds = %211
  %218 = getelementptr inbounds i8, ptr %206, i64 8
  %219 = load i64, ptr %218, align 8, !tbaa !44
  %220 = icmp slt i64 %219, %.pre514
  br i1 %220, label %.backedge, label %split

split:                                            ; preds = %217, %211, %._crit_edge452._crit_edge
  %221 = phi i64 [ %.pre, %._crit_edge452._crit_edge ], [ %.pre514, %211 ], [ %.pre514, %217 ]
  %222 = getelementptr inbounds i8, ptr %119, i64 16
  %223 = getelementptr inbounds i64, ptr %22, i64 %121
  %224 = getelementptr inbounds i64, ptr %20, i64 %116
  %225 = getelementptr inbounds i8, ptr %206, i64 8
  %226 = load i64, ptr %225, align 8, !tbaa !44
  %.neg = sub i64 %221, %226
  %227 = load i64, ptr %80, align 8, !tbaa !30
  %228 = add i64 %.neg, %227
  store i64 %228, ptr %80, align 8, !tbaa !30
  %229 = load i64, ptr %52, align 8, !tbaa !25
  %230 = and i64 %229, 32
  %.not395 = icmp eq i64 %230, 0
  br i1 %.not395, label %234, label %231

231:                                              ; preds = %split
  %232 = sub nsw i64 %226, %221
  %233 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, i64 noundef %116, i64 noundef %207, i64 noundef %232, i64 noundef %228) #4
  br label %234

234:                                              ; preds = %231, %split
  store i64 %207, ptr %224, align 8, !tbaa !21
  %235 = getelementptr inbounds i64, ptr %22, i64 %207
  %236 = load i64, ptr %235, align 8, !tbaa !21
  %237 = add nsw i64 %236, %124
  store i64 %237, ptr %235, align 8, !tbaa !21
  %238 = load i64, ptr %223, align 8, !tbaa !21
  %239 = sub nsw i64 %238, %124
  store i64 %239, ptr %223, align 8, !tbaa !21
  %240 = load i64, ptr %119, align 8, !tbaa !35
  %241 = load i64, ptr %225, align 8, !tbaa !44
  %242 = sub i64 %240, %241
  %243 = getelementptr inbounds i8, ptr %119, i64 8
  %244 = load i64, ptr %243, align 8, !tbaa !33
  %245 = add nsw i64 %242, %244
  store i64 %245, ptr %243, align 8, !tbaa !33
  store i64 %241, ptr %119, align 8, !tbaa !35
  store i64 %240, ptr %225, align 8, !tbaa !44
  %246 = icmp eq i64 %240, 0
  br i1 %246, label %247, label %251

247:                                              ; preds = %234
  %248 = load i64, ptr %222, align 8, !tbaa !39
  %249 = add nsw i64 %248, -1
  store i64 %249, ptr %222, align 8, !tbaa !39
  %250 = getelementptr inbounds %struct.edegreedef, ptr %135, i64 %249
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %206, ptr noundef nonnull align 8 dereferenceable(16) %250, i64 16, i1 false), !tbaa.struct !45
  %.pre515 = load i64, ptr %243, align 8, !tbaa !33
  br label %252

251:                                              ; preds = %234
  store i64 %121, ptr %206, align 8, !tbaa !40
  br label %252

252:                                              ; preds = %251, %247
  %253 = phi i64 [ %245, %251 ], [ %.pre515, %247 ]
  %254 = icmp eq i64 %253, 0
  br i1 %254, label %255, label %264

255:                                              ; preds = %252
  %256 = add nsw i64 %.0374.ph481, -1
  %257 = getelementptr inbounds i64, ptr %16, i64 %256
  %258 = load i64, ptr %257, align 8, !tbaa !21
  %259 = getelementptr inbounds i64, ptr %18, i64 %116
  %260 = load i64, ptr %259, align 8, !tbaa !21
  %261 = getelementptr inbounds i64, ptr %16, i64 %260
  store i64 %258, ptr %261, align 8, !tbaa !21
  %262 = load i64, ptr %259, align 8, !tbaa !21
  %263 = getelementptr inbounds i64, ptr %18, i64 %258
  store i64 %262, ptr %263, align 8, !tbaa !21
  store i64 -1, ptr %259, align 8, !tbaa !21
  br label %264

264:                                              ; preds = %255, %252
  %.1375 = phi i64 [ %256, %255 ], [ %.0374.ph481, %252 ]
  %265 = getelementptr inbounds i64, ptr %10, i64 %116
  %266 = load i64, ptr %265, align 8, !tbaa !21
  %267 = getelementptr i8, ptr %265, i64 8
  %268 = load i64, ptr %267, align 8, !tbaa !21
  %269 = icmp slt i64 %266, %268
  br i1 %269, label %.lr.ph477, label %.outer

.lr.ph477:                                        ; preds = %264, %385
  %.1370471 = phi i64 [ %386, %385 ], [ %266, %264 ]
  %.2376470 = phi i64 [ %.3377401, %385 ], [ %.1375, %264 ]
  %270 = getelementptr inbounds i64, ptr %12, i64 %.1370471
  %271 = load i64, ptr %270, align 8, !tbaa !21
  %272 = getelementptr inbounds i64, ptr %20, i64 %271
  %273 = load i64, ptr %272, align 8, !tbaa !21
  %274 = load ptr, ptr %82, align 8, !tbaa !32
  %275 = getelementptr inbounds %struct.rinfodef, ptr %274, i64 %271
  %276 = getelementptr inbounds i8, ptr %275, i64 24
  %277 = load ptr, ptr %276, align 8, !tbaa !38
  %278 = icmp eq ptr %277, null
  br i1 %278, label %279, label %289

279:                                              ; preds = %.lr.ph477
  %280 = load ptr, ptr %84, align 8, !tbaa !46
  %281 = load i64, ptr %85, align 8, !tbaa !47
  %282 = getelementptr inbounds %struct.edegreedef, ptr %280, i64 %281
  store ptr %282, ptr %276, align 8, !tbaa !38
  %283 = getelementptr i64, ptr %10, i64 %271
  %284 = getelementptr i8, ptr %283, i64 8
  %285 = load i64, ptr %284, align 8, !tbaa !21
  %286 = load i64, ptr %283, align 8, !tbaa !21
  %287 = add i64 %285, %281
  %288 = sub i64 %287, %286
  store i64 %288, ptr %85, align 8, !tbaa !47
  br label %289

289:                                              ; preds = %279, %.lr.ph477
  %290 = phi ptr [ %282, %279 ], [ %277, %.lr.ph477 ]
  %291 = getelementptr inbounds i8, ptr %275, i64 8
  %292 = load i64, ptr %291, align 8, !tbaa !33
  %293 = load i64, ptr %275, align 8, !tbaa !35
  %294 = sub nsw i64 %292, %293
  %295 = icmp eq i64 %273, %121
  br i1 %295, label %296, label %310

296:                                              ; preds = %289
  %297 = getelementptr inbounds i64, ptr %14, i64 %.1370471
  %298 = load i64, ptr %297, align 8, !tbaa !21
  %299 = add nsw i64 %298, %292
  store i64 %299, ptr %291, align 8, !tbaa !33
  %300 = load i64, ptr %297, align 8, !tbaa !21
  %301 = sub nsw i64 %293, %300
  store i64 %301, ptr %275, align 8, !tbaa !35
  %302 = icmp sgt i64 %299, 0
  br i1 %302, label %303, label %.thread

303:                                              ; preds = %296
  %304 = getelementptr inbounds i64, ptr %18, i64 %271
  %305 = load i64, ptr %304, align 8, !tbaa !21
  %306 = icmp eq i64 %305, -1
  br i1 %306, label %307, label %.thread

307:                                              ; preds = %303
  %308 = getelementptr inbounds i64, ptr %16, i64 %.2376470
  store i64 %271, ptr %308, align 8, !tbaa !21
  %309 = add nsw i64 %.2376470, 1
  store i64 %.2376470, ptr %304, align 8, !tbaa !21
  br label %.thread

310:                                              ; preds = %289
  %311 = icmp eq i64 %273, %207
  br i1 %311, label %312, label %329

312:                                              ; preds = %310
  %313 = getelementptr inbounds i64, ptr %14, i64 %.1370471
  %314 = load i64, ptr %313, align 8, !tbaa !21
  %315 = add nsw i64 %314, %293
  store i64 %315, ptr %275, align 8, !tbaa !35
  %316 = load i64, ptr %313, align 8, !tbaa !21
  %317 = sub nsw i64 %292, %316
  store i64 %317, ptr %291, align 8, !tbaa !33
  %318 = icmp eq i64 %292, %316
  br i1 %318, label %319, label %329

319:                                              ; preds = %312
  %320 = getelementptr inbounds i64, ptr %18, i64 %271
  %321 = load i64, ptr %320, align 8, !tbaa !21
  %.not396 = icmp eq i64 %321, -1
  br i1 %.not396, label %329, label %322

322:                                              ; preds = %319
  %323 = add nsw i64 %.2376470, -1
  %324 = getelementptr inbounds i64, ptr %16, i64 %323
  %325 = load i64, ptr %324, align 8, !tbaa !21
  %326 = getelementptr inbounds i64, ptr %16, i64 %321
  store i64 %325, ptr %326, align 8, !tbaa !21
  %327 = load i64, ptr %320, align 8, !tbaa !21
  %328 = getelementptr inbounds i64, ptr %18, i64 %325
  store i64 %327, ptr %328, align 8, !tbaa !21
  store i64 -1, ptr %320, align 8, !tbaa !21
  br label %329

329:                                              ; preds = %310, %322, %319, %312
  %.3377 = phi i64 [ %323, %322 ], [ %.2376470, %319 ], [ %.2376470, %312 ], [ %.2376470, %310 ]
  %330 = getelementptr inbounds i8, ptr %275, i64 16
  %331 = load i64, ptr %330, align 8, !tbaa !39
  %332 = icmp sgt i64 %331, 0
  br i1 %332, label %.lr.ph465, label %.thread

333:                                              ; preds = %.lr.ph465
  %334 = add nuw nsw i64 %.3463, 1
  %exitcond511.not = icmp eq i64 %334, %331
  br i1 %exitcond511.not, label %.thread, label %.lr.ph465, !llvm.loop !48

.lr.ph465:                                        ; preds = %329, %333
  %.3463 = phi i64 [ %334, %333 ], [ 0, %329 ]
  %335 = getelementptr inbounds %struct.edegreedef, ptr %290, i64 %.3463
  %336 = load i64, ptr %335, align 8, !tbaa !40
  %337 = icmp eq i64 %336, %121
  br i1 %337, label %338, label %333

338:                                              ; preds = %.lr.ph465
  %339 = getelementptr inbounds i8, ptr %335, i64 8
  %340 = load i64, ptr %339, align 8, !tbaa !44
  %341 = getelementptr inbounds i64, ptr %14, i64 %.1370471
  %342 = load i64, ptr %341, align 8, !tbaa !21
  %343 = icmp eq i64 %340, %342
  br i1 %343, label %344, label %347

344:                                              ; preds = %338
  %345 = add nsw i64 %331, -1
  store i64 %345, ptr %330, align 8, !tbaa !39
  %346 = getelementptr inbounds %struct.edegreedef, ptr %290, i64 %345
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %335, ptr noundef nonnull align 8 dereferenceable(16) %346, i64 16, i1 false), !tbaa.struct !45
  br label %.thread

347:                                              ; preds = %338
  %348 = sub nsw i64 %340, %342
  store i64 %348, ptr %339, align 8, !tbaa !44
  br label %.thread

.thread:                                          ; preds = %333, %329, %307, %303, %296, %347, %344
  %.3377401 = phi i64 [ %.3377, %347 ], [ %.3377, %344 ], [ %.2376470, %296 ], [ %.2376470, %303 ], [ %309, %307 ], [ %.3377, %329 ], [ %.3377, %333 ]
  %.not398 = icmp eq i64 %273, %207
  br i1 %.not398, label %.thread402, label %.preheader

.preheader:                                       ; preds = %.thread
  %349 = getelementptr inbounds i8, ptr %275, i64 16
  %350 = load i64, ptr %349, align 8, !tbaa !39
  %351 = icmp sgt i64 %350, 0
  br i1 %351, label %.lr.ph467, label %.loopexit

.lr.ph467:                                        ; preds = %.preheader, %361
  %.4466 = phi i64 [ %362, %361 ], [ 0, %.preheader ]
  %352 = getelementptr inbounds %struct.edegreedef, ptr %290, i64 %.4466
  %353 = load i64, ptr %352, align 8, !tbaa !40
  %354 = icmp eq i64 %353, %207
  br i1 %354, label %355, label %361

355:                                              ; preds = %.lr.ph467
  %356 = getelementptr inbounds i64, ptr %14, i64 %.1370471
  %357 = load i64, ptr %356, align 8, !tbaa !21
  %358 = getelementptr inbounds i8, ptr %352, i64 8
  %359 = load i64, ptr %358, align 8, !tbaa !44
  %360 = add nsw i64 %359, %357
  store i64 %360, ptr %358, align 8, !tbaa !44
  br label %.loopexit

361:                                              ; preds = %.lr.ph467
  %362 = add nuw nsw i64 %.4466, 1
  %exitcond512.not = icmp eq i64 %362, %350
  br i1 %exitcond512.not, label %.loopexit.thread, label %.lr.ph467, !llvm.loop !49

.loopexit:                                        ; preds = %.preheader, %355
  %.4428 = phi i64 [ %.4466, %355 ], [ 0, %.preheader ]
  %363 = icmp eq i64 %.4428, %350
  br i1 %363, label %.loopexit.thread, label %369

.loopexit.thread:                                 ; preds = %361, %.loopexit
  %364 = getelementptr inbounds %struct.edegreedef, ptr %290, i64 %350
  store i64 %207, ptr %364, align 8, !tbaa !40
  %365 = getelementptr inbounds i64, ptr %14, i64 %.1370471
  %366 = load i64, ptr %365, align 8, !tbaa !21
  %367 = add nsw i64 %350, 1
  store i64 %367, ptr %349, align 8, !tbaa !39
  %368 = getelementptr inbounds %struct.edegreedef, ptr %290, i64 %350, i32 1
  store i64 %366, ptr %368, align 8, !tbaa !44
  br label %369

369:                                              ; preds = %.loopexit, %.loopexit.thread
  br i1 %295, label %.thread402, label %385

.thread402:                                       ; preds = %.thread, %369
  %370 = load i64, ptr %291, align 8, !tbaa !33
  %371 = load i64, ptr %275, align 8, !tbaa !35
  %372 = sub nsw i64 %370, %371
  %373 = getelementptr inbounds i64, ptr %46, i64 %271
  %374 = load i64, ptr %373, align 8, !tbaa !21
  switch i64 %374, label %385 [
    i64 2, label %375
    i64 -1, label %381
  ]

375:                                              ; preds = %.thread402
  %376 = icmp sgt i64 %370, 0
  br i1 %376, label %377, label %379

377:                                              ; preds = %375
  %378 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %7, i64 noundef %271, i64 noundef %294, i64 noundef %372) #4
  br label %385

379:                                              ; preds = %375
  %380 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %7, i64 noundef %271, i64 noundef %294) #4
  store i64 -1, ptr %373, align 8, !tbaa !21
  br label %385

381:                                              ; preds = %.thread402
  %382 = icmp sgt i64 %370, 0
  br i1 %382, label %383, label %385

383:                                              ; preds = %381
  %384 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %7, i64 noundef %271, i64 noundef %372) #4
  store i64 2, ptr %373, align 8, !tbaa !21
  br label %385

385:                                              ; preds = %.thread402, %369, %381, %383, %377, %379
  %386 = add nsw i64 %.1370471, 1
  %387 = load i64, ptr %267, align 8, !tbaa !21
  %388 = icmp slt i64 %386, %387
  br i1 %388, label %.lr.ph477, label %.outer, !llvm.loop !50

.outer:                                           ; preds = %385, %264
  %.2376.lcssa = phi i64 [ %.1375, %264 ], [ %.3377401, %385 ]
  %389 = add nuw nsw i64 %.0378.ph480, 1
  %390 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %7) #4
  %391 = icmp eq i64 %390, -1
  br i1 %391, label %.outer._crit_edge, label %.lr.ph457

.lr.ph457:                                        ; preds = %.preheader407, %.outer
  %392 = phi i64 [ %390, %.outer ], [ %100, %.preheader407 ]
  %.0374.ph481 = phi i64 [ %.2376.lcssa, %.outer ], [ %98, %.preheader407 ]
  %.0378.ph480 = phi i64 [ %389, %.outer ], [ 0, %.preheader407 ]
  br label %115

.outer._crit_edge:                                ; preds = %.outer, %.backedge, %.preheader407
  %.0378.ph.lcssa = phi i64 [ 0, %.preheader407 ], [ %.0378.ph480, %.backedge ], [ %389, %.outer ]
  %.0374.ph.lcssa = phi i64 [ %98, %.preheader407 ], [ %.0374.ph481, %.backedge ], [ %.2376.lcssa, %.outer ]
  store i64 %.0374.ph.lcssa, ptr %81, align 8, !tbaa !29
  %393 = load i64, ptr %52, align 8, !tbaa !25
  %394 = and i64 %393, 8
  %.not399 = icmp eq i64 %394, 0
  br i1 %.not399, label %411, label %395

395:                                              ; preds = %.outer._crit_edge
  %396 = call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %22) #4
  %397 = getelementptr inbounds i64, ptr %22, i64 %396
  %398 = load i64, ptr %397, align 8, !tbaa !21
  %399 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %400 = getelementptr inbounds i64, ptr %22, i64 %399
  %401 = load i64, ptr %400, align 8, !tbaa !21
  %402 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %403 = getelementptr inbounds i64, ptr %22, i64 %402
  %404 = load i64, ptr %403, align 8, !tbaa !21
  %405 = sitofp i64 %404 to double
  %406 = fmul double %86, %405
  %407 = fdiv double %406, %87
  %408 = load i64, ptr %81, align 8, !tbaa !29
  %409 = load i64, ptr %80, align 8, !tbaa !30
  %410 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %398, i64 noundef %401, double noundef %407, i64 noundef %408, i64 noundef %.0378.ph.lcssa, i64 noundef %409) #4
  br label %411

411:                                              ; preds = %.outer._crit_edge, %395
  %412 = add nuw nsw i64 %.0373484, 1
  %exitcond513.not = icmp eq i64 %412, %5
  br i1 %exitcond513.not, label %._crit_edge485, label %.preheader408, !llvm.loop !51

._crit_edge485:                                   ; preds = %411, %._crit_edge433, %93, %78
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %7) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %8) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %8) #4
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %7) #4
  ret void
}

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 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 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 40}
!14 = !{!6, !10, i64 48}
!15 = !{!6, !10, i64 160}
!16 = !{!6, !10, i64 152}
!17 = !{!6, !10, i64 128}
!18 = !{!6, !10, i64 136}
!19 = !{!20, !20, i64 0}
!20 = !{!"float", !8, i64 0}
!21 = !{!7, !7, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = !{!6, !10, i64 88}
!25 = !{!26, !7, i64 8}
!26 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !20, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !27, i64 88, !28, i64 152, !28, i64 160, !28, i64 168, !28, i64 176, !28, i64 184, !28, i64 192, !28, i64 200, !28, i64 208, !28, i64 216, !28, i64 224, !28, i64 232, !28, i64 240, !28, i64 248, !28, i64 256, !28, i64 264, !28, i64 272}
!27 = !{!"workspacedef", !10, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !7, i64 40, !10, i64 48, !10, i64 56}
!28 = !{!"double", !8, i64 0}
!29 = !{!6, !7, i64 144}
!30 = !{!6, !7, i64 112}
!31 = distinct !{!31, !23}
!32 = !{!6, !10, i64 184}
!33 = !{!34, !7, i64 8}
!34 = !{!"rinfodef", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24}
!35 = !{!34, !7, i64 0}
!36 = distinct !{!36, !23}
!37 = !{!6, !10, i64 24}
!38 = !{!34, !10, i64 24}
!39 = !{!34, !7, i64 16}
!40 = !{!41, !7, i64 0}
!41 = !{!"edegreedef", !7, i64 0, !7, i64 8}
!42 = distinct !{!42, !23}
!43 = distinct !{!43, !23}
!44 = !{!41, !7, i64 8}
!45 = !{i64 0, i64 8, !21, i64 8, i64 8, !21}
!46 = !{!26, !10, i64 112}
!47 = !{!26, !7, i64 128}
!48 = distinct !{!48, !23}
!49 = distinct !{!49, !23}
!50 = distinct !{!50, !23}
!51 = distinct !{!51, !23}


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