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

; 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.4 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

; 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__MocInit2WayBalance(ptr noundef %0, ptr noundef %1, ptr noundef %2) #2 {
  %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 i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca [16 x [2 x %struct.PQueueType]], align 16
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = 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 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 2816, 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
  %39 = load ptr, ptr %5, align 8, !tbaa !5
  %40 = getelementptr inbounds %struct.graphdef, ptr %39, i32 0, i32 0
  %41 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %41, ptr %13, align 8, !tbaa !13
  %42 = load ptr, ptr %5, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.graphdef, ptr %42, i32 0, i32 28
  %44 = load i64, ptr %43, align 8, !tbaa !14
  store i64 %44, ptr %15, align 8, !tbaa !13
  %45 = load ptr, ptr %5, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.graphdef, ptr %45, i32 0, i32 2
  %47 = load ptr, ptr %46, align 8, !tbaa !15
  store ptr %47, ptr %23, align 8, !tbaa !5
  %48 = load ptr, ptr %5, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.graphdef, ptr %48, i32 0, i32 5
  %50 = load ptr, ptr %49, align 8, !tbaa !16
  store ptr %50, ptr %24, align 8, !tbaa !5
  %51 = load ptr, ptr %5, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.graphdef, ptr %51, i32 0, i32 29
  %53 = load ptr, ptr %52, align 8, !tbaa !17
  store ptr %53, ptr %33, align 8, !tbaa !5
  %54 = load ptr, ptr %5, align 8, !tbaa !5
  %55 = getelementptr inbounds %struct.graphdef, ptr %54, i32 0, i32 6
  %56 = load ptr, ptr %55, align 8, !tbaa !18
  store ptr %56, ptr %25, align 8, !tbaa !5
  %57 = load ptr, ptr %5, align 8, !tbaa !5
  %58 = getelementptr inbounds %struct.graphdef, ptr %57, i32 0, i32 18
  %59 = load ptr, ptr %58, align 8, !tbaa !19
  store ptr %59, ptr %26, align 8, !tbaa !5
  %60 = load ptr, ptr %5, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.graphdef, ptr %60, i32 0, i32 23
  %62 = load ptr, ptr %61, align 8, !tbaa !20
  store ptr %62, ptr %27, align 8, !tbaa !5
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.graphdef, ptr %63, i32 0, i32 24
  %65 = load ptr, ptr %64, align 8, !tbaa !21
  store ptr %65, ptr %28, align 8, !tbaa !5
  %66 = load ptr, ptr %5, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.graphdef, ptr %66, i32 0, i32 30
  %68 = load ptr, ptr %67, align 8, !tbaa !22
  store ptr %68, ptr %34, align 8, !tbaa !5
  %69 = load ptr, ptr %5, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.graphdef, ptr %69, i32 0, i32 21
  %71 = load ptr, ptr %70, align 8, !tbaa !23
  store ptr %71, ptr %29, align 8, !tbaa !5
  %72 = load ptr, ptr %5, align 8, !tbaa !5
  %73 = getelementptr inbounds %struct.graphdef, ptr %72, i32 0, i32 22
  %74 = load ptr, ptr %73, align 8, !tbaa !24
  store ptr %74, ptr %30, align 8, !tbaa !5
  %75 = load ptr, ptr %4, align 8, !tbaa !5
  %76 = load i64, ptr %13, align 8, !tbaa !13
  %77 = call ptr @libmetis__idxwspacemalloc(ptr noundef %75, i64 noundef %76)
  store ptr %77, ptr %31, align 8, !tbaa !5
  %78 = load ptr, ptr %4, align 8, !tbaa !5
  %79 = load i64, ptr %13, align 8, !tbaa !13
  %80 = call ptr @libmetis__idxwspacemalloc(ptr noundef %78, i64 noundef %79)
  store ptr %80, ptr %32, align 8, !tbaa !5
  store i64 1, ptr %17, align 8, !tbaa !13
  %81 = load i64, ptr %17, align 8, !tbaa !13
  %82 = add nsw i64 %81, 1
  %83 = srem i64 %82, 2
  store i64 %83, ptr %18, align 8, !tbaa !13
  %84 = load ptr, ptr %4, align 8, !tbaa !5
  %85 = getelementptr inbounds %struct.controldef, ptr %84, i32 0, i32 1
  %86 = load i64, ptr %85, align 8, !tbaa !25
  %87 = and i64 %86, 8
  %88 = icmp ne i64 %87, 0
  br i1 %88, label %89, label %136

89:                                               ; preds = %3
  %90 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4)
  store i64 0, ptr %11, align 8, !tbaa !13
  br label %91

91:                                               ; preds = %109, %89
  %92 = load i64, ptr %11, align 8, !tbaa !13
  %93 = load i64, ptr %15, align 8, !tbaa !13
  %94 = icmp slt i64 %92, %93
  br i1 %94, label %95, label %112

95:                                               ; preds = %91
  %96 = load ptr, ptr %34, align 8, !tbaa !5
  %97 = load i64, ptr %11, align 8, !tbaa !13
  %98 = getelementptr inbounds float, ptr %96, i64 %97
  %99 = load float, ptr %98, align 4, !tbaa !30
  %100 = fpext float %99 to double
  %101 = load ptr, ptr %34, align 8, !tbaa !5
  %102 = load i64, ptr %15, align 8, !tbaa !13
  %103 = load i64, ptr %11, align 8, !tbaa !13
  %104 = add nsw i64 %102, %103
  %105 = getelementptr inbounds float, ptr %101, i64 %104
  %106 = load float, ptr %105, align 4, !tbaa !30
  %107 = fpext float %106 to double
  %108 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, double noundef %100, double noundef %107)
  br label %109

109:                                              ; preds = %95
  %110 = load i64, ptr %11, align 8, !tbaa !13
  %111 = add nsw i64 %110, 1
  store i64 %111, ptr %11, align 8, !tbaa !13
  br label %91, !llvm.loop !31

112:                                              ; preds = %91
  %113 = load ptr, ptr %6, align 8, !tbaa !5
  %114 = getelementptr inbounds float, ptr %113, i64 0
  %115 = load float, ptr %114, align 4, !tbaa !30
  %116 = fpext float %115 to double
  %117 = load ptr, ptr %6, align 8, !tbaa !5
  %118 = getelementptr inbounds float, ptr %117, i64 1
  %119 = load float, ptr %118, align 4, !tbaa !30
  %120 = fpext float %119 to double
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.graphdef, ptr %121, i32 0, i32 0
  %123 = load i64, ptr %122, align 8, !tbaa !9
  %124 = load ptr, ptr %5, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.graphdef, ptr %124, i32 0, i32 20
  %126 = load i64, ptr %125, align 8, !tbaa !33
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  %128 = getelementptr inbounds %struct.graphdef, ptr %127, i32 0, i32 16
  %129 = load i64, ptr %128, align 8, !tbaa !34
  %130 = load i64, ptr %15, align 8, !tbaa !13
  %131 = load ptr, ptr %34, align 8, !tbaa !5
  %132 = load ptr, ptr %6, align 8, !tbaa !5
  %133 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %130, ptr noundef %131, ptr noundef %132)
  %134 = fpext float %133 to double
  %135 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.6, double noundef %116, double noundef %120, i64 noundef %123, i64 noundef %126, i64 noundef %129, double noundef %134)
  br label %136

136:                                              ; preds = %112, %3
  store i64 0, ptr %7, align 8, !tbaa !13
  br label %137

137:                                              ; preds = %152, %136
  %138 = load i64, ptr %7, align 8, !tbaa !13
  %139 = load i64, ptr %15, align 8, !tbaa !13
  %140 = icmp slt i64 %138, %139
  br i1 %140, label %141, label %155

141:                                              ; preds = %137
  %142 = load ptr, ptr %4, align 8, !tbaa !5
  %143 = load i64, ptr %7, align 8, !tbaa !13
  %144 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %143
  %145 = getelementptr inbounds [2 x %struct.PQueueType], ptr %144, i64 0, i64 0
  %146 = load i64, ptr %13, align 8, !tbaa !13
  call void @libmetis__PQueueInit(ptr noundef %142, ptr noundef %145, i64 noundef %146, i64 noundef 501)
  %147 = load ptr, ptr %4, align 8, !tbaa !5
  %148 = load i64, ptr %7, align 8, !tbaa !13
  %149 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %148
  %150 = getelementptr inbounds [2 x %struct.PQueueType], ptr %149, i64 0, i64 1
  %151 = load i64, ptr %13, align 8, !tbaa !13
  call void @libmetis__PQueueInit(ptr noundef %147, ptr noundef %150, i64 noundef %151, i64 noundef 501)
  br label %152

152:                                              ; preds = %141
  %153 = load i64, ptr %7, align 8, !tbaa !13
  %154 = add nsw i64 %153, 1
  store i64 %154, ptr %7, align 8, !tbaa !13
  br label %137, !llvm.loop !35

155:                                              ; preds = %137
  store i64 0, ptr %7, align 8, !tbaa !13
  br label %156

156:                                              ; preds = %171, %155
  %157 = load i64, ptr %7, align 8, !tbaa !13
  %158 = load i64, ptr %13, align 8, !tbaa !13
  %159 = icmp slt i64 %157, %158
  br i1 %159, label %160, label %174

160:                                              ; preds = %156
  %161 = load i64, ptr %15, align 8, !tbaa !13
  %162 = load ptr, ptr %33, align 8, !tbaa !5
  %163 = load i64, ptr %7, align 8, !tbaa !13
  %164 = load i64, ptr %15, align 8, !tbaa !13
  %165 = mul nsw i64 %163, %164
  %166 = getelementptr inbounds float, ptr %162, i64 %165
  %167 = call i64 @gk_fargmax(i64 noundef %161, ptr noundef %166)
  %168 = load ptr, ptr %32, align 8, !tbaa !5
  %169 = load i64, ptr %7, align 8, !tbaa !13
  %170 = getelementptr inbounds i64, ptr %168, i64 %169
  store i64 %167, ptr %170, align 8, !tbaa !13
  br label %171

171:                                              ; preds = %160
  %172 = load i64, ptr %7, align 8, !tbaa !13
  %173 = add nsw i64 %172, 1
  store i64 %173, ptr %7, align 8, !tbaa !13
  br label %156, !llvm.loop !36

