; LLVM IR from GGiecold-zz/Cluster_Ensembles :: src/Cluster_Ensembles/Hypergraph_Partitioning/metis-5.1.0/libmetis (balance)

; 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.graph_t = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, ptr, ptr, i32, i32, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.ctrl_t = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, i32, i32, float, ptr, ptr, ptr, float, double, double, double, double, double, double, double, double, double, double, double, double, ptr, i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }

@.str = external hidden unnamed_addr constant [65 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [140 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [52 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance = external hidden unnamed_addr constant [61 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [48 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__Bnd2WayBalance(ptr noundef %0, ptr noundef %1, ptr noundef %2) #1 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca [2 x i32], align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__wspacepush(ptr noundef %37)
  %38 = load ptr, ptr %5, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.graph_t, ptr %38, i32 0, i32 0
  %40 = load i32, ptr %39, align 8, !tbaa !9
  store i32 %40, ptr %12, align 4, !tbaa !12
  %41 = load ptr, ptr %5, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.graph_t, ptr %41, i32 0, i32 3
  %43 = load ptr, ptr %42, align 8, !tbaa !13
  store ptr %43, ptr %20, align 8, !tbaa !5
  %44 = load ptr, ptr %5, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.graph_t, ptr %44, i32 0, i32 4
  %46 = load ptr, ptr %45, align 8, !tbaa !14
  store ptr %46, ptr %21, align 8, !tbaa !5
  %47 = load ptr, ptr %5, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.graph_t, ptr %47, i32 0, i32 6
  %49 = load ptr, ptr %48, align 8, !tbaa !15
  store ptr %49, ptr %22, align 8, !tbaa !5
  %50 = load ptr, ptr %5, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graph_t, ptr %50, i32 0, i32 7
  %52 = load ptr, ptr %51, align 8, !tbaa !16
  store ptr %52, ptr %23, align 8, !tbaa !5
  %53 = load ptr, ptr %5, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graph_t, ptr %53, i32 0, i32 19
  %55 = load ptr, ptr %54, align 8, !tbaa !17
  store ptr %55, ptr %24, align 8, !tbaa !5
  %56 = load ptr, ptr %5, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graph_t, ptr %56, i32 0, i32 24
  %58 = load ptr, ptr %57, align 8, !tbaa !18
  store ptr %58, ptr %25, align 8, !tbaa !5
  %59 = load ptr, ptr %5, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graph_t, ptr %59, i32 0, i32 25
  %61 = load ptr, ptr %60, align 8, !tbaa !19
  store ptr %61, ptr %26, align 8, !tbaa !5
  %62 = load ptr, ptr %5, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.graph_t, ptr %62, i32 0, i32 20
  %64 = load ptr, ptr %63, align 8, !tbaa !20
  store ptr %64, ptr %29, align 8, !tbaa !5
  %65 = load ptr, ptr %5, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.graph_t, ptr %65, i32 0, i32 22
  %67 = load ptr, ptr %66, align 8, !tbaa !21
  store ptr %67, ptr %27, align 8, !tbaa !5
  %68 = load ptr, ptr %5, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.graph_t, ptr %68, i32 0, i32 23
  %70 = load ptr, ptr %69, align 8, !tbaa !22
  store ptr %70, ptr %28, align 8, !tbaa !5
  %71 = load ptr, ptr %4, align 8, !tbaa !5
  %72 = load i32, ptr %12, align 4, !tbaa !12
  %73 = call ptr @libmetis__iwspacemalloc(ptr noundef %71, i32 noundef %72)
  store ptr %73, ptr %30, align 8, !tbaa !5
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  %75 = load i32, ptr %12, align 4, !tbaa !12
  %76 = call ptr @libmetis__iwspacemalloc(ptr noundef %74, i32 noundef %75)
  store ptr %76, ptr %31, align 8, !tbaa !5
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.graph_t, ptr %77, i32 0, i32 8
  %79 = load ptr, ptr %78, align 8, !tbaa !23
  %80 = getelementptr inbounds i32, ptr %79, i64 0
  %81 = load i32, ptr %80, align 4, !tbaa !12
  %82 = sitofp i32 %81 to float
  %83 = load ptr, ptr %6, align 8, !tbaa !5
  %84 = getelementptr inbounds float, ptr %83, i64 0
  %85 = load float, ptr %84, align 4, !tbaa !24
  %86 = fmul float %82, %85
  %87 = fptosi float %86 to i32
  %88 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 0
  store i32 %87, ptr %88, align 4, !tbaa !12
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.graph_t, ptr %89, i32 0, i32 8
  %91 = load ptr, ptr %90, align 8, !tbaa !23
  %92 = getelementptr inbounds i32, ptr %91, i64 0
  %93 = load i32, ptr %92, align 4, !tbaa !12
  %94 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 0
  %95 = load i32, ptr %94, align 4, !tbaa !12
  %96 = sub nsw i32 %93, %95
  %97 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 1
  store i32 %96, ptr %97, align 4, !tbaa !12
  %98 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 0
  %99 = load i32, ptr %98, align 4, !tbaa !12
  %100 = load ptr, ptr %29, align 8, !tbaa !5
  %101 = getelementptr inbounds i32, ptr %100, i64 0
  %102 = load i32, ptr %101, align 4, !tbaa !12
  %103 = sub nsw i32 %99, %102
  %104 = call i32 @llvm.abs.i32(i32 %103, i1 true)
  store i32 %104, ptr %35, align 4, !tbaa !12
  %105 = load ptr, ptr %29, align 8, !tbaa !5
  %106 = getelementptr inbounds i32, ptr %105, i64 0
  %107 = load i32, ptr %106, align 4, !tbaa !12
  %108 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 0
  %109 = load i32, ptr %108, align 4, !tbaa !12
  %110 = icmp slt i32 %107, %109
  %111 = zext i1 %110 to i64
  %112 = select i1 %110, i32 1, i32 0
  store i32 %112, ptr %15, align 4, !tbaa !12
  %113 = load i32, ptr %15, align 4, !tbaa !12
  %114 = add nsw i32 %113, 1
  %115 = srem i32 %114, 2
  store i32 %115, ptr %16, align 4, !tbaa !12
  %116 = load ptr, ptr %4, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.ctrl_t, ptr %116, i32 0, i32 2
  %118 = load i32, ptr %117, align 8, !tbaa !26
  %119 = and i32 %118, 8
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %121, label %142

121:                                              ; preds = %3
  %122 = load ptr, ptr %29, align 8, !tbaa !5
  %123 = getelementptr inbounds i32, ptr %122, i64 0
  %124 = load i32, ptr %123, align 4, !tbaa !12
  %125 = load ptr, ptr %29, align 8, !tbaa !5
  %126 = getelementptr inbounds i32, ptr %125, i64 1
  %127 = load i32, ptr %126, align 4, !tbaa !12
  %128 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 0
  %129 = load i32, ptr %128, align 4, !tbaa !12
  %130 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 1
  %131 = load i32, ptr %130, align 4, !tbaa !12
  %132 = load ptr, ptr %5, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.graph_t, ptr %132, i32 0, i32 0
  %134 = load i32, ptr %133, align 8, !tbaa !9
  %135 = load ptr, ptr %5, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.graph_t, ptr %135, i32 0, i32 21
  %137 = load i32, ptr %136, align 8, !tbaa !30
  %138 = load ptr, ptr %5, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.graph_t, ptr %138, i32 0, i32 17
  %140 = load i32, ptr %139, align 8, !tbaa !31
  %141 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %124, i32 noundef %127, i32 noundef %129, i32 noundef %131, i32 noundef %134, i32 noundef %137, i32 noundef %140)
  br label %142

142:                                              ; preds = %121, %3
  %143 = load i32, ptr %12, align 4, !tbaa !12
  %144 = sext i32 %143 to i64
  %145 = call ptr @libmetis__rpqCreate(i64 noundef %144)
  store ptr %145, ptr %32, align 8, !tbaa !5
  %146 = load i32, ptr %12, align 4, !tbaa !12
  %147 = sext i32 %146 to i64
  %148 = load ptr, ptr %30, align 8, !tbaa !5
  %149 = call ptr @libmetis__iset(i64 noundef %147, i32 noundef -1, ptr noundef %148)
  %150 = load ptr, ptr %5, align 8, !tbaa !5
  %151 = load ptr, ptr %24, align 8, !tbaa !5
  %152 = call i32 @libmetis__ComputeCut(ptr noundef %150, ptr noundef %151)
  %153 = load ptr, ptr %5, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.graph_t, ptr %153, i32 0, i32 17
  %155 = load i32, ptr %154, align 8, !tbaa !31
  %156 = icmp eq i32 %152, %155
  br i1 %156, label %169, label %157

157:                                              ; preds = %142
  %158 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef 83, ptr noundef @.str.2)
  %159 = load ptr, ptr %5, align 8, !tbaa !5
  %160 = load ptr, ptr %24, align 8, !tbaa !5
  %161 = call i32 @libmetis__ComputeCut(ptr noundef %159, ptr noundef %160)
  %162 = load ptr, ptr %5, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.graph_t, ptr %162, i32 0, i32 17
  %164 = load i32, ptr %163, align 8, !tbaa !31
  %165 = icmp eq i32 %161, %164
  br i1 %165, label %166, label %167

166:                                              ; preds = %157
  br label %168

167:                                              ; preds = %157
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 83, ptr noundef @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #6
  unreachable

168:                                              ; preds = %166
  br label %169

169:                                              ; preds = %168, %142
  %170 = load ptr, ptr %5, align 8, !tbaa !5
  %171 = call i32 @libmetis__CheckBnd(ptr noundef %170)
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %181, label %173

173:                                              ; preds = %169
  %174 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef 84, ptr noundef @.str.2)
  %175 = load ptr, ptr %5, align 8, !tbaa !5
  %176 = call i32 @libmetis__CheckBnd(ptr noundef %175)
  %177 = icmp ne i32 %176, 0
  br i1 %177, label %178, label %179

178:                                              ; preds = %173
  br label %180

179:                                              ; preds = %173
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.2, i32 noundef 84, ptr noundef @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #6
  unreachable

180:                                              ; preds = %178
  br label %181

181:                                              ; preds = %180, %169
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.graph_t, ptr %182, i32 0, i32 21
  %184 = load i32, ptr %183, align 8, !tbaa !30
  store i32 %184, ptr %13, align 4, !tbaa !12
  %185 = load i32, ptr %13, align 4, !tbaa !12
  %186 = load ptr, ptr %31, align 8, !tbaa !5
  %187 = load i32, ptr %13, align 4, !tbaa !12
  %188 = sdiv i32 %187, 5
  call void @libmetis__irandArrayPermute(i32 noundef %185, ptr noundef %186, i32 noundef %188, i32 noundef 1)
  store i32 0, ptr %8, align 4, !tbaa !12
  br label %189

189:                                              ; preds = %325, %181
  %190 = load i32, ptr %8, align 4, !tbaa !12
  %191 = load i32, ptr %13, align 4, !tbaa !12
  %192 = icmp slt i32 %190, %191
  br i1 %192, label %193, label %328

193:                                              ; preds = %189
  %194 = load ptr, ptr %31, align 8, !tbaa !5
  %195 = load i32, ptr %8, align 4, !tbaa !12
  %196 = sext i32 %195 to i64
  %197 = getelementptr inbounds i32, ptr %194, i64 %196
  %198 = load i32, ptr %197, align 4, !tbaa !12
  store i32 %198, ptr %7, align 4, !tbaa !12
  %199 = load ptr, ptr %26, align 8, !tbaa !5
  %200 = load ptr, ptr %28, align 8, !tbaa !5
  %201 = load i32, ptr %7, align 4, !tbaa !12
  %202 = sext i32 %201 to i64
  %203 = getelementptr inbounds i32, ptr %200, i64 %202
  %204 = load i32, ptr %203, align 4, !tbaa !12
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds i32, ptr %199, i64 %205
  %207 = load i32, ptr %206, align 4, !tbaa !12
  %208 = icmp sgt i32 %207, 0
  br i1 %208, label %246, label %209

209:                                              ; preds = %193
  %210 = load ptr, ptr %25, align 8, !tbaa !5
  %211 = load ptr, ptr %28, align 8, !tbaa !5
  %212 = load i32, ptr %7, align 4, !tbaa !12
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds i32, ptr %211, i64 %213
  %215 = load i32, ptr %214, align 4, !tbaa !12
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds i32, ptr %210, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !12
  %219 = icmp eq i32 %218, 0
  br i1 %219, label %246, label %220

220:                                              ; preds = %209
  %221 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef 91, ptr noundef @.str.2)
  %222 = load ptr, ptr %26, align 8, !tbaa !5
  %223 = load ptr, ptr %28, align 8, !tbaa !5
  %224 = load i32, ptr %7, align 4, !tbaa !12
  %225 = sext i32 %224 to i64
  %226 = getelementptr inbounds i32, ptr %223, i64 %225
  %227 = load i32, ptr %226, align 4, !tbaa !12
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds i32, ptr %222, i64 %228
  %230 = load i32, ptr %229, align 4, !tbaa !12
  %231 = icmp sgt i32 %230, 0
  br i1 %231, label %243, label %232

232:                                              ; preds = %220
  %233 = load ptr, ptr %25, align 8, !tbaa !5
  %234 = load ptr, ptr %28, align 8, !tbaa !5
  %235 = load i32, ptr %7, align 4, !tbaa !12
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds i32, ptr %234, i64 %236
  %238 = load i32, ptr %237, align 4, !tbaa !12
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds i32, ptr %233, i64 %239
  %241 = load i32, ptr %240, align 4, !tbaa !12
  %242 = icmp eq i32 %241, 0
  br i1 %242, label %243, label %244

243:                                              ; preds = %232, %220
  br label %245

244:                                              ; preds = %232
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.2, i32 noundef 91, ptr noundef @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #6
  unreachable

245:                                              ; preds = %243
  br label %246

246:                                              ; preds = %245, %209, %193
  %247 = load ptr, ptr %27, align 8, !tbaa !5
  %248 = load ptr, ptr %28, align 8, !tbaa !5
  %249 = load i32, ptr %7, align 4, !tbaa !12
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i32, ptr %248, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !12
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds i32, ptr %247, i64 %253
  %255 = load i32, ptr %254, align 4, !tbaa !12
  %256 = icmp ne i32 %255, -1
  br i1 %256, label %272, label %257

257:                                              ; preds = %246
  %258 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef 92, ptr noundef @.str.2)
  %259 = load ptr, ptr %27, align 8, !tbaa !5
  %260 = load ptr, ptr %28, align 8, !tbaa !5
  %261 = load i32, ptr %7, align 4, !tbaa !12
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds i32, ptr %260, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !12
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds i32, ptr %259, i64 %265
  %267 = load i32, ptr %266, align 4, !tbaa !12
  %268 = icmp ne i32 %267, -1
  br i1 %268, label %269, label %270

