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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayEdgeRefine(ptr noundef %0, ptr noundef %1, ptr noundef %2, i64 noundef %3) #0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, 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 ptr, align 8
  %36 = alloca [2 x %struct.PQueueType], align 16
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i64, align 8
  %40 = alloca i64, align 8
  %41 = alloca i64, align 8
  %42 = alloca i64, align 8
  %43 = alloca i64, align 8
  %44 = alloca i64, align 8
  %45 = alloca i64, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i64 %3, ptr %8, align 8, !tbaa !9
  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 8, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 176, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #3
  %46 = load ptr, ptr %6, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.graphdef, ptr %46, i32 0, i32 0
  %48 = load i64, ptr %47, align 8, !tbaa !11
  store i64 %48, ptr %14, align 8, !tbaa !9
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.graphdef, ptr %49, i32 0, i32 2
  %51 = load ptr, ptr %50, align 8, !tbaa !14
  store ptr %51, ptr %23, align 8, !tbaa !5
  %52 = load ptr, ptr %6, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.graphdef, ptr %52, i32 0, i32 3
  %54 = load ptr, ptr %53, align 8, !tbaa !15
  store ptr %54, ptr %24, align 8, !tbaa !5
  %55 = load ptr, ptr %6, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.graphdef, ptr %55, i32 0, i32 5
  %57 = load ptr, ptr %56, align 8, !tbaa !16
  store ptr %57, ptr %25, align 8, !tbaa !5
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.graphdef, ptr %58, i32 0, i32 6
  %60 = load ptr, ptr %59, align 8, !tbaa !17
  store ptr %60, ptr %26, align 8, !tbaa !5
  %61 = load ptr, ptr %6, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.graphdef, ptr %61, i32 0, i32 18
  %63 = load ptr, ptr %62, align 8, !tbaa !18
  store ptr %63, ptr %27, align 8, !tbaa !5
  %64 = load ptr, ptr %6, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.graphdef, ptr %64, i32 0, i32 23
  %66 = load ptr, ptr %65, align 8, !tbaa !19
  store ptr %66, ptr %28, align 8, !tbaa !5
  %67 = load ptr, ptr %6, align 8, !tbaa !5
  %68 = getelementptr inbounds %struct.graphdef, ptr %67, i32 0, i32 24
  %69 = load ptr, ptr %68, align 8, !tbaa !20
  store ptr %69, ptr %29, align 8, !tbaa !5
  %70 = load ptr, ptr %6, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.graphdef, ptr %70, i32 0, i32 19
  %72 = load ptr, ptr %71, align 8, !tbaa !21
  store ptr %72, ptr %32, align 8, !tbaa !5
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.graphdef, ptr %73, i32 0, i32 21
  %75 = load ptr, ptr %74, align 8, !tbaa !22
  store ptr %75, ptr %30, align 8, !tbaa !5
  %76 = load ptr, ptr %6, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.graphdef, ptr %76, i32 0, i32 22
  %78 = load ptr, ptr %77, align 8, !tbaa !23
  store ptr %78, ptr %31, align 8, !tbaa !5
  %79 = load ptr, ptr %5, align 8, !tbaa !5
  %80 = load i64, ptr %14, align 8, !tbaa !9
  %81 = call ptr @libmetis__idxwspacemalloc(ptr noundef %79, i64 noundef %80)
  store ptr %81, ptr %33, align 8, !tbaa !5
  %82 = load ptr, ptr %5, align 8, !tbaa !5
  %83 = load i64, ptr %14, align 8, !tbaa !9
  %84 = call ptr @libmetis__idxwspacemalloc(ptr noundef %82, i64 noundef %83)
  store ptr %84, ptr %34, align 8, !tbaa !5
  %85 = load ptr, ptr %5, align 8, !tbaa !5
  %86 = load i64, ptr %14, align 8, !tbaa !9
  %87 = call ptr @libmetis__idxwspacemalloc(ptr noundef %85, i64 noundef %86)
  store ptr %87, ptr %35, align 8, !tbaa !5
  %88 = load i64, ptr %14, align 8, !tbaa !9
  %89 = sitofp i64 %88 to double
  %90 = fmul double 1.000000e-02, %89
  %91 = fcmp oge double %90, 1.500000e+01
  br i1 %91, label %92, label %96

92:                                               ; preds = %4
  %93 = load i64, ptr %14, align 8, !tbaa !9
  %94 = sitofp i64 %93 to double
  %95 = fmul double 1.000000e-02, %94
  br label %97

96:                                               ; preds = %4
  br label %97

97:                                               ; preds = %96, %92
  %98 = phi double [ %95, %92 ], [ 1.500000e+01, %96 ]
  %99 = fcmp oge double %98, 1.000000e+02
  br i1 %99, label %100, label %101

100:                                              ; preds = %97
  br label %113

101:                                              ; preds = %97
  %102 = load i64, ptr %14, align 8, !tbaa !9
  %103 = sitofp i64 %102 to double
  %104 = fmul double 1.000000e-02, %103
  %105 = fcmp oge double %104, 1.500000e+01
  br i1 %105, label %106, label %110

106:                                              ; preds = %101
  %107 = load i64, ptr %14, align 8, !tbaa !9
  %108 = sitofp i64 %107 to double
  %109 = fmul double 1.000000e-02, %108
  br label %111

110:                                              ; preds = %101
  br label %111

111:                                              ; preds = %110, %106
  %112 = phi double [ %109, %106 ], [ 1.500000e+01, %110 ]
  br label %113

113:                                              ; preds = %111, %100
  %114 = phi double [ 1.000000e+02, %100 ], [ %112, %111 ]
  %115 = fptosi double %114 to i64
  store i64 %115, ptr %21, align 8, !tbaa !9
  %116 = load ptr, ptr %32, align 8, !tbaa !5
  %117 = getelementptr inbounds i64, ptr %116, i64 0
  %118 = load i64, ptr %117, align 8, !tbaa !9
  %119 = load ptr, ptr %32, align 8, !tbaa !5
  %120 = getelementptr inbounds i64, ptr %119, i64 1
  %121 = load i64, ptr %120, align 8, !tbaa !9
  %122 = add nsw i64 %118, %121
  %123 = sdiv i64 %122, 20
  %124 = load ptr, ptr %32, align 8, !tbaa !5
  %125 = getelementptr inbounds i64, ptr %124, i64 0
  %126 = load i64, ptr %125, align 8, !tbaa !9
  %127 = load ptr, ptr %32, align 8, !tbaa !5
  %128 = getelementptr inbounds i64, ptr %127, i64 1
  %129 = load i64, ptr %128, align 8, !tbaa !9
  %130 = add nsw i64 %126, %129
  %131 = mul nsw i64 2, %130
  %132 = load i64, ptr %14, align 8, !tbaa !9
  %133 = sdiv i64 %131, %132
  %134 = icmp sge i64 %123, %133
  br i1 %134, label %135, label %146

135:                                              ; preds = %113
  %136 = load ptr, ptr %32, align 8, !tbaa !5
  %137 = getelementptr inbounds i64, ptr %136, i64 0
  %138 = load i64, ptr %137, align 8, !tbaa !9
  %139 = load ptr, ptr %32, align 8, !tbaa !5
  %140 = getelementptr inbounds i64, ptr %139, i64 1
  %141 = load i64, ptr %140, align 8, !tbaa !9
  %142 = add nsw i64 %138, %141
  %143 = mul nsw i64 2, %142
  %144 = load i64, ptr %14, align 8, !tbaa !9
  %145 = sdiv i64 %143, %144
  br label %155

146:                                              ; preds = %113
  %147 = load ptr, ptr %32, align 8, !tbaa !5
  %148 = getelementptr inbounds i64, ptr %147, i64 0
  %149 = load i64, ptr %148, align 8, !tbaa !9
  %150 = load ptr, ptr %32, align 8, !tbaa !5
  %151 = getelementptr inbounds i64, ptr %150, i64 1
  %152 = load i64, ptr %151, align 8, !tbaa !9
  %153 = add nsw i64 %149, %152
  %154 = sdiv i64 %153, 20
  br label %155

155:                                              ; preds = %146, %135
  %156 = phi i64 [ %145, %135 ], [ %154, %146 ]
  store i64 %156, ptr %45, align 8, !tbaa !9
  %157 = load ptr, ptr %6, align 8, !tbaa !5
  %158 = getelementptr inbounds %struct.graphdef, ptr %157, i32 0, i32 13
  %159 = load ptr, ptr %158, align 8, !tbaa !24
  %160 = load i64, ptr %14, align 8, !tbaa !9
  %161 = load ptr, ptr %6, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.graphdef, ptr %161, i32 0, i32 13
  %163 = load ptr, ptr %162, align 8, !tbaa !24
  %164 = call i64 @libmetis__idxargmax(i64 noundef %160, ptr noundef %163)
  %165 = getelementptr inbounds i64, ptr %159, i64 %164
  %166 = load i64, ptr %165, align 8, !tbaa !9
  store i64 %166, ptr %22, align 8, !tbaa !9
  %167 = load ptr, ptr %5, align 8, !tbaa !5
  %168 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 0
  %169 = load i64, ptr %14, align 8, !tbaa !9
  %170 = load i64, ptr %22, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %167, ptr noundef %168, i64 noundef %169, i64 noundef %170)
  %171 = load ptr, ptr %5, align 8, !tbaa !5
  %172 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 1
  %173 = load i64, ptr %14, align 8, !tbaa !9
  %174 = load i64, ptr %22, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %171, ptr noundef %172, i64 noundef %173, i64 noundef %174)
  %175 = load ptr, ptr %5, align 8, !tbaa !5
  %176 = getelementptr inbounds %struct.controldef, ptr %175, i32 0, i32 1
  %177 = load i64, ptr %176, align 8, !tbaa !25
  %178 = and i64 %177, 8
  %179 = icmp ne i64 %178, 0
  br i1 %179, label %180, label %203

180:                                              ; preds = %155
  %181 = load ptr, ptr %32, align 8, !tbaa !5
  %182 = getelementptr inbounds i64, ptr %181, i64 0
  %183 = load i64, ptr %182, align 8, !tbaa !9
  %184 = load ptr, ptr %32, align 8, !tbaa !5
  %185 = getelementptr inbounds i64, ptr %184, i64 1
  %186 = load i64, ptr %185, align 8, !tbaa !9
  %187 = load ptr, ptr %7, align 8, !tbaa !5
  %188 = getelementptr inbounds i64, ptr %187, i64 0
  %189 = load i64, ptr %188, align 8, !tbaa !9
  %190 = load ptr, ptr %7, align 8, !tbaa !5
  %191 = getelementptr inbounds i64, ptr %190, i64 1
  %192 = load i64, ptr %191, align 8, !tbaa !9
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.graphdef, ptr %193, i32 0, i32 0
  %195 = load i64, ptr %194, align 8, !tbaa !11
  %196 = load ptr, ptr %6, align 8, !tbaa !5
  %197 = getelementptr inbounds %struct.graphdef, ptr %196, i32 0, i32 20
  %198 = load i64, ptr %197, align 8, !tbaa !30
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.graphdef, ptr %199, i32 0, i32 16
  %201 = load i64, ptr %200, align 8, !tbaa !31
  %202 = call i32 (ptr, ...) @mprintf(ptr noundef @.str, i64 noundef %183, i64 noundef %186, i64 noundef %189, i64 noundef %192, i64 noundef %195, i64 noundef %198, i64 noundef %201)
  br label %203

203:                                              ; preds = %180, %155
  %204 = load ptr, ptr %7, align 8, !tbaa !5
  %205 = getelementptr inbounds i64, ptr %204, i64 0
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = load ptr, ptr %32, align 8, !tbaa !5
  %208 = getelementptr inbounds i64, ptr %207, i64 0
  %209 = load i64, ptr %208, align 8, !tbaa !9
  %210 = sub nsw i64 %206, %209
  %211 = icmp sgt i64 %210, 0
  br i1 %211, label %212, label %220

212:                                              ; preds = %203
  %213 = load ptr, ptr %7, align 8, !tbaa !5
  %214 = getelementptr inbounds i64, ptr %213, i64 0
  %215 = load i64, ptr %214, align 8, !tbaa !9
  %216 = load ptr, ptr %32, align 8, !tbaa !5
  %217 = getelementptr inbounds i64, ptr %216, i64 0
  %218 = load i64, ptr %217, align 8, !tbaa !9
  %219 = sub nsw i64 %215, %218
  br label %229

220:                                              ; preds = %203
  %221 = load ptr, ptr %7, align 8, !tbaa !5
  %222 = getelementptr inbounds i64, ptr %221, i64 0
  %223 = load i64, ptr %222, align 8, !tbaa !9
  %224 = load ptr, ptr %32, align 8, !tbaa !5
  %225 = getelementptr inbounds i64, ptr %224, i64 0
  %226 = load i64, ptr %225, align 8, !tbaa !9
  %227 = sub nsw i64 %223, %226
  %228 = sub nsw i64 0, %227
  br label %229

229:                                              ; preds = %220, %212
  %230 = phi i64 [ %219, %212 ], [ %228, %220 ]
  store i64 %230, ptr %41, align 8, !tbaa !9
  %231 = load i64, ptr %14, align 8, !tbaa !9
  %232 = load ptr, ptr %33, align 8, !tbaa !5
  %233 = call ptr @libmetis__idxset(i64 noundef %231, i64 noundef -1, ptr noundef %232)
  store i64 0, ptr %19, align 8, !tbaa !9
  br label %234

234:                                              ; preds = %1126, %229
  %235 = load i64, ptr %19, align 8, !tbaa !9
  %236 = load i64, ptr %8, align 8, !tbaa !9
  %237 = icmp slt i64 %235, %236
  br i1 %237, label %238, label %1129

238:                                              ; preds = %234
  %239 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 0
  call void @libmetis__PQueueReset(ptr noundef %239)
  %240 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 1
  call void @libmetis__PQueueReset(ptr noundef %240)
  store i64 -1, ptr %44, align 8, !tbaa !9
  %241 = load ptr, ptr %6, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.graphdef, ptr %241, i32 0, i32 16
  %243 = load i64, ptr %242, align 8, !tbaa !31
  store i64 %243, ptr %42, align 8, !tbaa !9
  store i64 %243, ptr %39, align 8, !tbaa !9
  store i64 %243, ptr %43, align 8, !tbaa !9
  %244 = load ptr, ptr %7, align 8, !tbaa !5
  %245 = getelementptr inbounds i64, ptr %244, i64 0
  %246 = load i64, ptr %245, align 8, !tbaa !9
  %247 = load ptr, ptr %32, align 8, !tbaa !5
  %248 = getelementptr inbounds i64, ptr %247, i64 0
  %249 = load i64, ptr %248, align 8, !tbaa !9
  %250 = sub nsw i64 %246, %249
  %251 = icmp sgt i64 %250, 0
  br i1 %251, label %252, label %260