174:                                              ; preds = %156
  %175 = load i64, ptr %13, align 8, !tbaa !13
  %176 = load ptr, ptr %31, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %175, ptr noundef %176, i64 noundef 1)
  store i64 0, ptr %8, align 8, !tbaa !13
  br label %177

177:                                              ; preds = %236, %174
  %178 = load i64, ptr %8, align 8, !tbaa !13
  %179 = load i64, ptr %13, align 8, !tbaa !13
  %180 = icmp slt i64 %178, %179
  br i1 %180, label %181, label %239

181:                                              ; preds = %177
  %182 = load ptr, ptr %31, align 8, !tbaa !5
  %183 = load i64, ptr %8, align 8, !tbaa !13
  %184 = getelementptr inbounds i64, ptr %182, i64 %183
  %185 = load i64, ptr %184, align 8, !tbaa !13
  store i64 %185, ptr %7, align 8, !tbaa !13
  %186 = load ptr, ptr %26, 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 = load i64, ptr %17, align 8, !tbaa !13
  %191 = icmp eq i64 %189, %190
  br i1 %191, label %192, label %235

192:                                              ; preds = %181
  %193 = load ptr, ptr %28, align 8, !tbaa !5
  %194 = load i64, ptr %7, align 8, !tbaa !13
  %195 = getelementptr inbounds i64, ptr %193, i64 %194
  %196 = load i64, ptr %195, align 8, !tbaa !13
  %197 = icmp sgt i64 %196, 0
  br i1 %197, label %198, label %216

198:                                              ; preds = %192
  %199 = load ptr, ptr %32, align 8, !tbaa !5
  %200 = load i64, ptr %7, align 8, !tbaa !13
  %201 = getelementptr inbounds i64, ptr %199, i64 %200
  %202 = load i64, ptr %201, align 8, !tbaa !13
  %203 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %202
  %204 = getelementptr inbounds [2 x %struct.PQueueType], ptr %203, i64 0, i64 0
  %205 = load i64, ptr %7, align 8, !tbaa !13
  %206 = load ptr, ptr %28, align 8, !tbaa !5
  %207 = load i64, ptr %7, align 8, !tbaa !13
  %208 = getelementptr inbounds i64, ptr %206, i64 %207
  %209 = load i64, ptr %208, align 8, !tbaa !13
  %210 = load ptr, ptr %27, align 8, !tbaa !5
  %211 = load i64, ptr %7, align 8, !tbaa !13
  %212 = getelementptr inbounds i64, ptr %210, i64 %211
  %213 = load i64, ptr %212, align 8, !tbaa !13
  %214 = sub nsw i64 %209, %213
  %215 = call i64 @libmetis__PQueueInsert(ptr noundef %204, i64 noundef %205, i64 noundef %214)
  br label %234

216:                                              ; preds = %192
  %217 = load ptr, ptr %32, align 8, !tbaa !5
  %218 = load i64, ptr %7, align 8, !tbaa !13
  %219 = getelementptr inbounds i64, ptr %217, i64 %218
  %220 = load i64, ptr %219, align 8, !tbaa !13
  %221 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %220
  %222 = getelementptr inbounds [2 x %struct.PQueueType], ptr %221, i64 0, i64 1
  %223 = load i64, ptr %7, align 8, !tbaa !13
  %224 = load ptr, ptr %28, align 8, !tbaa !5
  %225 = load i64, ptr %7, align 8, !tbaa !13
  %226 = getelementptr inbounds i64, ptr %224, i64 %225
  %227 = load i64, ptr %226, align 8, !tbaa !13
  %228 = load ptr, ptr %27, align 8, !tbaa !5
  %229 = load i64, ptr %7, align 8, !tbaa !13
  %230 = getelementptr inbounds i64, ptr %228, i64 %229
  %231 = load i64, ptr %230, align 8, !tbaa !13
  %232 = sub nsw i64 %227, %231
  %233 = call i64 @libmetis__PQueueInsert(ptr noundef %222, i64 noundef %223, i64 noundef %232)
  br label %234

234:                                              ; preds = %216, %198
  br label %235

235:                                              ; preds = %234, %181
  br label %236

236:                                              ; preds = %235
  %237 = load i64, ptr %8, align 8, !tbaa !13
  %238 = add nsw i64 %237, 1
  store i64 %238, ptr %8, align 8, !tbaa !13
  br label %177, !llvm.loop !37

239:                                              ; preds = %177
  %240 = load ptr, ptr %5, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.graphdef, ptr %240, i32 0, i32 16
  %242 = load i64, ptr %241, align 8, !tbaa !34
  store i64 %242, ptr %38, align 8, !tbaa !13
  %243 = load ptr, ptr %5, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.graphdef, ptr %243, i32 0, i32 20
  %245 = load i64, ptr %244, align 8, !tbaa !33
  store i64 %245, ptr %14, align 8, !tbaa !13
  store i64 0, ptr %16, align 8, !tbaa !13
  br label %246

246:                                              ; preds = %686, %239
  %247 = load i64, ptr %16, align 8, !tbaa !13
  %248 = load i64, ptr %13, align 8, !tbaa !13
  %249 = icmp slt i64 %247, %248
  br i1 %249, label %250, label %689

250:                                              ; preds = %246
  %251 = load i64, ptr %15, align 8, !tbaa !13
  %252 = load ptr, ptr %34, align 8, !tbaa !5
  %253 = load i64, ptr %17, align 8, !tbaa !13
  %254 = load i64, ptr %15, align 8, !tbaa !13
  %255 = mul nsw i64 %253, %254
  %256 = getelementptr inbounds float, ptr %252, i64 %255
  %257 = load ptr, ptr %33, align 8, !tbaa !5
  %258 = load ptr, ptr %6, align 8, !tbaa !5
  %259 = load i64, ptr %17, align 8, !tbaa !13
  %260 = getelementptr inbounds float, ptr %258, i64 %259
  %261 = load float, ptr %260, align 4, !tbaa !30
  %262 = call i64 @libmetis__AreAnyVwgtsBelow(i64 noundef %251, float noundef 1.000000e+00, ptr noundef %256, float noundef 0.000000e+00, ptr noundef %257, float noundef %261)
  %263 = icmp ne i64 %262, 0
  br i1 %263, label %264, label %265

264:                                              ; preds = %250
  br label %689

265:                                              ; preds = %250
  %266 = load i64, ptr %15, align 8, !tbaa !13
  %267 = load ptr, ptr %34, align 8, !tbaa !5
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = load i64, ptr %17, align 8, !tbaa !13
  %270 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 0
  %271 = call i64 @SelectQueueOneWay(i64 noundef %266, ptr noundef %267, ptr noundef %268, i64 noundef %269, ptr noundef %270)
  store i64 %271, ptr %21, align 8, !tbaa !13
  %272 = icmp eq i64 %271, -1
  br i1 %272, label %273, label %274

273:                                              ; preds = %265
  br label %689

274:                                              ; preds = %265
  %275 = load i64, ptr %21, align 8, !tbaa !13
  %276 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %275
  %277 = getelementptr inbounds [2 x %struct.PQueueType], ptr %276, i64 0, i64 0
  %278 = call i64 @libmetis__PQueueGetMax(ptr noundef %277)
  store i64 %278, ptr %36, align 8, !tbaa !13
  %279 = icmp eq i64 %278, -1
  br i1 %279, label %280, label %285

280:                                              ; preds = %274
  %281 = load i64, ptr %21, align 8, !tbaa !13
  %282 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %281
  %283 = getelementptr inbounds [2 x %struct.PQueueType], ptr %282, i64 0, i64 1
  %284 = call i64 @libmetis__PQueueGetMax(ptr noundef %283)
  store i64 %284, ptr %36, align 8, !tbaa !13
  br label %285

285:                                              ; preds = %280, %274
  %286 = load ptr, ptr %28, align 8, !tbaa !5
  %287 = load i64, ptr %36, align 8, !tbaa !13
  %288 = getelementptr inbounds i64, ptr %286, i64 %287
  %289 = load i64, ptr %288, align 8, !tbaa !13
  %290 = load ptr, ptr %27, align 8, !tbaa !5
  %291 = load i64, ptr %36, align 8, !tbaa !13
  %292 = getelementptr inbounds i64, ptr %290, i64 %291
  %293 = load i64, ptr %292, align 8, !tbaa !13
  %294 = sub nsw i64 %289, %293
  %295 = load i64, ptr %38, align 8, !tbaa !13
  %296 = sub nsw i64 %295, %294
  store i64 %296, ptr %38, align 8, !tbaa !13
  %297 = load i64, ptr %15, align 8, !tbaa !13
  %298 = load ptr, ptr %33, align 8, !tbaa !5
  %299 = load i64, ptr %36, align 8, !tbaa !13
  %300 = load i64, ptr %15, align 8, !tbaa !13
  %301 = mul nsw i64 %299, %300
  %302 = getelementptr inbounds float, ptr %298, i64 %301
  %303 = load ptr, ptr %34, align 8, !tbaa !5
  %304 = load i64, ptr %18, align 8, !tbaa !13
  %305 = load i64, ptr %15, align 8, !tbaa !13
  %306 = mul nsw i64 %304, %305
  %307 = getelementptr inbounds float, ptr %303, i64 %306
  %308 = call ptr @gk_faxpy(i64 noundef %297, float noundef 1.000000e+00, ptr noundef %302, i64 noundef 1, ptr noundef %307, i64 noundef 1)
  %309 = load i64, ptr %15, align 8, !tbaa !13
  %310 = load ptr, ptr %33, align 8, !tbaa !5
  %311 = load i64, ptr %36, align 8, !tbaa !13
  %312 = load i64, ptr %15, align 8, !tbaa !13
  %313 = mul nsw i64 %311, %312
  %314 = getelementptr inbounds float, ptr %310, i64 %313
  %315 = load ptr, ptr %34, align 8, !tbaa !5
  %316 = load i64, ptr %17, align 8, !tbaa !13
  %317 = load i64, ptr %15, align 8, !tbaa !13
  %318 = mul nsw i64 %316, %317
  %319 = getelementptr inbounds float, ptr %315, i64 %318
  %320 = call ptr @gk_faxpy(i64 noundef %309, float noundef -1.000000e+00, ptr noundef %314, i64 noundef 1, ptr noundef %319, i64 noundef 1)
  %321 = load i64, ptr %18, align 8, !tbaa !13
  %322 = load ptr, ptr %26, align 8, !tbaa !5
  %323 = load i64, ptr %36, align 8, !tbaa !13
  %324 = getelementptr inbounds i64, ptr %322, i64 %323
  store i64 %321, ptr %324, align 8, !tbaa !13
  %325 = load ptr, ptr %4, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.controldef, ptr %325, i32 0, i32 1
  %327 = load i64, ptr %326, align 8, !tbaa !25
  %328 = and i64 %327, 32
  %329 = icmp ne i64 %328, 0
  br i1 %329, label %330, label %387

