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

; 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.nrinfodef = type { [2 x i64] }

@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 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

; Function Attrs: nounwind uwtable
declare dso_local i64 @libmetis__ComputeMaxNodeGain(i64 noundef, ptr noundef, ptr noundef, ptr noundef) #1

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

declare ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) #2

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

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

declare void @libmetis__PQueueReset(ptr noundef) #2

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

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

declare i64 @libmetis__PQueueSeeMax(ptr noundef) #2

declare i64 @libmetis__PQueueGetMax(ptr noundef) #2

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

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

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

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

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

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

106:                                              ; preds = %3
  %107 = load ptr, ptr %21, align 8, !tbaa !5
  %108 = getelementptr inbounds i64, ptr %107, i64 0
  %109 = load i64, ptr %108, align 8, !tbaa !9
  %110 = load ptr, ptr %21, align 8, !tbaa !5
  %111 = getelementptr inbounds i64, ptr %110, i64 1
  %112 = load i64, ptr %111, align 8, !tbaa !9
  %113 = load ptr, ptr %5, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.graphdef, ptr %113, i32 0, i32 0
  %115 = load i64, ptr %114, align 8, !tbaa !11
  %116 = load ptr, ptr %5, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.graphdef, ptr %116, i32 0, i32 20
  %118 = load i64, ptr %117, align 8, !tbaa !27
  %119 = load ptr, ptr %5, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.graphdef, ptr %119, i32 0, i32 16
  %121 = load i64, ptr %120, align 8, !tbaa !28
  %122 = call i32 (ptr, ...) @mprintf(ptr noundef @.str, i64 noundef %109, i64 noundef %112, i64 noundef %115, i64 noundef %118, i64 noundef %121)
  br label %123

123:                                              ; preds = %106, %3
  store i64 0, ptr %37, align 8, !tbaa !9
  br label %124

124:                                              ; preds = %1105, %123
  %125 = load i64, ptr %37, align 8, !tbaa !9
  %126 = load i64, ptr %6, align 8, !tbaa !9
  %127 = icmp slt i64 %125, %126
  br i1 %127, label %128, label %1108

128:                                              ; preds = %124
  %129 = load i64, ptr %13, align 8, !tbaa !9
  %130 = load ptr, ptr %27, align 8, !tbaa !5
  %131 = call ptr @libmetis__idxset(i64 noundef %129, i64 noundef -1, ptr noundef %130)
  %132 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 0
  call void @libmetis__PQueueReset(ptr noundef %132)
  %133 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 1
  call void @libmetis__PQueueReset(ptr noundef %133)
  store i64 -1, ptr %36, align 8, !tbaa !9
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.graphdef, ptr %134, i32 0, i32 16
  %136 = load i64, ptr %135, align 8, !tbaa !28
  store i64 %136, ptr %34, align 8, !tbaa !9
  store i64 %136, ptr %35, align 8, !tbaa !9
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.graphdef, ptr %137, i32 0, i32 20
  %139 = load i64, ptr %138, align 8, !tbaa !27
  store i64 %139, ptr %14, align 8, !tbaa !9
  %140 = load i64, ptr %14, align 8, !tbaa !9
  %141 = load ptr, ptr %29, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %140, ptr noundef %141, i64 noundef 1)
  store i64 0, ptr %8, align 8, !tbaa !9
  br label %142

142:                                              ; preds = %182, %128
  %143 = load i64, ptr %8, align 8, !tbaa !9
  %144 = load i64, ptr %14, align 8, !tbaa !9
  %145 = icmp slt i64 %143, %144
  br i1 %145, label %146, label %185

146:                                              ; preds = %142
  %147 = load ptr, ptr %23, align 8, !tbaa !5
  %148 = load ptr, ptr %29, align 8, !tbaa !5
  %149 = load i64, ptr %8, align 8, !tbaa !9
  %150 = getelementptr inbounds i64, ptr %148, i64 %149
  %151 = load i64, ptr %150, align 8, !tbaa !9
  %152 = getelementptr inbounds i64, ptr %147, i64 %151
  %153 = load i64, ptr %152, align 8, !tbaa !9
  store i64 %153, ptr %7, align 8, !tbaa !9
  %154 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 0
  %155 = load i64, ptr %7, align 8, !tbaa !9
  %156 = load ptr, ptr %18, align 8, !tbaa !5
  %157 = load i64, ptr %7, align 8, !tbaa !9
  %158 = getelementptr inbounds i64, ptr %156, i64 %157
  %159 = load i64, ptr %158, align 8, !tbaa !9
  %160 = load ptr, ptr %31, align 8, !tbaa !5
  %161 = load i64, ptr %7, align 8, !tbaa !9
  %162 = getelementptr inbounds %struct.nrinfodef, ptr %160, i64 %161
  %163 = getelementptr inbounds %struct.nrinfodef, ptr %162, i32 0, i32 0
  %164 = getelementptr inbounds [2 x i64], ptr %163, i64 0, i64 1
  %165 = load i64, ptr %164, align 8, !tbaa !9
  %166 = sub nsw i64 %159, %165
  %167 = call i64 @libmetis__PQueueInsert(ptr noundef %154, i64 noundef %155, i64 noundef %166)
  %168 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 1
  %169 = load i64, ptr %7, align 8, !tbaa !9
  %170 = load ptr, ptr %18, align 8, !tbaa !5
  %171 = load i64, ptr %7, align 8, !tbaa !9
  %172 = getelementptr inbounds i64, ptr %170, i64 %171
  %173 = load i64, ptr %172, align 8, !tbaa !9
  %174 = load ptr, ptr %31, align 8, !tbaa !5
  %175 = load i64, ptr %7, align 8, !tbaa !9
  %176 = getelementptr inbounds %struct.nrinfodef, ptr %174, i64 %175
  %177 = getelementptr inbounds %struct.nrinfodef, ptr %176, i32 0, i32 0
  %178 = getelementptr inbounds [2 x i64], ptr %177, i64 0, i64 0
  %179 = load i64, ptr %178, align 8, !tbaa !9
  %180 = sub nsw i64 %173, %179
  %181 = call i64 @libmetis__PQueueInsert(ptr noundef %168, i64 noundef %169, i64 noundef %180)
  br label %182

182:                                              ; preds = %146
  %183 = load i64, ptr %8, align 8, !tbaa !9
  %184 = add nsw i64 %183, 1
  store i64 %184, ptr %8, align 8, !tbaa !9
  br label %142, !llvm.loop !29

185:                                              ; preds = %142
  %186 = load ptr, ptr %4, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.controldef, ptr %186, i32 0, i32 10
  %188 = load i64, ptr %187, align 8, !tbaa !31
  %189 = and i64 %188, 1
  %190 = icmp ne i64 %189, 0
  br i1 %190, label %191, label %201

191:                                              ; preds = %185
  %192 = load i64, ptr %14, align 8, !tbaa !9
  %193 = mul nsw i64 5, %192
  %194 = icmp sge i64 %193, 400
  br i1 %194, label %195, label %196

195:                                              ; preds = %191
  br label %199

196:                                              ; preds = %191
  %197 = load i64, ptr %14, align 8, !tbaa !9
  %198 = mul nsw i64 5, %197
  br label %199

199:                                              ; preds = %196, %195
  %200 = phi i64 [ 400, %195 ], [ %198, %196 ]
  br label %211

201:                                              ; preds = %185
  %202 = load i64, ptr %14, align 8, !tbaa !9
  %203 = mul nsw i64 2, %202
  %204 = icmp sge i64 %203, 300
  br i1 %204, label %205, label %206

205:                                              ; preds = %201
  br label %209

206:                                              ; preds = %201
  %207 = load i64, ptr %14, align 8, !tbaa !9
  %208 = mul nsw i64 2, %207
  br label %209

209:                                              ; preds = %206, %205
  %210 = phi i64 [ 300, %205 ], [ %208, %206 ]
  br label %211

211:                                              ; preds = %209, %199
  %212 = phi i64 [ %200, %199 ], [ %210, %209 ]
  store i64 %212, ptr %40, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  %213 = load ptr, ptr %25, align 8, !tbaa !5
  %214 = getelementptr inbounds i64, ptr %213, i64 0
  store i64 0, ptr %214, align 8, !tbaa !9
  %215 = load ptr, ptr %21, align 8, !tbaa !5
  %216 = getelementptr inbounds i64, ptr %215, i64 0
  %217 = load i64, ptr %216, align 8, !tbaa !9
  %218 = load ptr, ptr %21, align 8, !tbaa !5
  %219 = getelementptr inbounds i64, ptr %218, i64 1
  %220 = load i64, ptr %219, align 8, !tbaa !9
  %221 = sub nsw i64 %217, %220
  %222 = icmp sgt i64 %221, 0
  br i1 %222, label %223, label %231

223:                                              ; preds = %211
  %224 = load ptr, ptr %21, align 8, !tbaa !5
  %225 = getelementptr inbounds i64, ptr %224, i64 0
  %226 = load i64, ptr %225, align 8, !tbaa !9
  %227 = load ptr, ptr %21, align 8, !tbaa !5
  %228 = getelementptr inbounds i64, ptr %227, i64 1
  %229 = load i64, ptr %228, align 8, !tbaa !9
  %230 = sub nsw i64 %226, %229
  br label %240

231:                                              ; preds = %211
  %232 = load ptr, ptr %21, align 8, !tbaa !5
  %233 = getelementptr inbounds i64, ptr %232, i64 0
  %234 = load i64, ptr %233, align 8, !tbaa !9
  %235 = load ptr, ptr %21, align 8, !tbaa !5
  %236 = getelementptr inbounds i64, ptr %235, i64 1
  %237 = load i64, ptr %236, align 8, !tbaa !9
  %238 = sub nsw i64 %234, %237
  %239 = sub nsw i64 0, %238
  br label %240

240:                                              ; preds = %231, %223
  %241 = phi i64 [ %230, %223 ], [ %239, %231 ]
  store i64 %241, ptr %41, align 8, !tbaa !9
  %242 = load ptr, ptr %21, align 8, !tbaa !5
  %243 = getelementptr inbounds i64, ptr %242, i64 0
  %244 = load i64, ptr %243, align 8, !tbaa !9
  %245 = load ptr, ptr %21, align 8, !tbaa !5
  %246 = getelementptr inbounds i64, ptr %245, i64 1
  %247 = load i64, ptr %246, align 8, !tbaa !9
  %248 = icmp slt i64 %244, %247
  %249 = zext i1 %248 to i64
  %250 = select i1 %248, i32 0, i32 1
  %251 = sext i32 %250 to i64
  store i64 %251, ptr %38, align 8, !tbaa !9
  store i64 0, ptr %15, align 8, !tbaa !9
  br label %252

252:                                              ; preds = %839, %240
  %253 = load i64, ptr %15, align 8, !tbaa !9
  %254 = load i64, ptr %13, align 8, !tbaa !9
  %255 = icmp slt i64 %253, %254
  br i1 %255, label %256, label %842

256:                                              ; preds = %252
  %257 = load ptr, ptr %21, align 8, !tbaa !5
  %258 = getelementptr inbounds i64, ptr %257, i64 0
  %259 = load i64, ptr %258, align 8, !tbaa !9
  %260 = load ptr, ptr %21, align 8, !tbaa !5
  %261 = getelementptr inbounds i64, ptr %260, i64 1
  %262 = load i64, ptr %261, align 8, !tbaa !9
  %263 = icmp slt i64 %259, %262
  %264 = zext i1 %263 to i64
  %265 = select i1 %263, i32 0, i32 1
  %266 = sext i32 %265 to i64
  store i64 %266, ptr %38, align 8, !tbaa !9
  %267 = load ptr, ptr %21, align 8, !tbaa !5
  %268 = getelementptr inbounds i64, ptr %267, i64 0
  %269 = load i64, ptr %268, align 8, !tbaa !9
  %270 = load ptr, ptr %21, align 8, !tbaa !5
  %271 = getelementptr inbounds i64, ptr %270, i64 1
  %272 = load i64, ptr %271, align 8, !tbaa !9
  %273 = icmp eq i64 %269, %272
  br i1 %273, label %274, label %338

274:                                              ; preds = %256
  %275 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 0
  %276 = call i64 @libmetis__PQueueSeeMax(ptr noundef %275)
  %277 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 0
  store i64 %276, ptr %277, align 16, !tbaa !9
  %278 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 1
  %279 = call i64 @libmetis__PQueueSeeMax(ptr noundef %278)
  %280 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 1
  store i64 %279, ptr %280, align 8, !tbaa !9
  %281 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 0
  %282 = load i64, ptr %281, align 16, !tbaa !9
  %283 = icmp ne i64 %282, -1
  br i1 %283, label %284, label %337

284:                                              ; preds = %274
  %285 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 1
  %286 = load i64, ptr %285, align 8, !tbaa !9
  %287 = icmp ne i64 %286, -1
  br i1 %287, label %288, label %337