269:                                              ; preds = %257
  br label %271

270:                                              ; preds = %257
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 92, ptr noundef @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #6
  unreachable

271:                                              ; preds = %269
  br label %272

272:                                              ; preds = %271, %246
  %273 = load ptr, ptr %24, align 8, !tbaa !5
  %274 = load ptr, ptr %28, align 8, !tbaa !5
  %275 = load i32, ptr %7, align 4, !tbaa !12
  %276 = sext i32 %275 to i64
  %277 = getelementptr inbounds i32, ptr %274, i64 %276
  %278 = load i32, ptr %277, align 4, !tbaa !12
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds i32, ptr %273, i64 %279
  %281 = load i32, ptr %280, align 4, !tbaa !12
  %282 = load i32, ptr %15, align 4, !tbaa !12
  %283 = icmp eq i32 %281, %282
  br i1 %283, label %284, label %324

284:                                              ; preds = %272
  %285 = load ptr, ptr %21, align 8, !tbaa !5
  %286 = load ptr, ptr %28, align 8, !tbaa !5
  %287 = load i32, ptr %7, align 4, !tbaa !12
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds i32, ptr %286, i64 %288
  %290 = load i32, ptr %289, align 4, !tbaa !12
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i32, ptr %285, i64 %291
  %293 = load i32, ptr %292, align 4, !tbaa !12
  %294 = load i32, ptr %35, align 4, !tbaa !12
  %295 = icmp sle i32 %293, %294
  br i1 %295, label %296, label %324

296:                                              ; preds = %284
  %297 = load ptr, ptr %32, align 8, !tbaa !5
  %298 = load ptr, ptr %28, align 8, !tbaa !5
  %299 = load i32, ptr %7, align 4, !tbaa !12
  %300 = sext i32 %299 to i64
  %301 = getelementptr inbounds i32, ptr %298, i64 %300
  %302 = load i32, ptr %301, align 4, !tbaa !12
  %303 = load ptr, ptr %26, align 8, !tbaa !5
  %304 = load ptr, ptr %28, align 8, !tbaa !5
  %305 = load i32, ptr %7, align 4, !tbaa !12
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds i32, ptr %304, i64 %306
  %308 = load i32, ptr %307, align 4, !tbaa !12
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds i32, ptr %303, i64 %309
  %311 = load i32, ptr %310, align 4, !tbaa !12
  %312 = load ptr, ptr %25, align 8, !tbaa !5
  %313 = load ptr, ptr %28, align 8, !tbaa !5
  %314 = load i32, ptr %7, align 4, !tbaa !12
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds i32, ptr %313, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !12
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds i32, ptr %312, i64 %318
  %320 = load i32, ptr %319, align 4, !tbaa !12
  %321 = sub nsw i32 %311, %320
  %322 = sitofp i32 %321 to float
  %323 = call i32 @libmetis__rpqInsert(ptr noundef %297, i32 noundef %302, float noundef %322)
  br label %324

324:                                              ; preds = %296, %284, %272
  br label %325

325:                                              ; preds = %324
  %326 = load i32, ptr %8, align 4, !tbaa !12
  %327 = add nsw i32 %326, 1
  store i32 %327, ptr %8, align 4, !tbaa !12
  br label %189, !llvm.loop !32

328:                                              ; preds = %189
  %329 = load ptr, ptr %5, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.graph_t, ptr %329, i32 0, i32 17
  %331 = load i32, ptr %330, align 8, !tbaa !31
  store i32 %331, ptr %34, align 4, !tbaa !12
  store i32 0, ptr %14, align 4, !tbaa !12
  br label %332

332:                                              ; preds = %831, %328
  %333 = load i32, ptr %14, align 4, !tbaa !12
  %334 = load i32, ptr %12, align 4, !tbaa !12
  %335 = icmp slt i32 %333, %334
  br i1 %335, label %336, label %834

336:                                              ; preds = %332
  %337 = load ptr, ptr %32, align 8, !tbaa !5
  %338 = call i32 @libmetis__rpqGetTop(ptr noundef %337)
  store i32 %338, ptr %33, align 4, !tbaa !12
  %339 = icmp eq i32 %338, -1
  br i1 %339, label %340, label %341

340:                                              ; preds = %336
  br label %834

341:                                              ; preds = %336
  %342 = load ptr, ptr %27, align 8, !tbaa !5
  %343 = load i32, ptr %33, align 4, !tbaa !12
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds i32, ptr %342, i64 %344
  %346 = load i32, ptr %345, align 4, !tbaa !12
  %347 = icmp ne i32 %346, -1
  br i1 %347, label %359, label %348

348:                                              ; preds = %341
  %349 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 101, ptr noundef @.str.2)
  %350 = load ptr, ptr %27, align 8, !tbaa !5
  %351 = load i32, ptr %33, align 4, !tbaa !12
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds i32, ptr %350, i64 %352
  %354 = load i32, ptr %353, align 4, !tbaa !12
  %355 = icmp ne i32 %354, -1
  br i1 %355, label %356, label %357