330:                                              ; preds = %285
  %331 = load i64, ptr %36, align 8, !tbaa !13
  %332 = load i64, ptr %17, align 8, !tbaa !13
  %333 = load i64, ptr %21, align 8, !tbaa !13
  %334 = load ptr, ptr %28, align 8, !tbaa !5
  %335 = load i64, ptr %36, align 8, !tbaa !13
  %336 = getelementptr inbounds i64, ptr %334, i64 %335
  %337 = load i64, ptr %336, align 8, !tbaa !13
  %338 = load ptr, ptr %27, align 8, !tbaa !5
  %339 = load i64, ptr %36, align 8, !tbaa !13
  %340 = getelementptr inbounds i64, ptr %338, i64 %339
  %341 = load i64, ptr %340, align 8, !tbaa !13
  %342 = sub nsw i64 %337, %341
  %343 = load i64, ptr %38, align 8, !tbaa !13
  %344 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.7, i64 noundef %331, i64 noundef %332, i64 noundef %333, i64 noundef %342, i64 noundef %343)
  store i64 0, ptr %11, align 8, !tbaa !13
  br label %345

345:                                              ; preds = %363, %330
  %346 = load i64, ptr %11, align 8, !tbaa !13
  %347 = load i64, ptr %15, align 8, !tbaa !13
  %348 = icmp slt i64 %346, %347
  br i1 %348, label %349, label %366

349:                                              ; preds = %345
  %350 = load ptr, ptr %34, align 8, !tbaa !5
  %351 = load i64, ptr %11, align 8, !tbaa !13
  %352 = getelementptr inbounds float, ptr %350, i64 %351
  %353 = load float, ptr %352, align 4, !tbaa !30
  %354 = fpext float %353 to double
  %355 = load ptr, ptr %34, align 8, !tbaa !5
  %356 = load i64, ptr %15, align 8, !tbaa !13
  %357 = load i64, ptr %11, align 8, !tbaa !13
  %358 = add nsw i64 %356, %357
  %359 = getelementptr inbounds float, ptr %355, i64 %358
  %360 = load float, ptr %359, align 4, !tbaa !30
  %361 = fpext float %360 to double
  %362 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, double noundef %354, double noundef %361)
  br label %363

363:                                              ; preds = %349
  %364 = load i64, ptr %11, align 8, !tbaa !13
  %365 = add nsw i64 %364, 1
  store i64 %365, ptr %11, align 8, !tbaa !13
  br label %345, !llvm.loop !38

366:                                              ; preds = %345
  %367 = load i64, ptr %15, align 8, !tbaa !13
  %368 = load ptr, ptr %34, align 8, !tbaa !5
  %369 = load ptr, ptr %6, align 8, !tbaa !5
  %370 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %367, ptr noundef %368, ptr noundef %369)
  %371 = fpext float %370 to double
  %372 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.8, double noundef %371)
  %373 = load ptr, ptr %28, align 8, !tbaa !5
  %374 = load i64, ptr %36, align 8, !tbaa !13
  %375 = getelementptr inbounds i64, ptr %373, i64 %374
  %376 = load i64, ptr %375, align 8, !tbaa !13
  %377 = icmp eq i64 %376, 0
  br i1 %377, label %378, label %386

378:                                              ; preds = %366
  %379 = load ptr, ptr %27, align 8, !tbaa !5
  %380 = load i64, ptr %36, align 8, !tbaa !13
  %381 = getelementptr inbounds i64, ptr %379, i64 %380
  %382 = load i64, ptr %381, align 8, !tbaa !13
  %383 = icmp sgt i64 %382, 0
  br i1 %383, label %384, label %386

384:                                              ; preds = %378
  %385 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.9)
  br label %386

386:                                              ; preds = %384, %378, %366
  br label %387

387:                                              ; preds = %386, %285
  br label %388

388:                                              ; preds = %387
  %389 = load ptr, ptr %27, align 8, !tbaa !5
  %390 = load i64, ptr %36, align 8, !tbaa !13
  %391 = getelementptr inbounds i64, ptr %389, i64 %390
  %392 = load i64, ptr %391, align 8, !tbaa !13
  store i64 %392, ptr %22, align 8, !tbaa !13
  %393 = load ptr, ptr %28, align 8, !tbaa !5
  %394 = load i64, ptr %36, align 8, !tbaa !13
  %395 = getelementptr inbounds i64, ptr %393, i64 %394
  %396 = load i64, ptr %395, align 8, !tbaa !13
  %397 = load ptr, ptr %27, align 8, !tbaa !5
  %398 = load i64, ptr %36, align 8, !tbaa !13
  %399 = getelementptr inbounds i64, ptr %397, i64 %398
  store i64 %396, ptr %399, align 8, !tbaa !13
  %400 = load i64, ptr %22, align 8, !tbaa !13
  %401 = load ptr, ptr %28, align 8, !tbaa !5
  %402 = load i64, ptr %36, align 8, !tbaa !13
  %403 = getelementptr inbounds i64, ptr %401, i64 %402
  store i64 %400, ptr %403, align 8, !tbaa !13
  br label %404

404:                                              ; preds = %388
  br label %405

405:                                              ; preds = %404
  %406 = load ptr, ptr %28, align 8, !tbaa !5
  %407 = load i64, ptr %36, align 8, !tbaa !13
  %408 = getelementptr inbounds i64, ptr %406, i64 %407
  %409 = load i64, ptr %408, align 8, !tbaa !13
  %410 = icmp eq i64 %409, 0
  br i1 %410, label %411, label %456

411:                                              ; preds = %405
  %412 = load ptr, ptr %29, align 8, !tbaa !5
  %413 = load i64, ptr %36, align 8, !tbaa !13
  %414 = getelementptr inbounds i64, ptr %412, i64 %413
  %415 = load i64, ptr %414, align 8, !tbaa !13
  %416 = icmp ne i64 %415, -1
  br i1 %416, label %417, label %456

417:                                              ; preds = %411
  %418 = load ptr, ptr %23, align 8, !tbaa !5
  %419 = load i64, ptr %36, align 8, !tbaa !13
  %420 = getelementptr inbounds i64, ptr %418, i64 %419
  %421 = load i64, ptr %420, align 8, !tbaa !13
  %422 = load ptr, ptr %23, align 8, !tbaa !5
  %423 = load i64, ptr %36, align 8, !tbaa !13
  %424 = add nsw i64 %423, 1
  %425 = getelementptr inbounds i64, ptr %422, i64 %424
  %426 = load i64, ptr %425, align 8, !tbaa !13
  %427 = icmp slt i64 %421, %426
  br i1 %427, label %428, label %456

428:                                              ; preds = %417
  br label %429

429:                                              ; preds = %428
  %430 = load ptr, ptr %30, align 8, !tbaa !5
  %431 = load i64, ptr %14, align 8, !tbaa !13
  %432 = add nsw i64 %431, -1
  store i64 %432, ptr %14, align 8, !tbaa !13
  %433 = getelementptr inbounds i64, ptr %430, i64 %432
  %434 = load i64, ptr %433, align 8, !tbaa !13
  %435 = load ptr, ptr %30, align 8, !tbaa !5
  %436 = load ptr, ptr %29, align 8, !tbaa !5
  %437 = load i64, ptr %36, align 8, !tbaa !13
  %438 = getelementptr inbounds i64, ptr %436, i64 %437
  %439 = load i64, ptr %438, align 8, !tbaa !13
  %440 = getelementptr inbounds i64, ptr %435, i64 %439
  store i64 %434, ptr %440, align 8, !tbaa !13
  %441 = load ptr, ptr %29, align 8, !tbaa !5
  %442 = load i64, ptr %36, align 8, !tbaa !13
  %443 = getelementptr inbounds i64, ptr %441, i64 %442
  %444 = load i64, ptr %443, align 8, !tbaa !13
  %445 = load ptr, ptr %29, align 8, !tbaa !5
  %446 = load ptr, ptr %30, align 8, !tbaa !5
  %447 = load i64, ptr %14, align 8, !tbaa !13
  %448 = getelementptr inbounds i64, ptr %446, i64 %447
  %449 = load i64, ptr %448, align 8, !tbaa !13
  %450 = getelementptr inbounds i64, ptr %445, i64 %449
  store i64 %444, ptr %450, align 8, !tbaa !13
  %451 = load ptr, ptr %29, align 8, !tbaa !5
  %452 = load i64, ptr %36, align 8, !tbaa !13
  %453 = getelementptr inbounds i64, ptr %451, i64 %452
  store i64 -1, ptr %453, align 8, !tbaa !13
  br label %454

454:                                              ; preds = %429
  br label %455

455:                                              ; preds = %454
  br label %456

456:                                              ; preds = %455, %417, %411, %405
  %457 = load ptr, ptr %28, align 8, !tbaa !5
  %458 = load i64, ptr %36, align 8, !tbaa !13
  %459 = getelementptr inbounds i64, ptr %457, i64 %458
  %460 = load i64, ptr %459, align 8, !tbaa !13
  %461 = icmp sgt i64 %460, 0
  br i1 %461, label %462, label %481

462:                                              ; preds = %456
  %463 = load ptr, ptr %29, align 8, !tbaa !5
  %464 = load i64, ptr %36, align 8, !tbaa !13
  %465 = getelementptr inbounds i64, ptr %463, i64 %464
  %466 = load i64, ptr %465, align 8, !tbaa !13
  %467 = icmp eq i64 %466, -1
  br i1 %467, label %468, label %481

468:                                              ; preds = %462
  br label %469