288:                                              ; preds = %284
  %289 = load ptr, ptr %18, align 8, !tbaa !5
  %290 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 0
  %291 = load i64, ptr %290, align 16, !tbaa !9
  %292 = getelementptr inbounds i64, ptr %289, i64 %291
  %293 = load i64, ptr %292, align 8, !tbaa !9
  %294 = load ptr, ptr %31, align 8, !tbaa !5
  %295 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 0
  %296 = load i64, ptr %295, align 16, !tbaa !9
  %297 = getelementptr inbounds %struct.nrinfodef, ptr %294, i64 %296
  %298 = getelementptr inbounds %struct.nrinfodef, ptr %297, i32 0, i32 0
  %299 = getelementptr inbounds [2 x i64], ptr %298, i64 0, i64 1
  %300 = load i64, ptr %299, align 8, !tbaa !9
  %301 = sub nsw i64 %293, %300
  %302 = getelementptr inbounds [2 x i64], ptr %44, i64 0, i64 0
  store i64 %301, ptr %302, align 16, !tbaa !9
  %303 = load ptr, ptr %18, align 8, !tbaa !5
  %304 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 1
  %305 = load i64, ptr %304, align 8, !tbaa !9
  %306 = getelementptr inbounds i64, ptr %303, i64 %305
  %307 = load i64, ptr %306, align 8, !tbaa !9
  %308 = load ptr, ptr %31, align 8, !tbaa !5
  %309 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 1
  %310 = load i64, ptr %309, align 8, !tbaa !9
  %311 = getelementptr inbounds %struct.nrinfodef, ptr %308, i64 %310
  %312 = getelementptr inbounds %struct.nrinfodef, ptr %311, i32 0, i32 0
  %313 = getelementptr inbounds [2 x i64], ptr %312, i64 0, i64 0
  %314 = load i64, ptr %313, align 8, !tbaa !9
  %315 = sub nsw i64 %307, %314
  %316 = getelementptr inbounds [2 x i64], ptr %44, i64 0, i64 1
  store i64 %315, ptr %316, align 8, !tbaa !9
  %317 = getelementptr inbounds [2 x i64], ptr %44, i64 0, i64 0
  %318 = load i64, ptr %317, align 16, !tbaa !9
  %319 = getelementptr inbounds [2 x i64], ptr %44, i64 0, i64 1
  %320 = load i64, ptr %319, align 8, !tbaa !9
  %321 = icmp sgt i64 %318, %320
  br i1 %321, label %322, label %323

322:                                              ; preds = %288
  br label %335

323:                                              ; preds = %288
  %324 = getelementptr inbounds [2 x i64], ptr %44, i64 0, i64 0
  %325 = load i64, ptr %324, align 16, !tbaa !9
  %326 = getelementptr inbounds [2 x i64], ptr %44, i64 0, i64 1
  %327 = load i64, ptr %326, align 8, !tbaa !9
  %328 = icmp slt i64 %325, %327
  br i1 %328, label %329, label %330

329:                                              ; preds = %323
  br label %333

330:                                              ; preds = %323
  %331 = load i64, ptr %37, align 8, !tbaa !9
  %332 = srem i64 %331, 2
  br label %333

333:                                              ; preds = %330, %329
  %334 = phi i64 [ 1, %329 ], [ %332, %330 ]
  br label %335

335:                                              ; preds = %333, %322
  %336 = phi i64 [ 0, %322 ], [ %334, %333 ]
  store i64 %336, ptr %38, align 8, !tbaa !9
  br label %337

337:                                              ; preds = %335, %284, %274
  br label %338

338:                                              ; preds = %337, %256
  %339 = load i64, ptr %38, align 8, !tbaa !9
  %340 = add nsw i64 %339, 1
  %341 = srem i64 %340, 2
  store i64 %341, ptr %39, align 8, !tbaa !9
  %342 = load i64, ptr %38, align 8, !tbaa !9
  %343 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %342
  %344 = call i64 @libmetis__PQueueGetMax(ptr noundef %343)
  store i64 %344, ptr %32, align 8, !tbaa !9
  %345 = icmp eq i64 %344, -1
  br i1 %345, label %346, label %347

346:                                              ; preds = %338
  br label %842

347:                                              ; preds = %338
  %348 = load ptr, ptr %27, align 8, !tbaa !5
  %349 = load i64, ptr %32, align 8, !tbaa !9
  %350 = getelementptr inbounds i64, ptr %348, i64 %349
  %351 = load i64, ptr %350, align 8, !tbaa !9
  %352 = icmp eq i64 %351, -1
  br i1 %352, label %353, label %370

353:                                              ; preds = %347
  %354 = load i64, ptr %39, align 8, !tbaa !9
  %355 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %354
  %356 = load i64, ptr %32, align 8, !tbaa !9
  %357 = load ptr, ptr %18, align 8, !tbaa !5
  %358 = load i64, ptr %32, align 8, !tbaa !9
  %359 = getelementptr inbounds i64, ptr %357, i64 %358
  %360 = load i64, ptr %359, align 8, !tbaa !9
  %361 = load ptr, ptr %31, align 8, !tbaa !5
  %362 = load i64, ptr %32, align 8, !tbaa !9
  %363 = getelementptr inbounds %struct.nrinfodef, ptr %361, i64 %362
  %364 = getelementptr inbounds %struct.nrinfodef, ptr %363, i32 0, i32 0
  %365 = load i64, ptr %38, align 8, !tbaa !9
  %366 = getelementptr inbounds [2 x i64], ptr %364, i64 0, i64 %365
  %367 = load i64, ptr %366, align 8, !tbaa !9
  %368 = sub nsw i64 %360, %367
  %369 = call i64 @libmetis__PQueueDelete(ptr noundef %355, i64 noundef %356, i64 noundef %368)
  br label %370

370:                                              ; preds = %353, %347
  %371 = load ptr, ptr %18, align 8, !tbaa !5
  %372 = load i64, ptr %32, align 8, !tbaa !9
  %373 = getelementptr inbounds i64, ptr %371, i64 %372
  %374 = load i64, ptr %373, align 8, !tbaa !9
  %375 = load ptr, ptr %31, align 8, !tbaa !5
  %376 = load i64, ptr %32, align 8, !tbaa !9
  %377 = getelementptr inbounds %struct.nrinfodef, ptr %375, i64 %376
  %378 = getelementptr inbounds %struct.nrinfodef, ptr %377, i32 0, i32 0
  %379 = load i64, ptr %39, align 8, !tbaa !9
  %380 = getelementptr inbounds [2 x i64], ptr %378, i64 0, i64 %379
  %381 = load i64, ptr %380, align 8, !tbaa !9
  %382 = sub nsw i64 %374, %381
  %383 = load ptr, ptr %21, align 8, !tbaa !5
  %384 = getelementptr inbounds i64, ptr %383, i64 2
  %385 = load i64, ptr %384, align 8, !tbaa !9
  %386 = sub nsw i64 %385, %382
  store i64 %386, ptr %384, align 8, !tbaa !9
  %387 = load ptr, ptr %21, align 8, !tbaa !5
  %388 = load i64, ptr %38, align 8, !tbaa !9
  %389 = getelementptr inbounds i64, ptr %387, i64 %388
  %390 = load i64, ptr %389, align 8, !tbaa !9
  %391 = load ptr, ptr %18, align 8, !tbaa !5
  %392 = load i64, ptr %32, align 8, !tbaa !9
  %393 = getelementptr inbounds i64, ptr %391, i64 %392
  %394 = load i64, ptr %393, align 8, !tbaa !9
  %395 = add nsw i64 %390, %394
  %396 = load ptr, ptr %21, align 8, !tbaa !5
  %397 = load i64, ptr %39, align 8, !tbaa !9
  %398 = getelementptr inbounds i64, ptr %396, i64 %397
  %399 = load i64, ptr %398, align 8, !tbaa !9
  %400 = load ptr, ptr %31, align 8, !tbaa !5
  %401 = load i64, ptr %32, align 8, !tbaa !9
  %402 = getelementptr inbounds %struct.nrinfodef, ptr %400, i64 %401
  %403 = getelementptr inbounds %struct.nrinfodef, ptr %402, i32 0, i32 0
  %404 = load i64, ptr %39, align 8, !tbaa !9
  %405 = getelementptr inbounds [2 x i64], ptr %403, i64 0, i64 %404
  %406 = load i64, ptr %405, align 8, !tbaa !9
  %407 = sub nsw i64 %399, %406
  %408 = sub nsw i64 %395, %407
  %409 = icmp sgt i64 %408, 0
  br i1 %409, label %410, label %433

410:                                              ; preds = %370
  %411 = load ptr, ptr %21, align 8, !tbaa !5
  %412 = load i64, ptr %38, align 8, !tbaa !9
  %413 = getelementptr inbounds i64, ptr %411, i64 %412
  %414 = load i64, ptr %413, align 8, !tbaa !9
  %415 = load ptr, ptr %18, align 8, !tbaa !5
  %416 = load i64, ptr %32, align 8, !tbaa !9
  %417 = getelementptr inbounds i64, ptr %415, i64 %416
  %418 = load i64, ptr %417, align 8, !tbaa !9
  %419 = add nsw i64 %414, %418
  %420 = load ptr, ptr %21, align 8, !tbaa !5
  %421 = load i64, ptr %39, align 8, !tbaa !9
  %422 = getelementptr inbounds i64, ptr %420, i64 %421
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = load ptr, ptr %31, align 8, !tbaa !5
  %425 = load i64, ptr %32, align 8, !tbaa !9
  %426 = getelementptr inbounds %struct.nrinfodef, ptr %424, i64 %425
  %427 = getelementptr inbounds %struct.nrinfodef, ptr %426, i32 0, i32 0
  %428 = load i64, ptr %39, align 8, !tbaa !9
  %429 = getelementptr inbounds [2 x i64], ptr %427, i64 0, i64 %428
  %430 = load i64, ptr %429, align 8, !tbaa !9
  %431 = sub nsw i64 %423, %430
  %432 = sub nsw i64 %419, %431
  br label %457

433:                                              ; preds = %370
  %434 = load ptr, ptr %21, align 8, !tbaa !5
  %435 = load i64, ptr %38, 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 %18, align 8, !tbaa !5
  %439 = load i64, ptr %32, align 8, !tbaa !9
  %440 = getelementptr inbounds i64, ptr %438, i64 %439
  %441 = load i64, ptr %440, align 8, !tbaa !9
  %442 = add nsw i64 %437, %441
  %443 = load ptr, ptr %21, align 8, !tbaa !5
  %444 = load i64, ptr %39, align 8, !tbaa !9
  %445 = getelementptr inbounds i64, ptr %443, i64 %444
  %446 = load i64, ptr %445, align 8, !tbaa !9
  %447 = load ptr, ptr %31, align 8, !tbaa !5
  %448 = load i64, ptr %32, align 8, !tbaa !9
  %449 = getelementptr inbounds %struct.nrinfodef, ptr %447, i64 %448
  %450 = getelementptr inbounds %struct.nrinfodef, ptr %449, i32 0, i32 0
  %451 = load i64, ptr %39, align 8, !tbaa !9
  %452 = getelementptr inbounds [2 x i64], ptr %450, i64 0, i64 %451
  %453 = load i64, ptr %452, align 8, !tbaa !9
  %454 = sub nsw i64 %446, %453
  %455 = sub nsw i64 %442, %454
  %456 = sub nsw i64 0, %455
  br label %457

457:                                              ; preds = %433, %410
  %458 = phi i64 [ %432, %410 ], [ %456, %433 ]
  store i64 %458, ptr %42, align 8, !tbaa !9
  %459 = load ptr, ptr %21, align 8, !tbaa !5
  %460 = getelementptr inbounds i64, ptr %459, i64 2
  %461 = load i64, ptr %460, align 8, !tbaa !9
  %462 = load i64, ptr %34, align 8, !tbaa !9
  %463 = icmp slt i64 %461, %462
  br i1 %463, label %474, label %464

464:                                              ; preds = %457
  %465 = load ptr, ptr %21, align 8, !tbaa !5
  %466 = getelementptr inbounds i64, ptr %465, i64 2
  %467 = load i64, ptr %466, align 8, !tbaa !9
  %468 = load i64, ptr %34, align 8, !tbaa !9
  %469 = icmp eq i64 %467, %468
  br i1 %469, label %470, label %480

470:                                              ; preds = %464
  %471 = load i64, ptr %42, align 8, !tbaa !9
  %472 = load i64, ptr %41, align 8, !tbaa !9
  %473 = icmp slt i64 %471, %472
  br i1 %473, label %474, label %480

474:                                              ; preds = %470, %457
  %475 = load ptr, ptr %21, align 8, !tbaa !5
  %476 = getelementptr inbounds i64, ptr %475, i64 2
  %477 = load i64, ptr %476, align 8, !tbaa !9
  store i64 %477, ptr %34, align 8, !tbaa !9
  %478 = load i64, ptr %15, align 8, !tbaa !9
  store i64 %478, ptr %36, align 8, !tbaa !9
  %479 = load i64, ptr %42, align 8, !tbaa !9
  store i64 %479, ptr %41, align 8, !tbaa !9
  br label %504

480:                                              ; preds = %470, %464
  %481 = load i64, ptr %15, align 8, !tbaa !9
  %482 = load i64, ptr %36, align 8, !tbaa !9
  %483 = sub nsw i64 %481, %482
  %484 = load i64, ptr %40, align 8, !tbaa !9
  %485 = icmp sgt i64 %483, %484
  br i1 %485, label %486, label %503

486:                                              ; preds = %480
  %487 = load ptr, ptr %18, align 8, !tbaa !5
  %488 = load i64, ptr %32, align 8, !tbaa !9
  %489 = getelementptr inbounds i64, ptr %487, i64 %488
  %490 = load i64, ptr %489, align 8, !tbaa !9
  %491 = load ptr, ptr %31, align 8, !tbaa !5
  %492 = load i64, ptr %32, align 8, !tbaa !9
  %493 = getelementptr inbounds %struct.nrinfodef, ptr %491, i64 %492
  %494 = getelementptr inbounds %struct.nrinfodef, ptr %493, i32 0, i32 0
  %495 = load i64, ptr %39, align 8, !tbaa !9
  %496 = getelementptr inbounds [2 x i64], ptr %494, i64 0, i64 %495
  %497 = load i64, ptr %496, align 8, !tbaa !9
  %498 = sub nsw i64 %490, %497
  %499 = load ptr, ptr %21, align 8, !tbaa !5
  %500 = getelementptr inbounds i64, ptr %499, i64 2
  %501 = load i64, ptr %500, align 8, !tbaa !9
  %502 = add nsw i64 %501, %498
  store i64 %502, ptr %500, align 8, !tbaa !9
  br label %842

503:                                              ; preds = %480
  br label %504

504:                                              ; preds = %503, %474
  br label %505

