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

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

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

84:                                               ; preds = %3
  %85 = load ptr, ptr %6, align 8, !tbaa !5
  %86 = getelementptr inbounds i64, ptr %85, i64 0
  %87 = load i64, ptr %86, align 8, !tbaa !13
  %88 = load ptr, ptr %29, align 8, !tbaa !5
  %89 = getelementptr inbounds i64, ptr %88, i64 0
  %90 = load i64, ptr %89, align 8, !tbaa !13
  %91 = sub nsw i64 %87, %90
  br label %101

92:                                               ; preds = %3
  %93 = load ptr, ptr %6, align 8, !tbaa !5
  %94 = getelementptr inbounds i64, ptr %93, i64 0
  %95 = load i64, ptr %94, align 8, !tbaa !13
  %96 = load ptr, ptr %29, align 8, !tbaa !5
  %97 = getelementptr inbounds i64, ptr %96, i64 0
  %98 = load i64, ptr %97, align 8, !tbaa !13
  %99 = sub nsw i64 %95, %98
  %100 = sub nsw i64 0, %99
  br label %101

101:                                              ; preds = %92, %84
  %102 = phi i64 [ %91, %84 ], [ %100, %92 ]
  store i64 %102, ptr %36, align 8, !tbaa !13
  %103 = load ptr, ptr %29, align 8, !tbaa !5
  %104 = getelementptr inbounds i64, ptr %103, i64 0
  %105 = load i64, ptr %104, align 8, !tbaa !13
  %106 = load ptr, ptr %6, align 8, !tbaa !5
  %107 = getelementptr inbounds i64, ptr %106, i64 0
  %108 = load i64, ptr %107, align 8, !tbaa !13
  %109 = icmp slt i64 %105, %108
  %110 = zext i1 %109 to i64
  %111 = select i1 %109, i32 1, i32 0
  %112 = sext i32 %111 to i64
  store i64 %112, ptr %15, align 8, !tbaa !13
  %113 = load i64, ptr %15, align 8, !tbaa !13
  %114 = add nsw i64 %113, 1
  %115 = srem i64 %114, 2
  store i64 %115, ptr %16, align 8, !tbaa !13
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.controldef, ptr %116, i32 0, i32 1
  %118 = load i64, ptr %117, align 8, !tbaa !24
  %119 = and i64 %118, 8
  %120 = icmp ne i64 %119, 0
  br i1 %120, label %121, label %144

121:                                              ; preds = %101
  %122 = load ptr, ptr %29, align 8, !tbaa !5
  %123 = getelementptr inbounds i64, ptr %122, i64 0
  %124 = load i64, ptr %123, align 8, !tbaa !13
  %125 = load ptr, ptr %29, align 8, !tbaa !5
  %126 = getelementptr inbounds i64, ptr %125, i64 1
  %127 = load i64, ptr %126, align 8, !tbaa !13
  %128 = load ptr, ptr %6, align 8, !tbaa !5
  %129 = getelementptr inbounds i64, ptr %128, i64 0
  %130 = load i64, ptr %129, align 8, !tbaa !13
  %131 = load ptr, ptr %6, align 8, !tbaa !5
  %132 = getelementptr inbounds i64, ptr %131, i64 1
  %133 = load i64, ptr %132, align 8, !tbaa !13
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.graphdef, ptr %134, i32 0, i32 0
  %136 = load i64, ptr %135, 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 !29
  %140 = load ptr, ptr %5, align 8, !tbaa !5
  %141 = getelementptr inbounds %struct.graphdef, ptr %140, i32 0, i32 16
  %142 = load i64, ptr %141, align 8, !tbaa !30
  %143 = call i32 (ptr, ...) @mprintf(ptr noundef @.str, i64 noundef %124, i64 noundef %127, i64 noundef %130, i64 noundef %133, i64 noundef %136, i64 noundef %139, i64 noundef %142)
  br label %144

144:                                              ; preds = %121, %101
  %145 = load ptr, ptr %5, align 8, !tbaa !5
  %146 = getelementptr inbounds %struct.graphdef, ptr %145, i32 0, i32 13
  %147 = load ptr, ptr %146, align 8, !tbaa !31
  %148 = load i64, ptr %12, align 8, !tbaa !13
  %149 = load ptr, ptr %5, align 8, !tbaa !5
  %150 = getelementptr inbounds %struct.graphdef, ptr %149, i32 0, i32 13
  %151 = load ptr, ptr %150, align 8, !tbaa !31
  %152 = call i64 @libmetis__idxargmax(i64 noundef %148, ptr noundef %151)
  %153 = getelementptr inbounds i64, ptr %147, i64 %152
  %154 = load i64, ptr %153, align 8, !tbaa !13
  store i64 %154, ptr %19, align 8, !tbaa !13
  %155 = load ptr, ptr %4, align 8, !tbaa !5
  %156 = load i64, ptr %12, align 8, !tbaa !13
  %157 = load i64, ptr %19, align 8, !tbaa !13
  call void @libmetis__PQueueInit(ptr noundef %155, ptr noundef %32, i64 noundef %156, i64 noundef %157)
  %158 = load i64, ptr %12, align 8, !tbaa !13
  %159 = load ptr, ptr %30, align 8, !tbaa !5
  %160 = call ptr @libmetis__idxset(i64 noundef %158, i64 noundef -1, ptr noundef %159)
  %161 = load ptr, ptr %5, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.graphdef, ptr %161, i32 0, i32 20
  %163 = load i64, ptr %162, align 8, !tbaa !29
  store i64 %163, ptr %13, align 8, !tbaa !13
  %164 = load i64, ptr %13, align 8, !tbaa !13
  %165 = load ptr, ptr %31, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %164, ptr noundef %165, i64 noundef 1)
  store i64 0, ptr %8, align 8, !tbaa !13
  br label %166

166:                                              ; preds = %216, %144
  %167 = load i64, ptr %8, align 8, !tbaa !13
  %168 = load i64, ptr %13, align 8, !tbaa !13
  %169 = icmp slt i64 %167, %168
  br i1 %169, label %170, label %219

170:                                              ; preds = %166
  %171 = load ptr, ptr %31, align 8, !tbaa !5
  %172 = load i64, ptr %8, align 8, !tbaa !13
  %173 = getelementptr inbounds i64, ptr %171, i64 %172
  %174 = load i64, ptr %173, align 8, !tbaa !13
  store i64 %174, ptr %7, align 8, !tbaa !13
  %175 = load ptr, ptr %24, align 8, !tbaa !5
  %176 = load ptr, ptr %28, align 8, !tbaa !5
  %177 = load i64, ptr %7, align 8, !tbaa !13
  %178 = getelementptr inbounds i64, ptr %176, i64 %177
  %179 = load i64, ptr %178, align 8, !tbaa !13
  %180 = getelementptr inbounds i64, ptr %175, i64 %179
  %181 = load i64, ptr %180, align 8, !tbaa !13
  %182 = load i64, ptr %15, align 8, !tbaa !13
  %183 = icmp eq i64 %181, %182
  br i1 %183, label %184, label %215

184:                                              ; preds = %170
  %185 = load ptr, ptr %21, align 8, !tbaa !5
  %186 = load ptr, ptr %28, align 8, !tbaa !5
  %187 = load i64, ptr %7, align 8, !tbaa !13
  %188 = getelementptr inbounds i64, ptr %186, i64 %187
  %189 = load i64, ptr %188, align 8, !tbaa !13
  %190 = getelementptr inbounds i64, ptr %185, i64 %189
  %191 = load i64, ptr %190, align 8, !tbaa !13
  %192 = load i64, ptr %36, align 8, !tbaa !13
  %193 = icmp sle i64 %191, %192
  br i1 %193, label %194, label %215