469:                                              ; preds = %468
  %470 = load i64, ptr %36, align 8, !tbaa !13
  %471 = load ptr, ptr %30, align 8, !tbaa !5
  %472 = load i64, ptr %14, align 8, !tbaa !13
  %473 = getelementptr inbounds i64, ptr %471, i64 %472
  store i64 %470, ptr %473, align 8, !tbaa !13
  %474 = load i64, ptr %14, align 8, !tbaa !13
  %475 = add nsw i64 %474, 1
  store i64 %475, ptr %14, align 8, !tbaa !13
  %476 = load ptr, ptr %29, align 8, !tbaa !5
  %477 = load i64, ptr %36, align 8, !tbaa !13
  %478 = getelementptr inbounds i64, ptr %476, i64 %477
  store i64 %474, ptr %478, align 8, !tbaa !13
  br label %479

479:                                              ; preds = %469
  br label %480

480:                                              ; preds = %479
  br label %481

481:                                              ; preds = %480, %462, %456
  %482 = load ptr, ptr %23, align 8, !tbaa !5
  %483 = load i64, ptr %36, align 8, !tbaa !13
  %484 = getelementptr inbounds i64, ptr %482, i64 %483
  %485 = load i64, ptr %484, align 8, !tbaa !13
  store i64 %485, ptr %9, align 8, !tbaa !13
  br label %486

486:                                              ; preds = %682, %481
  %487 = load i64, ptr %9, align 8, !tbaa !13
  %488 = load ptr, ptr %23, align 8, !tbaa !5
  %489 = load i64, ptr %36, align 8, !tbaa !13
  %490 = add nsw i64 %489, 1
  %491 = getelementptr inbounds i64, ptr %488, i64 %490
  %492 = load i64, ptr %491, align 8, !tbaa !13
  %493 = icmp slt i64 %487, %492
  br i1 %493, label %494, label %685

494:                                              ; preds = %486
  %495 = load ptr, ptr %24, align 8, !tbaa !5
  %496 = load i64, ptr %9, align 8, !tbaa !13
  %497 = getelementptr inbounds i64, ptr %495, i64 %496
  %498 = load i64, ptr %497, align 8, !tbaa !13
  store i64 %498, ptr %10, align 8, !tbaa !13
  %499 = load ptr, ptr %28, align 8, !tbaa !5
  %500 = load i64, ptr %10, align 8, !tbaa !13
  %501 = getelementptr inbounds i64, ptr %499, i64 %500
  %502 = load i64, ptr %501, align 8, !tbaa !13
  %503 = load ptr, ptr %27, align 8, !tbaa !5
  %504 = load i64, ptr %10, align 8, !tbaa !13
  %505 = getelementptr inbounds i64, ptr %503, i64 %504
  %506 = load i64, ptr %505, align 8, !tbaa !13
  %507 = sub nsw i64 %502, %506
  store i64 %507, ptr %37, align 8, !tbaa !13
  %508 = load i64, ptr %18, align 8, !tbaa !13
  %509 = load ptr, ptr %26, align 8, !tbaa !5
  %510 = load i64, ptr %10, align 8, !tbaa !13
  %511 = getelementptr inbounds i64, ptr %509, i64 %510
  %512 = load i64, ptr %511, align 8, !tbaa !13
  %513 = icmp eq i64 %508, %512
  br i1 %513, label %514, label %519

514:                                              ; preds = %494
  %515 = load ptr, ptr %25, align 8, !tbaa !5
  %516 = load i64, ptr %9, align 8, !tbaa !13
  %517 = getelementptr inbounds i64, ptr %515, i64 %516
  %518 = load i64, ptr %517, align 8, !tbaa !13
  br label %525

519:                                              ; preds = %494
  %520 = load ptr, ptr %25, align 8, !tbaa !5
  %521 = load i64, ptr %9, align 8, !tbaa !13
  %522 = getelementptr inbounds i64, ptr %520, i64 %521
  %523 = load i64, ptr %522, align 8, !tbaa !13
  %524 = sub nsw i64 0, %523
  br label %525

525:                                              ; preds = %519, %514
  %526 = phi i64 [ %518, %514 ], [ %524, %519 ]
  store i64 %526, ptr %12, align 8, !tbaa !13
  br label %527

527:                                              ; preds = %525
  %528 = load i64, ptr %12, align 8, !tbaa !13
  %529 = load ptr, ptr %27, align 8, !tbaa !5
  %530 = load i64, ptr %10, align 8, !tbaa !13
  %531 = getelementptr inbounds i64, ptr %529, i64 %530
  %532 = load i64, ptr %531, align 8, !tbaa !13
  %533 = add nsw i64 %532, %528
  store i64 %533, ptr %531, align 8, !tbaa !13
  %534 = load i64, ptr %12, align 8, !tbaa !13
  %535 = load ptr, ptr %28, align 8, !tbaa !5
  %536 = load i64, ptr %10, align 8, !tbaa !13
  %537 = getelementptr inbounds i64, ptr %535, i64 %536
  %538 = load i64, ptr %537, align 8, !tbaa !13
  %539 = sub nsw i64 %538, %534
  store i64 %539, ptr %537, align 8, !tbaa !13
  br label %540

540:                                              ; preds = %527
  br label %541

541:                                              ; preds = %540
  %542 = load ptr, ptr %26, align 8, !tbaa !5
  %543 = load i64, ptr %10, align 8, !tbaa !13
  %544 = getelementptr inbounds i64, ptr %542, i64 %543
  %545 = load i64, ptr %544, align 8, !tbaa !13
  %546 = load i64, ptr %17, align 8, !tbaa !13
  %547 = icmp eq i64 %545, %546
  br i1 %547, label %548, label %615

548:                                              ; preds = %541
  %549 = load ptr, ptr %28, align 8, !tbaa !5
  %550 = load i64, ptr %10, align 8, !tbaa !13
  %551 = getelementptr inbounds i64, ptr %549, i64 %550
  %552 = load i64, ptr %551, align 8, !tbaa !13
  %553 = icmp sgt i64 %552, 0
  br i1 %553, label %554, label %587

554:                                              ; preds = %548
  %555 = load ptr, ptr %29, align 8, !tbaa !5
  %556 = load i64, ptr %10, align 8, !tbaa !13
  %557 = getelementptr inbounds i64, ptr %555, i64 %556
  %558 = load i64, ptr %557, align 8, !tbaa !13
  %559 = icmp eq i64 %558, -1
  br i1 %559, label %560, label %587

560:                                              ; preds = %554
  %561 = load ptr, ptr %32, align 8, !tbaa !5
  %562 = load i64, ptr %10, align 8, !tbaa !13
  %563 = getelementptr inbounds i64, ptr %561, i64 %562
  %564 = load i64, ptr %563, align 8, !tbaa !13
  %565 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %564
  %566 = getelementptr inbounds [2 x %struct.PQueueType], ptr %565, i64 0, i64 1
  %567 = load i64, ptr %10, align 8, !tbaa !13
  %568 = load i64, ptr %37, align 8, !tbaa !13
  %569 = call i64 @libmetis__PQueueDelete(ptr noundef %566, i64 noundef %567, i64 noundef %568)
  %570 = load ptr, ptr %32, align 8, !tbaa !5
  %571 = load i64, ptr %10, align 8, !tbaa !13
  %572 = getelementptr inbounds i64, ptr %570, i64 %571
  %573 = load i64, ptr %572, align 8, !tbaa !13
  %574 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %573
  %575 = getelementptr inbounds [2 x %struct.PQueueType], ptr %574, i64 0, i64 0
  %576 = load i64, ptr %10, align 8, !tbaa !13
  %577 = load ptr, ptr %28, align 8, !tbaa !5
  %578 = load i64, ptr %10, align 8, !tbaa !13
  %579 = getelementptr inbounds i64, ptr %577, i64 %578
  %580 = load i64, ptr %579, align 8, !tbaa !13
  %581 = load ptr, ptr %27, align 8, !tbaa !5
  %582 = load i64, ptr %10, align 8, !tbaa !13
  %583 = getelementptr inbounds i64, ptr %581, i64 %582
  %584 = load i64, ptr %583, align 8, !tbaa !13
  %585 = sub nsw i64 %580, %584
  %586 = call i64 @libmetis__PQueueInsert(ptr noundef %575, i64 noundef %576, i64 noundef %585)
  br label %614

587:                                              ; preds = %554, %548
  %588 = load ptr, ptr %29, align 8, !tbaa !5
  %589 = load i64, ptr %10, align 8, !tbaa !13
  %590 = getelementptr inbounds i64, ptr %588, i64 %589
  %591 = load i64, ptr %590, align 8, !tbaa !13
  %592 = icmp eq i64 %591, -1
  br i1 %592, label %593, label %595

593:                                              ; preds = %587
  %594 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.10)
  br label %595

595:                                              ; preds = %593, %587
  %596 = load ptr, ptr %32, align 8, !tbaa !5
  %597 = load i64, ptr %10, align 8, !tbaa !13
  %598 = getelementptr inbounds i64, ptr %596, i64 %597
  %599 = load i64, ptr %598, align 8, !tbaa !13
  %600 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %599
  %601 = getelementptr inbounds [2 x %struct.PQueueType], ptr %600, i64 0, i64 0
  %602 = load i64, ptr %10, align 8, !tbaa !13
  %603 = load i64, ptr %37, align 8, !tbaa !13
  %604 = load ptr, ptr %28, align 8, !tbaa !5
  %605 = load i64, ptr %10, align 8, !tbaa !13
  %606 = getelementptr inbounds i64, ptr %604, i64 %605
  %607 = load i64, ptr %606, align 8, !tbaa !13
  %608 = load ptr, ptr %27, align 8, !tbaa !5
  %609 = load i64, ptr %10, align 8, !tbaa !13
  %610 = getelementptr inbounds i64, ptr %608, i64 %609
  %611 = load i64, ptr %610, align 8, !tbaa !13
  %612 = sub nsw i64 %607, %611
  %613 = call i64 @libmetis__PQueueUpdate(ptr noundef %601, i64 noundef %602, i64 noundef %603, i64 noundef %612)
  br label %614

614:                                              ; preds = %595, %560
  br label %615