252:                                              ; preds = %238
  %253 = load ptr, ptr %7, align 8, !tbaa !5
  %254 = getelementptr inbounds i64, ptr %253, i64 0
  %255 = load i64, ptr %254, align 8, !tbaa !9
  %256 = load ptr, ptr %32, align 8, !tbaa !5
  %257 = getelementptr inbounds i64, ptr %256, i64 0
  %258 = load i64, ptr %257, align 8, !tbaa !9
  %259 = sub nsw i64 %255, %258
  br label %269

260:                                              ; preds = %238
  %261 = load ptr, ptr %7, align 8, !tbaa !5
  %262 = getelementptr inbounds i64, ptr %261, i64 0
  %263 = load i64, ptr %262, align 8, !tbaa !9
  %264 = load ptr, ptr %32, align 8, !tbaa !5
  %265 = getelementptr inbounds i64, ptr %264, i64 0
  %266 = load i64, ptr %265, align 8, !tbaa !9
  %267 = sub nsw i64 %263, %266
  %268 = sub nsw i64 0, %267
  br label %269

269:                                              ; preds = %260, %252
  %270 = phi i64 [ %259, %252 ], [ %268, %260 ]
  store i64 %270, ptr %40, align 8, !tbaa !9
  %271 = load ptr, ptr %6, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.graphdef, ptr %271, i32 0, i32 20
  %273 = load i64, ptr %272, align 8, !tbaa !30
  store i64 %273, ptr %15, align 8, !tbaa !9
  %274 = load i64, ptr %15, align 8, !tbaa !9
  %275 = load ptr, ptr %35, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %274, ptr noundef %275, i64 noundef 1)
  store i64 0, ptr %10, align 8, !tbaa !9
  br label %276

276:                                              ; preds = %313, %269
  %277 = load i64, ptr %10, align 8, !tbaa !9
  %278 = load i64, ptr %15, align 8, !tbaa !9
  %279 = icmp slt i64 %277, %278
  br i1 %279, label %280, label %316

280:                                              ; preds = %276
  %281 = load ptr, ptr %35, align 8, !tbaa !5
  %282 = load i64, ptr %10, align 8, !tbaa !9
  %283 = getelementptr inbounds i64, ptr %281, i64 %282
  %284 = load i64, ptr %283, align 8, !tbaa !9
  store i64 %284, ptr %9, align 8, !tbaa !9
  %285 = load ptr, ptr %27, align 8, !tbaa !5
  %286 = load ptr, ptr %31, align 8, !tbaa !5
  %287 = load i64, ptr %9, align 8, !tbaa !9
  %288 = getelementptr inbounds i64, ptr %286, i64 %287
  %289 = load i64, ptr %288, align 8, !tbaa !9
  %290 = getelementptr inbounds i64, ptr %285, i64 %289
  %291 = load i64, ptr %290, align 8, !tbaa !9
  %292 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 %291
  %293 = load ptr, ptr %31, align 8, !tbaa !5
  %294 = load i64, ptr %9, align 8, !tbaa !9
  %295 = getelementptr inbounds i64, ptr %293, i64 %294
  %296 = load i64, ptr %295, align 8, !tbaa !9
  %297 = load ptr, ptr %29, align 8, !tbaa !5
  %298 = load ptr, ptr %31, align 8, !tbaa !5
  %299 = load i64, ptr %9, align 8, !tbaa !9
  %300 = getelementptr inbounds i64, ptr %298, i64 %299
  %301 = load i64, ptr %300, align 8, !tbaa !9
  %302 = getelementptr inbounds i64, ptr %297, i64 %301
  %303 = load i64, ptr %302, align 8, !tbaa !9
  %304 = load ptr, ptr %28, align 8, !tbaa !5
  %305 = load ptr, ptr %31, align 8, !tbaa !5
  %306 = load i64, ptr %9, align 8, !tbaa !9
  %307 = getelementptr inbounds i64, ptr %305, i64 %306
  %308 = load i64, ptr %307, align 8, !tbaa !9
  %309 = getelementptr inbounds i64, ptr %304, i64 %308
  %310 = load i64, ptr %309, align 8, !tbaa !9
  %311 = sub nsw i64 %303, %310
  %312 = call i64 @libmetis__PQueueInsert(ptr noundef %292, i64 noundef %296, i64 noundef %311)
  br label %313

313:                                              ; preds = %280
  %314 = load i64, ptr %10, align 8, !tbaa !9
  %315 = add nsw i64 %314, 1
  store i64 %315, ptr %10, align 8, !tbaa !9
  br label %276, !llvm.loop !32

316:                                              ; preds = %276
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %317

317:                                              ; preds = %814, %316
  %318 = load i64, ptr %16, align 8, !tbaa !9
  %319 = load i64, ptr %14, align 8, !tbaa !9
  %320 = icmp slt i64 %318, %319
  br i1 %320, label %321, label %817

321:                                              ; preds = %317
  %322 = load ptr, ptr %7, align 8, !tbaa !5
  %323 = getelementptr inbounds i64, ptr %322, i64 0
  %324 = load i64, ptr %323, align 8, !tbaa !9
  %325 = load ptr, ptr %32, align 8, !tbaa !5
  %326 = getelementptr inbounds i64, ptr %325, i64 0
  %327 = load i64, ptr %326, align 8, !tbaa !9
  %328 = sub nsw i64 %324, %327
  %329 = load ptr, ptr %7, align 8, !tbaa !5
  %330 = getelementptr inbounds i64, ptr %329, i64 1
  %331 = load i64, ptr %330, align 8, !tbaa !9
  %332 = load ptr, ptr %32, align 8, !tbaa !5
  %333 = getelementptr inbounds i64, ptr %332, i64 1
  %334 = load i64, ptr %333, align 8, !tbaa !9
  %335 = sub nsw i64 %331, %334
  %336 = icmp slt i64 %328, %335
  %337 = zext i1 %336 to i64
  %338 = select i1 %336, i32 0, i32 1
  %339 = sext i32 %338 to i64
  store i64 %339, ptr %17, align 8, !tbaa !9
  %340 = load i64, ptr %17, align 8, !tbaa !9
  %341 = add nsw i64 %340, 1
  %342 = srem i64 %341, 2
  store i64 %342, ptr %18, align 8, !tbaa !9
  %343 = load i64, ptr %17, align 8, !tbaa !9
  %344 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 %343
  %345 = call i64 @libmetis__PQueueGetMax(ptr noundef %344)
  store i64 %345, ptr %37, align 8, !tbaa !9
  %346 = icmp eq i64 %345, -1
  br i1 %346, label %347, label %348

347:                                              ; preds = %321
  br label %817

348:                                              ; preds = %321
  %349 = load ptr, ptr %29, align 8, !tbaa !5
  %350 = load i64, ptr %37, align 8, !tbaa !9
  %351 = getelementptr inbounds i64, ptr %349, i64 %350
  %352 = load i64, ptr %351, align 8, !tbaa !9
  %353 = load ptr, ptr %28, align 8, !tbaa !5
  %354 = load i64, ptr %37, align 8, !tbaa !9
  %355 = getelementptr inbounds i64, ptr %353, i64 %354
  %356 = load i64, ptr %355, align 8, !tbaa !9
  %357 = sub nsw i64 %352, %356
  %358 = load i64, ptr %43, align 8, !tbaa !9
  %359 = sub nsw i64 %358, %357
  store i64 %359, ptr %43, align 8, !tbaa !9
  br label %360

360:                                              ; preds = %348
  %361 = load ptr, ptr %24, align 8, !tbaa !5
  %362 = load i64, ptr %37, align 8, !tbaa !9
  %363 = getelementptr inbounds i64, ptr %361, i64 %362
  %364 = load i64, ptr %363, align 8, !tbaa !9
  %365 = load ptr, ptr %32, align 8, !tbaa !5
  %366 = load i64, ptr %18, align 8, !tbaa !9
  %367 = getelementptr inbounds i64, ptr %365, i64 %366
  %368 = load i64, ptr %367, align 8, !tbaa !9
  %369 = add nsw i64 %368, %364
  store i64 %369, ptr %367, align 8, !tbaa !9
  %370 = load ptr, ptr %24, align 8, !tbaa !5
  %371 = load i64, ptr %37, align 8, !tbaa !9
  %372 = getelementptr inbounds i64, ptr %370, i64 %371
  %373 = load i64, ptr %372, align 8, !tbaa !9
  %374 = load ptr, ptr %32, align 8, !tbaa !5
  %375 = load i64, ptr %17, align 8, !tbaa !9
  %376 = getelementptr inbounds i64, ptr %374, i64 %375
  %377 = load i64, ptr %376, align 8, !tbaa !9
  %378 = sub nsw i64 %377, %373
  store i64 %378, ptr %376, align 8, !tbaa !9
  br label %379

379:                                              ; preds = %360
  br label %380

380:                                              ; preds = %379
  %381 = load i64, ptr %43, align 8, !tbaa !9
  %382 = load i64, ptr %39, align 8, !tbaa !9
  %383 = icmp slt i64 %381, %382
  br i1 %383, label %384, label %416

384:                                              ; preds = %380
  %385 = load ptr, ptr %7, align 8, !tbaa !5
  %386 = getelementptr inbounds i64, ptr %385, i64 0
  %387 = load i64, ptr %386, align 8, !tbaa !9
  %388 = load ptr, ptr %32, align 8, !tbaa !5
  %389 = getelementptr inbounds i64, ptr %388, i64 0
  %390 = load i64, ptr %389, align 8, !tbaa !9
  %391 = sub nsw i64 %387, %390
  %392 = icmp sgt i64 %391, 0
  br i1 %392, label %393, label %401

393:                                              ; preds = %384
  %394 = load ptr, ptr %7, align 8, !tbaa !5
  %395 = getelementptr inbounds i64, ptr %394, i64 0
  %396 = load i64, ptr %395, align 8, !tbaa !9
  %397 = load ptr, ptr %32, align 8, !tbaa !5
  %398 = getelementptr inbounds i64, ptr %397, i64 0
  %399 = load i64, ptr %398, align 8, !tbaa !9
  %400 = sub nsw i64 %396, %399
  br label %410

401:                                              ; preds = %384
  %402 = load ptr, ptr %7, align 8, !tbaa !5
  %403 = getelementptr inbounds i64, ptr %402, i64 0
  %404 = load i64, ptr %403, align 8, !tbaa !9
  %405 = load ptr, ptr %32, align 8, !tbaa !5
  %406 = getelementptr inbounds i64, ptr %405, i64 0
  %407 = load i64, ptr %406, align 8, !tbaa !9
  %408 = sub nsw i64 %404, %407
  %409 = sub nsw i64 0, %408
  br label %410

410:                                              ; preds = %401, %393
  %411 = phi i64 [ %400, %393 ], [ %409, %401 ]
  %412 = load i64, ptr %41, align 8, !tbaa !9
  %413 = load i64, ptr %45, align 8, !tbaa !9
  %414 = add nsw i64 %412, %413
  %415 = icmp sle i64 %411, %414
  br i1 %415, label %450, label %416

416:                                              ; preds = %410, %380
  %417 = load i64, ptr %43, align 8, !tbaa !9
  %418 = load i64, ptr %39, align 8, !tbaa !9
  %419 = icmp eq i64 %417, %418
  br i1 %419, label %420, label %480

420:                                              ; preds = %416
  %421 = load ptr, ptr %7, align 8, !tbaa !5
  %422 = getelementptr inbounds i64, ptr %421, i64 0
  %423 = load i64, ptr %422, align 8, !tbaa !9
  %424 = load ptr, ptr %32, align 8, !tbaa !5
  %425 = getelementptr inbounds i64, ptr %424, i64 0
  %426 = load i64, ptr %425, align 8, !tbaa !9
  %427 = sub nsw i64 %423, %426
  %428 = icmp sgt i64 %427, 0
  br i1 %428, label %429, label %437

429:                                              ; preds = %420
  %430 = load ptr, ptr %7, align 8, !tbaa !5
  %431 = getelementptr inbounds i64, ptr %430, i64 0
  %432 = load i64, ptr %431, align 8, !tbaa !9
  %433 = load ptr, ptr %32, align 8, !tbaa !5
  %434 = getelementptr inbounds i64, ptr %433, i64 0
  %435 = load i64, ptr %434, align 8, !tbaa !9
  %436 = sub nsw i64 %432, %435
  br label %446

437:                                              ; preds = %420
  %438 = load ptr, ptr %7, align 8, !tbaa !5
  %439 = getelementptr inbounds i64, ptr %438, i64 0
  %440 = load i64, ptr %439, align 8, !tbaa !9
  %441 = load ptr, ptr %32, align 8, !tbaa !5
  %442 = getelementptr inbounds i64, ptr %441, i64 0
  %443 = load i64, ptr %442, align 8, !tbaa !9
  %444 = sub nsw i64 %440, %443
  %445 = sub nsw i64 0, %444
  br label %446

446:                                              ; preds = %437, %429
  %447 = phi i64 [ %436, %429 ], [ %445, %437 ]
  %448 = load i64, ptr %40, align 8, !tbaa !9
  %449 = icmp slt i64 %447, %448
  br i1 %449, label %450, label %480

450:                                              ; preds = %446, %410
  %451 = load i64, ptr %43, align 8, !tbaa !9
  store i64 %451, ptr %39, align 8, !tbaa !9
  %452 = load ptr, ptr %7, align 8, !tbaa !5
  %453 = getelementptr inbounds i64, ptr %452, i64 0
  %454 = load i64, ptr %453, align 8, !tbaa !9
  %455 = load ptr, ptr %32, align 8, !tbaa !5
  %456 = getelementptr inbounds i64, ptr %455, i64 0
  %457 = load i64, ptr %456, align 8, !tbaa !9
  %458 = sub nsw i64 %454, %457
  %459 = icmp sgt i64 %458, 0
  br i1 %459, label %460, label %468

