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

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%struct.PQueueType = type { i64, i64, i64, i64, i64, i64, i64, ptr, ptr, ptr, ptr }
%struct.graphdef = type { i64, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, i64, i64, ptr, ptr, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i64, ptr, ptr, ptr, ptr }
%struct.controldef = type { i64, i64, i64, i64, i64, i64, float, i64, i64, i64, i64, %struct.workspacedef, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }
%struct.workspacedef = type { ptr, i64, i64, ptr, ptr, i64, ptr, ptr }
%struct.rinfodef = type { i64, i64, i64, ptr }
%struct.edegreedef = type { i64, i64 }

@.str.1 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [64 x i8], align 1

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

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

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

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

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

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

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

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

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

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

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

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

104:                                              ; preds = %149, %6
  %105 = load i64, ptr %13, align 8, !tbaa !9
  %106 = load i64, ptr %9, align 8, !tbaa !9
  %107 = icmp slt i64 %105, %106
  br i1 %107, label %108, label %152

108:                                              ; preds = %104
  %109 = load ptr, ptr %10, align 8, !tbaa !5
  %110 = load i64, ptr %13, align 8, !tbaa !9
  %111 = getelementptr inbounds float, ptr %109, i64 %110
  %112 = load float, ptr %111, align 4, !tbaa !11
  %113 = load i64, ptr %23, align 8, !tbaa !9
  %114 = sitofp i64 %113 to float
  %115 = fmul float %112, %114
  %116 = fptosi float %115 to i64
  %117 = load ptr, ptr %46, align 8, !tbaa !5
  %118 = load i64, ptr %13, align 8, !tbaa !9
  %119 = getelementptr inbounds i64, ptr %117, i64 %118
  store i64 %116, ptr %119, align 8, !tbaa !9
  %120 = load ptr, ptr %10, align 8, !tbaa !5
  %121 = load i64, ptr %13, align 8, !tbaa !9
  %122 = getelementptr inbounds float, ptr %120, i64 %121
  %123 = load float, ptr %122, align 4, !tbaa !11
  %124 = load i64, ptr %23, align 8, !tbaa !9
  %125 = sitofp i64 %124 to float
  %126 = fmul float %123, %125
  %127 = load float, ptr %11, align 4, !tbaa !11
  %128 = fmul float %126, %127
  %129 = fptosi float %128 to i64
  %130 = load ptr, ptr %44, align 8, !tbaa !5
  %131 = load i64, ptr %13, align 8, !tbaa !9
  %132 = getelementptr inbounds i64, ptr %130, i64 %131
  store i64 %129, ptr %132, align 8, !tbaa !9
  %133 = load ptr, ptr %10, align 8, !tbaa !5
  %134 = load i64, ptr %13, align 8, !tbaa !9
  %135 = getelementptr inbounds float, ptr %133, i64 %134
  %136 = load float, ptr %135, align 4, !tbaa !11
  %137 = load i64, ptr %23, align 8, !tbaa !9
  %138 = sitofp i64 %137 to float
  %139 = fmul float %136, %138
  %140 = fpext float %139 to double
  %141 = load float, ptr %11, align 4, !tbaa !11
  %142 = fpext float %141 to double
  %143 = fdiv double 1.000000e+00, %142
  %144 = fmul double %140, %143
  %145 = fptosi double %144 to i64
  %146 = load ptr, ptr %43, align 8, !tbaa !5
  %147 = load i64, ptr %13, align 8, !tbaa !9
  %148 = getelementptr inbounds i64, ptr %146, i64 %147
  store i64 %145, ptr %148, align 8, !tbaa !9
  br label %149

149:                                              ; preds = %108
  %150 = load i64, ptr %13, align 8, !tbaa !9
  %151 = add nsw i64 %150, 1
  store i64 %151, ptr %13, align 8, !tbaa !9
  br label %104, !llvm.loop !27

152:                                              ; preds = %104
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = load i64, ptr %21, align 8, !tbaa !9
  %155 = call ptr @libmetis__idxwspacemalloc(ptr noundef %153, i64 noundef %154)
  store ptr %155, ptr %40, align 8, !tbaa !5
  %156 = load ptr, ptr %7, align 8, !tbaa !5
  %157 = load i64, ptr %21, align 8, !tbaa !9
  %158 = call ptr @libmetis__idxwspacemalloc(ptr noundef %156, i64 noundef %157)
  store ptr %158, ptr %45, align 8, !tbaa !5
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  %160 = load i64, ptr %21, align 8, !tbaa !9
  %161 = load ptr, ptr %8, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.graphdef, ptr %161, i32 0, i32 13
  %163 = load ptr, ptr %162, align 8, !tbaa !29
  %164 = load i64, ptr %21, align 8, !tbaa !9
  %165 = load ptr, ptr %8, align 8, !tbaa !5
  %166 = getelementptr inbounds %struct.graphdef, ptr %165, i32 0, i32 13
  %167 = load ptr, ptr %166, align 8, !tbaa !29
  %168 = call i64 @libmetis__idxargmax(i64 noundef %164, ptr noundef %167)
  %169 = getelementptr inbounds i64, ptr %163, i64 %168
  %170 = load i64, ptr %169, align 8, !tbaa !9
  call void @libmetis__PQueueInit(ptr noundef %159, ptr noundef %53, i64 noundef %160, i64 noundef %170)
  %171 = load ptr, ptr %7, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.controldef, ptr %171, i32 0, i32 1
  %173 = load i64, ptr %172, align 8, !tbaa !30
  %174 = and i64 %173, 8
  %175 = icmp ne i64 %174, 0
  br i1 %175, label %176, label %219

176:                                              ; preds = %152
  %177 = load ptr, ptr %39, align 8, !tbaa !5
  %178 = load i64, ptr %9, align 8, !tbaa !9
  %179 = load ptr, ptr %39, align 8, !tbaa !5
  %180 = call i64 @libmetis__idxargmin(i64 noundef %178, ptr noundef %179)
  %181 = getelementptr inbounds i64, ptr %177, i64 %180
  %182 = load i64, ptr %181, align 8, !tbaa !9
  %183 = load ptr, ptr %39, align 8, !tbaa !5
  %184 = load i64, ptr %9, align 8, !tbaa !9
  %185 = load ptr, ptr %39, align 8, !tbaa !5
  %186 = call i64 @libmetis__idxargmax(i64 noundef %184, ptr noundef %185)
  %187 = getelementptr inbounds i64, ptr %183, i64 %186
  %188 = load i64, ptr %187, align 8, !tbaa !9
  %189 = load ptr, ptr %43, align 8, !tbaa !5
  %190 = getelementptr inbounds i64, ptr %189, i64 0
  %191 = load i64, ptr %190, align 8, !tbaa !9
  %192 = load ptr, ptr %44, align 8, !tbaa !5
  %193 = getelementptr inbounds i64, ptr %192, i64 0
  %194 = load i64, ptr %193, align 8, !tbaa !9
  %195 = load i64, ptr %9, align 8, !tbaa !9
  %196 = sitofp i64 %195 to double
  %197 = fmul double 1.000000e+00, %196
  %198 = load ptr, ptr %39, align 8, !tbaa !5
  %199 = load i64, ptr %9, align 8, !tbaa !9
  %200 = load ptr, ptr %39, align 8, !tbaa !5
  %201 = call i64 @libmetis__idxargmax(i64 noundef %199, ptr noundef %200)
  %202 = getelementptr inbounds i64, ptr %198, i64 %201
  %203 = load i64, ptr %202, align 8, !tbaa !9
  %204 = sitofp i64 %203 to double
  %205 = fmul double %197, %204
  %206 = load i64, ptr %23, align 8, !tbaa !9
  %207 = sitofp i64 %206 to double
  %208 = fdiv double %205, %207
  %209 = load ptr, ptr %8, align 8, !tbaa !5
  %210 = getelementptr inbounds %struct.graphdef, ptr %209, i32 0, i32 0
  %211 = load i64, ptr %210, align 8, !tbaa !13
  %212 = load ptr, ptr %8, align 8, !tbaa !5
  %213 = getelementptr inbounds %struct.graphdef, ptr %212, i32 0, i32 20
  %214 = load i64, ptr %213, align 8, !tbaa !31
  %215 = load ptr, ptr %8, align 8, !tbaa !5
  %216 = getelementptr inbounds %struct.graphdef, ptr %215, i32 0, i32 16
  %217 = load i64, ptr %216, align 8, !tbaa !32
  %218 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.4, i64 noundef %182, i64 noundef %188, i64 noundef %191, i64 noundef %194, double noundef %208, i64 noundef %211, i64 noundef %214, i64 noundef %217)
  br label %219

219:                                              ; preds = %176, %152
  store i64 0, ptr %20, align 8, !tbaa !9
  br label %220

220:                                              ; preds = %1412, %219
  %221 = load i64, ptr %20, align 8, !tbaa !9
  %222 = load i64, ptr %12, align 8, !tbaa !9
  %223 = icmp slt i64 %221, %222
  br i1 %223, label %224, label %1415

224:                                              ; preds = %220
  store i64 0, ptr %13, align 8, !tbaa !9
  br label %225

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

229:                                              ; preds = %225
  %230 = load ptr, ptr %39, align 8, !tbaa !5
  %231 = load i64, ptr %13, align 8, !tbaa !9
  %232 = getelementptr inbounds i64, ptr %230, i64 %231
  %233 = load i64, ptr %232, align 8, !tbaa !9
  %234 = load ptr, ptr %44, align 8, !tbaa !5
  %235 = load i64, ptr %13, align 8, !tbaa !9
  %236 = getelementptr inbounds i64, ptr %234, i64 %235
  %237 = load i64, ptr %236, align 8, !tbaa !9
  %238 = icmp sgt i64 %233, %237
  br i1 %238, label %239, label %240

239:                                              ; preds = %229
  br label %244

240:                                              ; preds = %229
  br label %241

241:                                              ; preds = %240
  %242 = load i64, ptr %13, align 8, !tbaa !9
  %243 = add nsw i64 %242, 1
  store i64 %243, ptr %13, align 8, !tbaa !9
  br label %225, !llvm.loop !33

244:                                              ; preds = %239, %225
  %245 = load i64, ptr %13, align 8, !tbaa !9
  %246 = load i64, ptr %9, align 8, !tbaa !9
  %247 = icmp eq i64 %245, %246
  br i1 %247, label %248, label %249

248:                                              ; preds = %244
  br label %1415

249:                                              ; preds = %244
  call void @libmetis__PQueueReset(ptr noundef %53)
  %250 = load i64, ptr %21, align 8, !tbaa !9
  %251 = load ptr, ptr %45, align 8, !tbaa !5
  %252 = call ptr @libmetis__idxset(i64 noundef %250, i64 noundef -1, ptr noundef %251)
  %253 = load ptr, ptr %8, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.graphdef, ptr %253, i32 0, i32 16
  %255 = load i64, ptr %254, align 8, !tbaa !32
  store i64 %255, ptr %31, align 8, !tbaa !9
  %256 = load ptr, ptr %8, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.graphdef, ptr %256, i32 0, i32 20
  %258 = load i64, ptr %257, align 8, !tbaa !31
  store i64 %258, ptr %22, align 8, !tbaa !9
  %259 = load i64, ptr %22, align 8, !tbaa !9
  %260 = load ptr, ptr %40, align 8, !tbaa !5
  call void @libmetis__RandomPermute(i64 noundef %259, ptr noundef %260, i64 noundef 1)
  store i64 0, ptr %14, align 8, !tbaa !9
  br label %261

261:                                              ; preds = %293, %249
  %262 = load i64, ptr %14, align 8, !tbaa !9
  %263 = load i64, ptr %22, align 8, !tbaa !9
  %264 = icmp slt i64 %262, %263
  br i1 %264, label %265, label %296

265:                                              ; preds = %261
  %266 = load ptr, ptr %42, align 8, !tbaa !5
  %267 = load ptr, ptr %40, align 8, !tbaa !5
  %268 = load i64, ptr %14, align 8, !tbaa !9
  %269 = getelementptr inbounds i64, ptr %267, i64 %268
  %270 = load i64, ptr %269, align 8, !tbaa !9
  %271 = getelementptr inbounds i64, ptr %266, i64 %270
  %272 = load i64, ptr %271, align 8, !tbaa !9
  store i64 %272, ptr %13, align 8, !tbaa !9
  %273 = load i64, ptr %13, align 8, !tbaa !9
  %274 = load ptr, ptr %8, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.graphdef, ptr %274, i32 0, i32 25
  %276 = load ptr, ptr %275, align 8, !tbaa !34
  %277 = load i64, ptr %13, align 8, !tbaa !9
  %278 = getelementptr inbounds %struct.rinfodef, ptr %276, i64 %277
  %279 = getelementptr inbounds %struct.rinfodef, ptr %278, i32 0, i32 1
  %280 = load i64, ptr %279, align 8, !tbaa !35
  %281 = load ptr, ptr %8, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.graphdef, ptr %281, i32 0, i32 25
  %283 = load ptr, ptr %282, align 8, !tbaa !34
  %284 = load i64, ptr %13, align 8, !tbaa !9
  %285 = getelementptr inbounds %struct.rinfodef, ptr %283, i64 %284
  %286 = getelementptr inbounds %struct.rinfodef, ptr %285, i32 0, i32 0
  %287 = load i64, ptr %286, align 8, !tbaa !37
  %288 = sub nsw i64 %280, %287
  %289 = call i64 @libmetis__PQueueInsert(ptr noundef %53, i64 noundef %273, i64 noundef %288)
  %290 = load ptr, ptr %45, align 8, !tbaa !5
  %291 = load i64, ptr %13, align 8, !tbaa !9
  %292 = getelementptr inbounds i64, ptr %290, i64 %291
  store i64 2, ptr %292, align 8, !tbaa !9
  br label %293

293:                                              ; preds = %265
  %294 = load i64, ptr %14, align 8, !tbaa !9
  %295 = add nsw i64 %294, 1
  store i64 %295, ptr %14, align 8, !tbaa !9
  br label %261, !llvm.loop !38

296:                                              ; preds = %261
  %297 = load ptr, ptr %50, align 8, !tbaa !5
  %298 = load i64, ptr %9, align 8, !tbaa !9
  %299 = load ptr, ptr %50, align 8, !tbaa !5
  %300 = call i64 @libmetis__idxargmax(i64 noundef %298, ptr noundef %299)
  %301 = getelementptr inbounds i64, ptr %297, i64 %300
  %302 = load i64, ptr %301, align 8, !tbaa !9
  store i64 %302, ptr %33, align 8, !tbaa !9
  store i64 0, ptr %27, align 8, !tbaa !9
  br label %303

303:                                              ; preds = %1361, %570, %480, %337, %296
  %304 = call i64 @libmetis__PQueueGetMax(ptr noundef %53)
  store i64 %304, ptr %13, align 8, !tbaa !9
  %305 = icmp eq i64 %304, -1
  br i1 %305, label %306, label %307

306:                                              ; preds = %303
  br label %1364

307:                                              ; preds = %303
  %308 = load ptr, ptr %45, align 8, !tbaa !5
  %309 = load i64, ptr %13, align 8, !tbaa !9
  %310 = getelementptr inbounds i64, ptr %308, i64 %309
  store i64 1, ptr %310, align 8, !tbaa !9
  %311 = load ptr, ptr %8, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.graphdef, ptr %311, i32 0, i32 25
  %313 = load ptr, ptr %312, align 8, !tbaa !34
  %314 = load i64, ptr %13, align 8, !tbaa !9
  %315 = getelementptr inbounds %struct.rinfodef, ptr %313, i64 %314
  store ptr %315, ptr %52, align 8, !tbaa !5
  %316 = load ptr, ptr %38, align 8, !tbaa !5
  %317 = load i64, ptr %13, align 8, !tbaa !9
  %318 = getelementptr inbounds i64, ptr %316, i64 %317
  %319 = load i64, ptr %318, align 8, !tbaa !9
  store i64 %319, ptr %28, align 8, !tbaa !9
  %320 = load ptr, ptr %8, align 8, !tbaa !5
  %321 = getelementptr inbounds %struct.graphdef, ptr %320, i32 0, i32 3
  %322 = load ptr, ptr %321, align 8, !tbaa !39
  %323 = load i64, ptr %13, align 8, !tbaa !9
  %324 = getelementptr inbounds i64, ptr %322, i64 %323
  %325 = load i64, ptr %324, align 8, !tbaa !9
  store i64 %325, ptr %32, align 8, !tbaa !9
  %326 = load ptr, ptr %39, align 8, !tbaa !5
  %327 = load i64, ptr %28, align 8, !tbaa !9
  %328 = getelementptr inbounds i64, ptr %326, i64 %327
  %329 = load i64, ptr %328, align 8, !tbaa !9
  %330 = load i64, ptr %32, align 8, !tbaa !9
  %331 = sub nsw i64 %329, %330
  %332 = load ptr, ptr %43, align 8, !tbaa !5
  %333 = load i64, ptr %28, align 8, !tbaa !9
  %334 = getelementptr inbounds i64, ptr %332, i64 %333
  %335 = load i64, ptr %334, align 8, !tbaa !9
  %336 = icmp slt i64 %331, %335
  br i1 %336, label %337, label %338

337:                                              ; preds = %307
  br label %303

338:                                              ; preds = %307
  %339 = load ptr, ptr %52, align 8, !tbaa !5
  %340 = getelementptr inbounds %struct.rinfodef, ptr %339, i32 0, i32 3
  %341 = load ptr, ptr %340, align 8, !tbaa !40
  store ptr %341, ptr %51, align 8, !tbaa !5
  %342 = load ptr, ptr %52, align 8, !tbaa !5
  %343 = getelementptr inbounds %struct.rinfodef, ptr %342, i32 0, i32 2
  %344 = load i64, ptr %343, align 8, !tbaa !41
  store i64 %344, ptr %24, align 8, !tbaa !9
  store i64 0, ptr %16, align 8, !tbaa !9
  br label %345

345:                                              ; preds = %417, %338
  %346 = load i64, ptr %16, align 8, !tbaa !9
  %347 = load i64, ptr %24, align 8, !tbaa !9
  %348 = icmp slt i64 %346, %347
  br i1 %348, label %349, label %420