194:                                              ; preds = %184
  %195 = load ptr, ptr %28, align 8, !tbaa !5
  %196 = load i64, ptr %7, align 8, !tbaa !13
  %197 = getelementptr inbounds i64, ptr %195, i64 %196
  %198 = load i64, ptr %197, align 8, !tbaa !13
  %199 = load ptr, ptr %26, align 8, !tbaa !5
  %200 = load ptr, ptr %28, align 8, !tbaa !5
  %201 = load i64, ptr %7, align 8, !tbaa !13
  %202 = getelementptr inbounds i64, ptr %200, i64 %201
  %203 = load i64, ptr %202, align 8, !tbaa !13
  %204 = getelementptr inbounds i64, ptr %199, i64 %203
  %205 = load i64, ptr %204, align 8, !tbaa !13
  %206 = load ptr, ptr %25, align 8, !tbaa !5
  %207 = load ptr, ptr %28, align 8, !tbaa !5
  %208 = load i64, ptr %7, align 8, !tbaa !13
  %209 = getelementptr inbounds i64, ptr %207, i64 %208
  %210 = load i64, ptr %209, align 8, !tbaa !13
  %211 = getelementptr inbounds i64, ptr %206, i64 %210
  %212 = load i64, ptr %211, align 8, !tbaa !13
  %213 = sub nsw i64 %205, %212
  %214 = call i64 @libmetis__PQueueInsert(ptr noundef %32, i64 noundef %198, i64 noundef %213)
  br label %215

215:                                              ; preds = %194, %184, %170
  br label %216

216:                                              ; preds = %215
  %217 = load i64, ptr %8, align 8, !tbaa !13
  %218 = add nsw i64 %217, 1
  store i64 %218, ptr %8, align 8, !tbaa !13
  br label %166, !llvm.loop !32

219:                                              ; preds = %166
  %220 = load ptr, ptr %5, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.graphdef, ptr %220, i32 0, i32 16
  %222 = load i64, ptr %221, align 8, !tbaa !30
  store i64 %222, ptr %35, align 8, !tbaa !13
  store i64 0, ptr %14, align 8, !tbaa !13
  br label %223

223:                                              ; preds = %596, %219
  %224 = load i64, ptr %14, align 8, !tbaa !13
  %225 = load i64, ptr %12, align 8, !tbaa !13
  %226 = icmp slt i64 %224, %225
  br i1 %226, label %227, label %599

227:                                              ; preds = %223
  %228 = call i64 @libmetis__PQueueGetMax(ptr noundef %32)
  store i64 %228, ptr %33, align 8, !tbaa !13
  %229 = icmp eq i64 %228, -1
  br i1 %229, label %230, label %231

230:                                              ; preds = %227
  br label %599

231:                                              ; preds = %227
  %232 = load ptr, ptr %29, align 8, !tbaa !5
  %233 = load i64, ptr %16, align 8, !tbaa !13
  %234 = getelementptr inbounds i64, ptr %232, i64 %233
  %235 = load i64, ptr %234, align 8, !tbaa !13
  %236 = load ptr, ptr %21, align 8, !tbaa !5
  %237 = load i64, ptr %33, align 8, !tbaa !13
  %238 = getelementptr inbounds i64, ptr %236, i64 %237
  %239 = load i64, ptr %238, align 8, !tbaa !13
  %240 = add nsw i64 %235, %239
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = load i64, ptr %16, align 8, !tbaa !13
  %243 = getelementptr inbounds i64, ptr %241, i64 %242
  %244 = load i64, ptr %243, align 8, !tbaa !13
  %245 = icmp sgt i64 %240, %244
  br i1 %245, label %246, label %247

246:                                              ; preds = %231
  br label %599

247:                                              ; preds = %231
  %248 = load ptr, ptr %26, align 8, !tbaa !5
  %249 = load i64, ptr %33, align 8, !tbaa !13
  %250 = getelementptr inbounds i64, ptr %248, i64 %249
  %251 = load i64, ptr %250, align 8, !tbaa !13
  %252 = load ptr, ptr %25, align 8, !tbaa !5
  %253 = load i64, ptr %33, align 8, !tbaa !13
  %254 = getelementptr inbounds i64, ptr %252, i64 %253
  %255 = load i64, ptr %254, align 8, !tbaa !13
  %256 = sub nsw i64 %251, %255
  %257 = load i64, ptr %35, align 8, !tbaa !13
  %258 = sub nsw i64 %257, %256
  store i64 %258, ptr %35, align 8, !tbaa !13
  br label %259

259:                                              ; preds = %247
  %260 = load ptr, ptr %21, align 8, !tbaa !5
  %261 = load i64, ptr %33, align 8, !tbaa !13
  %262 = getelementptr inbounds i64, ptr %260, i64 %261
  %263 = load i64, ptr %262, align 8, !tbaa !13
  %264 = load ptr, ptr %29, align 8, !tbaa !5
  %265 = load i64, ptr %16, align 8, !tbaa !13
  %266 = getelementptr inbounds i64, ptr %264, i64 %265
  %267 = load i64, ptr %266, align 8, !tbaa !13
  %268 = add nsw i64 %267, %263
  store i64 %268, ptr %266, align 8, !tbaa !13
  %269 = load ptr, ptr %21, align 8, !tbaa !5
  %270 = load i64, ptr %33, align 8, !tbaa !13
  %271 = getelementptr inbounds i64, ptr %269, i64 %270
  %272 = load i64, ptr %271, align 8, !tbaa !13
  %273 = load ptr, ptr %29, align 8, !tbaa !5
  %274 = load i64, ptr %15, align 8, !tbaa !13
  %275 = getelementptr inbounds i64, ptr %273, i64 %274
  %276 = load i64, ptr %275, align 8, !tbaa !13
  %277 = sub nsw i64 %276, %272
  store i64 %277, ptr %275, align 8, !tbaa !13
  br label %278

278:                                              ; preds = %259
  br label %279

279:                                              ; preds = %278
  %280 = load i64, ptr %16, align 8, !tbaa !13
  %281 = load ptr, ptr %24, align 8, !tbaa !5
  %282 = load i64, ptr %33, align 8, !tbaa !13
  %283 = getelementptr inbounds i64, ptr %281, i64 %282
  store i64 %280, ptr %283, align 8, !tbaa !13
  %284 = load i64, ptr %14, align 8, !tbaa !13
  %285 = load ptr, ptr %30, align 8, !tbaa !5
  %286 = load i64, ptr %33, align 8, !tbaa !13
  %287 = getelementptr inbounds i64, ptr %285, i64 %286
  store i64 %284, ptr %287, align 8, !tbaa !13
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.controldef, ptr %288, i32 0, i32 1
  %290 = load i64, ptr %289, align 8, !tbaa !24
  %291 = and i64 %290, 32
  %292 = icmp ne i64 %291, 0
  br i1 %292, label %293, label %317