615:                                              ; preds = %614, %541
  %616 = load ptr, ptr %28, align 8, !tbaa !5
  %617 = load i64, ptr %10, align 8, !tbaa !13
  %618 = getelementptr inbounds i64, ptr %616, i64 %617
  %619 = load i64, ptr %618, align 8, !tbaa !13
  %620 = icmp eq i64 %619, 0
  br i1 %620, label %621, label %655

621:                                              ; preds = %615
  %622 = load ptr, ptr %29, align 8, !tbaa !5
  %623 = load i64, ptr %10, align 8, !tbaa !13
  %624 = getelementptr inbounds i64, ptr %622, i64 %623
  %625 = load i64, ptr %624, align 8, !tbaa !13
  %626 = icmp ne i64 %625, -1
  br i1 %626, label %627, label %655

627:                                              ; preds = %621
  br label %628

628:                                              ; preds = %627
  %629 = load ptr, ptr %30, align 8, !tbaa !5
  %630 = load i64, ptr %14, align 8, !tbaa !13
  %631 = add nsw i64 %630, -1
  store i64 %631, ptr %14, align 8, !tbaa !13
  %632 = getelementptr inbounds i64, ptr %629, i64 %631
  %633 = load i64, ptr %632, align 8, !tbaa !13
  %634 = load ptr, ptr %30, align 8, !tbaa !5
  %635 = load ptr, ptr %29, align 8, !tbaa !5
  %636 = load i64, ptr %10, align 8, !tbaa !13
  %637 = getelementptr inbounds i64, ptr %635, i64 %636
  %638 = load i64, ptr %637, align 8, !tbaa !13
  %639 = getelementptr inbounds i64, ptr %634, i64 %638
  store i64 %633, ptr %639, align 8, !tbaa !13
  %640 = load ptr, ptr %29, align 8, !tbaa !5
  %641 = load i64, ptr %10, align 8, !tbaa !13
  %642 = getelementptr inbounds i64, ptr %640, i64 %641
  %643 = load i64, ptr %642, align 8, !tbaa !13
  %644 = load ptr, ptr %29, align 8, !tbaa !5
  %645 = load ptr, ptr %30, align 8, !tbaa !5
  %646 = load i64, ptr %14, align 8, !tbaa !13
  %647 = getelementptr inbounds i64, ptr %645, i64 %646
  %648 = load i64, ptr %647, align 8, !tbaa !13
  %649 = getelementptr inbounds i64, ptr %644, i64 %648
  store i64 %643, ptr %649, align 8, !tbaa !13
  %650 = load ptr, ptr %29, align 8, !tbaa !5
  %651 = load i64, ptr %10, align 8, !tbaa !13
  %652 = getelementptr inbounds i64, ptr %650, i64 %651
  store i64 -1, ptr %652, align 8, !tbaa !13
  br label %653

653:                                              ; preds = %628
  br label %654

654:                                              ; preds = %653
  br label %681

655:                                              ; preds = %621, %615
  %656 = load ptr, ptr %28, align 8, !tbaa !5
  %657 = load i64, ptr %10, align 8, !tbaa !13
  %658 = getelementptr inbounds i64, ptr %656, i64 %657
  %659 = load i64, ptr %658, align 8, !tbaa !13
  %660 = icmp sgt i64 %659, 0
  br i1 %660, label %661, label %680

661:                                              ; preds = %655
  %662 = load ptr, ptr %29, align 8, !tbaa !5
  %663 = load i64, ptr %10, align 8, !tbaa !13
  %664 = getelementptr inbounds i64, ptr %662, i64 %663
  %665 = load i64, ptr %664, align 8, !tbaa !13
  %666 = icmp eq i64 %665, -1
  br i1 %666, label %667, label %680

667:                                              ; preds = %661
  br label %668

668:                                              ; preds = %667
  %669 = load i64, ptr %10, align 8, !tbaa !13
  %670 = load ptr, ptr %30, align 8, !tbaa !5
  %671 = load i64, ptr %14, align 8, !tbaa !13
  %672 = getelementptr inbounds i64, ptr %670, i64 %671
  store i64 %669, ptr %672, align 8, !tbaa !13
  %673 = load i64, ptr %14, align 8, !tbaa !13
  %674 = add nsw i64 %673, 1
  store i64 %674, ptr %14, align 8, !tbaa !13
  %675 = load ptr, ptr %29, align 8, !tbaa !5
  %676 = load i64, ptr %10, align 8, !tbaa !13
  %677 = getelementptr inbounds i64, ptr %675, i64 %676
  store i64 %673, ptr %677, align 8, !tbaa !13
  br label %678

678:                                              ; preds = %668
  br label %679

679:                                              ; preds = %678
  br label %680

680:                                              ; preds = %679, %661, %655
  br label %681

681:                                              ; preds = %680, %654
  br label %682

682:                                              ; preds = %681
  %683 = load i64, ptr %9, align 8, !tbaa !13
  %684 = add nsw i64 %683, 1
  store i64 %684, ptr %9, align 8, !tbaa !13
  br label %486, !llvm.loop !39

685:                                              ; preds = %486
  br label %686

686:                                              ; preds = %685
  %687 = load i64, ptr %16, align 8, !tbaa !13
  %688 = add nsw i64 %687, 1
  store i64 %688, ptr %16, align 8, !tbaa !13
  br label %246, !llvm.loop !40

689:                                              ; preds = %273, %264, %246
  %690 = load ptr, ptr %4, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.controldef, ptr %690, i32 0, i32 1
  %692 = load i64, ptr %691, align 8, !tbaa !25
  %693 = and i64 %692, 8
  %694 = icmp ne i64 %693, 0
  br i1 %694, label %695, label %727

695:                                              ; preds = %689
  %696 = load i64, ptr %38, align 8, !tbaa !13
  %697 = load i64, ptr %14, align 8, !tbaa !13
  %698 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.11, i64 noundef %696, i64 noundef %697)
  store i64 0, ptr %11, align 8, !tbaa !13
  br label %699

699:                                              ; preds = %717, %695
  %700 = load i64, ptr %11, align 8, !tbaa !13
  %701 = load i64, ptr %15, align 8, !tbaa !13
  %702 = icmp slt i64 %700, %701
  br i1 %702, label %703, label %720

703:                                              ; preds = %699
  %704 = load ptr, ptr %34, align 8, !tbaa !5
  %705 = load i64, ptr %11, align 8, !tbaa !13
  %706 = getelementptr inbounds float, ptr %704, i64 %705
  %707 = load float, ptr %706, align 4, !tbaa !30
  %708 = fpext float %707 to double
  %709 = load ptr, ptr %34, align 8, !tbaa !5
  %710 = load i64, ptr %15, align 8, !tbaa !13
  %711 = load i64, ptr %11, align 8, !tbaa !13
  %712 = add nsw i64 %710, %711
  %713 = getelementptr inbounds float, ptr %709, i64 %712
  %714 = load float, ptr %713, align 4, !tbaa !30
  %715 = fpext float %714 to double
  %716 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, double noundef %708, double noundef %715)
  br label %717

717:                                              ; preds = %703
  %718 = load i64, ptr %11, align 8, !tbaa !13
  %719 = add nsw i64 %718, 1
  store i64 %719, ptr %11, align 8, !tbaa !13
  br label %699, !llvm.loop !41

720:                                              ; preds = %699
  %721 = load i64, ptr %15, align 8, !tbaa !13
  %722 = load ptr, ptr %34, align 8, !tbaa !5
  %723 = load ptr, ptr %6, align 8, !tbaa !5
  %724 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %721, ptr noundef %722, ptr noundef %723)
  %725 = fpext float %724 to double
  %726 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.8, double noundef %725)
  br label %727

727:                                              ; preds = %720, %689
  %728 = load i64, ptr %38, align 8, !tbaa !13
  %729 = load ptr, ptr %5, align 8, !tbaa !5
  %730 = getelementptr inbounds %struct.graphdef, ptr %729, i32 0, i32 16
  store i64 %728, ptr %730, align 8, !tbaa !34
  %731 = load i64, ptr %14, align 8, !tbaa !13
  %732 = load ptr, ptr %5, align 8, !tbaa !5
  %733 = getelementptr inbounds %struct.graphdef, ptr %732, i32 0, i32 20
  store i64 %731, ptr %733, align 8, !tbaa !33
  store i64 0, ptr %7, align 8, !tbaa !13
  br label %734

734:                                              ; preds = %747, %727
  %735 = load i64, ptr %7, align 8, !tbaa !13
  %736 = load i64, ptr %15, align 8, !tbaa !13
  %737 = icmp slt i64 %735, %736
  br i1 %737, label %738, label %750

738:                                              ; preds = %734
  %739 = load ptr, ptr %4, align 8, !tbaa !5
  %740 = load i64, ptr %7, align 8, !tbaa !13
  %741 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %740
  %742 = getelementptr inbounds [2 x %struct.PQueueType], ptr %741, i64 0, i64 0
  call void @libmetis__PQueueFree(ptr noundef %739, ptr noundef %742)
  %743 = load ptr, ptr %4, align 8, !tbaa !5
  %744 = load i64, ptr %7, align 8, !tbaa !13
  %745 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %35, i64 0, i64 %744
  %746 = getelementptr inbounds [2 x %struct.PQueueType], ptr %745, i64 0, i64 1
  call void @libmetis__PQueueFree(ptr noundef %743, ptr noundef %746)
  br label %747

747:                                              ; preds = %738
  %748 = load i64, ptr %7, align 8, !tbaa !13
  %749 = add nsw i64 %748, 1
  store i64 %749, ptr %7, align 8, !tbaa !13
  br label %734, !llvm.loop !42

750:                                              ; preds = %734
  %751 = load ptr, ptr %4, align 8, !tbaa !5
  %752 = load i64, ptr %13, align 8, !tbaa !13
  call void @libmetis__idxwspacefree(ptr noundef %751, i64 noundef %752)
  %753 = load ptr, ptr %4, align 8, !tbaa !5
  %754 = load i64, ptr %13, align 8, !tbaa !13
  call void @libmetis__idxwspacefree(ptr noundef %753, i64 noundef %754)
  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 2816, 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 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
}

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

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

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

declare float @libmetis__Compute2WayHLoadImbalance(i64 noundef, ptr noundef, ptr noundef) #1

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

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