349:                                              ; preds = %345
  %350 = load ptr, ptr %51, align 8, !tbaa !5
  %351 = load i64, ptr %16, align 8, !tbaa !9
  %352 = getelementptr inbounds %struct.edegreedef, ptr %350, i64 %351
  %353 = getelementptr inbounds %struct.edegreedef, ptr %352, i32 0, i32 0
  %354 = load i64, ptr %353, align 8, !tbaa !42
  store i64 %354, ptr %30, align 8, !tbaa !9
  %355 = load ptr, ptr %47, align 8, !tbaa !5
  %356 = load i64, ptr %30, align 8, !tbaa !9
  %357 = getelementptr inbounds i64, ptr %355, i64 %356
  store i64 1, ptr %357, align 8, !tbaa !9
  %358 = load ptr, ptr %48, align 8, !tbaa !5
  %359 = load i64, ptr %30, align 8, !tbaa !9
  %360 = load i64, ptr %9, align 8, !tbaa !9
  %361 = mul nsw i64 %359, %360
  %362 = getelementptr inbounds i64, ptr %358, i64 %361
  store ptr %362, ptr %49, align 8, !tbaa !5
  store i64 0, ptr %34, align 8, !tbaa !9
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %363

363:                                              ; preds = %400, %349
  %364 = load i64, ptr %18, align 8, !tbaa !9
  %365 = load i64, ptr %24, align 8, !tbaa !9
  %366 = icmp slt i64 %364, %365
  br i1 %366, label %367, label %403

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

371:                                              ; preds = %367
  br label %400

372:                                              ; preds = %367
  %373 = load ptr, ptr %51, align 8, !tbaa !5
  %374 = load i64, ptr %18, align 8, !tbaa !9
  %375 = getelementptr inbounds %struct.edegreedef, ptr %373, i64 %374
  %376 = getelementptr inbounds %struct.edegreedef, ptr %375, i32 0, i32 0
  %377 = load i64, ptr %376, align 8, !tbaa !42
  store i64 %377, ptr %19, align 8, !tbaa !9
  %378 = load ptr, ptr %49, align 8, !tbaa !5
  %379 = load i64, ptr %19, align 8, !tbaa !9
  %380 = getelementptr inbounds i64, ptr %378, i64 %379
  %381 = load i64, ptr %380, align 8, !tbaa !9
  %382 = icmp eq i64 %381, 0
  br i1 %382, label %383, label %399

383:                                              ; preds = %372
  %384 = load ptr, ptr %50, align 8, !tbaa !5
  %385 = load i64, ptr %19, align 8, !tbaa !9
  %386 = getelementptr inbounds i64, ptr %384, i64 %385
  %387 = load i64, ptr %386, align 8, !tbaa !9
  %388 = load i64, ptr %33, align 8, !tbaa !9
  %389 = sub nsw i64 %388, 1
  %390 = icmp sgt i64 %387, %389
  br i1 %390, label %391, label %396

391:                                              ; preds = %383
  %392 = load ptr, ptr %47, align 8, !tbaa !5
  %393 = load i64, ptr %30, align 8, !tbaa !9
  %394 = getelementptr inbounds i64, ptr %392, i64 %393
  store i64 0, ptr %394, align 8, !tbaa !9
  %395 = load i64, ptr %33, align 8, !tbaa !9
  store i64 %395, ptr %34, align 8, !tbaa !9
  br label %403

396:                                              ; preds = %383
  %397 = load i64, ptr %34, align 8, !tbaa !9
  %398 = add nsw i64 %397, 1
  store i64 %398, ptr %34, align 8, !tbaa !9
  br label %399

399:                                              ; preds = %396, %372
  br label %400

400:                                              ; preds = %399, %371
  %401 = load i64, ptr %18, align 8, !tbaa !9
  %402 = add nsw i64 %401, 1
  store i64 %402, ptr %18, align 8, !tbaa !9
  br label %363, !llvm.loop !44

403:                                              ; preds = %391, %363
  %404 = load ptr, ptr %50, align 8, !tbaa !5
  %405 = load i64, ptr %30, align 8, !tbaa !9
  %406 = getelementptr inbounds i64, ptr %404, i64 %405
  %407 = load i64, ptr %406, align 8, !tbaa !9
  %408 = load i64, ptr %34, align 8, !tbaa !9
  %409 = add nsw i64 %407, %408
  %410 = load i64, ptr %33, align 8, !tbaa !9
  %411 = icmp sgt i64 %409, %410
  br i1 %411, label %412, label %416

412:                                              ; preds = %403
  %413 = load ptr, ptr %47, align 8, !tbaa !5
  %414 = load i64, ptr %30, align 8, !tbaa !9
  %415 = getelementptr inbounds i64, ptr %413, i64 %414
  store i64 0, ptr %415, align 8, !tbaa !9
  br label %416

416:                                              ; preds = %412, %403
  br label %417

417:                                              ; preds = %416
  %418 = load i64, ptr %16, align 8, !tbaa !9
  %419 = add nsw i64 %418, 1
  store i64 %419, ptr %16, align 8, !tbaa !9
  br label %345, !llvm.loop !45

420:                                              ; preds = %345
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %421

421:                                              ; preds = %473, %420
  %422 = load i64, ptr %18, align 8, !tbaa !9
  %423 = load i64, ptr %24, align 8, !tbaa !9
  %424 = icmp slt i64 %422, %423
  br i1 %424, label %425, label %476

425:                                              ; preds = %421
  %426 = load ptr, ptr %51, align 8, !tbaa !5
  %427 = load i64, ptr %18, align 8, !tbaa !9
  %428 = getelementptr inbounds %struct.edegreedef, ptr %426, i64 %427
  %429 = getelementptr inbounds %struct.edegreedef, ptr %428, i32 0, i32 0
  %430 = load i64, ptr %429, align 8, !tbaa !42
  store i64 %430, ptr %30, align 8, !tbaa !9
  %431 = load ptr, ptr %47, align 8, !tbaa !5
  %432 = load i64, ptr %30, align 8, !tbaa !9
  %433 = getelementptr inbounds i64, ptr %431, i64 %432
  %434 = load i64, ptr %433, align 8, !tbaa !9
  %435 = icmp ne i64 %434, 0
  br i1 %435, label %437, label %436

436:                                              ; preds = %425
  br label %473

437:                                              ; preds = %425
  %438 = load ptr, ptr %39, align 8, !tbaa !5
  %439 = load i64, ptr %30, align 8, !tbaa !9
  %440 = getelementptr inbounds i64, ptr %438, i64 %439
  %441 = load i64, ptr %440, align 8, !tbaa !9
  %442 = load i64, ptr %32, align 8, !tbaa !9
  %443 = add nsw i64 %441, %442
  %444 = load ptr, ptr %44, align 8, !tbaa !5
  %445 = load i64, ptr %30, align 8, !tbaa !9
  %446 = getelementptr inbounds i64, ptr %444, i64 %445
  %447 = load i64, ptr %446, align 8, !tbaa !9
  %448 = icmp sle i64 %443, %447
  br i1 %448, label %471, label %449

449:                                              ; preds = %437
  %450 = load ptr, ptr %46, align 8, !tbaa !5
  %451 = load i64, ptr %28, align 8, !tbaa !9
  %452 = getelementptr inbounds i64, ptr %450, i64 %451
  %453 = load i64, ptr %452, align 8, !tbaa !9
  %454 = load ptr, ptr %39, align 8, !tbaa !5
  %455 = load i64, ptr %30, align 8, !tbaa !9
  %456 = getelementptr inbounds i64, ptr %454, i64 %455
  %457 = load i64, ptr %456, align 8, !tbaa !9
  %458 = load i64, ptr %32, align 8, !tbaa !9
  %459 = add nsw i64 %457, %458
  %460 = mul nsw i64 %453, %459
  %461 = load ptr, ptr %46, align 8, !tbaa !5
  %462 = load i64, ptr %30, align 8, !tbaa !9
  %463 = getelementptr inbounds i64, ptr %461, i64 %462
  %464 = load i64, ptr %463, align 8, !tbaa !9
  %465 = load ptr, ptr %39, align 8, !tbaa !5
  %466 = load i64, ptr %28, align 8, !tbaa !9
  %467 = getelementptr inbounds i64, ptr %465, i64 %466
  %468 = load i64, ptr %467, align 8, !tbaa !9
  %469 = mul nsw i64 %464, %468
  %470 = icmp sle i64 %460, %469
  br i1 %470, label %471, label %472

471:                                              ; preds = %449, %437
  br label %476

472:                                              ; preds = %449
  br label %473

473:                                              ; preds = %472, %436
  %474 = load i64, ptr %18, align 8, !tbaa !9
  %475 = add nsw i64 %474, 1
  store i64 %475, ptr %18, align 8, !tbaa !9
  br label %421, !llvm.loop !46

476:                                              ; preds = %471, %421
  %477 = load i64, ptr %18, align 8, !tbaa !9
  %478 = load i64, ptr %24, align 8, !tbaa !9
  %479 = icmp eq i64 %477, %478
  br i1 %479, label %480, label %481

480:                                              ; preds = %476
  br label %303

481:                                              ; preds = %476
  %482 = load i64, ptr %18, align 8, !tbaa !9
  %483 = add nsw i64 %482, 1
  store i64 %483, ptr %16, align 8, !tbaa !9
  br label %484

484:                                              ; preds = %531, %481
  %485 = load i64, ptr %16, align 8, !tbaa !9
  %486 = load i64, ptr %24, align 8, !tbaa !9
  %487 = icmp slt i64 %485, %486
  br i1 %487, label %488, label %534

488:                                              ; preds = %484
  %489 = load ptr, ptr %51, align 8, !tbaa !5
  %490 = load i64, ptr %16, align 8, !tbaa !9
  %491 = getelementptr inbounds %struct.edegreedef, ptr %489, i64 %490
  %492 = getelementptr inbounds %struct.edegreedef, ptr %491, i32 0, i32 0
  %493 = load i64, ptr %492, align 8, !tbaa !42
  store i64 %493, ptr %30, align 8, !tbaa !9
  %494 = load ptr, ptr %47, align 8, !tbaa !5
  %495 = load i64, ptr %30, align 8, !tbaa !9
  %496 = getelementptr inbounds i64, ptr %494, i64 %495
  %497 = load i64, ptr %496, align 8, !tbaa !9
  %498 = icmp ne i64 %497, 0
  br i1 %498, label %500, label %499

499:                                              ; preds = %488
  br label %531

500:                                              ; preds = %488
  %501 = load ptr, ptr %46, align 8, !tbaa !5
  %502 = load ptr, ptr %51, align 8, !tbaa !5
  %503 = load i64, ptr %18, align 8, !tbaa !9
  %504 = getelementptr inbounds %struct.edegreedef, ptr %502, i64 %503
  %505 = getelementptr inbounds %struct.edegreedef, ptr %504, i32 0, i32 0
  %506 = load i64, ptr %505, align 8, !tbaa !42
  %507 = getelementptr inbounds i64, ptr %501, i64 %506
  %508 = load i64, ptr %507, align 8, !tbaa !9
  %509 = load ptr, ptr %39, align 8, !tbaa !5
  %510 = load i64, ptr %30, align 8, !tbaa !9
  %511 = getelementptr inbounds i64, ptr %509, i64 %510
  %512 = load i64, ptr %511, align 8, !tbaa !9
  %513 = mul nsw i64 %508, %512
  %514 = load ptr, ptr %46, align 8, !tbaa !5
  %515 = load i64, ptr %30, align 8, !tbaa !9
  %516 = getelementptr inbounds i64, ptr %514, i64 %515
  %517 = load i64, ptr %516, align 8, !tbaa !9
  %518 = load ptr, ptr %39, align 8, !tbaa !5
  %519 = load ptr, ptr %51, align 8, !tbaa !5
  %520 = load i64, ptr %18, align 8, !tbaa !9
  %521 = getelementptr inbounds %struct.edegreedef, ptr %519, i64 %520
  %522 = getelementptr inbounds %struct.edegreedef, ptr %521, i32 0, i32 0
  %523 = load i64, ptr %522, align 8, !tbaa !42
  %524 = getelementptr inbounds i64, ptr %518, i64 %523
  %525 = load i64, ptr %524, align 8, !tbaa !9
  %526 = mul nsw i64 %517, %525
  %527 = icmp slt i64 %513, %526
  br i1 %527, label %528, label %530

528:                                              ; preds = %500
  %529 = load i64, ptr %16, align 8, !tbaa !9
  store i64 %529, ptr %18, align 8, !tbaa !9
  br label %530

530:                                              ; preds = %528, %500
  br label %531

531:                                              ; preds = %530, %499
  %532 = load i64, ptr %16, align 8, !tbaa !9
  %533 = add nsw i64 %532, 1
  store i64 %533, ptr %16, align 8, !tbaa !9
  br label %484, !llvm.loop !47

534:                                              ; preds = %484
  %535 = load ptr, ptr %51, align 8, !tbaa !5
  %536 = load i64, ptr %18, align 8, !tbaa !9
  %537 = getelementptr inbounds %struct.edegreedef, ptr %535, i64 %536
  %538 = getelementptr inbounds %struct.edegreedef, ptr %537, i32 0, i32 0
  %539 = load i64, ptr %538, align 8, !tbaa !42
  store i64 %539, ptr %30, align 8, !tbaa !9
  %540 = load ptr, ptr %39, align 8, !tbaa !5
  %541 = load i64, ptr %28, align 8, !tbaa !9
  %542 = getelementptr inbounds i64, ptr %540, i64 %541
  %543 = load i64, ptr %542, align 8, !tbaa !9
  %544 = load ptr, ptr %44, align 8, !tbaa !5
  %545 = load i64, ptr %28, align 8, !tbaa !9
  %546 = getelementptr inbounds i64, ptr %544, i64 %545
  %547 = load i64, ptr %546, align 8, !tbaa !9
  %548 = icmp slt i64 %543, %547
  br i1 %548, label %549, label %571

549:                                              ; preds = %534
  %550 = load ptr, ptr %39, align 8, !tbaa !5
  %551 = load i64, ptr %30, align 8, !tbaa !9
  %552 = getelementptr inbounds i64, ptr %550, i64 %551
  %553 = load i64, ptr %552, align 8, !tbaa !9
  %554 = load ptr, ptr %43, align 8, !tbaa !5
  %555 = load i64, ptr %30, align 8, !tbaa !9
  %556 = getelementptr inbounds i64, ptr %554, i64 %555
  %557 = load i64, ptr %556, align 8, !tbaa !9
  %558 = icmp sgt i64 %553, %557
  br i1 %558, label %559, label %571

559:                                              ; preds = %549
  %560 = load ptr, ptr %51, align 8, !tbaa !5
  %561 = load i64, ptr %18, align 8, !tbaa !9
  %562 = getelementptr inbounds %struct.edegreedef, ptr %560, i64 %561
  %563 = getelementptr inbounds %struct.edegreedef, ptr %562, i32 0, i32 1
  %564 = load i64, ptr %563, align 8, !tbaa !48
  %565 = load ptr, ptr %52, align 8, !tbaa !5
  %566 = getelementptr inbounds %struct.rinfodef, ptr %565, i32 0, i32 0
  %567 = load i64, ptr %566, align 8, !tbaa !37
  %568 = sub nsw i64 %564, %567
  %569 = icmp slt i64 %568, 0
  br i1 %569, label %570, label %571

570:                                              ; preds = %559
  br label %303

571:                                              ; preds = %559, %549, %534
  %572 = load ptr, ptr %51, align 8, !tbaa !5
  %573 = load i64, ptr %18, align 8, !tbaa !9
  %574 = getelementptr inbounds %struct.edegreedef, ptr %572, i64 %573
  %575 = getelementptr inbounds %struct.edegreedef, ptr %574, i32 0, i32 1
  %576 = load i64, ptr %575, align 8, !tbaa !48
  %577 = load ptr, ptr %52, align 8, !tbaa !5
  %578 = getelementptr inbounds %struct.rinfodef, ptr %577, i32 0, i32 0
  %579 = load i64, ptr %578, align 8, !tbaa !37
  %580 = sub nsw i64 %576, %579
  %581 = load ptr, ptr %8, align 8, !tbaa !5
  %582 = getelementptr inbounds %struct.graphdef, ptr %581, i32 0, i32 16
  %583 = load i64, ptr %582, align 8, !tbaa !32
  %584 = sub nsw i64 %583, %580
  store i64 %584, ptr %582, align 8, !tbaa !32
  %585 = load ptr, ptr %7, align 8, !tbaa !5
  %586 = getelementptr inbounds %struct.controldef, ptr %585, i32 0, i32 1
  %587 = load i64, ptr %586, align 8, !tbaa !30
  %588 = and i64 %587, 32
  %589 = icmp ne i64 %588, 0
  br i1 %589, label %590, label %606

590:                                              ; preds = %571
  %591 = load i64, ptr %13, align 8, !tbaa !9
  %592 = load i64, ptr %30, align 8, !tbaa !9
  %593 = load ptr, ptr %51, align 8, !tbaa !5
  %594 = load i64, ptr %18, align 8, !tbaa !9
  %595 = getelementptr inbounds %struct.edegreedef, ptr %593, i64 %594
  %596 = getelementptr inbounds %struct.edegreedef, ptr %595, i32 0, i32 1
  %597 = load i64, ptr %596, align 8, !tbaa !48
  %598 = load ptr, ptr %52, align 8, !tbaa !5
  %599 = getelementptr inbounds %struct.rinfodef, ptr %598, i32 0, i32 0
  %600 = load i64, ptr %599, align 8, !tbaa !37
  %601 = sub nsw i64 %597, %600
  %602 = load ptr, ptr %8, align 8, !tbaa !5
  %603 = getelementptr inbounds %struct.graphdef, ptr %602, i32 0, i32 16
  %604 = load i64, ptr %603, align 8, !tbaa !32
  %605 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.1, i64 noundef %591, i64 noundef %592, i64 noundef %601, i64 noundef %604)
  br label %606

