; 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
@.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.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
@__PRETTY_FUNCTION__.libmetis__General2WayBalance = external hidden unnamed_addr constant [65 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [21 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__General2WayBalance(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 210, 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 210, ptr noundef @__PRETTY_FUNCTION__.libmetis__General2WayBalance) #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 211, 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 211, ptr noundef @__PRETTY_FUNCTION__.libmetis__General2WayBalance) #6
  unreachable

180:                                              ; preds = %178
  br label %181

181:                                              ; preds = %180, %169
  %182 = load i32, ptr %12, align 4, !tbaa !12
  %183 = load ptr, ptr %31, align 8, !tbaa !5
  %184 = load i32, ptr %12, align 4, !tbaa !12
  %185 = sdiv i32 %184, 5
  call void @libmetis__irandArrayPermute(i32 noundef %182, ptr noundef %183, i32 noundef %185, i32 noundef 1)
  store i32 0, ptr %8, align 4, !tbaa !12
  br label %186

186:                                              ; preds = %228, %181
  %187 = load i32, ptr %8, align 4, !tbaa !12
  %188 = load i32, ptr %12, align 4, !tbaa !12
  %189 = icmp slt i32 %187, %188
  br i1 %189, label %190, label %231

190:                                              ; preds = %186
  %191 = load ptr, ptr %31, align 8, !tbaa !5
  %192 = load i32, ptr %8, align 4, !tbaa !12
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i32, ptr %191, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !12
  store i32 %195, ptr %7, align 4, !tbaa !12
  %196 = load ptr, ptr %24, align 8, !tbaa !5
  %197 = load i32, ptr %7, align 4, !tbaa !12
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %196, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !12
  %201 = load i32, ptr %15, align 4, !tbaa !12
  %202 = icmp eq i32 %200, %201
  br i1 %202, label %203, label %227

203:                                              ; preds = %190
  %204 = load ptr, ptr %21, align 8, !tbaa !5
  %205 = load i32, ptr %7, align 4, !tbaa !12
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds i32, ptr %204, i64 %206
  %208 = load i32, ptr %207, align 4, !tbaa !12
  %209 = load i32, ptr %35, align 4, !tbaa !12
  %210 = icmp sle i32 %208, %209
  br i1 %210, label %211, label %227

211:                                              ; preds = %203
  %212 = load ptr, ptr %32, align 8, !tbaa !5
  %213 = load i32, ptr %7, align 4, !tbaa !12
  %214 = load ptr, ptr %26, align 8, !tbaa !5
  %215 = load i32, ptr %7, align 4, !tbaa !12
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds i32, ptr %214, i64 %216
  %218 = load i32, ptr %217, align 4, !tbaa !12
  %219 = load ptr, ptr %25, align 8, !tbaa !5
  %220 = load i32, ptr %7, align 4, !tbaa !12
  %221 = sext i32 %220 to i64
  %222 = getelementptr inbounds i32, ptr %219, i64 %221
  %223 = load i32, ptr %222, align 4, !tbaa !12
  %224 = sub nsw i32 %218, %223
  %225 = sitofp i32 %224 to float
  %226 = call i32 @libmetis__rpqInsert(ptr noundef %212, i32 noundef %213, float noundef %225)
  br label %227

227:                                              ; preds = %211, %203, %190
  br label %228

228:                                              ; preds = %227
  %229 = load i32, ptr %8, align 4, !tbaa !12
  %230 = add nsw i32 %229, 1
  store i32 %230, ptr %8, align 4, !tbaa !12
  br label %186, !llvm.loop !32

231:                                              ; preds = %186
  %232 = load ptr, ptr %5, align 8, !tbaa !5
  %233 = getelementptr inbounds %struct.graph_t, ptr %232, i32 0, i32 17
  %234 = load i32, ptr %233, align 8, !tbaa !31
  store i32 %234, ptr %34, align 4, !tbaa !12
  %235 = load ptr, ptr %5, align 8, !tbaa !5
  %236 = getelementptr inbounds %struct.graph_t, ptr %235, i32 0, i32 21
  %237 = load i32, ptr %236, align 8, !tbaa !30
  store i32 %237, ptr %13, align 4, !tbaa !12
  store i32 0, ptr %14, align 4, !tbaa !12
  br label %238

238:                                              ; preds = %712, %231
  %239 = load i32, ptr %14, align 4, !tbaa !12
  %240 = load i32, ptr %12, align 4, !tbaa !12
  %241 = icmp slt i32 %239, %240
  br i1 %241, label %242, label %715

242:                                              ; preds = %238
  %243 = load ptr, ptr %32, align 8, !tbaa !5
  %244 = call i32 @libmetis__rpqGetTop(ptr noundef %243)
  store i32 %244, ptr %33, align 4, !tbaa !12
  %245 = icmp eq i32 %244, -1
  br i1 %245, label %246, label %247

246:                                              ; preds = %242
  br label %715

247:                                              ; preds = %242
  %248 = load ptr, ptr %29, align 8, !tbaa !5
  %249 = load i32, ptr %16, 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 = load ptr, ptr %21, align 8, !tbaa !5
  %254 = load i32, ptr %33, align 4, !tbaa !12
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds i32, ptr %253, i64 %255
  %257 = load i32, ptr %256, align 4, !tbaa !12
  %258 = add nsw i32 %252, %257
  %259 = load i32, ptr %16, align 4, !tbaa !12
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds [2 x i32], ptr %36, i64 0, i64 %260
  %262 = load i32, ptr %261, align 4, !tbaa !12
  %263 = icmp sgt i32 %258, %262
  br i1 %263, label %264, label %265

264:                                              ; preds = %247
  br label %715

265:                                              ; preds = %247
  %266 = load ptr, ptr %26, align 8, !tbaa !5
  %267 = load i32, ptr %33, align 4, !tbaa !12
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds i32, ptr %266, i64 %268
  %270 = load i32, ptr %269, align 4, !tbaa !12
  %271 = load ptr, ptr %25, align 8, !tbaa !5
  %272 = load i32, ptr %33, align 4, !tbaa !12
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds i32, ptr %271, i64 %273
  %275 = load i32, ptr %274, align 4, !tbaa !12
  %276 = sub nsw i32 %270, %275
  %277 = load i32, ptr %34, align 4, !tbaa !12
  %278 = sub nsw i32 %277, %276
  store i32 %278, ptr %34, align 4, !tbaa !12
  br label %279

279:                                              ; preds = %265
  %280 = load ptr, ptr %21, align 8, !tbaa !5
  %281 = load i32, ptr %33, align 4, !tbaa !12
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds i32, ptr %280, i64 %282
  %284 = load i32, ptr %283, align 4, !tbaa !12
  %285 = load ptr, ptr %29, align 8, !tbaa !5
  %286 = load i32, ptr %16, align 4, !tbaa !12
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds i32, ptr %285, i64 %287
  %289 = load i32, ptr %288, align 4, !tbaa !12
  %290 = add nsw i32 %289, %284
  store i32 %290, ptr %288, align 4, !tbaa !12
  %291 = load ptr, ptr %21, align 8, !tbaa !5
  %292 = load i32, ptr %33, align 4, !tbaa !12
  %293 = sext i32 %292 to i64
  %294 = getelementptr inbounds i32, ptr %291, i64 %293
  %295 = load i32, ptr %294, align 4, !tbaa !12
  %296 = load ptr, ptr %29, align 8, !tbaa !5
  %297 = load i32, ptr %15, align 4, !tbaa !12
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds i32, ptr %296, i64 %298
  %300 = load i32, ptr %299, align 4, !tbaa !12
  %301 = sub nsw i32 %300, %295
  store i32 %301, ptr %299, align 4, !tbaa !12
  br label %302

302:                                              ; preds = %279
  br label %303

303:                                              ; preds = %302
  %304 = load i32, ptr %16, align 4, !tbaa !12
  %305 = load ptr, ptr %24, align 8, !tbaa !5
  %306 = load i32, ptr %33, align 4, !tbaa !12
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds i32, ptr %305, i64 %307
  store i32 %304, ptr %308, align 4, !tbaa !12
  %309 = load i32, ptr %14, align 4, !tbaa !12
  %310 = load ptr, ptr %30, align 8, !tbaa !5
  %311 = load i32, ptr %33, align 4, !tbaa !12
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds i32, ptr %310, i64 %312
  store i32 %309, ptr %313, align 4, !tbaa !12
  %314 = load ptr, ptr %4, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.ctrl_t, ptr %314, i32 0, i32 2
  %316 = load i32, ptr %315, align 8, !tbaa !26
  %317 = and i32 %316, 32
  %318 = icmp ne i32 %317, 0
  br i1 %318, label %319, label %346

319:                                              ; preds = %303
  %320 = load i32, ptr %33, align 4, !tbaa !12
  %321 = load i32, ptr %15, align 4, !tbaa !12
  %322 = load ptr, ptr %26, align 8, !tbaa !5
  %323 = load i32, ptr %33, align 4, !tbaa !12
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds i32, ptr %322, i64 %324
  %326 = load i32, ptr %325, align 4, !tbaa !12
  %327 = load ptr, ptr %25, align 8, !tbaa !5
  %328 = load i32, ptr %33, align 4, !tbaa !12
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds i32, ptr %327, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !12
  %332 = sub nsw i32 %326, %331
  %333 = load ptr, ptr %21, align 8, !tbaa !5
  %334 = load i32, ptr %33, align 4, !tbaa !12
  %335 = sext i32 %334 to i64
  %336 = getelementptr inbounds i32, ptr %333, i64 %335
  %337 = load i32, ptr %336, align 4, !tbaa !12
  %338 = load i32, ptr %34, align 4, !tbaa !12
  %339 = load ptr, ptr %29, align 8, !tbaa !5
  %340 = getelementptr inbounds i32, ptr %339, i64 0
  %341 = load i32, ptr %340, align 4, !tbaa !12
  %342 = load ptr, ptr %29, align 8, !tbaa !5
  %343 = getelementptr inbounds i32, ptr %342, i64 1
  %344 = load i32, ptr %343, align 4, !tbaa !12
  %345 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef %320, i32 noundef %321, i32 noundef %332, i32 noundef %337, i32 noundef %338, i32 noundef %341, i32 noundef %344)
  br label %346

346:                                              ; preds = %319, %303
  br label %347

347:                                              ; preds = %346
  %348 = load ptr, ptr %25, align 8, !tbaa !5
  %349 = load i32, ptr %33, align 4, !tbaa !12
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds i32, ptr %348, i64 %350
  %352 = load i32, ptr %351, align 4, !tbaa !12
  store i32 %352, ptr %19, align 4, !tbaa !12
  %353 = load ptr, ptr %26, align 8, !tbaa !5
  %354 = load i32, ptr %33, align 4, !tbaa !12
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds i32, ptr %353, i64 %355
  %357 = load i32, ptr %356, align 4, !tbaa !12
  %358 = load ptr, ptr %25, align 8, !tbaa !5
  %359 = load i32, ptr %33, align 4, !tbaa !12
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds i32, ptr %358, i64 %360
  store i32 %357, ptr %361, align 4, !tbaa !12
  %362 = load i32, ptr %19, align 4, !tbaa !12
  %363 = load ptr, ptr %26, align 8, !tbaa !5
  %364 = load i32, ptr %33, align 4, !tbaa !12
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds i32, ptr %363, i64 %365
  store i32 %362, ptr %366, align 4, !tbaa !12
  br label %367

367:                                              ; preds = %347
  br label %368

368:                                              ; preds = %367
  %369 = load ptr, ptr %26, align 8, !tbaa !5
  %370 = load i32, ptr %33, align 4, !tbaa !12
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds i32, ptr %369, i64 %371
  %373 = load i32, ptr %372, align 4, !tbaa !12
  %374 = icmp eq i32 %373, 0
  br i1 %374, label %375, label %448

375:                                              ; preds = %368
  %376 = load ptr, ptr %27, align 8, !tbaa !5
  %377 = load i32, ptr %33, align 4, !tbaa !12
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds i32, ptr %376, i64 %378
  %380 = load i32, ptr %379, align 4, !tbaa !12
  %381 = icmp ne i32 %380, -1
  br i1 %381, label %382, label %448

382:                                              ; preds = %375
  %383 = load ptr, ptr %20, 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 = load ptr, ptr %20, align 8, !tbaa !5
  %389 = load i32, ptr %33, align 4, !tbaa !12
  %390 = add nsw i32 %389, 1
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds i32, ptr %388, i64 %391
  %393 = load i32, ptr %392, align 4, !tbaa !12
  %394 = icmp slt i32 %387, %393
  br i1 %394, label %395, label %448

395:                                              ; preds = %382
  br label %396

396:                                              ; preds = %395
  %397 = load ptr, ptr %27, align 8, !tbaa !5
  %398 = load i32, ptr %33, 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 = icmp ne i32 %401, -1
  br i1 %402, label %414, label %403

403:                                              ; preds = %396
  %404 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 244, ptr noundef @.str.2)
  %405 = load ptr, ptr %27, align 8, !tbaa !5
  %406 = load i32, ptr %33, align 4, !tbaa !12
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds i32, ptr %405, i64 %407
  %409 = load i32, ptr %408, align 4, !tbaa !12
  %410 = icmp ne i32 %409, -1
  br i1 %410, label %411, label %412