356:                                              ; preds = %348
  br label %358

357:                                              ; preds = %348
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.2, i32 noundef 101, ptr noundef @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #6
  unreachable

358:                                              ; preds = %356
  br label %359

359:                                              ; preds = %358, %341
  %360 = load ptr, ptr %29, align 8, !tbaa !5
  %361 = load i32, ptr %16, align 4, !tbaa !12
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds i32, ptr %360, i64 %362
  %364 = load i32, ptr %363, align 4, !tbaa !12
  %365 = load ptr, ptr %21, align 8, !tbaa !5
  %366 = load i32, ptr %33, align 4, !tbaa !12
  %367 = sext i32 %366 to i64
  %368 = getelementptr inbounds i32, ptr %365, i64 %367
  %369 = load i32, ptr %368, align 4, !tbaa !12
  %370 = add nsw i32 %364, %369
  %371 = load i32, ptr %16, align 4, !tbaa !12
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !12
  %375 = icmp sgt i32 %370, %374
  br i1 %375, label %376, label %377

376:                                              ; preds = %359
  br label %834

377:                                              ; preds = %359
  %378 = load ptr, ptr %26, align 8, !tbaa !5
  %379 = load i32, ptr %33, align 4, !tbaa !12
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds i32, ptr %378, i64 %380
  %382 = load i32, ptr %381, align 4, !tbaa !12
  %383 = load ptr, ptr %25, align 8, !tbaa !5
  %384 = load i32, ptr %33, align 4, !tbaa !12
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds i32, ptr %383, i64 %385
  %387 = load i32, ptr %386, align 4, !tbaa !12
  %388 = sub nsw i32 %382, %387
  %389 = load i32, ptr %34, align 4, !tbaa !12
  %390 = sub nsw i32 %389, %388
  store i32 %390, ptr %34, align 4, !tbaa !12
  br label %391

391:                                              ; preds = %377
  %392 = load ptr, ptr %21, align 8, !tbaa !5
  %393 = load i32, ptr %33, align 4, !tbaa !12
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds i32, ptr %392, i64 %394
  %396 = load i32, ptr %395, align 4, !tbaa !12
  %397 = load ptr, ptr %29, align 8, !tbaa !5
  %398 = load i32, ptr %16, align 4, !tbaa !12
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %397, i64 %399
  %401 = load i32, ptr %400, align 4, !tbaa !12
  %402 = add nsw i32 %401, %396
  store i32 %402, ptr %400, align 4, !tbaa !12
  %403 = load ptr, ptr %21, align 8, !tbaa !5
  %404 = load i32, ptr %33, align 4, !tbaa !12
  %405 = sext i32 %404 to i64
  %406 = getelementptr inbounds i32, ptr %403, i64 %405
  %407 = load i32, ptr %406, align 4, !tbaa !12
  %408 = load ptr, ptr %29, align 8, !tbaa !5
  %409 = load i32, ptr %15, align 4, !tbaa !12
  %410 = sext i32 %409 to i64
  %411 = getelementptr inbounds i32, ptr %408, i64 %410
  %412 = load i32, ptr %411, align 4, !tbaa !12
  %413 = sub nsw i32 %412, %407
  store i32 %413, ptr %411, align 4, !tbaa !12
  br label %414

414:                                              ; preds = %391
  br label %415

415:                                              ; preds = %414
  %416 = load i32, ptr %16, align 4, !tbaa !12
  %417 = load ptr, ptr %24, align 8, !tbaa !5
  %418 = load i32, ptr %33, align 4, !tbaa !12
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds i32, ptr %417, i64 %419
  store i32 %416, ptr %420, align 4, !tbaa !12
  %421 = load i32, ptr %14, align 4, !tbaa !12
  %422 = load ptr, ptr %30, align 8, !tbaa !5
  %423 = load i32, ptr %33, align 4, !tbaa !12
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds i32, ptr %422, i64 %424
  store i32 %421, ptr %425, align 4, !tbaa !12
  %426 = load ptr, ptr %4, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.ctrl_t, ptr %426, i32 0, i32 2
  %428 = load i32, ptr %427, align 8, !tbaa !26
  %429 = and i32 %428, 32
  %430 = icmp ne i32 %429, 0
  br i1 %430, label %431, label %458

431:                                              ; preds = %415
  %432 = load i32, ptr %33, align 4, !tbaa !12
  %433 = load i32, ptr %15, align 4, !tbaa !12
  %434 = load ptr, ptr %26, align 8, !tbaa !5
  %435 = load i32, ptr %33, align 4, !tbaa !12
  %436 = sext i32 %435 to i64
  %437 = getelementptr inbounds i32, ptr %434, i64 %436
  %438 = load i32, ptr %437, align 4, !tbaa !12
  %439 = load ptr, ptr %25, align 8, !tbaa !5
  %440 = load i32, ptr %33, align 4, !tbaa !12
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds i32, ptr %439, i64 %441
  %443 = load i32, ptr %442, align 4, !tbaa !12
  %444 = sub nsw i32 %438, %443
  %445 = load ptr, ptr %21, align 8, !tbaa !5
  %446 = load i32, ptr %33, align 4, !tbaa !12
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds i32, ptr %445, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !12
  %450 = load i32, ptr %34, align 4, !tbaa !12
  %451 = load ptr, ptr %29, align 8, !tbaa !5
  %452 = getelementptr inbounds i32, ptr %451, i64 0
  %453 = load i32, ptr %452, align 4, !tbaa !12
  %454 = load ptr, ptr %29, align 8, !tbaa !5
  %455 = getelementptr inbounds i32, ptr %454, i64 1
  %456 = load i32, ptr %455, align 4, !tbaa !12
  %457 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef %432, i32 noundef %433, i32 noundef %444, i32 noundef %449, i32 noundef %450, i32 noundef %453, i32 noundef %456)
  br label %458

458:                                              ; preds = %431, %415
  br label %459

459:                                              ; preds = %458
  %460 = load ptr, ptr %25, align 8, !tbaa !5
  %461 = load i32, ptr %33, align 4, !tbaa !12
  %462 = sext i32 %461 to i64
  %463 = getelementptr inbounds i32, ptr %460, i64 %462
  %464 = load i32, ptr %463, align 4, !tbaa !12
  store i32 %464, ptr %19, align 4, !tbaa !12
  %465 = load ptr, ptr %26, align 8, !tbaa !5
  %466 = load i32, ptr %33, align 4, !tbaa !12
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds i32, ptr %465, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !12
  %470 = load ptr, ptr %25, align 8, !tbaa !5
  %471 = load i32, ptr %33, align 4, !tbaa !12
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds i32, ptr %470, i64 %472
  store i32 %469, ptr %473, align 4, !tbaa !12
  %474 = load i32, ptr %19, align 4, !tbaa !12
  %475 = load ptr, ptr %26, align 8, !tbaa !5
  %476 = load i32, ptr %33, align 4, !tbaa !12
  %477 = sext i32 %476 to i64
  %478 = getelementptr inbounds i32, ptr %475, i64 %477
  store i32 %474, ptr %478, align 4, !tbaa !12
  br label %479

479:                                              ; preds = %459
  br label %480

480:                                              ; preds = %479
  %481 = load ptr, ptr %26, align 8, !tbaa !5
  %482 = load i32, ptr %33, align 4, !tbaa !12
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i32, ptr %481, i64 %483
  %485 = load i32, ptr %484, align 4, !tbaa !12
  %486 = icmp eq i32 %485, 0
  br i1 %486, label %487, label %553

487:                                              ; preds = %480
  %488 = load ptr, ptr %20, align 8, !tbaa !5
  %489 = load i32, ptr %33, align 4, !tbaa !12
  %490 = sext i32 %489 to i64
  %491 = getelementptr inbounds i32, ptr %488, i64 %490
  %492 = load i32, ptr %491, align 4, !tbaa !12
  %493 = load ptr, ptr %20, align 8, !tbaa !5
  %494 = load i32, ptr %33, align 4, !tbaa !12
  %495 = add nsw i32 %494, 1
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds i32, ptr %493, i64 %496
  %498 = load i32, ptr %497, align 4, !tbaa !12
  %499 = icmp slt i32 %492, %498
  br i1 %499, label %500, label %553

500:                                              ; preds = %487
  br label %501

501:                                              ; preds = %500
  %502 = load ptr, ptr %27, align 8, !tbaa !5
  %503 = load i32, ptr %33, align 4, !tbaa !12
  %504 = sext i32 %503 to i64
  %505 = getelementptr inbounds i32, ptr %502, i64 %504
  %506 = load i32, ptr %505, align 4, !tbaa !12
  %507 = icmp ne i32 %506, -1
  br i1 %507, label %519, label %508

508:                                              ; preds = %501
  %509 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 120, ptr noundef @.str.2)
  %510 = load ptr, ptr %27, align 8, !tbaa !5
  %511 = load i32, ptr %33, align 4, !tbaa !12
  %512 = sext i32 %511 to i64
  %513 = getelementptr inbounds i32, ptr %510, i64 %512
  %514 = load i32, ptr %513, align 4, !tbaa !12
  %515 = icmp ne i32 %514, -1
  br i1 %515, label %516, label %517

516:                                              ; preds = %508
  br label %518

517:                                              ; preds = %508
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.2, i32 noundef 120, ptr noundef @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #6
  unreachable

518:                                              ; preds = %516
  br label %519