606:                                              ; preds = %590, %571
  %607 = load ptr, ptr %52, align 8, !tbaa !5
  %608 = getelementptr inbounds %struct.rinfodef, ptr %607, i32 0, i32 0
  %609 = load i64, ptr %608, align 8, !tbaa !37
  %610 = load ptr, ptr %51, align 8, !tbaa !5
  %611 = load i64, ptr %18, align 8, !tbaa !9
  %612 = getelementptr inbounds %struct.edegreedef, ptr %610, i64 %611
  %613 = getelementptr inbounds %struct.edegreedef, ptr %612, i32 0, i32 1
  %614 = load i64, ptr %613, align 8, !tbaa !48
  %615 = sub nsw i64 %609, %614
  %616 = load ptr, ptr %48, align 8, !tbaa !5
  %617 = load i64, ptr %28, align 8, !tbaa !9
  %618 = load i64, ptr %9, align 8, !tbaa !9
  %619 = mul nsw i64 %617, %618
  %620 = load i64, ptr %30, align 8, !tbaa !9
  %621 = add nsw i64 %619, %620
  %622 = getelementptr inbounds i64, ptr %616, i64 %621
  %623 = load i64, ptr %622, align 8, !tbaa !9
  %624 = add nsw i64 %623, %615
  store i64 %624, ptr %622, align 8, !tbaa !9
  %625 = load ptr, ptr %52, align 8, !tbaa !5
  %626 = getelementptr inbounds %struct.rinfodef, ptr %625, i32 0, i32 0
  %627 = load i64, ptr %626, align 8, !tbaa !37
  %628 = load ptr, ptr %51, align 8, !tbaa !5
  %629 = load i64, ptr %18, align 8, !tbaa !9
  %630 = getelementptr inbounds %struct.edegreedef, ptr %628, i64 %629
  %631 = getelementptr inbounds %struct.edegreedef, ptr %630, i32 0, i32 1
  %632 = load i64, ptr %631, align 8, !tbaa !48
  %633 = sub nsw i64 %627, %632
  %634 = load ptr, ptr %48, align 8, !tbaa !5
  %635 = load i64, ptr %30, align 8, !tbaa !9
  %636 = load i64, ptr %9, align 8, !tbaa !9
  %637 = mul nsw i64 %635, %636
  %638 = load i64, ptr %28, align 8, !tbaa !9
  %639 = add nsw i64 %637, %638
  %640 = getelementptr inbounds i64, ptr %634, i64 %639
  %641 = load i64, ptr %640, align 8, !tbaa !9
  %642 = add nsw i64 %641, %633
  store i64 %642, ptr %640, align 8, !tbaa !9
  %643 = load ptr, ptr %48, align 8, !tbaa !5
  %644 = load i64, ptr %28, align 8, !tbaa !9
  %645 = load i64, ptr %9, align 8, !tbaa !9
  %646 = mul nsw i64 %644, %645
  %647 = load i64, ptr %30, align 8, !tbaa !9
  %648 = add nsw i64 %646, %647
  %649 = getelementptr inbounds i64, ptr %643, i64 %648
  %650 = load i64, ptr %649, align 8, !tbaa !9
  %651 = icmp eq i64 %650, 0
  br i1 %651, label %652, label %673

652:                                              ; preds = %606
  %653 = load ptr, ptr %50, align 8, !tbaa !5
  %654 = load i64, ptr %28, align 8, !tbaa !9
  %655 = getelementptr inbounds i64, ptr %653, i64 %654
  %656 = load i64, ptr %655, align 8, !tbaa !9
  %657 = add nsw i64 %656, -1
  store i64 %657, ptr %655, align 8, !tbaa !9
  %658 = load ptr, ptr %50, align 8, !tbaa !5
  %659 = load i64, ptr %28, align 8, !tbaa !9
  %660 = getelementptr inbounds i64, ptr %658, i64 %659
  %661 = load i64, ptr %660, align 8, !tbaa !9
  %662 = add nsw i64 %661, 1
  %663 = load i64, ptr %33, align 8, !tbaa !9
  %664 = icmp eq i64 %662, %663
  br i1 %664, label %665, label %672

665:                                              ; preds = %652
  %666 = load ptr, ptr %50, align 8, !tbaa !5
  %667 = load i64, ptr %9, align 8, !tbaa !9
  %668 = load ptr, ptr %50, align 8, !tbaa !5
  %669 = call i64 @libmetis__idxargmax(i64 noundef %667, ptr noundef %668)
  %670 = getelementptr inbounds i64, ptr %666, i64 %669
  %671 = load i64, ptr %670, align 8, !tbaa !9
  store i64 %671, ptr %33, align 8, !tbaa !9
  br label %672

672:                                              ; preds = %665, %652
  br label %673

673:                                              ; preds = %672, %606
  %674 = load ptr, ptr %48, align 8, !tbaa !5
  %675 = load i64, ptr %30, align 8, !tbaa !9
  %676 = load i64, ptr %9, align 8, !tbaa !9
  %677 = mul nsw i64 %675, %676
  %678 = load i64, ptr %28, align 8, !tbaa !9
  %679 = add nsw i64 %677, %678
  %680 = getelementptr inbounds i64, ptr %674, i64 %679
  %681 = load i64, ptr %680, align 8, !tbaa !9
  %682 = icmp eq i64 %681, 0
  br i1 %682, label %683, label %704

683:                                              ; preds = %673
  %684 = load ptr, ptr %50, align 8, !tbaa !5
  %685 = load i64, ptr %30, align 8, !tbaa !9
  %686 = getelementptr inbounds i64, ptr %684, i64 %685
  %687 = load i64, ptr %686, align 8, !tbaa !9
  %688 = add nsw i64 %687, -1
  store i64 %688, ptr %686, align 8, !tbaa !9
  %689 = load ptr, ptr %50, align 8, !tbaa !5
  %690 = load i64, ptr %30, align 8, !tbaa !9
  %691 = getelementptr inbounds i64, ptr %689, i64 %690
  %692 = load i64, ptr %691, align 8, !tbaa !9
  %693 = add nsw i64 %692, 1
  %694 = load i64, ptr %33, align 8, !tbaa !9
  %695 = icmp eq i64 %693, %694
  br i1 %695, label %696, label %703

696:                                              ; preds = %683
  %697 = load ptr, ptr %50, align 8, !tbaa !5
  %698 = load i64, ptr %9, align 8, !tbaa !9
  %699 = load ptr, ptr %50, align 8, !tbaa !5
  %700 = call i64 @libmetis__idxargmax(i64 noundef %698, ptr noundef %699)
  %701 = getelementptr inbounds i64, ptr %697, i64 %700
  %702 = load i64, ptr %701, align 8, !tbaa !9
  store i64 %702, ptr %33, align 8, !tbaa !9
  br label %703

703:                                              ; preds = %696, %683
  br label %704

704:                                              ; preds = %703, %673
  %705 = load i64, ptr %30, align 8, !tbaa !9
  %706 = load ptr, ptr %38, align 8, !tbaa !5
  %707 = load i64, ptr %13, align 8, !tbaa !9
  %708 = getelementptr inbounds i64, ptr %706, i64 %707
  store i64 %705, ptr %708, align 8, !tbaa !9
  br label %709

709:                                              ; preds = %704
  %710 = load i64, ptr %32, align 8, !tbaa !9
  %711 = load ptr, ptr %39, align 8, !tbaa !5
  %712 = load i64, ptr %30, align 8, !tbaa !9
  %713 = getelementptr inbounds i64, ptr %711, i64 %712
  %714 = load i64, ptr %713, align 8, !tbaa !9
  %715 = add nsw i64 %714, %710
  store i64 %715, ptr %713, align 8, !tbaa !9
  %716 = load i64, ptr %32, align 8, !tbaa !9
  %717 = load ptr, ptr %39, align 8, !tbaa !5
  %718 = load i64, ptr %28, align 8, !tbaa !9
  %719 = getelementptr inbounds i64, ptr %717, i64 %718
  %720 = load i64, ptr %719, align 8, !tbaa !9
  %721 = sub nsw i64 %720, %716
  store i64 %721, ptr %719, align 8, !tbaa !9
  br label %722

722:                                              ; preds = %709
  br label %723

723:                                              ; preds = %722
  %724 = load ptr, ptr %52, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.rinfodef, ptr %724, i32 0, i32 0
  %726 = load i64, ptr %725, align 8, !tbaa !37
  %727 = load ptr, ptr %51, align 8, !tbaa !5
  %728 = load i64, ptr %18, align 8, !tbaa !9
  %729 = getelementptr inbounds %struct.edegreedef, ptr %727, i64 %728
  %730 = getelementptr inbounds %struct.edegreedef, ptr %729, i32 0, i32 1
  %731 = load i64, ptr %730, align 8, !tbaa !48
  %732 = sub nsw i64 %726, %731
  %733 = load ptr, ptr %52, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.rinfodef, ptr %733, i32 0, i32 1
  %735 = load i64, ptr %734, align 8, !tbaa !35
  %736 = add nsw i64 %735, %732
  store i64 %736, ptr %734, align 8, !tbaa !35
  br label %737

737:                                              ; preds = %723
  %738 = load ptr, ptr %52, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.rinfodef, ptr %738, i32 0, i32 0
  %740 = load i64, ptr %739, align 8, !tbaa !37
  store i64 %740, ptr %16, align 8, !tbaa !9
  %741 = load ptr, ptr %51, align 8, !tbaa !5
  %742 = load i64, ptr %18, align 8, !tbaa !9
  %743 = getelementptr inbounds %struct.edegreedef, ptr %741, i64 %742
  %744 = getelementptr inbounds %struct.edegreedef, ptr %743, i32 0, i32 1
  %745 = load i64, ptr %744, align 8, !tbaa !48
  %746 = load ptr, ptr %52, align 8, !tbaa !5
  %747 = getelementptr inbounds %struct.rinfodef, ptr %746, i32 0, i32 0
  store i64 %745, ptr %747, align 8, !tbaa !37
  %748 = load i64, ptr %16, align 8, !tbaa !9
  %749 = load ptr, ptr %51, align 8, !tbaa !5
  %750 = load i64, ptr %18, align 8, !tbaa !9
  %751 = getelementptr inbounds %struct.edegreedef, ptr %749, i64 %750
  %752 = getelementptr inbounds %struct.edegreedef, ptr %751, i32 0, i32 1
  store i64 %748, ptr %752, align 8, !tbaa !48
  br label %753

753:                                              ; preds = %737
  br label %754

754:                                              ; preds = %753
  %755 = load ptr, ptr %51, align 8, !tbaa !5
  %756 = load i64, ptr %18, align 8, !tbaa !9
  %757 = getelementptr inbounds %struct.edegreedef, ptr %755, i64 %756
  %758 = getelementptr inbounds %struct.edegreedef, ptr %757, i32 0, i32 1
  %759 = load i64, ptr %758, align 8, !tbaa !48
  %760 = icmp eq i64 %759, 0
  br i1 %760, label %761, label %771

761:                                              ; preds = %754
  %762 = load ptr, ptr %51, align 8, !tbaa !5
  %763 = load i64, ptr %18, align 8, !tbaa !9
  %764 = getelementptr inbounds %struct.edegreedef, ptr %762, i64 %763
  %765 = load ptr, ptr %51, align 8, !tbaa !5
  %766 = load ptr, ptr %52, align 8, !tbaa !5
  %767 = getelementptr inbounds %struct.rinfodef, ptr %766, i32 0, i32 2
  %768 = load i64, ptr %767, align 8, !tbaa !41
  %769 = add nsw i64 %768, -1
  store i64 %769, ptr %767, align 8, !tbaa !41
  %770 = getelementptr inbounds %struct.edegreedef, ptr %765, i64 %769
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %764, ptr align 8 %770, i64 16, i1 false), !tbaa.struct !49
  br label %777

771:                                              ; preds = %754
  %772 = load i64, ptr %28, align 8, !tbaa !9
  %773 = load ptr, ptr %51, align 8, !tbaa !5
  %774 = load i64, ptr %18, align 8, !tbaa !9
  %775 = getelementptr inbounds %struct.edegreedef, ptr %773, i64 %774
  %776 = getelementptr inbounds %struct.edegreedef, ptr %775, i32 0, i32 0
  store i64 %772, ptr %776, align 8, !tbaa !42
  br label %777

777:                                              ; preds = %771, %761
  %778 = load ptr, ptr %52, align 8, !tbaa !5
  %779 = getelementptr inbounds %struct.rinfodef, ptr %778, i32 0, i32 1
  %780 = load i64, ptr %779, align 8, !tbaa !35
  %781 = icmp eq i64 %780, 0
  br i1 %781, label %782, label %810

782:                                              ; preds = %777
  br label %783

783:                                              ; preds = %782
  %784 = load ptr, ptr %42, align 8, !tbaa !5
  %785 = load i64, ptr %22, align 8, !tbaa !9
  %786 = add nsw i64 %785, -1
  store i64 %786, ptr %22, align 8, !tbaa !9
  %787 = getelementptr inbounds i64, ptr %784, i64 %786
  %788 = load i64, ptr %787, align 8, !tbaa !9
  %789 = load ptr, ptr %42, align 8, !tbaa !5
  %790 = load ptr, ptr %41, align 8, !tbaa !5
  %791 = load i64, ptr %13, align 8, !tbaa !9
  %792 = getelementptr inbounds i64, ptr %790, i64 %791
  %793 = load i64, ptr %792, align 8, !tbaa !9
  %794 = getelementptr inbounds i64, ptr %789, i64 %793
  store i64 %788, ptr %794, align 8, !tbaa !9
  %795 = load ptr, ptr %41, align 8, !tbaa !5
  %796 = load i64, ptr %13, align 8, !tbaa !9
  %797 = getelementptr inbounds i64, ptr %795, i64 %796
  %798 = load i64, ptr %797, align 8, !tbaa !9
  %799 = load ptr, ptr %41, align 8, !tbaa !5
  %800 = load ptr, ptr %42, align 8, !tbaa !5
  %801 = load i64, ptr %22, align 8, !tbaa !9
  %802 = getelementptr inbounds i64, ptr %800, i64 %801
  %803 = load i64, ptr %802, align 8, !tbaa !9
  %804 = getelementptr inbounds i64, ptr %799, i64 %803
  store i64 %798, ptr %804, align 8, !tbaa !9
  %805 = load ptr, ptr %41, align 8, !tbaa !5
  %806 = load i64, ptr %13, align 8, !tbaa !9
  %807 = getelementptr inbounds i64, ptr %805, i64 %806
  store i64 -1, ptr %807, align 8, !tbaa !9
  br label %808

808:                                              ; preds = %783
  br label %809

809:                                              ; preds = %808
  br label %810

810:                                              ; preds = %809, %777
  %811 = load ptr, ptr %35, align 8, !tbaa !5
  %812 = load i64, ptr %13, align 8, !tbaa !9
  %813 = getelementptr inbounds i64, ptr %811, i64 %812
  %814 = load i64, ptr %813, align 8, !tbaa !9
  store i64 %814, ptr %16, align 8, !tbaa !9
  br label %815

815:                                              ; preds = %1358, %810
  %816 = load i64, ptr %16, align 8, !tbaa !9
  %817 = load ptr, ptr %35, align 8, !tbaa !5
  %818 = load i64, ptr %13, align 8, !tbaa !9
  %819 = add nsw i64 %818, 1
  %820 = getelementptr inbounds i64, ptr %817, i64 %819
  %821 = load i64, ptr %820, align 8, !tbaa !9
  %822 = icmp slt i64 %816, %821
  br i1 %822, label %823, label %1361

823:                                              ; preds = %815
  %824 = load ptr, ptr %36, align 8, !tbaa !5
  %825 = load i64, ptr %16, align 8, !tbaa !9
  %826 = getelementptr inbounds i64, ptr %824, i64 %825
  %827 = load i64, ptr %826, align 8, !tbaa !9
  store i64 %827, ptr %14, align 8, !tbaa !9
  %828 = load ptr, ptr %38, align 8, !tbaa !5
  %829 = load i64, ptr %14, align 8, !tbaa !9
  %830 = getelementptr inbounds i64, ptr %828, i64 %829
  %831 = load i64, ptr %830, align 8, !tbaa !9
  store i64 %831, ptr %29, align 8, !tbaa !9
  %832 = load ptr, ptr %8, align 8, !tbaa !5
  %833 = getelementptr inbounds %struct.graphdef, ptr %832, i32 0, i32 25
  %834 = load ptr, ptr %833, align 8, !tbaa !34
  %835 = load i64, ptr %14, align 8, !tbaa !9
  %836 = getelementptr inbounds %struct.rinfodef, ptr %834, i64 %835
  store ptr %836, ptr %52, align 8, !tbaa !5
  %837 = load ptr, ptr %52, align 8, !tbaa !5
  %838 = getelementptr inbounds %struct.rinfodef, ptr %837, i32 0, i32 3
  %839 = load ptr, ptr %838, align 8, !tbaa !40
  %840 = icmp eq ptr %839, null
  br i1 %840, label %841, label %868

841:                                              ; preds = %823
  %842 = load ptr, ptr %7, align 8, !tbaa !5
  %843 = getelementptr inbounds %struct.controldef, ptr %842, i32 0, i32 11
  %844 = getelementptr inbounds %struct.workspacedef, ptr %843, i32 0, i32 3
  %845 = load ptr, ptr %844, align 8, !tbaa !50
  %846 = load ptr, ptr %7, align 8, !tbaa !5
  %847 = getelementptr inbounds %struct.controldef, ptr %846, i32 0, i32 11
  %848 = getelementptr inbounds %struct.workspacedef, ptr %847, i32 0, i32 5
  %849 = load i64, ptr %848, align 8, !tbaa !51
  %850 = getelementptr inbounds %struct.edegreedef, ptr %845, i64 %849
  %851 = load ptr, ptr %52, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.rinfodef, ptr %851, i32 0, i32 3
  store ptr %850, ptr %852, align 8, !tbaa !40
  %853 = load ptr, ptr %35, align 8, !tbaa !5
  %854 = load i64, ptr %14, align 8, !tbaa !9
  %855 = add nsw i64 %854, 1
  %856 = getelementptr inbounds i64, ptr %853, i64 %855
  %857 = load i64, ptr %856, align 8, !tbaa !9
  %858 = load ptr, ptr %35, align 8, !tbaa !5
  %859 = load i64, ptr %14, align 8, !tbaa !9
  %860 = getelementptr inbounds i64, ptr %858, i64 %859
  %861 = load i64, ptr %860, align 8, !tbaa !9
  %862 = sub nsw i64 %857, %861
  %863 = load ptr, ptr %7, align 8, !tbaa !5
  %864 = getelementptr inbounds %struct.controldef, ptr %863, i32 0, i32 11
  %865 = getelementptr inbounds %struct.workspacedef, ptr %864, i32 0, i32 5
  %866 = load i64, ptr %865, align 8, !tbaa !51
  %867 = add nsw i64 %866, %862
  store i64 %867, ptr %865, align 8, !tbaa !51
  br label %868