411:                                              ; preds = %403
  br label %413

412:                                              ; preds = %403
  call void @__assert_fail(ptr noundef @.str.11, ptr noundef @.str.2, i32 noundef 244, ptr noundef @__PRETTY_FUNCTION__.libmetis__General2WayBalance) #6
  unreachable

413:                                              ; preds = %411
  br label %414

414:                                              ; preds = %413, %396
  %415 = load ptr, ptr %28, align 8, !tbaa !5
  %416 = load i32, ptr %13, align 4, !tbaa !12
  %417 = add nsw i32 %416, -1
  store i32 %417, ptr %13, align 4, !tbaa !12
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds i32, ptr %415, i64 %418
  %420 = load i32, ptr %419, align 4, !tbaa !12
  %421 = load ptr, ptr %28, align 8, !tbaa !5
  %422 = load ptr, ptr %27, 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
  %426 = load i32, ptr %425, align 4, !tbaa !12
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds i32, ptr %421, i64 %427
  store i32 %420, ptr %428, align 4, !tbaa !12
  %429 = load ptr, ptr %27, align 8, !tbaa !5
  %430 = load i32, ptr %33, align 4, !tbaa !12
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds i32, ptr %429, i64 %431
  %433 = load i32, ptr %432, align 4, !tbaa !12
  %434 = load ptr, ptr %27, align 8, !tbaa !5
  %435 = load ptr, ptr %28, align 8, !tbaa !5
  %436 = load i32, ptr %13, align 4, !tbaa !12
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds i32, ptr %435, i64 %437
  %439 = load i32, ptr %438, align 4, !tbaa !12
  %440 = sext i32 %439 to i64
  %441 = getelementptr inbounds i32, ptr %434, i64 %440
  store i32 %433, ptr %441, align 4, !tbaa !12
  %442 = load ptr, ptr %27, align 8, !tbaa !5
  %443 = load i32, ptr %33, align 4, !tbaa !12
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds i32, ptr %442, i64 %444
  store i32 -1, ptr %445, align 4, !tbaa !12
  br label %446