519:                                              ; preds = %518, %501
  %520 = load ptr, ptr %28, align 8, !tbaa !5
  %521 = load i32, ptr %13, align 4, !tbaa !12
  %522 = add nsw i32 %521, -1
  store i32 %522, ptr %13, align 4, !tbaa !12
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds i32, ptr %520, i64 %523
  %525 = load i32, ptr %524, align 4, !tbaa !12
  %526 = load ptr, ptr %28, align 8, !tbaa !5
  %527 = load ptr, ptr %27, align 8, !tbaa !5
  %528 = load i32, ptr %33, align 4, !tbaa !12
  %529 = sext i32 %528 to i64
  %530 = getelementptr inbounds i32, ptr %527, i64 %529
  %531 = load i32, ptr %530, align 4, !tbaa !12
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds i32, ptr %526, i64 %532
  store i32 %525, ptr %533, align 4, !tbaa !12
  %534 = load ptr, ptr %27, align 8, !tbaa !5
  %535 = load i32, ptr %33, align 4, !tbaa !12
  %536 = sext i32 %535 to i64
  %537 = getelementptr inbounds i32, ptr %534, i64 %536
  %538 = load i32, ptr %537, align 4, !tbaa !12
  %539 = load ptr, ptr %27, align 8, !tbaa !5
  %540 = load ptr, ptr %28, align 8, !tbaa !5
  %541 = load i32, ptr %13, align 4, !tbaa !12
  %542 = sext i32 %541 to i64
  %543 = getelementptr inbounds i32, ptr %540, i64 %542
  %544 = load i32, ptr %543, align 4, !tbaa !12
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds i32, ptr %539, i64 %545
  store i32 %538, ptr %546, align 4, !tbaa !12
  %547 = load ptr, ptr %27, align 8, !tbaa !5
  %548 = load i32, ptr %33, align 4, !tbaa !12
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds i32, ptr %547, i64 %549
  store i32 -1, ptr %550, align 4, !tbaa !12
  br label %551

551:                                              ; preds = %519
  br label %552

552:                                              ; preds = %551
  br label %553

553:                                              ; preds = %552, %487, %480
  %554 = load ptr, ptr %20, align 8, !tbaa !5
  %555 = load i32, ptr %33, align 4, !tbaa !12
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds i32, ptr %554, i64 %556
  %558 = load i32, ptr %557, align 4, !tbaa !12
  store i32 %558, ptr %9, align 4, !tbaa !12
  br label %559

559:                                              ; preds = %827, %553
  %560 = load i32, ptr %9, align 4, !tbaa !12
  %561 = load ptr, ptr %20, align 8, !tbaa !5
  %562 = load i32, ptr %33, align 4, !tbaa !12
  %563 = add nsw i32 %562, 1
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds i32, ptr %561, i64 %564
  %566 = load i32, ptr %565, align 4, !tbaa !12
  %567 = icmp slt i32 %560, %566
  br i1 %567, label %568, label %830

568:                                              ; preds = %559
  %569 = load ptr, ptr %22, align 8, !tbaa !5
  %570 = load i32, ptr %9, align 4, !tbaa !12
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds i32, ptr %569, i64 %571
  %573 = load i32, ptr %572, align 4, !tbaa !12
  store i32 %573, ptr %10, align 4, !tbaa !12
  %574 = load i32, ptr %16, align 4, !tbaa !12
  %575 = load ptr, ptr %24, align 8, !tbaa !5
  %576 = load i32, ptr %10, align 4, !tbaa !12
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i32, ptr %575, i64 %577
  %579 = load i32, ptr %578, align 4, !tbaa !12
  %580 = icmp eq i32 %574, %579
  br i1 %580, label %581, label %587

581:                                              ; preds = %568
  %582 = load ptr, ptr %23, align 8, !tbaa !5
  %583 = load i32, ptr %9, align 4, !tbaa !12
  %584 = sext i32 %583 to i64
  %585 = getelementptr inbounds i32, ptr %582, i64 %584
  %586 = load i32, ptr %585, align 4, !tbaa !12
  br label %594

587:                                              ; preds = %568
  %588 = load ptr, ptr %23, align 8, !tbaa !5
  %589 = load i32, ptr %9, align 4, !tbaa !12
  %590 = sext i32 %589 to i64
  %591 = getelementptr inbounds i32, ptr %588, i64 %590
  %592 = load i32, ptr %591, align 4, !tbaa !12
  %593 = sub nsw i32 0, %592
  br label %594

594:                                              ; preds = %587, %581
  %595 = phi i32 [ %586, %581 ], [ %593, %587 ]
  store i32 %595, ptr %11, align 4, !tbaa !12
  br label %596

596:                                              ; preds = %594
  %597 = load i32, ptr %11, align 4, !tbaa !12
  %598 = load ptr, ptr %25, align 8, !tbaa !5
  %599 = load i32, ptr %10, align 4, !tbaa !12
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds i32, ptr %598, i64 %600
  %602 = load i32, ptr %601, align 4, !tbaa !12
  %603 = add nsw i32 %602, %597
  store i32 %603, ptr %601, align 4, !tbaa !12
  %604 = load i32, ptr %11, align 4, !tbaa !12
  %605 = load ptr, ptr %26, align 8, !tbaa !5
  %606 = load i32, ptr %10, align 4, !tbaa !12
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds i32, ptr %605, i64 %607
  %609 = load i32, ptr %608, align 4, !tbaa !12
  %610 = sub nsw i32 %609, %604
  store i32 %610, ptr %608, align 4, !tbaa !12
  br label %611

611:                                              ; preds = %596
  br label %612

612:                                              ; preds = %611
  %613 = load ptr, ptr %27, align 8, !tbaa !5
  %614 = load i32, ptr %10, align 4, !tbaa !12
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds i32, ptr %613, i64 %615
  %617 = load i32, ptr %616, align 4, !tbaa !12
  %618 = icmp ne i32 %617, -1
  br i1 %618, label %619, label %746

619:                                              ; preds = %612
  %620 = load ptr, ptr %26, align 8, !tbaa !5
  %621 = load i32, ptr %10, align 4, !tbaa !12
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds i32, ptr %620, i64 %622
  %624 = load i32, ptr %623, align 4, !tbaa !12
  %625 = icmp eq i32 %624, 0
  br i1 %625, label %626, label %706

626:                                              ; preds = %619
  br label %627

627:                                              ; preds = %626
  %628 = load ptr, ptr %27, align 8, !tbaa !5
  %629 = load i32, ptr %10, align 4, !tbaa !12
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds i32, ptr %628, i64 %630
  %632 = load i32, ptr %631, align 4, !tbaa !12
  %633 = icmp ne i32 %632, -1
  br i1 %633, label %645, label %634

634:                                              ; preds = %627
  %635 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 130, ptr noundef @.str.2)
  %636 = load ptr, ptr %27, align 8, !tbaa !5
  %637 = load i32, ptr %10, align 4, !tbaa !12
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds i32, ptr %636, i64 %638
  %640 = load i32, ptr %639, align 4, !tbaa !12
  %641 = icmp ne i32 %640, -1
  br i1 %641, label %642, label %643

642:                                              ; preds = %634
  br label %644

643:                                              ; preds = %634
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.2, i32 noundef 130, ptr noundef @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #6
  unreachable

644:                                              ; preds = %642
  br label %645

645:                                              ; preds = %644, %627
  %646 = load ptr, ptr %28, align 8, !tbaa !5
  %647 = load i32, ptr %13, align 4, !tbaa !12
  %648 = add nsw i32 %647, -1
  store i32 %648, ptr %13, align 4, !tbaa !12
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds i32, ptr %646, i64 %649
  %651 = load i32, ptr %650, align 4, !tbaa !12
  %652 = load ptr, ptr %28, align 8, !tbaa !5
  %653 = load ptr, ptr %27, align 8, !tbaa !5
  %654 = load i32, ptr %10, align 4, !tbaa !12
  %655 = sext i32 %654 to i64
  %656 = getelementptr inbounds i32, ptr %653, i64 %655
  %657 = load i32, ptr %656, align 4, !tbaa !12
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds i32, ptr %652, i64 %658
  store i32 %651, ptr %659, align 4, !tbaa !12
  %660 = load ptr, ptr %27, align 8, !tbaa !5
  %661 = load i32, ptr %10, align 4, !tbaa !12
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds i32, ptr %660, i64 %662
  %664 = load i32, ptr %663, align 4, !tbaa !12
  %665 = load ptr, ptr %27, align 8, !tbaa !5
  %666 = load ptr, ptr %28, align 8, !tbaa !5
  %667 = load i32, ptr %13, align 4, !tbaa !12
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds i32, ptr %666, i64 %668
  %670 = load i32, ptr %669, align 4, !tbaa !12
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds i32, ptr %665, i64 %671
  store i32 %664, ptr %672, align 4, !tbaa !12
  %673 = load ptr, ptr %27, align 8, !tbaa !5
  %674 = load i32, ptr %10, align 4, !tbaa !12
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds i32, ptr %673, i64 %675
  store i32 -1, ptr %676, align 4, !tbaa !12
  br label %677

677:                                              ; preds = %645
  br label %678

678:                                              ; preds = %677
  %679 = load ptr, ptr %30, align 8, !tbaa !5
  %680 = load i32, ptr %10, align 4, !tbaa !12
  %681 = sext i32 %680 to i64
  %682 = getelementptr inbounds i32, ptr %679, i64 %681
  %683 = load i32, ptr %682, align 4, !tbaa !12
  %684 = icmp eq i32 %683, -1
  br i1 %684, label %685, label %705

685:                                              ; preds = %678
  %686 = load ptr, ptr %24, align 8, !tbaa !5
  %687 = load i32, ptr %10, align 4, !tbaa !12
  %688 = sext i32 %687 to i64
  %689 = getelementptr inbounds i32, ptr %686, i64 %688
  %690 = load i32, ptr %689, align 4, !tbaa !12
  %691 = load i32, ptr %15, align 4, !tbaa !12
  %692 = icmp eq i32 %690, %691
  br i1 %692, label %693, label %705

693:                                              ; preds = %685
  %694 = load ptr, ptr %21, align 8, !tbaa !5
  %695 = load i32, ptr %10, align 4, !tbaa !12
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds i32, ptr %694, i64 %696
  %698 = load i32, ptr %697, align 4, !tbaa !12
  %699 = load i32, ptr %35, align 4, !tbaa !12
  %700 = icmp sle i32 %698, %699
  br i1 %700, label %701, label %705