293:                                              ; preds = %279
  %294 = load i64, ptr %33, align 8, !tbaa !13
  %295 = load i64, ptr %15, align 8, !tbaa !13
  %296 = load ptr, ptr %26, align 8, !tbaa !5
  %297 = load i64, ptr %33, align 8, !tbaa !13
  %298 = getelementptr inbounds i64, ptr %296, i64 %297
  %299 = load i64, ptr %298, align 8, !tbaa !13
  %300 = load ptr, ptr %25, align 8, !tbaa !5
  %301 = load i64, ptr %33, align 8, !tbaa !13
  %302 = getelementptr inbounds i64, ptr %300, i64 %301
  %303 = load i64, ptr %302, align 8, !tbaa !13
  %304 = sub nsw i64 %299, %303
  %305 = load ptr, ptr %21, align 8, !tbaa !5
  %306 = load i64, ptr %33, align 8, !tbaa !13
  %307 = getelementptr inbounds i64, ptr %305, i64 %306
  %308 = load i64, ptr %307, align 8, !tbaa !13
  %309 = load i64, ptr %35, align 8, !tbaa !13
  %310 = load ptr, ptr %29, align 8, !tbaa !5
  %311 = getelementptr inbounds i64, ptr %310, i64 0
  %312 = load i64, ptr %311, align 8, !tbaa !13
  %313 = load ptr, ptr %29, align 8, !tbaa !5
  %314 = getelementptr inbounds i64, ptr %313, i64 1
  %315 = load i64, ptr %314, align 8, !tbaa !13
  %316 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, i64 noundef %294, i64 noundef %295, i64 noundef %304, i64 noundef %308, i64 noundef %309, i64 noundef %312, i64 noundef %315)
  br label %317

317:                                              ; preds = %293, %279
  br label %318

318:                                              ; preds = %317
  %319 = load ptr, ptr %25, align 8, !tbaa !5
  %320 = load i64, ptr %33, align 8, !tbaa !13
  %321 = getelementptr inbounds i64, ptr %319, i64 %320
  %322 = load i64, ptr %321, align 8, !tbaa !13
  store i64 %322, ptr %19, align 8, !tbaa !13
  %323 = load ptr, ptr %26, align 8, !tbaa !5
  %324 = load i64, ptr %33, align 8, !tbaa !13
  %325 = getelementptr inbounds i64, ptr %323, i64 %324
  %326 = load i64, ptr %325, align 8, !tbaa !13
  %327 = load ptr, ptr %25, align 8, !tbaa !5
  %328 = load i64, ptr %33, align 8, !tbaa !13
  %329 = getelementptr inbounds i64, ptr %327, i64 %328
  store i64 %326, ptr %329, align 8, !tbaa !13
  %330 = load i64, ptr %19, align 8, !tbaa !13
  %331 = load ptr, ptr %26, align 8, !tbaa !5
  %332 = load i64, ptr %33, align 8, !tbaa !13
  %333 = getelementptr inbounds i64, ptr %331, i64 %332
  store i64 %330, ptr %333, align 8, !tbaa !13
  br label %334

334:                                              ; preds = %318
  br label %335

335:                                              ; preds = %334
  %336 = load ptr, ptr %26, align 8, !tbaa !5
  %337 = load i64, ptr %33, align 8, !tbaa !13
  %338 = getelementptr inbounds i64, ptr %336, i64 %337
  %339 = load i64, ptr %338, align 8, !tbaa !13
  %340 = icmp eq i64 %339, 0
  br i1 %340, label %341, label %380

341:                                              ; preds = %335
  %342 = load ptr, ptr %20, align 8, !tbaa !5
  %343 = load i64, ptr %33, align 8, !tbaa !13
  %344 = getelementptr inbounds i64, ptr %342, i64 %343
  %345 = load i64, ptr %344, align 8, !tbaa !13
  %346 = load ptr, ptr %20, align 8, !tbaa !5
  %347 = load i64, ptr %33, align 8, !tbaa !13
  %348 = add nsw i64 %347, 1
  %349 = getelementptr inbounds i64, ptr %346, i64 %348
  %350 = load i64, ptr %349, align 8, !tbaa !13
  %351 = icmp slt i64 %345, %350
  br i1 %351, label %352, label %380

352:                                              ; preds = %341
  br label %353

353:                                              ; preds = %352
  %354 = load ptr, ptr %28, align 8, !tbaa !5
  %355 = load i64, ptr %13, align 8, !tbaa !13
  %356 = add nsw i64 %355, -1
  store i64 %356, ptr %13, align 8, !tbaa !13
  %357 = getelementptr inbounds i64, ptr %354, i64 %356
  %358 = load i64, ptr %357, align 8, !tbaa !13
  %359 = load ptr, ptr %28, align 8, !tbaa !5
  %360 = load ptr, ptr %27, align 8, !tbaa !5
  %361 = load i64, ptr %33, align 8, !tbaa !13
  %362 = getelementptr inbounds i64, ptr %360, i64 %361
  %363 = load i64, ptr %362, align 8, !tbaa !13
  %364 = getelementptr inbounds i64, ptr %359, i64 %363
  store i64 %358, ptr %364, align 8, !tbaa !13
  %365 = load ptr, ptr %27, align 8, !tbaa !5
  %366 = load i64, ptr %33, align 8, !tbaa !13
  %367 = getelementptr inbounds i64, ptr %365, i64 %366
  %368 = load i64, ptr %367, align 8, !tbaa !13
  %369 = load ptr, ptr %27, align 8, !tbaa !5
  %370 = load ptr, ptr %28, align 8, !tbaa !5
  %371 = load i64, ptr %13, align 8, !tbaa !13
  %372 = getelementptr inbounds i64, ptr %370, i64 %371
  %373 = load i64, ptr %372, align 8, !tbaa !13
  %374 = getelementptr inbounds i64, ptr %369, i64 %373
  store i64 %368, ptr %374, align 8, !tbaa !13
  %375 = load ptr, ptr %27, align 8, !tbaa !5
  %376 = load i64, ptr %33, align 8, !tbaa !13
  %377 = getelementptr inbounds i64, ptr %375, i64 %376
  store i64 -1, ptr %377, align 8, !tbaa !13
  br label %378

378:                                              ; preds = %353
  br label %379

379:                                              ; preds = %378
  br label %380

380:                                              ; preds = %379, %341, %335
  %381 = load ptr, ptr %20, align 8, !tbaa !5
  %382 = load i64, ptr %33, align 8, !tbaa !13
  %383 = getelementptr inbounds i64, ptr %381, i64 %382
  %384 = load i64, ptr %383, align 8, !tbaa !13
  store i64 %384, ptr %9, align 8, !tbaa !13
  br label %385

385:                                              ; preds = %592, %380
  %386 = load i64, ptr %9, align 8, !tbaa !13
  %387 = load ptr, ptr %20, align 8, !tbaa !5
  %388 = load i64, ptr %33, align 8, !tbaa !13
  %389 = add nsw i64 %388, 1
  %390 = getelementptr inbounds i64, ptr %387, i64 %389
  %391 = load i64, ptr %390, align 8, !tbaa !13
  %392 = icmp slt i64 %386, %391
  br i1 %392, label %393, label %595

393:                                              ; preds = %385
  %394 = load ptr, ptr %22, align 8, !tbaa !5
  %395 = load i64, ptr %9, align 8, !tbaa !13
  %396 = getelementptr inbounds i64, ptr %394, i64 %395
  %397 = load i64, ptr %396, align 8, !tbaa !13
  store i64 %397, ptr %10, align 8, !tbaa !13
  %398 = load ptr, ptr %26, align 8, !tbaa !5
  %399 = load i64, ptr %10, align 8, !tbaa !13
  %400 = getelementptr inbounds i64, ptr %398, i64 %399
  %401 = load i64, ptr %400, align 8, !tbaa !13
  %402 = load ptr, ptr %25, align 8, !tbaa !5
  %403 = load i64, ptr %10, align 8, !tbaa !13
  %404 = getelementptr inbounds i64, ptr %402, i64 %403
  %405 = load i64, ptr %404, align 8, !tbaa !13
  %406 = sub nsw i64 %401, %405
  store i64 %406, ptr %34, align 8, !tbaa !13
  %407 = load i64, ptr %16, align 8, !tbaa !13
  %408 = load ptr, ptr %24, align 8, !tbaa !5
  %409 = load i64, ptr %10, align 8, !tbaa !13
  %410 = getelementptr inbounds i64, ptr %408, i64 %409
  %411 = load i64, ptr %410, align 8, !tbaa !13
  %412 = icmp eq i64 %407, %411
  br i1 %412, label %413, label %418