505:                                              ; preds = %504
  %506 = load ptr, ptr %23, align 8, !tbaa !5
  %507 = load i64, ptr %14, align 8, !tbaa !9
  %508 = add nsw i64 %507, -1
  store i64 %508, ptr %14, align 8, !tbaa !9
  %509 = getelementptr inbounds i64, ptr %506, i64 %508
  %510 = load i64, ptr %509, align 8, !tbaa !9
  %511 = load ptr, ptr %23, align 8, !tbaa !5
  %512 = load ptr, ptr %24, align 8, !tbaa !5
  %513 = load i64, ptr %32, align 8, !tbaa !9
  %514 = getelementptr inbounds i64, ptr %512, i64 %513
  %515 = load i64, ptr %514, align 8, !tbaa !9
  %516 = getelementptr inbounds i64, ptr %511, i64 %515
  store i64 %510, ptr %516, align 8, !tbaa !9
  %517 = load ptr, ptr %24, align 8, !tbaa !5
  %518 = load i64, ptr %32, align 8, !tbaa !9
  %519 = getelementptr inbounds i64, ptr %517, i64 %518
  %520 = load i64, ptr %519, align 8, !tbaa !9
  %521 = load ptr, ptr %24, align 8, !tbaa !5
  %522 = load ptr, ptr %23, align 8, !tbaa !5
  %523 = load i64, ptr %14, align 8, !tbaa !9
  %524 = getelementptr inbounds i64, ptr %522, i64 %523
  %525 = load i64, ptr %524, align 8, !tbaa !9
  %526 = getelementptr inbounds i64, ptr %521, i64 %525
  store i64 %520, ptr %526, align 8, !tbaa !9
  %527 = load ptr, ptr %24, align 8, !tbaa !5
  %528 = load i64, ptr %32, align 8, !tbaa !9
  %529 = getelementptr inbounds i64, ptr %527, i64 %528
  store i64 -1, ptr %529, align 8, !tbaa !9
  br label %530

530:                                              ; preds = %505
  br label %531

531:                                              ; preds = %530
  %532 = load ptr, ptr %18, align 8, !tbaa !5
  %533 = load i64, ptr %32, align 8, !tbaa !9
  %534 = getelementptr inbounds i64, ptr %532, i64 %533
  %535 = load i64, ptr %534, align 8, !tbaa !9
  %536 = load ptr, ptr %21, align 8, !tbaa !5
  %537 = load i64, ptr %38, align 8, !tbaa !9
  %538 = getelementptr inbounds i64, ptr %536, i64 %537
  %539 = load i64, ptr %538, align 8, !tbaa !9
  %540 = add nsw i64 %539, %535
  store i64 %540, ptr %538, align 8, !tbaa !9
  %541 = load i64, ptr %38, align 8, !tbaa !9
  %542 = load ptr, ptr %20, align 8, !tbaa !5
  %543 = load i64, ptr %32, align 8, !tbaa !9
  %544 = getelementptr inbounds i64, ptr %542, i64 %543
  store i64 %541, ptr %544, align 8, !tbaa !9
  %545 = load i64, ptr %15, align 8, !tbaa !9
  %546 = load ptr, ptr %27, align 8, !tbaa !5
  %547 = load i64, ptr %32, align 8, !tbaa !9
  %548 = getelementptr inbounds i64, ptr %546, i64 %547
  store i64 %545, ptr %548, align 8, !tbaa !9
  %549 = load i64, ptr %32, align 8, !tbaa !9
  %550 = load ptr, ptr %28, align 8, !tbaa !5
  %551 = load i64, ptr %15, align 8, !tbaa !9
  %552 = getelementptr inbounds i64, ptr %550, i64 %551
  store i64 %549, ptr %552, align 8, !tbaa !9
  %553 = load ptr, ptr %17, align 8, !tbaa !5
  %554 = load i64, ptr %32, align 8, !tbaa !9
  %555 = getelementptr inbounds i64, ptr %553, i64 %554
  %556 = load i64, ptr %555, align 8, !tbaa !9
  store i64 %556, ptr %9, align 8, !tbaa !9
  br label %557

557:                                              ; preds = %793, %531
  %558 = load i64, ptr %9, align 8, !tbaa !9
  %559 = load ptr, ptr %17, align 8, !tbaa !5
  %560 = load i64, ptr %32, align 8, !tbaa !9
  %561 = add nsw i64 %560, 1
  %562 = getelementptr inbounds i64, ptr %559, i64 %561
  %563 = load i64, ptr %562, align 8, !tbaa !9
  %564 = icmp slt i64 %558, %563
  br i1 %564, label %565, label %796

565:                                              ; preds = %557
  %566 = load ptr, ptr %19, align 8, !tbaa !5
  %567 = load i64, ptr %9, align 8, !tbaa !9
  %568 = getelementptr inbounds i64, ptr %566, i64 %567
  %569 = load i64, ptr %568, align 8, !tbaa !9
  store i64 %569, ptr %10, align 8, !tbaa !9
  %570 = load ptr, ptr %20, align 8, !tbaa !5
  %571 = load i64, ptr %10, align 8, !tbaa !9
  %572 = getelementptr inbounds i64, ptr %570, i64 %571
  %573 = load i64, ptr %572, align 8, !tbaa !9
  %574 = icmp eq i64 %573, 2
  br i1 %574, label %575, label %627

575:                                              ; preds = %565
  %576 = load ptr, ptr %18, align 8, !tbaa !5
  %577 = load i64, ptr %10, align 8, !tbaa !9
  %578 = getelementptr inbounds i64, ptr %576, i64 %577
  %579 = load i64, ptr %578, align 8, !tbaa !9
  %580 = load ptr, ptr %31, align 8, !tbaa !5
  %581 = load i64, ptr %10, align 8, !tbaa !9
  %582 = getelementptr inbounds %struct.nrinfodef, ptr %580, i64 %581
  %583 = getelementptr inbounds %struct.nrinfodef, ptr %582, i32 0, i32 0
  %584 = load i64, ptr %38, align 8, !tbaa !9
  %585 = getelementptr inbounds [2 x i64], ptr %583, i64 0, i64 %584
  %586 = load i64, ptr %585, align 8, !tbaa !9
  %587 = sub nsw i64 %579, %586
  store i64 %587, ptr %33, align 8, !tbaa !9
  %588 = load ptr, ptr %18, align 8, !tbaa !5
  %589 = load i64, ptr %32, align 8, !tbaa !9
  %590 = getelementptr inbounds i64, ptr %588, i64 %589
  %591 = load i64, ptr %590, align 8, !tbaa !9
  %592 = load ptr, ptr %31, align 8, !tbaa !5
  %593 = load i64, ptr %10, align 8, !tbaa !9
  %594 = getelementptr inbounds %struct.nrinfodef, ptr %592, i64 %593
  %595 = getelementptr inbounds %struct.nrinfodef, ptr %594, i32 0, i32 0
  %596 = load i64, ptr %38, align 8, !tbaa !9
  %597 = getelementptr inbounds [2 x i64], ptr %595, i64 0, i64 %596
  %598 = load i64, ptr %597, align 8, !tbaa !9
  %599 = add nsw i64 %598, %591
  store i64 %599, ptr %597, align 8, !tbaa !9
  %600 = load ptr, ptr %27, align 8, !tbaa !5
  %601 = load i64, ptr %10, align 8, !tbaa !9
  %602 = getelementptr inbounds i64, ptr %600, i64 %601
  %603 = load i64, ptr %602, align 8, !tbaa !9
  %604 = icmp eq i64 %603, -1
  br i1 %604, label %614, label %605

605:                                              ; preds = %575
  %606 = load ptr, ptr %27, align 8, !tbaa !5
  %607 = load i64, ptr %10, align 8, !tbaa !9
  %608 = getelementptr inbounds i64, ptr %606, i64 %607
  %609 = load i64, ptr %608, align 8, !tbaa !9
  %610 = load i64, ptr %39, align 8, !tbaa !9
  %611 = add nsw i64 2, %610
  %612 = sub nsw i64 0, %611
  %613 = icmp eq i64 %609, %612
  br i1 %613, label %614, label %626

614:                                              ; preds = %605, %575
  %615 = load i64, ptr %39, align 8, !tbaa !9
  %616 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %615
  %617 = load i64, ptr %10, align 8, !tbaa !9
  %618 = load i64, ptr %33, align 8, !tbaa !9
  %619 = load i64, ptr %33, align 8, !tbaa !9
  %620 = load ptr, ptr %18, align 8, !tbaa !5
  %621 = load i64, ptr %32, align 8, !tbaa !9
  %622 = getelementptr inbounds i64, ptr %620, i64 %621
  %623 = load i64, ptr %622, align 8, !tbaa !9
  %624 = sub nsw i64 %619, %623
  %625 = call i64 @libmetis__PQueueUpdate(ptr noundef %616, i64 noundef %617, i64 noundef %618, i64 noundef %624)
  br label %626

626:                                              ; preds = %614, %605
  br label %792

627:                                              ; preds = %565
  %628 = load ptr, ptr %20, align 8, !tbaa !5
  %629 = load i64, ptr %10, align 8, !tbaa !9
  %630 = getelementptr inbounds i64, ptr %628, i64 %629
  %631 = load i64, ptr %630, align 8, !tbaa !9
  %632 = load i64, ptr %39, align 8, !tbaa !9
  %633 = icmp eq i64 %631, %632
  br i1 %633, label %634, label %791

634:                                              ; preds = %627
  br label %635

635:                                              ; preds = %634
  %636 = load i64, ptr %10, align 8, !tbaa !9
  %637 = load ptr, ptr %23, align 8, !tbaa !5
  %638 = load i64, ptr %14, align 8, !tbaa !9
  %639 = getelementptr inbounds i64, ptr %637, i64 %638
  store i64 %636, ptr %639, align 8, !tbaa !9
  %640 = load i64, ptr %14, align 8, !tbaa !9
  %641 = add nsw i64 %640, 1
  store i64 %641, ptr %14, align 8, !tbaa !9
  %642 = load ptr, ptr %24, align 8, !tbaa !5
  %643 = load i64, ptr %10, align 8, !tbaa !9
  %644 = getelementptr inbounds i64, ptr %642, i64 %643
  store i64 %640, ptr %644, align 8, !tbaa !9
  br label %645

645:                                              ; preds = %635
  br label %646

646:                                              ; preds = %645
  %647 = load i64, ptr %10, align 8, !tbaa !9
  %648 = load ptr, ptr %26, align 8, !tbaa !5
  %649 = load i64, ptr %16, align 8, !tbaa !9
  %650 = add nsw i64 %649, 1
  store i64 %650, ptr %16, align 8, !tbaa !9
  %651 = getelementptr inbounds i64, ptr %648, i64 %649
  store i64 %647, ptr %651, align 8, !tbaa !9
  %652 = load ptr, ptr %20, align 8, !tbaa !5
  %653 = load i64, ptr %10, align 8, !tbaa !9
  %654 = getelementptr inbounds i64, ptr %652, i64 %653
  store i64 2, ptr %654, align 8, !tbaa !9
  %655 = load ptr, ptr %18, align 8, !tbaa !5
  %656 = load i64, ptr %10, align 8, !tbaa !9
  %657 = getelementptr inbounds i64, ptr %655, i64 %656
  %658 = load i64, ptr %657, align 8, !tbaa !9
  %659 = load ptr, ptr %21, align 8, !tbaa !5
  %660 = load i64, ptr %39, align 8, !tbaa !9
  %661 = getelementptr inbounds i64, ptr %659, i64 %660
  %662 = load i64, ptr %661, align 8, !tbaa !9
  %663 = sub nsw i64 %662, %658
  store i64 %663, ptr %661, align 8, !tbaa !9
  %664 = load ptr, ptr %31, align 8, !tbaa !5
  %665 = load i64, ptr %10, align 8, !tbaa !9
  %666 = getelementptr inbounds %struct.nrinfodef, ptr %664, i64 %665
  %667 = getelementptr inbounds %struct.nrinfodef, ptr %666, i32 0, i32 0
  %668 = getelementptr inbounds [2 x i64], ptr %667, i64 0, i64 0
  store ptr %668, ptr %22, align 8, !tbaa !5
  %669 = load ptr, ptr %22, align 8, !tbaa !5
  %670 = getelementptr inbounds i64, ptr %669, i64 1
  store i64 0, ptr %670, align 8, !tbaa !9
  %671 = load ptr, ptr %22, align 8, !tbaa !5
  %672 = getelementptr inbounds i64, ptr %671, i64 0
  store i64 0, ptr %672, align 8, !tbaa !9
  %673 = load ptr, ptr %17, align 8, !tbaa !5
  %674 = load i64, ptr %10, align 8, !tbaa !9
  %675 = getelementptr inbounds i64, ptr %673, i64 %674
  %676 = load i64, ptr %675, align 8, !tbaa !9
  store i64 %676, ptr %11, align 8, !tbaa !9
  br label %677

677:                                              ; preds = %761, %646
  %678 = load i64, ptr %11, align 8, !tbaa !9
  %679 = load ptr, ptr %17, align 8, !tbaa !5
  %680 = load i64, ptr %10, align 8, !tbaa !9
  %681 = add nsw i64 %680, 1
  %682 = getelementptr inbounds i64, ptr %679, i64 %681
  %683 = load i64, ptr %682, align 8, !tbaa !9
  %684 = icmp slt i64 %678, %683
  br i1 %684, label %685, label %764

685:                                              ; preds = %677
  %686 = load ptr, ptr %19, align 8, !tbaa !5
  %687 = load i64, ptr %11, align 8, !tbaa !9
  %688 = getelementptr inbounds i64, ptr %686, i64 %687
  %689 = load i64, ptr %688, align 8, !tbaa !9
  store i64 %689, ptr %12, align 8, !tbaa !9
  %690 = load ptr, ptr %20, align 8, !tbaa !5
  %691 = load i64, ptr %12, align 8, !tbaa !9
  %692 = getelementptr inbounds i64, ptr %690, i64 %691
  %693 = load i64, ptr %692, align 8, !tbaa !9
  %694 = icmp ne i64 %693, 2
  br i1 %694, label %695, label %708