446:                                              ; preds = %414
  br label %447

447:                                              ; preds = %446
  br label %448

448:                                              ; preds = %447, %382, %375, %368
  %449 = load ptr, ptr %26, align 8, !tbaa !5
  %450 = load i32, ptr %33, align 4, !tbaa !12
  %451 = sext i32 %450 to i64
  %452 = getelementptr inbounds i32, ptr %449, i64 %451
  %453 = load i32, ptr %452, align 4, !tbaa !12
  %454 = icmp sgt i32 %453, 0
  br i1 %454, label %455, label %495

455:                                              ; preds = %448
  %456 = load ptr, ptr %27, align 8, !tbaa !5
  %457 = load i32, ptr %33, align 4, !tbaa !12
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds i32, ptr %456, i64 %458
  %460 = load i32, ptr %459, align 4, !tbaa !12
  %461 = icmp eq i32 %460, -1
  br i1 %461, label %462, label %495

462:                                              ; preds = %455
  br label %463

463:                                              ; preds = %462
  %464 = load ptr, ptr %27, align 8, !tbaa !5
  %465 = load i32, ptr %33, align 4, !tbaa !12
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds i32, ptr %464, i64 %466
  %468 = load i32, ptr %467, align 4, !tbaa !12
  %469 = icmp eq i32 %468, -1
  br i1 %469, label %481, label %470

470:                                              ; preds = %463
  %471 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, i32 noundef 246, ptr noundef @.str.2)
  %472 = load ptr, ptr %27, align 8, !tbaa !5
  %473 = load i32, ptr %33, align 4, !tbaa !12
  %474 = sext i32 %473 to i64
  %475 = getelementptr inbounds i32, ptr %472, i64 %474
  %476 = load i32, ptr %475, align 4, !tbaa !12
  %477 = icmp eq i32 %476, -1
  br i1 %477, label %478, label %479

478:                                              ; preds = %470
  br label %480

479:                                              ; preds = %470
  call void @__assert_fail(ptr noundef @.str.19, ptr noundef @.str.2, i32 noundef 246, ptr noundef @__PRETTY_FUNCTION__.libmetis__General2WayBalance) #6
  unreachable

480:                                              ; preds = %478
  br label %481

481:                                              ; preds = %480, %463
  %482 = load i32, ptr %33, align 4, !tbaa !12
  %483 = load ptr, ptr %28, align 8, !tbaa !5
  %484 = load i32, ptr %13, align 4, !tbaa !12
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds i32, ptr %483, i64 %485
  store i32 %482, ptr %486, align 4, !tbaa !12
  %487 = load i32, ptr %13, align 4, !tbaa !12
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %13, align 4, !tbaa !12
  %489 = load ptr, ptr %27, align 8, !tbaa !5
  %490 = load i32, ptr %33, align 4, !tbaa !12
  %491 = sext i32 %490 to i64
  %492 = getelementptr inbounds i32, ptr %489, i64 %491
  store i32 %487, ptr %492, align 4, !tbaa !12
  br label %493

493:                                              ; preds = %481
  br label %494

494:                                              ; preds = %493
  br label %495

495:                                              ; preds = %494, %455, %448
  %496 = load ptr, ptr %20, align 8, !tbaa !5
  %497 = load i32, ptr %33, align 4, !tbaa !12
  %498 = sext i32 %497 to i64
  %499 = getelementptr inbounds i32, ptr %496, i64 %498
  %500 = load i32, ptr %499, align 4, !tbaa !12
  store i32 %500, ptr %9, align 4, !tbaa !12
  br label %501