413:                                              ; preds = %393
  %414 = load ptr, ptr %23, align 8, !tbaa !5
  %415 = load i64, ptr %9, align 8, !tbaa !13
  %416 = getelementptr inbounds i64, ptr %414, i64 %415
  %417 = load i64, ptr %416, align 8, !tbaa !13
  br label %424

418:                                              ; preds = %393
  %419 = load ptr, ptr %23, align 8, !tbaa !5
  %420 = load i64, ptr %9, align 8, !tbaa !13
  %421 = getelementptr inbounds i64, ptr %419, i64 %420
  %422 = load i64, ptr %421, align 8, !tbaa !13
  %423 = sub nsw i64 0, %422
  br label %424

424:                                              ; preds = %418, %413
  %425 = phi i64 [ %417, %413 ], [ %423, %418 ]
  store i64 %425, ptr %11, align 8, !tbaa !13
  br label %426

426:                                              ; preds = %424
  %427 = load i64, ptr %11, align 8, !tbaa !13
  %428 = load ptr, ptr %25, align 8, !tbaa !5
  %429 = load i64, ptr %10, align 8, !tbaa !13
  %430 = getelementptr inbounds i64, ptr %428, i64 %429
  %431 = load i64, ptr %430, align 8, !tbaa !13
  %432 = add nsw i64 %431, %427
  store i64 %432, ptr %430, align 8, !tbaa !13
  %433 = load i64, ptr %11, align 8, !tbaa !13
  %434 = load ptr, ptr %26, align 8, !tbaa !5
  %435 = load i64, ptr %10, align 8, !tbaa !13
  %436 = getelementptr inbounds i64, ptr %434, i64 %435
  %437 = load i64, ptr %436, align 8, !tbaa !13
  %438 = sub nsw i64 %437, %433
  store i64 %438, ptr %436, align 8, !tbaa !13
  br label %439

439:                                              ; preds = %426
  br label %440

440:                                              ; preds = %439
  %441 = load ptr, ptr %27, align 8, !tbaa !5
  %442 = load i64, ptr %10, align 8, !tbaa !13
  %443 = getelementptr inbounds i64, ptr %441, i64 %442
  %444 = load i64, ptr %443, align 8, !tbaa !13
  %445 = icmp ne i64 %444, -1
  br i1 %445, label %446, label %539

446:                                              ; preds = %440
  %447 = load ptr, ptr %26, align 8, !tbaa !5
  %448 = load i64, ptr %10, align 8, !tbaa !13
  %449 = getelementptr inbounds i64, ptr %447, i64 %448
  %450 = load i64, ptr %449, align 8, !tbaa !13
  %451 = icmp eq i64 %450, 0
  br i1 %451, label %452, label %504

452:                                              ; preds = %446
  br label %453

453:                                              ; preds = %452
  %454 = load ptr, ptr %28, align 8, !tbaa !5
  %455 = load i64, ptr %13, align 8, !tbaa !13
  %456 = add nsw i64 %455, -1
  store i64 %456, ptr %13, align 8, !tbaa !13
  %457 = getelementptr inbounds i64, ptr %454, i64 %456
  %458 = load i64, ptr %457, align 8, !tbaa !13
  %459 = load ptr, ptr %28, align 8, !tbaa !5
  %460 = load ptr, ptr %27, align 8, !tbaa !5
  %461 = load i64, ptr %10, align 8, !tbaa !13
  %462 = getelementptr inbounds i64, ptr %460, i64 %461
  %463 = load i64, ptr %462, align 8, !tbaa !13
  %464 = getelementptr inbounds i64, ptr %459, i64 %463
  store i64 %458, ptr %464, align 8, !tbaa !13
  %465 = load ptr, ptr %27, align 8, !tbaa !5
  %466 = load i64, ptr %10, align 8, !tbaa !13
  %467 = getelementptr inbounds i64, ptr %465, i64 %466
  %468 = load i64, ptr %467, align 8, !tbaa !13
  %469 = load ptr, ptr %27, align 8, !tbaa !5
  %470 = load ptr, ptr %28, align 8, !tbaa !5
  %471 = load i64, ptr %13, align 8, !tbaa !13
  %472 = getelementptr inbounds i64, ptr %470, i64 %471
  %473 = load i64, ptr %472, align 8, !tbaa !13
  %474 = getelementptr inbounds i64, ptr %469, i64 %473
  store i64 %468, ptr %474, align 8, !tbaa !13
  %475 = load ptr, ptr %27, align 8, !tbaa !5
  %476 = load i64, ptr %10, align 8, !tbaa !13
  %477 = getelementptr inbounds i64, ptr %475, i64 %476
  store i64 -1, ptr %477, align 8, !tbaa !13
  br label %478

478:                                              ; preds = %453
  br label %479

479:                                              ; preds = %478
  %480 = load ptr, ptr %30, align 8, !tbaa !5
  %481 = load i64, ptr %10, align 8, !tbaa !13
  %482 = getelementptr inbounds i64, ptr %480, i64 %481
  %483 = load i64, ptr %482, align 8, !tbaa !13
  %484 = icmp eq i64 %483, -1
  br i1 %484, label %485, label %503

485:                                              ; preds = %479
  %486 = load ptr, ptr %24, align 8, !tbaa !5
  %487 = load i64, ptr %10, align 8, !tbaa !13
  %488 = getelementptr inbounds i64, ptr %486, i64 %487
  %489 = load i64, ptr %488, align 8, !tbaa !13
  %490 = load i64, ptr %15, align 8, !tbaa !13
  %491 = icmp eq i64 %489, %490
  br i1 %491, label %492, label %503

492:                                              ; preds = %485
  %493 = load ptr, ptr %21, align 8, !tbaa !5
  %494 = load i64, ptr %10, align 8, !tbaa !13
  %495 = getelementptr inbounds i64, ptr %493, i64 %494
  %496 = load i64, ptr %495, align 8, !tbaa !13
  %497 = load i64, ptr %36, align 8, !tbaa !13
  %498 = icmp sle i64 %496, %497
  br i1 %498, label %499, label %503

499:                                              ; preds = %492
  %500 = load i64, ptr %10, align 8, !tbaa !13
  %501 = load i64, ptr %34, align 8, !tbaa !13
  %502 = call i64 @libmetis__PQueueDelete(ptr noundef %32, i64 noundef %500, i64 noundef %501)
  br label %503

503:                                              ; preds = %499, %492, %485, %479
  br label %538

504:                                              ; preds = %446
  %505 = load ptr, ptr %30, align 8, !tbaa !5
  %506 = load i64, ptr %10, align 8, !tbaa !13
  %507 = getelementptr inbounds i64, ptr %505, i64 %506
  %508 = load i64, ptr %507, align 8, !tbaa !13
  %509 = icmp eq i64 %508, -1
  br i1 %509, label %510, label %537