declare i64 @libmetis__AreAnyVwgtsBelow(i64 noundef, float noundef, ptr noundef, float noundef, ptr noundef, float noundef) #1

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) #1

declare ptr @gk_faxpy(i64 noundef, float noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #1

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind }

!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, !11, i64 208}
!15 = !{!10, !6, i64 16}
!16 = !{!10, !6, i64 40}
!17 = !{!10, !6, i64 216}
!18 = !{!10, !6, i64 48}
!19 = !{!10, !6, i64 128}
!20 = !{!10, !6, i64 168}
!21 = !{!10, !6, i64 176}
!22 = !{!10, !6, i64 224}
!23 = !{!10, !6, i64 152}
!24 = !{!10, !6, i64 160}
!25 = !{!26, !11, i64 8}
!26 = !{!"controldef", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !27, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !28, i64 88, !29, i64 152, !29, i64 160, !29, i64 168, !29, i64 176, !29, i64 184, !29, i64 192, !29, i64 200, !29, i64 208, !29, i64 216, !29, i64 224, !29, i64 232, !29, i64 240, !29, i64 248, !29, i64 256, !29, i64 264, !29, i64 272}
!27 = !{!"float", !7, i64 0}
!28 = !{!"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}
!29 = !{!"double", !7, i64 0}
!30 = !{!27, !27, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = !{!10, !11, i64 144}
!34 = !{!10, !11, i64 112}
!35 = distinct !{!35, !32}
!36 = distinct !{!36, !32}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}
!39 = distinct !{!39, !32}
!40 = distinct !{!40, !32}
!41 = distinct !{!41, !32}
!42 = distinct !{!42, !32}


; 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.4 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [43 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [34 x i8], align 1

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__MocInit2WayBalance(ptr noundef %0, ptr nocapture noundef %1, ptr noundef %2) local_unnamed_addr #2 {
  %4 = alloca [16 x [2 x %struct.PQueueType]], align 16
  call void @llvm.lifetime.start.p0(i64 2816, ptr nonnull %4) #3
  %5 = load i64, ptr %1, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 208
  %7 = load i64, ptr %6, align 8, !tbaa !12
  %8 = getelementptr inbounds i8, ptr %1, i64 16
  %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 216
  %13 = load ptr, ptr %12, align 8, !tbaa !15
  %14 = getelementptr inbounds i8, ptr %1, i64 48
  %15 = load ptr, ptr %14, align 8, !tbaa !16
  %16 = getelementptr inbounds i8, ptr %1, i64 128
  %17 = load ptr, ptr %16, align 8, !tbaa !17
  %18 = getelementptr inbounds i8, ptr %1, i64 168
  %19 = load ptr, ptr %18, align 8, !tbaa !18
  %20 = getelementptr inbounds i8, ptr %1, i64 176
  %21 = load ptr, ptr %20, align 8, !tbaa !19
  %22 = getelementptr inbounds i8, ptr %1, i64 224
  %23 = load ptr, ptr %22, align 8, !tbaa !20
  %24 = getelementptr inbounds i8, ptr %1, i64 152
  %25 = load ptr, ptr %24, align 8, !tbaa !21
  %26 = getelementptr inbounds i8, ptr %1, i64 160
  %27 = load ptr, ptr %26, align 8, !tbaa !22
  %28 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %5) #3
  %29 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %5) #3
  %30 = getelementptr inbounds i8, ptr %0, i64 8
  %31 = load i64, ptr %30, align 8, !tbaa !23
  %32 = and i64 %31, 8
  %.not = icmp eq i64 %32, 0
  br i1 %.not, label %59, label %33

33:                                               ; preds = %3
  %34 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4) #3
  %35 = icmp sgt i64 %7, 0
  br i1 %35, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %33
  %36 = getelementptr float, ptr %23, i64 %7
  br label %37

37:                                               ; preds = %.lr.ph, %37
  %.0292318 = phi i64 [ 0, %.lr.ph ], [ %45, %37 ]
  %38 = getelementptr inbounds float, ptr %23, i64 %.0292318
  %39 = load float, ptr %38, align 4, !tbaa !28
  %40 = fpext float %39 to double
  %41 = getelementptr float, ptr %36, i64 %.0292318
  %42 = load float, ptr %41, align 4, !tbaa !28
  %43 = fpext float %42 to double
  %44 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, double noundef %40, double noundef %43) #3
  %45 = add nuw nsw i64 %.0292318, 1
  %exitcond.not = icmp eq i64 %45, %7
  br i1 %exitcond.not, label %._crit_edge, label %37, !llvm.loop !29

._crit_edge:                                      ; preds = %37, %33
  %46 = load float, ptr %2, align 4, !tbaa !28
  %47 = fpext float %46 to double
  %48 = getelementptr inbounds i8, ptr %2, i64 4
  %49 = load float, ptr %48, align 4, !tbaa !28
  %50 = fpext float %49 to double
  %51 = load i64, ptr %1, align 8, !tbaa !5
  %52 = getelementptr inbounds i8, ptr %1, i64 144
  %53 = load i64, ptr %52, align 8, !tbaa !31
  %54 = getelementptr inbounds i8, ptr %1, i64 112
  %55 = load i64, ptr %54, align 8, !tbaa !32
  %56 = tail call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %7, ptr noundef %23, ptr noundef nonnull %2) #3
  %57 = fpext float %56 to double
  %58 = tail call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.6, double noundef %47, double noundef %50, i64 noundef %51, i64 noundef %53, i64 noundef %55, double noundef %57) #3
  br label %59

59:                                               ; preds = %._crit_edge, %3
  %60 = icmp sgt i64 %7, 0
  br i1 %60, label %.lr.ph321, label %.preheader

.preheader:                                       ; preds = %.lr.ph321, %59
  %61 = icmp sgt i64 %5, 0
  br i1 %61, label %.lr.ph323, label %._crit_edge324.thread

._crit_edge324.thread:                            ; preds = %.preheader
  call void @libmetis__RandomPermute(i64 noundef %5, ptr noundef %28, i64 noundef 1) #3
  br label %._crit_edge328.thread

.lr.ph321:                                        ; preds = %59, %.lr.ph321
  %.0288319 = phi i64 [ %64, %.lr.ph321 ], [ 0, %59 ]
  %62 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %4, i64 0, i64 %.0288319
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %62, i64 noundef %5, i64 noundef 501) #3
  %63 = getelementptr inbounds i8, ptr %62, i64 88
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %63, i64 noundef %5, i64 noundef 501) #3
  %64 = add nuw nsw i64 %.0288319, 1
  %exitcond360.not = icmp eq i64 %64, %7
  br i1 %exitcond360.not, label %.preheader, label %.lr.ph321, !llvm.loop !33

.lr.ph323:                                        ; preds = %.preheader, %.lr.ph323
  %.1322 = phi i64 [ %69, %.lr.ph323 ], [ 0, %.preheader ]
  %65 = mul nsw i64 %.1322, %7
  %66 = getelementptr inbounds float, ptr %13, i64 %65
  %67 = call i64 @gk_fargmax(i64 noundef %7, ptr noundef %66) #3
  %68 = getelementptr inbounds i64, ptr %29, i64 %.1322
  store i64 %67, ptr %68, align 8, !tbaa !34
  %69 = add nuw nsw i64 %.1322, 1
  %exitcond361.not = icmp eq i64 %69, %5
  br i1 %exitcond361.not, label %._crit_edge324, label %.lr.ph323, !llvm.loop !35

._crit_edge324:                                   ; preds = %.lr.ph323
  call void @libmetis__RandomPermute(i64 noundef %5, ptr noundef %28, i64 noundef 1) #3
  br i1 %61, label %.lr.ph327, label %._crit_edge328.thread

.lr.ph327:                                        ; preds = %._crit_edge324, %86
  %.0290325 = phi i64 [ %87, %86 ], [ 0, %._crit_edge324 ]
  %70 = getelementptr inbounds i64, ptr %28, i64 %.0290325
  %71 = load i64, ptr %70, align 8, !tbaa !34
  %72 = getelementptr inbounds i64, ptr %17, i64 %71
  %73 = load i64, ptr %72, align 8, !tbaa !34
  %74 = icmp eq i64 %73, 1
  br i1 %74, label %.sink.split, label %86

.sink.split:                                      ; preds = %.lr.ph327
  %75 = getelementptr inbounds i64, ptr %21, i64 %71
  %76 = load i64, ptr %75, align 8, !tbaa !34
  %77 = icmp sgt i64 %76, 0
  %78 = getelementptr inbounds i64, ptr %29, i64 %71
  %79 = load i64, ptr %78, align 8, !tbaa !34
  %80 = getelementptr inbounds i64, ptr %19, i64 %71
  %81 = load i64, ptr %80, align 8, !tbaa !34
  %82 = sub nsw i64 %76, %81
  %83 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %4, i64 0, i64 %79, i64 1
  %84 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %4, i64 0, i64 %79
  %.sink = select i1 %77, ptr %84, ptr %83
  %85 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %.sink, i64 noundef %71, i64 noundef %82) #3
  br label %86

86:                                               ; preds = %.sink.split, %.lr.ph327
  %87 = add nuw nsw i64 %.0290325, 1
  %exitcond362.not = icmp eq i64 %87, %5
  br i1 %exitcond362.not, label %._crit_edge328, label %.lr.ph327, !llvm.loop !36

._crit_edge328.thread:                            ; preds = %._crit_edge324.thread, %._crit_edge324
  %88 = getelementptr inbounds i8, ptr %1, i64 112
  %89 = load i64, ptr %88, align 8, !tbaa !32
  %90 = getelementptr inbounds i8, ptr %1, i64 144
  %91 = load i64, ptr %90, align 8, !tbaa !31
  br label %._crit_edge343

._crit_edge328:                                   ; preds = %86
  %92 = getelementptr inbounds i8, ptr %1, i64 112
  %93 = load i64, ptr %92, align 8, !tbaa !32
  %94 = getelementptr inbounds i8, ptr %1, i64 144
  %95 = load i64, ptr %94, align 8, !tbaa !31
  %96 = getelementptr float, ptr %23, i64 %7
  %97 = getelementptr inbounds i8, ptr %2, i64 4
  br i1 %61, label %.lr.ph342, label %._crit_edge343