868:                                              ; preds = %841, %823
  %869 = load ptr, ptr %52, align 8, !tbaa !5
  %870 = getelementptr inbounds %struct.rinfodef, ptr %869, i32 0, i32 3
  %871 = load ptr, ptr %870, align 8, !tbaa !40
  store ptr %871, ptr %51, align 8, !tbaa !5
  %872 = load ptr, ptr %52, align 8, !tbaa !5
  %873 = getelementptr inbounds %struct.rinfodef, ptr %872, i32 0, i32 1
  %874 = load i64, ptr %873, align 8, !tbaa !35
  %875 = load ptr, ptr %52, align 8, !tbaa !5
  %876 = getelementptr inbounds %struct.rinfodef, ptr %875, i32 0, i32 0
  %877 = load i64, ptr %876, align 8, !tbaa !37
  %878 = sub nsw i64 %874, %877
  store i64 %878, ptr %25, align 8, !tbaa !9
  %879 = load i64, ptr %29, align 8, !tbaa !9
  %880 = load i64, ptr %28, align 8, !tbaa !9
  %881 = icmp eq i64 %879, %880
  br i1 %881, label %882, label %926

882:                                              ; preds = %868
  br label %883

883:                                              ; preds = %882
  %884 = load ptr, ptr %37, align 8, !tbaa !5
  %885 = load i64, ptr %16, align 8, !tbaa !9
  %886 = getelementptr inbounds i64, ptr %884, i64 %885
  %887 = load i64, ptr %886, align 8, !tbaa !9
  %888 = load ptr, ptr %52, align 8, !tbaa !5
  %889 = getelementptr inbounds %struct.rinfodef, ptr %888, i32 0, i32 1
  %890 = load i64, ptr %889, align 8, !tbaa !35
  %891 = add nsw i64 %890, %887
  store i64 %891, ptr %889, align 8, !tbaa !35
  %892 = load ptr, ptr %37, align 8, !tbaa !5
  %893 = load i64, ptr %16, align 8, !tbaa !9
  %894 = getelementptr inbounds i64, ptr %892, i64 %893
  %895 = load i64, ptr %894, align 8, !tbaa !9
  %896 = load ptr, ptr %52, align 8, !tbaa !5
  %897 = getelementptr inbounds %struct.rinfodef, ptr %896, i32 0, i32 0
  %898 = load i64, ptr %897, align 8, !tbaa !37
  %899 = sub nsw i64 %898, %895
  store i64 %899, ptr %897, align 8, !tbaa !37
  br label %900

900:                                              ; preds = %883
  br label %901

901:                                              ; preds = %900
  %902 = load ptr, ptr %52, align 8, !tbaa !5
  %903 = getelementptr inbounds %struct.rinfodef, ptr %902, i32 0, i32 1
  %904 = load i64, ptr %903, align 8, !tbaa !35
  %905 = icmp sgt i64 %904, 0
  br i1 %905, label %906, label %925

906:                                              ; preds = %901
  %907 = load ptr, ptr %41, align 8, !tbaa !5
  %908 = load i64, ptr %14, align 8, !tbaa !9
  %909 = getelementptr inbounds i64, ptr %907, i64 %908
  %910 = load i64, ptr %909, align 8, !tbaa !9
  %911 = icmp eq i64 %910, -1
  br i1 %911, label %912, label %925

912:                                              ; preds = %906
  br label %913

913:                                              ; preds = %912
  %914 = load i64, ptr %14, align 8, !tbaa !9
  %915 = load ptr, ptr %42, align 8, !tbaa !5
  %916 = load i64, ptr %22, align 8, !tbaa !9
  %917 = getelementptr inbounds i64, ptr %915, i64 %916
  store i64 %914, ptr %917, align 8, !tbaa !9
  %918 = load i64, ptr %22, align 8, !tbaa !9
  %919 = add nsw i64 %918, 1
  store i64 %919, ptr %22, align 8, !tbaa !9
  %920 = load ptr, ptr %41, align 8, !tbaa !5
  %921 = load i64, ptr %14, align 8, !tbaa !9
  %922 = getelementptr inbounds i64, ptr %920, i64 %921
  store i64 %918, ptr %922, align 8, !tbaa !9
  br label %923

923:                                              ; preds = %913
  br label %924

924:                                              ; preds = %923
  br label %925

925:                                              ; preds = %924, %906, %901
  br label %990

926:                                              ; preds = %868
  %927 = load i64, ptr %29, align 8, !tbaa !9
  %928 = load i64, ptr %30, align 8, !tbaa !9
  %929 = icmp eq i64 %927, %928
  br i1 %929, label %930, label %989

930:                                              ; preds = %926
  br label %931

931:                                              ; preds = %930
  %932 = load ptr, ptr %37, align 8, !tbaa !5
  %933 = load i64, ptr %16, align 8, !tbaa !9
  %934 = getelementptr inbounds i64, ptr %932, i64 %933
  %935 = load i64, ptr %934, align 8, !tbaa !9
  %936 = load ptr, ptr %52, align 8, !tbaa !5
  %937 = getelementptr inbounds %struct.rinfodef, ptr %936, i32 0, i32 0
  %938 = load i64, ptr %937, align 8, !tbaa !37
  %939 = add nsw i64 %938, %935
  store i64 %939, ptr %937, align 8, !tbaa !37
  %940 = load ptr, ptr %37, align 8, !tbaa !5
  %941 = load i64, ptr %16, align 8, !tbaa !9
  %942 = getelementptr inbounds i64, ptr %940, i64 %941
  %943 = load i64, ptr %942, align 8, !tbaa !9
  %944 = load ptr, ptr %52, align 8, !tbaa !5
  %945 = getelementptr inbounds %struct.rinfodef, ptr %944, i32 0, i32 1
  %946 = load i64, ptr %945, align 8, !tbaa !35
  %947 = sub nsw i64 %946, %943
  store i64 %947, ptr %945, align 8, !tbaa !35
  br label %948

948:                                              ; preds = %931
  br label %949

949:                                              ; preds = %948
  %950 = load ptr, ptr %52, align 8, !tbaa !5
  %951 = getelementptr inbounds %struct.rinfodef, ptr %950, i32 0, i32 1
  %952 = load i64, ptr %951, align 8, !tbaa !35
  %953 = icmp eq i64 %952, 0
  br i1 %953, label %954, label %988

954:                                              ; preds = %949
  %955 = load ptr, ptr %41, align 8, !tbaa !5
  %956 = load i64, ptr %14, align 8, !tbaa !9
  %957 = getelementptr inbounds i64, ptr %955, i64 %956
  %958 = load i64, ptr %957, align 8, !tbaa !9
  %959 = icmp ne i64 %958, -1
  br i1 %959, label %960, label %988

960:                                              ; preds = %954
  br label %961

961:                                              ; preds = %960
  %962 = load ptr, ptr %42, align 8, !tbaa !5
  %963 = load i64, ptr %22, align 8, !tbaa !9
  %964 = add nsw i64 %963, -1
  store i64 %964, ptr %22, align 8, !tbaa !9
  %965 = getelementptr inbounds i64, ptr %962, i64 %964
  %966 = load i64, ptr %965, align 8, !tbaa !9
  %967 = load ptr, ptr %42, align 8, !tbaa !5
  %968 = load ptr, ptr %41, align 8, !tbaa !5
  %969 = load i64, ptr %14, align 8, !tbaa !9
  %970 = getelementptr inbounds i64, ptr %968, i64 %969
  %971 = load i64, ptr %970, align 8, !tbaa !9
  %972 = getelementptr inbounds i64, ptr %967, i64 %971
  store i64 %966, ptr %972, align 8, !tbaa !9
  %973 = load ptr, ptr %41, align 8, !tbaa !5
  %974 = load i64, ptr %14, align 8, !tbaa !9
  %975 = getelementptr inbounds i64, ptr %973, i64 %974
  %976 = load i64, ptr %975, align 8, !tbaa !9
  %977 = load ptr, ptr %41, align 8, !tbaa !5
  %978 = load ptr, ptr %42, align 8, !tbaa !5
  %979 = load i64, ptr %22, align 8, !tbaa !9
  %980 = getelementptr inbounds i64, ptr %978, i64 %979
  %981 = load i64, ptr %980, align 8, !tbaa !9
  %982 = getelementptr inbounds i64, ptr %977, i64 %981
  store i64 %976, ptr %982, align 8, !tbaa !9
  %983 = load ptr, ptr %41, align 8, !tbaa !5
  %984 = load i64, ptr %14, align 8, !tbaa !9
  %985 = getelementptr inbounds i64, ptr %983, i64 %984
  store i64 -1, ptr %985, align 8, !tbaa !9
  br label %986

986:                                              ; preds = %961
  br label %987

987:                                              ; preds = %986
  br label %988

988:                                              ; preds = %987, %954, %949
  br label %989

989:                                              ; preds = %988, %926
  br label %990

990:                                              ; preds = %989, %925
  %991 = load i64, ptr %29, align 8, !tbaa !9
  %992 = load i64, ptr %28, align 8, !tbaa !9
  %993 = icmp ne i64 %991, %992
  br i1 %993, label %994, label %1047

994:                                              ; preds = %990
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %995

995:                                              ; preds = %1043, %994
  %996 = load i64, ptr %18, align 8, !tbaa !9
  %997 = load ptr, ptr %52, align 8, !tbaa !5
  %998 = getelementptr inbounds %struct.rinfodef, ptr %997, i32 0, i32 2
  %999 = load i64, ptr %998, align 8, !tbaa !41
  %1000 = icmp slt i64 %996, %999
  br i1 %1000, label %1001, label %1046

1001:                                             ; preds = %995
  %1002 = load ptr, ptr %51, align 8, !tbaa !5
  %1003 = load i64, ptr %18, align 8, !tbaa !9
  %1004 = getelementptr inbounds %struct.edegreedef, ptr %1002, i64 %1003
  %1005 = getelementptr inbounds %struct.edegreedef, ptr %1004, i32 0, i32 0
  %1006 = load i64, ptr %1005, align 8, !tbaa !42
  %1007 = load i64, ptr %28, align 8, !tbaa !9
  %1008 = icmp eq i64 %1006, %1007
  br i1 %1008, label %1009, label %1042

1009:                                             ; preds = %1001
  %1010 = load ptr, ptr %51, align 8, !tbaa !5
  %1011 = load i64, ptr %18, align 8, !tbaa !9
  %1012 = getelementptr inbounds %struct.edegreedef, ptr %1010, i64 %1011
  %1013 = getelementptr inbounds %struct.edegreedef, ptr %1012, i32 0, i32 1
  %1014 = load i64, ptr %1013, align 8, !tbaa !48
  %1015 = load ptr, ptr %37, align 8, !tbaa !5
  %1016 = load i64, ptr %16, align 8, !tbaa !9
  %1017 = getelementptr inbounds i64, ptr %1015, i64 %1016
  %1018 = load i64, ptr %1017, align 8, !tbaa !9
  %1019 = icmp eq i64 %1014, %1018
  br i1 %1019, label %1020, label %1030

1020:                                             ; preds = %1009
  %1021 = load ptr, ptr %51, align 8, !tbaa !5
  %1022 = load i64, ptr %18, align 8, !tbaa !9
  %1023 = getelementptr inbounds %struct.edegreedef, ptr %1021, i64 %1022
  %1024 = load ptr, ptr %51, align 8, !tbaa !5
  %1025 = load ptr, ptr %52, align 8, !tbaa !5
  %1026 = getelementptr inbounds %struct.rinfodef, ptr %1025, i32 0, i32 2
  %1027 = load i64, ptr %1026, align 8, !tbaa !41
  %1028 = add nsw i64 %1027, -1
  store i64 %1028, ptr %1026, align 8, !tbaa !41
  %1029 = getelementptr inbounds %struct.edegreedef, ptr %1024, i64 %1028
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %1023, ptr align 8 %1029, i64 16, i1 false), !tbaa.struct !49
  br label %1041

1030:                                             ; preds = %1009
  %1031 = load ptr, ptr %37, align 8, !tbaa !5
  %1032 = load i64, ptr %16, align 8, !tbaa !9
  %1033 = getelementptr inbounds i64, ptr %1031, i64 %1032
  %1034 = load i64, ptr %1033, align 8, !tbaa !9
  %1035 = load ptr, ptr %51, align 8, !tbaa !5
  %1036 = load i64, ptr %18, align 8, !tbaa !9
  %1037 = getelementptr inbounds %struct.edegreedef, ptr %1035, i64 %1036
  %1038 = getelementptr inbounds %struct.edegreedef, ptr %1037, i32 0, i32 1
  %1039 = load i64, ptr %1038, align 8, !tbaa !48
  %1040 = sub nsw i64 %1039, %1034
  store i64 %1040, ptr %1038, align 8, !tbaa !48
  br label %1041

1041:                                             ; preds = %1030, %1020
  br label %1046

1042:                                             ; preds = %1001
  br label %1043

1043:                                             ; preds = %1042
  %1044 = load i64, ptr %18, align 8, !tbaa !9
  %1045 = add nsw i64 %1044, 1
  store i64 %1045, ptr %18, align 8, !tbaa !9
  br label %995, !llvm.loop !52

1046:                                             ; preds = %1041, %995
  br label %1047

1047:                                             ; preds = %1046, %990
  %1048 = load i64, ptr %29, align 8, !tbaa !9
  %1049 = load i64, ptr %30, align 8, !tbaa !9
  %1050 = icmp ne i64 %1048, %1049
  br i1 %1050, label %1051, label %1107

1051:                                             ; preds = %1047
  store i64 0, ptr %18, align 8, !tbaa !9
  br label %1052

1052:                                             ; preds = %1078, %1051
  %1053 = load i64, ptr %18, align 8, !tbaa !9
  %1054 = load ptr, ptr %52, align 8, !tbaa !5
  %1055 = getelementptr inbounds %struct.rinfodef, ptr %1054, i32 0, i32 2
  %1056 = load i64, ptr %1055, align 8, !tbaa !41
  %1057 = icmp slt i64 %1053, %1056
  br i1 %1057, label %1058, label %1081

1058:                                             ; preds = %1052
  %1059 = load ptr, ptr %51, align 8, !tbaa !5
  %1060 = load i64, ptr %18, align 8, !tbaa !9
  %1061 = getelementptr inbounds %struct.edegreedef, ptr %1059, i64 %1060
  %1062 = getelementptr inbounds %struct.edegreedef, ptr %1061, i32 0, i32 0
  %1063 = load i64, ptr %1062, align 8, !tbaa !42
  %1064 = load i64, ptr %30, align 8, !tbaa !9
  %1065 = icmp eq i64 %1063, %1064
  br i1 %1065, label %1066, label %1077

1066:                                             ; preds = %1058
  %1067 = load ptr, ptr %37, align 8, !tbaa !5
  %1068 = load i64, ptr %16, align 8, !tbaa !9
  %1069 = getelementptr inbounds i64, ptr %1067, i64 %1068
  %1070 = load i64, ptr %1069, align 8, !tbaa !9
  %1071 = load ptr, ptr %51, align 8, !tbaa !5
  %1072 = load i64, ptr %18, align 8, !tbaa !9
  %1073 = getelementptr inbounds %struct.edegreedef, ptr %1071, i64 %1072
  %1074 = getelementptr inbounds %struct.edegreedef, ptr %1073, i32 0, i32 1
  %1075 = load i64, ptr %1074, align 8, !tbaa !48
  %1076 = add nsw i64 %1075, %1070
  store i64 %1076, ptr %1074, align 8, !tbaa !48
  br label %1081

1077:                                             ; preds = %1058
  br label %1078

1078:                                             ; preds = %1077
  %1079 = load i64, ptr %18, align 8, !tbaa !9
  %1080 = add nsw i64 %1079, 1
  store i64 %1080, ptr %18, align 8, !tbaa !9
  br label %1052, !llvm.loop !53

1081:                                             ; preds = %1066, %1052
  %1082 = load i64, ptr %18, align 8, !tbaa !9
  %1083 = load ptr, ptr %52, align 8, !tbaa !5
  %1084 = getelementptr inbounds %struct.rinfodef, ptr %1083, i32 0, i32 2
  %1085 = load i64, ptr %1084, align 8, !tbaa !41
  %1086 = icmp eq i64 %1082, %1085
  br i1 %1086, label %1087, label %1106

1087:                                             ; preds = %1081
  %1088 = load i64, ptr %30, align 8, !tbaa !9
  %1089 = load ptr, ptr %51, align 8, !tbaa !5
  %1090 = load ptr, ptr %52, align 8, !tbaa !5
  %1091 = getelementptr inbounds %struct.rinfodef, ptr %1090, i32 0, i32 2
  %1092 = load i64, ptr %1091, align 8, !tbaa !41
  %1093 = getelementptr inbounds %struct.edegreedef, ptr %1089, i64 %1092
  %1094 = getelementptr inbounds %struct.edegreedef, ptr %1093, i32 0, i32 0
  store i64 %1088, ptr %1094, align 8, !tbaa !42
  %1095 = load ptr, ptr %37, align 8, !tbaa !5
  %1096 = load i64, ptr %16, align 8, !tbaa !9
  %1097 = getelementptr inbounds i64, ptr %1095, i64 %1096
  %1098 = load i64, ptr %1097, align 8, !tbaa !9
  %1099 = load ptr, ptr %51, align 8, !tbaa !5
  %1100 = load ptr, ptr %52, align 8, !tbaa !5
  %1101 = getelementptr inbounds %struct.rinfodef, ptr %1100, i32 0, i32 2
  %1102 = load i64, ptr %1101, align 8, !tbaa !41
  %1103 = add nsw i64 %1102, 1
  store i64 %1103, ptr %1101, align 8, !tbaa !41
  %1104 = getelementptr inbounds %struct.edegreedef, ptr %1099, i64 %1102
  %1105 = getelementptr inbounds %struct.edegreedef, ptr %1104, i32 0, i32 1
  store i64 %1098, ptr %1105, align 8, !tbaa !48
  br label %1106