510:                                              ; preds = %504
  %511 = load ptr, ptr %24, align 8, !tbaa !5
  %512 = load i64, ptr %10, align 8, !tbaa !13
  %513 = getelementptr inbounds i64, ptr %511, i64 %512
  %514 = load i64, ptr %513, align 8, !tbaa !13
  %515 = load i64, ptr %15, align 8, !tbaa !13
  %516 = icmp eq i64 %514, %515
  br i1 %516, label %517, label %537

517:                                              ; preds = %510
  %518 = load ptr, ptr %21, align 8, !tbaa !5
  %519 = load i64, ptr %10, align 8, !tbaa !13
  %520 = getelementptr inbounds i64, ptr %518, i64 %519
  %521 = load i64, ptr %520, align 8, !tbaa !13
  %522 = load i64, ptr %36, align 8, !tbaa !13
  %523 = icmp sle i64 %521, %522
  br i1 %523, label %524, label %537

524:                                              ; preds = %517
  %525 = load i64, ptr %10, align 8, !tbaa !13
  %526 = load i64, ptr %34, align 8, !tbaa !13
  %527 = load ptr, ptr %26, align 8, !tbaa !5
  %528 = load i64, ptr %10, align 8, !tbaa !13
  %529 = getelementptr inbounds i64, ptr %527, i64 %528
  %530 = load i64, ptr %529, align 8, !tbaa !13
  %531 = load ptr, ptr %25, align 8, !tbaa !5
  %532 = load i64, ptr %10, align 8, !tbaa !13
  %533 = getelementptr inbounds i64, ptr %531, i64 %532
  %534 = load i64, ptr %533, align 8, !tbaa !13
  %535 = sub nsw i64 %530, %534
  %536 = call i64 @libmetis__PQueueUpdate(ptr noundef %32, i64 noundef %525, i64 noundef %526, i64 noundef %535)
  br label %537

537:                                              ; preds = %524, %517, %510, %504
  br label %538

538:                                              ; preds = %537, %503
  br label %591

539:                                              ; preds = %440
  %540 = load ptr, ptr %26, align 8, !tbaa !5
  %541 = load i64, ptr %10, align 8, !tbaa !13
  %542 = getelementptr inbounds i64, ptr %540, i64 %541
  %543 = load i64, ptr %542, align 8, !tbaa !13
  %544 = icmp sgt i64 %543, 0
  br i1 %544, label %545, label %590

545:                                              ; preds = %539
  br label %546

546:                                              ; preds = %545
  %547 = load i64, ptr %10, align 8, !tbaa !13
  %548 = load ptr, ptr %28, align 8, !tbaa !5
  %549 = load i64, ptr %13, align 8, !tbaa !13
  %550 = getelementptr inbounds i64, ptr %548, i64 %549
  store i64 %547, ptr %550, align 8, !tbaa !13
  %551 = load i64, ptr %13, align 8, !tbaa !13
  %552 = add nsw i64 %551, 1
  store i64 %552, ptr %13, align 8, !tbaa !13
  %553 = load ptr, ptr %27, align 8, !tbaa !5
  %554 = load i64, ptr %10, align 8, !tbaa !13
  %555 = getelementptr inbounds i64, ptr %553, i64 %554
  store i64 %551, ptr %555, align 8, !tbaa !13
  br label %556

556:                                              ; preds = %546
  br label %557

557:                                              ; preds = %556
  %558 = load ptr, ptr %30, align 8, !tbaa !5
  %559 = load i64, ptr %10, align 8, !tbaa !13
  %560 = getelementptr inbounds i64, ptr %558, i64 %559
  %561 = load i64, ptr %560, align 8, !tbaa !13
  %562 = icmp eq i64 %561, -1
  br i1 %562, label %563, label %589

563:                                              ; preds = %557
  %564 = load ptr, ptr %24, align 8, !tbaa !5
  %565 = load i64, ptr %10, align 8, !tbaa !13
  %566 = getelementptr inbounds i64, ptr %564, i64 %565
  %567 = load i64, ptr %566, align 8, !tbaa !13
  %568 = load i64, ptr %15, align 8, !tbaa !13
  %569 = icmp eq i64 %567, %568
  br i1 %569, label %570, label %589

570:                                              ; preds = %563
  %571 = load ptr, ptr %21, align 8, !tbaa !5
  %572 = load i64, ptr %10, align 8, !tbaa !13
  %573 = getelementptr inbounds i64, ptr %571, i64 %572
  %574 = load i64, ptr %573, align 8, !tbaa !13
  %575 = load i64, ptr %36, align 8, !tbaa !13
  %576 = icmp sle i64 %574, %575
  br i1 %576, label %577, label %589

577:                                              ; preds = %570
  %578 = load i64, ptr %10, align 8, !tbaa !13
  %579 = load ptr, ptr %26, align 8, !tbaa !5
  %580 = load i64, ptr %10, align 8, !tbaa !13
  %581 = getelementptr inbounds i64, ptr %579, i64 %580
  %582 = load i64, ptr %581, align 8, !tbaa !13
  %583 = load ptr, ptr %25, align 8, !tbaa !5
  %584 = load i64, ptr %10, align 8, !tbaa !13
  %585 = getelementptr inbounds i64, ptr %583, i64 %584
  %586 = load i64, ptr %585, align 8, !tbaa !13
  %587 = sub nsw i64 %582, %586
  %588 = call i64 @libmetis__PQueueInsert(ptr noundef %32, i64 noundef %578, i64 noundef %587)
  br label %589

589:                                              ; preds = %577, %570, %563, %557
  br label %590

590:                                              ; preds = %589, %539
  br label %591

591:                                              ; preds = %590, %538
  br label %592

592:                                              ; preds = %591
  %593 = load i64, ptr %9, align 8, !tbaa !13
  %594 = add nsw i64 %593, 1
  store i64 %594, ptr %9, align 8, !tbaa !13
  br label %385, !llvm.loop !34

595:                                              ; preds = %385
  br label %596

596:                                              ; preds = %595
  %597 = load i64, ptr %14, align 8, !tbaa !13
  %598 = add nsw i64 %597, 1
  store i64 %598, ptr %14, align 8, !tbaa !13
  br label %223, !llvm.loop !35

599:                                              ; preds = %246, %230, %223
  %600 = load ptr, ptr %4, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.controldef, ptr %600, i32 0, i32 1
  %602 = load i64, ptr %601, align 8, !tbaa !24
  %603 = and i64 %602, 8
  %604 = icmp ne i64 %603, 0
  br i1 %604, label %605, label %615

605:                                              ; preds = %599
  %606 = load i64, ptr %35, align 8, !tbaa !13
  %607 = load ptr, ptr %29, align 8, !tbaa !5
  %608 = getelementptr inbounds i64, ptr %607, i64 0
  %609 = load i64, ptr %608, align 8, !tbaa !13
  %610 = load ptr, ptr %29, align 8, !tbaa !5
  %611 = getelementptr inbounds i64, ptr %610, i64 1
  %612 = load i64, ptr %611, align 8, !tbaa !13
  %613 = load i64, ptr %13, align 8, !tbaa !13
  %614 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, i64 noundef %606, i64 noundef %609, i64 noundef %612, i64 noundef %613)
  br label %615