695:                                              ; preds = %685
  %696 = load ptr, ptr %18, align 8, !tbaa !5
  %697 = load i64, ptr %12, align 8, !tbaa !9
  %698 = getelementptr inbounds i64, ptr %696, i64 %697
  %699 = load i64, ptr %698, align 8, !tbaa !9
  %700 = load ptr, ptr %22, align 8, !tbaa !5
  %701 = load ptr, ptr %20, align 8, !tbaa !5
  %702 = load i64, ptr %12, align 8, !tbaa !9
  %703 = getelementptr inbounds i64, ptr %701, i64 %702
  %704 = load i64, ptr %703, align 8, !tbaa !9
  %705 = getelementptr inbounds i64, ptr %700, i64 %704
  %706 = load i64, ptr %705, align 8, !tbaa !9
  %707 = add nsw i64 %706, %699
  store i64 %707, ptr %705, align 8, !tbaa !9
  br label %760

708:                                              ; preds = %685
  %709 = load ptr, ptr %18, align 8, !tbaa !5
  %710 = load i64, ptr %12, align 8, !tbaa !9
  %711 = getelementptr inbounds i64, ptr %709, i64 %710
  %712 = load i64, ptr %711, align 8, !tbaa !9
  %713 = load ptr, ptr %31, align 8, !tbaa !5
  %714 = load i64, ptr %12, align 8, !tbaa !9
  %715 = getelementptr inbounds %struct.nrinfodef, ptr %713, i64 %714
  %716 = getelementptr inbounds %struct.nrinfodef, ptr %715, i32 0, i32 0
  %717 = load i64, ptr %39, align 8, !tbaa !9
  %718 = getelementptr inbounds [2 x i64], ptr %716, i64 0, i64 %717
  %719 = load i64, ptr %718, align 8, !tbaa !9
  %720 = sub nsw i64 %712, %719
  store i64 %720, ptr %33, align 8, !tbaa !9
  %721 = load ptr, ptr %18, align 8, !tbaa !5
  %722 = load i64, ptr %10, align 8, !tbaa !9
  %723 = getelementptr inbounds i64, ptr %721, i64 %722
  %724 = load i64, ptr %723, align 8, !tbaa !9
  %725 = load ptr, ptr %31, align 8, !tbaa !5
  %726 = load i64, ptr %12, align 8, !tbaa !9
  %727 = getelementptr inbounds %struct.nrinfodef, ptr %725, i64 %726
  %728 = getelementptr inbounds %struct.nrinfodef, ptr %727, i32 0, i32 0
  %729 = load i64, ptr %39, align 8, !tbaa !9
  %730 = getelementptr inbounds [2 x i64], ptr %728, i64 0, i64 %729
  %731 = load i64, ptr %730, align 8, !tbaa !9
  %732 = sub nsw i64 %731, %724
  store i64 %732, ptr %730, align 8, !tbaa !9
  %733 = load ptr, ptr %27, align 8, !tbaa !5
  %734 = load i64, ptr %12, align 8, !tbaa !9
  %735 = getelementptr inbounds i64, ptr %733, i64 %734
  %736 = load i64, ptr %735, align 8, !tbaa !9
  %737 = icmp eq i64 %736, -1
  br i1 %737, label %747, label %738

738:                                              ; preds = %708
  %739 = load ptr, ptr %27, align 8, !tbaa !5
  %740 = load i64, ptr %12, align 8, !tbaa !9
  %741 = getelementptr inbounds i64, ptr %739, i64 %740
  %742 = load i64, ptr %741, align 8, !tbaa !9
  %743 = load i64, ptr %38, align 8, !tbaa !9
  %744 = add nsw i64 2, %743
  %745 = sub nsw i64 0, %744
  %746 = icmp eq i64 %742, %745
  br i1 %746, label %747, label %759

747:                                              ; preds = %738, %708
  %748 = load i64, ptr %38, align 8, !tbaa !9
  %749 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %748
  %750 = load i64, ptr %12, align 8, !tbaa !9
  %751 = load i64, ptr %33, align 8, !tbaa !9
  %752 = load i64, ptr %33, align 8, !tbaa !9
  %753 = load ptr, ptr %18, align 8, !tbaa !5
  %754 = load i64, ptr %10, align 8, !tbaa !9
  %755 = getelementptr inbounds i64, ptr %753, i64 %754
  %756 = load i64, ptr %755, align 8, !tbaa !9
  %757 = add nsw i64 %752, %756
  %758 = call i64 @libmetis__PQueueUpdate(ptr noundef %749, i64 noundef %750, i64 noundef %751, i64 noundef %757)
  br label %759

759:                                              ; preds = %747, %738
  br label %760

760:                                              ; preds = %759, %695
  br label %761

761:                                              ; preds = %760
  %762 = load i64, ptr %11, align 8, !tbaa !9
  %763 = add nsw i64 %762, 1
  store i64 %763, ptr %11, align 8, !tbaa !9
  br label %677, !llvm.loop !32

764:                                              ; preds = %677
  %765 = load ptr, ptr %27, align 8, !tbaa !5
  %766 = load i64, ptr %10, align 8, !tbaa !9
  %767 = getelementptr inbounds i64, ptr %765, i64 %766
  %768 = load i64, ptr %767, align 8, !tbaa !9
  %769 = icmp eq i64 %768, -1
  br i1 %769, label %770, label %790

770:                                              ; preds = %764
  %771 = load i64, ptr %38, align 8, !tbaa !9
  %772 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 %771
  %773 = load i64, ptr %10, align 8, !tbaa !9
  %774 = load ptr, ptr %18, align 8, !tbaa !5
  %775 = load i64, ptr %10, align 8, !tbaa !9
  %776 = getelementptr inbounds i64, ptr %774, i64 %775
  %777 = load i64, ptr %776, align 8, !tbaa !9
  %778 = load ptr, ptr %22, align 8, !tbaa !5
  %779 = load i64, ptr %39, align 8, !tbaa !9
  %780 = getelementptr inbounds i64, ptr %778, i64 %779
  %781 = load i64, ptr %780, align 8, !tbaa !9
  %782 = sub nsw i64 %777, %781
  %783 = call i64 @libmetis__PQueueInsert(ptr noundef %772, i64 noundef %773, i64 noundef %782)
  %784 = load i64, ptr %38, align 8, !tbaa !9
  %785 = add nsw i64 2, %784
  %786 = sub nsw i64 0, %785
  %787 = load ptr, ptr %27, align 8, !tbaa !5
  %788 = load i64, ptr %10, align 8, !tbaa !9
  %789 = getelementptr inbounds i64, ptr %787, i64 %788
  store i64 %786, ptr %789, align 8, !tbaa !9
  br label %790

790:                                              ; preds = %770, %764
  br label %791

791:                                              ; preds = %790, %627
  br label %792

792:                                              ; preds = %791, %626
  br label %793

793:                                              ; preds = %792
  %794 = load i64, ptr %9, align 8, !tbaa !9
  %795 = add nsw i64 %794, 1
  store i64 %795, ptr %9, align 8, !tbaa !9
  br label %557, !llvm.loop !33

796:                                              ; preds = %557
  %797 = load i64, ptr %16, align 8, !tbaa !9
  %798 = load ptr, ptr %25, align 8, !tbaa !5
  %799 = load i64, ptr %15, align 8, !tbaa !9
  %800 = add nsw i64 %799, 1
  %801 = getelementptr inbounds i64, ptr %798, i64 %800
  store i64 %797, ptr %801, align 8, !tbaa !9
  %802 = load ptr, ptr %4, align 8, !tbaa !5
  %803 = getelementptr inbounds %struct.controldef, ptr %802, i32 0, i32 1
  %804 = load i64, ptr %803, align 8, !tbaa !22
  %805 = and i64 %804, 32
  %806 = icmp ne i64 %805, 0
  br i1 %806, label %807, label %838

807:                                              ; preds = %796
  %808 = load i64, ptr %32, align 8, !tbaa !9
  %809 = load i64, ptr %38, align 8, !tbaa !9
  %810 = load i64, ptr %38, align 8, !tbaa !9
  %811 = getelementptr inbounds [2 x i64], ptr %44, i64 0, i64 %810
  %812 = load i64, ptr %811, align 8, !tbaa !9
  %813 = load i64, ptr %39, align 8, !tbaa !9
  %814 = getelementptr inbounds [2 x i64], ptr %44, i64 0, i64 %813
  %815 = load i64, ptr %814, align 8, !tbaa !9
  %816 = load ptr, ptr %18, align 8, !tbaa !5
  %817 = load i64, ptr %38, align 8, !tbaa !9
  %818 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 %817
  %819 = load i64, ptr %818, align 8, !tbaa !9
  %820 = getelementptr inbounds i64, ptr %816, i64 %819
  %821 = load i64, ptr %820, align 8, !tbaa !9
  %822 = load ptr, ptr %18, align 8, !tbaa !5
  %823 = load i64, ptr %39, align 8, !tbaa !9
  %824 = getelementptr inbounds [2 x i64], ptr %43, i64 0, i64 %823
  %825 = load i64, ptr %824, align 8, !tbaa !9
  %826 = getelementptr inbounds i64, ptr %822, i64 %825
  %827 = load i64, ptr %826, align 8, !tbaa !9
  %828 = load ptr, ptr %21, align 8, !tbaa !5
  %829 = getelementptr inbounds i64, ptr %828, i64 0
  %830 = load i64, ptr %829, align 8, !tbaa !9
  %831 = load ptr, ptr %21, align 8, !tbaa !5
  %832 = getelementptr inbounds i64, ptr %831, i64 1
  %833 = load i64, ptr %832, align 8, !tbaa !9
  %834 = load ptr, ptr %21, align 8, !tbaa !5
  %835 = getelementptr inbounds i64, ptr %834, i64 2
  %836 = load i64, ptr %835, align 8, !tbaa !9
  %837 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, i64 noundef %808, i64 noundef %809, i64 noundef %812, i64 noundef %815, i64 noundef %821, i64 noundef %827, i64 noundef %830, i64 noundef %833, i64 noundef %836)
  br label %838

838:                                              ; preds = %807, %796
  br label %839

839:                                              ; preds = %838
  %840 = load i64, ptr %15, align 8, !tbaa !9
  %841 = add nsw i64 %840, 1
  store i64 %841, ptr %15, align 8, !tbaa !9
  br label %252, !llvm.loop !34

842:                                              ; preds = %486, %346, %252
  %843 = load i64, ptr %15, align 8, !tbaa !9
  %844 = add nsw i64 %843, -1
  store i64 %844, ptr %15, align 8, !tbaa !9
  br label %845

845:                                              ; preds = %1070, %842
  %846 = load i64, ptr %15, align 8, !tbaa !9
  %847 = load i64, ptr %36, align 8, !tbaa !9
  %848 = icmp sgt i64 %846, %847
  br i1 %848, label %849, label %1073

849:                                              ; preds = %845
  %850 = load ptr, ptr %28, align 8, !tbaa !5
  %851 = load i64, ptr %15, align 8, !tbaa !9
  %852 = getelementptr inbounds i64, ptr %850, i64 %851
  %853 = load i64, ptr %852, align 8, !tbaa !9
  store i64 %853, ptr %32, align 8, !tbaa !9
  %854 = load ptr, ptr %20, align 8, !tbaa !5
  %855 = load i64, ptr %32, align 8, !tbaa !9
  %856 = getelementptr inbounds i64, ptr %854, i64 %855
  %857 = load i64, ptr %856, align 8, !tbaa !9
  store i64 %857, ptr %38, align 8, !tbaa !9
  %858 = load i64, ptr %38, align 8, !tbaa !9
  %859 = add nsw i64 %858, 1
  %860 = srem i64 %859, 2
  store i64 %860, ptr %39, align 8, !tbaa !9
  br label %861

861:                                              ; preds = %849
  %862 = load ptr, ptr %18, align 8, !tbaa !5
  %863 = load i64, ptr %32, align 8, !tbaa !9
  %864 = getelementptr inbounds i64, ptr %862, i64 %863
  %865 = load i64, ptr %864, align 8, !tbaa !9
  %866 = load ptr, ptr %21, align 8, !tbaa !5
  %867 = getelementptr inbounds i64, ptr %866, i64 2
  %868 = load i64, ptr %867, align 8, !tbaa !9
  %869 = add nsw i64 %868, %865
  store i64 %869, ptr %867, align 8, !tbaa !9
  %870 = load ptr, ptr %18, align 8, !tbaa !5
  %871 = load i64, ptr %32, align 8, !tbaa !9
  %872 = getelementptr inbounds i64, ptr %870, i64 %871
  %873 = load i64, ptr %872, align 8, !tbaa !9
  %874 = load ptr, ptr %21, align 8, !tbaa !5
  %875 = load i64, ptr %38, align 8, !tbaa !9
  %876 = getelementptr inbounds i64, ptr %874, i64 %875
  %877 = load i64, ptr %876, align 8, !tbaa !9
  %878 = sub nsw i64 %877, %873
  store i64 %878, ptr %876, align 8, !tbaa !9
  br label %879

879:                                              ; preds = %861
  br label %880

880:                                              ; preds = %879
  %881 = load ptr, ptr %20, align 8, !tbaa !5
  %882 = load i64, ptr %32, align 8, !tbaa !9
  %883 = getelementptr inbounds i64, ptr %881, i64 %882
  store i64 2, ptr %883, align 8, !tbaa !9
  br label %884