460:                                              ; preds = %450
  %461 = load ptr, ptr %7, align 8, !tbaa !5
  %462 = getelementptr inbounds i64, ptr %461, i64 0
  %463 = load i64, ptr %462, align 8, !tbaa !9
  %464 = load ptr, ptr %32, align 8, !tbaa !5
  %465 = getelementptr inbounds i64, ptr %464, i64 0
  %466 = load i64, ptr %465, align 8, !tbaa !9
  %467 = sub nsw i64 %463, %466
  br label %477

468:                                              ; preds = %450
  %469 = load ptr, ptr %7, align 8, !tbaa !5
  %470 = getelementptr inbounds i64, ptr %469, i64 0
  %471 = load i64, ptr %470, align 8, !tbaa !9
  %472 = load ptr, ptr %32, align 8, !tbaa !5
  %473 = getelementptr inbounds i64, ptr %472, i64 0
  %474 = load i64, ptr %473, align 8, !tbaa !9
  %475 = sub nsw i64 %471, %474
  %476 = sub nsw i64 0, %475
  br label %477

477:                                              ; preds = %468, %460
  %478 = phi i64 [ %467, %460 ], [ %476, %468 ]
  store i64 %478, ptr %40, align 8, !tbaa !9
  %479 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %479, ptr %44, align 8, !tbaa !9
  br label %520

480:                                              ; preds = %446, %416
  %481 = load i64, ptr %16, align 8, !tbaa !9
  %482 = load i64, ptr %44, align 8, !tbaa !9
  %483 = sub nsw i64 %481, %482
  %484 = load i64, ptr %21, align 8, !tbaa !9
  %485 = icmp sgt i64 %483, %484
  br i1 %485, label %486, label %519

486:                                              ; preds = %480
  %487 = load ptr, ptr %29, align 8, !tbaa !5
  %488 = load i64, ptr %37, align 8, !tbaa !9
  %489 = getelementptr inbounds i64, ptr %487, i64 %488
  %490 = load i64, ptr %489, align 8, !tbaa !9
  %491 = load ptr, ptr %28, align 8, !tbaa !5
  %492 = load i64, ptr %37, align 8, !tbaa !9
  %493 = getelementptr inbounds i64, ptr %491, i64 %492
  %494 = load i64, ptr %493, align 8, !tbaa !9
  %495 = sub nsw i64 %490, %494
  %496 = load i64, ptr %43, align 8, !tbaa !9
  %497 = add nsw i64 %496, %495
  store i64 %497, ptr %43, align 8, !tbaa !9
  br label %498

498:                                              ; preds = %486
  %499 = load ptr, ptr %24, align 8, !tbaa !5
  %500 = load i64, ptr %37, align 8, !tbaa !9
  %501 = getelementptr inbounds i64, ptr %499, i64 %500
  %502 = load i64, ptr %501, align 8, !tbaa !9
  %503 = load ptr, ptr %32, align 8, !tbaa !5
  %504 = load i64, ptr %17, align 8, !tbaa !9
  %505 = getelementptr inbounds i64, ptr %503, i64 %504
  %506 = load i64, ptr %505, align 8, !tbaa !9
  %507 = add nsw i64 %506, %502
  store i64 %507, ptr %505, align 8, !tbaa !9
  %508 = load ptr, ptr %24, align 8, !tbaa !5
  %509 = load i64, ptr %37, align 8, !tbaa !9
  %510 = getelementptr inbounds i64, ptr %508, i64 %509
  %511 = load i64, ptr %510, align 8, !tbaa !9
  %512 = load ptr, ptr %32, align 8, !tbaa !5
  %513 = load i64, ptr %18, align 8, !tbaa !9
  %514 = getelementptr inbounds i64, ptr %512, i64 %513
  %515 = load i64, ptr %514, align 8, !tbaa !9
  %516 = sub nsw i64 %515, %511
  store i64 %516, ptr %514, align 8, !tbaa !9
  br label %517

517:                                              ; preds = %498
  br label %518

518:                                              ; preds = %517
  br label %817

519:                                              ; preds = %480
  br label %520

520:                                              ; preds = %519, %477
  %521 = load i64, ptr %18, align 8, !tbaa !9
  %522 = load ptr, ptr %27, align 8, !tbaa !5
  %523 = load i64, ptr %37, align 8, !tbaa !9
  %524 = getelementptr inbounds i64, ptr %522, i64 %523
  store i64 %521, ptr %524, align 8, !tbaa !9
  %525 = load i64, ptr %16, align 8, !tbaa !9
  %526 = load ptr, ptr %33, align 8, !tbaa !5
  %527 = load i64, ptr %37, align 8, !tbaa !9
  %528 = getelementptr inbounds i64, ptr %526, i64 %527
  store i64 %525, ptr %528, align 8, !tbaa !9
  %529 = load i64, ptr %37, align 8, !tbaa !9
  %530 = load ptr, ptr %34, align 8, !tbaa !5
  %531 = load i64, ptr %16, align 8, !tbaa !9
  %532 = getelementptr inbounds i64, ptr %530, i64 %531
  store i64 %529, ptr %532, align 8, !tbaa !9
  %533 = load ptr, ptr %5, align 8, !tbaa !5
  %534 = getelementptr inbounds %struct.controldef, ptr %533, i32 0, i32 1
  %535 = load i64, ptr %534, align 8, !tbaa !25
  %536 = and i64 %535, 32
  %537 = icmp ne i64 %536, 0
  br i1 %537, label %538, label %562

538:                                              ; preds = %520
  %539 = load i64, ptr %37, align 8, !tbaa !9
  %540 = load i64, ptr %17, align 8, !tbaa !9
  %541 = load ptr, ptr %29, align 8, !tbaa !5
  %542 = load i64, ptr %37, align 8, !tbaa !9
  %543 = getelementptr inbounds i64, ptr %541, i64 %542
  %544 = load i64, ptr %543, align 8, !tbaa !9
  %545 = load ptr, ptr %28, align 8, !tbaa !5
  %546 = load i64, ptr %37, align 8, !tbaa !9
  %547 = getelementptr inbounds i64, ptr %545, i64 %546
  %548 = load i64, ptr %547, align 8, !tbaa !9
  %549 = sub nsw i64 %544, %548
  %550 = load ptr, ptr %24, align 8, !tbaa !5
  %551 = load i64, ptr %37, align 8, !tbaa !9
  %552 = getelementptr inbounds i64, ptr %550, i64 %551
  %553 = load i64, ptr %552, align 8, !tbaa !9
  %554 = load i64, ptr %43, align 8, !tbaa !9
  %555 = load ptr, ptr %32, align 8, !tbaa !5
  %556 = getelementptr inbounds i64, ptr %555, i64 0
  %557 = load i64, ptr %556, align 8, !tbaa !9
  %558 = load ptr, ptr %32, align 8, !tbaa !5
  %559 = getelementptr inbounds i64, ptr %558, i64 1
  %560 = load i64, ptr %559, align 8, !tbaa !9
  %561 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, i64 noundef %539, i64 noundef %540, i64 noundef %549, i64 noundef %553, i64 noundef %554, i64 noundef %557, i64 noundef %560)
  br label %562

562:                                              ; preds = %538, %520
  br label %563

563:                                              ; preds = %562
  %564 = load ptr, ptr %28, align 8, !tbaa !5
  %565 = load i64, ptr %37, align 8, !tbaa !9
  %566 = getelementptr inbounds i64, ptr %564, i64 %565
  %567 = load i64, ptr %566, align 8, !tbaa !9
  store i64 %567, ptr %22, align 8, !tbaa !9
  %568 = load ptr, ptr %29, align 8, !tbaa !5
  %569 = load i64, ptr %37, align 8, !tbaa !9
  %570 = getelementptr inbounds i64, ptr %568, i64 %569
  %571 = load i64, ptr %570, align 8, !tbaa !9
  %572 = load ptr, ptr %28, align 8, !tbaa !5
  %573 = load i64, ptr %37, align 8, !tbaa !9
  %574 = getelementptr inbounds i64, ptr %572, i64 %573
  store i64 %571, ptr %574, align 8, !tbaa !9
  %575 = load i64, ptr %22, align 8, !tbaa !9
  %576 = load ptr, ptr %29, align 8, !tbaa !5
  %577 = load i64, ptr %37, align 8, !tbaa !9
  %578 = getelementptr inbounds i64, ptr %576, i64 %577
  store i64 %575, ptr %578, align 8, !tbaa !9
  br label %579

579:                                              ; preds = %563
  br label %580

580:                                              ; preds = %579
  %581 = load ptr, ptr %29, align 8, !tbaa !5
  %582 = load i64, ptr %37, align 8, !tbaa !9
  %583 = getelementptr inbounds i64, ptr %581, i64 %582
  %584 = load i64, ptr %583, align 8, !tbaa !9
  %585 = icmp eq i64 %584, 0
  br i1 %585, label %586, label %625

586:                                              ; preds = %580
  %587 = load ptr, ptr %23, align 8, !tbaa !5
  %588 = load i64, ptr %37, align 8, !tbaa !9
  %589 = getelementptr inbounds i64, ptr %587, i64 %588
  %590 = load i64, ptr %589, align 8, !tbaa !9
  %591 = load ptr, ptr %23, align 8, !tbaa !5
  %592 = load i64, ptr %37, align 8, !tbaa !9
  %593 = add nsw i64 %592, 1
  %594 = getelementptr inbounds i64, ptr %591, i64 %593
  %595 = load i64, ptr %594, align 8, !tbaa !9
  %596 = icmp slt i64 %590, %595
  br i1 %596, label %597, label %625

597:                                              ; preds = %586
  br label %598

598:                                              ; preds = %597
  %599 = load ptr, ptr %31, align 8, !tbaa !5
  %600 = load i64, ptr %15, align 8, !tbaa !9
  %601 = add nsw i64 %600, -1
  store i64 %601, ptr %15, align 8, !tbaa !9
  %602 = getelementptr inbounds i64, ptr %599, i64 %601
  %603 = load i64, ptr %602, align 8, !tbaa !9
  %604 = load ptr, ptr %31, align 8, !tbaa !5
  %605 = load ptr, ptr %30, align 8, !tbaa !5
  %606 = load i64, ptr %37, align 8, !tbaa !9
  %607 = getelementptr inbounds i64, ptr %605, i64 %606
  %608 = load i64, ptr %607, align 8, !tbaa !9
  %609 = getelementptr inbounds i64, ptr %604, i64 %608
  store i64 %603, ptr %609, align 8, !tbaa !9
  %610 = load ptr, ptr %30, align 8, !tbaa !5
  %611 = load i64, ptr %37, align 8, !tbaa !9
  %612 = getelementptr inbounds i64, ptr %610, i64 %611
  %613 = load i64, ptr %612, align 8, !tbaa !9
  %614 = load ptr, ptr %30, align 8, !tbaa !5
  %615 = load ptr, ptr %31, align 8, !tbaa !5
  %616 = load i64, ptr %15, align 8, !tbaa !9
  %617 = getelementptr inbounds i64, ptr %615, i64 %616
  %618 = load i64, ptr %617, align 8, !tbaa !9
  %619 = getelementptr inbounds i64, ptr %614, i64 %618
  store i64 %613, ptr %619, align 8, !tbaa !9
  %620 = load ptr, ptr %30, align 8, !tbaa !5
  %621 = load i64, ptr %37, align 8, !tbaa !9
  %622 = getelementptr inbounds i64, ptr %620, i64 %621
  store i64 -1, ptr %622, align 8, !tbaa !9
  br label %623

623:                                              ; preds = %598
  br label %624

624:                                              ; preds = %623
  br label %625

625:                                              ; preds = %624, %586, %580
  %626 = load ptr, ptr %23, align 8, !tbaa !5
  %627 = load i64, ptr %37, align 8, !tbaa !9
  %628 = getelementptr inbounds i64, ptr %626, i64 %627
  %629 = load i64, ptr %628, align 8, !tbaa !9
  store i64 %629, ptr %11, align 8, !tbaa !9
  br label %630

630:                                              ; preds = %810, %625
  %631 = load i64, ptr %11, align 8, !tbaa !9
  %632 = load ptr, ptr %23, align 8, !tbaa !5
  %633 = load i64, ptr %37, align 8, !tbaa !9
  %634 = add nsw i64 %633, 1
  %635 = getelementptr inbounds i64, ptr %632, i64 %634
  %636 = load i64, ptr %635, align 8, !tbaa !9
  %637 = icmp slt i64 %631, %636
  br i1 %637, label %638, label %813

638:                                              ; preds = %630
  %639 = load ptr, ptr %25, align 8, !tbaa !5
  %640 = load i64, ptr %11, align 8, !tbaa !9
  %641 = getelementptr inbounds i64, ptr %639, i64 %640
  %642 = load i64, ptr %641, align 8, !tbaa !9
  store i64 %642, ptr %12, align 8, !tbaa !9
  %643 = load ptr, ptr %29, align 8, !tbaa !5
  %644 = load i64, ptr %12, align 8, !tbaa !9
  %645 = getelementptr inbounds i64, ptr %643, i64 %644
  %646 = load i64, ptr %645, align 8, !tbaa !9
  %647 = load ptr, ptr %28, align 8, !tbaa !5
  %648 = load i64, ptr %12, align 8, !tbaa !9
  %649 = getelementptr inbounds i64, ptr %647, i64 %648
  %650 = load i64, ptr %649, align 8, !tbaa !9
  %651 = sub nsw i64 %646, %650
  store i64 %651, ptr %38, align 8, !tbaa !9
  %652 = load i64, ptr %18, align 8, !tbaa !9
  %653 = load ptr, ptr %27, align 8, !tbaa !5
  %654 = load i64, ptr %12, align 8, !tbaa !9
  %655 = getelementptr inbounds i64, ptr %653, i64 %654
  %656 = load i64, ptr %655, align 8, !tbaa !9
  %657 = icmp eq i64 %652, %656
  br i1 %657, label %658, label %663

658:                                              ; preds = %638
  %659 = load ptr, ptr %26, align 8, !tbaa !5
  %660 = load i64, ptr %11, align 8, !tbaa !9
  %661 = getelementptr inbounds i64, ptr %659, i64 %660
  %662 = load i64, ptr %661, align 8, !tbaa !9
  br label %669

663:                                              ; preds = %638
  %664 = load ptr, ptr %26, align 8, !tbaa !5
  %665 = load i64, ptr %11, align 8, !tbaa !9
  %666 = getelementptr inbounds i64, ptr %664, i64 %665
  %667 = load i64, ptr %666, align 8, !tbaa !9
  %668 = sub nsw i64 0, %667
  br label %669