701:                                              ; preds = %693
  %702 = load ptr, ptr %32, align 8, !tbaa !5
  %703 = load i32, ptr %10, align 4, !tbaa !12
  %704 = call i32 @libmetis__rpqDelete(ptr noundef %702, i32 noundef %703)
  br label %705

705:                                              ; preds = %701, %693, %685, %678
  br label %745

706:                                              ; preds = %619
  %707 = load ptr, ptr %30, align 8, !tbaa !5
  %708 = load i32, ptr %10, align 4, !tbaa !12
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds i32, ptr %707, i64 %709
  %711 = load i32, ptr %710, align 4, !tbaa !12
  %712 = icmp eq i32 %711, -1
  br i1 %712, label %713, label %744

713:                                              ; preds = %706
  %714 = load ptr, ptr %24, align 8, !tbaa !5
  %715 = load i32, ptr %10, align 4, !tbaa !12
  %716 = sext i32 %715 to i64
  %717 = getelementptr inbounds i32, ptr %714, i64 %716
  %718 = load i32, ptr %717, align 4, !tbaa !12
  %719 = load i32, ptr %15, align 4, !tbaa !12
  %720 = icmp eq i32 %718, %719
  br i1 %720, label %721, label %744

721:                                              ; preds = %713
  %722 = load ptr, ptr %21, align 8, !tbaa !5
  %723 = load i32, ptr %10, align 4, !tbaa !12
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds i32, ptr %722, i64 %724
  %726 = load i32, ptr %725, align 4, !tbaa !12
  %727 = load i32, ptr %35, align 4, !tbaa !12
  %728 = icmp sle i32 %726, %727
  br i1 %728, label %729, label %744

729:                                              ; preds = %721
  %730 = load ptr, ptr %32, align 8, !tbaa !5
  %731 = load i32, ptr %10, align 4, !tbaa !12
  %732 = load ptr, ptr %26, align 8, !tbaa !5
  %733 = load i32, ptr %10, align 4, !tbaa !12
  %734 = sext i32 %733 to i64
  %735 = getelementptr inbounds i32, ptr %732, i64 %734
  %736 = load i32, ptr %735, align 4, !tbaa !12
  %737 = load ptr, ptr %25, align 8, !tbaa !5
  %738 = load i32, ptr %10, align 4, !tbaa !12
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds i32, ptr %737, i64 %739
  %741 = load i32, ptr %740, align 4, !tbaa !12
  %742 = sub nsw i32 %736, %741
  %743 = sitofp i32 %742 to float
  call void @libmetis__rpqUpdate(ptr noundef %730, i32 noundef %731, float noundef %743)
  br label %744

744:                                              ; preds = %729, %721, %713, %706
  br label %745

745:                                              ; preds = %744, %705
  br label %826

746:                                              ; preds = %612
  %747 = load ptr, ptr %26, align 8, !tbaa !5
  %748 = load i32, ptr %10, align 4, !tbaa !12
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds i32, ptr %747, i64 %749
  %751 = load i32, ptr %750, align 4, !tbaa !12
  %752 = icmp sgt i32 %751, 0
  br i1 %752, label %753, label %825

753:                                              ; preds = %746
  br label %754

754:                                              ; preds = %753
  %755 = load ptr, ptr %27, align 8, !tbaa !5
  %756 = load i32, ptr %10, align 4, !tbaa !12
  %757 = sext i32 %756 to i64
  %758 = getelementptr inbounds i32, ptr %755, i64 %757
  %759 = load i32, ptr %758, align 4, !tbaa !12
  %760 = icmp eq i32 %759, -1
  br i1 %760, label %772, label %761

761:                                              ; preds = %754
  %762 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 141, ptr noundef @.str.2)
  %763 = load ptr, ptr %27, align 8, !tbaa !5
  %764 = load i32, ptr %10, align 4, !tbaa !12
  %765 = sext i32 %764 to i64
  %766 = getelementptr inbounds i32, ptr %763, i64 %765
  %767 = load i32, ptr %766, align 4, !tbaa !12
  %768 = icmp eq i32 %767, -1
  br i1 %768, label %769, label %770

769:                                              ; preds = %761
  br label %771

770:                                              ; preds = %761
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.2, i32 noundef 141, ptr noundef @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #6
  unreachable

771:                                              ; preds = %769
  br label %772

772:                                              ; preds = %771, %754
  %773 = load i32, ptr %10, align 4, !tbaa !12
  %774 = load ptr, ptr %28, align 8, !tbaa !5
  %775 = load i32, ptr %13, align 4, !tbaa !12
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds i32, ptr %774, i64 %776
  store i32 %773, ptr %777, align 4, !tbaa !12
  %778 = load i32, ptr %13, align 4, !tbaa !12
  %779 = add nsw i32 %778, 1
  store i32 %779, ptr %13, align 4, !tbaa !12
  %780 = load ptr, ptr %27, align 8, !tbaa !5
  %781 = load i32, ptr %10, align 4, !tbaa !12
  %782 = sext i32 %781 to i64
  %783 = getelementptr inbounds i32, ptr %780, i64 %782
  store i32 %778, ptr %783, align 4, !tbaa !12
  br label %784

784:                                              ; preds = %772
  br label %785

785:                                              ; preds = %784
  %786 = load ptr, ptr %30, align 8, !tbaa !5
  %787 = load i32, ptr %10, align 4, !tbaa !12
  %788 = sext i32 %787 to i64
  %789 = getelementptr inbounds i32, ptr %786, i64 %788
  %790 = load i32, ptr %789, align 4, !tbaa !12
  %791 = icmp eq i32 %790, -1
  br i1 %791, label %792, label %824

792:                                              ; preds = %785
  %793 = load ptr, ptr %24, align 8, !tbaa !5
  %794 = load i32, ptr %10, align 4, !tbaa !12
  %795 = sext i32 %794 to i64
  %796 = getelementptr inbounds i32, ptr %793, i64 %795
  %797 = load i32, ptr %796, align 4, !tbaa !12
  %798 = load i32, ptr %15, align 4, !tbaa !12
  %799 = icmp eq i32 %797, %798
  br i1 %799, label %800, label %824

800:                                              ; preds = %792
  %801 = load ptr, ptr %21, align 8, !tbaa !5
  %802 = load i32, ptr %10, align 4, !tbaa !12
  %803 = sext i32 %802 to i64
  %804 = getelementptr inbounds i32, ptr %801, i64 %803
  %805 = load i32, ptr %804, align 4, !tbaa !12
  %806 = load i32, ptr %35, align 4, !tbaa !12
  %807 = icmp sle i32 %805, %806
  br i1 %807, label %808, label %824

808:                                              ; preds = %800
  %809 = load ptr, ptr %32, align 8, !tbaa !5
  %810 = load i32, ptr %10, align 4, !tbaa !12
  %811 = load ptr, ptr %26, align 8, !tbaa !5
  %812 = load i32, ptr %10, align 4, !tbaa !12
  %813 = sext i32 %812 to i64
  %814 = getelementptr inbounds i32, ptr %811, i64 %813
  %815 = load i32, ptr %814, align 4, !tbaa !12
  %816 = load ptr, ptr %25, align 8, !tbaa !5
  %817 = load i32, ptr %10, align 4, !tbaa !12
  %818 = sext i32 %817 to i64
  %819 = getelementptr inbounds i32, ptr %816, i64 %818
  %820 = load i32, ptr %819, align 4, !tbaa !12
  %821 = sub nsw i32 %815, %820
  %822 = sitofp i32 %821 to float
  %823 = call i32 @libmetis__rpqInsert(ptr noundef %809, i32 noundef %810, float noundef %822)
  br label %824

824:                                              ; preds = %808, %800, %792, %785
  br label %825

825:                                              ; preds = %824, %746
  br label %826

826:                                              ; preds = %825, %745
  br label %827

827:                                              ; preds = %826
  %828 = load i32, ptr %9, align 4, !tbaa !12
  %829 = add nsw i32 %828, 1
  store i32 %829, ptr %9, align 4, !tbaa !12
  br label %559, !llvm.loop !34

830:                                              ; preds = %559
  br label %831

831:                                              ; preds = %830
  %832 = load i32, ptr %14, align 4, !tbaa !12
  %833 = add nsw i32 %832, 1
  store i32 %833, ptr %14, align 4, !tbaa !12
  br label %332, !llvm.loop !35

834:                                              ; preds = %376, %340, %332
  %835 = load ptr, ptr %4, align 8, !tbaa !5
  %836 = getelementptr inbounds %struct.ctrl_t, ptr %835, i32 0, i32 2
  %837 = load i32, ptr %836, align 8, !tbaa !26
  %838 = and i32 %837, 8
  %839 = icmp ne i32 %838, 0
  br i1 %839, label %840, label %850

840:                                              ; preds = %834
  %841 = load i32, ptr %34, align 4, !tbaa !12
  %842 = load ptr, ptr %29, align 8, !tbaa !5
  %843 = getelementptr inbounds i32, ptr %842, i64 0
  %844 = load i32, ptr %843, align 4, !tbaa !12
  %845 = load ptr, ptr %29, align 8, !tbaa !5
  %846 = getelementptr inbounds i32, ptr %845, i64 1
  %847 = load i32, ptr %846, align 4, !tbaa !12
  %848 = load i32, ptr %13, align 4, !tbaa !12
  %849 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, i32 noundef %841, i32 noundef %844, i32 noundef %847, i32 noundef %848)
  br label %850

850:                                              ; preds = %840, %834
  %851 = load i32, ptr %34, align 4, !tbaa !12
  %852 = load ptr, ptr %5, align 8, !tbaa !5
  %853 = getelementptr inbounds %struct.graph_t, ptr %852, i32 0, i32 17
  store i32 %851, ptr %853, align 8, !tbaa !31
  %854 = load i32, ptr %13, align 4, !tbaa !12
  %855 = load ptr, ptr %5, align 8, !tbaa !5
  %856 = getelementptr inbounds %struct.graph_t, ptr %855, i32 0, i32 21
  store i32 %854, ptr %856, align 8, !tbaa !30
  %857 = load ptr, ptr %32, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %857)
  %858 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %858)
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) #3