1106:                                             ; preds = %1087, %1081
  br label %1107

1107:                                             ; preds = %1106, %1047
  %1108 = load i64, ptr %29, align 8, !tbaa !9
  %1109 = load i64, ptr %28, align 8, !tbaa !9
  %1110 = icmp ne i64 %1108, %1109
  br i1 %1110, label %1111, label %1298

1111:                                             ; preds = %1107
  %1112 = load i64, ptr %29, align 8, !tbaa !9
  %1113 = load i64, ptr %30, align 8, !tbaa !9
  %1114 = icmp ne i64 %1112, %1113
  br i1 %1114, label %1115, label %1298

1115:                                             ; preds = %1111
  %1116 = load ptr, ptr %37, align 8, !tbaa !5
  %1117 = load i64, ptr %16, align 8, !tbaa !9
  %1118 = getelementptr inbounds i64, ptr %1116, i64 %1117
  %1119 = load i64, ptr %1118, align 8, !tbaa !9
  %1120 = load ptr, ptr %48, align 8, !tbaa !5
  %1121 = load i64, ptr %29, align 8, !tbaa !9
  %1122 = load i64, ptr %9, align 8, !tbaa !9
  %1123 = mul nsw i64 %1121, %1122
  %1124 = load i64, ptr %28, align 8, !tbaa !9
  %1125 = add nsw i64 %1123, %1124
  %1126 = getelementptr inbounds i64, ptr %1120, i64 %1125
  %1127 = load i64, ptr %1126, align 8, !tbaa !9
  %1128 = sub nsw i64 %1127, %1119
  store i64 %1128, ptr %1126, align 8, !tbaa !9
  %1129 = load ptr, ptr %37, align 8, !tbaa !5
  %1130 = load i64, ptr %16, align 8, !tbaa !9
  %1131 = getelementptr inbounds i64, ptr %1129, i64 %1130
  %1132 = load i64, ptr %1131, align 8, !tbaa !9
  %1133 = load ptr, ptr %48, align 8, !tbaa !5
  %1134 = load i64, ptr %28, align 8, !tbaa !9
  %1135 = load i64, ptr %9, align 8, !tbaa !9
  %1136 = mul nsw i64 %1134, %1135
  %1137 = load i64, ptr %29, align 8, !tbaa !9
  %1138 = add nsw i64 %1136, %1137
  %1139 = getelementptr inbounds i64, ptr %1133, i64 %1138
  %1140 = load i64, ptr %1139, align 8, !tbaa !9
  %1141 = sub nsw i64 %1140, %1132
  store i64 %1141, ptr %1139, align 8, !tbaa !9
  %1142 = load ptr, ptr %48, align 8, !tbaa !5
  %1143 = load i64, ptr %29, align 8, !tbaa !9
  %1144 = load i64, ptr %9, align 8, !tbaa !9
  %1145 = mul nsw i64 %1143, %1144
  %1146 = load i64, ptr %28, align 8, !tbaa !9
  %1147 = add nsw i64 %1145, %1146
  %1148 = getelementptr inbounds i64, ptr %1142, i64 %1147
  %1149 = load i64, ptr %1148, align 8, !tbaa !9
  %1150 = icmp eq i64 %1149, 0
  br i1 %1150, label %1151, label %1172

1151:                                             ; preds = %1115
  %1152 = load ptr, ptr %50, align 8, !tbaa !5
  %1153 = load i64, ptr %29, align 8, !tbaa !9
  %1154 = getelementptr inbounds i64, ptr %1152, i64 %1153
  %1155 = load i64, ptr %1154, align 8, !tbaa !9
  %1156 = add nsw i64 %1155, -1
  store i64 %1156, ptr %1154, align 8, !tbaa !9
  %1157 = load ptr, ptr %50, align 8, !tbaa !5
  %1158 = load i64, ptr %29, align 8, !tbaa !9
  %1159 = getelementptr inbounds i64, ptr %1157, i64 %1158
  %1160 = load i64, ptr %1159, align 8, !tbaa !9
  %1161 = add nsw i64 %1160, 1
  %1162 = load i64, ptr %33, align 8, !tbaa !9
  %1163 = icmp eq i64 %1161, %1162
  br i1 %1163, label %1164, label %1171

1164:                                             ; preds = %1151
  %1165 = load ptr, ptr %50, align 8, !tbaa !5
  %1166 = load i64, ptr %9, align 8, !tbaa !9
  %1167 = load ptr, ptr %50, align 8, !tbaa !5
  %1168 = call i64 @libmetis__idxargmax(i64 noundef %1166, ptr noundef %1167)
  %1169 = getelementptr inbounds i64, ptr %1165, i64 %1168
  %1170 = load i64, ptr %1169, align 8, !tbaa !9
  store i64 %1170, ptr %33, align 8, !tbaa !9
  br label %1171

1171:                                             ; preds = %1164, %1151
  br label %1172

1172:                                             ; preds = %1171, %1115
  %1173 = load ptr, ptr %48, align 8, !tbaa !5
  %1174 = load i64, ptr %28, align 8, !tbaa !9
  %1175 = load i64, ptr %9, align 8, !tbaa !9
  %1176 = mul nsw i64 %1174, %1175
  %1177 = load i64, ptr %29, align 8, !tbaa !9
  %1178 = add nsw i64 %1176, %1177
  %1179 = getelementptr inbounds i64, ptr %1173, i64 %1178
  %1180 = load i64, ptr %1179, align 8, !tbaa !9
  %1181 = icmp eq i64 %1180, 0
  br i1 %1181, label %1182, label %1203

1182:                                             ; preds = %1172
  %1183 = load ptr, ptr %50, align 8, !tbaa !5
  %1184 = load i64, ptr %28, align 8, !tbaa !9
  %1185 = getelementptr inbounds i64, ptr %1183, i64 %1184
  %1186 = load i64, ptr %1185, align 8, !tbaa !9
  %1187 = add nsw i64 %1186, -1
  store i64 %1187, ptr %1185, align 8, !tbaa !9
  %1188 = load ptr, ptr %50, align 8, !tbaa !5
  %1189 = load i64, ptr %28, align 8, !tbaa !9
  %1190 = getelementptr inbounds i64, ptr %1188, i64 %1189
  %1191 = load i64, ptr %1190, align 8, !tbaa !9
  %1192 = add nsw i64 %1191, 1
  %1193 = load i64, ptr %33, align 8, !tbaa !9
  %1194 = icmp eq i64 %1192, %1193
  br i1 %1194, label %1195, label %1202

1195:                                             ; preds = %1182
  %1196 = load ptr, ptr %50, align 8, !tbaa !5
  %1197 = load i64, ptr %9, align 8, !tbaa !9
  %1198 = load ptr, ptr %50, align 8, !tbaa !5
  %1199 = call i64 @libmetis__idxargmax(i64 noundef %1197, ptr noundef %1198)
  %1200 = getelementptr inbounds i64, ptr %1196, i64 %1199
  %1201 = load i64, ptr %1200, align 8, !tbaa !9
  store i64 %1201, ptr %33, align 8, !tbaa !9
  br label %1202

1202:                                             ; preds = %1195, %1182
  br label %1203

1203:                                             ; preds = %1202, %1172
  %1204 = load ptr, ptr %48, align 8, !tbaa !5
  %1205 = load i64, ptr %29, align 8, !tbaa !9
  %1206 = load i64, ptr %9, align 8, !tbaa !9
  %1207 = mul nsw i64 %1205, %1206
  %1208 = load i64, ptr %30, align 8, !tbaa !9
  %1209 = add nsw i64 %1207, %1208
  %1210 = getelementptr inbounds i64, ptr %1204, i64 %1209
  %1211 = load i64, ptr %1210, align 8, !tbaa !9
  %1212 = icmp eq i64 %1211, 0
  br i1 %1212, label %1213, label %1237

1213:                                             ; preds = %1203
  %1214 = load ptr, ptr %50, align 8, !tbaa !5
  %1215 = load i64, ptr %29, align 8, !tbaa !9
  %1216 = getelementptr inbounds i64, ptr %1214, i64 %1215
  %1217 = load i64, ptr %1216, align 8, !tbaa !9
  %1218 = add nsw i64 %1217, 1
  store i64 %1218, ptr %1216, align 8, !tbaa !9
  %1219 = load ptr, ptr %50, align 8, !tbaa !5
  %1220 = load i64, ptr %29, align 8, !tbaa !9
  %1221 = getelementptr inbounds i64, ptr %1219, i64 %1220
  %1222 = load i64, ptr %1221, align 8, !tbaa !9
  %1223 = load i64, ptr %33, align 8, !tbaa !9
  %1224 = icmp sgt i64 %1222, %1223
  br i1 %1224, label %1225, label %1236

1225:                                             ; preds = %1213
  %1226 = load ptr, ptr %50, align 8, !tbaa !5
  %1227 = load i64, ptr %29, align 8, !tbaa !9
  %1228 = getelementptr inbounds i64, ptr %1226, i64 %1227
  %1229 = load i64, ptr %1228, align 8, !tbaa !9
  %1230 = load i64, ptr %33, align 8, !tbaa !9
  %1231 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, i64 noundef %1229, i64 noundef %1230)
  %1232 = load ptr, ptr %50, align 8, !tbaa !5
  %1233 = load i64, ptr %29, align 8, !tbaa !9
  %1234 = getelementptr inbounds i64, ptr %1232, i64 %1233
  %1235 = load i64, ptr %1234, align 8, !tbaa !9
  store i64 %1235, ptr %33, align 8, !tbaa !9
  br label %1236

1236:                                             ; preds = %1225, %1213
  br label %1237

1237:                                             ; preds = %1236, %1203
  %1238 = load ptr, ptr %48, align 8, !tbaa !5
  %1239 = load i64, ptr %30, align 8, !tbaa !9
  %1240 = load i64, ptr %9, align 8, !tbaa !9
  %1241 = mul nsw i64 %1239, %1240
  %1242 = load i64, ptr %29, align 8, !tbaa !9
  %1243 = add nsw i64 %1241, %1242
  %1244 = getelementptr inbounds i64, ptr %1238, i64 %1243
  %1245 = load i64, ptr %1244, align 8, !tbaa !9
  %1246 = icmp eq i64 %1245, 0
  br i1 %1246, label %1247, label %1271

1247:                                             ; preds = %1237
  %1248 = load ptr, ptr %50, align 8, !tbaa !5
  %1249 = load i64, ptr %30, align 8, !tbaa !9
  %1250 = getelementptr inbounds i64, ptr %1248, i64 %1249
  %1251 = load i64, ptr %1250, align 8, !tbaa !9
  %1252 = add nsw i64 %1251, 1
  store i64 %1252, ptr %1250, align 8, !tbaa !9
  %1253 = load ptr, ptr %50, align 8, !tbaa !5
  %1254 = load i64, ptr %30, align 8, !tbaa !9
  %1255 = getelementptr inbounds i64, ptr %1253, i64 %1254
  %1256 = load i64, ptr %1255, align 8, !tbaa !9
  %1257 = load i64, ptr %33, align 8, !tbaa !9
  %1258 = icmp sgt i64 %1256, %1257
  br i1 %1258, label %1259, label %1270

1259:                                             ; preds = %1247
  %1260 = load ptr, ptr %50, align 8, !tbaa !5
  %1261 = load i64, ptr %30, align 8, !tbaa !9
  %1262 = getelementptr inbounds i64, ptr %1260, i64 %1261
  %1263 = load i64, ptr %1262, align 8, !tbaa !9
  %1264 = load i64, ptr %33, align 8, !tbaa !9
  %1265 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.2, i64 noundef %1263, i64 noundef %1264)
  %1266 = load ptr, ptr %50, align 8, !tbaa !5
  %1267 = load i64, ptr %30, align 8, !tbaa !9
  %1268 = getelementptr inbounds i64, ptr %1266, i64 %1267
  %1269 = load i64, ptr %1268, align 8, !tbaa !9
  store i64 %1269, ptr %33, align 8, !tbaa !9
  br label %1270

1270:                                             ; preds = %1259, %1247
  br label %1271

1271:                                             ; preds = %1270, %1237
  %1272 = load ptr, ptr %37, align 8, !tbaa !5
  %1273 = load i64, ptr %16, align 8, !tbaa !9
  %1274 = getelementptr inbounds i64, ptr %1272, i64 %1273
  %1275 = load i64, ptr %1274, align 8, !tbaa !9
  %1276 = load ptr, ptr %48, align 8, !tbaa !5
  %1277 = load i64, ptr %29, align 8, !tbaa !9
  %1278 = load i64, ptr %9, align 8, !tbaa !9
  %1279 = mul nsw i64 %1277, %1278
  %1280 = load i64, ptr %30, align 8, !tbaa !9
  %1281 = add nsw i64 %1279, %1280
  %1282 = getelementptr inbounds i64, ptr %1276, i64 %1281
  %1283 = load i64, ptr %1282, align 8, !tbaa !9
  %1284 = add nsw i64 %1283, %1275
  store i64 %1284, ptr %1282, align 8, !tbaa !9
  %1285 = load ptr, ptr %37, align 8, !tbaa !5
  %1286 = load i64, ptr %16, align 8, !tbaa !9
  %1287 = getelementptr inbounds i64, ptr %1285, i64 %1286
  %1288 = load i64, ptr %1287, align 8, !tbaa !9
  %1289 = load ptr, ptr %48, align 8, !tbaa !5
  %1290 = load i64, ptr %30, align 8, !tbaa !9
  %1291 = load i64, ptr %9, align 8, !tbaa !9
  %1292 = mul nsw i64 %1290, %1291
  %1293 = load i64, ptr %29, align 8, !tbaa !9
  %1294 = add nsw i64 %1292, %1293
  %1295 = getelementptr inbounds i64, ptr %1289, i64 %1294
  %1296 = load i64, ptr %1295, align 8, !tbaa !9
  %1297 = add nsw i64 %1296, %1288
  store i64 %1297, ptr %1295, align 8, !tbaa !9
  br label %1298

1298:                                             ; preds = %1271, %1111, %1107
  %1299 = load i64, ptr %29, align 8, !tbaa !9
  %1300 = load i64, ptr %30, align 8, !tbaa !9
  %1301 = icmp eq i64 %1299, %1300
  br i1 %1301, label %1306, label %1302

1302:                                             ; preds = %1298
  %1303 = load i64, ptr %29, align 8, !tbaa !9
  %1304 = load i64, ptr %28, align 8, !tbaa !9
  %1305 = icmp eq i64 %1303, %1304
  br i1 %1305, label %1306, label %1357

1306:                                             ; preds = %1302, %1298
  %1307 = load ptr, ptr %52, align 8, !tbaa !5
  %1308 = getelementptr inbounds %struct.rinfodef, ptr %1307, i32 0, i32 1
  %1309 = load i64, ptr %1308, align 8, !tbaa !35
  %1310 = load ptr, ptr %52, align 8, !tbaa !5
  %1311 = getelementptr inbounds %struct.rinfodef, ptr %1310, i32 0, i32 0
  %1312 = load i64, ptr %1311, align 8, !tbaa !37
  %1313 = sub nsw i64 %1309, %1312
  store i64 %1313, ptr %26, align 8, !tbaa !9
  %1314 = load ptr, ptr %45, align 8, !tbaa !5
  %1315 = load i64, ptr %14, align 8, !tbaa !9
  %1316 = getelementptr inbounds i64, ptr %1314, i64 %1315
  %1317 = load i64, ptr %1316, align 8, !tbaa !9
  %1318 = icmp eq i64 %1317, 2
  br i1 %1318, label %1319, label %1337

1319:                                             ; preds = %1306
  %1320 = load ptr, ptr %52, align 8, !tbaa !5
  %1321 = getelementptr inbounds %struct.rinfodef, ptr %1320, i32 0, i32 1
  %1322 = load i64, ptr %1321, align 8, !tbaa !35
  %1323 = icmp sgt i64 %1322, 0
  br i1 %1323, label %1324, label %1329

1324:                                             ; preds = %1319
  %1325 = load i64, ptr %14, align 8, !tbaa !9
  %1326 = load i64, ptr %25, align 8, !tbaa !9
  %1327 = load i64, ptr %26, align 8, !tbaa !9
  %1328 = call i64 @libmetis__PQueueUpdate(ptr noundef %53, i64 noundef %1325, i64 noundef %1326, i64 noundef %1327)
  br label %1336

1329:                                             ; preds = %1319
  %1330 = load i64, ptr %14, align 8, !tbaa !9
  %1331 = load i64, ptr %25, align 8, !tbaa !9
  %1332 = call i64 @libmetis__PQueueDelete(ptr noundef %53, i64 noundef %1330, i64 noundef %1331)
  %1333 = load ptr, ptr %45, align 8, !tbaa !5
  %1334 = load i64, ptr %14, align 8, !tbaa !9
  %1335 = getelementptr inbounds i64, ptr %1333, i64 %1334
  store i64 -1, ptr %1335, align 8, !tbaa !9
  br label %1336

1336:                                             ; preds = %1329, %1324
  br label %1356

1337:                                             ; preds = %1306
  %1338 = load ptr, ptr %45, align 8, !tbaa !5
  %1339 = load i64, ptr %14, align 8, !tbaa !9
  %1340 = getelementptr inbounds i64, ptr %1338, i64 %1339
  %1341 = load i64, ptr %1340, align 8, !tbaa !9
  %1342 = icmp eq i64 %1341, -1
  br i1 %1342, label %1343, label %1355

1343:                                             ; preds = %1337
  %1344 = load ptr, ptr %52, align 8, !tbaa !5
  %1345 = getelementptr inbounds %struct.rinfodef, ptr %1344, i32 0, i32 1
  %1346 = load i64, ptr %1345, align 8, !tbaa !35
  %1347 = icmp sgt i64 %1346, 0
  br i1 %1347, label %1348, label %1355