669:                                              ; preds = %663, %658
  %670 = phi i64 [ %662, %658 ], [ %668, %663 ]
  store i64 %670, ptr %13, align 8, !tbaa !9
  br label %671

671:                                              ; preds = %669
  %672 = load i64, ptr %13, align 8, !tbaa !9
  %673 = load ptr, ptr %28, align 8, !tbaa !5
  %674 = load i64, ptr %12, align 8, !tbaa !9
  %675 = getelementptr inbounds i64, ptr %673, i64 %674
  %676 = load i64, ptr %675, align 8, !tbaa !9
  %677 = add nsw i64 %676, %672
  store i64 %677, ptr %675, align 8, !tbaa !9
  %678 = load i64, ptr %13, align 8, !tbaa !9
  %679 = load ptr, ptr %29, align 8, !tbaa !5
  %680 = load i64, ptr %12, align 8, !tbaa !9
  %681 = getelementptr inbounds i64, ptr %679, i64 %680
  %682 = load i64, ptr %681, align 8, !tbaa !9
  %683 = sub nsw i64 %682, %678
  store i64 %683, ptr %681, align 8, !tbaa !9
  br label %684

684:                                              ; preds = %671
  br label %685

685:                                              ; preds = %684
  %686 = load ptr, ptr %30, align 8, !tbaa !5
  %687 = load i64, ptr %12, align 8, !tbaa !9
  %688 = getelementptr inbounds i64, ptr %686, i64 %687
  %689 = load i64, ptr %688, align 8, !tbaa !9
  %690 = icmp ne i64 %689, -1
  br i1 %690, label %691, label %766

691:                                              ; preds = %685
  %692 = load ptr, ptr %29, align 8, !tbaa !5
  %693 = load i64, ptr %12, align 8, !tbaa !9
  %694 = getelementptr inbounds i64, ptr %692, i64 %693
  %695 = load i64, ptr %694, align 8, !tbaa !9
  %696 = icmp eq i64 %695, 0
  br i1 %696, label %697, label %740

697:                                              ; preds = %691
  br label %698

698:                                              ; preds = %697
  %699 = load ptr, ptr %31, align 8, !tbaa !5
  %700 = load i64, ptr %15, align 8, !tbaa !9
  %701 = add nsw i64 %700, -1
  store i64 %701, ptr %15, align 8, !tbaa !9
  %702 = getelementptr inbounds i64, ptr %699, i64 %701
  %703 = load i64, ptr %702, align 8, !tbaa !9
  %704 = load ptr, ptr %31, align 8, !tbaa !5
  %705 = load ptr, ptr %30, align 8, !tbaa !5
  %706 = load i64, ptr %12, align 8, !tbaa !9
  %707 = getelementptr inbounds i64, ptr %705, i64 %706
  %708 = load i64, ptr %707, align 8, !tbaa !9
  %709 = getelementptr inbounds i64, ptr %704, i64 %708
  store i64 %703, ptr %709, align 8, !tbaa !9
  %710 = load ptr, ptr %30, align 8, !tbaa !5
  %711 = load i64, ptr %12, align 8, !tbaa !9
  %712 = getelementptr inbounds i64, ptr %710, i64 %711
  %713 = load i64, ptr %712, align 8, !tbaa !9
  %714 = load ptr, ptr %30, align 8, !tbaa !5
  %715 = load ptr, ptr %31, align 8, !tbaa !5
  %716 = load i64, ptr %15, align 8, !tbaa !9
  %717 = getelementptr inbounds i64, ptr %715, i64 %716
  %718 = load i64, ptr %717, align 8, !tbaa !9
  %719 = getelementptr inbounds i64, ptr %714, i64 %718
  store i64 %713, ptr %719, align 8, !tbaa !9
  %720 = load ptr, ptr %30, align 8, !tbaa !5
  %721 = load i64, ptr %12, align 8, !tbaa !9
  %722 = getelementptr inbounds i64, ptr %720, i64 %721
  store i64 -1, ptr %722, align 8, !tbaa !9
  br label %723

723:                                              ; preds = %698
  br label %724

724:                                              ; preds = %723
  %725 = load ptr, ptr %33, align 8, !tbaa !5
  %726 = load i64, ptr %12, align 8, !tbaa !9
  %727 = getelementptr inbounds i64, ptr %725, i64 %726
  %728 = load i64, ptr %727, align 8, !tbaa !9
  %729 = icmp eq i64 %728, -1
  br i1 %729, label %730, label %739

730:                                              ; preds = %724
  %731 = load ptr, ptr %27, align 8, !tbaa !5
  %732 = load i64, ptr %12, align 8, !tbaa !9
  %733 = getelementptr inbounds i64, ptr %731, i64 %732
  %734 = load i64, ptr %733, align 8, !tbaa !9
  %735 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 %734
  %736 = load i64, ptr %12, align 8, !tbaa !9
  %737 = load i64, ptr %38, align 8, !tbaa !9
  %738 = call i64 @libmetis__PQueueDelete(ptr noundef %735, i64 noundef %736, i64 noundef %737)
  br label %739

739:                                              ; preds = %730, %724
  br label %765

740:                                              ; preds = %691
  %741 = load ptr, ptr %33, align 8, !tbaa !5
  %742 = load i64, ptr %12, align 8, !tbaa !9
  %743 = getelementptr inbounds i64, ptr %741, i64 %742
  %744 = load i64, ptr %743, align 8, !tbaa !9
  %745 = icmp eq i64 %744, -1
  br i1 %745, label %746, label %764

746:                                              ; preds = %740
  %747 = load ptr, ptr %27, align 8, !tbaa !5
  %748 = load i64, ptr %12, align 8, !tbaa !9
  %749 = getelementptr inbounds i64, ptr %747, i64 %748
  %750 = load i64, ptr %749, align 8, !tbaa !9
  %751 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 %750
  %752 = load i64, ptr %12, align 8, !tbaa !9
  %753 = load i64, ptr %38, align 8, !tbaa !9
  %754 = load ptr, ptr %29, align 8, !tbaa !5
  %755 = load i64, ptr %12, align 8, !tbaa !9
  %756 = getelementptr inbounds i64, ptr %754, i64 %755
  %757 = load i64, ptr %756, align 8, !tbaa !9
  %758 = load ptr, ptr %28, align 8, !tbaa !5
  %759 = load i64, ptr %12, align 8, !tbaa !9
  %760 = getelementptr inbounds i64, ptr %758, i64 %759
  %761 = load i64, ptr %760, align 8, !tbaa !9
  %762 = sub nsw i64 %757, %761
  %763 = call i64 @libmetis__PQueueUpdate(ptr noundef %751, i64 noundef %752, i64 noundef %753, i64 noundef %762)
  br label %764

764:                                              ; preds = %746, %740
  br label %765

765:                                              ; preds = %764, %739
  br label %809

766:                                              ; preds = %685
  %767 = load ptr, ptr %29, align 8, !tbaa !5
  %768 = load i64, ptr %12, align 8, !tbaa !9
  %769 = getelementptr inbounds i64, ptr %767, i64 %768
  %770 = load i64, ptr %769, align 8, !tbaa !9
  %771 = icmp sgt i64 %770, 0
  br i1 %771, label %772, label %808

772:                                              ; preds = %766
  br label %773

773:                                              ; preds = %772
  %774 = load i64, ptr %12, align 8, !tbaa !9
  %775 = load ptr, ptr %31, align 8, !tbaa !5
  %776 = load i64, ptr %15, align 8, !tbaa !9
  %777 = getelementptr inbounds i64, ptr %775, i64 %776
  store i64 %774, ptr %777, align 8, !tbaa !9
  %778 = load i64, ptr %15, align 8, !tbaa !9
  %779 = add nsw i64 %778, 1
  store i64 %779, ptr %15, align 8, !tbaa !9
  %780 = load ptr, ptr %30, align 8, !tbaa !5
  %781 = load i64, ptr %12, align 8, !tbaa !9
  %782 = getelementptr inbounds i64, ptr %780, i64 %781
  store i64 %778, ptr %782, align 8, !tbaa !9
  br label %783

783:                                              ; preds = %773
  br label %784

784:                                              ; preds = %783
  %785 = load ptr, ptr %33, align 8, !tbaa !5
  %786 = load i64, ptr %12, align 8, !tbaa !9
  %787 = getelementptr inbounds i64, ptr %785, i64 %786
  %788 = load i64, ptr %787, align 8, !tbaa !9
  %789 = icmp eq i64 %788, -1
  br i1 %789, label %790, label %807

790:                                              ; preds = %784
  %791 = load ptr, ptr %27, align 8, !tbaa !5
  %792 = load i64, ptr %12, align 8, !tbaa !9
  %793 = getelementptr inbounds i64, ptr %791, i64 %792
  %794 = load i64, ptr %793, align 8, !tbaa !9
  %795 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 %794
  %796 = load i64, ptr %12, align 8, !tbaa !9
  %797 = load ptr, ptr %29, align 8, !tbaa !5
  %798 = load i64, ptr %12, align 8, !tbaa !9
  %799 = getelementptr inbounds i64, ptr %797, i64 %798
  %800 = load i64, ptr %799, align 8, !tbaa !9
  %801 = load ptr, ptr %28, align 8, !tbaa !5
  %802 = load i64, ptr %12, align 8, !tbaa !9
  %803 = getelementptr inbounds i64, ptr %801, i64 %802
  %804 = load i64, ptr %803, align 8, !tbaa !9
  %805 = sub nsw i64 %800, %804
  %806 = call i64 @libmetis__PQueueInsert(ptr noundef %795, i64 noundef %796, i64 noundef %805)
  br label %807

807:                                              ; preds = %790, %784
  br label %808

808:                                              ; preds = %807, %766
  br label %809

809:                                              ; preds = %808, %765
  br label %810

810:                                              ; preds = %809
  %811 = load i64, ptr %11, align 8, !tbaa !9
  %812 = add nsw i64 %811, 1
  store i64 %812, ptr %11, align 8, !tbaa !9
  br label %630, !llvm.loop !34

813:                                              ; preds = %630
  br label %814

814:                                              ; preds = %813
  %815 = load i64, ptr %16, align 8, !tbaa !9
  %816 = add nsw i64 %815, 1
  store i64 %816, ptr %16, align 8, !tbaa !9
  br label %317, !llvm.loop !35

817:                                              ; preds = %518, %347, %317
  store i64 0, ptr %9, align 8, !tbaa !9
  br label %818

818:                                              ; preds = %829, %817
  %819 = load i64, ptr %9, align 8, !tbaa !9
  %820 = load i64, ptr %16, align 8, !tbaa !9
  %821 = icmp slt i64 %819, %820
  br i1 %821, label %822, label %832

822:                                              ; preds = %818
  %823 = load ptr, ptr %33, align 8, !tbaa !5
  %824 = load ptr, ptr %34, align 8, !tbaa !5
  %825 = load i64, ptr %9, align 8, !tbaa !9
  %826 = getelementptr inbounds i64, ptr %824, i64 %825
  %827 = load i64, ptr %826, align 8, !tbaa !9
  %828 = getelementptr inbounds i64, ptr %823, i64 %827
  store i64 -1, ptr %828, align 8, !tbaa !9
  br label %829

829:                                              ; preds = %822
  %830 = load i64, ptr %9, align 8, !tbaa !9
  %831 = add nsw i64 %830, 1
  store i64 %831, ptr %9, align 8, !tbaa !9
  br label %818, !llvm.loop !36

832:                                              ; preds = %818
  %833 = load i64, ptr %16, align 8, !tbaa !9
  %834 = add nsw i64 %833, -1
  store i64 %834, ptr %16, align 8, !tbaa !9
  br label %835

835:                                              ; preds = %1091, %832
  %836 = load i64, ptr %16, align 8, !tbaa !9
  %837 = load i64, ptr %44, align 8, !tbaa !9
  %838 = icmp sgt i64 %836, %837
  br i1 %838, label %839, label %1094

839:                                              ; preds = %835
  %840 = load ptr, ptr %34, align 8, !tbaa !5
  %841 = load i64, ptr %16, align 8, !tbaa !9
  %842 = getelementptr inbounds i64, ptr %840, i64 %841
  %843 = load i64, ptr %842, align 8, !tbaa !9
  store i64 %843, ptr %37, align 8, !tbaa !9
  %844 = load ptr, ptr %27, align 8, !tbaa !5
  %845 = load i64, ptr %37, align 8, !tbaa !9
  %846 = getelementptr inbounds i64, ptr %844, i64 %845
  %847 = load i64, ptr %846, align 8, !tbaa !9
  %848 = add nsw i64 %847, 1
  %849 = srem i64 %848, 2
  %850 = load ptr, ptr %27, align 8, !tbaa !5
  %851 = load i64, ptr %37, align 8, !tbaa !9
  %852 = getelementptr inbounds i64, ptr %850, i64 %851
  store i64 %849, ptr %852, align 8, !tbaa !9
  store i64 %849, ptr %18, align 8, !tbaa !9
  br label %853

853:                                              ; preds = %839
  %854 = load ptr, ptr %28, align 8, !tbaa !5
  %855 = load i64, ptr %37, align 8, !tbaa !9
  %856 = getelementptr inbounds i64, ptr %854, i64 %855
  %857 = load i64, ptr %856, align 8, !tbaa !9
  store i64 %857, ptr %22, align 8, !tbaa !9
  %858 = load ptr, ptr %29, align 8, !tbaa !5
  %859 = load i64, ptr %37, align 8, !tbaa !9
  %860 = getelementptr inbounds i64, ptr %858, i64 %859
  %861 = load i64, ptr %860, align 8, !tbaa !9
  %862 = load ptr, ptr %28, align 8, !tbaa !5
  %863 = load i64, ptr %37, align 8, !tbaa !9
  %864 = getelementptr inbounds i64, ptr %862, i64 %863
  store i64 %861, ptr %864, align 8, !tbaa !9
  %865 = load i64, ptr %22, align 8, !tbaa !9
  %866 = load ptr, ptr %29, align 8, !tbaa !5
  %867 = load i64, ptr %37, align 8, !tbaa !9
  %868 = getelementptr inbounds i64, ptr %866, i64 %867
  store i64 %865, ptr %868, align 8, !tbaa !9
  br label %869

869:                                              ; preds = %853
  br label %870