.lr.ph342:                                        ; preds = %._crit_edge328, %._crit_edge337
  %.0340 = phi i64 [ %115, %._crit_edge337 ], [ %93, %._crit_edge328 ]
  %.0295339 = phi i64 [ %.3.lcssa, %._crit_edge337 ], [ %95, %._crit_edge328 ]
  %.0298338 = phi i64 [ %250, %._crit_edge337 ], [ 0, %._crit_edge328 ]
  %98 = load float, ptr %97, align 4, !tbaa !28
  %99 = call i64 @libmetis__AreAnyVwgtsBelow(i64 noundef %7, float noundef 1.000000e+00, ptr noundef %96, float noundef 0.000000e+00, ptr noundef %13, float noundef %98) #3
  %.not309 = icmp eq i64 %99, 0
  br i1 %.not309, label %100, label %._crit_edge343

100:                                              ; preds = %.lr.ph342
  %101 = call i64 @SelectQueueOneWay(i64 noundef %7, ptr noundef %23, ptr noundef nonnull %2, i64 noundef 1, ptr noundef nonnull %4)
  %102 = icmp eq i64 %101, -1
  br i1 %102, label %._crit_edge343, label %103

103:                                              ; preds = %100
  %104 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %4, i64 0, i64 %101
  %105 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %104) #3
  %106 = icmp eq i64 %105, -1
  br i1 %106, label %107, label %110

107:                                              ; preds = %103
  %108 = getelementptr inbounds i8, ptr %104, i64 88
  %109 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %108) #3
  br label %110

110:                                              ; preds = %107, %103
  %.0289 = phi i64 [ %109, %107 ], [ %105, %103 ]
  %111 = getelementptr inbounds i64, ptr %21, i64 %.0289
  %112 = load i64, ptr %111, align 8, !tbaa !34
  %113 = getelementptr inbounds i64, ptr %19, i64 %.0289
  %114 = load i64, ptr %113, align 8, !tbaa !34
  %.neg = sub i64 %114, %112
  %115 = add i64 %.neg, %.0340
  %116 = mul nsw i64 %.0289, %7
  %117 = getelementptr inbounds float, ptr %13, i64 %116
  %118 = call ptr @gk_faxpy(i64 noundef %7, float noundef 1.000000e+00, ptr noundef %117, i64 noundef 1, ptr noundef %23, i64 noundef 1) #3
  %119 = call ptr @gk_faxpy(i64 noundef %7, float noundef -1.000000e+00, ptr noundef %117, i64 noundef 1, ptr noundef %96, i64 noundef 1) #3
  %120 = getelementptr inbounds i64, ptr %17, i64 %.0289
  store i64 0, ptr %120, align 8, !tbaa !34
  %121 = load i64, ptr %30, align 8, !tbaa !23
  %122 = and i64 %121, 32
  %.not310 = icmp eq i64 %122, 0
  %.pre.pre371 = load i64, ptr %111, align 8, !tbaa !34
  br i1 %.not310, label %thread-pre-split, label %123

123:                                              ; preds = %110
  %124 = load i64, ptr %113, align 8, !tbaa !34
  %125 = sub nsw i64 %.pre.pre371, %124
  %126 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.7, i64 noundef %.0289, i64 noundef 1, i64 noundef %101, i64 noundef %125, i64 noundef %115) #3
  br i1 %60, label %.lr.ph331, label %._crit_edge332

.lr.ph331:                                        ; preds = %123, %.lr.ph331
  %.1293329 = phi i64 [ %134, %.lr.ph331 ], [ 0, %123 ]
  %127 = getelementptr inbounds float, ptr %23, i64 %.1293329
  %128 = load float, ptr %127, align 4, !tbaa !28
  %129 = fpext float %128 to double
  %130 = getelementptr float, ptr %96, i64 %.1293329
  %131 = load float, ptr %130, align 4, !tbaa !28
  %132 = fpext float %131 to double
  %133 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, double noundef %129, double noundef %132) #3
  %134 = add nuw nsw i64 %.1293329, 1
  %exitcond363.not = icmp eq i64 %134, %7
  br i1 %exitcond363.not, label %._crit_edge332, label %.lr.ph331, !llvm.loop !37

._crit_edge332:                                   ; preds = %.lr.ph331, %123
  %135 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %7, ptr noundef %23, ptr noundef %2) #3
  %136 = fpext float %135 to double
  %137 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.8, double noundef %136) #3
  %138 = load i64, ptr %111, align 8, !tbaa !34
  %139 = icmp eq i64 %138, 0
  br i1 %139, label %140, label %thread-pre-split

140:                                              ; preds = %._crit_edge332
  %141 = load i64, ptr %113, align 8, !tbaa !34
  %142 = icmp sgt i64 %141, 0
  br i1 %142, label %143, label %145

143:                                              ; preds = %140
  %144 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.9) #3
  %.pre.pre = load i64, ptr %111, align 8, !tbaa !34
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %._crit_edge332, %143, %110
  %.pre = phi i64 [ %138, %._crit_edge332 ], [ %.pre.pre, %143 ], [ %.pre.pre371, %110 ]
  %.pr = load i64, ptr %113, align 8, !tbaa !34
  br label %145

145:                                              ; preds = %thread-pre-split, %140
  %146 = phi i64 [ %.pre, %thread-pre-split ], [ 0, %140 ]
  %147 = phi i64 [ %.pr, %thread-pre-split ], [ %141, %140 ]
  store i64 %146, ptr %113, align 8, !tbaa !34
  store i64 %147, ptr %111, align 8, !tbaa !34
  %148 = icmp eq i64 %147, 0
  br i1 %148, label %149, label %thread-pre-split314

149:                                              ; preds = %145
  %150 = getelementptr inbounds i64, ptr %25, i64 %.0289
  %151 = load i64, ptr %150, align 8, !tbaa !34
  %.not311 = icmp eq i64 %151, -1
  br i1 %.not311, label %thread-pre-split314.thread, label %152

152:                                              ; preds = %149
  %153 = getelementptr inbounds i64, ptr %9, i64 %.0289
  %154 = load i64, ptr %153, align 8, !tbaa !34
  %155 = getelementptr i8, ptr %153, i64 8
  %156 = load i64, ptr %155, align 8, !tbaa !34
  %157 = icmp slt i64 %154, %156
  br i1 %157, label %158, label %thread-pre-split314.thread

158:                                              ; preds = %152
  %159 = add nsw i64 %.0295339, -1
  %160 = getelementptr inbounds i64, ptr %27, i64 %159
  %161 = load i64, ptr %160, align 8, !tbaa !34
  %162 = getelementptr inbounds i64, ptr %27, i64 %151
  store i64 %161, ptr %162, align 8, !tbaa !34
  %163 = load i64, ptr %150, align 8, !tbaa !34
  %164 = getelementptr inbounds i64, ptr %25, i64 %161
  store i64 %163, ptr %164, align 8, !tbaa !34
  store i64 -1, ptr %150, align 8, !tbaa !34
  %.pr315.pre = load i64, ptr %111, align 8, !tbaa !34
  br label %thread-pre-split314

thread-pre-split314:                              ; preds = %158, %145
  %165 = phi i64 [ %147, %145 ], [ %.pr315.pre, %158 ]
  %.1296 = phi i64 [ %.0295339, %145 ], [ %159, %158 ]
  %166 = icmp sgt i64 %165, 0
  br i1 %166, label %167, label %thread-pre-split314.thread

167:                                              ; preds = %thread-pre-split314
  %168 = getelementptr inbounds i64, ptr %25, i64 %.0289
  %169 = load i64, ptr %168, align 8, !tbaa !34
  %170 = icmp eq i64 %169, -1
  br i1 %170, label %171, label %thread-pre-split314.thread

171:                                              ; preds = %167
  %172 = getelementptr inbounds i64, ptr %27, i64 %.1296
  store i64 %.0289, ptr %172, align 8, !tbaa !34
  %173 = add nsw i64 %.1296, 1
  store i64 %.1296, ptr %168, align 8, !tbaa !34
  br label %thread-pre-split314.thread

thread-pre-split314.thread:                       ; preds = %152, %149, %171, %167, %thread-pre-split314
  %.2297 = phi i64 [ %173, %171 ], [ %.1296, %167 ], [ %.1296, %thread-pre-split314 ], [ %.0295339, %149 ], [ %.0295339, %152 ]
  %174 = getelementptr inbounds i64, ptr %9, i64 %.0289
  %175 = load i64, ptr %174, align 8, !tbaa !34
  %176 = getelementptr i8, ptr %174, i64 8
  %177 = load i64, ptr %176, align 8, !tbaa !34
  %178 = icmp slt i64 %175, %177
  br i1 %178, label %.lr.ph336, label %._crit_edge337

.lr.ph336:                                        ; preds = %thread-pre-split314.thread, %.thread
  %.0291334 = phi i64 [ %247, %.thread ], [ %175, %thread-pre-split314.thread ]
  %.3333 = phi i64 [ %.4, %.thread ], [ %.2297, %thread-pre-split314.thread ]
  %179 = getelementptr inbounds i64, ptr %11, i64 %.0291334
  %180 = load i64, ptr %179, align 8, !tbaa !34
  %181 = getelementptr inbounds i64, ptr %21, i64 %180
  %182 = load i64, ptr %181, align 8, !tbaa !34
  %183 = getelementptr inbounds i64, ptr %19, i64 %180
  %184 = load i64, ptr %183, align 8, !tbaa !34
  %185 = sub nsw i64 %182, %184
  %186 = getelementptr inbounds i64, ptr %17, i64 %180
  %187 = load i64, ptr %186, align 8, !tbaa !34
  %188 = icmp eq i64 %187, 0
  %189 = getelementptr inbounds i64, ptr %15, i64 %.0291334
  %190 = load i64, ptr %189, align 8, !tbaa !34
  %191 = sub nsw i64 0, %190
  %192 = select i1 %188, i64 %190, i64 %191
  %193 = add nsw i64 %192, %184
  store i64 %193, ptr %183, align 8, !tbaa !34
  %194 = load i64, ptr %181, align 8, !tbaa !34
  %195 = sub nsw i64 %194, %192
  store i64 %195, ptr %181, align 8, !tbaa !34
  %196 = load i64, ptr %186, align 8, !tbaa !34
  %197 = icmp eq i64 %196, 1
  br i1 %197, label %198, label %225