615:                                              ; preds = %605, %599
  %616 = load i64, ptr %35, align 8, !tbaa !13
  %617 = load ptr, ptr %5, align 8, !tbaa !5
  %618 = getelementptr inbounds %struct.graphdef, ptr %617, i32 0, i32 16
  store i64 %616, ptr %618, align 8, !tbaa !30
  %619 = load i64, ptr %13, align 8, !tbaa !13
  %620 = load ptr, ptr %5, align 8, !tbaa !5
  %621 = getelementptr inbounds %struct.graphdef, ptr %620, i32 0, i32 20
  store i64 %619, ptr %621, align 8, !tbaa !29
  %622 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__PQueueFree(ptr noundef %622, ptr noundef %32)
  %623 = load ptr, ptr %4, align 8, !tbaa !5
  %624 = load i64, ptr %12, align 8, !tbaa !13
  call void @libmetis__idxwspacefree(ptr noundef %623, i64 noundef %624)
  %625 = load ptr, ptr %4, align 8, !tbaa !5
  %626 = load i64, ptr %12, align 8, !tbaa !13
  call void @libmetis__idxwspacefree(ptr noundef %625, i64 noundef %626)
  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 88, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, 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
}

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

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

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

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

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

declare ptr @libmetis__idxset(i64 noundef, i64 noundef, 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__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

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, !11, i64 0}
!10 = !{!"graphdef", !11, i64 0, !11, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !12, i64 56, !12, i64 60, !12, i64 64, !12, i64 68, !12, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !11, i64 112, !11, i64 120, !6, i64 128, !6, i64 136, !11, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200, !11, i64 208, !6, i64 216, !6, i64 224, !6, i64 232, !6, i64 240}
!11 = !{!"long", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!11, !11, i64 0}
!14 = !{!10, !6, i64 16}
!15 = !{!10, !6, i64 24}
!16 = !{!10, !6, i64 40}
!17 = !{!10, !6, i64 48}
!18 = !{!10, !6, i64 128}
!19 = !{!10, !6, i64 168}
!20 = !{!10, !6, i64 176}
!21 = !{!10, !6, i64 136}
!22 = !{!10, !6, i64 152}
!23 = !{!10, !6, i64 160}
!24 = !{!25, !11, i64 8}
!25 = !{!"controldef", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !26, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !27, i64 88, !28, i64 152, !28, i64 160, !28, i64 168, !28, i64 176, !28, i64 184, !28, i64 192, !28, i64 200, !28, i64 208, !28, i64 216, !28, i64 224, !28, i64 232, !28, i64 240, !28, i64 248, !28, i64 256, !28, i64 264, !28, i64 272}
!26 = !{!"float", !7, i64 0}
!27 = !{!"workspacedef", !6, i64 0, !11, i64 8, !11, i64 16, !6, i64 24, !6, i64 32, !11, i64 40, !6, i64 48, !6, i64 56}
!28 = !{!"double", !7, i64 0}
!29 = !{!10, !11, i64 144}
!30 = !{!10, !11, i64 112}
!31 = !{!10, !6, i64 88}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}


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

@.str = external hidden unnamed_addr constant [65 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [48 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
define dso_local void @libmetis__Bnd2WayBalance(ptr noundef %0, ptr nocapture noundef %1, ptr nocapture noundef readonly %2) local_unnamed_addr #1 {
  %4 = alloca %struct.PQueueType, align 8
  call void @llvm.lifetime.start.p0(i64 88, ptr nonnull %4) #4
  %5 = load i64, ptr %1, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 16
  %7 = load ptr, ptr %6, align 8, !tbaa !12
  %8 = getelementptr inbounds i8, ptr %1, i64 24
  %9 = load ptr, ptr %8, align 8, !tbaa !13
  %10 = getelementptr inbounds i8, ptr %1, i64 40
  %11 = load ptr, ptr %10, align 8, !tbaa !14
  %12 = getelementptr inbounds i8, ptr %1, i64 48
  %13 = load ptr, ptr %12, align 8, !tbaa !15
  %14 = getelementptr inbounds i8, ptr %1, i64 128
  %15 = load ptr, ptr %14, align 8, !tbaa !16
  %16 = getelementptr inbounds i8, ptr %1, i64 168
  %17 = load ptr, ptr %16, align 8, !tbaa !17
  %18 = getelementptr inbounds i8, ptr %1, i64 176
  %19 = load ptr, ptr %18, align 8, !tbaa !18
  %20 = getelementptr inbounds i8, ptr %1, i64 136
  %21 = load ptr, ptr %20, align 8, !tbaa !19
  %22 = getelementptr inbounds i8, ptr %1, i64 152
  %23 = load ptr, ptr %22, align 8, !tbaa !20
  %24 = getelementptr inbounds i8, ptr %1, i64 160
  %25 = load ptr, ptr %24, align 8, !tbaa !21
  %26 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %5) #4
  %27 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %5) #4
  %28 = load i64, ptr %2, align 8, !tbaa !22
  %29 = load i64, ptr %21, align 8, !tbaa !22
  %30 = sub nsw i64 %28, %29
  %31 = tail call i64 @llvm.abs.i64(i64 %30, i1 true)
  %32 = icmp slt i64 %29, %28
  %33 = zext i1 %32 to i64
  %not. = xor i1 %32, true
  %34 = zext i1 %not. to i64
  %35 = getelementptr inbounds i8, ptr %0, i64 8
  %36 = load i64, ptr %35, align 8, !tbaa !23
  %37 = and i64 %36, 8
  %.not = icmp eq i64 %37, 0
  br i1 %.not, label %49, label %38

38:                                               ; preds = %3
  %39 = getelementptr inbounds i8, ptr %21, i64 8
  %40 = load i64, ptr %39, align 8, !tbaa !22
  %41 = getelementptr inbounds i8, ptr %2, i64 8
  %42 = load i64, ptr %41, align 8, !tbaa !22
  %43 = load i64, ptr %1, align 8, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %1, i64 144
  %45 = load i64, ptr %44, align 8, !tbaa !28
  %46 = getelementptr inbounds i8, ptr %1, i64 112
  %47 = load i64, ptr %46, align 8, !tbaa !29
  %48 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str, i64 noundef %29, i64 noundef %40, i64 noundef %28, i64 noundef %42, i64 noundef %43, i64 noundef %45, i64 noundef %47) #4
  br label %49

49:                                               ; preds = %38, %3
  %50 = getelementptr inbounds i8, ptr %1, i64 88
  %51 = load ptr, ptr %50, align 8, !tbaa !30
  %52 = tail call i64 @libmetis__idxargmax(i64 noundef %5, ptr noundef %51) #4
  %53 = getelementptr inbounds i64, ptr %51, i64 %52
  %54 = load i64, ptr %53, align 8, !tbaa !22
  call void @libmetis__PQueueInit(ptr noundef nonnull %0, ptr noundef nonnull %4, i64 noundef %5, i64 noundef %54) #4
  %55 = call ptr @libmetis__idxset(i64 noundef %5, i64 noundef -1, ptr noundef %26) #4
  %56 = getelementptr inbounds i8, ptr %1, i64 144
  %57 = load i64, ptr %56, align 8, !tbaa !28
  call void @libmetis__RandomPermute(i64 noundef %57, ptr noundef %27, i64 noundef 1) #4
  %58 = icmp sgt i64 %57, 0
  br i1 %58, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %49, %76
  %.0249 = phi i64 [ %77, %76 ], [ 0, %49 ]
  %59 = getelementptr inbounds i64, ptr %27, i64 %.0249
  %60 = load i64, ptr %59, align 8, !tbaa !22
  %61 = getelementptr inbounds i64, ptr %25, i64 %60
  %62 = load i64, ptr %61, align 8, !tbaa !22
  %63 = getelementptr inbounds i64, ptr %15, i64 %62
  %64 = load i64, ptr %63, align 8, !tbaa !22
  %65 = icmp eq i64 %64, %33
  br i1 %65, label %66, label %76