870:                                              ; preds = %869
  %871 = load ptr, ptr %29, align 8, !tbaa !5
  %872 = load i64, ptr %37, align 8, !tbaa !9
  %873 = getelementptr inbounds i64, ptr %871, i64 %872
  %874 = load i64, ptr %873, align 8, !tbaa !9
  %875 = icmp eq i64 %874, 0
  br i1 %875, label %876, label %921

876:                                              ; preds = %870
  %877 = load ptr, ptr %30, align 8, !tbaa !5
  %878 = load i64, ptr %37, align 8, !tbaa !9
  %879 = getelementptr inbounds i64, ptr %877, i64 %878
  %880 = load i64, ptr %879, align 8, !tbaa !9
  %881 = icmp ne i64 %880, -1
  br i1 %881, label %882, label %921

882:                                              ; preds = %876
  %883 = load ptr, ptr %23, align 8, !tbaa !5
  %884 = load i64, ptr %37, align 8, !tbaa !9
  %885 = getelementptr inbounds i64, ptr %883, i64 %884
  %886 = load i64, ptr %885, align 8, !tbaa !9
  %887 = load ptr, ptr %23, align 8, !tbaa !5
  %888 = load i64, ptr %37, align 8, !tbaa !9
  %889 = add nsw i64 %888, 1
  %890 = getelementptr inbounds i64, ptr %887, i64 %889
  %891 = load i64, ptr %890, align 8, !tbaa !9
  %892 = icmp slt i64 %886, %891
  br i1 %892, label %893, label %921

893:                                              ; preds = %882
  br label %894

894:                                              ; preds = %893
  %895 = load ptr, ptr %31, align 8, !tbaa !5
  %896 = load i64, ptr %15, align 8, !tbaa !9
  %897 = add nsw i64 %896, -1
  store i64 %897, ptr %15, align 8, !tbaa !9
  %898 = getelementptr inbounds i64, ptr %895, i64 %897
  %899 = load i64, ptr %898, align 8, !tbaa !9
  %900 = load ptr, ptr %31, align 8, !tbaa !5
  %901 = load ptr, ptr %30, align 8, !tbaa !5
  %902 = load i64, ptr %37, align 8, !tbaa !9
  %903 = getelementptr inbounds i64, ptr %901, i64 %902
  %904 = load i64, ptr %903, align 8, !tbaa !9
  %905 = getelementptr inbounds i64, ptr %900, i64 %904
  store i64 %899, ptr %905, align 8, !tbaa !9
  %906 = load ptr, ptr %30, align 8, !tbaa !5
  %907 = load i64, ptr %37, align 8, !tbaa !9
  %908 = getelementptr inbounds i64, ptr %906, i64 %907
  %909 = load i64, ptr %908, align 8, !tbaa !9
  %910 = load ptr, ptr %30, align 8, !tbaa !5
  %911 = load ptr, ptr %31, align 8, !tbaa !5
  %912 = load i64, ptr %15, align 8, !tbaa !9
  %913 = getelementptr inbounds i64, ptr %911, i64 %912
  %914 = load i64, ptr %913, align 8, !tbaa !9
  %915 = getelementptr inbounds i64, ptr %910, i64 %914
  store i64 %909, ptr %915, align 8, !tbaa !9
  %916 = load ptr, ptr %30, align 8, !tbaa !5
  %917 = load i64, ptr %37, align 8, !tbaa !9
  %918 = getelementptr inbounds i64, ptr %916, i64 %917
  store i64 -1, ptr %918, align 8, !tbaa !9
  br label %919

919:                                              ; preds = %894
  br label %920

920:                                              ; preds = %919
  br label %947

921:                                              ; preds = %882, %876, %870
  %922 = load ptr, ptr %29, align 8, !tbaa !5
  %923 = load i64, ptr %37, align 8, !tbaa !9
  %924 = getelementptr inbounds i64, ptr %922, i64 %923
  %925 = load i64, ptr %924, align 8, !tbaa !9
  %926 = icmp sgt i64 %925, 0
  br i1 %926, label %927, label %946

927:                                              ; preds = %921
  %928 = load ptr, ptr %30, align 8, !tbaa !5
  %929 = load i64, ptr %37, align 8, !tbaa !9
  %930 = getelementptr inbounds i64, ptr %928, i64 %929
  %931 = load i64, ptr %930, align 8, !tbaa !9
  %932 = icmp eq i64 %931, -1
  br i1 %932, label %933, label %946

933:                                              ; preds = %927
  br label %934

934:                                              ; preds = %933
  %935 = load i64, ptr %37, align 8, !tbaa !9
  %936 = load ptr, ptr %31, align 8, !tbaa !5
  %937 = load i64, ptr %15, align 8, !tbaa !9
  %938 = getelementptr inbounds i64, ptr %936, i64 %937
  store i64 %935, ptr %938, align 8, !tbaa !9
  %939 = load i64, ptr %15, align 8, !tbaa !9
  %940 = add nsw i64 %939, 1
  store i64 %940, ptr %15, align 8, !tbaa !9
  %941 = load ptr, ptr %30, align 8, !tbaa !5
  %942 = load i64, ptr %37, align 8, !tbaa !9
  %943 = getelementptr inbounds i64, ptr %941, i64 %942
  store i64 %939, ptr %943, align 8, !tbaa !9
  br label %944

944:                                              ; preds = %934
  br label %945

945:                                              ; preds = %944
  br label %946

946:                                              ; preds = %945, %927, %921
  br label %947

947:                                              ; preds = %946, %920
  br label %948

948:                                              ; preds = %947
  %949 = load ptr, ptr %24, align 8, !tbaa !5
  %950 = load i64, ptr %37, align 8, !tbaa !9
  %951 = getelementptr inbounds i64, ptr %949, i64 %950
  %952 = load i64, ptr %951, align 8, !tbaa !9
  %953 = load ptr, ptr %32, align 8, !tbaa !5
  %954 = load i64, ptr %18, align 8, !tbaa !9
  %955 = getelementptr inbounds i64, ptr %953, i64 %954
  %956 = load i64, ptr %955, align 8, !tbaa !9
  %957 = add nsw i64 %956, %952
  store i64 %957, ptr %955, align 8, !tbaa !9
  %958 = load ptr, ptr %24, align 8, !tbaa !5
  %959 = load i64, ptr %37, align 8, !tbaa !9
  %960 = getelementptr inbounds i64, ptr %958, i64 %959
  %961 = load i64, ptr %960, align 8, !tbaa !9
  %962 = load ptr, ptr %32, align 8, !tbaa !5
  %963 = load i64, ptr %18, align 8, !tbaa !9
  %964 = add nsw i64 %963, 1
  %965 = srem i64 %964, 2
  %966 = getelementptr inbounds i64, ptr %962, i64 %965
  %967 = load i64, ptr %966, align 8, !tbaa !9
  %968 = sub nsw i64 %967, %961
  store i64 %968, ptr %966, align 8, !tbaa !9
  br label %969

969:                                              ; preds = %948
  br label %970

970:                                              ; preds = %969
  %971 = load ptr, ptr %23, align 8, !tbaa !5
  %972 = load i64, ptr %37, align 8, !tbaa !9
  %973 = getelementptr inbounds i64, ptr %971, i64 %972
  %974 = load i64, ptr %973, align 8, !tbaa !9
  store i64 %974, ptr %11, align 8, !tbaa !9
  br label %975

975:                                              ; preds = %1087, %970
  %976 = load i64, ptr %11, align 8, !tbaa !9
  %977 = load ptr, ptr %23, align 8, !tbaa !5
  %978 = load i64, ptr %37, align 8, !tbaa !9
  %979 = add nsw i64 %978, 1
  %980 = getelementptr inbounds i64, ptr %977, i64 %979
  %981 = load i64, ptr %980, align 8, !tbaa !9
  %982 = icmp slt i64 %976, %981
  br i1 %982, label %983, label %1090

983:                                              ; preds = %975
  %984 = load ptr, ptr %25, align 8, !tbaa !5
  %985 = load i64, ptr %11, align 8, !tbaa !9
  %986 = getelementptr inbounds i64, ptr %984, i64 %985
  %987 = load i64, ptr %986, align 8, !tbaa !9
  store i64 %987, ptr %12, align 8, !tbaa !9
  %988 = load i64, ptr %18, align 8, !tbaa !9
  %989 = load ptr, ptr %27, align 8, !tbaa !5
  %990 = load i64, ptr %12, align 8, !tbaa !9
  %991 = getelementptr inbounds i64, ptr %989, i64 %990
  %992 = load i64, ptr %991, align 8, !tbaa !9
  %993 = icmp eq i64 %988, %992
  br i1 %993, label %994, label %999

994:                                              ; preds = %983
  %995 = load ptr, ptr %26, align 8, !tbaa !5
  %996 = load i64, ptr %11, align 8, !tbaa !9
  %997 = getelementptr inbounds i64, ptr %995, i64 %996
  %998 = load i64, ptr %997, align 8, !tbaa !9
  br label %1005

999:                                              ; preds = %983
  %1000 = load ptr, ptr %26, align 8, !tbaa !5
  %1001 = load i64, ptr %11, align 8, !tbaa !9
  %1002 = getelementptr inbounds i64, ptr %1000, i64 %1001
  %1003 = load i64, ptr %1002, align 8, !tbaa !9
  %1004 = sub nsw i64 0, %1003
  br label %1005

1005:                                             ; preds = %999, %994
  %1006 = phi i64 [ %998, %994 ], [ %1004, %999 ]
  store i64 %1006, ptr %13, align 8, !tbaa !9
  br label %1007

1007:                                             ; preds = %1005
  %1008 = load i64, ptr %13, align 8, !tbaa !9
  %1009 = load ptr, ptr %28, align 8, !tbaa !5
  %1010 = load i64, ptr %12, align 8, !tbaa !9
  %1011 = getelementptr inbounds i64, ptr %1009, i64 %1010
  %1012 = load i64, ptr %1011, align 8, !tbaa !9
  %1013 = add nsw i64 %1012, %1008
  store i64 %1013, ptr %1011, align 8, !tbaa !9
  %1014 = load i64, ptr %13, align 8, !tbaa !9
  %1015 = load ptr, ptr %29, align 8, !tbaa !5
  %1016 = load i64, ptr %12, align 8, !tbaa !9
  %1017 = getelementptr inbounds i64, ptr %1015, i64 %1016
  %1018 = load i64, ptr %1017, align 8, !tbaa !9
  %1019 = sub nsw i64 %1018, %1014
  store i64 %1019, ptr %1017, align 8, !tbaa !9
  br label %1020

1020:                                             ; preds = %1007
  br label %1021

1021:                                             ; preds = %1020
  %1022 = load ptr, ptr %30, align 8, !tbaa !5
  %1023 = load i64, ptr %12, align 8, !tbaa !9
  %1024 = getelementptr inbounds i64, ptr %1022, i64 %1023
  %1025 = load i64, ptr %1024, align 8, !tbaa !9
  %1026 = icmp ne i64 %1025, -1
  br i1 %1026, label %1027, label %1061

1027:                                             ; preds = %1021
  %1028 = load ptr, ptr %29, align 8, !tbaa !5
  %1029 = load i64, ptr %12, align 8, !tbaa !9
  %1030 = getelementptr inbounds i64, ptr %1028, i64 %1029
  %1031 = load i64, ptr %1030, align 8, !tbaa !9
  %1032 = icmp eq i64 %1031, 0
  br i1 %1032, label %1033, label %1061

1033:                                             ; preds = %1027
  br label %1034

1034:                                             ; preds = %1033
  %1035 = load ptr, ptr %31, align 8, !tbaa !5
  %1036 = load i64, ptr %15, align 8, !tbaa !9
  %1037 = add nsw i64 %1036, -1
  store i64 %1037, ptr %15, align 8, !tbaa !9
  %1038 = getelementptr inbounds i64, ptr %1035, i64 %1037
  %1039 = load i64, ptr %1038, align 8, !tbaa !9
  %1040 = load ptr, ptr %31, align 8, !tbaa !5
  %1041 = load ptr, ptr %30, align 8, !tbaa !5
  %1042 = load i64, ptr %12, align 8, !tbaa !9
  %1043 = getelementptr inbounds i64, ptr %1041, i64 %1042
  %1044 = load i64, ptr %1043, align 8, !tbaa !9
  %1045 = getelementptr inbounds i64, ptr %1040, i64 %1044
  store i64 %1039, ptr %1045, align 8, !tbaa !9
  %1046 = load ptr, ptr %30, align 8, !tbaa !5
  %1047 = load i64, ptr %12, align 8, !tbaa !9
  %1048 = getelementptr inbounds i64, ptr %1046, i64 %1047
  %1049 = load i64, ptr %1048, align 8, !tbaa !9
  %1050 = load ptr, ptr %30, align 8, !tbaa !5
  %1051 = load ptr, ptr %31, align 8, !tbaa !5
  %1052 = load i64, ptr %15, align 8, !tbaa !9
  %1053 = getelementptr inbounds i64, ptr %1051, i64 %1052
  %1054 = load i64, ptr %1053, align 8, !tbaa !9
  %1055 = getelementptr inbounds i64, ptr %1050, i64 %1054
  store i64 %1049, ptr %1055, align 8, !tbaa !9
  %1056 = load ptr, ptr %30, align 8, !tbaa !5
  %1057 = load i64, ptr %12, align 8, !tbaa !9
  %1058 = getelementptr inbounds i64, ptr %1056, i64 %1057
  store i64 -1, ptr %1058, align 8, !tbaa !9
  br label %1059

1059:                                             ; preds = %1034
  br label %1060

1060:                                             ; preds = %1059
  br label %1061

1061:                                             ; preds = %1060, %1027, %1021
  %1062 = load ptr, ptr %30, align 8, !tbaa !5
  %1063 = load i64, ptr %12, align 8, !tbaa !9
  %1064 = getelementptr inbounds i64, ptr %1062, i64 %1063
  %1065 = load i64, ptr %1064, align 8, !tbaa !9
  %1066 = icmp eq i64 %1065, -1
  br i1 %1066, label %1067, label %1086

1067:                                             ; preds = %1061
  %1068 = load ptr, ptr %29, align 8, !tbaa !5
  %1069 = load i64, ptr %12, align 8, !tbaa !9
  %1070 = getelementptr inbounds i64, ptr %1068, i64 %1069
  %1071 = load i64, ptr %1070, align 8, !tbaa !9
  %1072 = icmp sgt i64 %1071, 0
  br i1 %1072, label %1073, label %1086