1348:                                             ; preds = %1343
  %1349 = load i64, ptr %14, align 8, !tbaa !9
  %1350 = load i64, ptr %26, align 8, !tbaa !9
  %1351 = call i64 @libmetis__PQueueInsert(ptr noundef %53, i64 noundef %1349, i64 noundef %1350)
  %1352 = load ptr, ptr %45, align 8, !tbaa !5
  %1353 = load i64, ptr %14, align 8, !tbaa !9
  %1354 = getelementptr inbounds i64, ptr %1352, i64 %1353
  store i64 2, ptr %1354, align 8, !tbaa !9
  br label %1355

1355:                                             ; preds = %1348, %1343, %1337
  br label %1356

1356:                                             ; preds = %1355, %1336
  br label %1357

1357:                                             ; preds = %1356, %1302
  br label %1358

1358:                                             ; preds = %1357
  %1359 = load i64, ptr %16, align 8, !tbaa !9
  %1360 = add nsw i64 %1359, 1
  store i64 %1360, ptr %16, align 8, !tbaa !9
  br label %815, !llvm.loop !54

1361:                                             ; preds = %815
  %1362 = load i64, ptr %27, align 8, !tbaa !9
  %1363 = add nsw i64 %1362, 1
  store i64 %1363, ptr %27, align 8, !tbaa !9
  br label %303

1364:                                             ; preds = %306
  %1365 = load i64, ptr %22, align 8, !tbaa !9
  %1366 = load ptr, ptr %8, align 8, !tbaa !5
  %1367 = getelementptr inbounds %struct.graphdef, ptr %1366, i32 0, i32 20
  store i64 %1365, ptr %1367, align 8, !tbaa !31
  %1368 = load ptr, ptr %7, align 8, !tbaa !5
  %1369 = getelementptr inbounds %struct.controldef, ptr %1368, i32 0, i32 1
  %1370 = load i64, ptr %1369, align 8, !tbaa !30
  %1371 = and i64 %1370, 8
  %1372 = icmp ne i64 %1371, 0
  br i1 %1372, label %1373, label %1411

1373:                                             ; preds = %1364
  %1374 = load ptr, ptr %39, align 8, !tbaa !5
  %1375 = load i64, ptr %9, align 8, !tbaa !9
  %1376 = load ptr, ptr %39, align 8, !tbaa !5
  %1377 = call i64 @libmetis__idxargmin(i64 noundef %1375, ptr noundef %1376)
  %1378 = getelementptr inbounds i64, ptr %1374, i64 %1377
  %1379 = load i64, ptr %1378, align 8, !tbaa !9
  %1380 = load ptr, ptr %39, align 8, !tbaa !5
  %1381 = load i64, ptr %9, align 8, !tbaa !9
  %1382 = load ptr, ptr %39, align 8, !tbaa !5
  %1383 = call i64 @libmetis__idxargmax(i64 noundef %1381, ptr noundef %1382)
  %1384 = getelementptr inbounds i64, ptr %1380, i64 %1383
  %1385 = load i64, ptr %1384, align 8, !tbaa !9
  %1386 = load i64, ptr %9, align 8, !tbaa !9
  %1387 = sitofp i64 %1386 to double
  %1388 = fmul double 1.000000e+00, %1387
  %1389 = load ptr, ptr %39, align 8, !tbaa !5
  %1390 = load i64, ptr %9, align 8, !tbaa !9
  %1391 = load ptr, ptr %39, align 8, !tbaa !5
  %1392 = call i64 @libmetis__idxargmax(i64 noundef %1390, ptr noundef %1391)
  %1393 = getelementptr inbounds i64, ptr %1389, i64 %1392
  %1394 = load i64, ptr %1393, align 8, !tbaa !9
  %1395 = sitofp i64 %1394 to double
  %1396 = fmul double %1388, %1395
  %1397 = load i64, ptr %23, align 8, !tbaa !9
  %1398 = sitofp i64 %1397 to double
  %1399 = fdiv double %1396, %1398
  %1400 = load ptr, ptr %8, align 8, !tbaa !5
  %1401 = getelementptr inbounds %struct.graphdef, ptr %1400, i32 0, i32 20
  %1402 = load i64, ptr %1401, align 8, !tbaa !31
  %1403 = load i64, ptr %27, align 8, !tbaa !9
  %1404 = load ptr, ptr %8, align 8, !tbaa !5
  %1405 = getelementptr inbounds %struct.graphdef, ptr %1404, i32 0, i32 16
  %1406 = load i64, ptr %1405, align 8, !tbaa !32
  %1407 = load i64, ptr %9, align 8, !tbaa !9
  %1408 = load ptr, ptr %50, align 8, !tbaa !5
  %1409 = call i64 @libmetis__idxsum(i64 noundef %1407, ptr noundef %1408, i64 noundef 1)
  %1410 = call i32 (ptr, ...) @mprintf(ptr noundef @.str.5, i64 noundef %1379, i64 noundef %1385, double noundef %1399, i64 noundef %1402, i64 noundef %1403, i64 noundef %1406, i64 noundef %1409)
  br label %1411

1411:                                             ; preds = %1373, %1364
  br label %1412

1412:                                             ; preds = %1411
  %1413 = load i64, ptr %20, align 8, !tbaa !9
  %1414 = add nsw i64 %1413, 1
  store i64 %1414, ptr %20, align 8, !tbaa !9
  br label %220, !llvm.loop !55

1415:                                             ; preds = %248, %220
  %1416 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libmetis__PQueueFree(ptr noundef %1416, ptr noundef %53)
  %1417 = load ptr, ptr %7, align 8, !tbaa !5
  %1418 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1417, i64 noundef %1418)
  %1419 = load ptr, ptr %7, align 8, !tbaa !5
  %1420 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1419, i64 noundef %1420)
  %1421 = load ptr, ptr %7, align 8, !tbaa !5
  %1422 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1421, i64 noundef %1422)
  %1423 = load ptr, ptr %7, align 8, !tbaa !5
  %1424 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1423, i64 noundef %1424)
  %1425 = load ptr, ptr %7, align 8, !tbaa !5
  %1426 = load i64, ptr %9, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1425, i64 noundef %1426)
  %1427 = load ptr, ptr %7, align 8, !tbaa !5
  %1428 = load i64, ptr %21, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1427, i64 noundef %1428)
  %1429 = load ptr, ptr %7, align 8, !tbaa !5
  %1430 = load i64, ptr %21, align 8, !tbaa !9
  call void @libmetis__idxwspacefree(ptr noundef %1429, i64 noundef %1430)
  call void @llvm.lifetime.end.p0(i64 88, ptr %53) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #4
  ret void
}

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

declare void @libmetis__PQueueReset(ptr noundef) #1

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) #1

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

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

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

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

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

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

@.str.1 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [64 x i8], align 1

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

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

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

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

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

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

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

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

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

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

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

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

.lr.ph:                                           ; preds = %6
  %32 = sitofp i64 %30 to float
  %33 = fpext float %4 to double
  %34 = fdiv double 1.000000e+00, %33
  br label %35

35:                                               ; preds = %.lr.ph, %35
  %.0636 = phi i64 [ 0, %.lr.ph ], [ %48, %35 ]
  %36 = getelementptr inbounds float, ptr %3, i64 %.0636
  %37 = load float, ptr %36, align 4, !tbaa !24
  %38 = fmul float %37, %32
  %39 = fptosi float %38 to i64
  %40 = getelementptr inbounds i64, ptr %29, i64 %.0636
  store i64 %39, ptr %40, align 8, !tbaa !25
  %41 = fmul float %38, %4
  %42 = fptosi float %41 to i64
  %43 = getelementptr inbounds i64, ptr %28, i64 %.0636
  store i64 %42, ptr %43, align 8, !tbaa !25
  %44 = fpext float %38 to double
  %45 = fmul double %34, %44
  %46 = fptosi double %45 to i64
  %47 = getelementptr inbounds i64, ptr %27, i64 %.0636
  store i64 %46, ptr %47, align 8, !tbaa !25
  %48 = add nuw nsw i64 %.0636, 1
  %exitcond.not = icmp eq i64 %48, %2
  br i1 %exitcond.not, label %._crit_edge, label %35, !llvm.loop !26

._crit_edge:                                      ; preds = %35, %6
  %49 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #4
  %50 = tail call ptr @libmetis__idxwspacemalloc(ptr noundef %0, i64 noundef %8) #4
  %51 = getelementptr inbounds i8, ptr %1, i64 88
  %52 = load ptr, ptr %51, align 8, !tbaa !28
  %53 = tail call i64 @libmetis__idxargmax(i64 noundef %8, ptr noundef %52) #4
  %54 = getelementptr inbounds i64, ptr %52, i64 %53
  %55 = load i64, ptr %54, align 8, !tbaa !25
  call void @libmetis__PQueueInit(ptr noundef %0, ptr noundef nonnull %7, i64 noundef %8, i64 noundef %55) #4
  %56 = getelementptr inbounds i8, ptr %0, i64 8
  %57 = load i64, ptr %56, align 8, !tbaa !29
  %58 = and i64 %57, 8
  %.not = icmp eq i64 %58, 0
  br i1 %.not, label %82, label %59

59:                                               ; preds = %._crit_edge
  %60 = call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %22) #4
  %61 = getelementptr inbounds i64, ptr %22, i64 %60
  %62 = load i64, ptr %61, align 8, !tbaa !25
  %63 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %64 = getelementptr inbounds i64, ptr %22, i64 %63
  %65 = load i64, ptr %64, align 8, !tbaa !25
  %66 = load i64, ptr %27, align 8, !tbaa !25
  %67 = load i64, ptr %28, align 8, !tbaa !25
  %68 = sitofp i64 %2 to double
  %69 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %70 = getelementptr inbounds i64, ptr %22, i64 %69
  %71 = load i64, ptr %70, align 8, !tbaa !25
  %72 = sitofp i64 %71 to double
  %73 = fmul double %68, %72
  %74 = sitofp i64 %30 to double
  %75 = fdiv double %73, %74
  %76 = load i64, ptr %1, align 8, !tbaa !5
  %77 = getelementptr inbounds i8, ptr %1, i64 144
  %78 = load i64, ptr %77, align 8, !tbaa !30
  %79 = getelementptr inbounds i8, ptr %1, i64 112
  %80 = load i64, ptr %79, align 8, !tbaa !31
  %81 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.4, i64 noundef %62, i64 noundef %65, i64 noundef %66, i64 noundef %67, double noundef %75, i64 noundef %76, i64 noundef %78, i64 noundef %80) #4
  br label %82

82:                                               ; preds = %59, %._crit_edge
  %83 = icmp sgt i64 %5, 0
  br i1 %83, label %.preheader613.lr.ph, label %._crit_edge702

.preheader613.lr.ph:                              ; preds = %82
  %84 = getelementptr inbounds i8, ptr %1, i64 112
  %85 = getelementptr inbounds i8, ptr %1, i64 144
  %86 = getelementptr inbounds i8, ptr %1, i64 184
  %87 = getelementptr inbounds i8, ptr %1, i64 24
  %88 = getelementptr inbounds i8, ptr %0, i64 112
  %89 = getelementptr inbounds i8, ptr %0, i64 128
  %90 = sitofp i64 %2 to double
  %91 = sitofp i64 %30 to double
  br label %.preheader613

.preheader613:                                    ; preds = %.preheader613.lr.ph, %523
  %.0546701 = phi i64 [ 0, %.preheader613.lr.ph ], [ %524, %523 ]
  br i1 %31, label %.lr.ph638, label %._crit_edge639

.lr.ph638:                                        ; preds = %.preheader613, %97
  %.1637 = phi i64 [ %98, %97 ], [ 0, %.preheader613 ]
  %92 = getelementptr inbounds i64, ptr %22, i64 %.1637
  %93 = load i64, ptr %92, align 8, !tbaa !25
  %94 = getelementptr inbounds i64, ptr %28, i64 %.1637
  %95 = load i64, ptr %94, align 8, !tbaa !25
  %96 = icmp sgt i64 %93, %95
  br i1 %96, label %._crit_edge639, label %97

97:                                               ; preds = %.lr.ph638
  %98 = add nuw nsw i64 %.1637, 1
  %exitcond726.not = icmp eq i64 %98, %2
  br i1 %exitcond726.not, label %._crit_edge702, label %.lr.ph638, !llvm.loop !32

._crit_edge639:                                   ; preds = %.lr.ph638, %.preheader613
  %.1.lcssa = phi i64 [ 0, %.preheader613 ], [ %.1637, %.lr.ph638 ]
  %99 = icmp eq i64 %.1.lcssa, %2
  br i1 %99, label %._crit_edge702, label %100

100:                                              ; preds = %._crit_edge639
  call void @libmetis__PQueueReset(ptr noundef nonnull %7) #4
  %101 = call ptr @libmetis__idxset(i64 noundef %8, i64 noundef -1, ptr noundef %50) #4
  %102 = load i64, ptr %85, align 8, !tbaa !30
  call void @libmetis__RandomPermute(i64 noundef %102, ptr noundef %49, i64 noundef 1) #4
  %103 = icmp sgt i64 %102, 0
  br i1 %103, label %.lr.ph644, label %._crit_edge645

.lr.ph644:                                        ; preds = %100, %.lr.ph644
  %.0540642 = phi i64 [ %116, %.lr.ph644 ], [ 0, %100 ]
  %104 = getelementptr inbounds i64, ptr %49, i64 %.0540642
  %105 = load i64, ptr %104, align 8, !tbaa !25
  %106 = getelementptr inbounds i64, ptr %16, i64 %105
  %107 = load i64, ptr %106, align 8, !tbaa !25
  %108 = load ptr, ptr %86, align 8, !tbaa !33
  %109 = getelementptr inbounds %struct.rinfodef, ptr %108, i64 %107
  %110 = getelementptr inbounds i8, ptr %109, i64 8
  %111 = load i64, ptr %110, align 8, !tbaa !34
  %112 = load i64, ptr %109, align 8, !tbaa !36
  %113 = sub nsw i64 %111, %112
  %114 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %7, i64 noundef %107, i64 noundef %113) #4
  %115 = getelementptr inbounds i64, ptr %50, i64 %107
  store i64 2, ptr %115, align 8, !tbaa !25
  %116 = add nuw nsw i64 %.0540642, 1
  %exitcond727.not = icmp eq i64 %116, %102
  br i1 %exitcond727.not, label %._crit_edge645, label %.lr.ph644, !llvm.loop !37

._crit_edge645:                                   ; preds = %.lr.ph644, %100
  %117 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %26) #4
  %118 = getelementptr inbounds i64, ptr %26, i64 %117
  %119 = load i64, ptr %118, align 8, !tbaa !25
  %120 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %7) #4
  %121 = icmp eq i64 %120, -1
  br i1 %121, label %.outer._crit_edge, label %.lr.ph671

.lr.ph671:                                        ; preds = %._crit_edge645, %.outer
  %122 = phi i64 [ %502, %.outer ], [ %120, %._crit_edge645 ]
  %.0547.ph698 = phi i64 [ %.2549.lcssa, %.outer ], [ %102, %._crit_edge645 ]
  %.0551.ph697 = phi i64 [ %501, %.outer ], [ 0, %._crit_edge645 ]
  %.0552.ph696 = phi i64 [ %.3555.lcssa, %.outer ], [ %119, %._crit_edge645 ]
  br label %123

123:                                              ; preds = %.lr.ph671, %.backedge
  %124 = phi i64 [ %122, %.lr.ph671 ], [ %139, %.backedge ]
  %125 = getelementptr inbounds i64, ptr %50, i64 %124
  store i64 1, ptr %125, align 8, !tbaa !25
  %126 = load ptr, ptr %86, align 8, !tbaa !33
  %127 = getelementptr inbounds %struct.rinfodef, ptr %126, i64 %124
  %128 = getelementptr inbounds i64, ptr %20, i64 %124
  %129 = load i64, ptr %128, align 8, !tbaa !25
  %130 = load ptr, ptr %87, align 8, !tbaa !38
  %131 = getelementptr inbounds i64, ptr %130, i64 %124
  %132 = load i64, ptr %131, align 8, !tbaa !25
  %133 = getelementptr inbounds i64, ptr %22, i64 %129
  %134 = load i64, ptr %133, align 8, !tbaa !25
  %135 = sub nsw i64 %134, %132
  %136 = getelementptr inbounds i64, ptr %27, i64 %129
  %137 = load i64, ptr %136, align 8, !tbaa !25
  %138 = icmp slt i64 %135, %137
  br i1 %138, label %.backedge, label %141

.backedge:                                        ; preds = %193, %123, %._crit_edge657, %228
  %139 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %7) #4
  %140 = icmp eq i64 %139, -1
  br i1 %140, label %.outer._crit_edge, label %123

141:                                              ; preds = %123
  %142 = getelementptr inbounds i8, ptr %127, i64 24
  %143 = load ptr, ptr %142, align 8, !tbaa !39
  %144 = getelementptr inbounds i8, ptr %127, i64 16
  %145 = load i64, ptr %144, align 8, !tbaa !40
  %146 = icmp sgt i64 %145, 0
  br i1 %146, label %.lr.ph654, label %._crit_edge657

.preheader612:                                    ; preds = %174
  %147 = getelementptr inbounds i64, ptr %29, i64 %129
  br i1 %146, label %.lr.ph656, label %._crit_edge657

.lr.ph654:                                        ; preds = %141, %174
  %.0541651 = phi i64 [ %175, %174 ], [ 0, %141 ]
  %148 = getelementptr inbounds %struct.edegreedef, ptr %143, i64 %.0541651
  %149 = load i64, ptr %148, align 8, !tbaa !41
  %150 = getelementptr inbounds i64, ptr %25, i64 %149
  store i64 1, ptr %150, align 8, !tbaa !25
  %151 = mul nsw i64 %149, %2
  %152 = getelementptr inbounds i64, ptr %24, i64 %151
  br label %153

153:                                              ; preds = %.lr.ph654, %167
  %.0543647 = phi i64 [ 0, %.lr.ph654 ], [ %168, %167 ]
  %.0558646 = phi i64 [ 0, %.lr.ph654 ], [ %.1559, %167 ]
  %154 = icmp eq i64 %.0543647, %.0541651
  br i1 %154, label %167, label %155