501:                                              ; preds = %708, %495
  %502 = load i32, ptr %9, align 4, !tbaa !12
  %503 = load ptr, ptr %20, align 8, !tbaa !5
  %504 = load i32, ptr %33, align 4, !tbaa !12
  %505 = add nsw i32 %504, 1
  %506 = sext i32 %505 to i64
  %507 = getelementptr inbounds i32, ptr %503, i64 %506
  %508 = load i32, ptr %507, align 4, !tbaa !12
  %509 = icmp slt i32 %502, %508
  br i1 %509, label %510, label %711

510:                                              ; preds = %501
  %511 = load ptr, ptr %22, align 8, !tbaa !5
  %512 = load i32, ptr %9, align 4, !tbaa !12
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i32, ptr %511, i64 %513
  %515 = load i32, ptr %514, align 4, !tbaa !12
  store i32 %515, ptr %10, align 4, !tbaa !12
  %516 = load i32, ptr %16, align 4, !tbaa !12
  %517 = load ptr, ptr %24, align 8, !tbaa !5
  %518 = load i32, ptr %10, align 4, !tbaa !12
  %519 = sext i32 %518 to i64
  %520 = getelementptr inbounds i32, ptr %517, i64 %519
  %521 = load i32, ptr %520, align 4, !tbaa !12
  %522 = icmp eq i32 %516, %521
  br i1 %522, label %523, label %529

523:                                              ; preds = %510
  %524 = load ptr, ptr %23, align 8, !tbaa !5
  %525 = load i32, ptr %9, align 4, !tbaa !12
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i32, ptr %524, i64 %526
  %528 = load i32, ptr %527, align 4, !tbaa !12
  br label %536

529:                                              ; preds = %510
  %530 = load ptr, ptr %23, align 8, !tbaa !5
  %531 = load i32, ptr %9, align 4, !tbaa !12
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds i32, ptr %530, i64 %532
  %534 = load i32, ptr %533, align 4, !tbaa !12
  %535 = sub nsw i32 0, %534
  br label %536

536:                                              ; preds = %529, %523
  %537 = phi i32 [ %528, %523 ], [ %535, %529 ]
  store i32 %537, ptr %11, align 4, !tbaa !12
  br label %538

538:                                              ; preds = %536
  %539 = load i32, ptr %11, align 4, !tbaa !12
  %540 = load ptr, ptr %25, align 8, !tbaa !5
  %541 = load i32, ptr %10, 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 = add nsw i32 %544, %539
  store i32 %545, ptr %543, align 4, !tbaa !12
  %546 = load i32, ptr %11, align 4, !tbaa !12
  %547 = load ptr, ptr %26, align 8, !tbaa !5
  %548 = load i32, ptr %10, align 4, !tbaa !12
  %549 = sext i32 %548 to i64
  %550 = getelementptr inbounds i32, ptr %547, i64 %549
  %551 = load i32, ptr %550, align 4, !tbaa !12
  %552 = sub nsw i32 %551, %546
  store i32 %552, ptr %550, align 4, !tbaa !12
  br label %553

553:                                              ; preds = %538
  br label %554

554:                                              ; preds = %553
  %555 = load ptr, ptr %30, align 8, !tbaa !5
  %556 = load i32, ptr %10, align 4, !tbaa !12
  %557 = sext i32 %556 to i64
  %558 = getelementptr inbounds i32, ptr %555, i64 %557
  %559 = load i32, ptr %558, align 4, !tbaa !12
  %560 = icmp eq i32 %559, -1
  br i1 %560, label %561, label %592

561:                                              ; preds = %554
  %562 = load ptr, ptr %24, align 8, !tbaa !5
  %563 = load i32, ptr %10, align 4, !tbaa !12
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds i32, ptr %562, i64 %564
  %566 = load i32, ptr %565, align 4, !tbaa !12
  %567 = load i32, ptr %15, align 4, !tbaa !12
  %568 = icmp eq i32 %566, %567
  br i1 %568, label %569, label %592

569:                                              ; preds = %561
  %570 = load ptr, ptr %21, align 8, !tbaa !5
  %571 = load i32, ptr %10, align 4, !tbaa !12
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds i32, ptr %570, i64 %572
  %574 = load i32, ptr %573, align 4, !tbaa !12
  %575 = load i32, ptr %35, align 4, !tbaa !12
  %576 = icmp sle i32 %574, %575
  br i1 %576, label %577, label %592

577:                                              ; preds = %569
  %578 = load ptr, ptr %32, align 8, !tbaa !5
  %579 = load i32, ptr %10, align 4, !tbaa !12
  %580 = load ptr, ptr %26, align 8, !tbaa !5
  %581 = load i32, ptr %10, align 4, !tbaa !12
  %582 = sext i32 %581 to i64
  %583 = getelementptr inbounds i32, ptr %580, i64 %582
  %584 = load i32, ptr %583, align 4, !tbaa !12
  %585 = load ptr, ptr %25, align 8, !tbaa !5
  %586 = load i32, ptr %10, align 4, !tbaa !12
  %587 = sext i32 %586 to i64
  %588 = getelementptr inbounds i32, ptr %585, i64 %587
  %589 = load i32, ptr %588, align 4, !tbaa !12
  %590 = sub nsw i32 %584, %589
  %591 = sitofp i32 %590 to float
  call void @libmetis__rpqUpdate(ptr noundef %578, i32 noundef %579, float noundef %591)
  br label %592

592:                                              ; preds = %577, %569, %561, %554
  %593 = load ptr, ptr %26, align 8, !tbaa !5
  %594 = load i32, ptr %10, align 4, !tbaa !12
  %595 = sext i32 %594 to i64
  %596 = getelementptr inbounds i32, ptr %593, i64 %595
  %597 = load i32, ptr %596, align 4, !tbaa !12
  %598 = icmp eq i32 %597, 0
  br i1 %598, label %599, label %659

599:                                              ; preds = %592
  %600 = load ptr, ptr %27, align 8, !tbaa !5
  %601 = load i32, ptr %10, align 4, !tbaa !12
  %602 = sext i32 %601 to i64
  %603 = getelementptr inbounds i32, ptr %600, i64 %602
  %604 = load i32, ptr %603, align 4, !tbaa !12
  %605 = icmp ne i32 %604, -1
  br i1 %605, label %606, label %659