1073:                                             ; preds = %1067
  br label %1074

1074:                                             ; preds = %1073
  %1075 = load i64, ptr %12, align 8, !tbaa !9
  %1076 = load ptr, ptr %31, align 8, !tbaa !5
  %1077 = load i64, ptr %15, align 8, !tbaa !9
  %1078 = getelementptr inbounds i64, ptr %1076, i64 %1077
  store i64 %1075, ptr %1078, align 8, !tbaa !9
  %1079 = load i64, ptr %15, align 8, !tbaa !9
  %1080 = add nsw i64 %1079, 1
  store i64 %1080, ptr %15, align 8, !tbaa !9
  %1081 = load ptr, ptr %30, align 8, !tbaa !5
  %1082 = load i64, ptr %12, align 8, !tbaa !9
  %1083 = getelementptr inbounds i64, ptr %1081, i64 %1082
  store i64 %1079, ptr %1083, align 8, !tbaa !9
  br label %1084

1084:                                             ; preds = %1074
  br label %1085

1085:                                             ; preds = %1084
  br label %1086

1086:                                             ; preds = %1085, %1067, %1061
  br label %1087

1087:                                             ; preds = %1086
  %1088 = load i64, ptr %11, align 8, !tbaa !9
  %1089 = add nsw i64 %1088, 1
  store i64 %1089, ptr %11, align 8, !tbaa !9
  br label %975, !llvm.loop !37

1090:                                             ; preds = %975
  br label %1091

1091:                                             ; preds = %1090
  %1092 = load i64, ptr %16, align 8, !tbaa !9
  %1093 = add nsw i64 %1092, -1
  store i64 %1093, ptr %16, align 8, !tbaa !9
  br label %835, !llvm.loop !38

1094:                                             ; preds = %835
  %1095 = load ptr, ptr %5, align 8, !tbaa !5
  %1096 = getelementptr inbounds %struct.controldef, ptr %1095, i32 0, i32 1
  %1097 = load i64, ptr %1096, align 8, !tbaa !25
  %1098 = and i64 %1097, 8
  %1099 = icmp ne i64 %1098, 0
  br i1 %1099, label %1100, label %1111

1100:                                             ; preds = %1094
  %1101 = load i64, ptr %39, align 8, !tbaa !9
  %1102 = load i64, ptr %44, align 8, !tbaa !9
  %1103 = load ptr, ptr %32, align 8, !tbaa !5
  %1104 = getelementptr inbounds i64, ptr %1103, i64 0
  %1105 = load i64, ptr %1104, align 8, !tbaa !9
  %1106 = load ptr, ptr %32, align 8, !tbaa !5
  %1107 = getelementptr inbounds i64, ptr %1106, i64 1
  %1108 = load i64, ptr %1107, align 8, !tbaa !9
  %1109 = load i64, ptr %15, align 8, !tbaa !9
  %1110 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, i64 noundef %1101, i64 noundef %1102, i64 noundef %1105, i64 noundef %1108, i64 noundef %1109)
  br label %1111

1111:                                             ; preds = %1100, %1094
  %1112 = load i64, ptr %39, align 8, !tbaa !9
  %1113 = load ptr, ptr %6, align 8, !tbaa !5
  %1114 = getelementptr inbounds %struct.graphdef, ptr %1113, i32 0, i32 16
  store i64 %1112, ptr %1114, align 8, !tbaa !31
  %1115 = load i64, ptr %15, align 8, !tbaa !9
  %1116 = load ptr, ptr %6, align 8, !tbaa !5
  %1117 = getelementptr inbounds %struct.graphdef, ptr %1116, i32 0, i32 20
  store i64 %1115, ptr %1117, align 8, !tbaa !30
  %1118 = load i64, ptr %44, align 8, !tbaa !9
  %1119 = icmp eq i64 %1118, -1
  br i1 %1119, label %1124, label %1120

1120:                                             ; preds = %1111
  %1121 = load i64, ptr %39, align 8, !tbaa !9
  %1122 = load i64, ptr %42, align 8, !tbaa !9
  %1123 = icmp eq i64 %1121, %1122
  br i1 %1123, label %1124, label %1125

1124:                                             ; preds = %1120, %1111
  br label %1129

1125:                                             ; preds = %1120
  br label %1126

1126:                                             ; preds = %1125
  %1127 = load i64, ptr %19, align 8, !tbaa !9
  %1128 = add nsw i64 %1127, 1
  store i64 %1128, ptr %19, align 8, !tbaa !9
  br label %234, !llvm.loop !39

1129:                                             ; preds = %1124, %234
  %1130 = load ptr, ptr %5, align 8, !tbaa !5
  %1131 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 0
  call void @libmetis__PQueueFree(ptr noundef %1130, ptr noundef %1131)
  %1132 = load ptr, ptr %5, align 8, !tbaa !5
  %1133 = getelementptr inbounds [2 x %struct.PQueueType], ptr %36, i64 0, i64 1
  call void @libmetis__PQueueFree(ptr noundef %1132, ptr noundef %1133)
  %1134 = load ptr, ptr %5, align 8, !tbaa !5
  %1135 = load i64, ptr %14, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1134, i64 noundef %1135)
  %1136 = load ptr, ptr %5, align 8, !tbaa !5
  %1137 = load i64, ptr %14, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1136, i64 noundef %1137)
  %1138 = load ptr, ptr %5, align 8, !tbaa !5
  %1139 = load i64, ptr %14, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1138, i64 noundef %1139)
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 176, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 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
  ret void
}

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

declare ptr @libmetis__idxwspacemalloc(ptr noundef, i64 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 i32 @mprintf(ptr noundef, ...) #2

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

declare void @libmetis__PQueueReset(ptr noundef) #2

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) #2

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

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

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

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

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayEdgeRefine(ptr noundef %0, ptr nocapture noundef %1, ptr nocapture noundef readonly %2, i64 noundef %3) local_unnamed_addr #0 {
  %5 = alloca [2 x %struct.PQueueType], align 16
  call void @llvm.lifetime.start.p0(i64 176, ptr nonnull %5) #4
  %6 = load i64, ptr %1, align 8, !tbaa !5
  %7 = getelementptr inbounds i8, ptr %1, i64 16
  %8 = load ptr, ptr %7, align 8, !tbaa !12
  %9 = getelementptr inbounds i8, ptr %1, i64 24
  %10 = load ptr, ptr %9, align 8, !tbaa !13
  %11 = getelementptr inbounds i8, ptr %1, i64 40
  %12 = load ptr, ptr %11, align 8, !tbaa !14
  %13 = getelementptr inbounds i8, ptr %1, i64 48
  %14 = load ptr, ptr %13, align 8, !tbaa !15
  %15 = getelementptr inbounds i8, ptr %1, i64 128
  %16 = load ptr, ptr %15, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %1, i64 168
  %18 = load ptr, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %1, i64 176
  %20 = load ptr, ptr %19, align 8, !tbaa !18
  %21 = getelementptr inbounds i8, ptr %1, i64 136
  %22 = load ptr, ptr %21, align 8, !tbaa !19
  %23 = getelementptr inbounds i8, ptr %1, i64 152
  %24 = load ptr, ptr %23, align 8, !tbaa !20
  %25 = getelementptr inbounds i8, ptr %1, i64 160
  %26 = load ptr, ptr %25, align 8, !tbaa !21
  %27 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %6) #4
  %28 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %6) #4
  %29 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %6) #4
  %30 = sitofp i64 %6 to double
  %31 = fmul double %30, 1.000000e-02
  %32 = fcmp oge double %31, 1.500000e+01
  %33 = select i1 %32, double %31, double 1.500000e+01
  %.inv = fcmp oge double %33, 1.000000e+02
  %34 = select i1 %.inv, double 1.000000e+02, double %33
  %35 = fptosi double %34 to i64
  %36 = load i64, ptr %22, align 8, !tbaa !22
  %37 = getelementptr inbounds i8, ptr %22, i64 8
  %38 = load i64, ptr %37, align 8, !tbaa !22
  %39 = add nsw i64 %38, %36
  %40 = sdiv i64 %39, 20
  %41 = shl nsw i64 %39, 1
  %42 = sdiv i64 %41, %6
  %43 = tail call i64 @llvm.smin.i64(i64 %40, i64 %42)
  %44 = getelementptr inbounds i8, ptr %1, i64 88
  %45 = load ptr, ptr %44, align 8, !tbaa !23
  %46 = tail call i64 @libmetis__idxargmax(i64 noundef %6, ptr noundef %45) #4
  %47 = getelementptr inbounds i64, ptr %45, i64 %46
  %48 = load i64, ptr %47, align 8, !tbaa !22
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %5, i64 noundef %6, i64 noundef %48) #4
  %49 = getelementptr inbounds i8, ptr %5, i64 88
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %49, i64 noundef %6, i64 noundef %48) #4
  %50 = getelementptr inbounds i8, ptr %0, i64 8
  %51 = load i64, ptr %50, align 8, !tbaa !24
  %52 = and i64 %51, 8
  %.not435 = icmp eq i64 %52, 0
  br i1 %.not435, label %65, label %53

53:                                               ; preds = %4
  %54 = load i64, ptr %22, align 8, !tbaa !22
  %55 = load i64, ptr %37, align 8, !tbaa !22
  %56 = load i64, ptr %2, align 8, !tbaa !22
  %57 = getelementptr inbounds i8, ptr %2, i64 8
  %58 = load i64, ptr %57, align 8, !tbaa !22
  %59 = load i64, ptr %1, align 8, !tbaa !5
  %60 = getelementptr inbounds i8, ptr %1, i64 144
  %61 = load i64, ptr %60, align 8, !tbaa !29
  %62 = getelementptr inbounds i8, ptr %1, i64 112
  %63 = load i64, ptr %62, align 8, !tbaa !30
  %64 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str, i64 noundef %54, i64 noundef %55, i64 noundef %56, i64 noundef %58, i64 noundef %59, i64 noundef %61, i64 noundef %63) #4
  br label %65

65:                                               ; preds = %53, %4
  %66 = load i64, ptr %2, align 8, !tbaa !22
  %67 = load i64, ptr %22, align 8, !tbaa !22
  %68 = call ptr @libmetis__idxset(i64 noundef %6, i64 noundef -1, ptr noundef %27) #4
  %69 = icmp sgt i64 %3, 0
  br i1 %69, label %.lr.ph498, label %._crit_edge499

.lr.ph498:                                        ; preds = %65
  %70 = sub nsw i64 %66, %67
  %71 = call i64 @llvm.abs.i64(i64 %70, i1 true)
  %72 = getelementptr inbounds i8, ptr %1, i64 112
  %73 = getelementptr inbounds i8, ptr %1, i64 144
  %74 = icmp sgt i64 %6, 0
  %75 = getelementptr inbounds i8, ptr %2, i64 8
  %76 = add nsw i64 %71, %43
  br label %77

77:                                               ; preds = %371, %.lr.ph498
  %.0415496 = phi i64 [ 0, %.lr.ph498 ], [ %374, %371 ]
  call void @libmetis__PQueueReset(ptr noundef nonnull %5) #4
  call void @libmetis__PQueueReset(ptr noundef nonnull %49) #4
  %78 = load i64, ptr %72, align 8, !tbaa !30
  %79 = load i64, ptr %2, align 8, !tbaa !22
  %80 = load i64, ptr %22, align 8, !tbaa !22
  %81 = sub nsw i64 %79, %80
  %82 = call i64 @llvm.abs.i64(i64 %81, i1 true)
  %83 = load i64, ptr %73, align 8, !tbaa !29
  call void @libmetis__RandomPermute(i64 noundef %83, ptr noundef %29, i64 noundef 1) #4
  %84 = icmp sgt i64 %83, 0
  br i1 %84, label %.lr.ph, label %.preheader446

.preheader446:                                    ; preds = %.lr.ph, %77
  br i1 %74, label %.lr.ph473, label %.preheader

.lr.ph:                                           ; preds = %77, %.lr.ph
  %.0404460 = phi i64 [ %98, %.lr.ph ], [ 0, %77 ]
  %85 = getelementptr inbounds i64, ptr %29, i64 %.0404460
  %86 = load i64, ptr %85, align 8, !tbaa !22
  %87 = getelementptr inbounds i64, ptr %26, i64 %86
  %88 = load i64, ptr %87, align 8, !tbaa !22
  %89 = getelementptr inbounds i64, ptr %16, i64 %88
  %90 = load i64, ptr %89, align 8, !tbaa !22
  %91 = getelementptr inbounds [2 x %struct.PQueueType], ptr %5, i64 0, i64 %90
  %92 = getelementptr inbounds i64, ptr %20, i64 %88
  %93 = load i64, ptr %92, align 8, !tbaa !22
  %94 = getelementptr inbounds i64, ptr %18, i64 %88
  %95 = load i64, ptr %94, align 8, !tbaa !22
  %96 = sub nsw i64 %93, %95
  %97 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %91, i64 noundef %88, i64 noundef %96) #4
  %98 = add nuw nsw i64 %.0404460, 1
  %exitcond.not = icmp eq i64 %98, %83
  br i1 %exitcond.not, label %.preheader446, label %.lr.ph, !llvm.loop !31

.lr.ph473:                                        ; preds = %.preheader446, %._crit_edge
  %.0402472 = phi i64 [ %.1, %._crit_edge ], [ -1, %.preheader446 ]
  %.0403471 = phi i64 [ %116, %._crit_edge ], [ %78, %.preheader446 ]
  %.0407470 = phi i64 [ %.1408, %._crit_edge ], [ %82, %.preheader446 ]
  %.0409469 = phi i64 [ %.1410, %._crit_edge ], [ %78, %.preheader446 ]
  %.0411467 = phi i64 [ %.2.lcssa, %._crit_edge ], [ %83, %.preheader446 ]
  %.0413466 = phi i64 [ %253, %._crit_edge ], [ 0, %.preheader446 ]
  %99 = load i64, ptr %2, align 8, !tbaa !22
  %100 = load i64, ptr %22, align 8, !tbaa !22
  %101 = sub nsw i64 %99, %100
  %102 = load i64, ptr %75, align 8, !tbaa !22
  %103 = load i64, ptr %37, align 8, !tbaa !22
  %104 = sub nsw i64 %102, %103
  %105 = icmp sge i64 %101, %104
  %106 = zext i1 %105 to i64
  %not. = xor i1 %105, true
  %107 = zext i1 %not. to i64
  %108 = getelementptr inbounds [2 x %struct.PQueueType], ptr %5, i64 0, i64 %106
  %109 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %108) #4
  %110 = icmp eq i64 %109, -1
  br i1 %110, label %.loopexit447, label %111