66:                                               ; preds = %.lr.ph
  %67 = getelementptr inbounds i64, ptr %9, i64 %62
  %68 = load i64, ptr %67, align 8, !tbaa !22
  %.not248 = icmp sgt i64 %68, %31
  br i1 %.not248, label %76, label %69

69:                                               ; preds = %66
  %70 = getelementptr inbounds i64, ptr %19, i64 %62
  %71 = load i64, ptr %70, align 8, !tbaa !22
  %72 = getelementptr inbounds i64, ptr %17, i64 %62
  %73 = load i64, ptr %72, align 8, !tbaa !22
  %74 = sub nsw i64 %71, %73
  %75 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %4, i64 noundef %62, i64 noundef %74) #4
  br label %76

76:                                               ; preds = %.lr.ph, %66, %69
  %77 = add nuw nsw i64 %.0249, 1
  %exitcond.not = icmp eq i64 %77, %57
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !31

._crit_edge:                                      ; preds = %76, %49
  %78 = getelementptr inbounds i8, ptr %1, i64 112
  %79 = load i64, ptr %78, align 8, !tbaa !29
  %80 = getelementptr inbounds i64, ptr %21, i64 %34
  %81 = icmp sgt i64 %5, 0
  br i1 %81, label %.lr.ph259, label %._crit_edge260

.lr.ph259:                                        ; preds = %._crit_edge
  %82 = getelementptr inbounds i64, ptr %2, i64 %34
  %83 = getelementptr inbounds i64, ptr %21, i64 %33
  %84 = getelementptr inbounds i8, ptr %21, i64 8
  br label %85

85:                                               ; preds = %.lr.ph259, %._crit_edge254
  %.0231257 = phi i64 [ %79, %.lr.ph259 ], [ %100, %._crit_edge254 ]
  %.0233256 = phi i64 [ %57, %.lr.ph259 ], [ %.2.lcssa, %._crit_edge254 ]
  %.0234255 = phi i64 [ 0, %.lr.ph259 ], [ %217, %._crit_edge254 ]
  %86 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %4) #4
  %87 = icmp eq i64 %86, -1
  br i1 %87, label %._crit_edge260, label %88

88:                                               ; preds = %85
  %89 = load i64, ptr %80, align 8, !tbaa !22
  %90 = getelementptr inbounds i64, ptr %9, i64 %86
  %91 = load i64, ptr %90, align 8, !tbaa !22
  %92 = add nsw i64 %91, %89
  %93 = load i64, ptr %82, align 8, !tbaa !22
  %94 = icmp sgt i64 %92, %93
  br i1 %94, label %._crit_edge260, label %95

95:                                               ; preds = %88
  %96 = getelementptr inbounds i64, ptr %19, i64 %86
  %97 = load i64, ptr %96, align 8, !tbaa !22
  %98 = getelementptr inbounds i64, ptr %17, i64 %86
  %99 = load i64, ptr %98, align 8, !tbaa !22
  %.neg = sub i64 %99, %97
  %100 = add i64 %.neg, %.0231257
  store i64 %92, ptr %80, align 8, !tbaa !22
  %101 = load i64, ptr %90, align 8, !tbaa !22
  %102 = load i64, ptr %83, align 8, !tbaa !22
  %103 = sub nsw i64 %102, %101
  store i64 %103, ptr %83, align 8, !tbaa !22
  %104 = getelementptr inbounds i64, ptr %15, i64 %86
  store i64 %34, ptr %104, align 8, !tbaa !22
  %105 = getelementptr inbounds i64, ptr %26, i64 %86
  store i64 %.0234255, ptr %105, align 8, !tbaa !22
  %106 = load i64, ptr %35, align 8, !tbaa !23
  %107 = and i64 %106, 32
  %.not242 = icmp eq i64 %107, 0
  br i1 %.not242, label %116, label %108

108:                                              ; preds = %95
  %109 = load i64, ptr %96, align 8, !tbaa !22
  %110 = load i64, ptr %98, align 8, !tbaa !22
  %111 = sub nsw i64 %109, %110
  %112 = load i64, ptr %90, align 8, !tbaa !22
  %113 = load i64, ptr %21, align 8, !tbaa !22
  %114 = load i64, ptr %84, align 8, !tbaa !22
  %115 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, i64 noundef %86, i64 noundef %33, i64 noundef %111, i64 noundef %112, i64 noundef %100, i64 noundef %113, i64 noundef %114) #4
  br label %116

116:                                              ; preds = %95, %108
  %117 = load i64, ptr %98, align 8, !tbaa !22
  %118 = load i64, ptr %96, align 8, !tbaa !22
  store i64 %118, ptr %98, align 8, !tbaa !22
  store i64 %117, ptr %96, align 8, !tbaa !22
  %119 = icmp eq i64 %117, 0
  br i1 %119, label %120, label %135

120:                                              ; preds = %116
  %121 = getelementptr inbounds i64, ptr %7, i64 %86
  %122 = load i64, ptr %121, align 8, !tbaa !22
  %123 = getelementptr i8, ptr %121, i64 8
  %124 = load i64, ptr %123, align 8, !tbaa !22
  %125 = icmp slt i64 %122, %124
  br i1 %125, label %126, label %135

126:                                              ; preds = %120
  %127 = add nsw i64 %.0233256, -1
  %128 = getelementptr inbounds i64, ptr %25, i64 %127
  %129 = load i64, ptr %128, align 8, !tbaa !22
  %130 = getelementptr inbounds i64, ptr %23, i64 %86
  %131 = load i64, ptr %130, align 8, !tbaa !22
  %132 = getelementptr inbounds i64, ptr %25, i64 %131
  store i64 %129, ptr %132, align 8, !tbaa !22
  %133 = load i64, ptr %130, align 8, !tbaa !22
  %134 = getelementptr inbounds i64, ptr %23, i64 %129
  store i64 %133, ptr %134, align 8, !tbaa !22
  store i64 -1, ptr %130, align 8, !tbaa !22
  br label %135

135:                                              ; preds = %126, %120, %116
  %.1 = phi i64 [ %127, %126 ], [ %.0233256, %120 ], [ %.0233256, %116 ]
  %136 = getelementptr inbounds i64, ptr %7, i64 %86
  %137 = load i64, ptr %136, align 8, !tbaa !22
  %138 = getelementptr i8, ptr %136, i64 8
  %139 = load i64, ptr %138, align 8, !tbaa !22
  %140 = icmp slt i64 %137, %139
  br i1 %140, label %.lr.ph253, label %._crit_edge254