606:                                              ; preds = %599
  br label %607

607:                                              ; preds = %606
  %608 = load ptr, ptr %27, align 8, !tbaa !5
  %609 = load i32, ptr %10, align 4, !tbaa !12
  %610 = sext i32 %609 to i64
  %611 = getelementptr inbounds i32, ptr %608, i64 %610
  %612 = load i32, ptr %611, align 4, !tbaa !12
  %613 = icmp ne i32 %612, -1
  br i1 %613, label %625, label %614

614:                                              ; preds = %607
  %615 = call i32 (ptr, ...) @printf(ptr noundef @.str.13, i32 noundef 260, ptr noundef @.str.2)
  %616 = load ptr, ptr %27, align 8, !tbaa !5
  %617 = load i32, ptr %10, align 4, !tbaa !12
  %618 = sext i32 %617 to i64
  %619 = getelementptr inbounds i32, ptr %616, i64 %618
  %620 = load i32, ptr %619, align 4, !tbaa !12
  %621 = icmp ne i32 %620, -1
  br i1 %621, label %622, label %623

622:                                              ; preds = %614
  br label %624

623:                                              ; preds = %614
  call void @__assert_fail(ptr noundef @.str.14, ptr noundef @.str.2, i32 noundef 260, ptr noundef @__PRETTY_FUNCTION__.libmetis__General2WayBalance) #6
  unreachable

624:                                              ; preds = %622
  br label %625

625:                                              ; preds = %624, %607
  %626 = load ptr, ptr %28, align 8, !tbaa !5
  %627 = load i32, ptr %13, align 4, !tbaa !12
  %628 = add nsw i32 %627, -1
  store i32 %628, ptr %13, align 4, !tbaa !12
  %629 = sext i32 %628 to i64
  %630 = getelementptr inbounds i32, ptr %626, i64 %629
  %631 = load i32, ptr %630, align 4, !tbaa !12
  %632 = load ptr, ptr %28, align 8, !tbaa !5
  %633 = load ptr, ptr %27, align 8, !tbaa !5
  %634 = load i32, ptr %10, align 4, !tbaa !12
  %635 = sext i32 %634 to i64
  %636 = getelementptr inbounds i32, ptr %633, i64 %635
  %637 = load i32, ptr %636, align 4, !tbaa !12
  %638 = sext i32 %637 to i64
  %639 = getelementptr inbounds i32, ptr %632, i64 %638
  store i32 %631, ptr %639, align 4, !tbaa !12
  %640 = load ptr, ptr %27, align 8, !tbaa !5
  %641 = load i32, ptr %10, align 4, !tbaa !12
  %642 = sext i32 %641 to i64
  %643 = getelementptr inbounds i32, ptr %640, i64 %642
  %644 = load i32, ptr %643, align 4, !tbaa !12
  %645 = load ptr, ptr %27, align 8, !tbaa !5
  %646 = load ptr, ptr %28, align 8, !tbaa !5
  %647 = load i32, ptr %13, align 4, !tbaa !12
  %648 = sext i32 %647 to i64
  %649 = getelementptr inbounds i32, ptr %646, i64 %648
  %650 = load i32, ptr %649, align 4, !tbaa !12
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds i32, ptr %645, i64 %651
  store i32 %644, ptr %652, align 4, !tbaa !12
  %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
  store i32 -1, ptr %656, align 4, !tbaa !12
  br label %657

657:                                              ; preds = %625
  br label %658

658:                                              ; preds = %657
  br label %707

659:                                              ; preds = %599, %592
  %660 = load ptr, ptr %26, 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 = icmp sgt i32 %664, 0
  br i1 %665, label %666, label %706

666:                                              ; preds = %659
  %667 = load ptr, ptr %27, align 8, !tbaa !5
  %668 = load i32, ptr %10, align 4, !tbaa !12
  %669 = sext i32 %668 to i64
  %670 = getelementptr inbounds i32, ptr %667, i64 %669
  %671 = load i32, ptr %670, align 4, !tbaa !12
  %672 = icmp eq i32 %671, -1
  br i1 %672, label %673, label %706

673:                                              ; preds = %666
  br label %674

674:                                              ; preds = %673
  %675 = load ptr, ptr %27, align 8, !tbaa !5
  %676 = load i32, ptr %10, align 4, !tbaa !12
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds i32, ptr %675, i64 %677
  %679 = load i32, ptr %678, align 4, !tbaa !12
  %680 = icmp eq i32 %679, -1
  br i1 %680, label %692, label %681

681:                                              ; preds = %674
  %682 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 262, ptr noundef @.str.2)
  %683 = load ptr, ptr %27, align 8, !tbaa !5
  %684 = load i32, ptr %10, align 4, !tbaa !12
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds i32, ptr %683, i64 %685
  %687 = load i32, ptr %686, align 4, !tbaa !12
  %688 = icmp eq i32 %687, -1
  br i1 %688, label %689, label %690

689:                                              ; preds = %681
  br label %691

690:                                              ; preds = %681
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.2, i32 noundef 262, ptr noundef @__PRETTY_FUNCTION__.libmetis__General2WayBalance) #6
  unreachable

691:                                              ; preds = %689
  br label %692

692:                                              ; preds = %691, %674
  %693 = load i32, ptr %10, align 4, !tbaa !12
  %694 = load ptr, ptr %28, align 8, !tbaa !5
  %695 = load i32, ptr %13, align 4, !tbaa !12
  %696 = sext i32 %695 to i64
  %697 = getelementptr inbounds i32, ptr %694, i64 %696
  store i32 %693, ptr %697, align 4, !tbaa !12
  %698 = load i32, ptr %13, align 4, !tbaa !12
  %699 = add nsw i32 %698, 1
  store i32 %699, ptr %13, align 4, !tbaa !12
  %700 = load ptr, ptr %27, align 8, !tbaa !5
  %701 = load i32, ptr %10, align 4, !tbaa !12
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds i32, ptr %700, i64 %702
  store i32 %698, ptr %703, align 4, !tbaa !12
  br label %704

704:                                              ; preds = %692
  br label %705

705:                                              ; preds = %704
  br label %706

706:                                              ; preds = %705, %666, %659
  br label %707

707:                                              ; preds = %706, %658
  br label %708