declare ptr @libmetis__iwspacemalloc(ptr noundef, i32 noundef) #3

declare i32 @printf(ptr noundef, ...) #3

declare ptr @libmetis__rpqCreate(i64 noundef) #3

declare ptr @libmetis__iset(i64 noundef, i32 noundef, ptr noundef) #3

declare i32 @libmetis__ComputeCut(ptr noundef, ptr noundef) #3

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

declare i32 @libmetis__CheckBnd(ptr noundef) #3

declare void @libmetis__irandArrayPermute(i32 noundef, ptr noundef, i32 noundef, i32 noundef) #3

declare i32 @libmetis__rpqInsert(ptr noundef, i32 noundef, float noundef) #3

declare i32 @libmetis__rpqGetTop(ptr noundef) #3

declare i32 @libmetis__rpqDelete(ptr noundef, i32 noundef) #3

declare void @libmetis__rpqUpdate(ptr noundef, i32 noundef, float noundef) #3

declare void @libmetis__rpqDestroy(ptr noundef) #3

declare void @libmetis__wspacepop(ptr noundef) #3

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

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

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

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


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

@.str = external hidden unnamed_addr constant [65 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [86 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [140 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [52 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance = external hidden unnamed_addr constant [61 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [48 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__Bnd2WayBalance(ptr noundef %0, ptr noundef %1, ptr nocapture noundef readonly %2) local_unnamed_addr #1 {
  %4 = alloca [2 x i32], align 4
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #6
  tail call void @libmetis__wspacepush(ptr noundef %0) #6
  %5 = load i32, ptr %1, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %1, i64 16
  %7 = load ptr, ptr %6, align 8, !tbaa !11
  %8 = getelementptr inbounds i8, ptr %1, i64 24
  %9 = load ptr, ptr %8, align 8, !tbaa !12
  %10 = getelementptr inbounds i8, ptr %1, i64 40
  %11 = load ptr, ptr %10, align 8, !tbaa !13
  %12 = getelementptr inbounds i8, ptr %1, i64 48
  %13 = load ptr, ptr %12, align 8, !tbaa !14
  %14 = getelementptr inbounds i8, ptr %1, i64 120
  %15 = load ptr, ptr %14, align 8, !tbaa !15
  %16 = getelementptr inbounds i8, ptr %1, i64 160
  %17 = load ptr, ptr %16, align 8, !tbaa !16
  %18 = getelementptr inbounds i8, ptr %1, i64 168
  %19 = load ptr, ptr %18, align 8, !tbaa !17
  %20 = getelementptr inbounds i8, ptr %1, i64 128
  %21 = load ptr, ptr %20, align 8, !tbaa !18
  %22 = getelementptr inbounds i8, ptr %1, i64 144
  %23 = load ptr, ptr %22, align 8, !tbaa !19
  %24 = getelementptr inbounds i8, ptr %1, i64 152
  %25 = load ptr, ptr %24, align 8, !tbaa !20
  %26 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %5) #6
  %27 = tail call ptr @libmetis__iwspacemalloc(ptr noundef %0, i32 noundef %5) #6
  %28 = getelementptr inbounds i8, ptr %1, i64 56
  %29 = load ptr, ptr %28, align 8, !tbaa !21
  %30 = load i32, ptr %29, align 4, !tbaa !22
  %31 = sitofp i32 %30 to float
  %32 = load float, ptr %2, align 4, !tbaa !23
  %33 = fmul float %32, %31
  %34 = fptosi float %33 to i32
  store i32 %34, ptr %4, align 4, !tbaa !22
  %35 = sub nsw i32 %30, %34
  %36 = getelementptr inbounds i8, ptr %4, i64 4
  store i32 %35, ptr %36, align 4, !tbaa !22
  %37 = load i32, ptr %21, align 4, !tbaa !22
  %38 = sub nsw i32 %34, %37
  %39 = tail call i32 @llvm.abs.i32(i32 %38, i1 true)
  %40 = icmp slt i32 %37, %34
  %41 = zext i1 %40 to i32
  %not. = xor i1 %40, true
  %42 = zext i1 %not. to i32
  %43 = getelementptr inbounds i8, ptr %0, i64 8
  %44 = load i32, ptr %43, align 8, !tbaa !25
  %45 = and i32 %44, 8
  %.not = icmp eq i32 %45, 0
  br i1 %.not, label %55, label %46

46:                                               ; preds = %3
  %47 = getelementptr inbounds i8, ptr %21, i64 4
  %48 = load i32, ptr %47, align 4, !tbaa !22
  %49 = load i32, ptr %1, align 8, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %1, i64 136
  %51 = load i32, ptr %50, align 8, !tbaa !29
  %52 = getelementptr inbounds i8, ptr %1, i64 112
  %53 = load i32, ptr %52, align 8, !tbaa !30
  %54 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %37, i32 noundef %48, i32 noundef %34, i32 noundef %35, i32 noundef %49, i32 noundef %51, i32 noundef %53)
  br label %55

55:                                               ; preds = %46, %3
  %56 = sext i32 %5 to i64
  %57 = tail call ptr @libmetis__rpqCreate(i64 noundef %56) #6
  %58 = tail call ptr @libmetis__iset(i64 noundef %56, i32 noundef -1, ptr noundef %26) #6
  %59 = tail call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %15) #6
  %60 = getelementptr inbounds i8, ptr %1, i64 112
  %61 = load i32, ptr %60, align 8, !tbaa !30
  %62 = icmp eq i32 %59, %61
  br i1 %62, label %69, label %63

63:                                               ; preds = %55
  %64 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef 83, ptr noundef nonnull @.str.2)
  %65 = tail call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %15) #6
  %66 = load i32, ptr %60, align 8, !tbaa !30
  %67 = icmp eq i32 %65, %66
  br i1 %67, label %69, label %68

68:                                               ; preds = %63
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 83, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #7
  unreachable

69:                                               ; preds = %63, %55
  %70 = tail call i32 @libmetis__CheckBnd(ptr noundef nonnull %1) #6
  %.not269 = icmp eq i32 %70, 0
  br i1 %.not269, label %71, label %75

71:                                               ; preds = %69
  %72 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef 84, ptr noundef nonnull @.str.2)
  %73 = tail call i32 @libmetis__CheckBnd(ptr noundef nonnull %1) #6
  %.not270 = icmp eq i32 %73, 0
  br i1 %.not270, label %74, label %75

74:                                               ; preds = %71
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, i32 noundef 84, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #7
  unreachable

75:                                               ; preds = %71, %69
  %76 = getelementptr inbounds i8, ptr %1, i64 136
  %77 = load i32, ptr %76, align 8, !tbaa !29
  %78 = sdiv i32 %77, 5
  tail call void @libmetis__irandArrayPermute(i32 noundef %77, ptr noundef %27, i32 noundef %78, i32 noundef 1) #6
  %79 = icmp sgt i32 %77, 0
  br i1 %79, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %75
  %wide.trip.count = zext nneg i32 %77 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %132
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %132 ]
  %80 = getelementptr inbounds i32, ptr %27, i64 %indvars.iv
  %81 = load i32, ptr %80, align 4, !tbaa !22
  %82 = sext i32 %81 to i64
  %83 = getelementptr inbounds i32, ptr %25, i64 %82
  %84 = load i32, ptr %83, align 4, !tbaa !22
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds i32, ptr %19, i64 %85
  %87 = load i32, ptr %86, align 4, !tbaa !22
  %88 = icmp sgt i32 %87, 0
  br i1 %88, label %105, label %89

89:                                               ; preds = %.lr.ph
  %90 = getelementptr inbounds i32, ptr %17, i64 %85
  %91 = load i32, ptr %90, align 4, !tbaa !22
  %92 = icmp eq i32 %91, 0
  br i1 %92, label %105, label %93

93:                                               ; preds = %89
  %94 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef 91, ptr noundef nonnull @.str.2)
  %95 = load i32, ptr %83, align 4, !tbaa !22
  %96 = sext i32 %95 to i64
  %97 = getelementptr inbounds i32, ptr %19, i64 %96
  %98 = load i32, ptr %97, align 4, !tbaa !22
  %99 = icmp sgt i32 %98, 0
  br i1 %99, label %105, label %100

100:                                              ; preds = %93
  %101 = getelementptr inbounds i32, ptr %17, i64 %96
  %102 = load i32, ptr %101, align 4, !tbaa !22
  %103 = icmp eq i32 %102, 0
  br i1 %103, label %105, label %104

104:                                              ; preds = %100
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.2, i32 noundef 91, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #7
  unreachable

105:                                              ; preds = %100, %93, %89, %.lr.ph
  %.pre-phi = phi i64 [ %96, %100 ], [ %96, %93 ], [ %85, %89 ], [ %85, %.lr.ph ]
  %106 = phi i32 [ %95, %100 ], [ %95, %93 ], [ %84, %89 ], [ %84, %.lr.ph ]
  %107 = getelementptr inbounds i32, ptr %23, i64 %.pre-phi
  %108 = load i32, ptr %107, align 4, !tbaa !22
  %.not281 = icmp eq i32 %108, -1
  br i1 %.not281, label %109, label %116

109:                                              ; preds = %105
  %110 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef 92, ptr noundef nonnull @.str.2)
  %111 = load i32, ptr %83, align 4, !tbaa !22
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds i32, ptr %23, i64 %112
  %114 = load i32, ptr %113, align 4, !tbaa !22
  %.not282 = icmp eq i32 %114, -1
  br i1 %.not282, label %115, label %116

115:                                              ; preds = %109
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 92, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #7
  unreachable