155:                                              ; preds = %153
  %156 = getelementptr inbounds %struct.edegreedef, ptr %143, i64 %.0543647
  %157 = load i64, ptr %156, align 8, !tbaa !41
  %158 = getelementptr inbounds i64, ptr %152, i64 %157
  %159 = load i64, ptr %158, align 8, !tbaa !25
  %160 = icmp eq i64 %159, 0
  br i1 %160, label %161, label %167

161:                                              ; preds = %155
  %162 = getelementptr inbounds i64, ptr %26, i64 %157
  %163 = load i64, ptr %162, align 8, !tbaa !25
  %.not591 = icmp slt i64 %163, %.0552.ph696
  br i1 %.not591, label %165, label %164

164:                                              ; preds = %161
  store i64 0, ptr %150, align 8, !tbaa !25
  br label %.loopexit610

165:                                              ; preds = %161
  %166 = add nsw i64 %.0558646, 1
  br label %167

167:                                              ; preds = %155, %165, %153
  %.1559 = phi i64 [ %.0558646, %153 ], [ %166, %165 ], [ %.0558646, %155 ]
  %168 = add nuw nsw i64 %.0543647, 1
  %exitcond728.not = icmp eq i64 %168, %145
  br i1 %exitcond728.not, label %.loopexit610, label %153, !llvm.loop !43

.loopexit610:                                     ; preds = %167, %164
  %.2560 = phi i64 [ %.0552.ph696, %164 ], [ %.1559, %167 ]
  %169 = getelementptr inbounds i64, ptr %26, i64 %149
  %170 = load i64, ptr %169, align 8, !tbaa !25
  %171 = add nsw i64 %170, %.2560
  %172 = icmp sgt i64 %171, %.0552.ph696
  br i1 %172, label %173, label %174

173:                                              ; preds = %.loopexit610
  store i64 0, ptr %150, align 8, !tbaa !25
  br label %174

174:                                              ; preds = %.loopexit610, %173
  %175 = add nuw nsw i64 %.0541651, 1
  %exitcond729.not = icmp eq i64 %175, %145
  br i1 %exitcond729.not, label %.preheader612, label %.lr.ph654, !llvm.loop !44

.lr.ph656:                                        ; preds = %.preheader612, %193
  %.1544655 = phi i64 [ %194, %193 ], [ 0, %.preheader612 ]
  %176 = getelementptr inbounds %struct.edegreedef, ptr %143, i64 %.1544655
  %177 = load i64, ptr %176, align 8, !tbaa !41
  %178 = getelementptr inbounds i64, ptr %25, i64 %177
  %179 = load i64, ptr %178, align 8, !tbaa !25
  %.not581 = icmp eq i64 %179, 0
  br i1 %.not581, label %193, label %180

180:                                              ; preds = %.lr.ph656
  %181 = getelementptr inbounds i64, ptr %22, i64 %177
  %182 = load i64, ptr %181, align 8, !tbaa !25
  %183 = add nsw i64 %182, %132
  %184 = getelementptr inbounds i64, ptr %28, i64 %177
  %185 = load i64, ptr %184, align 8, !tbaa !25
  %.not582 = icmp sgt i64 %183, %185
  br i1 %.not582, label %186, label %._crit_edge657

186:                                              ; preds = %180
  %187 = load i64, ptr %147, align 8, !tbaa !25
  %188 = mul nsw i64 %187, %183
  %189 = getelementptr inbounds i64, ptr %29, i64 %177
  %190 = load i64, ptr %189, align 8, !tbaa !25
  %191 = load i64, ptr %133, align 8, !tbaa !25
  %192 = mul nsw i64 %191, %190
  %.not583 = icmp sgt i64 %188, %192
  br i1 %.not583, label %193, label %._crit_edge657

193:                                              ; preds = %186, %.lr.ph656
  %194 = add nuw nsw i64 %.1544655, 1
  %exitcond730.not = icmp eq i64 %194, %145
  br i1 %exitcond730.not, label %.backedge, label %.lr.ph656, !llvm.loop !45

._crit_edge657:                                   ; preds = %186, %180, %141, %.preheader612
  %.1544.lcssa = phi i64 [ 0, %.preheader612 ], [ 0, %141 ], [ %.1544655, %180 ], [ %.1544655, %186 ]
  %195 = icmp eq i64 %.1544.lcssa, %145
  br i1 %195, label %.backedge, label %.preheader611

.preheader611:                                    ; preds = %._crit_edge657
  %.1542663 = add nuw nsw i64 %.1544.lcssa, 1
  %196 = icmp slt i64 %.1542663, %145
  br i1 %196, label %.lr.ph666, label %._crit_edge667

.lr.ph666:                                        ; preds = %.preheader611, %215
  %.1542665 = phi i64 [ %.1542, %215 ], [ %.1542663, %.preheader611 ]
  %.2545664 = phi i64 [ %.3, %215 ], [ %.1544.lcssa, %.preheader611 ]
  %197 = getelementptr inbounds %struct.edegreedef, ptr %143, i64 %.1542665
  %198 = load i64, ptr %197, align 8, !tbaa !41
  %199 = getelementptr inbounds i64, ptr %25, i64 %198
  %200 = load i64, ptr %199, align 8, !tbaa !25
  %.not590 = icmp eq i64 %200, 0
  br i1 %.not590, label %215, label %201

201:                                              ; preds = %.lr.ph666
  %202 = getelementptr inbounds %struct.edegreedef, ptr %143, i64 %.2545664
  %203 = load i64, ptr %202, align 8, !tbaa !41
  %204 = getelementptr inbounds i64, ptr %29, i64 %203
  %205 = load i64, ptr %204, align 8, !tbaa !25
  %206 = getelementptr inbounds i64, ptr %22, i64 %198
  %207 = load i64, ptr %206, align 8, !tbaa !25
  %208 = mul nsw i64 %207, %205
  %209 = getelementptr inbounds i64, ptr %29, i64 %198
  %210 = load i64, ptr %209, align 8, !tbaa !25
  %211 = getelementptr inbounds i64, ptr %22, i64 %203
  %212 = load i64, ptr %211, align 8, !tbaa !25
  %213 = mul nsw i64 %212, %210
  %214 = icmp slt i64 %208, %213
  %spec.select = select i1 %214, i64 %.1542665, i64 %.2545664
  br label %215

215:                                              ; preds = %201, %.lr.ph666
  %.3 = phi i64 [ %.2545664, %.lr.ph666 ], [ %spec.select, %201 ]
  %.1542 = add nuw nsw i64 %.1542665, 1
  %exitcond731.not = icmp eq i64 %.1542, %145
  br i1 %exitcond731.not, label %._crit_edge667, label %.lr.ph666, !llvm.loop !46

._crit_edge667:                                   ; preds = %215, %.preheader611
  %.2545.lcssa = phi i64 [ %.1544.lcssa, %.preheader611 ], [ %.3, %215 ]
  %216 = getelementptr inbounds %struct.edegreedef, ptr %143, i64 %.2545.lcssa
  %217 = load i64, ptr %216, align 8, !tbaa !41
  %218 = load i64, ptr %133, align 8, !tbaa !25
  %219 = getelementptr inbounds i64, ptr %28, i64 %129
  %220 = load i64, ptr %219, align 8, !tbaa !25
  %221 = icmp slt i64 %218, %220
  br i1 %221, label %222, label %._crit_edge667._crit_edge

._crit_edge667._crit_edge:                        ; preds = %._crit_edge667
  %.pre = load i64, ptr %127, align 8, !tbaa !36
  br label %split

222:                                              ; preds = %._crit_edge667
  %223 = getelementptr inbounds i64, ptr %22, i64 %217
  %224 = load i64, ptr %223, align 8, !tbaa !25
  %225 = getelementptr inbounds i64, ptr %27, i64 %217
  %226 = load i64, ptr %225, align 8, !tbaa !25
  %227 = icmp sgt i64 %224, %226
  %.pre735 = load i64, ptr %127, align 8, !tbaa !36
  br i1 %227, label %228, label %split

228:                                              ; preds = %222
  %229 = getelementptr inbounds i8, ptr %216, i64 8
  %230 = load i64, ptr %229, align 8, !tbaa !47
  %231 = icmp slt i64 %230, %.pre735
  br i1 %231, label %.backedge, label %split

split:                                            ; preds = %228, %222, %._crit_edge667._crit_edge
  %232 = phi i64 [ %.pre, %._crit_edge667._crit_edge ], [ %.pre735, %222 ], [ %.pre735, %228 ]
  %233 = getelementptr inbounds i8, ptr %127, i64 16
  %234 = getelementptr inbounds i64, ptr %20, i64 %124
  %235 = getelementptr inbounds i8, ptr %216, i64 8
  %236 = load i64, ptr %235, align 8, !tbaa !47
  %.neg = sub i64 %232, %236
  %237 = load i64, ptr %84, align 8, !tbaa !31
  %238 = add i64 %.neg, %237
  store i64 %238, ptr %84, align 8, !tbaa !31
  %239 = load i64, ptr %56, align 8, !tbaa !29
  %240 = and i64 %239, 32
  %.not584 = icmp eq i64 %240, 0
  br i1 %.not584, label %244, label %241

241:                                              ; preds = %split
  %242 = sub nsw i64 %236, %232
  %243 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.1, i64 noundef %124, i64 noundef %217, i64 noundef %242, i64 noundef %238) #4
  %.pre736 = load i64, ptr %127, align 8, !tbaa !36
  %.pre737 = load i64, ptr %235, align 8, !tbaa !47
  %.pre739 = sub i64 %.pre736, %.pre737
  br label %244

244:                                              ; preds = %241, %split
  %.pre-phi = phi i64 [ %.pre739, %241 ], [ %.neg, %split ]
  %245 = mul nsw i64 %129, %2
  %246 = getelementptr i64, ptr %24, i64 %245
  %247 = getelementptr i64, ptr %246, i64 %217
  %248 = load i64, ptr %247, align 8, !tbaa !25
  %249 = add nsw i64 %.pre-phi, %248
  store i64 %249, ptr %247, align 8, !tbaa !25
  %250 = load i64, ptr %127, align 8, !tbaa !36
  %251 = load i64, ptr %235, align 8, !tbaa !47
  %252 = sub nsw i64 %250, %251
  %253 = mul nsw i64 %217, %2
  %254 = getelementptr i64, ptr %24, i64 %253
  %255 = getelementptr i64, ptr %254, i64 %129
  %256 = load i64, ptr %255, align 8, !tbaa !25
  %257 = add nsw i64 %256, %252
  store i64 %257, ptr %255, align 8, !tbaa !25
  %258 = load i64, ptr %247, align 8, !tbaa !25
  %259 = icmp eq i64 %258, 0
  br i1 %259, label %260, label %269

260:                                              ; preds = %244
  %261 = getelementptr inbounds i64, ptr %26, i64 %129
  %262 = load i64, ptr %261, align 8, !tbaa !25
  %263 = add nsw i64 %262, -1
  store i64 %263, ptr %261, align 8, !tbaa !25
  %264 = icmp eq i64 %262, %.0552.ph696
  br i1 %264, label %265, label %thread-pre-split

265:                                              ; preds = %260
  %266 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %26) #4
  %267 = getelementptr inbounds i64, ptr %26, i64 %266
  %268 = load i64, ptr %267, align 8, !tbaa !25
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %265, %260
  %.1553.ph = phi i64 [ %.0552.ph696, %260 ], [ %268, %265 ]
  %.pr = load i64, ptr %255, align 8, !tbaa !25
  br label %269

269:                                              ; preds = %thread-pre-split, %244
  %270 = phi i64 [ %.pr, %thread-pre-split ], [ %257, %244 ]
  %.1553 = phi i64 [ %.1553.ph, %thread-pre-split ], [ %.0552.ph696, %244 ]
  %271 = icmp eq i64 %270, 0
  br i1 %271, label %272, label %281

272:                                              ; preds = %269
  %273 = getelementptr inbounds i64, ptr %26, i64 %217
  %274 = load i64, ptr %273, align 8, !tbaa !25
  %275 = add nsw i64 %274, -1
  store i64 %275, ptr %273, align 8, !tbaa !25
  %276 = icmp eq i64 %274, %.1553
  br i1 %276, label %277, label %281

277:                                              ; preds = %272
  %278 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %26) #4
  %279 = getelementptr inbounds i64, ptr %26, i64 %278
  %280 = load i64, ptr %279, align 8, !tbaa !25
  br label %281

281:                                              ; preds = %272, %277, %269
  %.2554 = phi i64 [ %280, %277 ], [ %.1553, %272 ], [ %.1553, %269 ]
  store i64 %217, ptr %234, align 8, !tbaa !25
  %282 = getelementptr inbounds i64, ptr %22, i64 %217
  %283 = load i64, ptr %282, align 8, !tbaa !25
  %284 = add nsw i64 %283, %132
  store i64 %284, ptr %282, align 8, !tbaa !25
  %285 = load i64, ptr %133, align 8, !tbaa !25
  %286 = sub nsw i64 %285, %132
  store i64 %286, ptr %133, align 8, !tbaa !25
  %287 = load i64, ptr %127, align 8, !tbaa !36
  %288 = load i64, ptr %235, align 8, !tbaa !47
  %289 = sub i64 %287, %288
  %290 = getelementptr inbounds i8, ptr %127, i64 8
  %291 = load i64, ptr %290, align 8, !tbaa !34
  %292 = add nsw i64 %289, %291
  store i64 %292, ptr %290, align 8, !tbaa !34
  store i64 %288, ptr %127, align 8, !tbaa !36
  store i64 %287, ptr %235, align 8, !tbaa !47
  %293 = icmp eq i64 %287, 0
  br i1 %293, label %294, label %298

294:                                              ; preds = %281
  %295 = load i64, ptr %233, align 8, !tbaa !40
  %296 = add nsw i64 %295, -1
  store i64 %296, ptr %233, align 8, !tbaa !40
  %297 = getelementptr inbounds %struct.edegreedef, ptr %143, i64 %296
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %216, ptr noundef nonnull align 8 dereferenceable(16) %297, i64 16, i1 false), !tbaa.struct !48
  %.pre738 = load i64, ptr %290, align 8, !tbaa !34
  br label %299

298:                                              ; preds = %281
  store i64 %129, ptr %216, align 8, !tbaa !41
  br label %299

299:                                              ; preds = %298, %294
  %300 = phi i64 [ %292, %298 ], [ %.pre738, %294 ]
  %301 = icmp eq i64 %300, 0
  br i1 %301, label %302, label %311

302:                                              ; preds = %299
  %303 = add nsw i64 %.0547.ph698, -1
  %304 = getelementptr inbounds i64, ptr %16, i64 %303
  %305 = load i64, ptr %304, align 8, !tbaa !25
  %306 = getelementptr inbounds i64, ptr %18, i64 %124
  %307 = load i64, ptr %306, align 8, !tbaa !25
  %308 = getelementptr inbounds i64, ptr %16, i64 %307
  store i64 %305, ptr %308, align 8, !tbaa !25
  %309 = load i64, ptr %306, align 8, !tbaa !25
  %310 = getelementptr inbounds i64, ptr %18, i64 %305
  store i64 %309, ptr %310, align 8, !tbaa !25
  store i64 -1, ptr %306, align 8, !tbaa !25
  br label %311

311:                                              ; preds = %302, %299
  %.1548 = phi i64 [ %303, %302 ], [ %.0547.ph698, %299 ]
  %312 = getelementptr inbounds i64, ptr %10, i64 %124
  %313 = load i64, ptr %312, align 8, !tbaa !25
  %314 = getelementptr i8, ptr %312, i64 8
  %315 = load i64, ptr %314, align 8, !tbaa !25
  %316 = icmp slt i64 %313, %315
  br i1 %316, label %.lr.ph692, label %.outer

.lr.ph692:                                        ; preds = %311
  %317 = getelementptr inbounds i64, ptr %26, i64 %129
  %318 = getelementptr inbounds i64, ptr %26, i64 %217
  br label %319

319:                                              ; preds = %.lr.ph692, %497
  %.2686 = phi i64 [ %313, %.lr.ph692 ], [ %498, %497 ]
  %.2549685 = phi i64 [ %.1548, %.lr.ph692 ], [ %.3550595, %497 ]
  %.3555684 = phi i64 [ %.2554, %.lr.ph692 ], [ %.8605, %497 ]
  %320 = getelementptr inbounds i64, ptr %12, i64 %.2686
  %321 = load i64, ptr %320, align 8, !tbaa !25
  %322 = getelementptr inbounds i64, ptr %20, i64 %321
  %323 = load i64, ptr %322, align 8, !tbaa !25
  %324 = load ptr, ptr %86, align 8, !tbaa !33
  %325 = getelementptr inbounds %struct.rinfodef, ptr %324, i64 %321
  %326 = getelementptr inbounds i8, ptr %325, i64 24
  %327 = load ptr, ptr %326, align 8, !tbaa !39
  %328 = icmp eq ptr %327, null
  br i1 %328, label %329, label %339

329:                                              ; preds = %319
  %330 = load ptr, ptr %88, align 8, !tbaa !49
  %331 = load i64, ptr %89, align 8, !tbaa !50
  %332 = getelementptr inbounds %struct.edegreedef, ptr %330, i64 %331
  store ptr %332, ptr %326, align 8, !tbaa !39
  %333 = getelementptr i64, ptr %10, i64 %321
  %334 = getelementptr i8, ptr %333, i64 8
  %335 = load i64, ptr %334, align 8, !tbaa !25
  %336 = load i64, ptr %333, align 8, !tbaa !25
  %337 = add i64 %335, %331
  %338 = sub i64 %337, %336
  store i64 %338, ptr %89, align 8, !tbaa !50
  br label %339

339:                                              ; preds = %329, %319
  %340 = phi ptr [ %332, %329 ], [ %327, %319 ]
  %341 = getelementptr inbounds i8, ptr %325, i64 8
  %342 = load i64, ptr %341, align 8, !tbaa !34
  %343 = load i64, ptr %325, align 8, !tbaa !36
  %344 = sub nsw i64 %342, %343
  %345 = icmp eq i64 %323, %129
  br i1 %345, label %346, label %360