884:                                              ; preds = %880
  %885 = load i64, ptr %32, align 8, !tbaa !9
  %886 = load ptr, ptr %23, align 8, !tbaa !5
  %887 = load i64, ptr %14, align 8, !tbaa !9
  %888 = getelementptr inbounds i64, ptr %886, i64 %887
  store i64 %885, ptr %888, align 8, !tbaa !9
  %889 = load i64, ptr %14, align 8, !tbaa !9
  %890 = add nsw i64 %889, 1
  store i64 %890, ptr %14, align 8, !tbaa !9
  %891 = load ptr, ptr %24, align 8, !tbaa !5
  %892 = load i64, ptr %32, align 8, !tbaa !9
  %893 = getelementptr inbounds i64, ptr %891, i64 %892
  store i64 %889, ptr %893, align 8, !tbaa !9
  br label %894

894:                                              ; preds = %884
  br label %895

895:                                              ; preds = %894
  %896 = load ptr, ptr %31, align 8, !tbaa !5
  %897 = load i64, ptr %32, align 8, !tbaa !9
  %898 = getelementptr inbounds %struct.nrinfodef, ptr %896, i64 %897
  %899 = getelementptr inbounds %struct.nrinfodef, ptr %898, i32 0, i32 0
  %900 = getelementptr inbounds [2 x i64], ptr %899, i64 0, i64 0
  store ptr %900, ptr %22, align 8, !tbaa !5
  %901 = load ptr, ptr %22, align 8, !tbaa !5
  %902 = getelementptr inbounds i64, ptr %901, i64 1
  store i64 0, ptr %902, align 8, !tbaa !9
  %903 = load ptr, ptr %22, align 8, !tbaa !5
  %904 = getelementptr inbounds i64, ptr %903, i64 0
  store i64 0, ptr %904, align 8, !tbaa !9
  %905 = load ptr, ptr %17, align 8, !tbaa !5
  %906 = load i64, ptr %32, align 8, !tbaa !9
  %907 = getelementptr inbounds i64, ptr %905, i64 %906
  %908 = load i64, ptr %907, align 8, !tbaa !9
  store i64 %908, ptr %9, align 8, !tbaa !9
  br label %909

909:                                              ; preds = %954, %895
  %910 = load i64, ptr %9, align 8, !tbaa !9
  %911 = load ptr, ptr %17, align 8, !tbaa !5
  %912 = load i64, ptr %32, align 8, !tbaa !9
  %913 = add nsw i64 %912, 1
  %914 = getelementptr inbounds i64, ptr %911, i64 %913
  %915 = load i64, ptr %914, align 8, !tbaa !9
  %916 = icmp slt i64 %910, %915
  br i1 %916, label %917, label %957

917:                                              ; preds = %909
  %918 = load ptr, ptr %19, align 8, !tbaa !5
  %919 = load i64, ptr %9, align 8, !tbaa !9
  %920 = getelementptr inbounds i64, ptr %918, i64 %919
  %921 = load i64, ptr %920, align 8, !tbaa !9
  store i64 %921, ptr %10, align 8, !tbaa !9
  %922 = load ptr, ptr %20, align 8, !tbaa !5
  %923 = load i64, ptr %10, align 8, !tbaa !9
  %924 = getelementptr inbounds i64, ptr %922, i64 %923
  %925 = load i64, ptr %924, align 8, !tbaa !9
  %926 = icmp eq i64 %925, 2
  br i1 %926, label %927, label %940

927:                                              ; preds = %917
  %928 = load ptr, ptr %18, align 8, !tbaa !5
  %929 = load i64, ptr %32, align 8, !tbaa !9
  %930 = getelementptr inbounds i64, ptr %928, i64 %929
  %931 = load i64, ptr %930, align 8, !tbaa !9
  %932 = load ptr, ptr %31, align 8, !tbaa !5
  %933 = load i64, ptr %10, align 8, !tbaa !9
  %934 = getelementptr inbounds %struct.nrinfodef, ptr %932, i64 %933
  %935 = getelementptr inbounds %struct.nrinfodef, ptr %934, i32 0, i32 0
  %936 = load i64, ptr %38, align 8, !tbaa !9
  %937 = getelementptr inbounds [2 x i64], ptr %935, i64 0, i64 %936
  %938 = load i64, ptr %937, align 8, !tbaa !9
  %939 = sub nsw i64 %938, %931
  store i64 %939, ptr %937, align 8, !tbaa !9
  br label %953

940:                                              ; preds = %917
  %941 = load ptr, ptr %18, align 8, !tbaa !5
  %942 = load i64, ptr %10, align 8, !tbaa !9
  %943 = getelementptr inbounds i64, ptr %941, i64 %942
  %944 = load i64, ptr %943, align 8, !tbaa !9
  %945 = load ptr, ptr %22, align 8, !tbaa !5
  %946 = load ptr, ptr %20, align 8, !tbaa !5
  %947 = load i64, ptr %10, align 8, !tbaa !9
  %948 = getelementptr inbounds i64, ptr %946, i64 %947
  %949 = load i64, ptr %948, align 8, !tbaa !9
  %950 = getelementptr inbounds i64, ptr %945, i64 %949
  %951 = load i64, ptr %950, align 8, !tbaa !9
  %952 = add nsw i64 %951, %944
  store i64 %952, ptr %950, align 8, !tbaa !9
  br label %953

953:                                              ; preds = %940, %927
  br label %954

954:                                              ; preds = %953
  %955 = load i64, ptr %9, align 8, !tbaa !9
  %956 = add nsw i64 %955, 1
  store i64 %956, ptr %9, align 8, !tbaa !9
  br label %909, !llvm.loop !35

957:                                              ; preds = %909
  %958 = load ptr, ptr %25, align 8, !tbaa !5
  %959 = load i64, ptr %15, align 8, !tbaa !9
  %960 = getelementptr inbounds i64, ptr %958, i64 %959
  %961 = load i64, ptr %960, align 8, !tbaa !9
  store i64 %961, ptr %9, align 8, !tbaa !9
  br label %962

962:                                              ; preds = %1066, %957
  %963 = load i64, ptr %9, align 8, !tbaa !9
  %964 = load ptr, ptr %25, align 8, !tbaa !5
  %965 = load i64, ptr %15, align 8, !tbaa !9
  %966 = add nsw i64 %965, 1
  %967 = getelementptr inbounds i64, ptr %964, i64 %966
  %968 = load i64, ptr %967, align 8, !tbaa !9
  %969 = icmp slt i64 %963, %968
  br i1 %969, label %970, label %1069

970:                                              ; preds = %962
  %971 = load ptr, ptr %26, align 8, !tbaa !5
  %972 = load i64, ptr %9, align 8, !tbaa !9
  %973 = getelementptr inbounds i64, ptr %971, i64 %972
  %974 = load i64, ptr %973, align 8, !tbaa !9
  store i64 %974, ptr %10, align 8, !tbaa !9
  %975 = load i64, ptr %39, align 8, !tbaa !9
  %976 = load ptr, ptr %20, align 8, !tbaa !5
  %977 = load i64, ptr %10, align 8, !tbaa !9
  %978 = getelementptr inbounds i64, ptr %976, i64 %977
  store i64 %975, ptr %978, align 8, !tbaa !9
  br label %979

979:                                              ; preds = %970
  %980 = load ptr, ptr %18, align 8, !tbaa !5
  %981 = load i64, ptr %10, align 8, !tbaa !9
  %982 = getelementptr inbounds i64, ptr %980, i64 %981
  %983 = load i64, ptr %982, align 8, !tbaa !9
  %984 = load ptr, ptr %21, align 8, !tbaa !5
  %985 = load i64, ptr %39, align 8, !tbaa !9
  %986 = getelementptr inbounds i64, ptr %984, i64 %985
  %987 = load i64, ptr %986, align 8, !tbaa !9
  %988 = add nsw i64 %987, %983
  store i64 %988, ptr %986, align 8, !tbaa !9
  %989 = load ptr, ptr %18, align 8, !tbaa !5
  %990 = load i64, ptr %10, align 8, !tbaa !9
  %991 = getelementptr inbounds i64, ptr %989, i64 %990
  %992 = load i64, ptr %991, align 8, !tbaa !9
  %993 = load ptr, ptr %21, align 8, !tbaa !5
  %994 = getelementptr inbounds i64, ptr %993, i64 2
  %995 = load i64, ptr %994, align 8, !tbaa !9
  %996 = sub nsw i64 %995, %992
  store i64 %996, ptr %994, align 8, !tbaa !9
  br label %997

997:                                              ; preds = %979
  br label %998

998:                                              ; preds = %997
  br label %999

999:                                              ; preds = %998
  %1000 = load ptr, ptr %23, align 8, !tbaa !5
  %1001 = load i64, ptr %14, align 8, !tbaa !9
  %1002 = add nsw i64 %1001, -1
  store i64 %1002, ptr %14, align 8, !tbaa !9
  %1003 = getelementptr inbounds i64, ptr %1000, i64 %1002
  %1004 = load i64, ptr %1003, align 8, !tbaa !9
  %1005 = load ptr, ptr %23, align 8, !tbaa !5
  %1006 = load ptr, ptr %24, align 8, !tbaa !5
  %1007 = load i64, ptr %10, align 8, !tbaa !9
  %1008 = getelementptr inbounds i64, ptr %1006, i64 %1007
  %1009 = load i64, ptr %1008, align 8, !tbaa !9
  %1010 = getelementptr inbounds i64, ptr %1005, i64 %1009
  store i64 %1004, ptr %1010, align 8, !tbaa !9
  %1011 = load ptr, ptr %24, align 8, !tbaa !5
  %1012 = load i64, ptr %10, align 8, !tbaa !9
  %1013 = getelementptr inbounds i64, ptr %1011, i64 %1012
  %1014 = load i64, ptr %1013, align 8, !tbaa !9
  %1015 = load ptr, ptr %24, align 8, !tbaa !5
  %1016 = load ptr, ptr %23, align 8, !tbaa !5
  %1017 = load i64, ptr %14, align 8, !tbaa !9
  %1018 = getelementptr inbounds i64, ptr %1016, i64 %1017
  %1019 = load i64, ptr %1018, align 8, !tbaa !9
  %1020 = getelementptr inbounds i64, ptr %1015, i64 %1019
  store i64 %1014, ptr %1020, align 8, !tbaa !9
  %1021 = load ptr, ptr %24, align 8, !tbaa !5
  %1022 = load i64, ptr %10, align 8, !tbaa !9
  %1023 = getelementptr inbounds i64, ptr %1021, i64 %1022
  store i64 -1, ptr %1023, align 8, !tbaa !9
  br label %1024

1024:                                             ; preds = %999
  br label %1025

1025:                                             ; preds = %1024
  %1026 = load ptr, ptr %17, align 8, !tbaa !5
  %1027 = load i64, ptr %10, align 8, !tbaa !9
  %1028 = getelementptr inbounds i64, ptr %1026, i64 %1027
  %1029 = load i64, ptr %1028, align 8, !tbaa !9
  store i64 %1029, ptr %11, align 8, !tbaa !9
  br label %1030

1030:                                             ; preds = %1062, %1025
  %1031 = load i64, ptr %11, align 8, !tbaa !9
  %1032 = load ptr, ptr %17, align 8, !tbaa !5
  %1033 = load i64, ptr %10, align 8, !tbaa !9
  %1034 = add nsw i64 %1033, 1
  %1035 = getelementptr inbounds i64, ptr %1032, i64 %1034
  %1036 = load i64, ptr %1035, align 8, !tbaa !9
  %1037 = icmp slt i64 %1031, %1036
  br i1 %1037, label %1038, label %1065

1038:                                             ; preds = %1030
  %1039 = load ptr, ptr %19, align 8, !tbaa !5
  %1040 = load i64, ptr %11, align 8, !tbaa !9
  %1041 = getelementptr inbounds i64, ptr %1039, i64 %1040
  %1042 = load i64, ptr %1041, align 8, !tbaa !9
  store i64 %1042, ptr %12, align 8, !tbaa !9
  %1043 = load ptr, ptr %20, align 8, !tbaa !5
  %1044 = load i64, ptr %12, align 8, !tbaa !9
  %1045 = getelementptr inbounds i64, ptr %1043, i64 %1044
  %1046 = load i64, ptr %1045, align 8, !tbaa !9
  %1047 = icmp eq i64 %1046, 2
  br i1 %1047, label %1048, label %1061

1048:                                             ; preds = %1038
  %1049 = load ptr, ptr %18, align 8, !tbaa !5
  %1050 = load i64, ptr %10, align 8, !tbaa !9
  %1051 = getelementptr inbounds i64, ptr %1049, i64 %1050
  %1052 = load i64, ptr %1051, align 8, !tbaa !9
  %1053 = load ptr, ptr %31, align 8, !tbaa !5
  %1054 = load i64, ptr %12, align 8, !tbaa !9
  %1055 = getelementptr inbounds %struct.nrinfodef, ptr %1053, i64 %1054
  %1056 = getelementptr inbounds %struct.nrinfodef, ptr %1055, i32 0, i32 0
  %1057 = load i64, ptr %39, align 8, !tbaa !9
  %1058 = getelementptr inbounds [2 x i64], ptr %1056, i64 0, i64 %1057
  %1059 = load i64, ptr %1058, align 8, !tbaa !9
  %1060 = add nsw i64 %1059, %1052
  store i64 %1060, ptr %1058, align 8, !tbaa !9
  br label %1061

1061:                                             ; preds = %1048, %1038
  br label %1062

1062:                                             ; preds = %1061
  %1063 = load i64, ptr %11, align 8, !tbaa !9
  %1064 = add nsw i64 %1063, 1
  store i64 %1064, ptr %11, align 8, !tbaa !9
  br label %1030, !llvm.loop !36

1065:                                             ; preds = %1030
  br label %1066

1066:                                             ; preds = %1065
  %1067 = load i64, ptr %9, align 8, !tbaa !9
  %1068 = add nsw i64 %1067, 1
  store i64 %1068, ptr %9, align 8, !tbaa !9
  br label %962, !llvm.loop !37

1069:                                             ; preds = %962
  br label %1070

1070:                                             ; preds = %1069
  %1071 = load i64, ptr %15, align 8, !tbaa !9
  %1072 = add nsw i64 %1071, -1
  store i64 %1072, ptr %15, align 8, !tbaa !9
  br label %845, !llvm.loop !38