111:                                              ; preds = %.lr.ph473
  %112 = getelementptr inbounds i64, ptr %20, i64 %109
  %113 = load i64, ptr %112, align 8, !tbaa !22
  %114 = getelementptr inbounds i64, ptr %18, i64 %109
  %115 = load i64, ptr %114, align 8, !tbaa !22
  %.neg = sub i64 %115, %113
  %116 = add i64 %.neg, %.0403471
  %117 = getelementptr inbounds i64, ptr %10, i64 %109
  %118 = load i64, ptr %117, align 8, !tbaa !22
  %119 = getelementptr inbounds i64, ptr %22, i64 %107
  %120 = load i64, ptr %119, align 8, !tbaa !22
  %121 = add nsw i64 %120, %118
  store i64 %121, ptr %119, align 8, !tbaa !22
  %122 = load i64, ptr %117, align 8, !tbaa !22
  %123 = getelementptr inbounds i64, ptr %22, i64 %106
  %124 = load i64, ptr %123, align 8, !tbaa !22
  %125 = sub nsw i64 %124, %122
  store i64 %125, ptr %123, align 8, !tbaa !22
  %126 = icmp slt i64 %116, %.0409469
  br i1 %126, label %127, label %132

127:                                              ; preds = %111
  %128 = load i64, ptr %2, align 8, !tbaa !22
  %129 = load i64, ptr %22, align 8, !tbaa !22
  %130 = sub nsw i64 %128, %129
  %131 = call i64 @llvm.abs.i64(i64 %130, i1 true)
  %.not436 = icmp sgt i64 %131, %76
  br i1 %.not436, label %132, label %150

132:                                              ; preds = %127, %111
  %133 = icmp eq i64 %116, %.0409469
  br i1 %133, label %134, label %140

134:                                              ; preds = %132
  %135 = load i64, ptr %2, align 8, !tbaa !22
  %136 = load i64, ptr %22, align 8, !tbaa !22
  %137 = sub nsw i64 %135, %136
  %138 = call i64 @llvm.abs.i64(i64 %137, i1 true)
  %139 = icmp slt i64 %138, %.0407470
  br i1 %139, label %150, label %140

140:                                              ; preds = %134, %132
  %141 = sub nsw i64 %.0413466, %.0402472
  %142 = icmp sgt i64 %141, %35
  br i1 %142, label %143, label %150

143:                                              ; preds = %140
  %144 = getelementptr inbounds i64, ptr %22, i64 %107
  %145 = getelementptr inbounds i64, ptr %22, i64 %106
  %146 = load i64, ptr %117, align 8, !tbaa !22
  %147 = add nsw i64 %146, %125
  store i64 %147, ptr %145, align 8, !tbaa !22
  %148 = load i64, ptr %117, align 8, !tbaa !22
  %149 = sub nsw i64 %121, %148
  store i64 %149, ptr %144, align 8, !tbaa !22
  br label %.loopexit447

150:                                              ; preds = %127, %134, %140
  %.1410 = phi i64 [ %.0409469, %140 ], [ %116, %134 ], [ %116, %127 ]
  %.1408 = phi i64 [ %.0407470, %140 ], [ %138, %134 ], [ %131, %127 ]
  %.1 = phi i64 [ %.0402472, %140 ], [ %.0413466, %134 ], [ %.0413466, %127 ]
  %151 = getelementptr inbounds i64, ptr %16, i64 %109
  store i64 %107, ptr %151, align 8, !tbaa !22
  %152 = getelementptr inbounds i64, ptr %27, i64 %109
  store i64 %.0413466, ptr %152, align 8, !tbaa !22
  %153 = getelementptr inbounds i64, ptr %28, i64 %.0413466
  store i64 %109, ptr %153, align 8, !tbaa !22
  %154 = load i64, ptr %50, align 8, !tbaa !24
  %155 = and i64 %154, 32
  %.not437 = icmp eq i64 %155, 0
  br i1 %.not437, label %164, label %156

156:                                              ; preds = %150
  %157 = load i64, ptr %112, align 8, !tbaa !22
  %158 = load i64, ptr %114, align 8, !tbaa !22
  %159 = sub nsw i64 %157, %158
  %160 = load i64, ptr %117, align 8, !tbaa !22
  %161 = load i64, ptr %22, align 8, !tbaa !22
  %162 = load i64, ptr %37, align 8, !tbaa !22
  %163 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, i64 noundef %109, i64 noundef %106, i64 noundef %159, i64 noundef %160, i64 noundef %116, i64 noundef %161, i64 noundef %162) #4
  br label %164

164:                                              ; preds = %150, %156
  %165 = load i64, ptr %114, align 8, !tbaa !22
  %166 = load i64, ptr %112, align 8, !tbaa !22
  store i64 %166, ptr %114, align 8, !tbaa !22
  store i64 %165, ptr %112, align 8, !tbaa !22
  %167 = icmp eq i64 %165, 0
  br i1 %167, label %168, label %183

168:                                              ; preds = %164
  %169 = getelementptr inbounds i64, ptr %8, i64 %109
  %170 = load i64, ptr %169, align 8, !tbaa !22
  %171 = getelementptr i8, ptr %169, i64 8
  %172 = load i64, ptr %171, align 8, !tbaa !22
  %173 = icmp slt i64 %170, %172
  br i1 %173, label %174, label %183

174:                                              ; preds = %168
  %175 = add nsw i64 %.0411467, -1
  %176 = getelementptr inbounds i64, ptr %26, i64 %175
  %177 = load i64, ptr %176, align 8, !tbaa !22
  %178 = getelementptr inbounds i64, ptr %24, i64 %109
  %179 = load i64, ptr %178, align 8, !tbaa !22
  %180 = getelementptr inbounds i64, ptr %26, i64 %179
  store i64 %177, ptr %180, align 8, !tbaa !22
  %181 = load i64, ptr %178, align 8, !tbaa !22
  %182 = getelementptr inbounds i64, ptr %24, i64 %177
  store i64 %181, ptr %182, align 8, !tbaa !22
  store i64 -1, ptr %178, align 8, !tbaa !22
  br label %183

183:                                              ; preds = %174, %168, %164
  %.1412 = phi i64 [ %175, %174 ], [ %.0411467, %168 ], [ %.0411467, %164 ]
  %184 = getelementptr inbounds i64, ptr %8, i64 %109
  %185 = load i64, ptr %184, align 8, !tbaa !22
  %186 = getelementptr i8, ptr %184, i64 8
  %187 = load i64, ptr %186, align 8, !tbaa !22
  %188 = icmp slt i64 %185, %187
  br i1 %188, label %.lr.ph463, label %._crit_edge

.lr.ph463:                                        ; preds = %183, %249
  %.0405462 = phi i64 [ %250, %249 ], [ %185, %183 ]
  %.2461 = phi i64 [ %.3, %249 ], [ %.1412, %183 ]
  %189 = getelementptr inbounds i64, ptr %12, i64 %.0405462
  %190 = load i64, ptr %189, align 8, !tbaa !22
  %191 = getelementptr inbounds i64, ptr %20, i64 %190
  %192 = load i64, ptr %191, align 8, !tbaa !22
  %193 = getelementptr inbounds i64, ptr %18, i64 %190
  %194 = load i64, ptr %193, align 8, !tbaa !22
  %195 = sub nsw i64 %192, %194
  %196 = getelementptr inbounds i64, ptr %16, i64 %190
  %197 = load i64, ptr %196, align 8, !tbaa !22
  %198 = icmp eq i64 %197, %107
  %199 = getelementptr inbounds i64, ptr %14, i64 %.0405462
  %200 = load i64, ptr %199, align 8, !tbaa !22
  %201 = sub nsw i64 0, %200
  %202 = select i1 %198, i64 %200, i64 %201
  %203 = add nsw i64 %202, %194
  store i64 %203, ptr %193, align 8, !tbaa !22
  %204 = load i64, ptr %191, align 8, !tbaa !22
  %205 = sub nsw i64 %204, %202
  store i64 %205, ptr %191, align 8, !tbaa !22
  %206 = getelementptr inbounds i64, ptr %24, i64 %190
  %207 = load i64, ptr %206, align 8, !tbaa !22
  %.not438 = icmp eq i64 %207, -1
  br i1 %.not438, label %234, label %208

208:                                              ; preds = %.lr.ph463
  %209 = icmp eq i64 %204, %202
  br i1 %209, label %210, label %224

210:                                              ; preds = %208
  %211 = add nsw i64 %.2461, -1
  %212 = getelementptr inbounds i64, ptr %26, i64 %211
  %213 = load i64, ptr %212, align 8, !tbaa !22
  %214 = getelementptr inbounds i64, ptr %26, i64 %207
  store i64 %213, ptr %214, align 8, !tbaa !22
  %215 = load i64, ptr %206, align 8, !tbaa !22
  %216 = getelementptr inbounds i64, ptr %24, i64 %213
  store i64 %215, ptr %216, align 8, !tbaa !22
  store i64 -1, ptr %206, align 8, !tbaa !22
  %217 = getelementptr inbounds i64, ptr %27, i64 %190
  %218 = load i64, ptr %217, align 8, !tbaa !22
  %219 = icmp eq i64 %218, -1
  br i1 %219, label %220, label %249

220:                                              ; preds = %210
  %221 = load i64, ptr %196, align 8, !tbaa !22
  %222 = getelementptr inbounds [2 x %struct.PQueueType], ptr %5, i64 0, i64 %221
  %223 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %222, i64 noundef %190, i64 noundef %195) #4
  br label %249

224:                                              ; preds = %208
  %225 = getelementptr inbounds i64, ptr %27, i64 %190
  %226 = load i64, ptr %225, align 8, !tbaa !22
  %227 = icmp eq i64 %226, -1
  br i1 %227, label %228, label %249

228:                                              ; preds = %224
  %229 = load i64, ptr %196, align 8, !tbaa !22
  %230 = getelementptr inbounds [2 x %struct.PQueueType], ptr %5, i64 0, i64 %229
  %231 = load i64, ptr %193, align 8, !tbaa !22
  %232 = sub nsw i64 %205, %231
  %233 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %230, i64 noundef %190, i64 noundef %195, i64 noundef %232) #4
  br label %249

234:                                              ; preds = %.lr.ph463
  %235 = icmp sgt i64 %205, 0
  br i1 %235, label %236, label %249

236:                                              ; preds = %234
  %237 = getelementptr inbounds i64, ptr %26, i64 %.2461
  store i64 %190, ptr %237, align 8, !tbaa !22
  %238 = add nsw i64 %.2461, 1
  store i64 %.2461, ptr %206, align 8, !tbaa !22
  %239 = getelementptr inbounds i64, ptr %27, i64 %190
  %240 = load i64, ptr %239, align 8, !tbaa !22
  %241 = icmp eq i64 %240, -1
  br i1 %241, label %242, label %249

242:                                              ; preds = %236
  %243 = load i64, ptr %196, align 8, !tbaa !22
  %244 = getelementptr inbounds [2 x %struct.PQueueType], ptr %5, i64 0, i64 %243
  %245 = load i64, ptr %191, align 8, !tbaa !22
  %246 = load i64, ptr %193, align 8, !tbaa !22
  %247 = sub nsw i64 %245, %246
  %248 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %244, i64 noundef %190, i64 noundef %247) #4
  br label %249

249:                                              ; preds = %224, %228, %210, %220, %236, %242, %234
  %.3 = phi i64 [ %211, %220 ], [ %211, %210 ], [ %.2461, %228 ], [ %.2461, %224 ], [ %238, %242 ], [ %238, %236 ], [ %.2461, %234 ]
  %250 = add nsw i64 %.0405462, 1
  %251 = load i64, ptr %186, align 8, !tbaa !22
  %252 = icmp slt i64 %250, %251
  br i1 %252, label %.lr.ph463, label %._crit_edge, !llvm.loop !33

._crit_edge:                                      ; preds = %249, %183
  %.2.lcssa = phi i64 [ %.1412, %183 ], [ %.3, %249 ]
  %253 = add nuw nsw i64 %.0413466, 1
  %exitcond511.not = icmp eq i64 %253, %6
  br i1 %exitcond511.not, label %.lr.ph485.preheader, label %.lr.ph473, !llvm.loop !34

.loopexit447:                                     ; preds = %.lr.ph473, %143
  %.not = icmp eq i64 %.0413466, 0
  br i1 %.not, label %.preheader, label %.lr.ph485.preheader

.lr.ph485.preheader:                              ; preds = %._crit_edge, %.loopexit447
  %.0402449533 = phi i64 [ %.0402472, %.loopexit447 ], [ %.1, %._crit_edge ]
  %.0409451532 = phi i64 [ %.0409469, %.loopexit447 ], [ %.1410, %._crit_edge ]
  %.0411453531 = phi i64 [ %.0411467, %.loopexit447 ], [ %.2.lcssa, %._crit_edge ]
  %.0413455530 = phi i64 [ %.0413466, %.loopexit447 ], [ %6, %._crit_edge ]
  %xtraiter = and i64 %.0413455530, 3
  %254 = icmp ult i64 %.0413455530, 4
  br i1 %254, label %.preheader.loopexit.unr-lcssa, label %.lr.ph485.preheader.new