346:                                              ; preds = %339
  %347 = getelementptr inbounds i64, ptr %14, i64 %.2686
  %348 = load i64, ptr %347, align 8, !tbaa !25
  %349 = add nsw i64 %348, %342
  store i64 %349, ptr %341, align 8, !tbaa !34
  %350 = load i64, ptr %347, align 8, !tbaa !25
  %351 = sub nsw i64 %343, %350
  store i64 %351, ptr %325, align 8, !tbaa !36
  %352 = icmp sgt i64 %349, 0
  br i1 %352, label %353, label %.thread

353:                                              ; preds = %346
  %354 = getelementptr inbounds i64, ptr %18, i64 %321
  %355 = load i64, ptr %354, align 8, !tbaa !25
  %356 = icmp eq i64 %355, -1
  br i1 %356, label %357, label %.thread

357:                                              ; preds = %353
  %358 = getelementptr inbounds i64, ptr %16, i64 %.2549685
  store i64 %321, ptr %358, align 8, !tbaa !25
  %359 = add nsw i64 %.2549685, 1
  store i64 %.2549685, ptr %354, align 8, !tbaa !25
  br label %.thread

360:                                              ; preds = %339
  %361 = icmp eq i64 %323, %217
  br i1 %361, label %362, label %379

362:                                              ; preds = %360
  %363 = getelementptr inbounds i64, ptr %14, i64 %.2686
  %364 = load i64, ptr %363, align 8, !tbaa !25
  %365 = add nsw i64 %364, %343
  store i64 %365, ptr %325, align 8, !tbaa !36
  %366 = load i64, ptr %363, align 8, !tbaa !25
  %367 = sub nsw i64 %342, %366
  store i64 %367, ptr %341, align 8, !tbaa !34
  %368 = icmp eq i64 %342, %366
  br i1 %368, label %369, label %379

369:                                              ; preds = %362
  %370 = getelementptr inbounds i64, ptr %18, i64 %321
  %371 = load i64, ptr %370, align 8, !tbaa !25
  %.not585 = icmp eq i64 %371, -1
  br i1 %.not585, label %379, label %372

372:                                              ; preds = %369
  %373 = add nsw i64 %.2549685, -1
  %374 = getelementptr inbounds i64, ptr %16, i64 %373
  %375 = load i64, ptr %374, align 8, !tbaa !25
  %376 = getelementptr inbounds i64, ptr %16, i64 %371
  store i64 %375, ptr %376, align 8, !tbaa !25
  %377 = load i64, ptr %370, align 8, !tbaa !25
  %378 = getelementptr inbounds i64, ptr %18, i64 %375
  store i64 %377, ptr %378, align 8, !tbaa !25
  store i64 -1, ptr %370, align 8, !tbaa !25
  br label %379

379:                                              ; preds = %360, %372, %369, %362
  %.3550 = phi i64 [ %373, %372 ], [ %.2549685, %369 ], [ %.2549685, %362 ], [ %.2549685, %360 ]
  %380 = getelementptr inbounds i8, ptr %325, i64 16
  %381 = load i64, ptr %380, align 8, !tbaa !40
  %382 = icmp sgt i64 %381, 0
  br i1 %382, label %.lr.ph679, label %.thread

383:                                              ; preds = %.lr.ph679
  %384 = add nuw nsw i64 %.4677, 1
  %exitcond732.not = icmp eq i64 %384, %381
  br i1 %exitcond732.not, label %.thread, label %.lr.ph679, !llvm.loop !51

.lr.ph679:                                        ; preds = %379, %383
  %.4677 = phi i64 [ %384, %383 ], [ 0, %379 ]
  %385 = getelementptr inbounds %struct.edegreedef, ptr %340, i64 %.4677
  %386 = load i64, ptr %385, align 8, !tbaa !41
  %387 = icmp eq i64 %386, %129
  br i1 %387, label %388, label %383

388:                                              ; preds = %.lr.ph679
  %389 = getelementptr inbounds i8, ptr %385, i64 8
  %390 = load i64, ptr %389, align 8, !tbaa !47
  %391 = getelementptr inbounds i64, ptr %14, i64 %.2686
  %392 = load i64, ptr %391, align 8, !tbaa !25
  %393 = icmp eq i64 %390, %392
  br i1 %393, label %394, label %397

394:                                              ; preds = %388
  %395 = add nsw i64 %381, -1
  store i64 %395, ptr %380, align 8, !tbaa !40
  %396 = getelementptr inbounds %struct.edegreedef, ptr %340, i64 %395
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %385, ptr noundef nonnull align 8 dereferenceable(16) %396, i64 16, i1 false), !tbaa.struct !48
  br label %.thread

397:                                              ; preds = %388
  %398 = sub nsw i64 %390, %392
  store i64 %398, ptr %389, align 8, !tbaa !47
  br label %.thread

.thread:                                          ; preds = %383, %379, %357, %353, %346, %397, %394
  %.3550595 = phi i64 [ %.3550, %397 ], [ %.3550, %394 ], [ %.2549685, %346 ], [ %.2549685, %353 ], [ %359, %357 ], [ %.3550, %379 ], [ %.3550, %383 ]
  %.not587 = icmp eq i64 %323, %217
  br i1 %.not587, label %.thread596, label %.preheader

.preheader:                                       ; preds = %.thread
  %399 = getelementptr inbounds i8, ptr %325, i64 16
  %400 = load i64, ptr %399, align 8, !tbaa !40
  %401 = icmp sgt i64 %400, 0
  br i1 %401, label %.lr.ph681, label %.loopexit

.lr.ph681:                                        ; preds = %.preheader, %411
  %.5680 = phi i64 [ %412, %411 ], [ 0, %.preheader ]
  %402 = getelementptr inbounds %struct.edegreedef, ptr %340, i64 %.5680
  %403 = load i64, ptr %402, align 8, !tbaa !41
  %404 = icmp eq i64 %403, %217
  br i1 %404, label %405, label %411

405:                                              ; preds = %.lr.ph681
  %406 = getelementptr inbounds i64, ptr %14, i64 %.2686
  %407 = load i64, ptr %406, align 8, !tbaa !25
  %408 = getelementptr inbounds i8, ptr %402, i64 8
  %409 = load i64, ptr %408, align 8, !tbaa !47
  %410 = add nsw i64 %409, %407
  store i64 %410, ptr %408, align 8, !tbaa !47
  br label %.loopexit

411:                                              ; preds = %.lr.ph681
  %412 = add nuw nsw i64 %.5680, 1
  %exitcond733.not = icmp eq i64 %412, %400
  br i1 %exitcond733.not, label %.loopexit.thread, label %.lr.ph681, !llvm.loop !52

.loopexit:                                        ; preds = %.preheader, %405
  %.5634 = phi i64 [ %.5680, %405 ], [ 0, %.preheader ]
  %413 = icmp eq i64 %.5634, %400
  br i1 %413, label %.loopexit.thread, label %419

.loopexit.thread:                                 ; preds = %411, %.loopexit
  %414 = getelementptr inbounds %struct.edegreedef, ptr %340, i64 %400
  store i64 %217, ptr %414, align 8, !tbaa !41
  %415 = getelementptr inbounds i64, ptr %14, i64 %.2686
  %416 = load i64, ptr %415, align 8, !tbaa !25
  %417 = add nsw i64 %400, 1
  store i64 %417, ptr %399, align 8, !tbaa !40
  %418 = getelementptr inbounds %struct.edegreedef, ptr %340, i64 %400, i32 1
  store i64 %416, ptr %418, align 8, !tbaa !47
  br label %419

419:                                              ; preds = %.loopexit, %.loopexit.thread
  br i1 %345, label %.thread596, label %420

420:                                              ; preds = %419
  %421 = getelementptr inbounds i64, ptr %14, i64 %.2686
  %422 = load i64, ptr %421, align 8, !tbaa !25
  %423 = mul nsw i64 %323, %2
  %424 = getelementptr i64, ptr %24, i64 %423
  %425 = getelementptr i64, ptr %424, i64 %129
  %426 = load i64, ptr %425, align 8, !tbaa !25
  %427 = sub nsw i64 %426, %422
  store i64 %427, ptr %425, align 8, !tbaa !25
  %428 = load i64, ptr %421, align 8, !tbaa !25
  %429 = getelementptr i64, ptr %246, i64 %323
  %430 = load i64, ptr %429, align 8, !tbaa !25
  %431 = sub nsw i64 %430, %428
  store i64 %431, ptr %429, align 8, !tbaa !25
  %432 = load i64, ptr %425, align 8, !tbaa !25
  %433 = icmp eq i64 %432, 0
  br i1 %433, label %434, label %443

434:                                              ; preds = %420
  %435 = getelementptr inbounds i64, ptr %26, i64 %323
  %436 = load i64, ptr %435, align 8, !tbaa !25
  %437 = add nsw i64 %436, -1
  store i64 %437, ptr %435, align 8, !tbaa !25
  %438 = icmp eq i64 %436, %.3555684
  br i1 %438, label %439, label %thread-pre-split599

439:                                              ; preds = %434
  %440 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %26) #4
  %441 = getelementptr inbounds i64, ptr %26, i64 %440
  %442 = load i64, ptr %441, align 8, !tbaa !25
  br label %thread-pre-split599

thread-pre-split599:                              ; preds = %439, %434
  %.4556.ph = phi i64 [ %.3555684, %434 ], [ %442, %439 ]
  %.pr600 = load i64, ptr %429, align 8, !tbaa !25
  br label %443

443:                                              ; preds = %thread-pre-split599, %420
  %444 = phi i64 [ %.pr600, %thread-pre-split599 ], [ %431, %420 ]
  %.4556 = phi i64 [ %.4556.ph, %thread-pre-split599 ], [ %.3555684, %420 ]
  %445 = icmp eq i64 %444, 0
  br i1 %445, label %446, label %454

446:                                              ; preds = %443
  %447 = load i64, ptr %317, align 8, !tbaa !25
  %448 = add nsw i64 %447, -1
  store i64 %448, ptr %317, align 8, !tbaa !25
  %449 = icmp eq i64 %447, %.4556
  br i1 %449, label %450, label %454

450:                                              ; preds = %446
  %451 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef nonnull %26) #4
  %452 = getelementptr inbounds i64, ptr %26, i64 %451
  %453 = load i64, ptr %452, align 8, !tbaa !25
  br label %454

454:                                              ; preds = %446, %450, %443
  %.5557 = phi i64 [ %453, %450 ], [ %.4556, %446 ], [ %.4556, %443 ]
  %455 = getelementptr i64, ptr %424, i64 %217
  %456 = load i64, ptr %455, align 8, !tbaa !25
  %457 = icmp eq i64 %456, 0
  br i1 %457, label %458, label %465

458:                                              ; preds = %454
  %459 = getelementptr inbounds i64, ptr %26, i64 %323
  %460 = load i64, ptr %459, align 8, !tbaa !25
  %461 = add nsw i64 %460, 1
  store i64 %461, ptr %459, align 8, !tbaa !25
  %.not588 = icmp slt i64 %460, %.5557
  br i1 %.not588, label %465, label %462

462:                                              ; preds = %458
  %463 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, i64 noundef %461, i64 noundef %.5557) #4
  %464 = load i64, ptr %459, align 8, !tbaa !25
  br label %465

465:                                              ; preds = %458, %462, %454
  %.6 = phi i64 [ %464, %462 ], [ %.5557, %458 ], [ %.5557, %454 ]
  %466 = getelementptr i64, ptr %254, i64 %323
  %467 = load i64, ptr %466, align 8, !tbaa !25
  %468 = icmp eq i64 %467, 0
  br i1 %468, label %469, label %475

469:                                              ; preds = %465
  %470 = load i64, ptr %318, align 8, !tbaa !25
  %471 = add nsw i64 %470, 1
  store i64 %471, ptr %318, align 8, !tbaa !25
  %.not589 = icmp slt i64 %470, %.6
  br i1 %.not589, label %475, label %472

472:                                              ; preds = %469
  %473 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.2, i64 noundef %471, i64 noundef %.6) #4
  %474 = load i64, ptr %318, align 8, !tbaa !25
  br label %475

475:                                              ; preds = %465, %472, %469
  %.7 = phi i64 [ %474, %472 ], [ %.6, %469 ], [ %.6, %465 ]
  %476 = load i64, ptr %421, align 8, !tbaa !25
  %477 = load i64, ptr %455, align 8, !tbaa !25
  %478 = add nsw i64 %477, %476
  store i64 %478, ptr %455, align 8, !tbaa !25
  %479 = load i64, ptr %421, align 8, !tbaa !25
  %480 = load i64, ptr %466, align 8, !tbaa !25
  %481 = add nsw i64 %480, %479
  store i64 %481, ptr %466, align 8, !tbaa !25
  br label %497

.thread596:                                       ; preds = %.thread, %419
  %482 = load i64, ptr %341, align 8, !tbaa !34
  %483 = load i64, ptr %325, align 8, !tbaa !36
  %484 = sub nsw i64 %482, %483
  %485 = getelementptr inbounds i64, ptr %50, i64 %321
  %486 = load i64, ptr %485, align 8, !tbaa !25
  switch i64 %486, label %497 [
    i64 2, label %487
    i64 -1, label %493
  ]

487:                                              ; preds = %.thread596
  %488 = icmp sgt i64 %482, 0
  br i1 %488, label %489, label %491

489:                                              ; preds = %487
  %490 = call i64 @libmetis__PQueueUpdate(ptr noundef nonnull %7, i64 noundef %321, i64 noundef %344, i64 noundef %484) #4
  br label %497

491:                                              ; preds = %487
  %492 = call i64 @libmetis__PQueueDelete(ptr noundef nonnull %7, i64 noundef %321, i64 noundef %344) #4
  store i64 -1, ptr %485, align 8, !tbaa !25
  br label %497

493:                                              ; preds = %.thread596
  %494 = icmp sgt i64 %482, 0
  br i1 %494, label %495, label %497

495:                                              ; preds = %493
  %496 = call i64 @libmetis__PQueueInsert(ptr noundef nonnull %7, i64 noundef %321, i64 noundef %484) #4
  store i64 2, ptr %485, align 8, !tbaa !25
  br label %497

497:                                              ; preds = %475, %.thread596, %493, %495, %489, %491
  %.8605 = phi i64 [ %.3555684, %.thread596 ], [ %.7, %475 ], [ %.3555684, %493 ], [ %.3555684, %495 ], [ %.3555684, %489 ], [ %.3555684, %491 ]
  %498 = add nsw i64 %.2686, 1
  %499 = load i64, ptr %314, align 8, !tbaa !25
  %500 = icmp slt i64 %498, %499
  br i1 %500, label %319, label %.outer, !llvm.loop !53

.outer:                                           ; preds = %497, %311
  %.3555.lcssa = phi i64 [ %.2554, %311 ], [ %.8605, %497 ]
  %.2549.lcssa = phi i64 [ %.1548, %311 ], [ %.3550595, %497 ]
  %501 = add nuw nsw i64 %.0551.ph697, 1
  %502 = call i64 @libmetis__PQueueGetMax(ptr noundef nonnull %7) #4
  %503 = icmp eq i64 %502, -1
  br i1 %503, label %.outer._crit_edge, label %.lr.ph671

.outer._crit_edge:                                ; preds = %.outer, %.backedge, %._crit_edge645
  %.0551.ph.lcssa = phi i64 [ 0, %._crit_edge645 ], [ %.0551.ph697, %.backedge ], [ %501, %.outer ]
  %.0547.ph.lcssa = phi i64 [ %102, %._crit_edge645 ], [ %.0547.ph698, %.backedge ], [ %.2549.lcssa, %.outer ]
  store i64 %.0547.ph.lcssa, ptr %85, align 8, !tbaa !30
  %504 = load i64, ptr %56, align 8, !tbaa !29
  %505 = and i64 %504, 8
  %.not592 = icmp eq i64 %505, 0
  br i1 %.not592, label %523, label %506

506:                                              ; preds = %.outer._crit_edge
  %507 = call i64 @libmetis__idxargmin(i64 noundef %2, ptr noundef %22) #4
  %508 = getelementptr inbounds i64, ptr %22, i64 %507
  %509 = load i64, ptr %508, align 8, !tbaa !25
  %510 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %511 = getelementptr inbounds i64, ptr %22, i64 %510
  %512 = load i64, ptr %511, align 8, !tbaa !25
  %513 = call i64 @libmetis__idxargmax(i64 noundef %2, ptr noundef %22) #4
  %514 = getelementptr inbounds i64, ptr %22, i64 %513
  %515 = load i64, ptr %514, align 8, !tbaa !25
  %516 = sitofp i64 %515 to double
  %517 = fmul double %90, %516
  %518 = fdiv double %517, %91
  %519 = load i64, ptr %85, align 8, !tbaa !30
  %520 = load i64, ptr %84, align 8, !tbaa !31
  %521 = call i64 @libmetis__idxsum(i64 noundef %2, ptr noundef %26, i64 noundef 1) #4
  %522 = call i32 (ptr, ...) @mprintf(ptr noundef nonnull @.str.5, i64 noundef %509, i64 noundef %512, double noundef %518, i64 noundef %519, i64 noundef %.0551.ph.lcssa, i64 noundef %520, i64 noundef %521) #4
  br label %523

523:                                              ; preds = %.outer._crit_edge, %506
  %524 = add nuw nsw i64 %.0546701, 1
  %exitcond734.not = icmp eq i64 %524, %5
  br i1 %exitcond734.not, label %._crit_edge702, label %.preheader613, !llvm.loop !54

._crit_edge702:                                   ; preds = %523, %._crit_edge639, %97, %82
  call void @libmetis__PQueueFree(ptr noundef %0, ptr noundef nonnull %7) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %2) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %8) #4
  call void @libmetis__idxwspacefree(ptr noundef %0, i64 noundef %8) #4
  call void @llvm.lifetime.end.p0(i64 88, ptr nonnull %7) #4
  ret void
}

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

declare void @libmetis__PQueueReset(ptr noundef) local_unnamed_addr #1

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

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

declare i64 @libmetis__PQueueGetMax(ptr noundef) local_unnamed_addr #1

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

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

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

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

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

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


; 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