708:                                              ; preds = %707
  %709 = load i32, ptr %9, align 4, !tbaa !12
  %710 = add nsw i32 %709, 1
  store i32 %710, ptr %9, align 4, !tbaa !12
  br label %501, !llvm.loop !34

711:                                              ; preds = %501
  br label %712

712:                                              ; preds = %711
  %713 = load i32, ptr %14, align 4, !tbaa !12
  %714 = add nsw i32 %713, 1
  store i32 %714, ptr %14, align 4, !tbaa !12
  br label %238, !llvm.loop !35

715:                                              ; preds = %264, %246, %238
  %716 = load ptr, ptr %4, align 8, !tbaa !5
  %717 = getelementptr inbounds %struct.ctrl_t, ptr %716, i32 0, i32 2
  %718 = load i32, ptr %717, align 8, !tbaa !26
  %719 = and i32 %718, 8
  %720 = icmp ne i32 %719, 0
  br i1 %720, label %721, label %731

721:                                              ; preds = %715
  %722 = load i32, ptr %34, align 4, !tbaa !12
  %723 = load ptr, ptr %29, align 8, !tbaa !5
  %724 = getelementptr inbounds i32, ptr %723, i64 0
  %725 = load i32, ptr %724, align 4, !tbaa !12
  %726 = load ptr, ptr %29, align 8, !tbaa !5
  %727 = getelementptr inbounds i32, ptr %726, i64 1
  %728 = load i32, ptr %727, align 4, !tbaa !12
  %729 = load i32, ptr %13, align 4, !tbaa !12
  %730 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, i32 noundef %722, i32 noundef %725, i32 noundef %728, i32 noundef %729)
  br label %731

731:                                              ; preds = %721, %715
  %732 = load i32, ptr %34, align 4, !tbaa !12
  %733 = load ptr, ptr %5, align 8, !tbaa !5
  %734 = getelementptr inbounds %struct.graph_t, ptr %733, i32 0, i32 17
  store i32 %732, ptr %734, align 8, !tbaa !31
  %735 = load i32, ptr %13, align 4, !tbaa !12
  %736 = load ptr, ptr %5, align 8, !tbaa !5
  %737 = getelementptr inbounds %struct.graph_t, ptr %736, i32 0, i32 21
  store i32 %735, ptr %737, align 8, !tbaa !30
  %738 = load ptr, ptr %32, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %738)
  %739 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %739)
  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 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
@.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.12 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [48 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__General2WayBalance = external hidden unnamed_addr constant [65 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__General2WayBalance(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 210, 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 210, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__General2WayBalance) #7
  unreachable

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

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

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

75:                                               ; preds = %71, %69
  %76 = sdiv i32 %5, 5
  tail call void @libmetis__irandArrayPermute(i32 noundef %5, ptr noundef %27, i32 noundef %76, i32 noundef 1) #6
  %77 = icmp sgt i32 %5, 0
  br i1 %77, label %.lr.ph.preheader, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %75
  %78 = load i32, ptr %60, align 8, !tbaa !30
  %79 = getelementptr inbounds i8, ptr %1, i64 136
  %80 = load i32, ptr %79, align 8, !tbaa !29
  br label %._crit_edge255

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

.lr.ph:                                           ; preds = %.lr.ph.preheader, %98
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %98 ]
  %81 = getelementptr inbounds i32, ptr %27, i64 %indvars.iv
  %82 = load i32, ptr %81, align 4, !tbaa !22
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds i32, ptr %15, i64 %83
  %85 = load i32, ptr %84, align 4, !tbaa !22
  %86 = icmp eq i32 %85, %41
  br i1 %86, label %87, label %98

87:                                               ; preds = %.lr.ph
  %88 = getelementptr inbounds i32, ptr %9, i64 %83
  %89 = load i32, ptr %88, align 4, !tbaa !22
  %.not241 = icmp sgt i32 %89, %39
  br i1 %.not241, label %98, label %90

90:                                               ; preds = %87
  %91 = getelementptr inbounds i32, ptr %19, i64 %83
  %92 = load i32, ptr %91, align 4, !tbaa !22
  %93 = getelementptr inbounds i32, ptr %17, i64 %83
  %94 = load i32, ptr %93, align 4, !tbaa !22
  %95 = sub nsw i32 %92, %94
  %96 = sitofp i32 %95 to float
  %97 = tail call i32 @libmetis__rpqInsert(ptr noundef %57, i32 noundef %82, float noundef %96) #6
  br label %98

98:                                               ; preds = %.lr.ph, %87, %90
  %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 = %98
  %99 = load i32, ptr %60, align 8, !tbaa !30
  %100 = getelementptr inbounds i8, ptr %1, i64 136
  %101 = load i32, ptr %100, align 8, !tbaa !29
  %102 = zext i1 %not. to i64
  %103 = getelementptr inbounds i32, ptr %21, i64 %102
  br i1 %77, label %.lr.ph254, label %._crit_edge255

.lr.ph254:                                        ; preds = %._crit_edge
  %104 = getelementptr inbounds [2 x i32], ptr %4, i64 0, i64 %102
  %105 = zext i1 %40 to i64
  %106 = getelementptr inbounds i32, ptr %21, i64 %105
  %107 = getelementptr inbounds i8, ptr %21, i64 4
  br label %108

108:                                              ; preds = %.lr.ph254, %._crit_edge249
  %.0227252 = phi i32 [ %99, %.lr.ph254 ], [ %124, %._crit_edge249 ]
  %.0229251 = phi i32 [ %101, %.lr.ph254 ], [ %.3.lcssa, %._crit_edge249 ]
  %.0230250 = phi i32 [ 0, %.lr.ph254 ], [ %236, %._crit_edge249 ]
  %109 = tail call i32 @libmetis__rpqGetTop(ptr noundef %57) #6
  %110 = icmp eq i32 %109, -1
  br i1 %110, label %._crit_edge255, label %111

111:                                              ; preds = %108
  %112 = load i32, ptr %103, align 4, !tbaa !22
  %113 = sext i32 %109 to i64
  %114 = getelementptr inbounds i32, ptr %9, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !22
  %116 = add nsw i32 %115, %112
  %117 = load i32, ptr %104, align 4, !tbaa !22
  %118 = icmp sgt i32 %116, %117
  br i1 %118, label %._crit_edge255, label %119

119:                                              ; preds = %111
  %120 = getelementptr inbounds i32, ptr %19, i64 %113
  %121 = load i32, ptr %120, align 4, !tbaa !22
  %122 = getelementptr inbounds i32, ptr %17, i64 %113
  %123 = load i32, ptr %122, align 4, !tbaa !22
  %.neg = sub i32 %123, %121
  %124 = add i32 %.neg, %.0227252
  store i32 %116, ptr %103, align 4, !tbaa !22
  %125 = load i32, ptr %114, align 4, !tbaa !22
  %126 = load i32, ptr %106, align 4, !tbaa !22
  %127 = sub nsw i32 %126, %125
  store i32 %127, ptr %106, align 4, !tbaa !22
  %128 = getelementptr inbounds i32, ptr %15, i64 %113
  store i32 %42, ptr %128, align 4, !tbaa !22
  %129 = getelementptr inbounds i32, ptr %26, i64 %113
  store i32 %.0230250, ptr %129, align 4, !tbaa !22
  %130 = load i32, ptr %43, align 8, !tbaa !25
  %131 = and i32 %130, 32
  %.not236 = icmp eq i32 %131, 0
  br i1 %.not236, label %140, label %132

132:                                              ; preds = %119
  %133 = load i32, ptr %120, align 4, !tbaa !22
  %134 = load i32, ptr %122, align 4, !tbaa !22
  %135 = sub nsw i32 %133, %134
  %136 = load i32, ptr %114, align 4, !tbaa !22
  %137 = load i32, ptr %21, align 4, !tbaa !22
  %138 = load i32, ptr %107, align 4, !tbaa !22
  %139 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, i32 noundef %109, i32 noundef %41, i32 noundef %135, i32 noundef %136, i32 noundef %124, i32 noundef %137, i32 noundef %138)
  br label %140