.lr.ph253:                                        ; preds = %135, %213
  %.0232251 = phi i64 [ %214, %213 ], [ %137, %135 ]
  %.2250 = phi i64 [ %.3, %213 ], [ %.1, %135 ]
  %141 = getelementptr inbounds i64, ptr %11, i64 %.0232251
  %142 = load i64, ptr %141, align 8, !tbaa !22
  %143 = getelementptr inbounds i64, ptr %19, i64 %142
  %144 = load i64, ptr %143, align 8, !tbaa !22
  %145 = getelementptr inbounds i64, ptr %17, i64 %142
  %146 = load i64, ptr %145, align 8, !tbaa !22
  %147 = sub nsw i64 %144, %146
  %148 = getelementptr inbounds i64, ptr %15, i64 %142
  %149 = load i64, ptr %148, align 8, !tbaa !22
  %150 = icmp eq i64 %149, %34
  %151 = getelementptr inbounds i64, ptr %13, i64 %.0232251
  %152 = load i64, ptr %151, align 8, !tbaa !22
  %153 = sub nsw i64 0, %152
  %154 = select i1 %150, i64 %152, i64 %153
  %155 = add nsw i64 %154, %146
  store i64 %155, ptr %145, align 8, !tbaa !22
  %156 = load i64, ptr %143, align 8, !tbaa !22
  %157 = sub nsw i64 %156, %154
  store i64 %157, ptr %143, align 8, !tbaa !22
  %158 = getelementptr inbounds i64, ptr %23, i64 %142
  %159 = load i64, ptr %158, align 8, !tbaa !22
  %.not243 = icmp eq i64 %159, -1
  br i1 %.not243, label %194, label %160

160:                                              ; preds = %.lr.ph253
  %161 = icmp eq i64 %156, %154
  br i1 %161, label %162, label %180

162:                                              ; preds = %160
  %163 = add nsw i64 %.2250, -1
  %164 = getelementptr inbounds i64, ptr %25, i64 %163
  %165 = load i64, ptr %164, align 8, !tbaa !22
  %166 = getelementptr inbounds i64, ptr %25, i64 %159
  store i64 %165, ptr %166, align 8, !tbaa !22
  %167 = load i64, ptr %158, align 8, !tbaa !22
  %168 = getelementptr inbounds i64, ptr %23, i64 %165
  store i64 %167, ptr %168, align 8, !tbaa !22
  store i64 -1, ptr %158, align 8, !tbaa !22
  %169 = getelementptr inbounds i64, ptr %26, i64 %142
  %170 = load i64, ptr %169, align 8, !tbaa !22
  %171 = icmp eq i64 %170, -1
  br i1 %171, label %172, label %213

172:                                              ; preds = %162
  %173 = load i64, ptr %148, align 8, !tbaa !22
  %174 = icmp eq i64 %173, %33
  br i1 %174, label %175, label %213

175:                                              ; preds = %172
  %176 = getelementptr inbounds i64, ptr %9, i64 %142
  %177 = load i64, ptr %176, align 8, !tbaa !22
  %.not246 = icmp sgt i64 %177, %31
  br i1 %.not246, label %213, label %178

178:                                              ; preds = %175
  %179 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %4, i64 noundef %142, i64 noundef %147) #4
  br label %213

180:                                              ; preds = %160
  %181 = getelementptr inbounds i64, ptr %26, i64 %142
  %182 = load i64, ptr %181, align 8, !tbaa !22
  %183 = icmp eq i64 %182, -1
  br i1 %183, label %184, label %213

184:                                              ; preds = %180
  %185 = load i64, ptr %148, align 8, !tbaa !22
  %186 = icmp eq i64 %185, %33
  br i1 %186, label %187, label %213

187:                                              ; preds = %184
  %188 = getelementptr inbounds i64, ptr %9, i64 %142
  %189 = load i64, ptr %188, align 8, !tbaa !22
  %.not245 = icmp sgt i64 %189, %31
  br i1 %.not245, label %213, label %190

190:                                              ; preds = %187
  %191 = load i64, ptr %145, align 8, !tbaa !22
  %192 = sub nsw i64 %157, %191
  %193 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %4, i64 noundef %142, i64 noundef %147, i64 noundef %192) #4
  br label %213

194:                                              ; preds = %.lr.ph253
  %195 = icmp sgt i64 %157, 0
  br i1 %195, label %196, label %213

196:                                              ; preds = %194
  %197 = getelementptr inbounds i64, ptr %25, i64 %.2250
  store i64 %142, ptr %197, align 8, !tbaa !22
  %198 = add nsw i64 %.2250, 1
  store i64 %.2250, ptr %158, align 8, !tbaa !22
  %199 = getelementptr inbounds i64, ptr %26, i64 %142
  %200 = load i64, ptr %199, align 8, !tbaa !22
  %201 = icmp eq i64 %200, -1
  br i1 %201, label %202, label %213

202:                                              ; preds = %196
  %203 = load i64, ptr %148, align 8, !tbaa !22
  %204 = icmp eq i64 %203, %33
  br i1 %204, label %205, label %213

205:                                              ; preds = %202
  %206 = getelementptr inbounds i64, ptr %9, i64 %142
  %207 = load i64, ptr %206, align 8, !tbaa !22
  %.not244 = icmp sgt i64 %207, %31
  br i1 %.not244, label %213, label %208

208:                                              ; preds = %205
  %209 = load i64, ptr %143, align 8, !tbaa !22
  %210 = load i64, ptr %145, align 8, !tbaa !22
  %211 = sub nsw i64 %209, %210
  %212 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %4, i64 noundef %142, i64 noundef %211) #4
  br label %213

213:                                              ; preds = %180, %184, %187, %190, %162, %172, %175, %178, %196, %202, %205, %208, %194
  %.3 = phi i64 [ %163, %178 ], [ %163, %175 ], [ %163, %172 ], [ %163, %162 ], [ %.2250, %190 ], [ %.2250, %187 ], [ %.2250, %184 ], [ %.2250, %180 ], [ %198, %208 ], [ %198, %205 ], [ %198, %202 ], [ %198, %196 ], [ %.2250, %194 ]
  %214 = add nsw i64 %.0232251, 1
  %215 = load i64, ptr %138, align 8, !tbaa !22
  %216 = icmp slt i64 %214, %215
  br i1 %216, label %.lr.ph253, label %._crit_edge254, !llvm.loop !33

._crit_edge254:                                   ; preds = %213, %135
  %.2.lcssa = phi i64 [ %.1, %135 ], [ %.3, %213 ]
  %217 = add nuw nsw i64 %.0234255, 1
  %exitcond269.not = icmp eq i64 %217, %5
  br i1 %exitcond269.not, label %._crit_edge260, label %85, !llvm.loop !34

._crit_edge260:                                   ; preds = %._crit_edge254, %85, %88, %._crit_edge
  %.0233.lcssa = phi i64 [ %57, %._crit_edge ], [ %.0233256, %88 ], [ %.0233256, %85 ], [ %.2.lcssa, %._crit_edge254 ]
  %.0231.lcssa = phi i64 [ %79, %._crit_edge ], [ %.0231257, %88 ], [ %.0231257, %85 ], [ %100, %._crit_edge254 ]
  %218 = load i64, ptr %35, align 8, !tbaa !23
  %219 = and i64 %218, 8
  %.not247 = icmp eq i64 %219, 0
  br i1 %.not247, label %225, label %220

220:                                              ; preds = %._crit_edge260
  %221 = load i64, ptr %21, align 8, !tbaa !22
  %222 = getelementptr inbounds i8, ptr %21, i64 8
  %223 = load i64, ptr %222, align 8, !tbaa !22
  %224 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, i64 noundef %.0231.lcssa, i64 noundef %221, i64 noundef %223, i64 noundef %.0233.lcssa) #4
  br label %225

225:                                              ; preds = %220, %._crit_edge260
  store i64 %.0231.lcssa, ptr %78, align 8, !tbaa !29
  store i64 %.0233.lcssa, ptr %56, align 8, !tbaa !28
  call void @libmetis__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %4) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %5) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %5) #4
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %4) #4
  ret void
}

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

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

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

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

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

declare ptr @libmetis__idxset(i64 noundef, i64 noundef, 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__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: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #3

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 = { nounwind }

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

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


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