116:                                              ; preds = %109, %105
  %.pre-phi313 = phi i64 [ %112, %109 ], [ %.pre-phi, %105 ]
  %117 = phi i32 [ %111, %109 ], [ %106, %105 ]
  %118 = getelementptr inbounds i32, ptr %15, i64 %.pre-phi313
  %119 = load i32, ptr %118, align 4, !tbaa !22
  %120 = icmp eq i32 %119, %41
  br i1 %120, label %121, label %132

121:                                              ; preds = %116
  %122 = getelementptr inbounds i32, ptr %9, i64 %.pre-phi313
  %123 = load i32, ptr %122, align 4, !tbaa !22
  %.not283 = icmp sgt i32 %123, %39
  br i1 %.not283, label %132, label %124

124:                                              ; preds = %121
  %125 = getelementptr inbounds i32, ptr %19, i64 %.pre-phi313
  %126 = load i32, ptr %125, align 4, !tbaa !22
  %127 = getelementptr inbounds i32, ptr %17, i64 %.pre-phi313
  %128 = load i32, ptr %127, align 4, !tbaa !22
  %129 = sub nsw i32 %126, %128
  %130 = sitofp i32 %129 to float
  %131 = tail call i32 @libmetis__rpqInsert(ptr noundef %57, i32 noundef %117, float noundef %130) #6
  br label %132

132:                                              ; preds = %116, %121, %124
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !31

._crit_edge:                                      ; preds = %132, %75
  %133 = load i32, ptr %60, align 8, !tbaa !30
  %134 = icmp sgt i32 %5, 0
  br i1 %134, label %.lr.ph298, label %._crit_edge299

.lr.ph298:                                        ; preds = %._crit_edge
  %135 = zext i1 %not. to i64
  %136 = getelementptr inbounds i32, ptr %21, i64 %135
  %137 = getelementptr inbounds [2 x i32], ptr %4, i64 0, i64 %135
  %138 = zext i1 %40 to i64
  %139 = getelementptr inbounds i32, ptr %21, i64 %138
  %140 = getelementptr inbounds i8, ptr %21, i64 4
  br label %141

141:                                              ; preds = %.lr.ph298, %._crit_edge293
  %.0260296 = phi i32 [ %133, %.lr.ph298 ], [ %164, %._crit_edge293 ]
  %.0262295 = phi i32 [ %77, %.lr.ph298 ], [ %.2.lcssa, %._crit_edge293 ]
  %.0263294 = phi i32 [ 0, %.lr.ph298 ], [ %294, %._crit_edge293 ]
  %142 = tail call i32 @libmetis__rpqGetTop(ptr noundef %57) #6
  %143 = icmp eq i32 %142, -1
  br i1 %143, label %._crit_edge299, label %144

144:                                              ; preds = %141
  %145 = sext i32 %142 to i64
  %146 = getelementptr inbounds i32, ptr %23, i64 %145
  %147 = load i32, ptr %146, align 4, !tbaa !22
  %.not271 = icmp eq i32 %147, -1
  br i1 %.not271, label %148, label %152

148:                                              ; preds = %144
  %149 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef 101, ptr noundef nonnull @.str.2)
  %150 = load i32, ptr %146, align 4, !tbaa !22
  %.not272 = icmp eq i32 %150, -1
  br i1 %.not272, label %151, label %152

151:                                              ; preds = %148
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.2, i32 noundef 101, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #7
  unreachable

152:                                              ; preds = %148, %144
  %153 = load i32, ptr %136, align 4, !tbaa !22
  %154 = getelementptr inbounds i32, ptr %9, i64 %145
  %155 = load i32, ptr %154, align 4, !tbaa !22
  %156 = add nsw i32 %155, %153
  %157 = load i32, ptr %137, align 4, !tbaa !22
  %158 = icmp sgt i32 %156, %157
  br i1 %158, label %._crit_edge299, label %159

159:                                              ; preds = %152
  %160 = getelementptr inbounds i32, ptr %19, i64 %145
  %161 = load i32, ptr %160, align 4, !tbaa !22
  %162 = getelementptr inbounds i32, ptr %17, i64 %145
  %163 = load i32, ptr %162, align 4, !tbaa !22
  %.neg = sub i32 %163, %161
  %164 = add i32 %.neg, %.0260296
  store i32 %156, ptr %136, align 4, !tbaa !22
  %165 = load i32, ptr %154, align 4, !tbaa !22
  %166 = load i32, ptr %139, align 4, !tbaa !22
  %167 = sub nsw i32 %166, %165
  store i32 %167, ptr %139, align 4, !tbaa !22
  %168 = getelementptr inbounds i32, ptr %15, i64 %145
  store i32 %42, ptr %168, align 4, !tbaa !22
  %169 = getelementptr inbounds i32, ptr %26, i64 %145
  store i32 %.0263294, ptr %169, align 4, !tbaa !22
  %170 = load i32, ptr %43, align 8, !tbaa !25
  %171 = and i32 %170, 32
  %.not273 = icmp eq i32 %171, 0
  br i1 %.not273, label %180, label %172

172:                                              ; preds = %159
  %173 = load i32, ptr %160, align 4, !tbaa !22
  %174 = load i32, ptr %162, align 4, !tbaa !22
  %175 = sub nsw i32 %173, %174
  %176 = load i32, ptr %154, align 4, !tbaa !22
  %177 = load i32, ptr %21, align 4, !tbaa !22
  %178 = load i32, ptr %140, align 4, !tbaa !22
  %179 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef %142, i32 noundef %41, i32 noundef %175, i32 noundef %176, i32 noundef %164, i32 noundef %177, i32 noundef %178)
  br label %180

180:                                              ; preds = %159, %172
  %181 = load i32, ptr %162, align 4, !tbaa !22
  %182 = load i32, ptr %160, align 4, !tbaa !22
  store i32 %182, ptr %162, align 4, !tbaa !22
  store i32 %181, ptr %160, align 4, !tbaa !22
  %183 = icmp eq i32 %181, 0
  br i1 %183, label %184, label %207

184:                                              ; preds = %180
  %185 = getelementptr inbounds i32, ptr %7, i64 %145
  %186 = load i32, ptr %185, align 4, !tbaa !22
  %187 = getelementptr i8, ptr %185, i64 4
  %188 = load i32, ptr %187, align 4, !tbaa !22
  %189 = icmp slt i32 %186, %188
  br i1 %189, label %190, label %207

190:                                              ; preds = %184
  %191 = load i32, ptr %146, align 4, !tbaa !22
  %.not274 = icmp eq i32 %191, -1
  br i1 %.not274, label %192, label %196

192:                                              ; preds = %190
  %193 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef 120, ptr noundef nonnull @.str.2)
  %194 = load i32, ptr %146, align 4, !tbaa !22
  %.not275 = icmp eq i32 %194, -1
  br i1 %.not275, label %195, label %196

195:                                              ; preds = %192
  tail call void @__assert_fail(ptr noundef nonnull @.str.11, ptr noundef nonnull @.str.2, i32 noundef 120, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__Bnd2WayBalance) #7
  unreachable

196:                                              ; preds = %192, %190
  %197 = phi i32 [ %194, %192 ], [ %191, %190 ]
  %198 = add nsw i32 %.0262295, -1
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds i32, ptr %25, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !22
  %202 = sext i32 %197 to i64
  %203 = getelementptr inbounds i32, ptr %25, i64 %202
  store i32 %201, ptr %203, align 4, !tbaa !22
  %204 = load i32, ptr %146, align 4, !tbaa !22
  %205 = sext i32 %201 to i64
  %206 = getelementptr inbounds i32, ptr %23, i64 %205
  store i32 %204, ptr %206, align 4, !tbaa !22
  store i32 -1, ptr %146, align 4, !tbaa !22
  br label %207

207:                                              ; preds = %196, %184, %180
  %.1 = phi i32 [ %198, %196 ], [ %.0262295, %184 ], [ %.0262295, %180 ]
  %208 = getelementptr inbounds i32, ptr %7, i64 %145
  %209 = load i32, ptr %208, align 4, !tbaa !22
  %210 = getelementptr i8, ptr %208, i64 4
  %211 = load i32, ptr %210, align 4, !tbaa !22
  %212 = icmp slt i32 %209, %211
  br i1 %212, label %.lr.ph292.preheader, label %._crit_edge293

.lr.ph292.preheader:                              ; preds = %207
  %213 = sext i32 %209 to i64
  br label %.lr.ph292

.lr.ph292:                                        ; preds = %.lr.ph292.preheader, %290
  %indvars.iv309 = phi i64 [ %213, %.lr.ph292.preheader ], [ %indvars.iv.next310, %290 ]
  %.2289 = phi i32 [ %.1, %.lr.ph292.preheader ], [ %.3, %290 ]
  %214 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv309
  %215 = load i32, ptr %214, align 4, !tbaa !22
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds i32, ptr %15, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !22
  %219 = icmp eq i32 %218, %42
  %220 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv309
  %221 = load i32, ptr %220, align 4, !tbaa !22
  %222 = sub nsw i32 0, %221
  %223 = select i1 %219, i32 %221, i32 %222
  %224 = getelementptr inbounds i32, ptr %17, i64 %216
  %225 = load i32, ptr %224, align 4, !tbaa !22
  %226 = add nsw i32 %225, %223
  store i32 %226, ptr %224, align 4, !tbaa !22
  %227 = getelementptr inbounds i32, ptr %19, i64 %216
  %228 = load i32, ptr %227, align 4, !tbaa !22
  %229 = sub nsw i32 %228, %223
  store i32 %229, ptr %227, align 4, !tbaa !22
  %230 = getelementptr inbounds i32, ptr %23, i64 %216
  %231 = load i32, ptr %230, align 4, !tbaa !22
  %.not276 = icmp eq i32 %231, -1
  br i1 %.not276, label %269, label %232

232:                                              ; preds = %.lr.ph292
  %233 = icmp eq i32 %228, %223
  br i1 %233, label %234, label %255