140:                                              ; preds = %119, %132
  %141 = load i32, ptr %122, align 4, !tbaa !22
  %142 = load i32, ptr %120, align 4, !tbaa !22
  store i32 %142, ptr %122, align 4, !tbaa !22
  store i32 %141, ptr %120, align 4, !tbaa !22
  %143 = icmp eq i32 %141, 0
  br i1 %143, label %144, label %thread-pre-split

144:                                              ; preds = %140
  %145 = getelementptr inbounds i32, ptr %23, i64 %113
  %146 = load i32, ptr %145, align 4, !tbaa !22
  %.not237 = icmp eq i32 %146, -1
  br i1 %.not237, label %thread-pre-split.thread, label %147

147:                                              ; preds = %144
  %148 = getelementptr inbounds i32, ptr %7, i64 %113
  %149 = load i32, ptr %148, align 4, !tbaa !22
  %150 = getelementptr i8, ptr %148, i64 4
  %151 = load i32, ptr %150, align 4, !tbaa !22
  %152 = icmp slt i32 %149, %151
  br i1 %152, label %153, label %thread-pre-split.thread

153:                                              ; preds = %147
  %154 = add nsw i32 %.0229251, -1
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds i32, ptr %25, i64 %155
  %157 = load i32, ptr %156, align 4, !tbaa !22
  %158 = sext i32 %146 to i64
  %159 = getelementptr inbounds i32, ptr %25, i64 %158
  store i32 %157, ptr %159, align 4, !tbaa !22
  %160 = load i32, ptr %145, align 4, !tbaa !22
  %161 = sext i32 %157 to i64
  %162 = getelementptr inbounds i32, ptr %23, i64 %161
  store i32 %160, ptr %162, align 4, !tbaa !22
  store i32 -1, ptr %145, align 4, !tbaa !22
  %.pr.pre = load i32, ptr %120, align 4, !tbaa !22
  br label %thread-pre-split

thread-pre-split:                                 ; preds = %153, %140
  %163 = phi i32 [ %141, %140 ], [ %.pr.pre, %153 ]
  %.1 = phi i32 [ %.0229251, %140 ], [ %154, %153 ]
  %164 = icmp sgt i32 %163, 0
  br i1 %164, label %165, label %thread-pre-split.thread

165:                                              ; preds = %thread-pre-split
  %166 = getelementptr inbounds i32, ptr %23, i64 %113
  %167 = load i32, ptr %166, align 4, !tbaa !22
  %168 = icmp eq i32 %167, -1
  br i1 %168, label %169, label %thread-pre-split.thread

169:                                              ; preds = %165
  %170 = sext i32 %.1 to i64
  %171 = getelementptr inbounds i32, ptr %25, i64 %170
  store i32 %109, ptr %171, align 4, !tbaa !22
  %172 = add nsw i32 %.1, 1
  store i32 %.1, ptr %166, align 4, !tbaa !22
  br label %thread-pre-split.thread

thread-pre-split.thread:                          ; preds = %147, %144, %169, %165, %thread-pre-split
  %.2 = phi i32 [ %172, %169 ], [ %.1, %165 ], [ %.1, %thread-pre-split ], [ %.0229251, %144 ], [ %.0229251, %147 ]
  %173 = getelementptr inbounds i32, ptr %7, i64 %113
  %174 = load i32, ptr %173, align 4, !tbaa !22
  %175 = getelementptr i8, ptr %173, i64 4
  %176 = load i32, ptr %175, align 4, !tbaa !22
  %177 = icmp slt i32 %174, %176
  br i1 %177, label %.lr.ph248.preheader, label %._crit_edge249

.lr.ph248.preheader:                              ; preds = %thread-pre-split.thread
  %178 = sext i32 %174 to i64
  br label %.lr.ph248

.lr.ph248:                                        ; preds = %.lr.ph248.preheader, %.thread
  %indvars.iv265 = phi i64 [ %178, %.lr.ph248.preheader ], [ %indvars.iv.next266, %.thread ]
  %.3245 = phi i32 [ %.2, %.lr.ph248.preheader ], [ %.4, %.thread ]
  %179 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv265
  %180 = load i32, ptr %179, align 4, !tbaa !22
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i32, ptr %15, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !22
  %184 = icmp eq i32 %183, %42
  %185 = getelementptr inbounds i32, ptr %13, i64 %indvars.iv265
  %186 = load i32, ptr %185, align 4, !tbaa !22
  %187 = sub nsw i32 0, %186
  %188 = select i1 %184, i32 %186, i32 %187
  %189 = getelementptr inbounds i32, ptr %17, i64 %181
  %190 = load i32, ptr %189, align 4, !tbaa !22
  %191 = add nsw i32 %190, %188
  store i32 %191, ptr %189, align 4, !tbaa !22
  %192 = getelementptr inbounds i32, ptr %19, i64 %181
  %193 = load i32, ptr %192, align 4, !tbaa !22
  %194 = sub nsw i32 %193, %188
  store i32 %194, ptr %192, align 4, !tbaa !22
  %195 = getelementptr inbounds i32, ptr %26, i64 %181
  %196 = load i32, ptr %195, align 4, !tbaa !22
  %197 = icmp eq i32 %196, -1
  br i1 %197, label %198, label %thread-pre-split242