1073:                                             ; preds = %845
  %1074 = load ptr, ptr %4, align 8, !tbaa !5
  %1075 = getelementptr inbounds %struct.controldef, ptr %1074, i32 0, i32 1
  %1076 = load i64, ptr %1075, align 8, !tbaa !22
  %1077 = and i64 %1076, 8
  %1078 = icmp ne i64 %1077, 0
  br i1 %1078, label %1079, label %1090

1079:                                             ; preds = %1073
  %1080 = load i64, ptr %34, align 8, !tbaa !9
  %1081 = load i64, ptr %36, align 8, !tbaa !9
  %1082 = load ptr, ptr %21, align 8, !tbaa !5
  %1083 = getelementptr inbounds i64, ptr %1082, i64 0
  %1084 = load i64, ptr %1083, align 8, !tbaa !9
  %1085 = load ptr, ptr %21, align 8, !tbaa !5
  %1086 = getelementptr inbounds i64, ptr %1085, i64 1
  %1087 = load i64, ptr %1086, align 8, !tbaa !9
  %1088 = load i64, ptr %14, align 8, !tbaa !9
  %1089 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, i64 noundef %1080, i64 noundef %1081, i64 noundef %1084, i64 noundef %1087, i64 noundef %1088)
  br label %1090

1090:                                             ; preds = %1079, %1073
  %1091 = load i64, ptr %34, align 8, !tbaa !9
  %1092 = load ptr, ptr %5, align 8, !tbaa !5
  %1093 = getelementptr inbounds %struct.graphdef, ptr %1092, i32 0, i32 16
  store i64 %1091, ptr %1093, align 8, !tbaa !28
  %1094 = load i64, ptr %14, align 8, !tbaa !9
  %1095 = load ptr, ptr %5, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.graphdef, ptr %1095, i32 0, i32 20
  store i64 %1094, ptr %1096, align 8, !tbaa !27
  %1097 = load i64, ptr %36, align 8, !tbaa !9
  %1098 = icmp eq i64 %1097, -1
  br i1 %1098, label %1103, label %1099

1099:                                             ; preds = %1090
  %1100 = load i64, ptr %34, align 8, !tbaa !9
  %1101 = load i64, ptr %35, align 8, !tbaa !9
  %1102 = icmp sge i64 %1100, %1101
  br i1 %1102, label %1103, label %1104

1103:                                             ; preds = %1099, %1090
  br label %1108

1104:                                             ; preds = %1099
  br label %1105

1105:                                             ; preds = %1104
  %1106 = load i64, ptr %37, align 8, !tbaa !9
  %1107 = add nsw i64 %1106, 1
  store i64 %1107, ptr %37, align 8, !tbaa !9
  br label %124, !llvm.loop !39

1108:                                             ; preds = %1103, %124
  %1109 = load ptr, ptr %4, align 8, !tbaa !5
  %1110 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 0
  call void @libmetis__PQueueFree(ptr noundef %1109, ptr noundef %1110)
  %1111 = load ptr, ptr %4, align 8, !tbaa !5
  %1112 = getelementptr inbounds [2 x %struct.PQueueType], ptr %30, i64 0, i64 1
  call void @libmetis__PQueueFree(ptr noundef %1111, ptr noundef %1112)
  %1113 = load ptr, ptr %4, align 8, !tbaa !5
  %1114 = load i64, ptr %13, align 8, !tbaa !9
  %1115 = add nsw i64 %1114, 1
  call void @libmetis__idxwspacefree(ptr noundef %1113, i64 noundef %1115)
  %1116 = load ptr, ptr %4, align 8, !tbaa !5
  %1117 = load i64, ptr %13, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1116, i64 noundef %1117)
  %1118 = load ptr, ptr %4, align 8, !tbaa !5
  %1119 = load i64, ptr %13, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1118, i64 noundef %1119)
  %1120 = load ptr, ptr %4, align 8, !tbaa !5
  %1121 = load i64, ptr %13, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1120, i64 noundef %1121)
  %1122 = load ptr, ptr %4, align 8, !tbaa !5
  %1123 = load i64, ptr %13, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1122, i64 noundef %1123)
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 16, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 176, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #3
  ret void
}

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

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

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


; 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.nrinfodef = type { [2 x i64] }

@.str = external hidden unnamed_addr constant [49 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [55 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

; Function Attrs: nounwind uwtable
declare dso_local i64 @libmetis__ComputeMaxNodeGain(i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

declare void @libmetis__PQueueInit(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

declare ptr @libmetis__idxwspacemalloc(ptr noundef, i64 noundef) local_unnamed_addr #2

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

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

declare void @libmetis__PQueueReset(ptr noundef) local_unnamed_addr #2

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

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

declare i64 @libmetis__PQueueSeeMax(ptr noundef) local_unnamed_addr #2

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #2

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

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

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

declare void @libmetis__idxwspacefree(ptr noundef, i64 noundef) local_unnamed_addr #2

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayNodeRefineEqWgt(ptr noundef %0, ptr nocapture noundef %1, i64 noundef %2) local_unnamed_addr #1 {
  %4 = alloca [2 x %struct.PQueueType], align 16
  %5 = alloca [2 x i64], align 16
  %6 = alloca [2 x i64], align 16
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %4) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %5) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %6) #5
  %7 = load i64, ptr %1, align 8, !tbaa !5
  %8 = getelementptr inbounds i8, ptr %1, i64 16
  %9 = load ptr, ptr %8, align 8, !tbaa !12
  %10 = getelementptr inbounds i8, ptr %1, i64 40
  %11 = load ptr, ptr %10, align 8, !tbaa !13
  %12 = getelementptr inbounds i8, ptr %1, i64 24
  %13 = load ptr, ptr %12, align 8, !tbaa !14
  %14 = getelementptr inbounds i8, ptr %1, i64 160
  %15 = load ptr, ptr %14, align 8, !tbaa !15
  %16 = getelementptr inbounds i8, ptr %1, i64 152
  %17 = load ptr, ptr %16, align 8, !tbaa !16
  %18 = getelementptr inbounds i8, ptr %1, i64 128
  %19 = load ptr, ptr %18, align 8, !tbaa !17
  %20 = getelementptr inbounds i8, ptr %1, i64 136
  %21 = load ptr, ptr %20, align 8, !tbaa !18
  %22 = getelementptr inbounds i8, ptr %1, i64 200
  %23 = load ptr, ptr %22, align 8, !tbaa !19
  %24 = tail call i64 @libmetis__ComputeMaxNodeGain(i64 noundef %7, ptr noundef %9, ptr noundef %11, ptr noundef %13)
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %4, i64 noundef %7, i64 noundef %24) #5
  %25 = getelementptr inbounds i8, ptr %4, i64 88
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %25, i64 noundef %7, i64 noundef %24) #5
  %26 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %7) #5
  %27 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %7) #5
  %28 = add nsw i64 %7, 1
  %29 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %28) #5
  %30 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %7) #5
  %31 = call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %7) #5
  %32 = getelementptr inbounds i8, ptr %0, i64 8
  %33 = load i64, ptr %32, align 8, !tbaa !20
  %34 = and i64 %33, 8
  %.not = icmp eq i64 %34, 0
  br i1 %.not, label %45, label %35

35:                                               ; preds = %3
  %36 = load i64, ptr %21, align 8, !tbaa !25
  %37 = getelementptr inbounds i8, ptr %21, i64 8
  %38 = load i64, ptr %37, align 8, !tbaa !25
  %39 = load i64, ptr %1, align 8, !tbaa !5
  %40 = getelementptr inbounds i8, ptr %1, i64 144
  %41 = load i64, ptr %40, align 8, !tbaa !26
  %42 = getelementptr inbounds i8, ptr %1, i64 112
  %43 = load i64, ptr %42, align 8, !tbaa !27
  %44 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str, i64 noundef %36, i64 noundef %38, i64 noundef %39, i64 noundef %41, i64 noundef %43) #5
  br label %45

45:                                               ; preds = %35, %3
  %46 = icmp sgt i64 %2, 0
  br i1 %46, label %.lr.ph527, label %._crit_edge528

.lr.ph527:                                        ; preds = %45
  %47 = getelementptr inbounds i8, ptr %1, i64 112
  %48 = getelementptr inbounds i8, ptr %1, i64 144
  %49 = getelementptr inbounds i8, ptr %0, i64 80
  %50 = getelementptr inbounds i8, ptr %21, i64 8
  %51 = icmp sgt i64 %7, 0
  %52 = getelementptr inbounds i8, ptr %5, i64 8
  %53 = getelementptr inbounds i8, ptr %6, i64 8
  %54 = getelementptr inbounds i8, ptr %21, i64 16
  br label %55

55:                                               ; preds = %382, %.lr.ph527
  %.0409524 = phi i64 [ 0, %.lr.ph527 ], [ %384, %382 ]
  %56 = call ptr @libmetis__idxset(i64 noundef %7, i64 noundef -1, ptr noundef %26) #5
  call void @libmetis__PQueueReset(ptr noundef nonnull %4) #5
  call void @libmetis__PQueueReset(ptr noundef nonnull %25) #5
  %57 = load i64, ptr %47, align 8, !tbaa !27
  %58 = load i64, ptr %48, align 8, !tbaa !26
  call void @libmetis__RandomPermute(i64 noundef %58, ptr noundef %31, i64 noundef 1) #5
  %59 = icmp sgt i64 %58, 0
  br i1 %59, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %55, %.lr.ph
  %.0407468 = phi i64 [ %75, %.lr.ph ], [ 0, %55 ]
  %60 = getelementptr inbounds i64, ptr %31, i64 %.0407468
  %61 = load i64, ptr %60, align 8, !tbaa !25
  %62 = getelementptr inbounds i64, ptr %15, i64 %61
  %63 = load i64, ptr %62, align 8, !tbaa !25
  %64 = getelementptr inbounds i64, ptr %13, i64 %63
  %65 = load i64, ptr %64, align 8, !tbaa !25
  %66 = getelementptr inbounds %struct.nrinfodef, ptr %23, i64 %63
  %67 = getelementptr inbounds i8, ptr %66, i64 8
  %68 = load i64, ptr %67, align 8, !tbaa !25
  %69 = sub nsw i64 %65, %68
  %70 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %4, i64 noundef %63, i64 noundef %69) #5
  %71 = load i64, ptr %64, align 8, !tbaa !25
  %72 = load i64, ptr %66, align 8, !tbaa !25
  %73 = sub nsw i64 %71, %72
  %74 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %25, i64 noundef %63, i64 noundef %73) #5
  %75 = add nuw nsw i64 %.0407468, 1
  %exitcond.not = icmp eq i64 %75, %58
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

._crit_edge:                                      ; preds = %.lr.ph, %55
  %76 = load i64, ptr %49, align 8, !tbaa !30
  %77 = and i64 %76, 1
  %.not442 = icmp eq i64 %77, 0
  br i1 %.not442, label %82, label %78

78:                                               ; preds = %._crit_edge
  %79 = mul nsw i64 %58, 5
  %80 = icmp sgt i64 %58, 79
  %81 = select i1 %80, i64 400, i64 %79
  br label %86

82:                                               ; preds = %._crit_edge
  %83 = shl nsw i64 %58, 1
  %84 = icmp sgt i64 %58, 149
  %85 = select i1 %84, i64 300, i64 %83
  br label %86

86:                                               ; preds = %82, %78
  %87 = phi i64 [ %81, %78 ], [ %85, %82 ]
  store i64 0, ptr %29, align 8, !tbaa !25
  br i1 %51, label %.lr.ph489, label %.loopexit456

.lr.ph489:                                        ; preds = %86
  %88 = load i64, ptr %21, align 8, !tbaa !25
  %89 = load i64, ptr %50, align 8, !tbaa !25
  %90 = sub nsw i64 %88, %89
  %91 = call i64 @llvm.abs.i64(i64 %90, i1 true)
  %92 = and i64 %.0409524, 1
  br label %93

93:                                               ; preds = %.lr.ph489, %284
  %.0487 = phi i64 [ %91, %.lr.ph489 ], [ %.1, %284 ]
  %.0410486 = phi i64 [ -1, %.lr.ph489 ], [ %.1411, %284 ]
  %.0414485 = phi i64 [ %57, %.lr.ph489 ], [ %.1415, %284 ]
  %.0418484 = phi i64 [ %58, %.lr.ph489 ], [ %.1419.lcssa, %284 ]
  %.0421483 = phi i64 [ 0, %.lr.ph489 ], [ %263, %284 ]
  %.0423482 = phi i64 [ 0, %.lr.ph489 ], [ %.1424.lcssa, %284 ]
  %94 = load i64, ptr %21, align 8, !tbaa !25
  %95 = load i64, ptr %50, align 8, !tbaa !25
  %96 = icmp sge i64 %94, %95
  %97 = zext i1 %96 to i64
  %98 = icmp eq i64 %94, %95
  br i1 %98, label %99, label %118

99:                                               ; preds = %93
  %100 = call i64 @libmetis__PQueueSeeMax(ptr noundef nonnull %4) #5
  store i64 %100, ptr %5, align 16, !tbaa !25
  %101 = call i64 @libmetis__PQueueSeeMax(ptr noundef nonnull %25) #5
  store i64 %101, ptr %52, align 8, !tbaa !25
  %102 = icmp ne i64 %100, -1
  %103 = icmp ne i64 %101, -1
  %or.cond = select i1 %102, i1 %103, i1 false
  br i1 %or.cond, label %104, label %118