234:                                              ; preds = %232
  %235 = add nsw i32 %.2289, -1
  %236 = sext i32 %235 to i64
  %237 = getelementptr inbounds i32, ptr %25, i64 %236
  %238 = load i32, ptr %237, align 4, !tbaa !22
  %239 = sext i32 %231 to i64
  %240 = getelementptr inbounds i32, ptr %25, i64 %239
  store i32 %238, ptr %240, align 4, !tbaa !22
  %241 = load i32, ptr %230, align 4, !tbaa !22
  %242 = sext i32 %238 to i64
  %243 = getelementptr inbounds i32, ptr %23, i64 %242
  store i32 %241, ptr %243, align 4, !tbaa !22
  store i32 -1, ptr %230, align 4, !tbaa !22
  %244 = getelementptr inbounds i32, ptr %26, i64 %216
  %245 = load i32, ptr %244, align 4, !tbaa !22
  %246 = icmp eq i32 %245, -1
  br i1 %246, label %247, label %290

247:                                              ; preds = %234
  %248 = load i32, ptr %217, align 4, !tbaa !22
  %249 = icmp eq i32 %248, %41
  br i1 %249, label %250, label %290

250:                                              ; preds = %247
  %251 = getelementptr inbounds i32, ptr %9, i64 %216
  %252 = load i32, ptr %251, align 4, !tbaa !22
  %.not279 = icmp sgt i32 %252, %39
  br i1 %.not279, label %290, label %253

253:                                              ; preds = %250
  %254 = tail call i32 @libmetis__rpqDelete(ptr noundef %57, i32 noundef %215) #6
  br label %290

255:                                              ; preds = %232
  %256 = getelementptr inbounds i32, ptr %26, i64 %216
  %257 = load i32, ptr %256, align 4, !tbaa !22
  %258 = icmp eq i32 %257, -1
  br i1 %258, label %259, label %290

259:                                              ; preds = %255
  %260 = load i32, ptr %217, align 4, !tbaa !22
  %261 = icmp eq i32 %260, %41
  br i1 %261, label %262, label %290

262:                                              ; preds = %259
  %263 = getelementptr inbounds i32, ptr %9, i64 %216
  %264 = load i32, ptr %263, align 4, !tbaa !22
  %.not278 = icmp sgt i32 %264, %39
  br i1 %.not278, label %290, label %265

265:                                              ; preds = %262
  %266 = load i32, ptr %224, align 4, !tbaa !22
  %267 = sub nsw i32 %229, %266
  %268 = sitofp i32 %267 to float
  tail call void @libmetis__rpqUpdate(ptr noundef %57, i32 noundef %215, float noundef %268) #6
  br label %290

269:                                              ; preds = %.lr.ph292
  %270 = icmp sgt i32 %229, 0
  br i1 %270, label %271, label %290

271:                                              ; preds = %269
  %272 = sext i32 %.2289 to i64
  %273 = getelementptr inbounds i32, ptr %25, i64 %272
  store i32 %215, ptr %273, align 4, !tbaa !22
  %274 = add nsw i32 %.2289, 1
  store i32 %.2289, ptr %230, align 4, !tbaa !22
  %275 = getelementptr inbounds i32, ptr %26, i64 %216
  %276 = load i32, ptr %275, align 4, !tbaa !22
  %277 = icmp eq i32 %276, -1
  br i1 %277, label %278, label %290

278:                                              ; preds = %271
  %279 = load i32, ptr %217, align 4, !tbaa !22
  %280 = icmp eq i32 %279, %41
  br i1 %280, label %281, label %290

281:                                              ; preds = %278
  %282 = getelementptr inbounds i32, ptr %9, i64 %216
  %283 = load i32, ptr %282, align 4, !tbaa !22
  %.not277 = icmp sgt i32 %283, %39
  br i1 %.not277, label %290, label %284

284:                                              ; preds = %281
  %285 = load i32, ptr %227, align 4, !tbaa !22
  %286 = load i32, ptr %224, align 4, !tbaa !22
  %287 = sub nsw i32 %285, %286
  %288 = sitofp i32 %287 to float
  %289 = tail call i32 @libmetis__rpqInsert(ptr noundef %57, i32 noundef %215, float noundef %288) #6
  br label %290

290:                                              ; preds = %255, %259, %262, %265, %234, %247, %250, %253, %271, %278, %281, %284, %269
  %.3 = phi i32 [ %235, %253 ], [ %235, %250 ], [ %235, %247 ], [ %235, %234 ], [ %.2289, %265 ], [ %.2289, %262 ], [ %.2289, %259 ], [ %.2289, %255 ], [ %274, %284 ], [ %274, %281 ], [ %274, %278 ], [ %274, %271 ], [ %.2289, %269 ]
  %indvars.iv.next310 = add nsw i64 %indvars.iv309, 1
  %291 = load i32, ptr %210, align 4, !tbaa !22
  %292 = sext i32 %291 to i64
  %293 = icmp slt i64 %indvars.iv.next310, %292
  br i1 %293, label %.lr.ph292, label %._crit_edge293, !llvm.loop !33

._crit_edge293:                                   ; preds = %290, %207
  %.2.lcssa = phi i32 [ %.1, %207 ], [ %.3, %290 ]
  %294 = add nuw nsw i32 %.0263294, 1
  %exitcond312.not = icmp eq i32 %294, %5
  br i1 %exitcond312.not, label %._crit_edge299, label %141, !llvm.loop !34

._crit_edge299:                                   ; preds = %._crit_edge293, %141, %152, %._crit_edge
  %.0262.lcssa = phi i32 [ %77, %._crit_edge ], [ %.0262295, %152 ], [ %.0262295, %141 ], [ %.2.lcssa, %._crit_edge293 ]
  %.0260.lcssa = phi i32 [ %133, %._crit_edge ], [ %.0260296, %152 ], [ %.0260296, %141 ], [ %164, %._crit_edge293 ]
  %295 = load i32, ptr %43, align 8, !tbaa !25
  %296 = and i32 %295, 8
  %.not280 = icmp eq i32 %296, 0
  br i1 %.not280, label %302, label %297

297:                                              ; preds = %._crit_edge299
  %298 = load i32, ptr %21, align 4, !tbaa !22
  %299 = getelementptr inbounds i8, ptr %21, i64 4
  %300 = load i32, ptr %299, align 4, !tbaa !22
  %301 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, i32 noundef %.0260.lcssa, i32 noundef %298, i32 noundef %300, i32 noundef %.0262.lcssa)
  br label %302

302:                                              ; preds = %297, %._crit_edge299
  store i32 %.0260.lcssa, ptr %60, align 8, !tbaa !30
  store i32 %.0262.lcssa, ptr %76, align 8, !tbaa !29
  tail call void @libmetis__rpqDestroy(ptr noundef %57) #6
  tail call void @libmetis__wspacepop(ptr noundef nonnull %0) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #6
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #3

declare ptr @libmetis__iwspacemalloc(ptr noundef, i32 noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #4

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #3

declare ptr @libmetis__iset(i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #3

declare i32 @libmetis__ComputeCut(ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #5

declare i32 @libmetis__CheckBnd(ptr noundef) local_unnamed_addr #3

declare void @libmetis__irandArrayPermute(i32 noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #3

declare i32 @libmetis__rpqInsert(ptr noundef, i32 noundef, float noundef) local_unnamed_addr #3

declare i32 @libmetis__rpqGetTop(ptr noundef) local_unnamed_addr #3

declare i32 @libmetis__rpqDelete(ptr noundef, i32 noundef) local_unnamed_addr #3

declare void @libmetis__rpqUpdate(ptr noundef, i32 noundef, float noundef) local_unnamed_addr #3

declare void @libmetis__rpqDestroy(ptr noundef) local_unnamed_addr #3

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #3

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { "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 #4 = { nofree nounwind "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 #5 = { noreturn nounwind "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 #6 = { nounwind }
attributes #7 = { noreturn 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 = !{!"graph_t", !7, i64 0, !7, i64 4, !7, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !7, i64 72, !7, i64 76, !7, i64 80, !7, i64 84, !7, i64 88, !10, i64 96, !10, i64 104, !7, i64 112, !7, i64 116, !10, i64 120, !10, i64 128, !7, i64 136, !10, i64 144, !10, i64 152, !10, i64 160, !10, i64 168, !10, i64 176, !10, i64 184, !10, i64 192, !10, i64 200, !10, i64 208}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !10, i64 16}
!12 = !{!6, !10, i64 24}
!13 = !{!6, !10, i64 40}
!14 = !{!6, !10, i64 48}
!15 = !{!6, !10, i64 120}
!16 = !{!6, !10, i64 160}
!17 = !{!6, !10, i64 168}
!18 = !{!6, !10, i64 128}
!19 = !{!6, !10, i64 144}
!20 = !{!6, !10, i64 152}
!21 = !{!6, !10, i64 56}
!22 = !{!7, !7, i64 0}
!23 = !{!24, !24, i64 0}
!24 = !{!"float", !8, i64 0}
!25 = !{!26, !7, i64 8}
!26 = !{!"ctrl_t", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !7, i64 16, !7, i64 20, !7, i64 24, !7, i64 28, !7, i64 32, !7, i64 36, !7, i64 40, !7, i64 44, !7, i64 48, !7, i64 52, !7, i64 56, !7, i64 60, !7, i64 64, !7, i64 68, !7, i64 72, !10, i64 80, !7, i64 88, !7, i64 92, !24, i64 96, !10, i64 104, !10, i64 112, !10, i64 120, !24, i64 128, !27, i64 136, !27, i64 144, !27, i64 152, !27, i64 160, !27, i64 168, !27, i64 176, !27, i64 184, !27, i64 192, !27, i64 200, !27, i64 208, !27, i64 216, !27, i64 224, !10, i64 232, !28, i64 240, !28, i64 248, !28, i64 256, !10, i64 264, !10, i64 272, !10, i64 280, !10, i64 288, !10, i64 296, !10, i64 304, !10, i64 312, !10, i64 320}
!27 = !{!"double", !8, i64 0}
!28 = !{!"long", !8, i64 0}
!29 = !{!6, !7, i64 136}
!30 = !{!6, !7, i64 112}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.mustprogress"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !32}


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