198:                                              ; preds = %.lr.ph248
  %199 = load i32, ptr %182, align 4, !tbaa !22
  %200 = icmp eq i32 %199, %41
  br i1 %200, label %201, label %thread-pre-split242

201:                                              ; preds = %198
  %202 = getelementptr inbounds i32, ptr %9, i64 %181
  %203 = load i32, ptr %202, align 4, !tbaa !22
  %.not238 = icmp sgt i32 %203, %39
  br i1 %.not238, label %thread-pre-split242, label %204

204:                                              ; preds = %201
  %205 = load i32, ptr %189, align 4, !tbaa !22
  %206 = sub nsw i32 %194, %205
  %207 = sitofp i32 %206 to float
  tail call void @libmetis__rpqUpdate(ptr noundef %57, i32 noundef %180, float noundef %207) #6
  %.pr243.pre = load i32, ptr %192, align 4, !tbaa !22
  br label %thread-pre-split242

thread-pre-split242:                              ; preds = %204, %201, %198, %.lr.ph248
  %208 = phi i32 [ %194, %.lr.ph248 ], [ %194, %198 ], [ %194, %201 ], [ %.pr243.pre, %204 ]
  %209 = icmp eq i32 %208, 0
  br i1 %209, label %210, label %223

210:                                              ; preds = %thread-pre-split242
  %211 = getelementptr inbounds i32, ptr %23, i64 %181
  %212 = load i32, ptr %211, align 4, !tbaa !22
  %.not239 = icmp eq i32 %212, -1
  br i1 %.not239, label %.thread, label %213

213:                                              ; preds = %210
  %214 = add nsw i32 %.3245, -1
  %215 = sext i32 %214 to i64
  %216 = getelementptr inbounds i32, ptr %25, i64 %215
  %217 = load i32, ptr %216, align 4, !tbaa !22
  %218 = sext i32 %212 to i64
  %219 = getelementptr inbounds i32, ptr %25, i64 %218
  store i32 %217, ptr %219, align 4, !tbaa !22
  %220 = load i32, ptr %211, align 4, !tbaa !22
  %221 = sext i32 %217 to i64
  %222 = getelementptr inbounds i32, ptr %23, i64 %221
  store i32 %220, ptr %222, align 4, !tbaa !22
  store i32 -1, ptr %211, align 4, !tbaa !22
  br label %.thread

223:                                              ; preds = %thread-pre-split242
  %224 = icmp sgt i32 %208, 0
  br i1 %224, label %225, label %.thread

225:                                              ; preds = %223
  %226 = getelementptr inbounds i32, ptr %23, i64 %181
  %227 = load i32, ptr %226, align 4, !tbaa !22
  %228 = icmp eq i32 %227, -1
  br i1 %228, label %229, label %.thread

229:                                              ; preds = %225
  %230 = sext i32 %.3245 to i64
  %231 = getelementptr inbounds i32, ptr %25, i64 %230
  store i32 %180, ptr %231, align 4, !tbaa !22
  %232 = add nsw i32 %.3245, 1
  store i32 %.3245, ptr %226, align 4, !tbaa !22
  br label %.thread

.thread:                                          ; preds = %210, %213, %229, %225, %223
  %.4 = phi i32 [ %214, %213 ], [ %232, %229 ], [ %.3245, %225 ], [ %.3245, %223 ], [ %.3245, %210 ]
  %indvars.iv.next266 = add nsw i64 %indvars.iv265, 1
  %233 = load i32, ptr %175, align 4, !tbaa !22
  %234 = sext i32 %233 to i64
  %235 = icmp slt i64 %indvars.iv.next266, %234
  br i1 %235, label %.lr.ph248, label %._crit_edge249, !llvm.loop !33

._crit_edge249:                                   ; preds = %.thread, %thread-pre-split.thread
  %.3.lcssa = phi i32 [ %.2, %thread-pre-split.thread ], [ %.4, %.thread ]
  %236 = add nuw nsw i32 %.0230250, 1
  %exitcond268.not = icmp eq i32 %236, %5
  br i1 %exitcond268.not, label %._crit_edge255, label %108, !llvm.loop !34

._crit_edge255:                                   ; preds = %._crit_edge249, %108, %111, %._crit_edge.thread, %._crit_edge
  %237 = phi ptr [ %100, %._crit_edge ], [ %79, %._crit_edge.thread ], [ %100, %111 ], [ %100, %108 ], [ %100, %._crit_edge249 ]
  %.0229.lcssa = phi i32 [ %101, %._crit_edge ], [ %80, %._crit_edge.thread ], [ %.3.lcssa, %._crit_edge249 ], [ %.0229251, %108 ], [ %.0229251, %111 ]
  %.0227.lcssa = phi i32 [ %99, %._crit_edge ], [ %78, %._crit_edge.thread ], [ %124, %._crit_edge249 ], [ %.0227252, %108 ], [ %.0227252, %111 ]
  %238 = load i32, ptr %43, align 8, !tbaa !25
  %239 = and i32 %238, 8
  %.not240 = icmp eq i32 %239, 0
  br i1 %.not240, label %245, label %240

240:                                              ; preds = %._crit_edge255
  %241 = load i32, ptr %21, align 4, !tbaa !22
  %242 = getelementptr inbounds i8, ptr %21, i64 4
  %243 = load i32, ptr %242, align 4, !tbaa !22
  %244 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, i32 noundef %.0227.lcssa, i32 noundef %241, i32 noundef %243, i32 noundef %.0229.lcssa)
  br label %245

245:                                              ; preds = %240, %._crit_edge255
  store i32 %.0227.lcssa, ptr %60, align 8, !tbaa !30
  store i32 %.0229.lcssa, ptr %237, 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 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