104:                                              ; preds = %99
  %105 = getelementptr inbounds i64, ptr %13, i64 %100
  %106 = load i64, ptr %105, align 8, !tbaa !25
  %107 = getelementptr inbounds %struct.nrinfodef, ptr %23, i64 %100, i32 0, i64 1
  %108 = load i64, ptr %107, align 8, !tbaa !25
  %109 = sub nsw i64 %106, %108
  store i64 %109, ptr %6, align 16, !tbaa !25
  %110 = getelementptr inbounds i64, ptr %13, i64 %101
  %111 = load i64, ptr %110, align 8, !tbaa !25
  %112 = getelementptr inbounds %struct.nrinfodef, ptr %23, i64 %101
  %113 = load i64, ptr %112, align 8, !tbaa !25
  %114 = sub nsw i64 %111, %113
  store i64 %114, ptr %53, align 8, !tbaa !25
  %115 = icmp sgt i64 %109, %114
  br i1 %115, label %118, label %116

116:                                              ; preds = %104
  %117 = icmp slt i64 %109, %114
  %spec.select = select i1 %117, i64 1, i64 %92
  br label %118

118:                                              ; preds = %116, %104, %99, %93
  %.0408 = phi i64 [ %97, %99 ], [ %97, %93 ], [ 0, %104 ], [ %spec.select, %116 ]
  %119 = xor i64 %.0408, 1
  %120 = getelementptr inbounds [2 x %struct.PQueueType], ptr %4, i64 0, i64 %.0408
  %121 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %120) #5
  %122 = icmp eq i64 %121, -1
  br i1 %122, label %.loopexit456, label %123

123:                                              ; preds = %118
  %124 = getelementptr inbounds i64, ptr %26, i64 %121
  %125 = load i64, ptr %124, align 8, !tbaa !25
  %126 = icmp eq i64 %125, -1
  br i1 %126, label %127, label %136

127:                                              ; preds = %123
  %128 = getelementptr inbounds [2 x %struct.PQueueType], ptr %4, i64 0, i64 %119
  %129 = getelementptr inbounds i64, ptr %13, i64 %121
  %130 = load i64, ptr %129, align 8, !tbaa !25
  %131 = getelementptr inbounds %struct.nrinfodef, ptr %23, i64 %121
  %132 = getelementptr inbounds [2 x i64], ptr %131, i64 0, i64 %.0408
  %133 = load i64, ptr %132, align 8, !tbaa !25
  %134 = sub nsw i64 %130, %133
  %135 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %128, i64 noundef %121, i64 noundef %134) #5
  br label %136

136:                                              ; preds = %127, %123
  %137 = getelementptr inbounds i64, ptr %13, i64 %121
  %138 = load i64, ptr %137, align 8, !tbaa !25
  %139 = getelementptr inbounds %struct.nrinfodef, ptr %23, i64 %121
  %140 = getelementptr inbounds [2 x i64], ptr %139, i64 0, i64 %119
  %141 = load i64, ptr %140, align 8, !tbaa !25
  %.neg = sub i64 %141, %138
  %142 = load i64, ptr %54, align 8, !tbaa !25
  %143 = add i64 %.neg, %142
  store i64 %143, ptr %54, align 8, !tbaa !25
  %144 = getelementptr inbounds i64, ptr %21, i64 %.0408
  %145 = load i64, ptr %144, align 8, !tbaa !25
  %146 = load i64, ptr %137, align 8, !tbaa !25
  %147 = getelementptr inbounds i64, ptr %21, i64 %119
  %148 = load i64, ptr %147, align 8, !tbaa !25
  %149 = load i64, ptr %140, align 8, !tbaa !25
  %.neg443 = add i64 %146, %145
  %150 = sub i64 %.neg443, %148
  %151 = add i64 %150, %149
  %152 = call i64 @llvm.abs.i64(i64 %151, i1 true)
  %153 = icmp slt i64 %143, %.0414485
  br i1 %153, label %163, label %154

154:                                              ; preds = %136
  %155 = icmp eq i64 %143, %.0414485
  %156 = icmp slt i64 %152, %.0487
  %or.cond449 = select i1 %155, i1 %156, i1 false
  br i1 %or.cond449, label %163, label %157

157:                                              ; preds = %154
  %158 = sub nsw i64 %.0421483, %.0410486
  %159 = icmp sgt i64 %158, %87
  br i1 %159, label %160, label %163

160:                                              ; preds = %157
  %161 = add i64 %146, %143
  %162 = sub i64 %161, %149
  store i64 %162, ptr %54, align 8, !tbaa !25
  br label %.loopexit456

163:                                              ; preds = %136, %154, %157
  %.1415 = phi i64 [ %.0414485, %157 ], [ %.0414485, %154 ], [ %143, %136 ]
  %.1411 = phi i64 [ %.0410486, %157 ], [ %.0421483, %154 ], [ %.0421483, %136 ]
  %.1 = phi i64 [ %.0487, %157 ], [ %152, %154 ], [ %152, %136 ]
  %164 = add nsw i64 %.0418484, -1
  %165 = getelementptr inbounds i64, ptr %15, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !25
  %167 = getelementptr inbounds i64, ptr %17, i64 %121
  %168 = load i64, ptr %167, align 8, !tbaa !25
  %169 = getelementptr inbounds i64, ptr %15, i64 %168
  store i64 %166, ptr %169, align 8, !tbaa !25
  %170 = load i64, ptr %167, align 8, !tbaa !25
  %171 = getelementptr inbounds i64, ptr %17, i64 %166
  store i64 %170, ptr %171, align 8, !tbaa !25
  store i64 -1, ptr %167, align 8, !tbaa !25
  %172 = load i64, ptr %137, align 8, !tbaa !25
  %173 = load i64, ptr %144, align 8, !tbaa !25
  %174 = add nsw i64 %173, %172
  store i64 %174, ptr %144, align 8, !tbaa !25
  %175 = getelementptr inbounds i64, ptr %19, i64 %121
  store i64 %.0408, ptr %175, align 8, !tbaa !25
  store i64 %.0421483, ptr %124, align 8, !tbaa !25
  %176 = getelementptr inbounds i64, ptr %27, i64 %.0421483
  store i64 %121, ptr %176, align 8, !tbaa !25
  %177 = getelementptr inbounds i64, ptr %9, i64 %121
  %178 = load i64, ptr %177, align 8, !tbaa !25
  %179 = getelementptr i8, ptr %177, i64 8
  %invariant.gep473 = getelementptr [2 x i64], ptr %23, i64 0, i64 %.0408
  %180 = load i64, ptr %179, align 8, !tbaa !25
  %181 = icmp slt i64 %178, %180
  br i1 %181, label %.lr.ph479, label %._crit_edge480

.lr.ph479:                                        ; preds = %163
  %invariant.gep = getelementptr [2 x i64], ptr %23, i64 0, i64 %119
  %182 = sub nuw nsw i64 -2, %.0408
  %.neg446 = add nuw nsw i64 %.0408, -3
  %183 = getelementptr inbounds [2 x %struct.PQueueType], ptr %4, i64 0, i64 %119
  br label %184

184:                                              ; preds = %.lr.ph479, %259
  %.0412477 = phi i64 [ %178, %.lr.ph479 ], [ %260, %259 ]
  %.1419476 = phi i64 [ %164, %.lr.ph479 ], [ %.2420, %259 ]
  %.1424475 = phi i64 [ %.0423482, %.lr.ph479 ], [ %.2425, %259 ]
  %185 = getelementptr inbounds i64, ptr %11, i64 %.0412477
  %186 = load i64, ptr %185, align 8, !tbaa !25
  %187 = getelementptr inbounds i64, ptr %19, i64 %186
  %188 = load i64, ptr %187, align 8, !tbaa !25
  %189 = icmp eq i64 %188, 2
  br i1 %189, label %190, label %205

190:                                              ; preds = %184
  %191 = getelementptr inbounds i64, ptr %13, i64 %186
  %192 = load i64, ptr %191, align 8, !tbaa !25
  %gep474 = getelementptr %struct.nrinfodef, ptr %invariant.gep473, i64 %186
  %193 = load i64, ptr %gep474, align 8, !tbaa !25
  %194 = load i64, ptr %137, align 8, !tbaa !25
  %195 = add nsw i64 %194, %193
  store i64 %195, ptr %gep474, align 8, !tbaa !25
  %196 = getelementptr inbounds i64, ptr %26, i64 %186
  %197 = load i64, ptr %196, align 8, !tbaa !25
  %198 = icmp eq i64 %197, -1
  %199 = icmp eq i64 %197, %.neg446
  %or.cond450 = select i1 %198, i1 true, i1 %199
  br i1 %or.cond450, label %200, label %259

200:                                              ; preds = %190
  %201 = sub nsw i64 %192, %193
  %202 = load i64, ptr %137, align 8, !tbaa !25
  %203 = sub nsw i64 %201, %202
  %204 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %183, i64 noundef %186, i64 noundef %201, i64 noundef %203) #5
  br label %259

205:                                              ; preds = %184
  %206 = icmp eq i64 %188, %119
  br i1 %206, label %207, label %259

207:                                              ; preds = %205
  %208 = getelementptr inbounds i64, ptr %15, i64 %.1419476
  store i64 %186, ptr %208, align 8, !tbaa !25
  %209 = add nsw i64 %.1419476, 1
  %210 = getelementptr inbounds i64, ptr %17, i64 %186
  store i64 %.1419476, ptr %210, align 8, !tbaa !25
  %211 = add nsw i64 %.1424475, 1
  %212 = getelementptr inbounds i64, ptr %30, i64 %.1424475
  store i64 %186, ptr %212, align 8, !tbaa !25
  store i64 2, ptr %187, align 8, !tbaa !25
  %213 = getelementptr inbounds i64, ptr %13, i64 %186
  %214 = load i64, ptr %213, align 8, !tbaa !25
  %215 = load i64, ptr %147, align 8, !tbaa !25
  %216 = sub nsw i64 %215, %214
  store i64 %216, ptr %147, align 8, !tbaa !25
  %217 = getelementptr inbounds %struct.nrinfodef, ptr %23, i64 %186
  %218 = getelementptr inbounds i64, ptr %9, i64 %186
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %217, i8 0, i64 16, i1 false)
  %219 = load i64, ptr %218, align 8, !tbaa !25
  %220 = getelementptr i8, ptr %218, i64 8
  %221 = load i64, ptr %220, align 8, !tbaa !25
  %222 = icmp slt i64 %219, %221
  br i1 %222, label %.lr.ph471, label %._crit_edge472

.lr.ph471:                                        ; preds = %207, %246
  %.0416469 = phi i64 [ %247, %246 ], [ %219, %207 ]
  %223 = getelementptr inbounds i64, ptr %11, i64 %.0416469
  %224 = load i64, ptr %223, align 8, !tbaa !25
  %225 = getelementptr inbounds i64, ptr %19, i64 %224
  %226 = load i64, ptr %225, align 8, !tbaa !25
  %.not445 = icmp eq i64 %226, 2
  %227 = getelementptr inbounds i64, ptr %13, i64 %224
  %228 = load i64, ptr %227, align 8, !tbaa !25
  br i1 %.not445, label %233, label %229

229:                                              ; preds = %.lr.ph471
  %230 = getelementptr inbounds i64, ptr %217, i64 %226
  %231 = load i64, ptr %230, align 8, !tbaa !25
  %232 = add nsw i64 %231, %228
  store i64 %232, ptr %230, align 8, !tbaa !25
  br label %246

233:                                              ; preds = %.lr.ph471
  %gep = getelementptr %struct.nrinfodef, ptr %invariant.gep, i64 %224
  %234 = load i64, ptr %gep, align 8, !tbaa !25
  %235 = load i64, ptr %213, align 8, !tbaa !25
  %236 = sub nsw i64 %234, %235
  store i64 %236, ptr %gep, align 8, !tbaa !25
  %237 = getelementptr inbounds i64, ptr %26, i64 %224
  %238 = load i64, ptr %237, align 8, !tbaa !25
  %239 = icmp eq i64 %238, -1
  %240 = icmp eq i64 %238, %182
  %or.cond452 = select i1 %239, i1 true, i1 %240
  br i1 %or.cond452, label %241, label %246

241:                                              ; preds = %233
  %242 = sub nsw i64 %228, %234
  %243 = load i64, ptr %213, align 8, !tbaa !25
  %244 = add nsw i64 %243, %242
  %245 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %120, i64 noundef %224, i64 noundef %242, i64 noundef %244) #5
  br label %246

246:                                              ; preds = %233, %229, %241
  %247 = add nsw i64 %.0416469, 1
  %248 = load i64, ptr %220, align 8, !tbaa !25
  %249 = icmp slt i64 %247, %248
  br i1 %249, label %.lr.ph471, label %._crit_edge472, !llvm.loop !31

._crit_edge472:                                   ; preds = %246, %207
  %250 = getelementptr inbounds i64, ptr %26, i64 %186
  %251 = load i64, ptr %250, align 8, !tbaa !25
  %252 = icmp eq i64 %251, -1
  br i1 %252, label %253, label %259

253:                                              ; preds = %._crit_edge472
  %254 = load i64, ptr %213, align 8, !tbaa !25
  %255 = getelementptr inbounds i64, ptr %217, i64 %119
  %256 = load i64, ptr %255, align 8, !tbaa !25
  %257 = sub nsw i64 %254, %256
  %258 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %120, i64 noundef %186, i64 noundef %257) #5
  store i64 %182, ptr %250, align 8, !tbaa !25
  br label %259

259:                                              ; preds = %190, %200, %._crit_edge472, %253, %205
  %.2425 = phi i64 [ %.1424475, %200 ], [ %211, %253 ], [ %211, %._crit_edge472 ], [ %.1424475, %205 ], [ %.1424475, %190 ]
  %.2420 = phi i64 [ %.1419476, %200 ], [ %209, %253 ], [ %209, %._crit_edge472 ], [ %.1419476, %205 ], [ %.1419476, %190 ]
  %260 = add nsw i64 %.0412477, 1
  %261 = load i64, ptr %179, align 8, !tbaa !25
  %262 = icmp slt i64 %260, %261
  br i1 %262, label %184, label %._crit_edge480, !llvm.loop !32