198:                                              ; preds = %.lr.ph336
  %199 = icmp sgt i64 %195, 0
  %200 = getelementptr inbounds i64, ptr %25, i64 %180
  %201 = load i64, ptr %200, align 8, !tbaa !34
  %202 = icmp eq i64 %201, -1
  br i1 %199, label %203, label %215

203:                                              ; preds = %198
  br i1 %202, label %204, label %.thread374

204:                                              ; preds = %203
  %205 = getelementptr inbounds i64, ptr %29, i64 %180
  %206 = load i64, ptr %205, align 8, !tbaa !34
  %207 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %4, i64 0, i64 %206, i64 1
  %208 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %207, i64 noundef %180, i64 noundef %185) #3
  %209 = load i64, ptr %205, align 8, !tbaa !34
  %210 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %4, i64 0, i64 %209
  %211 = load i64, ptr %181, align 8, !tbaa !34
  %212 = load i64, ptr %183, align 8, !tbaa !34
  %213 = sub nsw i64 %211, %212
  %214 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %210, i64 noundef %180, i64 noundef %213) #3
  br label %thread-pre-split316

215:                                              ; preds = %198
  br i1 %202, label %216, label %.thread374

216:                                              ; preds = %215
  %217 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.10) #3
  %.pre370 = load i64, ptr %181, align 8, !tbaa !34
  br label %.thread374

.thread374:                                       ; preds = %203, %216, %215
  %218 = phi i64 [ %.pre370, %216 ], [ %195, %215 ], [ %195, %203 ]
  %219 = getelementptr inbounds i64, ptr %29, i64 %180
  %220 = load i64, ptr %219, align 8, !tbaa !34
  %221 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %4, i64 0, i64 %220
  %222 = load i64, ptr %183, align 8, !tbaa !34
  %223 = sub nsw i64 %218, %222
  %224 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %221, i64 noundef %180, i64 noundef %185, i64 noundef %223) #3
  br label %thread-pre-split316

thread-pre-split316:                              ; preds = %.thread374, %204
  %.pr317 = load i64, ptr %181, align 8, !tbaa !34
  br label %225

225:                                              ; preds = %thread-pre-split316, %.lr.ph336
  %226 = phi i64 [ %.pr317, %thread-pre-split316 ], [ %195, %.lr.ph336 ]
  %227 = icmp eq i64 %226, 0
  br i1 %227, label %228, label %238

228:                                              ; preds = %225
  %229 = getelementptr inbounds i64, ptr %25, i64 %180
  %230 = load i64, ptr %229, align 8, !tbaa !34
  %.not312 = icmp eq i64 %230, -1
  br i1 %.not312, label %.thread, label %231

231:                                              ; preds = %228
  %232 = add nsw i64 %.3333, -1
  %233 = getelementptr inbounds i64, ptr %27, i64 %232
  %234 = load i64, ptr %233, align 8, !tbaa !34
  %235 = getelementptr inbounds i64, ptr %27, i64 %230
  store i64 %234, ptr %235, align 8, !tbaa !34
  %236 = load i64, ptr %229, align 8, !tbaa !34
  %237 = getelementptr inbounds i64, ptr %25, i64 %234
  store i64 %236, ptr %237, align 8, !tbaa !34
  store i64 -1, ptr %229, align 8, !tbaa !34
  br label %.thread

238:                                              ; preds = %225
  %239 = icmp sgt i64 %226, 0
  br i1 %239, label %240, label %.thread

240:                                              ; preds = %238
  %241 = getelementptr inbounds i64, ptr %25, i64 %180
  %242 = load i64, ptr %241, align 8, !tbaa !34
  %243 = icmp eq i64 %242, -1
  br i1 %243, label %244, label %.thread

244:                                              ; preds = %240
  %245 = getelementptr inbounds i64, ptr %27, i64 %.3333
  store i64 %180, ptr %245, align 8, !tbaa !34
  %246 = add nsw i64 %.3333, 1
  store i64 %.3333, ptr %241, align 8, !tbaa !34
  br label %.thread

.thread:                                          ; preds = %228, %231, %244, %240, %238
  %.4 = phi i64 [ %232, %231 ], [ %246, %244 ], [ %.3333, %240 ], [ %.3333, %238 ], [ %.3333, %228 ]
  %247 = add nsw i64 %.0291334, 1
  %248 = load i64, ptr %176, align 8, !tbaa !34
  %249 = icmp slt i64 %247, %248
  br i1 %249, label %.lr.ph336, label %._crit_edge337, !llvm.loop !38

._crit_edge337:                                   ; preds = %.thread, %thread-pre-split314.thread
  %.3.lcssa = phi i64 [ %.2297, %thread-pre-split314.thread ], [ %.4, %.thread ]
  %250 = add nuw nsw i64 %.0298338, 1
  %exitcond364.not = icmp eq i64 %250, %5
  br i1 %exitcond364.not, label %._crit_edge343, label %.lr.ph342, !llvm.loop !39

._crit_edge343:                                   ; preds = %._crit_edge337, %.lr.ph342, %100, %._crit_edge328.thread, %._crit_edge328
  %251 = phi ptr [ %94, %._crit_edge328 ], [ %90, %._crit_edge328.thread ], [ %94, %100 ], [ %94, %.lr.ph342 ], [ %94, %._crit_edge337 ]
  %252 = phi ptr [ %92, %._crit_edge328 ], [ %88, %._crit_edge328.thread ], [ %92, %100 ], [ %92, %.lr.ph342 ], [ %92, %._crit_edge337 ]
  %.0295.lcssa = phi i64 [ %95, %._crit_edge328 ], [ %91, %._crit_edge328.thread ], [ %.3.lcssa, %._crit_edge337 ], [ %.0295339, %.lr.ph342 ], [ %.0295339, %100 ]
  %.0.lcssa = phi i64 [ %93, %._crit_edge328 ], [ %89, %._crit_edge328.thread ], [ %115, %._crit_edge337 ], [ %.0340, %.lr.ph342 ], [ %.0340, %100 ]
  %253 = load i64, ptr %30, align 8, !tbaa !23
  %254 = and i64 %253, 8
  %.not313 = icmp eq i64 %254, 0
  br i1 %.not313, label %269, label %255

255:                                              ; preds = %._crit_edge343
  %256 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.11, i64 noundef %.0.lcssa, i64 noundef %.0295.lcssa) #3
  br i1 %60, label %.lr.ph354.preheader, label %._crit_edge355

.lr.ph354.preheader:                              ; preds = %255
  %257 = getelementptr float, ptr %23, i64 %7
  br label %.lr.ph354

.lr.ph354:                                        ; preds = %.lr.ph354.preheader, %.lr.ph354
  %.2294352 = phi i64 [ %265, %.lr.ph354 ], [ 0, %.lr.ph354.preheader ]
  %258 = getelementptr inbounds float, ptr %23, i64 %.2294352
  %259 = load float, ptr %258, align 4, !tbaa !28
  %260 = fpext float %259 to double
  %261 = getelementptr float, ptr %257, i64 %.2294352
  %262 = load float, ptr %261, align 4, !tbaa !28
  %263 = fpext float %262 to double
  %264 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, double noundef %260, double noundef %263) #3
  %265 = add nuw nsw i64 %.2294352, 1
  %exitcond365.not = icmp eq i64 %265, %7
  br i1 %exitcond365.not, label %._crit_edge355, label %.lr.ph354, !llvm.loop !40

._crit_edge355:                                   ; preds = %.lr.ph354, %255
  %266 = call float @libmetis__Compute2WayHLoadImbalance(i64 noundef %7, ptr noundef %23, ptr noundef %2) #3
  %267 = fpext float %266 to double
  %268 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.8, double noundef %267) #3
  br label %269

269:                                              ; preds = %._crit_edge355, %._crit_edge343
  store i64 %.0.lcssa, ptr %252, align 8, !tbaa !32
  store i64 %.0295.lcssa, ptr %251, align 8, !tbaa !31
  br i1 %60, label %.lr.ph358, label %._crit_edge359

.lr.ph358:                                        ; preds = %269, %.lr.ph358
  %.2356 = phi i64 [ %272, %.lr.ph358 ], [ 0, %269 ]
  %270 = getelementptr inbounds [16 x [2 x %struct.PQueueType]], ptr %4, i64 0, i64 %.2356
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %270) #3
  %271 = getelementptr inbounds i8, ptr %270, i64 88
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %271) #3
  %272 = add nuw nsw i64 %.2356, 1
  %exitcond366.not = icmp eq i64 %272, %7
  br i1 %exitcond366.not, label %._crit_edge359, label %.lr.ph358, !llvm.loop !41

._crit_edge359:                                   ; preds = %.lr.ph358, %269
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %5) #3
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %5) #3
  call void @llvm.lifetime.end.p0(i64 2816, ptr nonnull %4) #3
  ret void
}

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

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

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

declare float @libmetis__Compute2WayHLoadImbalance(i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #1

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

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

declare i64 @libmetis__AreAnyVwgtsBelow(i64 noundef, float noundef, ptr noundef, float noundef, ptr noundef, float noundef) local_unnamed_addr #1

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #1

declare ptr @gk_faxpy(i64 noundef, float noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #1

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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, !7, i64 208}
!13 = !{!6, !10, i64 16}
!14 = !{!6, !10, i64 40}
!15 = !{!6, !10, i64 216}
!16 = !{!6, !10, i64 48}
!17 = !{!6, !10, i64 128}
!18 = !{!6, !10, i64 168}
!19 = !{!6, !10, i64 176}
!20 = !{!6, !10, i64 224}
!21 = !{!6, !10, i64 152}
!22 = !{!6, !10, i64 160}
!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 = !{!25, !25, i64 0}
!29 = distinct !{!29, !30}
!30 = !{!"llvm.loop.mustprogress"}
!31 = !{!6, !7, i64 144}
!32 = !{!6, !7, i64 112}
!33 = distinct !{!33, !30}
!34 = !{!7, !7, i64 0}
!35 = distinct !{!35, !30}
!36 = distinct !{!36, !30}
!37 = distinct !{!37, !30}
!38 = distinct !{!38, !30}
!39 = distinct !{!39, !30}
!40 = distinct !{!40, !30}
!41 = distinct !{!41, !30}


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