.lr.ph485.preheader.new:                          ; preds = %.lr.ph485.preheader
  %unroll_iter = and i64 %.0413455530, 9223372036854775804
  br label %.lr.ph485

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph485, %.lr.ph485.preheader
  %.0483.unr = phi i64 [ 0, %.lr.ph485.preheader ], [ %275, %.lr.ph485 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader, label %.lr.ph485.epil

.lr.ph485.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph485.epil
  %.0483.epil = phi i64 [ %258, %.lr.ph485.epil ], [ %.0483.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph485.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %255 = getelementptr inbounds i64, ptr %28, i64 %.0483.epil
  %256 = load i64, ptr %255, align 8, !tbaa !22
  %257 = getelementptr inbounds i64, ptr %27, i64 %256
  store i64 -1, ptr %257, align 8, !tbaa !22
  %258 = add nuw nsw i64 %.0483.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader, label %.lr.ph485.epil, !llvm.loop !35

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph485.epil, %.preheader446, %.loopexit447
  %.0402449523 = phi i64 [ %.0402472, %.loopexit447 ], [ -1, %.preheader446 ], [ %.0402449533, %.lr.ph485.epil ], [ %.0402449533, %.preheader.loopexit.unr-lcssa ]
  %.0409451522 = phi i64 [ %.0409469, %.loopexit447 ], [ %78, %.preheader446 ], [ %.0409451532, %.lr.ph485.epil ], [ %.0409451532, %.preheader.loopexit.unr-lcssa ]
  %.0411453521 = phi i64 [ %.0411467, %.loopexit447 ], [ %83, %.preheader446 ], [ %.0411453531, %.lr.ph485.epil ], [ %.0411453531, %.preheader.loopexit.unr-lcssa ]
  %.0413455520 = phi i64 [ 0, %.loopexit447 ], [ 0, %.preheader446 ], [ %.0413455530, %.lr.ph485.epil ], [ %.0413455530, %.preheader.loopexit.unr-lcssa ]
  %.1414490 = add nsw i64 %.0413455520, -1
  %259 = icmp sgt i64 %.1414490, %.0402449523
  br i1 %259, label %.lr.ph493, label %._crit_edge494

.lr.ph485:                                        ; preds = %.lr.ph485, %.lr.ph485.preheader.new
  %.0483 = phi i64 [ 0, %.lr.ph485.preheader.new ], [ %275, %.lr.ph485 ]
  %niter = phi i64 [ 0, %.lr.ph485.preheader.new ], [ %niter.next.3, %.lr.ph485 ]
  %260 = getelementptr inbounds i64, ptr %28, i64 %.0483
  %261 = load i64, ptr %260, align 8, !tbaa !22
  %262 = getelementptr inbounds i64, ptr %27, i64 %261
  store i64 -1, ptr %262, align 8, !tbaa !22
  %263 = or disjoint i64 %.0483, 1
  %264 = getelementptr inbounds i64, ptr %28, i64 %263
  %265 = load i64, ptr %264, align 8, !tbaa !22
  %266 = getelementptr inbounds i64, ptr %27, i64 %265
  store i64 -1, ptr %266, align 8, !tbaa !22
  %267 = or disjoint i64 %.0483, 2
  %268 = getelementptr inbounds i64, ptr %28, i64 %267
  %269 = load i64, ptr %268, align 8, !tbaa !22
  %270 = getelementptr inbounds i64, ptr %27, i64 %269
  store i64 -1, ptr %270, align 8, !tbaa !22
  %271 = or disjoint i64 %.0483, 3
  %272 = getelementptr inbounds i64, ptr %28, i64 %271
  %273 = load i64, ptr %272, align 8, !tbaa !22
  %274 = getelementptr inbounds i64, ptr %27, i64 %273
  store i64 -1, ptr %274, align 8, !tbaa !22
  %275 = add nuw nsw i64 %.0483, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %.lr.ph485, !llvm.loop !37

.loopexit:                                        ; preds = %361, %.thread
  %.6.lcssa = phi i64 [ %.5, %.thread ], [ %.8, %361 ]
  %.1414 = add nsw i64 %.1414492, -1
  %276 = icmp sgt i64 %.1414, %.0402449523
  br i1 %276, label %.lr.ph493, label %._crit_edge494, !llvm.loop !38

.lr.ph493:                                        ; preds = %.preheader, %.loopexit
  %.1414492 = phi i64 [ %.1414, %.loopexit ], [ %.1414490, %.preheader ]
  %.4491 = phi i64 [ %.6.lcssa, %.loopexit ], [ %.0411453521, %.preheader ]
  %277 = getelementptr inbounds i64, ptr %28, i64 %.1414492
  %278 = load i64, ptr %277, align 8, !tbaa !22
  %279 = getelementptr inbounds i64, ptr %16, i64 %278
  %280 = load i64, ptr %279, align 8, !tbaa !22
  %281 = add nsw i64 %280, 1
  %282 = srem i64 %281, 2
  store i64 %282, ptr %279, align 8, !tbaa !22
  %283 = getelementptr inbounds i64, ptr %18, i64 %278
  %284 = load i64, ptr %283, align 8, !tbaa !22
  %285 = getelementptr inbounds i64, ptr %20, i64 %278
  %286 = load i64, ptr %285, align 8, !tbaa !22
  store i64 %286, ptr %283, align 8, !tbaa !22
  store i64 %284, ptr %285, align 8, !tbaa !22
  %287 = icmp eq i64 %284, 0
  br i1 %287, label %288, label %304

288:                                              ; preds = %.lr.ph493
  %289 = getelementptr inbounds i64, ptr %24, i64 %278
  %290 = load i64, ptr %289, align 8, !tbaa !22
  %.not440 = icmp eq i64 %290, -1
  br i1 %.not440, label %.thread, label %291

291:                                              ; preds = %288
  %292 = getelementptr inbounds i64, ptr %8, i64 %278
  %293 = load i64, ptr %292, align 8, !tbaa !22
  %294 = getelementptr i8, ptr %292, i64 8
  %295 = load i64, ptr %294, align 8, !tbaa !22
  %296 = icmp slt i64 %293, %295
  br i1 %296, label %297, label %.thread

297:                                              ; preds = %291
  %298 = add nsw i64 %.4491, -1
  %299 = getelementptr inbounds i64, ptr %26, i64 %298
  %300 = load i64, ptr %299, align 8, !tbaa !22
  %301 = getelementptr inbounds i64, ptr %26, i64 %290
  store i64 %300, ptr %301, align 8, !tbaa !22
  %302 = load i64, ptr %289, align 8, !tbaa !22
  %303 = getelementptr inbounds i64, ptr %24, i64 %300
  store i64 %302, ptr %303, align 8, !tbaa !22
  store i64 -1, ptr %289, align 8, !tbaa !22
  br label %.thread

304:                                              ; preds = %.lr.ph493
  %305 = icmp sgt i64 %284, 0
  br i1 %305, label %306, label %.thread

306:                                              ; preds = %304
  %307 = getelementptr inbounds i64, ptr %24, i64 %278
  %308 = load i64, ptr %307, align 8, !tbaa !22
  %309 = icmp eq i64 %308, -1
  br i1 %309, label %310, label %.thread

310:                                              ; preds = %306
  %311 = getelementptr inbounds i64, ptr %26, i64 %.4491
  store i64 %278, ptr %311, align 8, !tbaa !22
  %312 = add nsw i64 %.4491, 1
  store i64 %.4491, ptr %307, align 8, !tbaa !22
  br label %.thread

.thread:                                          ; preds = %288, %291, %297, %310, %306, %304
  %.5 = phi i64 [ %298, %297 ], [ %312, %310 ], [ %.4491, %306 ], [ %.4491, %304 ], [ %.4491, %291 ], [ %.4491, %288 ]
  %313 = getelementptr inbounds i64, ptr %10, i64 %278
  %314 = load i64, ptr %313, align 8, !tbaa !22
  %315 = getelementptr inbounds i64, ptr %22, i64 %282
  %316 = load i64, ptr %315, align 8, !tbaa !22
  %317 = add nsw i64 %316, %314
  store i64 %317, ptr %315, align 8, !tbaa !22
  %318 = load i64, ptr %313, align 8, !tbaa !22
  %319 = and i64 %282, 1
  %320 = xor i64 %319, 1
  %321 = getelementptr inbounds i64, ptr %22, i64 %320
  %322 = load i64, ptr %321, align 8, !tbaa !22
  %323 = sub nsw i64 %322, %318
  store i64 %323, ptr %321, align 8, !tbaa !22
  %324 = getelementptr inbounds i64, ptr %8, i64 %278
  %325 = load i64, ptr %324, align 8, !tbaa !22
  %326 = getelementptr i8, ptr %324, i64 8
  %327 = load i64, ptr %326, align 8, !tbaa !22
  %328 = icmp slt i64 %325, %327
  br i1 %328, label %.lr.ph488, label %.loopexit

.lr.ph488:                                        ; preds = %.thread, %361
  %.1406487 = phi i64 [ %362, %361 ], [ %325, %.thread ]
  %.6486 = phi i64 [ %.8, %361 ], [ %.5, %.thread ]
  %329 = getelementptr inbounds i64, ptr %12, i64 %.1406487
  %330 = load i64, ptr %329, align 8, !tbaa !22
  %331 = getelementptr inbounds i64, ptr %16, i64 %330
  %332 = load i64, ptr %331, align 8, !tbaa !22
  %333 = icmp eq i64 %282, %332
  %334 = getelementptr inbounds i64, ptr %14, i64 %.1406487
  %335 = load i64, ptr %334, align 8, !tbaa !22
  %336 = sub nsw i64 0, %335
  %337 = select i1 %333, i64 %335, i64 %336
  %338 = getelementptr inbounds i64, ptr %18, i64 %330
  %339 = load i64, ptr %338, align 8, !tbaa !22
  %340 = add nsw i64 %339, %337
  store i64 %340, ptr %338, align 8, !tbaa !22
  %341 = getelementptr inbounds i64, ptr %20, i64 %330
  %342 = load i64, ptr %341, align 8, !tbaa !22
  %343 = sub nsw i64 %342, %337
  store i64 %343, ptr %341, align 8, !tbaa !22
  %344 = getelementptr inbounds i64, ptr %24, i64 %330
  %345 = load i64, ptr %344, align 8, !tbaa !22
  %.not441 = icmp ne i64 %345, -1
  %346 = icmp eq i64 %342, %337
  %or.cond = select i1 %.not441, i1 %346, i1 false
  br i1 %or.cond, label %.thread443, label %353

.thread443:                                       ; preds = %.lr.ph488
  %347 = add nsw i64 %.6486, -1
  %348 = getelementptr inbounds i64, ptr %26, i64 %347
  %349 = load i64, ptr %348, align 8, !tbaa !22
  %350 = getelementptr inbounds i64, ptr %26, i64 %345
  store i64 %349, ptr %350, align 8, !tbaa !22
  %351 = load i64, ptr %344, align 8, !tbaa !22
  %352 = getelementptr inbounds i64, ptr %24, i64 %349
  store i64 %351, ptr %352, align 8, !tbaa !22
  store i64 -1, ptr %344, align 8, !tbaa !22
  %.pre = load i64, ptr %341, align 8, !tbaa !22
  br label %355

353:                                              ; preds = %.lr.ph488
  %354 = icmp eq i64 %345, -1
  br i1 %354, label %355, label %361

355:                                              ; preds = %.thread443, %353
  %356 = phi i64 [ %.pre, %.thread443 ], [ %343, %353 ]
  %.7445 = phi i64 [ %347, %.thread443 ], [ %.6486, %353 ]
  %357 = icmp sgt i64 %356, 0
  br i1 %357, label %358, label %361

358:                                              ; preds = %355
  %359 = getelementptr inbounds i64, ptr %26, i64 %.7445
  store i64 %330, ptr %359, align 8, !tbaa !22
  %360 = add nsw i64 %.7445, 1
  store i64 %.7445, ptr %344, align 8, !tbaa !22
  br label %361

361:                                              ; preds = %353, %355, %358
  %.8 = phi i64 [ %360, %358 ], [ %.7445, %355 ], [ %.6486, %353 ]
  %362 = add nsw i64 %.1406487, 1
  %363 = load i64, ptr %326, align 8, !tbaa !22
  %364 = icmp slt i64 %362, %363
  br i1 %364, label %.lr.ph488, label %.loopexit, !llvm.loop !39

._crit_edge494:                                   ; preds = %.loopexit, %.preheader
  %.4.lcssa = phi i64 [ %.0411453521, %.preheader ], [ %.6.lcssa, %.loopexit ]
  %365 = load i64, ptr %50, align 8, !tbaa !24
  %366 = and i64 %365, 8
  %.not439 = icmp eq i64 %366, 0
  br i1 %.not439, label %371, label %367

367:                                              ; preds = %._crit_edge494
  %368 = load i64, ptr %22, align 8, !tbaa !22
  %369 = load i64, ptr %37, align 8, !tbaa !22
  %370 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, i64 noundef %.0409451522, i64 noundef %.0402449523, i64 noundef %368, i64 noundef %369, i64 noundef %.4.lcssa) #4
  br label %371

371:                                              ; preds = %367, %._crit_edge494
  store i64 %.0409451522, ptr %72, align 8, !tbaa !30
  store i64 %.4.lcssa, ptr %73, align 8, !tbaa !29
  %372 = icmp eq i64 %.0402449523, -1
  %373 = icmp eq i64 %.0409451522, %78
  %or.cond442 = select i1 %372, i1 true, i1 %373
  %374 = add nuw nsw i64 %.0415496, 1
  %exitcond513.not = icmp eq i64 %374, %3
  %or.cond557 = select i1 %or.cond442, i1 true, i1 %exitcond513.not
  br i1 %or.cond557, label %._crit_edge499, label %77, !llvm.loop !40

._crit_edge499:                                   ; preds = %371, %65
  call void @libmetis__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %5) #4
  call void @libmetis__PQueueFree(ptr noundef nonnull %0, ptr noundef nonnull %49) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %6) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %6) #4
  call void @libmetis__idxwspacefree(ptr noundef nonnull %0, i64 noundef %6) #4
  call void @llvm.lifetime.end.p0(i64 176, ptr nonnull %5) #4
  ret void
}

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

declare ptr @libmetis__idxwspacemalloc(ptr noundef, i64 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 i32 @mprintf(ptr noundef, ...) local_unnamed_addr #2

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

declare void @libmetis__PQueueReset(ptr noundef) local_unnamed_addr #2

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = !{!6, !10, i64 88}
!24 = !{!25, !7, i64 8}
!25 = !{!"controldef", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !26, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !27, i64 88, !28, i64 152, !28, i64 160, !28, i64 168, !28, i64 176, !28, i64 184, !28, i64 192, !28, i64 200, !28, i64 208, !28, i64 216, !28, i64 224, !28, i64 232, !28, i64 240, !28, i64 248, !28, i64 256, !28, i64 264, !28, i64 272}
!26 = !{!"float", !8, i64 0}
!27 = !{!"workspacedef", !10, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !7, i64 40, !10, i64 48, !10, i64 56}
!28 = !{!"double", !8, i64 0}
!29 = !{!6, !7, i64 144}
!30 = !{!6, !7, i64 112}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}
!35 = distinct !{!35, !36}
!36 = !{!"llvm.loop.unroll.disable"}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}
!39 = distinct !{!39, !32}
!40 = distinct !{!40, !32}


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