._crit_edge480:                                   ; preds = %259, %163
  %.1424.lcssa = phi i64 [ %.0423482, %163 ], [ %.2425, %259 ]
  %.1419.lcssa = phi i64 [ %164, %163 ], [ %.2420, %259 ]
  %263 = add nuw nsw i64 %.0421483, 1
  %264 = getelementptr inbounds i64, ptr %29, i64 %263
  store i64 %.1424.lcssa, ptr %264, align 8, !tbaa !25
  %265 = load i64, ptr %32, align 8, !tbaa !20
  %266 = and i64 %265, 32
  %.not444 = icmp eq i64 %266, 0
  br i1 %.not444, label %284, label %267

267:                                              ; preds = %._crit_edge480
  %268 = getelementptr inbounds [2 x i64], ptr %6, i64 0, i64 %.0408
  %269 = load i64, ptr %268, align 8, !tbaa !25
  %270 = getelementptr inbounds [2 x i64], ptr %6, i64 0, i64 %119
  %271 = load i64, ptr %270, align 8, !tbaa !25
  %272 = getelementptr inbounds [2 x i64], ptr %5, i64 0, i64 %.0408
  %273 = load i64, ptr %272, align 8, !tbaa !25
  %274 = getelementptr inbounds i64, ptr %13, i64 %273
  %275 = load i64, ptr %274, align 8, !tbaa !25
  %276 = getelementptr inbounds [2 x i64], ptr %5, i64 0, i64 %119
  %277 = load i64, ptr %276, align 8, !tbaa !25
  %278 = getelementptr inbounds i64, ptr %13, i64 %277
  %279 = load i64, ptr %278, align 8, !tbaa !25
  %280 = load i64, ptr %21, align 8, !tbaa !25
  %281 = load i64, ptr %50, align 8, !tbaa !25
  %282 = load i64, ptr %54, align 8, !tbaa !25
  %283 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, i64 noundef %121, i64 noundef %.0408, i64 noundef %269, i64 noundef %271, i64 noundef %275, i64 noundef %279, i64 noundef %280, i64 noundef %281, i64 noundef %282) #5
  br label %284

284:                                              ; preds = %._crit_edge480, %267
  %exitcond537.not = icmp eq i64 %263, %7
  br i1 %exitcond537.not, label %.loopexit456, label %93, !llvm.loop !33

.loopexit456:                                     ; preds = %284, %118, %86, %160
  %.0421464 = phi i64 [ %.0421483, %160 ], [ 0, %86 ], [ %7, %284 ], [ %.0421483, %118 ]
  %.0418462 = phi i64 [ %.0418484, %160 ], [ %58, %86 ], [ %.1419.lcssa, %284 ], [ %.0418484, %118 ]
  %.0414460 = phi i64 [ %.0414485, %160 ], [ %57, %86 ], [ %.1415, %284 ], [ %.0414485, %118 ]
  %.0410458 = phi i64 [ %.0410486, %160 ], [ -1, %86 ], [ %.1411, %284 ], [ %.0410486, %118 ]
  %.1422516 = add nsw i64 %.0421464, -1
  %285 = icmp sgt i64 %.1422516, %.0410458
  br i1 %285, label %.lr.ph521, label %._crit_edge522

.loopexit:                                        ; preds = %._crit_edge510, %._crit_edge504
  %.4.lcssa = phi i64 [ %302, %._crit_edge504 ], [ %346, %._crit_edge510 ]
  %.1422 = add nsw i64 %.1422519, -1
  %286 = icmp sgt i64 %.1422, %.0410458
  br i1 %286, label %.lr.ph521, label %._crit_edge522, !llvm.loop !34

.lr.ph521:                                        ; preds = %.loopexit456, %.loopexit
  %.1422519 = phi i64 [ %.1422, %.loopexit ], [ %.1422516, %.loopexit456 ]
  %.3518 = phi i64 [ %.4.lcssa, %.loopexit ], [ %.0418462, %.loopexit456 ]
  %.1422.in517 = phi i64 [ %.1422519, %.loopexit ], [ %.0421464, %.loopexit456 ]
  %287 = getelementptr inbounds i64, ptr %27, i64 %.1422519
  %288 = load i64, ptr %287, align 8, !tbaa !25
  %289 = getelementptr inbounds i64, ptr %19, i64 %288
  %290 = load i64, ptr %289, align 8, !tbaa !25
  %291 = add nsw i64 %290, 1
  %292 = srem i64 %291, 2
  %293 = getelementptr inbounds i64, ptr %13, i64 %288
  %294 = load i64, ptr %293, align 8, !tbaa !25
  %295 = load i64, ptr %54, align 8, !tbaa !25
  %296 = add nsw i64 %295, %294
  store i64 %296, ptr %54, align 8, !tbaa !25
  %297 = load i64, ptr %293, align 8, !tbaa !25
  %298 = getelementptr inbounds i64, ptr %21, i64 %290
  %299 = load i64, ptr %298, align 8, !tbaa !25
  %300 = sub nsw i64 %299, %297
  store i64 %300, ptr %298, align 8, !tbaa !25
  store i64 2, ptr %289, align 8, !tbaa !25
  %301 = getelementptr inbounds i64, ptr %15, i64 %.3518
  store i64 %288, ptr %301, align 8, !tbaa !25
  %302 = add nsw i64 %.3518, 1
  %303 = getelementptr inbounds i64, ptr %17, i64 %288
  store i64 %.3518, ptr %303, align 8, !tbaa !25
  %304 = getelementptr inbounds %struct.nrinfodef, ptr %23, i64 %288
  %305 = getelementptr inbounds i64, ptr %9, i64 %288
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %304, i8 0, i64 16, i1 false)
  %306 = load i64, ptr %305, align 8, !tbaa !25
  %307 = getelementptr i8, ptr %305, i64 8
  %invariant.gep499 = getelementptr [2 x i64], ptr %23, i64 0, i64 %290
  %308 = load i64, ptr %307, align 8, !tbaa !25
  %309 = icmp slt i64 %306, %308
  br i1 %309, label %.lr.ph503, label %._crit_edge504

.lr.ph503:                                        ; preds = %.lr.ph521, %325
  %.1413501 = phi i64 [ %326, %325 ], [ %306, %.lr.ph521 ]
  %310 = getelementptr inbounds i64, ptr %11, i64 %.1413501
  %311 = load i64, ptr %310, align 8, !tbaa !25
  %312 = getelementptr inbounds i64, ptr %19, i64 %311
  %313 = load i64, ptr %312, align 8, !tbaa !25
  %314 = icmp eq i64 %313, 2
  br i1 %314, label %315, label %319

315:                                              ; preds = %.lr.ph503
  %316 = load i64, ptr %293, align 8, !tbaa !25
  %gep500 = getelementptr %struct.nrinfodef, ptr %invariant.gep499, i64 %311
  %317 = load i64, ptr %gep500, align 8, !tbaa !25
  %318 = sub nsw i64 %317, %316
  store i64 %318, ptr %gep500, align 8, !tbaa !25
  br label %325

319:                                              ; preds = %.lr.ph503
  %320 = getelementptr inbounds i64, ptr %13, i64 %311
  %321 = load i64, ptr %320, align 8, !tbaa !25
  %322 = getelementptr inbounds i64, ptr %304, i64 %313
  %323 = load i64, ptr %322, align 8, !tbaa !25
  %324 = add nsw i64 %323, %321
  store i64 %324, ptr %322, align 8, !tbaa !25
  br label %325

325:                                              ; preds = %315, %319
  %326 = add nsw i64 %.1413501, 1
  %327 = load i64, ptr %307, align 8, !tbaa !25
  %328 = icmp slt i64 %326, %327
  br i1 %328, label %.lr.ph503, label %._crit_edge504, !llvm.loop !35

._crit_edge504:                                   ; preds = %325, %.lr.ph521
  %329 = getelementptr inbounds i64, ptr %29, i64 %.1422519
  %330 = load i64, ptr %329, align 8, !tbaa !25
  %331 = getelementptr inbounds i64, ptr %29, i64 %.1422.in517
  %332 = load i64, ptr %331, align 8, !tbaa !25
  %333 = icmp slt i64 %330, %332
  br i1 %333, label %.lr.ph514, label %.loopexit

.lr.ph514:                                        ; preds = %._crit_edge504
  %334 = getelementptr inbounds i64, ptr %21, i64 %292
  %invariant.gep505 = getelementptr [2 x i64], ptr %23, i64 0, i64 %292
  br label %335

335:                                              ; preds = %.lr.ph514, %._crit_edge510
  %.2512 = phi i64 [ %330, %.lr.ph514 ], [ %373, %._crit_edge510 ]
  %.4511 = phi i64 [ %302, %.lr.ph514 ], [ %346, %._crit_edge510 ]
  %336 = getelementptr inbounds i64, ptr %30, i64 %.2512
  %337 = load i64, ptr %336, align 8, !tbaa !25
  %338 = getelementptr inbounds i64, ptr %19, i64 %337
  store i64 %292, ptr %338, align 8, !tbaa !25
  %339 = getelementptr inbounds i64, ptr %13, i64 %337
  %340 = load i64, ptr %339, align 8, !tbaa !25
  %341 = load i64, ptr %334, align 8, !tbaa !25
  %342 = add nsw i64 %341, %340
  store i64 %342, ptr %334, align 8, !tbaa !25
  %343 = load i64, ptr %339, align 8, !tbaa !25
  %344 = load i64, ptr %54, align 8, !tbaa !25
  %345 = sub nsw i64 %344, %343
  store i64 %345, ptr %54, align 8, !tbaa !25
  %346 = add nsw i64 %.4511, -1
  %347 = getelementptr inbounds i64, ptr %15, i64 %346
  %348 = load i64, ptr %347, align 8, !tbaa !25
  %349 = getelementptr inbounds i64, ptr %17, i64 %337
  %350 = load i64, ptr %349, align 8, !tbaa !25
  %351 = getelementptr inbounds i64, ptr %15, i64 %350
  store i64 %348, ptr %351, align 8, !tbaa !25
  %352 = load i64, ptr %349, align 8, !tbaa !25
  %353 = getelementptr inbounds i64, ptr %17, i64 %348
  store i64 %352, ptr %353, align 8, !tbaa !25
  store i64 -1, ptr %349, align 8, !tbaa !25
  %354 = getelementptr inbounds i64, ptr %9, i64 %337
  %355 = load i64, ptr %354, align 8, !tbaa !25
  %356 = getelementptr i8, ptr %354, i64 8
  %357 = load i64, ptr %356, align 8, !tbaa !25
  %358 = icmp slt i64 %355, %357
  br i1 %358, label %.lr.ph509, label %._crit_edge510

.lr.ph509:                                        ; preds = %335, %369
  %359 = phi i64 [ %370, %369 ], [ %357, %335 ]
  %.1417507 = phi i64 [ %371, %369 ], [ %355, %335 ]
  %360 = getelementptr inbounds i64, ptr %11, i64 %.1417507
  %361 = load i64, ptr %360, align 8, !tbaa !25
  %362 = getelementptr inbounds i64, ptr %19, i64 %361
  %363 = load i64, ptr %362, align 8, !tbaa !25
  %364 = icmp eq i64 %363, 2
  br i1 %364, label %365, label %369

365:                                              ; preds = %.lr.ph509
  %366 = load i64, ptr %339, align 8, !tbaa !25
  %gep506 = getelementptr %struct.nrinfodef, ptr %invariant.gep505, i64 %361
  %367 = load i64, ptr %gep506, align 8, !tbaa !25
  %368 = add nsw i64 %367, %366
  store i64 %368, ptr %gep506, align 8, !tbaa !25
  %.pre = load i64, ptr %356, align 8, !tbaa !25
  br label %369

369:                                              ; preds = %.lr.ph509, %365
  %370 = phi i64 [ %359, %.lr.ph509 ], [ %.pre, %365 ]
  %371 = add nsw i64 %.1417507, 1
  %372 = icmp slt i64 %371, %370
  br i1 %372, label %.lr.ph509, label %._crit_edge510, !llvm.loop !36

._crit_edge510:                                   ; preds = %369, %335
  %373 = add nsw i64 %.2512, 1
  %374 = load i64, ptr %331, align 8, !tbaa !25
  %375 = icmp slt i64 %373, %374
  br i1 %375, label %335, label %.loopexit, !llvm.loop !37

._crit_edge522:                                   ; preds = %.loopexit, %.loopexit456
  %.3.lcssa = phi i64 [ %.0418462, %.loopexit456 ], [ %.4.lcssa, %.loopexit ]
  %376 = load i64, ptr %32, align 8, !tbaa !20
  %377 = and i64 %376, 8
  %.not447 = icmp eq i64 %377, 0
  br i1 %.not447, label %382, label %378

378:                                              ; preds = %._crit_edge522
  %379 = load i64, ptr %21, align 8, !tbaa !25
  %380 = load i64, ptr %50, align 8, !tbaa !25
  %381 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, i64 noundef %.0414460, i64 noundef %.0410458, i64 noundef %379, i64 noundef %380, i64 noundef %.3.lcssa) #5
  br label %382

382:                                              ; preds = %378, %._crit_edge522
  store i64 %.0414460, ptr %47, align 8, !tbaa !27
  store i64 %.3.lcssa, ptr %48, align 8, !tbaa !26
  %383 = icmp eq i64 %.0410458, -1
  %.not448 = icmp sge i64 %.0414460, %57
  %or.cond453.not548 = select i1 %383, i1 true, i1 %.not448
  %384 = add nuw nsw i64 %.0409524, 1
  %exitcond538.not = icmp eq i64 %384, %2
  %or.cond546 = select i1 %or.cond453.not548, i1 true, i1 %exitcond538.not
  br i1 %or.cond546, label %._crit_edge528, label %55, !llvm.loop !38

._crit_edge528:                                   ; preds = %382, %45
  call void @libmetis__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %4) #5
  call void @libmetis__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %25) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %28) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %7) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %7) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %7) #5
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %7) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %6) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #5
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %4) #5
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #3

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

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

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

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


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