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

; 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 [86 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [135 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [52 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine = external hidden unnamed_addr constant [70 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [84 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [68 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [21 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @libmetis__FM_2WayCutRefine(ptr noundef %0, ptr noundef %1, ptr noundef %2, i32 noundef %3) #0 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %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 i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca [2 x ptr], align 16
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca [2 x i32], align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store i32 %3, ptr %8, align 4, !tbaa !9
  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 4, ptr %20) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.start.p0(i64 4, 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 8, ptr %33) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.start.p0(i64 16, ptr %36) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #5
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  call void @libmetis__wspacepush(ptr noundef %46)
  %47 = load ptr, ptr %6, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.graph_t, ptr %47, i32 0, i32 0
  %49 = load i32, ptr %48, align 8, !tbaa !11
  store i32 %49, ptr %14, align 4, !tbaa !9
  %50 = load ptr, ptr %6, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.graph_t, ptr %50, i32 0, i32 3
  %52 = load ptr, ptr %51, align 8, !tbaa !13
  store ptr %52, ptr %23, align 8, !tbaa !5
  %53 = load ptr, ptr %6, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.graph_t, ptr %53, i32 0, i32 4
  %55 = load ptr, ptr %54, align 8, !tbaa !14
  store ptr %55, ptr %24, align 8, !tbaa !5
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.graph_t, ptr %56, i32 0, i32 6
  %58 = load ptr, ptr %57, align 8, !tbaa !15
  store ptr %58, ptr %25, align 8, !tbaa !5
  %59 = load ptr, ptr %6, align 8, !tbaa !5
  %60 = getelementptr inbounds %struct.graph_t, ptr %59, i32 0, i32 7
  %61 = load ptr, ptr %60, align 8, !tbaa !16
  store ptr %61, ptr %26, align 8, !tbaa !5
  %62 = load ptr, ptr %6, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.graph_t, ptr %62, i32 0, i32 19
  %64 = load ptr, ptr %63, align 8, !tbaa !17
  store ptr %64, ptr %27, align 8, !tbaa !5
  %65 = load ptr, ptr %6, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.graph_t, ptr %65, i32 0, i32 24
  %67 = load ptr, ptr %66, align 8, !tbaa !18
  store ptr %67, ptr %28, align 8, !tbaa !5
  %68 = load ptr, ptr %6, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.graph_t, ptr %68, i32 0, i32 25
  %70 = load ptr, ptr %69, align 8, !tbaa !19
  store ptr %70, ptr %29, align 8, !tbaa !5
  %71 = load ptr, ptr %6, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.graph_t, ptr %71, i32 0, i32 20
  %73 = load ptr, ptr %72, align 8, !tbaa !20
  store ptr %73, ptr %32, align 8, !tbaa !5
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.graph_t, ptr %74, i32 0, i32 22
  %76 = load ptr, ptr %75, align 8, !tbaa !21
  store ptr %76, ptr %30, align 8, !tbaa !5
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.graph_t, ptr %77, i32 0, i32 23
  %79 = load ptr, ptr %78, align 8, !tbaa !22
  store ptr %79, ptr %31, align 8, !tbaa !5
  %80 = load ptr, ptr %5, align 8, !tbaa !5
  %81 = load i32, ptr %14, align 4, !tbaa !9
  %82 = call ptr @libmetis__iwspacemalloc(ptr noundef %80, i32 noundef %81)
  store ptr %82, ptr %33, align 8, !tbaa !5
  %83 = load ptr, ptr %5, align 8, !tbaa !5
  %84 = load i32, ptr %14, align 4, !tbaa !9
  %85 = call ptr @libmetis__iwspacemalloc(ptr noundef %83, i32 noundef %84)
  store ptr %85, ptr %34, align 8, !tbaa !5
  %86 = load ptr, ptr %5, align 8, !tbaa !5
  %87 = load i32, ptr %14, align 4, !tbaa !9
  %88 = call ptr @libmetis__iwspacemalloc(ptr noundef %86, i32 noundef %87)
  store ptr %88, ptr %35, align 8, !tbaa !5
  %89 = load ptr, ptr %6, 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 !9
  %94 = sitofp i32 %93 to float
  %95 = load ptr, ptr %7, align 8, !tbaa !5
  %96 = getelementptr inbounds float, ptr %95, i64 0
  %97 = load float, ptr %96, align 4, !tbaa !24
  %98 = fmul float %94, %97
  %99 = fptosi float %98 to i32
  %100 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 0
  store i32 %99, ptr %100, align 4, !tbaa !9
  %101 = load ptr, ptr %6, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.graph_t, ptr %101, i32 0, i32 8
  %103 = load ptr, ptr %102, align 8, !tbaa !23
  %104 = getelementptr inbounds i32, ptr %103, i64 0
  %105 = load i32, ptr %104, align 4, !tbaa !9
  %106 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 0
  %107 = load i32, ptr %106, align 4, !tbaa !9
  %108 = sub nsw i32 %105, %107
  %109 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 1
  store i32 %108, ptr %109, align 4, !tbaa !9
  %110 = load i32, ptr %14, align 4, !tbaa !9
  %111 = sitofp i32 %110 to double
  %112 = fmul double 1.000000e-02, %111
  %113 = fcmp oge double %112, 1.500000e+01
  br i1 %113, label %114, label %118

114:                                              ; preds = %4
  %115 = load i32, ptr %14, align 4, !tbaa !9
  %116 = sitofp i32 %115 to double
  %117 = fmul double 1.000000e-02, %116
  br label %119

118:                                              ; preds = %4
  br label %119

119:                                              ; preds = %118, %114
  %120 = phi double [ %117, %114 ], [ 1.500000e+01, %118 ]
  %121 = fcmp oge double %120, 1.000000e+02
  br i1 %121, label %122, label %123

122:                                              ; preds = %119
  br label %135

123:                                              ; preds = %119
  %124 = load i32, ptr %14, align 4, !tbaa !9
  %125 = sitofp i32 %124 to double
  %126 = fmul double 1.000000e-02, %125
  %127 = fcmp oge double %126, 1.500000e+01
  br i1 %127, label %128, label %132

128:                                              ; preds = %123
  %129 = load i32, ptr %14, align 4, !tbaa !9
  %130 = sitofp i32 %129 to double
  %131 = fmul double 1.000000e-02, %130
  br label %133

132:                                              ; preds = %123
  br label %133

133:                                              ; preds = %132, %128
  %134 = phi double [ %131, %128 ], [ 1.500000e+01, %132 ]
  br label %135

135:                                              ; preds = %133, %122
  %136 = phi double [ 1.000000e+02, %122 ], [ %134, %133 ]
  %137 = fptosi double %136 to i32
  store i32 %137, ptr %21, align 4, !tbaa !9
  %138 = load ptr, ptr %32, align 8, !tbaa !5
  %139 = getelementptr inbounds i32, ptr %138, i64 0
  %140 = load i32, ptr %139, align 4, !tbaa !9
  %141 = load ptr, ptr %32, align 8, !tbaa !5
  %142 = getelementptr inbounds i32, ptr %141, i64 1
  %143 = load i32, ptr %142, align 4, !tbaa !9
  %144 = add nsw i32 %140, %143
  %145 = sdiv i32 %144, 20
  %146 = load ptr, ptr %32, align 8, !tbaa !5
  %147 = getelementptr inbounds i32, ptr %146, i64 0
  %148 = load i32, ptr %147, align 4, !tbaa !9
  %149 = load ptr, ptr %32, align 8, !tbaa !5
  %150 = getelementptr inbounds i32, ptr %149, i64 1
  %151 = load i32, ptr %150, align 4, !tbaa !9
  %152 = add nsw i32 %148, %151
  %153 = mul nsw i32 2, %152
  %154 = load i32, ptr %14, align 4, !tbaa !9
  %155 = sdiv i32 %153, %154
  %156 = icmp sge i32 %145, %155
  br i1 %156, label %157, label %168

157:                                              ; preds = %135
  %158 = load ptr, ptr %32, align 8, !tbaa !5
  %159 = getelementptr inbounds i32, ptr %158, i64 0
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = load ptr, ptr %32, align 8, !tbaa !5
  %162 = getelementptr inbounds i32, ptr %161, i64 1
  %163 = load i32, ptr %162, align 4, !tbaa !9
  %164 = add nsw i32 %160, %163
  %165 = mul nsw i32 2, %164
  %166 = load i32, ptr %14, align 4, !tbaa !9
  %167 = sdiv i32 %165, %166
  br label %177

168:                                              ; preds = %135
  %169 = load ptr, ptr %32, align 8, !tbaa !5
  %170 = getelementptr inbounds i32, ptr %169, i64 0
  %171 = load i32, ptr %170, align 4, !tbaa !9
  %172 = load ptr, ptr %32, align 8, !tbaa !5
  %173 = getelementptr inbounds i32, ptr %172, i64 1
  %174 = load i32, ptr %173, align 4, !tbaa !9
  %175 = add nsw i32 %171, %174
  %176 = sdiv i32 %175, 20
  br label %177

177:                                              ; preds = %168, %157
  %178 = phi i32 [ %167, %157 ], [ %176, %168 ]
  store i32 %178, ptr %44, align 4, !tbaa !9
  %179 = load i32, ptr %14, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = call ptr @libmetis__rpqCreate(i64 noundef %180)
  %182 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 0
  store ptr %181, ptr %182, align 16, !tbaa !5
  %183 = load i32, ptr %14, align 4, !tbaa !9
  %184 = sext i32 %183 to i64
  %185 = call ptr @libmetis__rpqCreate(i64 noundef %184)
  %186 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 1
  store ptr %185, ptr %186, align 8, !tbaa !5
  %187 = load ptr, ptr %5, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.ctrl_t, ptr %187, i32 0, i32 2
  %189 = load i32, ptr %188, align 8, !tbaa !26
  %190 = and i32 %189, 8
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %196

192:                                              ; preds = %177
  %193 = load ptr, ptr %5, align 8, !tbaa !5
  %194 = load ptr, ptr %6, align 8, !tbaa !5
  %195 = load ptr, ptr %7, align 8, !tbaa !5
  call void @libmetis__Print2WayRefineStats(ptr noundef %193, ptr noundef %194, ptr noundef %195, float noundef 0.000000e+00, i32 noundef -2)
  br label %196

196:                                              ; preds = %192, %177
  %197 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 0
  %198 = load i32, ptr %197, align 4, !tbaa !9
  %199 = load ptr, ptr %32, align 8, !tbaa !5
  %200 = getelementptr inbounds i32, ptr %199, i64 0
  %201 = load i32, ptr %200, align 4, !tbaa !9
  %202 = sub nsw i32 %198, %201
  %203 = call i32 @llvm.abs.i32(i32 %202, i1 true)
  store i32 %203, ptr %40, align 4, !tbaa !9
  %204 = load i32, ptr %14, align 4, !tbaa !9
  %205 = sext i32 %204 to i64
  %206 = load ptr, ptr %33, align 8, !tbaa !5
  %207 = call ptr @libmetis__iset(i64 noundef %205, i32 noundef -1, ptr noundef %206)
  store i32 0, ptr %19, align 4, !tbaa !9
  br label %208

208:                                              ; preds = %1384, %196
  %209 = load i32, ptr %19, align 4, !tbaa !9
  %210 = load i32, ptr %8, align 4, !tbaa !9
  %211 = icmp slt i32 %209, %210
  br i1 %211, label %212, label %1387

212:                                              ; preds = %208
  %213 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 0
  %214 = load ptr, ptr %213, align 16, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %214)
  %215 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 1
  %216 = load ptr, ptr %215, align 8, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %216)
  store i32 -1, ptr %43, align 4, !tbaa !9
  %217 = load ptr, ptr %6, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.graph_t, ptr %217, i32 0, i32 17
  %219 = load i32, ptr %218, align 8, !tbaa !30
  store i32 %219, ptr %41, align 4, !tbaa !9
  store i32 %219, ptr %38, align 4, !tbaa !9
  store i32 %219, ptr %42, align 4, !tbaa !9
  %220 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 0
  %221 = load i32, ptr %220, align 4, !tbaa !9
  %222 = load ptr, ptr %32, align 8, !tbaa !5
  %223 = getelementptr inbounds i32, ptr %222, i64 0
  %224 = load i32, ptr %223, align 4, !tbaa !9
  %225 = sub nsw i32 %221, %224
  %226 = call i32 @llvm.abs.i32(i32 %225, i1 true)
  store i32 %226, ptr %39, align 4, !tbaa !9
  %227 = load ptr, ptr %6, align 8, !tbaa !5
  %228 = load ptr, ptr %27, align 8, !tbaa !5
  %229 = call i32 @libmetis__ComputeCut(ptr noundef %227, ptr noundef %228)
  %230 = load ptr, ptr %6, align 8, !tbaa !5
  %231 = getelementptr inbounds %struct.graph_t, ptr %230, i32 0, i32 17
  %232 = load i32, ptr %231, align 8, !tbaa !30
  %233 = icmp eq i32 %229, %232
  br i1 %233, label %246, label %234

234:                                              ; preds = %212
  %235 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef 78, ptr noundef @.str.1)
  %236 = load ptr, ptr %6, align 8, !tbaa !5
  %237 = load ptr, ptr %27, align 8, !tbaa !5
  %238 = call i32 @libmetis__ComputeCut(ptr noundef %236, ptr noundef %237)
  %239 = load ptr, ptr %6, align 8, !tbaa !5
  %240 = getelementptr inbounds %struct.graph_t, ptr %239, i32 0, i32 17
  %241 = load i32, ptr %240, align 8, !tbaa !30
  %242 = icmp eq i32 %238, %241
  br i1 %242, label %243, label %244

243:                                              ; preds = %234
  br label %245

244:                                              ; preds = %234
  call void @__assert_fail(ptr noundef @.str.2, ptr noundef @.str.1, i32 noundef 78, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

245:                                              ; preds = %243
  br label %246

246:                                              ; preds = %245, %212
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  %248 = call i32 @libmetis__CheckBnd(ptr noundef %247)
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %258, label %250

250:                                              ; preds = %246
  %251 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef 79, ptr noundef @.str.1)
  %252 = load ptr, ptr %6, align 8, !tbaa !5
  %253 = call i32 @libmetis__CheckBnd(ptr noundef %252)
  %254 = icmp ne i32 %253, 0
  br i1 %254, label %255, label %256

255:                                              ; preds = %250
  br label %257

256:                                              ; preds = %250
  call void @__assert_fail(ptr noundef @.str.4, ptr noundef @.str.1, i32 noundef 79, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

257:                                              ; preds = %255
  br label %258

258:                                              ; preds = %257, %246
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.graph_t, ptr %259, i32 0, i32 21
  %261 = load i32, ptr %260, align 8, !tbaa !31
  store i32 %261, ptr %15, align 4, !tbaa !9
  %262 = load i32, ptr %15, align 4, !tbaa !9
  %263 = load ptr, ptr %35, align 8, !tbaa !5
  %264 = load i32, ptr %15, align 4, !tbaa !9
  call void @libmetis__irandArrayPermute(i32 noundef %262, ptr noundef %263, i32 noundef %264, i32 noundef 1)
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %265

265:                                              ; preds = %387, %258
  %266 = load i32, ptr %10, align 4, !tbaa !9
  %267 = load i32, ptr %15, align 4, !tbaa !9
  %268 = icmp slt i32 %266, %267
  br i1 %268, label %269, label %390

269:                                              ; preds = %265
  %270 = load ptr, ptr %35, align 8, !tbaa !5
  %271 = load i32, ptr %10, align 4, !tbaa !9
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds i32, ptr %270, i64 %272
  %274 = load i32, ptr %273, align 4, !tbaa !9
  store i32 %274, ptr %9, align 4, !tbaa !9
  %275 = load ptr, ptr %29, align 8, !tbaa !5
  %276 = load ptr, ptr %31, align 8, !tbaa !5
  %277 = load i32, ptr %9, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds i32, ptr %276, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !9
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds i32, ptr %275, i64 %281
  %283 = load i32, ptr %282, align 4, !tbaa !9
  %284 = icmp sgt i32 %283, 0
  br i1 %284, label %322, label %285

285:                                              ; preds = %269
  %286 = load ptr, ptr %28, align 8, !tbaa !5
  %287 = load ptr, ptr %31, align 8, !tbaa !5
  %288 = load i32, ptr %9, align 4, !tbaa !9
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds i32, ptr %287, i64 %289
  %291 = load i32, ptr %290, align 4, !tbaa !9
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds i32, ptr %286, i64 %292
  %294 = load i32, ptr %293, align 4, !tbaa !9
  %295 = icmp eq i32 %294, 0
  br i1 %295, label %322, label %296

296:                                              ; preds = %285
  %297 = call i32 (ptr, ...) @printf(ptr noundef @.str.5, i32 noundef 86, ptr noundef @.str.1)
  %298 = load ptr, ptr %29, align 8, !tbaa !5
  %299 = load ptr, ptr %31, align 8, !tbaa !5
  %300 = load i32, ptr %9, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i32, ptr %299, i64 %301
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = sext i32 %303 to i64
  %305 = getelementptr inbounds i32, ptr %298, i64 %304
  %306 = load i32, ptr %305, align 4, !tbaa !9
  %307 = icmp sgt i32 %306, 0
  br i1 %307, label %319, label %308

308:                                              ; preds = %296
  %309 = load ptr, ptr %28, align 8, !tbaa !5
  %310 = load ptr, ptr %31, align 8, !tbaa !5
  %311 = load i32, ptr %9, align 4, !tbaa !9
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds i32, ptr %310, i64 %312
  %314 = load i32, ptr %313, align 4, !tbaa !9
  %315 = sext i32 %314 to i64
  %316 = getelementptr inbounds i32, ptr %309, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !9
  %318 = icmp eq i32 %317, 0
  br i1 %318, label %319, label %320

319:                                              ; preds = %308, %296
  br label %321

320:                                              ; preds = %308
  call void @__assert_fail(ptr noundef @.str.6, ptr noundef @.str.1, i32 noundef 86, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

321:                                              ; preds = %319
  br label %322

322:                                              ; preds = %321, %285, %269
  %323 = load ptr, ptr %30, align 8, !tbaa !5
  %324 = load ptr, ptr %31, align 8, !tbaa !5
  %325 = load i32, ptr %9, align 4, !tbaa !9
  %326 = sext i32 %325 to i64
  %327 = getelementptr inbounds i32, ptr %324, i64 %326
  %328 = load i32, ptr %327, align 4, !tbaa !9
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds i32, ptr %323, i64 %329
  %331 = load i32, ptr %330, align 4, !tbaa !9
  %332 = icmp ne i32 %331, -1
  br i1 %332, label %348, label %333

333:                                              ; preds = %322
  %334 = call i32 (ptr, ...) @printf(ptr noundef @.str.7, i32 noundef 87, ptr noundef @.str.1)
  %335 = load ptr, ptr %30, align 8, !tbaa !5
  %336 = load ptr, ptr %31, align 8, !tbaa !5
  %337 = load i32, ptr %9, align 4, !tbaa !9
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds i32, ptr %336, i64 %338
  %340 = load i32, ptr %339, align 4, !tbaa !9
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds i32, ptr %335, i64 %341
  %343 = load i32, ptr %342, align 4, !tbaa !9
  %344 = icmp ne i32 %343, -1
  br i1 %344, label %345, label %346

345:                                              ; preds = %333
  br label %347

346:                                              ; preds = %333
  call void @__assert_fail(ptr noundef @.str.8, ptr noundef @.str.1, i32 noundef 87, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

347:                                              ; preds = %345
  br label %348

348:                                              ; preds = %347, %322
  %349 = load ptr, ptr %27, align 8, !tbaa !5
  %350 = load ptr, ptr %31, align 8, !tbaa !5
  %351 = load i32, ptr %9, align 4, !tbaa !9
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds i32, ptr %350, i64 %352
  %354 = load i32, ptr %353, align 4, !tbaa !9
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds i32, ptr %349, i64 %355
  %357 = load i32, ptr %356, align 4, !tbaa !9
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 %358
  %360 = load ptr, ptr %359, align 8, !tbaa !5
  %361 = load ptr, ptr %31, align 8, !tbaa !5
  %362 = load i32, ptr %9, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds i32, ptr %361, i64 %363
  %365 = load i32, ptr %364, align 4, !tbaa !9
  %366 = load ptr, ptr %29, align 8, !tbaa !5
  %367 = load ptr, ptr %31, align 8, !tbaa !5
  %368 = load i32, ptr %9, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds i32, ptr %367, i64 %369
  %371 = load i32, ptr %370, align 4, !tbaa !9
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds i32, ptr %366, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !9
  %375 = load ptr, ptr %28, align 8, !tbaa !5
  %376 = load ptr, ptr %31, align 8, !tbaa !5
  %377 = load i32, ptr %9, align 4, !tbaa !9
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds i32, ptr %376, i64 %378
  %380 = load i32, ptr %379, align 4, !tbaa !9
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds i32, ptr %375, i64 %381
  %383 = load i32, ptr %382, align 4, !tbaa !9
  %384 = sub nsw i32 %374, %383
  %385 = sitofp i32 %384 to float
  %386 = call i32 @libmetis__rpqInsert(ptr noundef %360, i32 noundef %365, float noundef %385)
  br label %387

387:                                              ; preds = %348
  %388 = load i32, ptr %10, align 4, !tbaa !9
  %389 = add nsw i32 %388, 1
  store i32 %389, ptr %10, align 4, !tbaa !9
  br label %265, !llvm.loop !32

390:                                              ; preds = %265
  store i32 0, ptr %16, align 4, !tbaa !9
  br label %391

391:                                              ; preds = %957, %390
  %392 = load i32, ptr %16, align 4, !tbaa !9
  %393 = load i32, ptr %14, align 4, !tbaa !9
  %394 = icmp slt i32 %392, %393
  br i1 %394, label %395, label %960

395:                                              ; preds = %391
  %396 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 0
  %397 = load i32, ptr %396, align 4, !tbaa !9
  %398 = load ptr, ptr %32, align 8, !tbaa !5
  %399 = getelementptr inbounds i32, ptr %398, i64 0
  %400 = load i32, ptr %399, align 4, !tbaa !9
  %401 = sub nsw i32 %397, %400
  %402 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 1
  %403 = load i32, ptr %402, align 4, !tbaa !9
  %404 = load ptr, ptr %32, align 8, !tbaa !5
  %405 = getelementptr inbounds i32, ptr %404, i64 1
  %406 = load i32, ptr %405, align 4, !tbaa !9
  %407 = sub nsw i32 %403, %406
  %408 = icmp slt i32 %401, %407
  %409 = zext i1 %408 to i64
  %410 = select i1 %408, i32 0, i32 1
  store i32 %410, ptr %17, align 4, !tbaa !9
  %411 = load i32, ptr %17, align 4, !tbaa !9
  %412 = add nsw i32 %411, 1
  %413 = srem i32 %412, 2
  store i32 %413, ptr %18, align 4, !tbaa !9
  %414 = load i32, ptr %17, align 4, !tbaa !9
  %415 = sext i32 %414 to i64
  %416 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 %415
  %417 = load ptr, ptr %416, align 8, !tbaa !5
  %418 = call i32 @libmetis__rpqGetTop(ptr noundef %417)
  store i32 %418, ptr %37, align 4, !tbaa !9
  %419 = icmp eq i32 %418, -1
  br i1 %419, label %420, label %421

420:                                              ; preds = %395
  br label %960

421:                                              ; preds = %395
  %422 = load ptr, ptr %30, align 8, !tbaa !5
  %423 = load i32, ptr %37, align 4, !tbaa !9
  %424 = sext i32 %423 to i64
  %425 = getelementptr inbounds i32, ptr %422, i64 %424
  %426 = load i32, ptr %425, align 4, !tbaa !9
  %427 = icmp ne i32 %426, -1
  br i1 %427, label %439, label %428

428:                                              ; preds = %421
  %429 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 97, ptr noundef @.str.1)
  %430 = load ptr, ptr %30, align 8, !tbaa !5
  %431 = load i32, ptr %37, align 4, !tbaa !9
  %432 = sext i32 %431 to i64
  %433 = getelementptr inbounds i32, ptr %430, i64 %432
  %434 = load i32, ptr %433, align 4, !tbaa !9
  %435 = icmp ne i32 %434, -1
  br i1 %435, label %436, label %437

436:                                              ; preds = %428
  br label %438

437:                                              ; preds = %428
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 97, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

438:                                              ; preds = %436
  br label %439

439:                                              ; preds = %438, %421
  %440 = load ptr, ptr %29, align 8, !tbaa !5
  %441 = load i32, ptr %37, align 4, !tbaa !9
  %442 = sext i32 %441 to i64
  %443 = getelementptr inbounds i32, ptr %440, i64 %442
  %444 = load i32, ptr %443, align 4, !tbaa !9
  %445 = load ptr, ptr %28, align 8, !tbaa !5
  %446 = load i32, ptr %37, align 4, !tbaa !9
  %447 = sext i32 %446 to i64
  %448 = getelementptr inbounds i32, ptr %445, i64 %447
  %449 = load i32, ptr %448, align 4, !tbaa !9
  %450 = sub nsw i32 %444, %449
  %451 = load i32, ptr %42, align 4, !tbaa !9
  %452 = sub nsw i32 %451, %450
  store i32 %452, ptr %42, align 4, !tbaa !9
  br label %453

453:                                              ; preds = %439
  %454 = load ptr, ptr %24, align 8, !tbaa !5
  %455 = load i32, ptr %37, align 4, !tbaa !9
  %456 = sext i32 %455 to i64
  %457 = getelementptr inbounds i32, ptr %454, i64 %456
  %458 = load i32, ptr %457, align 4, !tbaa !9
  %459 = load ptr, ptr %32, align 8, !tbaa !5
  %460 = load i32, ptr %18, align 4, !tbaa !9
  %461 = sext i32 %460 to i64
  %462 = getelementptr inbounds i32, ptr %459, i64 %461
  %463 = load i32, ptr %462, align 4, !tbaa !9
  %464 = add nsw i32 %463, %458
  store i32 %464, ptr %462, align 4, !tbaa !9
  %465 = load ptr, ptr %24, align 8, !tbaa !5
  %466 = load i32, ptr %37, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds i32, ptr %465, i64 %467
  %469 = load i32, ptr %468, align 4, !tbaa !9
  %470 = load ptr, ptr %32, align 8, !tbaa !5
  %471 = load i32, ptr %17, align 4, !tbaa !9
  %472 = sext i32 %471 to i64
  %473 = getelementptr inbounds i32, ptr %470, i64 %472
  %474 = load i32, ptr %473, align 4, !tbaa !9
  %475 = sub nsw i32 %474, %469
  store i32 %475, ptr %473, align 4, !tbaa !9
  br label %476

476:                                              ; preds = %453
  br label %477

477:                                              ; preds = %476
  %478 = load i32, ptr %42, align 4, !tbaa !9
  %479 = load i32, ptr %38, align 4, !tbaa !9
  %480 = icmp slt i32 %478, %479
  br i1 %480, label %481, label %493

481:                                              ; preds = %477
  %482 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 0
  %483 = load i32, ptr %482, align 4, !tbaa !9
  %484 = load ptr, ptr %32, align 8, !tbaa !5
  %485 = getelementptr inbounds i32, ptr %484, i64 0
  %486 = load i32, ptr %485, align 4, !tbaa !9
  %487 = sub nsw i32 %483, %486
  %488 = call i32 @llvm.abs.i32(i32 %487, i1 true)
  %489 = load i32, ptr %40, align 4, !tbaa !9
  %490 = load i32, ptr %44, align 4, !tbaa !9
  %491 = add nsw i32 %489, %490
  %492 = icmp sle i32 %488, %491
  br i1 %492, label %507, label %493

493:                                              ; preds = %481, %477
  %494 = load i32, ptr %42, align 4, !tbaa !9
  %495 = load i32, ptr %38, align 4, !tbaa !9
  %496 = icmp eq i32 %494, %495
  br i1 %496, label %497, label %517

497:                                              ; preds = %493
  %498 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 0
  %499 = load i32, ptr %498, align 4, !tbaa !9
  %500 = load ptr, ptr %32, align 8, !tbaa !5
  %501 = getelementptr inbounds i32, ptr %500, i64 0
  %502 = load i32, ptr %501, align 4, !tbaa !9
  %503 = sub nsw i32 %499, %502
  %504 = call i32 @llvm.abs.i32(i32 %503, i1 true)
  %505 = load i32, ptr %39, align 4, !tbaa !9
  %506 = icmp slt i32 %504, %505
  br i1 %506, label %507, label %517

507:                                              ; preds = %497, %481
  %508 = load i32, ptr %42, align 4, !tbaa !9
  store i32 %508, ptr %38, align 4, !tbaa !9
  %509 = getelementptr inbounds [2 x i32], ptr %45, i64 0, i64 0
  %510 = load i32, ptr %509, align 4, !tbaa !9
  %511 = load ptr, ptr %32, align 8, !tbaa !5
  %512 = getelementptr inbounds i32, ptr %511, i64 0
  %513 = load i32, ptr %512, align 4, !tbaa !9
  %514 = sub nsw i32 %510, %513
  %515 = call i32 @llvm.abs.i32(i32 %514, i1 true)
  store i32 %515, ptr %39, align 4, !tbaa !9
  %516 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %516, ptr %43, align 4, !tbaa !9
  br label %563

517:                                              ; preds = %497, %493
  %518 = load i32, ptr %16, align 4, !tbaa !9
  %519 = load i32, ptr %43, align 4, !tbaa !9
  %520 = sub nsw i32 %518, %519
  %521 = load i32, ptr %21, align 4, !tbaa !9
  %522 = icmp sgt i32 %520, %521
  br i1 %522, label %523, label %562

523:                                              ; preds = %517
  %524 = load ptr, ptr %29, align 8, !tbaa !5
  %525 = load i32, ptr %37, align 4, !tbaa !9
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds i32, ptr %524, i64 %526
  %528 = load i32, ptr %527, align 4, !tbaa !9
  %529 = load ptr, ptr %28, align 8, !tbaa !5
  %530 = load i32, ptr %37, align 4, !tbaa !9
  %531 = sext i32 %530 to i64
  %532 = getelementptr inbounds i32, ptr %529, i64 %531
  %533 = load i32, ptr %532, align 4, !tbaa !9
  %534 = sub nsw i32 %528, %533
  %535 = load i32, ptr %42, align 4, !tbaa !9
  %536 = add nsw i32 %535, %534
  store i32 %536, ptr %42, align 4, !tbaa !9
  br label %537

537:                                              ; preds = %523
  %538 = load ptr, ptr %24, align 8, !tbaa !5
  %539 = load i32, ptr %37, align 4, !tbaa !9
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds i32, ptr %538, i64 %540
  %542 = load i32, ptr %541, align 4, !tbaa !9
  %543 = load ptr, ptr %32, align 8, !tbaa !5
  %544 = load i32, ptr %17, align 4, !tbaa !9
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds i32, ptr %543, i64 %545
  %547 = load i32, ptr %546, align 4, !tbaa !9
  %548 = add nsw i32 %547, %542
  store i32 %548, ptr %546, align 4, !tbaa !9
  %549 = load ptr, ptr %24, align 8, !tbaa !5
  %550 = load i32, ptr %37, align 4, !tbaa !9
  %551 = sext i32 %550 to i64
  %552 = getelementptr inbounds i32, ptr %549, i64 %551
  %553 = load i32, ptr %552, align 4, !tbaa !9
  %554 = load ptr, ptr %32, align 8, !tbaa !5
  %555 = load i32, ptr %18, align 4, !tbaa !9
  %556 = sext i32 %555 to i64
  %557 = getelementptr inbounds i32, ptr %554, i64 %556
  %558 = load i32, ptr %557, align 4, !tbaa !9
  %559 = sub nsw i32 %558, %553
  store i32 %559, ptr %557, align 4, !tbaa !9
  br label %560

560:                                              ; preds = %537
  br label %561

561:                                              ; preds = %560
  br label %960

562:                                              ; preds = %517
  br label %563

563:                                              ; preds = %562, %507
  %564 = load i32, ptr %18, align 4, !tbaa !9
  %565 = load ptr, ptr %27, align 8, !tbaa !5
  %566 = load i32, ptr %37, align 4, !tbaa !9
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds i32, ptr %565, i64 %567
  store i32 %564, ptr %568, align 4, !tbaa !9
  %569 = load i32, ptr %16, align 4, !tbaa !9
  %570 = load ptr, ptr %33, align 8, !tbaa !5
  %571 = load i32, ptr %37, align 4, !tbaa !9
  %572 = sext i32 %571 to i64
  %573 = getelementptr inbounds i32, ptr %570, i64 %572
  store i32 %569, ptr %573, align 4, !tbaa !9
  %574 = load i32, ptr %37, align 4, !tbaa !9
  %575 = load ptr, ptr %34, align 8, !tbaa !5
  %576 = load i32, ptr %16, align 4, !tbaa !9
  %577 = sext i32 %576 to i64
  %578 = getelementptr inbounds i32, ptr %575, i64 %577
  store i32 %574, ptr %578, align 4, !tbaa !9
  %579 = load ptr, ptr %5, align 8, !tbaa !5
  %580 = getelementptr inbounds %struct.ctrl_t, ptr %579, i32 0, i32 2
  %581 = load i32, ptr %580, align 8, !tbaa !26
  %582 = and i32 %581, 32
  %583 = icmp ne i32 %582, 0
  br i1 %583, label %584, label %611

584:                                              ; preds = %563
  %585 = load i32, ptr %37, align 4, !tbaa !9
  %586 = load i32, ptr %17, align 4, !tbaa !9
  %587 = load ptr, ptr %29, align 8, !tbaa !5
  %588 = load i32, ptr %37, align 4, !tbaa !9
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds i32, ptr %587, i64 %589
  %591 = load i32, ptr %590, align 4, !tbaa !9
  %592 = load ptr, ptr %28, align 8, !tbaa !5
  %593 = load i32, ptr %37, align 4, !tbaa !9
  %594 = sext i32 %593 to i64
  %595 = getelementptr inbounds i32, ptr %592, i64 %594
  %596 = load i32, ptr %595, align 4, !tbaa !9
  %597 = sub nsw i32 %591, %596
  %598 = load ptr, ptr %24, align 8, !tbaa !5
  %599 = load i32, ptr %37, align 4, !tbaa !9
  %600 = sext i32 %599 to i64
  %601 = getelementptr inbounds i32, ptr %598, i64 %600
  %602 = load i32, ptr %601, align 4, !tbaa !9
  %603 = load i32, ptr %42, align 4, !tbaa !9
  %604 = load ptr, ptr %32, align 8, !tbaa !5
  %605 = getelementptr inbounds i32, ptr %604, i64 0
  %606 = load i32, ptr %605, align 4, !tbaa !9
  %607 = load ptr, ptr %32, align 8, !tbaa !5
  %608 = getelementptr inbounds i32, ptr %607, i64 1
  %609 = load i32, ptr %608, align 4, !tbaa !9
  %610 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %585, i32 noundef %586, i32 noundef %597, i32 noundef %602, i32 noundef %603, i32 noundef %606, i32 noundef %609)
  br label %611

611:                                              ; preds = %584, %563
  br label %612

612:                                              ; preds = %611
  %613 = load ptr, ptr %28, align 8, !tbaa !5
  %614 = load i32, ptr %37, align 4, !tbaa !9
  %615 = sext i32 %614 to i64
  %616 = getelementptr inbounds i32, ptr %613, i64 %615
  %617 = load i32, ptr %616, align 4, !tbaa !9
  store i32 %617, ptr %22, align 4, !tbaa !9
  %618 = load ptr, ptr %29, align 8, !tbaa !5
  %619 = load i32, ptr %37, align 4, !tbaa !9
  %620 = sext i32 %619 to i64
  %621 = getelementptr inbounds i32, ptr %618, i64 %620
  %622 = load i32, ptr %621, align 4, !tbaa !9
  %623 = load ptr, ptr %28, align 8, !tbaa !5
  %624 = load i32, ptr %37, align 4, !tbaa !9
  %625 = sext i32 %624 to i64
  %626 = getelementptr inbounds i32, ptr %623, i64 %625
  store i32 %622, ptr %626, align 4, !tbaa !9
  %627 = load i32, ptr %22, align 4, !tbaa !9
  %628 = load ptr, ptr %29, align 8, !tbaa !5
  %629 = load i32, ptr %37, align 4, !tbaa !9
  %630 = sext i32 %629 to i64
  %631 = getelementptr inbounds i32, ptr %628, i64 %630
  store i32 %627, ptr %631, align 4, !tbaa !9
  br label %632

632:                                              ; preds = %612
  br label %633

633:                                              ; preds = %632
  %634 = load ptr, ptr %29, align 8, !tbaa !5
  %635 = load i32, ptr %37, align 4, !tbaa !9
  %636 = sext i32 %635 to i64
  %637 = getelementptr inbounds i32, ptr %634, i64 %636
  %638 = load i32, ptr %637, align 4, !tbaa !9
  %639 = icmp eq i32 %638, 0
  br i1 %639, label %640, label %706

640:                                              ; preds = %633
  %641 = load ptr, ptr %23, align 8, !tbaa !5
  %642 = load i32, ptr %37, align 4, !tbaa !9
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds i32, ptr %641, i64 %643
  %645 = load i32, ptr %644, align 4, !tbaa !9
  %646 = load ptr, ptr %23, align 8, !tbaa !5
  %647 = load i32, ptr %37, align 4, !tbaa !9
  %648 = add nsw i32 %647, 1
  %649 = sext i32 %648 to i64
  %650 = getelementptr inbounds i32, ptr %646, i64 %649
  %651 = load i32, ptr %650, align 4, !tbaa !9
  %652 = icmp slt i32 %645, %651
  br i1 %652, label %653, label %706

653:                                              ; preds = %640
  br label %654

654:                                              ; preds = %653
  %655 = load ptr, ptr %30, align 8, !tbaa !5
  %656 = load i32, ptr %37, align 4, !tbaa !9
  %657 = sext i32 %656 to i64
  %658 = getelementptr inbounds i32, ptr %655, i64 %657
  %659 = load i32, ptr %658, align 4, !tbaa !9
  %660 = icmp ne i32 %659, -1
  br i1 %660, label %672, label %661

661:                                              ; preds = %654
  %662 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 126, ptr noundef @.str.1)
  %663 = load ptr, ptr %30, align 8, !tbaa !5
  %664 = load i32, ptr %37, align 4, !tbaa !9
  %665 = sext i32 %664 to i64
  %666 = getelementptr inbounds i32, ptr %663, i64 %665
  %667 = load i32, ptr %666, align 4, !tbaa !9
  %668 = icmp ne i32 %667, -1
  br i1 %668, label %669, label %670

669:                                              ; preds = %661
  br label %671

670:                                              ; preds = %661
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 126, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

671:                                              ; preds = %669
  br label %672

672:                                              ; preds = %671, %654
  %673 = load ptr, ptr %31, align 8, !tbaa !5
  %674 = load i32, ptr %15, align 4, !tbaa !9
  %675 = add nsw i32 %674, -1
  store i32 %675, ptr %15, align 4, !tbaa !9
  %676 = sext i32 %675 to i64
  %677 = getelementptr inbounds i32, ptr %673, i64 %676
  %678 = load i32, ptr %677, align 4, !tbaa !9
  %679 = load ptr, ptr %31, align 8, !tbaa !5
  %680 = load ptr, ptr %30, align 8, !tbaa !5
  %681 = load i32, ptr %37, align 4, !tbaa !9
  %682 = sext i32 %681 to i64
  %683 = getelementptr inbounds i32, ptr %680, i64 %682
  %684 = load i32, ptr %683, align 4, !tbaa !9
  %685 = sext i32 %684 to i64
  %686 = getelementptr inbounds i32, ptr %679, i64 %685
  store i32 %678, ptr %686, align 4, !tbaa !9
  %687 = load ptr, ptr %30, align 8, !tbaa !5
  %688 = load i32, ptr %37, align 4, !tbaa !9
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds i32, ptr %687, i64 %689
  %691 = load i32, ptr %690, align 4, !tbaa !9
  %692 = load ptr, ptr %30, align 8, !tbaa !5
  %693 = load ptr, ptr %31, align 8, !tbaa !5
  %694 = load i32, ptr %15, align 4, !tbaa !9
  %695 = sext i32 %694 to i64
  %696 = getelementptr inbounds i32, ptr %693, i64 %695
  %697 = load i32, ptr %696, align 4, !tbaa !9
  %698 = sext i32 %697 to i64
  %699 = getelementptr inbounds i32, ptr %692, i64 %698
  store i32 %691, ptr %699, align 4, !tbaa !9
  %700 = load ptr, ptr %30, align 8, !tbaa !5
  %701 = load i32, ptr %37, align 4, !tbaa !9
  %702 = sext i32 %701 to i64
  %703 = getelementptr inbounds i32, ptr %700, i64 %702
  store i32 -1, ptr %703, align 4, !tbaa !9
  br label %704

704:                                              ; preds = %672
  br label %705

705:                                              ; preds = %704
  br label %706

706:                                              ; preds = %705, %640, %633
  %707 = load ptr, ptr %23, align 8, !tbaa !5
  %708 = load i32, ptr %37, align 4, !tbaa !9
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds i32, ptr %707, i64 %709
  %711 = load i32, ptr %710, align 4, !tbaa !9
  store i32 %711, ptr %11, align 4, !tbaa !9
  br label %712

712:                                              ; preds = %953, %706
  %713 = load i32, ptr %11, align 4, !tbaa !9
  %714 = load ptr, ptr %23, align 8, !tbaa !5
  %715 = load i32, ptr %37, align 4, !tbaa !9
  %716 = add nsw i32 %715, 1
  %717 = sext i32 %716 to i64
  %718 = getelementptr inbounds i32, ptr %714, i64 %717
  %719 = load i32, ptr %718, align 4, !tbaa !9
  %720 = icmp slt i32 %713, %719
  br i1 %720, label %721, label %956

721:                                              ; preds = %712
  %722 = load ptr, ptr %25, align 8, !tbaa !5
  %723 = load i32, ptr %11, align 4, !tbaa !9
  %724 = sext i32 %723 to i64
  %725 = getelementptr inbounds i32, ptr %722, i64 %724
  %726 = load i32, ptr %725, align 4, !tbaa !9
  store i32 %726, ptr %12, align 4, !tbaa !9
  %727 = load i32, ptr %18, align 4, !tbaa !9
  %728 = load ptr, ptr %27, align 8, !tbaa !5
  %729 = load i32, ptr %12, align 4, !tbaa !9
  %730 = sext i32 %729 to i64
  %731 = getelementptr inbounds i32, ptr %728, i64 %730
  %732 = load i32, ptr %731, align 4, !tbaa !9
  %733 = icmp eq i32 %727, %732
  br i1 %733, label %734, label %740

734:                                              ; preds = %721
  %735 = load ptr, ptr %26, align 8, !tbaa !5
  %736 = load i32, ptr %11, align 4, !tbaa !9
  %737 = sext i32 %736 to i64
  %738 = getelementptr inbounds i32, ptr %735, i64 %737
  %739 = load i32, ptr %738, align 4, !tbaa !9
  br label %747

740:                                              ; preds = %721
  %741 = load ptr, ptr %26, align 8, !tbaa !5
  %742 = load i32, ptr %11, align 4, !tbaa !9
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds i32, ptr %741, i64 %743
  %745 = load i32, ptr %744, align 4, !tbaa !9
  %746 = sub nsw i32 0, %745
  br label %747

747:                                              ; preds = %740, %734
  %748 = phi i32 [ %739, %734 ], [ %746, %740 ]
  store i32 %748, ptr %13, align 4, !tbaa !9
  br label %749

749:                                              ; preds = %747
  %750 = load i32, ptr %13, align 4, !tbaa !9
  %751 = load ptr, ptr %28, align 8, !tbaa !5
  %752 = load i32, ptr %12, align 4, !tbaa !9
  %753 = sext i32 %752 to i64
  %754 = getelementptr inbounds i32, ptr %751, i64 %753
  %755 = load i32, ptr %754, align 4, !tbaa !9
  %756 = add nsw i32 %755, %750
  store i32 %756, ptr %754, align 4, !tbaa !9
  %757 = load i32, ptr %13, align 4, !tbaa !9
  %758 = load ptr, ptr %29, align 8, !tbaa !5
  %759 = load i32, ptr %12, align 4, !tbaa !9
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds i32, ptr %758, i64 %760
  %762 = load i32, ptr %761, align 4, !tbaa !9
  %763 = sub nsw i32 %762, %757
  store i32 %763, ptr %761, align 4, !tbaa !9
  br label %764

764:                                              ; preds = %749
  br label %765

765:                                              ; preds = %764
  %766 = load ptr, ptr %30, align 8, !tbaa !5
  %767 = load i32, ptr %12, align 4, !tbaa !9
  %768 = sext i32 %767 to i64
  %769 = getelementptr inbounds i32, ptr %766, i64 %768
  %770 = load i32, ptr %769, align 4, !tbaa !9
  %771 = icmp ne i32 %770, -1
  br i1 %771, label %772, label %881

772:                                              ; preds = %765
  %773 = load ptr, ptr %29, align 8, !tbaa !5
  %774 = load i32, ptr %12, align 4, !tbaa !9
  %775 = sext i32 %774 to i64
  %776 = getelementptr inbounds i32, ptr %773, i64 %775
  %777 = load i32, ptr %776, align 4, !tbaa !9
  %778 = icmp eq i32 %777, 0
  br i1 %778, label %779, label %850

779:                                              ; preds = %772
  br label %780

780:                                              ; preds = %779
  %781 = load ptr, ptr %30, align 8, !tbaa !5
  %782 = load i32, ptr %12, align 4, !tbaa !9
  %783 = sext i32 %782 to i64
  %784 = getelementptr inbounds i32, ptr %781, i64 %783
  %785 = load i32, ptr %784, align 4, !tbaa !9
  %786 = icmp ne i32 %785, -1
  br i1 %786, label %798, label %787

787:                                              ; preds = %780
  %788 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef 137, ptr noundef @.str.1)
  %789 = load ptr, ptr %30, align 8, !tbaa !5
  %790 = load i32, ptr %12, align 4, !tbaa !9
  %791 = sext i32 %790 to i64
  %792 = getelementptr inbounds i32, ptr %789, i64 %791
  %793 = load i32, ptr %792, align 4, !tbaa !9
  %794 = icmp ne i32 %793, -1
  br i1 %794, label %795, label %796

795:                                              ; preds = %787
  br label %797

796:                                              ; preds = %787
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 137, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

797:                                              ; preds = %795
  br label %798

798:                                              ; preds = %797, %780
  %799 = load ptr, ptr %31, align 8, !tbaa !5
  %800 = load i32, ptr %15, align 4, !tbaa !9
  %801 = add nsw i32 %800, -1
  store i32 %801, ptr %15, align 4, !tbaa !9
  %802 = sext i32 %801 to i64
  %803 = getelementptr inbounds i32, ptr %799, i64 %802
  %804 = load i32, ptr %803, align 4, !tbaa !9
  %805 = load ptr, ptr %31, align 8, !tbaa !5
  %806 = load ptr, ptr %30, align 8, !tbaa !5
  %807 = load i32, ptr %12, align 4, !tbaa !9
  %808 = sext i32 %807 to i64
  %809 = getelementptr inbounds i32, ptr %806, i64 %808
  %810 = load i32, ptr %809, align 4, !tbaa !9
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds i32, ptr %805, i64 %811
  store i32 %804, ptr %812, align 4, !tbaa !9
  %813 = load ptr, ptr %30, align 8, !tbaa !5
  %814 = load i32, ptr %12, align 4, !tbaa !9
  %815 = sext i32 %814 to i64
  %816 = getelementptr inbounds i32, ptr %813, i64 %815
  %817 = load i32, ptr %816, align 4, !tbaa !9
  %818 = load ptr, ptr %30, align 8, !tbaa !5
  %819 = load ptr, ptr %31, align 8, !tbaa !5
  %820 = load i32, ptr %15, align 4, !tbaa !9
  %821 = sext i32 %820 to i64
  %822 = getelementptr inbounds i32, ptr %819, i64 %821
  %823 = load i32, ptr %822, align 4, !tbaa !9
  %824 = sext i32 %823 to i64
  %825 = getelementptr inbounds i32, ptr %818, i64 %824
  store i32 %817, ptr %825, align 4, !tbaa !9
  %826 = load ptr, ptr %30, align 8, !tbaa !5
  %827 = load i32, ptr %12, align 4, !tbaa !9
  %828 = sext i32 %827 to i64
  %829 = getelementptr inbounds i32, ptr %826, i64 %828
  store i32 -1, ptr %829, align 4, !tbaa !9
  br label %830

830:                                              ; preds = %798
  br label %831

831:                                              ; preds = %830
  %832 = load ptr, ptr %33, align 8, !tbaa !5
  %833 = load i32, ptr %12, align 4, !tbaa !9
  %834 = sext i32 %833 to i64
  %835 = getelementptr inbounds i32, ptr %832, i64 %834
  %836 = load i32, ptr %835, align 4, !tbaa !9
  %837 = icmp eq i32 %836, -1
  br i1 %837, label %838, label %849

838:                                              ; preds = %831
  %839 = load ptr, ptr %27, align 8, !tbaa !5
  %840 = load i32, ptr %12, align 4, !tbaa !9
  %841 = sext i32 %840 to i64
  %842 = getelementptr inbounds i32, ptr %839, i64 %841
  %843 = load i32, ptr %842, align 4, !tbaa !9
  %844 = sext i32 %843 to i64
  %845 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 %844
  %846 = load ptr, ptr %845, align 8, !tbaa !5
  %847 = load i32, ptr %12, align 4, !tbaa !9
  %848 = call i32 @libmetis__rpqDelete(ptr noundef %846, i32 noundef %847)
  br label %849

849:                                              ; preds = %838, %831
  br label %880

850:                                              ; preds = %772
  %851 = load ptr, ptr %33, align 8, !tbaa !5
  %852 = load i32, ptr %12, align 4, !tbaa !9
  %853 = sext i32 %852 to i64
  %854 = getelementptr inbounds i32, ptr %851, i64 %853
  %855 = load i32, ptr %854, align 4, !tbaa !9
  %856 = icmp eq i32 %855, -1
  br i1 %856, label %857, label %879

857:                                              ; preds = %850
  %858 = load ptr, ptr %27, align 8, !tbaa !5
  %859 = load i32, ptr %12, align 4, !tbaa !9
  %860 = sext i32 %859 to i64
  %861 = getelementptr inbounds i32, ptr %858, i64 %860
  %862 = load i32, ptr %861, align 4, !tbaa !9
  %863 = sext i32 %862 to i64
  %864 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 %863
  %865 = load ptr, ptr %864, align 8, !tbaa !5
  %866 = load i32, ptr %12, align 4, !tbaa !9
  %867 = load ptr, ptr %29, align 8, !tbaa !5
  %868 = load i32, ptr %12, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds i32, ptr %867, i64 %869
  %871 = load i32, ptr %870, align 4, !tbaa !9
  %872 = load ptr, ptr %28, align 8, !tbaa !5
  %873 = load i32, ptr %12, align 4, !tbaa !9
  %874 = sext i32 %873 to i64
  %875 = getelementptr inbounds i32, ptr %872, i64 %874
  %876 = load i32, ptr %875, align 4, !tbaa !9
  %877 = sub nsw i32 %871, %876
  %878 = sitofp i32 %877 to float
  call void @libmetis__rpqUpdate(ptr noundef %865, i32 noundef %866, float noundef %878)
  br label %879

879:                                              ; preds = %857, %850
  br label %880

880:                                              ; preds = %879, %849
  br label %952

881:                                              ; preds = %765
  %882 = load ptr, ptr %29, align 8, !tbaa !5
  %883 = load i32, ptr %12, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds i32, ptr %882, i64 %884
  %886 = load i32, ptr %885, align 4, !tbaa !9
  %887 = icmp sgt i32 %886, 0
  br i1 %887, label %888, label %951

888:                                              ; preds = %881
  br label %889

889:                                              ; preds = %888
  %890 = load ptr, ptr %30, align 8, !tbaa !5
  %891 = load i32, ptr %12, align 4, !tbaa !9
  %892 = sext i32 %891 to i64
  %893 = getelementptr inbounds i32, ptr %890, i64 %892
  %894 = load i32, ptr %893, align 4, !tbaa !9
  %895 = icmp eq i32 %894, -1
  br i1 %895, label %907, label %896

896:                                              ; preds = %889
  %897 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef 148, ptr noundef @.str.1)
  %898 = load ptr, ptr %30, align 8, !tbaa !5
  %899 = load i32, ptr %12, align 4, !tbaa !9
  %900 = sext i32 %899 to i64
  %901 = getelementptr inbounds i32, ptr %898, i64 %900
  %902 = load i32, ptr %901, align 4, !tbaa !9
  %903 = icmp eq i32 %902, -1
  br i1 %903, label %904, label %905

904:                                              ; preds = %896
  br label %906

905:                                              ; preds = %896
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 148, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

906:                                              ; preds = %904
  br label %907

907:                                              ; preds = %906, %889
  %908 = load i32, ptr %12, align 4, !tbaa !9
  %909 = load ptr, ptr %31, align 8, !tbaa !5
  %910 = load i32, ptr %15, align 4, !tbaa !9
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds i32, ptr %909, i64 %911
  store i32 %908, ptr %912, align 4, !tbaa !9
  %913 = load i32, ptr %15, align 4, !tbaa !9
  %914 = add nsw i32 %913, 1
  store i32 %914, ptr %15, align 4, !tbaa !9
  %915 = load ptr, ptr %30, align 8, !tbaa !5
  %916 = load i32, ptr %12, align 4, !tbaa !9
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds i32, ptr %915, i64 %917
  store i32 %913, ptr %918, align 4, !tbaa !9
  br label %919

919:                                              ; preds = %907
  br label %920

920:                                              ; preds = %919
  %921 = load ptr, ptr %33, align 8, !tbaa !5
  %922 = load i32, ptr %12, align 4, !tbaa !9
  %923 = sext i32 %922 to i64
  %924 = getelementptr inbounds i32, ptr %921, i64 %923
  %925 = load i32, ptr %924, align 4, !tbaa !9
  %926 = icmp eq i32 %925, -1
  br i1 %926, label %927, label %950

927:                                              ; preds = %920
  %928 = load ptr, ptr %27, align 8, !tbaa !5
  %929 = load i32, ptr %12, align 4, !tbaa !9
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds i32, ptr %928, i64 %930
  %932 = load i32, ptr %931, align 4, !tbaa !9
  %933 = sext i32 %932 to i64
  %934 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 %933
  %935 = load ptr, ptr %934, align 8, !tbaa !5
  %936 = load i32, ptr %12, align 4, !tbaa !9
  %937 = load ptr, ptr %29, align 8, !tbaa !5
  %938 = load i32, ptr %12, align 4, !tbaa !9
  %939 = sext i32 %938 to i64
  %940 = getelementptr inbounds i32, ptr %937, i64 %939
  %941 = load i32, ptr %940, align 4, !tbaa !9
  %942 = load ptr, ptr %28, align 8, !tbaa !5
  %943 = load i32, ptr %12, align 4, !tbaa !9
  %944 = sext i32 %943 to i64
  %945 = getelementptr inbounds i32, ptr %942, i64 %944
  %946 = load i32, ptr %945, align 4, !tbaa !9
  %947 = sub nsw i32 %941, %946
  %948 = sitofp i32 %947 to float
  %949 = call i32 @libmetis__rpqInsert(ptr noundef %935, i32 noundef %936, float noundef %948)
  br label %950

950:                                              ; preds = %927, %920
  br label %951

951:                                              ; preds = %950, %881
  br label %952

952:                                              ; preds = %951, %880
  br label %953

953:                                              ; preds = %952
  %954 = load i32, ptr %11, align 4, !tbaa !9
  %955 = add nsw i32 %954, 1
  store i32 %955, ptr %11, align 4, !tbaa !9
  br label %712, !llvm.loop !34

956:                                              ; preds = %712
  br label %957

957:                                              ; preds = %956
  %958 = load i32, ptr %16, align 4, !tbaa !9
  %959 = add nsw i32 %958, 1
  store i32 %959, ptr %16, align 4, !tbaa !9
  br label %391, !llvm.loop !35

960:                                              ; preds = %561, %420, %391
  store i32 0, ptr %9, align 4, !tbaa !9
  br label %961

961:                                              ; preds = %974, %960
  %962 = load i32, ptr %9, align 4, !tbaa !9
  %963 = load i32, ptr %16, align 4, !tbaa !9
  %964 = icmp slt i32 %962, %963
  br i1 %964, label %965, label %977

965:                                              ; preds = %961
  %966 = load ptr, ptr %33, align 8, !tbaa !5
  %967 = load ptr, ptr %34, align 8, !tbaa !5
  %968 = load i32, ptr %9, align 4, !tbaa !9
  %969 = sext i32 %968 to i64
  %970 = getelementptr inbounds i32, ptr %967, i64 %969
  %971 = load i32, ptr %970, align 4, !tbaa !9
  %972 = sext i32 %971 to i64
  %973 = getelementptr inbounds i32, ptr %966, i64 %972
  store i32 -1, ptr %973, align 4, !tbaa !9
  br label %974

974:                                              ; preds = %965
  %975 = load i32, ptr %9, align 4, !tbaa !9
  %976 = add nsw i32 %975, 1
  store i32 %976, ptr %9, align 4, !tbaa !9
  br label %961, !llvm.loop !36

977:                                              ; preds = %961
  %978 = load i32, ptr %16, align 4, !tbaa !9
  %979 = add nsw i32 %978, -1
  store i32 %979, ptr %16, align 4, !tbaa !9
  br label %980

980:                                              ; preds = %1355, %977
  %981 = load i32, ptr %16, align 4, !tbaa !9
  %982 = load i32, ptr %43, align 4, !tbaa !9
  %983 = icmp sgt i32 %981, %982
  br i1 %983, label %984, label %1358

984:                                              ; preds = %980
  %985 = load ptr, ptr %34, align 8, !tbaa !5
  %986 = load i32, ptr %16, align 4, !tbaa !9
  %987 = sext i32 %986 to i64
  %988 = getelementptr inbounds i32, ptr %985, i64 %987
  %989 = load i32, ptr %988, align 4, !tbaa !9
  store i32 %989, ptr %37, align 4, !tbaa !9
  %990 = load ptr, ptr %27, align 8, !tbaa !5
  %991 = load i32, ptr %37, align 4, !tbaa !9
  %992 = sext i32 %991 to i64
  %993 = getelementptr inbounds i32, ptr %990, i64 %992
  %994 = load i32, ptr %993, align 4, !tbaa !9
  %995 = add nsw i32 %994, 1
  %996 = srem i32 %995, 2
  %997 = load ptr, ptr %27, align 8, !tbaa !5
  %998 = load i32, ptr %37, align 4, !tbaa !9
  %999 = sext i32 %998 to i64
  %1000 = getelementptr inbounds i32, ptr %997, i64 %999
  store i32 %996, ptr %1000, align 4, !tbaa !9
  store i32 %996, ptr %18, align 4, !tbaa !9
  br label %1001

1001:                                             ; preds = %984
  %1002 = load ptr, ptr %28, align 8, !tbaa !5
  %1003 = load i32, ptr %37, align 4, !tbaa !9
  %1004 = sext i32 %1003 to i64
  %1005 = getelementptr inbounds i32, ptr %1002, i64 %1004
  %1006 = load i32, ptr %1005, align 4, !tbaa !9
  store i32 %1006, ptr %22, align 4, !tbaa !9
  %1007 = load ptr, ptr %29, align 8, !tbaa !5
  %1008 = load i32, ptr %37, align 4, !tbaa !9
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds i32, ptr %1007, i64 %1009
  %1011 = load i32, ptr %1010, align 4, !tbaa !9
  %1012 = load ptr, ptr %28, align 8, !tbaa !5
  %1013 = load i32, ptr %37, align 4, !tbaa !9
  %1014 = sext i32 %1013 to i64
  %1015 = getelementptr inbounds i32, ptr %1012, i64 %1014
  store i32 %1011, ptr %1015, align 4, !tbaa !9
  %1016 = load i32, ptr %22, align 4, !tbaa !9
  %1017 = load ptr, ptr %29, align 8, !tbaa !5
  %1018 = load i32, ptr %37, align 4, !tbaa !9
  %1019 = sext i32 %1018 to i64
  %1020 = getelementptr inbounds i32, ptr %1017, i64 %1019
  store i32 %1016, ptr %1020, align 4, !tbaa !9
  br label %1021

1021:                                             ; preds = %1001
  br label %1022

1022:                                             ; preds = %1021
  %1023 = load ptr, ptr %29, align 8, !tbaa !5
  %1024 = load i32, ptr %37, align 4, !tbaa !9
  %1025 = sext i32 %1024 to i64
  %1026 = getelementptr inbounds i32, ptr %1023, i64 %1025
  %1027 = load i32, ptr %1026, align 4, !tbaa !9
  %1028 = icmp eq i32 %1027, 0
  br i1 %1028, label %1029, label %1102

1029:                                             ; preds = %1022
  %1030 = load ptr, ptr %30, align 8, !tbaa !5
  %1031 = load i32, ptr %37, align 4, !tbaa !9
  %1032 = sext i32 %1031 to i64
  %1033 = getelementptr inbounds i32, ptr %1030, i64 %1032
  %1034 = load i32, ptr %1033, align 4, !tbaa !9
  %1035 = icmp ne i32 %1034, -1
  br i1 %1035, label %1036, label %1102

1036:                                             ; preds = %1029
  %1037 = load ptr, ptr %23, align 8, !tbaa !5
  %1038 = load i32, ptr %37, align 4, !tbaa !9
  %1039 = sext i32 %1038 to i64
  %1040 = getelementptr inbounds i32, ptr %1037, i64 %1039
  %1041 = load i32, ptr %1040, align 4, !tbaa !9
  %1042 = load ptr, ptr %23, align 8, !tbaa !5
  %1043 = load i32, ptr %37, align 4, !tbaa !9
  %1044 = add nsw i32 %1043, 1
  %1045 = sext i32 %1044 to i64
  %1046 = getelementptr inbounds i32, ptr %1042, i64 %1045
  %1047 = load i32, ptr %1046, align 4, !tbaa !9
  %1048 = icmp slt i32 %1041, %1047
  br i1 %1048, label %1049, label %1102

1049:                                             ; preds = %1036
  br label %1050

1050:                                             ; preds = %1049
  %1051 = load ptr, ptr %30, align 8, !tbaa !5
  %1052 = load i32, ptr %37, align 4, !tbaa !9
  %1053 = sext i32 %1052 to i64
  %1054 = getelementptr inbounds i32, ptr %1051, i64 %1053
  %1055 = load i32, ptr %1054, align 4, !tbaa !9
  %1056 = icmp ne i32 %1055, -1
  br i1 %1056, label %1068, label %1057

1057:                                             ; preds = %1050
  %1058 = call i32 (ptr, ...) @printf(ptr noundef @.str.9, i32 noundef 169, ptr noundef @.str.1)
  %1059 = load ptr, ptr %30, align 8, !tbaa !5
  %1060 = load i32, ptr %37, align 4, !tbaa !9
  %1061 = sext i32 %1060 to i64
  %1062 = getelementptr inbounds i32, ptr %1059, i64 %1061
  %1063 = load i32, ptr %1062, align 4, !tbaa !9
  %1064 = icmp ne i32 %1063, -1
  br i1 %1064, label %1065, label %1066

1065:                                             ; preds = %1057
  br label %1067

1066:                                             ; preds = %1057
  call void @__assert_fail(ptr noundef @.str.10, ptr noundef @.str.1, i32 noundef 169, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

1067:                                             ; preds = %1065
  br label %1068

1068:                                             ; preds = %1067, %1050
  %1069 = load ptr, ptr %31, align 8, !tbaa !5
  %1070 = load i32, ptr %15, align 4, !tbaa !9
  %1071 = add nsw i32 %1070, -1
  store i32 %1071, ptr %15, align 4, !tbaa !9
  %1072 = sext i32 %1071 to i64
  %1073 = getelementptr inbounds i32, ptr %1069, i64 %1072
  %1074 = load i32, ptr %1073, align 4, !tbaa !9
  %1075 = load ptr, ptr %31, align 8, !tbaa !5
  %1076 = load ptr, ptr %30, align 8, !tbaa !5
  %1077 = load i32, ptr %37, align 4, !tbaa !9
  %1078 = sext i32 %1077 to i64
  %1079 = getelementptr inbounds i32, ptr %1076, i64 %1078
  %1080 = load i32, ptr %1079, align 4, !tbaa !9
  %1081 = sext i32 %1080 to i64
  %1082 = getelementptr inbounds i32, ptr %1075, i64 %1081
  store i32 %1074, ptr %1082, align 4, !tbaa !9
  %1083 = load ptr, ptr %30, align 8, !tbaa !5
  %1084 = load i32, ptr %37, align 4, !tbaa !9
  %1085 = sext i32 %1084 to i64
  %1086 = getelementptr inbounds i32, ptr %1083, i64 %1085
  %1087 = load i32, ptr %1086, align 4, !tbaa !9
  %1088 = load ptr, ptr %30, align 8, !tbaa !5
  %1089 = load ptr, ptr %31, align 8, !tbaa !5
  %1090 = load i32, ptr %15, align 4, !tbaa !9
  %1091 = sext i32 %1090 to i64
  %1092 = getelementptr inbounds i32, ptr %1089, i64 %1091
  %1093 = load i32, ptr %1092, align 4, !tbaa !9
  %1094 = sext i32 %1093 to i64
  %1095 = getelementptr inbounds i32, ptr %1088, i64 %1094
  store i32 %1087, ptr %1095, align 4, !tbaa !9
  %1096 = load ptr, ptr %30, align 8, !tbaa !5
  %1097 = load i32, ptr %37, align 4, !tbaa !9
  %1098 = sext i32 %1097 to i64
  %1099 = getelementptr inbounds i32, ptr %1096, i64 %1098
  store i32 -1, ptr %1099, align 4, !tbaa !9
  br label %1100

1100:                                             ; preds = %1068
  br label %1101

1101:                                             ; preds = %1100
  br label %1150

1102:                                             ; preds = %1036, %1029, %1022
  %1103 = load ptr, ptr %29, align 8, !tbaa !5
  %1104 = load i32, ptr %37, align 4, !tbaa !9
  %1105 = sext i32 %1104 to i64
  %1106 = getelementptr inbounds i32, ptr %1103, i64 %1105
  %1107 = load i32, ptr %1106, align 4, !tbaa !9
  %1108 = icmp sgt i32 %1107, 0
  br i1 %1108, label %1109, label %1149

1109:                                             ; preds = %1102
  %1110 = load ptr, ptr %30, align 8, !tbaa !5
  %1111 = load i32, ptr %37, align 4, !tbaa !9
  %1112 = sext i32 %1111 to i64
  %1113 = getelementptr inbounds i32, ptr %1110, i64 %1112
  %1114 = load i32, ptr %1113, align 4, !tbaa !9
  %1115 = icmp eq i32 %1114, -1
  br i1 %1115, label %1116, label %1149

1116:                                             ; preds = %1109
  br label %1117

1117:                                             ; preds = %1116
  %1118 = load ptr, ptr %30, align 8, !tbaa !5
  %1119 = load i32, ptr %37, align 4, !tbaa !9
  %1120 = sext i32 %1119 to i64
  %1121 = getelementptr inbounds i32, ptr %1118, i64 %1120
  %1122 = load i32, ptr %1121, align 4, !tbaa !9
  %1123 = icmp eq i32 %1122, -1
  br i1 %1123, label %1135, label %1124

1124:                                             ; preds = %1117
  %1125 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, i32 noundef 171, ptr noundef @.str.1)
  %1126 = load ptr, ptr %30, align 8, !tbaa !5
  %1127 = load i32, ptr %37, align 4, !tbaa !9
  %1128 = sext i32 %1127 to i64
  %1129 = getelementptr inbounds i32, ptr %1126, i64 %1128
  %1130 = load i32, ptr %1129, align 4, !tbaa !9
  %1131 = icmp eq i32 %1130, -1
  br i1 %1131, label %1132, label %1133

1132:                                             ; preds = %1124
  br label %1134

1133:                                             ; preds = %1124
  call void @__assert_fail(ptr noundef @.str.17, ptr noundef @.str.1, i32 noundef 171, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

1134:                                             ; preds = %1132
  br label %1135

1135:                                             ; preds = %1134, %1117
  %1136 = load i32, ptr %37, align 4, !tbaa !9
  %1137 = load ptr, ptr %31, align 8, !tbaa !5
  %1138 = load i32, ptr %15, align 4, !tbaa !9
  %1139 = sext i32 %1138 to i64
  %1140 = getelementptr inbounds i32, ptr %1137, i64 %1139
  store i32 %1136, ptr %1140, align 4, !tbaa !9
  %1141 = load i32, ptr %15, align 4, !tbaa !9
  %1142 = add nsw i32 %1141, 1
  store i32 %1142, ptr %15, align 4, !tbaa !9
  %1143 = load ptr, ptr %30, align 8, !tbaa !5
  %1144 = load i32, ptr %37, align 4, !tbaa !9
  %1145 = sext i32 %1144 to i64
  %1146 = getelementptr inbounds i32, ptr %1143, i64 %1145
  store i32 %1141, ptr %1146, align 4, !tbaa !9
  br label %1147

1147:                                             ; preds = %1135
  br label %1148

1148:                                             ; preds = %1147
  br label %1149

1149:                                             ; preds = %1148, %1109, %1102
  br label %1150

1150:                                             ; preds = %1149, %1101
  br label %1151

1151:                                             ; preds = %1150
  %1152 = load ptr, ptr %24, align 8, !tbaa !5
  %1153 = load i32, ptr %37, align 4, !tbaa !9
  %1154 = sext i32 %1153 to i64
  %1155 = getelementptr inbounds i32, ptr %1152, i64 %1154
  %1156 = load i32, ptr %1155, align 4, !tbaa !9
  %1157 = load ptr, ptr %32, align 8, !tbaa !5
  %1158 = load i32, ptr %18, align 4, !tbaa !9
  %1159 = sext i32 %1158 to i64
  %1160 = getelementptr inbounds i32, ptr %1157, i64 %1159
  %1161 = load i32, ptr %1160, align 4, !tbaa !9
  %1162 = add nsw i32 %1161, %1156
  store i32 %1162, ptr %1160, align 4, !tbaa !9
  %1163 = load ptr, ptr %24, align 8, !tbaa !5
  %1164 = load i32, ptr %37, align 4, !tbaa !9
  %1165 = sext i32 %1164 to i64
  %1166 = getelementptr inbounds i32, ptr %1163, i64 %1165
  %1167 = load i32, ptr %1166, align 4, !tbaa !9
  %1168 = load ptr, ptr %32, align 8, !tbaa !5
  %1169 = load i32, ptr %18, align 4, !tbaa !9
  %1170 = add nsw i32 %1169, 1
  %1171 = srem i32 %1170, 2
  %1172 = sext i32 %1171 to i64
  %1173 = getelementptr inbounds i32, ptr %1168, i64 %1172
  %1174 = load i32, ptr %1173, align 4, !tbaa !9
  %1175 = sub nsw i32 %1174, %1167
  store i32 %1175, ptr %1173, align 4, !tbaa !9
  br label %1176

1176:                                             ; preds = %1151
  br label %1177

1177:                                             ; preds = %1176
  %1178 = load ptr, ptr %23, align 8, !tbaa !5
  %1179 = load i32, ptr %37, align 4, !tbaa !9
  %1180 = sext i32 %1179 to i64
  %1181 = getelementptr inbounds i32, ptr %1178, i64 %1180
  %1182 = load i32, ptr %1181, align 4, !tbaa !9
  store i32 %1182, ptr %11, align 4, !tbaa !9
  br label %1183

1183:                                             ; preds = %1351, %1177
  %1184 = load i32, ptr %11, align 4, !tbaa !9
  %1185 = load ptr, ptr %23, align 8, !tbaa !5
  %1186 = load i32, ptr %37, align 4, !tbaa !9
  %1187 = add nsw i32 %1186, 1
  %1188 = sext i32 %1187 to i64
  %1189 = getelementptr inbounds i32, ptr %1185, i64 %1188
  %1190 = load i32, ptr %1189, align 4, !tbaa !9
  %1191 = icmp slt i32 %1184, %1190
  br i1 %1191, label %1192, label %1354

1192:                                             ; preds = %1183
  %1193 = load ptr, ptr %25, align 8, !tbaa !5
  %1194 = load i32, ptr %11, align 4, !tbaa !9
  %1195 = sext i32 %1194 to i64
  %1196 = getelementptr inbounds i32, ptr %1193, i64 %1195
  %1197 = load i32, ptr %1196, align 4, !tbaa !9
  store i32 %1197, ptr %12, align 4, !tbaa !9
  %1198 = load i32, ptr %18, align 4, !tbaa !9
  %1199 = load ptr, ptr %27, align 8, !tbaa !5
  %1200 = load i32, ptr %12, align 4, !tbaa !9
  %1201 = sext i32 %1200 to i64
  %1202 = getelementptr inbounds i32, ptr %1199, i64 %1201
  %1203 = load i32, ptr %1202, align 4, !tbaa !9
  %1204 = icmp eq i32 %1198, %1203
  br i1 %1204, label %1205, label %1211

1205:                                             ; preds = %1192
  %1206 = load ptr, ptr %26, align 8, !tbaa !5
  %1207 = load i32, ptr %11, align 4, !tbaa !9
  %1208 = sext i32 %1207 to i64
  %1209 = getelementptr inbounds i32, ptr %1206, i64 %1208
  %1210 = load i32, ptr %1209, align 4, !tbaa !9
  br label %1218

1211:                                             ; preds = %1192
  %1212 = load ptr, ptr %26, align 8, !tbaa !5
  %1213 = load i32, ptr %11, align 4, !tbaa !9
  %1214 = sext i32 %1213 to i64
  %1215 = getelementptr inbounds i32, ptr %1212, i64 %1214
  %1216 = load i32, ptr %1215, align 4, !tbaa !9
  %1217 = sub nsw i32 0, %1216
  br label %1218

1218:                                             ; preds = %1211, %1205
  %1219 = phi i32 [ %1210, %1205 ], [ %1217, %1211 ]
  store i32 %1219, ptr %13, align 4, !tbaa !9
  br label %1220

1220:                                             ; preds = %1218
  %1221 = load i32, ptr %13, align 4, !tbaa !9
  %1222 = load ptr, ptr %28, align 8, !tbaa !5
  %1223 = load i32, ptr %12, align 4, !tbaa !9
  %1224 = sext i32 %1223 to i64
  %1225 = getelementptr inbounds i32, ptr %1222, i64 %1224
  %1226 = load i32, ptr %1225, align 4, !tbaa !9
  %1227 = add nsw i32 %1226, %1221
  store i32 %1227, ptr %1225, align 4, !tbaa !9
  %1228 = load i32, ptr %13, align 4, !tbaa !9
  %1229 = load ptr, ptr %29, align 8, !tbaa !5
  %1230 = load i32, ptr %12, align 4, !tbaa !9
  %1231 = sext i32 %1230 to i64
  %1232 = getelementptr inbounds i32, ptr %1229, i64 %1231
  %1233 = load i32, ptr %1232, align 4, !tbaa !9
  %1234 = sub nsw i32 %1233, %1228
  store i32 %1234, ptr %1232, align 4, !tbaa !9
  br label %1235

1235:                                             ; preds = %1220
  br label %1236

1236:                                             ; preds = %1235
  %1237 = load ptr, ptr %30, align 8, !tbaa !5
  %1238 = load i32, ptr %12, align 4, !tbaa !9
  %1239 = sext i32 %1238 to i64
  %1240 = getelementptr inbounds i32, ptr %1237, i64 %1239
  %1241 = load i32, ptr %1240, align 4, !tbaa !9
  %1242 = icmp ne i32 %1241, -1
  br i1 %1242, label %1243, label %1303

1243:                                             ; preds = %1236
  %1244 = load ptr, ptr %29, align 8, !tbaa !5
  %1245 = load i32, ptr %12, align 4, !tbaa !9
  %1246 = sext i32 %1245 to i64
  %1247 = getelementptr inbounds i32, ptr %1244, i64 %1246
  %1248 = load i32, ptr %1247, align 4, !tbaa !9
  %1249 = icmp eq i32 %1248, 0
  br i1 %1249, label %1250, label %1303

1250:                                             ; preds = %1243
  br label %1251

1251:                                             ; preds = %1250
  %1252 = load ptr, ptr %30, align 8, !tbaa !5
  %1253 = load i32, ptr %12, align 4, !tbaa !9
  %1254 = sext i32 %1253 to i64
  %1255 = getelementptr inbounds i32, ptr %1252, i64 %1254
  %1256 = load i32, ptr %1255, align 4, !tbaa !9
  %1257 = icmp ne i32 %1256, -1
  br i1 %1257, label %1269, label %1258

1258:                                             ; preds = %1251
  %1259 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, i32 noundef 181, ptr noundef @.str.1)
  %1260 = load ptr, ptr %30, align 8, !tbaa !5
  %1261 = load i32, ptr %12, align 4, !tbaa !9
  %1262 = sext i32 %1261 to i64
  %1263 = getelementptr inbounds i32, ptr %1260, i64 %1262
  %1264 = load i32, ptr %1263, align 4, !tbaa !9
  %1265 = icmp ne i32 %1264, -1
  br i1 %1265, label %1266, label %1267

1266:                                             ; preds = %1258
  br label %1268

1267:                                             ; preds = %1258
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.1, i32 noundef 181, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

1268:                                             ; preds = %1266
  br label %1269

1269:                                             ; preds = %1268, %1251
  %1270 = load ptr, ptr %31, align 8, !tbaa !5
  %1271 = load i32, ptr %15, align 4, !tbaa !9
  %1272 = add nsw i32 %1271, -1
  store i32 %1272, ptr %15, align 4, !tbaa !9
  %1273 = sext i32 %1272 to i64
  %1274 = getelementptr inbounds i32, ptr %1270, i64 %1273
  %1275 = load i32, ptr %1274, align 4, !tbaa !9
  %1276 = load ptr, ptr %31, align 8, !tbaa !5
  %1277 = load ptr, ptr %30, align 8, !tbaa !5
  %1278 = load i32, ptr %12, align 4, !tbaa !9
  %1279 = sext i32 %1278 to i64
  %1280 = getelementptr inbounds i32, ptr %1277, i64 %1279
  %1281 = load i32, ptr %1280, align 4, !tbaa !9
  %1282 = sext i32 %1281 to i64
  %1283 = getelementptr inbounds i32, ptr %1276, i64 %1282
  store i32 %1275, ptr %1283, align 4, !tbaa !9
  %1284 = load ptr, ptr %30, align 8, !tbaa !5
  %1285 = load i32, ptr %12, align 4, !tbaa !9
  %1286 = sext i32 %1285 to i64
  %1287 = getelementptr inbounds i32, ptr %1284, i64 %1286
  %1288 = load i32, ptr %1287, align 4, !tbaa !9
  %1289 = load ptr, ptr %30, align 8, !tbaa !5
  %1290 = load ptr, ptr %31, align 8, !tbaa !5
  %1291 = load i32, ptr %15, align 4, !tbaa !9
  %1292 = sext i32 %1291 to i64
  %1293 = getelementptr inbounds i32, ptr %1290, i64 %1292
  %1294 = load i32, ptr %1293, align 4, !tbaa !9
  %1295 = sext i32 %1294 to i64
  %1296 = getelementptr inbounds i32, ptr %1289, i64 %1295
  store i32 %1288, ptr %1296, align 4, !tbaa !9
  %1297 = load ptr, ptr %30, align 8, !tbaa !5
  %1298 = load i32, ptr %12, align 4, !tbaa !9
  %1299 = sext i32 %1298 to i64
  %1300 = getelementptr inbounds i32, ptr %1297, i64 %1299
  store i32 -1, ptr %1300, align 4, !tbaa !9
  br label %1301

1301:                                             ; preds = %1269
  br label %1302

1302:                                             ; preds = %1301
  br label %1303

1303:                                             ; preds = %1302, %1243, %1236
  %1304 = load ptr, ptr %30, align 8, !tbaa !5
  %1305 = load i32, ptr %12, align 4, !tbaa !9
  %1306 = sext i32 %1305 to i64
  %1307 = getelementptr inbounds i32, ptr %1304, i64 %1306
  %1308 = load i32, ptr %1307, align 4, !tbaa !9
  %1309 = icmp eq i32 %1308, -1
  br i1 %1309, label %1310, label %1350

1310:                                             ; preds = %1303
  %1311 = load ptr, ptr %29, align 8, !tbaa !5
  %1312 = load i32, ptr %12, align 4, !tbaa !9
  %1313 = sext i32 %1312 to i64
  %1314 = getelementptr inbounds i32, ptr %1311, i64 %1313
  %1315 = load i32, ptr %1314, align 4, !tbaa !9
  %1316 = icmp sgt i32 %1315, 0
  br i1 %1316, label %1317, label %1350

1317:                                             ; preds = %1310
  br label %1318

1318:                                             ; preds = %1317
  %1319 = load ptr, ptr %30, align 8, !tbaa !5
  %1320 = load i32, ptr %12, align 4, !tbaa !9
  %1321 = sext i32 %1320 to i64
  %1322 = getelementptr inbounds i32, ptr %1319, i64 %1321
  %1323 = load i32, ptr %1322, align 4, !tbaa !9
  %1324 = icmp eq i32 %1323, -1
  br i1 %1324, label %1336, label %1325

1325:                                             ; preds = %1318
  %1326 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef 183, ptr noundef @.str.1)
  %1327 = load ptr, ptr %30, align 8, !tbaa !5
  %1328 = load i32, ptr %12, align 4, !tbaa !9
  %1329 = sext i32 %1328 to i64
  %1330 = getelementptr inbounds i32, ptr %1327, i64 %1329
  %1331 = load i32, ptr %1330, align 4, !tbaa !9
  %1332 = icmp eq i32 %1331, -1
  br i1 %1332, label %1333, label %1334

1333:                                             ; preds = %1325
  br label %1335

1334:                                             ; preds = %1325
  call void @__assert_fail(ptr noundef @.str.15, ptr noundef @.str.1, i32 noundef 183, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #6
  unreachable

1335:                                             ; preds = %1333
  br label %1336

1336:                                             ; preds = %1335, %1318
  %1337 = load i32, ptr %12, align 4, !tbaa !9
  %1338 = load ptr, ptr %31, align 8, !tbaa !5
  %1339 = load i32, ptr %15, align 4, !tbaa !9
  %1340 = sext i32 %1339 to i64
  %1341 = getelementptr inbounds i32, ptr %1338, i64 %1340
  store i32 %1337, ptr %1341, align 4, !tbaa !9
  %1342 = load i32, ptr %15, align 4, !tbaa !9
  %1343 = add nsw i32 %1342, 1
  store i32 %1343, ptr %15, align 4, !tbaa !9
  %1344 = load ptr, ptr %30, align 8, !tbaa !5
  %1345 = load i32, ptr %12, align 4, !tbaa !9
  %1346 = sext i32 %1345 to i64
  %1347 = getelementptr inbounds i32, ptr %1344, i64 %1346
  store i32 %1342, ptr %1347, align 4, !tbaa !9
  br label %1348

1348:                                             ; preds = %1336
  br label %1349

1349:                                             ; preds = %1348
  br label %1350

1350:                                             ; preds = %1349, %1310, %1303
  br label %1351

1351:                                             ; preds = %1350
  %1352 = load i32, ptr %11, align 4, !tbaa !9
  %1353 = add nsw i32 %1352, 1
  store i32 %1353, ptr %11, align 4, !tbaa !9
  br label %1183, !llvm.loop !37

1354:                                             ; preds = %1183
  br label %1355

1355:                                             ; preds = %1354
  %1356 = load i32, ptr %16, align 4, !tbaa !9
  %1357 = add nsw i32 %1356, -1
  store i32 %1357, ptr %16, align 4, !tbaa !9
  br label %980, !llvm.loop !38

1358:                                             ; preds = %980
  %1359 = load i32, ptr %38, align 4, !tbaa !9
  %1360 = load ptr, ptr %6, align 8, !tbaa !5
  %1361 = getelementptr inbounds %struct.graph_t, ptr %1360, i32 0, i32 17
  store i32 %1359, ptr %1361, align 8, !tbaa !30
  %1362 = load i32, ptr %15, align 4, !tbaa !9
  %1363 = load ptr, ptr %6, align 8, !tbaa !5
  %1364 = getelementptr inbounds %struct.graph_t, ptr %1363, i32 0, i32 21
  store i32 %1362, ptr %1364, align 8, !tbaa !31
  %1365 = load ptr, ptr %5, align 8, !tbaa !5
  %1366 = getelementptr inbounds %struct.ctrl_t, ptr %1365, i32 0, i32 2
  %1367 = load i32, ptr %1366, align 8, !tbaa !26
  %1368 = and i32 %1367, 8
  %1369 = icmp ne i32 %1368, 0
  br i1 %1369, label %1370, label %1375

1370:                                             ; preds = %1358
  %1371 = load ptr, ptr %5, align 8, !tbaa !5
  %1372 = load ptr, ptr %6, align 8, !tbaa !5
  %1373 = load ptr, ptr %7, align 8, !tbaa !5
  %1374 = load i32, ptr %43, align 4, !tbaa !9
  call void @libmetis__Print2WayRefineStats(ptr noundef %1371, ptr noundef %1372, ptr noundef %1373, float noundef 0.000000e+00, i32 noundef %1374)
  br label %1375

1375:                                             ; preds = %1370, %1358
  %1376 = load i32, ptr %43, align 4, !tbaa !9
  %1377 = icmp sle i32 %1376, 0
  br i1 %1377, label %1382, label %1378

1378:                                             ; preds = %1375
  %1379 = load i32, ptr %38, align 4, !tbaa !9
  %1380 = load i32, ptr %41, align 4, !tbaa !9
  %1381 = icmp eq i32 %1379, %1380
  br i1 %1381, label %1382, label %1383

1382:                                             ; preds = %1378, %1375
  br label %1387

1383:                                             ; preds = %1378
  br label %1384

1384:                                             ; preds = %1383
  %1385 = load i32, ptr %19, align 4, !tbaa !9
  %1386 = add nsw i32 %1385, 1
  store i32 %1386, ptr %19, align 4, !tbaa !9
  br label %208, !llvm.loop !39

1387:                                             ; preds = %1382, %208
  %1388 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 0
  %1389 = load ptr, ptr %1388, align 16, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1389)
  %1390 = getelementptr inbounds [2 x ptr], ptr %36, i64 0, i64 1
  %1391 = load ptr, ptr %1390, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1391)
  %1392 = load ptr, ptr %5, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %1392)
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 4, 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
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) #2

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

declare ptr @libmetis__rpqCreate(i64 noundef) #2

; Function Attrs: nounwind uwtable
declare dso_local void @libmetis__Print2WayRefineStats(ptr noundef, ptr noundef, ptr noundef, float noundef, i32 noundef) #0

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

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

declare void @libmetis__rpqReset(ptr noundef) #2

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

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

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

declare i32 @libmetis__CheckBnd(ptr noundef) #2

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

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

declare i32 @libmetis__rpqGetTop(ptr noundef) #2

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

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

declare void @libmetis__rpqDestroy(ptr noundef) #2

declare void @libmetis__wspacepop(ptr noundef) #2

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"graph_t", !10, i64 0, !10, i64 4, !10, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84, !10, i64 88, !6, i64 96, !6, i64 104, !10, i64 112, !10, i64 116, !6, i64 120, !6, i64 128, !10, 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}
!13 = !{!12, !6, i64 16}
!14 = !{!12, !6, i64 24}
!15 = !{!12, !6, i64 40}
!16 = !{!12, !6, i64 48}
!17 = !{!12, !6, i64 120}
!18 = !{!12, !6, i64 160}
!19 = !{!12, !6, i64 168}
!20 = !{!12, !6, i64 128}
!21 = !{!12, !6, i64 144}
!22 = !{!12, !6, i64 152}
!23 = !{!12, !6, i64 56}
!24 = !{!25, !25, i64 0}
!25 = !{!"float", !7, i64 0}
!26 = !{!27, !10, i64 8}
!27 = !{!"ctrl_t", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !10, i64 24, !10, i64 28, !10, i64 32, !10, i64 36, !10, i64 40, !10, i64 44, !10, i64 48, !10, i64 52, !10, i64 56, !10, i64 60, !10, i64 64, !10, i64 68, !10, i64 72, !6, i64 80, !10, i64 88, !10, 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 = !{!12, !10, i64 112}
!31 = !{!12, !10, i64 136}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !33}
!37 = distinct !{!37, !33}
!38 = distinct !{!38, !33}
!39 = distinct !{!39, !33}


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

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

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

58:                                               ; preds = %4
  tail call void @libmetis__Print2WayRefineStats(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, float noundef 0.000000e+00, i32 noundef -2)
  br label %59

59:                                               ; preds = %58, %4
  %60 = load i32, ptr %22, align 4, !tbaa !22
  %61 = tail call ptr @libmetis__iset(i64 noundef %51, i32 noundef -1, ptr noundef %27) #7
  %62 = icmp sgt i32 %3, 0
  br i1 %62, label %.lr.ph528, label %._crit_edge529

.lr.ph528:                                        ; preds = %59
  %63 = sub nsw i32 %36, %60
  %64 = tail call i32 @llvm.abs.i32(i32 %63, i1 true)
  %65 = getelementptr inbounds i8, ptr %1, i64 112
  %66 = getelementptr inbounds i8, ptr %1, i64 136
  %67 = icmp sgt i32 %6, 0
  %68 = add nsw i32 %64, %50
  %wide.trip.count561 = zext nneg i32 %6 to i64
  br label %69

69:                                               ; preds = %453, %.lr.ph528
  %.0432526 = phi i32 [ 0, %.lr.ph528 ], [ %456, %453 ]
  tail call void @libmetis__rpqReset(ptr noundef %52) #7
  tail call void @libmetis__rpqReset(ptr noundef %53) #7
  %70 = load i32, ptr %65, align 8, !tbaa !30
  %71 = load i32, ptr %22, align 4, !tbaa !22
  %72 = sub nsw i32 %36, %71
  %73 = tail call i32 @llvm.abs.i32(i32 %72, i1 true)
  %74 = tail call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %16) #7
  %75 = load i32, ptr %65, align 8, !tbaa !30
  %76 = icmp eq i32 %74, %75
  br i1 %76, label %83, label %77

77:                                               ; preds = %69
  %78 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef 78, ptr noundef nonnull @.str.1)
  %79 = tail call i32 @libmetis__ComputeCut(ptr noundef nonnull %1, ptr noundef %16) #7
  %80 = load i32, ptr %65, align 8, !tbaa !30
  %81 = icmp eq i32 %79, %80
  br i1 %81, label %83, label %82

82:                                               ; preds = %77
  tail call void @__assert_fail(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.1, i32 noundef 78, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #8
  unreachable

83:                                               ; preds = %77, %69
  %84 = tail call i32 @libmetis__CheckBnd(ptr noundef nonnull %1) #7
  %.not441 = icmp eq i32 %84, 0
  br i1 %.not441, label %85, label %89

85:                                               ; preds = %83
  %86 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef 79, ptr noundef nonnull @.str.1)
  %87 = tail call i32 @libmetis__CheckBnd(ptr noundef nonnull %1) #7
  %.not442 = icmp eq i32 %87, 0
  br i1 %.not442, label %88, label %89

88:                                               ; preds = %85
  tail call void @__assert_fail(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.1, i32 noundef 79, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #8
  unreachable

89:                                               ; preds = %85, %83
  %90 = load i32, ptr %66, align 8, !tbaa !31
  tail call void @libmetis__irandArrayPermute(i32 noundef %90, ptr noundef %29, i32 noundef %90, i32 noundef 1) #7
  %91 = icmp sgt i32 %90, 0
  br i1 %91, label %.lr.ph.preheader, label %.preheader462

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

.preheader462:                                    ; preds = %128, %89
  br i1 %67, label %.lr.ph503, label %.preheader

.lr.ph:                                           ; preds = %.lr.ph.preheader, %128
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %128 ]
  %92 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv
  %93 = load i32, ptr %92, align 4, !tbaa !22
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds i32, ptr %26, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !22
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds i32, ptr %20, i64 %97
  %99 = load i32, ptr %98, align 4, !tbaa !22
  %100 = icmp sgt i32 %99, 0
  br i1 %100, label %117, label %101

101:                                              ; preds = %.lr.ph
  %102 = getelementptr inbounds i32, ptr %18, i64 %97
  %103 = load i32, ptr %102, align 4, !tbaa !22
  %104 = icmp eq i32 %103, 0
  br i1 %104, label %117, label %105

105:                                              ; preds = %101
  %106 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.5, i32 noundef 86, ptr noundef nonnull @.str.1)
  %107 = load i32, ptr %95, align 4, !tbaa !22
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds i32, ptr %20, i64 %108
  %110 = load i32, ptr %109, align 4, !tbaa !22
  %111 = icmp sgt i32 %110, 0
  br i1 %111, label %117, label %112

112:                                              ; preds = %105
  %113 = getelementptr inbounds i32, ptr %18, i64 %108
  %114 = load i32, ptr %113, align 4, !tbaa !22
  %115 = icmp eq i32 %114, 0
  br i1 %115, label %117, label %116

116:                                              ; preds = %112
  tail call void @__assert_fail(ptr noundef nonnull @.str.6, ptr noundef nonnull @.str.1, i32 noundef 86, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #8
  unreachable

117:                                              ; preds = %112, %105, %101, %.lr.ph
  %.pre-phi = phi i64 [ %108, %112 ], [ %108, %105 ], [ %97, %101 ], [ %97, %.lr.ph ]
  %118 = phi i32 [ %107, %112 ], [ %107, %105 ], [ %96, %101 ], [ %96, %.lr.ph ]
  %119 = getelementptr inbounds i32, ptr %24, i64 %.pre-phi
  %120 = load i32, ptr %119, align 4, !tbaa !22
  %.not453 = icmp eq i32 %120, -1
  br i1 %.not453, label %121, label %128

121:                                              ; preds = %117
  %122 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7, i32 noundef 87, ptr noundef nonnull @.str.1)
  %123 = load i32, ptr %95, align 4, !tbaa !22
  %124 = sext i32 %123 to i64
  %125 = getelementptr inbounds i32, ptr %24, i64 %124
  %126 = load i32, ptr %125, align 4, !tbaa !22
  %.not454 = icmp eq i32 %126, -1
  br i1 %.not454, label %127, label %128

127:                                              ; preds = %121
  tail call void @__assert_fail(ptr noundef nonnull @.str.8, ptr noundef nonnull @.str.1, i32 noundef 87, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #8
  unreachable

128:                                              ; preds = %121, %117
  %.pre-phi575 = phi i64 [ %124, %121 ], [ %.pre-phi, %117 ]
  %129 = phi i32 [ %123, %121 ], [ %118, %117 ]
  %130 = getelementptr inbounds i32, ptr %16, i64 %.pre-phi575
  %131 = load i32, ptr %130, align 4, !tbaa !22
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds [2 x ptr], ptr %5, i64 0, i64 %132
  %134 = load ptr, ptr %133, align 8, !tbaa !25
  %135 = getelementptr inbounds i32, ptr %20, i64 %.pre-phi575
  %136 = load i32, ptr %135, align 4, !tbaa !22
  %137 = getelementptr inbounds i32, ptr %18, i64 %.pre-phi575
  %138 = load i32, ptr %137, align 4, !tbaa !22
  %139 = sub nsw i32 %136, %138
  %140 = sitofp i32 %139 to float
  %141 = tail call i32 @libmetis__rpqInsert(ptr noundef %134, i32 noundef %129, float noundef %140) #7
  %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 %.preheader462, label %.lr.ph, !llvm.loop !32

.lr.ph503:                                        ; preds = %.preheader462, %._crit_edge
  %indvars.iv558 = phi i64 [ %indvars.iv.next559, %._crit_edge ], [ 0, %.preheader462 ]
  %.0421502 = phi i32 [ %.1422, %._crit_edge ], [ -1, %.preheader462 ]
  %.0423501 = phi i32 [ %169, %._crit_edge ], [ %70, %.preheader462 ]
  %.0424500 = phi i32 [ %.1425, %._crit_edge ], [ %73, %.preheader462 ]
  %.0426499 = phi i32 [ %.1427, %._crit_edge ], [ %70, %.preheader462 ]
  %.0428497 = phi i32 [ %.2.lcssa, %._crit_edge ], [ %90, %.preheader462 ]
  %142 = load i32, ptr %22, align 4, !tbaa !22
  %143 = sub nsw i32 %36, %142
  %144 = load i32, ptr %44, align 4, !tbaa !22
  %145 = add i32 %144, %36
  %146 = sub i32 %32, %145
  %147 = icmp sge i32 %143, %146
  %148 = zext i1 %147 to i32
  %not. = xor i1 %147, true
  %149 = zext i1 %not. to i32
  %150 = zext i1 %147 to i64
  %151 = getelementptr inbounds [2 x ptr], ptr %5, i64 0, i64 %150
  %152 = load ptr, ptr %151, align 8, !tbaa !25
  %153 = tail call i32 @libmetis__rpqGetTop(ptr noundef %152) #7
  %154 = icmp eq i32 %153, -1
  %155 = trunc nuw nsw i64 %indvars.iv558 to i32
  br i1 %154, label %.loopexit463, label %156

156:                                              ; preds = %.lr.ph503
  %157 = sext i32 %153 to i64
  %158 = getelementptr inbounds i32, ptr %24, i64 %157
  %159 = load i32, ptr %158, align 4, !tbaa !22
  %.not443 = icmp eq i32 %159, -1
  br i1 %.not443, label %160, label %164

160:                                              ; preds = %156
  %161 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef 97, ptr noundef nonnull @.str.1)
  %162 = load i32, ptr %158, align 4, !tbaa !22
  %.not444 = icmp eq i32 %162, -1
  br i1 %.not444, label %163, label %164

163:                                              ; preds = %160
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 97, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #8
  unreachable

164:                                              ; preds = %160, %156
  %165 = getelementptr inbounds i32, ptr %20, i64 %157
  %166 = load i32, ptr %165, align 4, !tbaa !22
  %167 = getelementptr inbounds i32, ptr %18, i64 %157
  %168 = load i32, ptr %167, align 4, !tbaa !22
  %.neg = sub i32 %168, %166
  %169 = add i32 %.neg, %.0423501
  %170 = getelementptr inbounds i32, ptr %10, i64 %157
  %171 = load i32, ptr %170, align 4, !tbaa !22
  %172 = zext i1 %not. to i64
  %173 = getelementptr inbounds i32, ptr %22, i64 %172
  %174 = load i32, ptr %173, align 4, !tbaa !22
  %175 = add nsw i32 %174, %171
  store i32 %175, ptr %173, align 4, !tbaa !22
  %176 = load i32, ptr %170, align 4, !tbaa !22
  %177 = getelementptr inbounds i32, ptr %22, i64 %150
  %178 = load i32, ptr %177, align 4, !tbaa !22
  %179 = sub nsw i32 %178, %176
  store i32 %179, ptr %177, align 4, !tbaa !22
  %180 = icmp slt i32 %169, %.0426499
  br i1 %180, label %181, label %185

181:                                              ; preds = %164
  %182 = load i32, ptr %22, align 4, !tbaa !22
  %183 = sub nsw i32 %36, %182
  %184 = tail call i32 @llvm.abs.i32(i32 %183, i1 true)
  %.not445 = icmp sgt i32 %184, %68
  br i1 %.not445, label %185, label %202

185:                                              ; preds = %181, %164
  %186 = icmp eq i32 %169, %.0426499
  br i1 %186, label %187, label %192

187:                                              ; preds = %185
  %188 = load i32, ptr %22, align 4, !tbaa !22
  %189 = sub nsw i32 %36, %188
  %190 = tail call i32 @llvm.abs.i32(i32 %189, i1 true)
  %191 = icmp slt i32 %190, %.0424500
  br i1 %191, label %202, label %192

192:                                              ; preds = %187, %185
  %193 = sub nsw i32 %155, %.0421502
  %194 = icmp sgt i32 %193, %42
  br i1 %194, label %195, label %202

195:                                              ; preds = %192
  %196 = getelementptr inbounds i32, ptr %22, i64 %172
  %197 = getelementptr inbounds i32, ptr %22, i64 %150
  %198 = load i32, ptr %170, align 4, !tbaa !22
  %199 = add nsw i32 %198, %179
  store i32 %199, ptr %197, align 4, !tbaa !22
  %200 = load i32, ptr %170, align 4, !tbaa !22
  %201 = sub nsw i32 %175, %200
  store i32 %201, ptr %196, align 4, !tbaa !22
  br label %.loopexit463

202:                                              ; preds = %181, %187, %192
  %.1427 = phi i32 [ %.0426499, %192 ], [ %169, %187 ], [ %169, %181 ]
  %.1425 = phi i32 [ %.0424500, %192 ], [ %190, %187 ], [ %184, %181 ]
  %.1422 = phi i32 [ %.0421502, %192 ], [ %155, %187 ], [ %155, %181 ]
  %203 = getelementptr inbounds i32, ptr %16, i64 %157
  store i32 %149, ptr %203, align 4, !tbaa !22
  %204 = getelementptr inbounds i32, ptr %27, i64 %157
  store i32 %155, ptr %204, align 4, !tbaa !22
  %205 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv558
  store i32 %153, ptr %205, align 4, !tbaa !22
  %206 = load i32, ptr %55, align 8, !tbaa !26
  %207 = and i32 %206, 32
  %.not446 = icmp eq i32 %207, 0
  br i1 %.not446, label %216, label %208

208:                                              ; preds = %202
  %209 = load i32, ptr %165, align 4, !tbaa !22
  %210 = load i32, ptr %167, align 4, !tbaa !22
  %211 = sub nsw i32 %209, %210
  %212 = load i32, ptr %170, align 4, !tbaa !22
  %213 = load i32, ptr %22, align 4, !tbaa !22
  %214 = load i32, ptr %44, align 4, !tbaa !22
  %215 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %153, i32 noundef %148, i32 noundef %211, i32 noundef %212, i32 noundef %169, i32 noundef %213, i32 noundef %214)
  br label %216

216:                                              ; preds = %202, %208
  %217 = load i32, ptr %167, align 4, !tbaa !22
  %218 = load i32, ptr %165, align 4, !tbaa !22
  store i32 %218, ptr %167, align 4, !tbaa !22
  store i32 %217, ptr %165, align 4, !tbaa !22
  %219 = icmp eq i32 %217, 0
  br i1 %219, label %220, label %243

220:                                              ; preds = %216
  %221 = getelementptr inbounds i32, ptr %8, i64 %157
  %222 = load i32, ptr %221, align 4, !tbaa !22
  %223 = getelementptr i8, ptr %221, i64 4
  %224 = load i32, ptr %223, align 4, !tbaa !22
  %225 = icmp slt i32 %222, %224
  br i1 %225, label %226, label %243

226:                                              ; preds = %220
  %227 = load i32, ptr %158, align 4, !tbaa !22
  %.not447 = icmp eq i32 %227, -1
  br i1 %.not447, label %228, label %232

228:                                              ; preds = %226
  %229 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9, i32 noundef 126, ptr noundef nonnull @.str.1)
  %230 = load i32, ptr %158, align 4, !tbaa !22
  %.not448 = icmp eq i32 %230, -1
  br i1 %.not448, label %231, label %232

231:                                              ; preds = %228
  tail call void @__assert_fail(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.1, i32 noundef 126, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayCutRefine) #8
  unreachable

232:                                              ; preds = %228, %226
  %233 = phi i32 [ %230, %228 ], [ %227, %226 ]
  %234 = add nsw i32 %.0428497, -1
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds i32, ptr %26, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !22
  %238 = sext i32 %233 to i64
  %239 = getelementptr inbounds i32, ptr %26, i64 %238
  store i32 %237, ptr %239, align 4, !tbaa !22
  %240 = load i32, ptr %158, align 4, !tbaa !22
  %241 = sext i32 %237 to i64
  %242 = getelementptr inbounds i32, ptr %24, i64 %241
  store i32 %240, ptr %242, align 4, !tbaa !22
  store i32 -1, ptr %158, align 4, !tbaa !22
  br label %243

243:                                              ; preds = %232, %220, %216
  %.1429 = phi i32 [ %234, %232 ], [ %.0428497, %220 ], [ %.0428497, %216 ]
  %244 = getelementptr inbounds i32, ptr %8, i64 %157
  %245 = load i32, ptr %244, align 4, !tbaa !22
  %246 = getelementptr i8, ptr %244, i64 4
  %247 = load i32, ptr %246, align 4, !tbaa !22
  %248 = icmp slt i32 %245, %247
  br i1 %248, label %.lr.ph492.preheader, label %._crit_edge

.lr.ph492.preheader:                              ; preds = %243
  %249 = sext i32 %245 to i64
  br label %.lr.ph492

.lr.ph492:                                        ; preds = %.lr.ph492.preheader, %320
  %indvars.iv555 = phi i64 [ %249, %.lr.ph492.preheader ], [ %indvars.iv.next556, %320 ]
  %.2490 = phi i32 [ %.1429, %.lr.ph492.preheader ], [ %.3, %320 ]
  %250 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv555
  %251 = load i32, ptr %250, align 4, !tbaa !22
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %16, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !22
  %255 = icmp eq i32 %254, %149
  %256 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv555
  %257 = load i32, ptr %256, align 4, !tbaa !22
  %258 = sub nsw i32 0, %257
  %259 = select i1 %255, i32 %257, i32 %258
  %260 = getelementptr inbounds i32, ptr %18, i64 %252
  %261 = load i32, ptr %260, align 4, !tbaa !22
  %262 = add nsw i32 %261, %259
  store i32 %262, ptr %260, align 4, !tbaa !22
  %263 = getelementptr inbounds i32, ptr %20, i64 %252
  %264 = load i32, ptr %263, align 4, !tbaa !22
  %265 = sub nsw i32 %264, %259
  store i32 %265, ptr %263, align 4, !tbaa !22
  %266 = getelementptr inbounds i32, ptr %24, i64 %252
  %267 = load i32, ptr %266, align 4, !tbaa !22
  %.not449 = icmp eq i32 %267, -1
  br i1 %.not449, label %301, label %268

268:                                              ; preds = %.lr.ph492
  %269 = icmp eq i32 %264, %259
  br i1 %269, label %270, label %289

270:                                              ; preds = %268
  %271 = add nsw i32 %.2490, -1
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds i32, ptr %26, i64 %272
  %274 = load i32, ptr %273, align 4, !tbaa !22
  %275 = sext i32 %267 to i64
  %276 = getelementptr inbounds i32, ptr %26, i64 %275
  store i32 %274, ptr %276, align 4, !tbaa !22
  %277 = load i32, ptr %266, align 4, !tbaa !22
  %278 = sext i32 %274 to i64
  %279 = getelementptr inbounds i32, ptr %24, i64 %278
  store i32 %277, ptr %279, align 4, !tbaa !22
  store i32 -1, ptr %266, align 4, !tbaa !22
  %280 = getelementptr inbounds i32, ptr %27, i64 %252
  %281 = load i32, ptr %280, align 4, !tbaa !22
  %282 = icmp eq i32 %281, -1
  br i1 %282, label %283, label %320

283:                                              ; preds = %270
  %284 = load i32, ptr %253, align 4, !tbaa !22
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds [2 x ptr], ptr %5, i64 0, i64 %285
  %287 = load ptr, ptr %286, align 8, !tbaa !25
  %288 = tail call i32 @libmetis__rpqDelete(ptr noundef %287, i32 noundef %251) #7
  br label %320

289:                                              ; preds = %268
  %290 = getelementptr inbounds i32, ptr %27, i64 %252
  %291 = load i32, ptr %290, align 4, !tbaa !22
  %292 = icmp eq i32 %291, -1
  br i1 %292, label %293, label %320

293:                                              ; preds = %289
  %294 = load i32, ptr %253, align 4, !tbaa !22
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds [2 x ptr], ptr %5, i64 0, i64 %295
  %297 = load ptr, ptr %296, align 8, !tbaa !25
  %298 = load i32, ptr %260, align 4, !tbaa !22
  %299 = sub nsw i32 %265, %298
  %300 = sitofp i32 %299 to float
  tail call void @libmetis__rpqUpdate(ptr noundef %297, i32 noundef %251, float noundef %300) #7
  br label %320

301:                                              ; preds = %.lr.ph492
  %302 = icmp sgt i32 %265, 0
  br i1 %302, label %303, label %320

303:                                              ; preds = %301
  %304 = sext i32 %.2490 to i64
  %305 = getelementptr inbounds i32, ptr %26, i64 %304
  store i32 %251, ptr %305, align 4, !tbaa !22
  %306 = add nsw i32 %.2490, 1
  store i32 %.2490, ptr %266, align 4, !tbaa !22
  %307 = getelementptr inbounds i32, ptr %27, i64 %252
  %308 = load i32, ptr %307, align 4, !tbaa !22
  %309 = icmp eq i32 %308, -1
  br i1 %309, label %310, label %320

310:                                              ; preds = %303
  %311 = load i32, ptr %253, align 4, !tbaa !22
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds [2 x ptr], ptr %5, i64 0, i64 %312
  %314 = load ptr, ptr %313, align 8, !tbaa !25
  %315 = load i32, ptr %263, align 4, !tbaa !22
  %316 = load i32, ptr %260, align 4, !tbaa !22
  %317 = sub nsw i32 %315, %316
  %318 = sitofp i32 %317 to float
  %319 = tail call i32 @libmetis__rpqInsert(ptr noundef %314, i32 noundef %251, float noundef %318) #7
  br label %320

320:                                              ; preds = %289, %293, %270, %283, %303, %310, %301
  %.3 = phi i32 [ %271, %283 ], [ %271, %270 ], [ %.2490, %293 ], [ %.2490, %289 ], [ %306, %310 ], [ %306, %303 ], [ %.2490, %301 ]
  %indvars.iv.next556 = add nsw i64 %indvars.iv555, 1
  %321 = load i32, ptr %246, align 4, !tbaa !22
  %322 = sext i32 %321 to i64
  %323 = icmp slt i64 %indvars.iv.next556, %322
  br i1 %323, label %.lr.ph492, label %._crit_edge, !llvm.loop !34

._crit_edge:                                      ; preds = %320, %243
  %.2.lcssa = phi i32 [ %.1429, %243 ], [ %.3, %320 ]
  %indvars.iv.next559 = add nuw nsw i64 %indvars.iv558, 1
  %exitcond562.not = icmp eq i64 %indvars.iv.next559, %wide.trip.count561
  br i1 %exitcond562.not, label %.loopexit463, label %.lr.ph503, !llvm.loop !35

.loopexit463:                                     ; preds = %._crit_edge, %.lr.ph503, %195
  %.0430479 = phi i32 [ %155, %195 ], [ %6, %._crit_edge ], [ %155, %.lr.ph503 ]
  %.0428475 = phi i32 [ %.0428497, %195 ], [ %.2.lcssa, %._crit_edge ], [ %.0428497, %.lr.ph503 ]
  %.0426471 = phi i32 [ %.0426499, %195 ], [ %.1427, %._crit_edge ], [ %.0426499, %.lr.ph503 ]
  %.0421467 = phi i32 [ %.0421502, %195 ], [ %.1422, %._crit_edge ], [ %.0421502, %.lr.ph503 ]
  %.not = icmp eq i32 %.0430479, 0
  br i1 %.not, label %.preheader, label %.lr.ph515.preheader

.lr.ph515.preheader:                              ; preds = %.loopexit463
  %wide.trip.count566 = zext i32 %.0430479 to i64
  %xtraiter = and i64 %wide.trip.count566, 3
  %324 = icmp ult i32 %.0430479, 4
  br i1 %324, label %.preheader.loopexit.unr-lcssa, label %.lr.ph515.preheader.new

.lr.ph515.preheader.new:                          ; preds = %.lr.ph515.preheader
  %unroll_iter = and i64 %wide.trip.count566, 4294967292
  br label %.lr.ph515

.preheader.loopexit.unr-lcssa:                    ; preds = %.lr.ph515, %.lr.ph515.preheader
  %indvars.iv563.unr = phi i64 [ 0, %.lr.ph515.preheader ], [ %indvars.iv.next564.3, %.lr.ph515 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader, label %.lr.ph515.epil

.lr.ph515.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph515.epil
  %indvars.iv563.epil = phi i64 [ %indvars.iv.next564.epil, %.lr.ph515.epil ], [ %indvars.iv563.unr, %.preheader.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph515.epil ], [ 0, %.preheader.loopexit.unr-lcssa ]
  %325 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv563.epil
  %326 = load i32, ptr %325, align 4, !tbaa !22
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %27, i64 %327
  store i32 -1, ptr %328, align 4, !tbaa !22
  %indvars.iv.next564.epil = add nuw nsw i64 %indvars.iv563.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader, label %.lr.ph515.epil, !llvm.loop !36

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %.lr.ph515.epil, %.preheader462, %.loopexit463
  %.0421467586 = phi i32 [ %.0421467, %.loopexit463 ], [ -1, %.preheader462 ], [ %.0421467, %.lr.ph515.epil ], [ %.0421467, %.preheader.loopexit.unr-lcssa ]
  %.0426471585 = phi i32 [ %.0426471, %.loopexit463 ], [ %70, %.preheader462 ], [ %.0426471, %.lr.ph515.epil ], [ %.0426471, %.preheader.loopexit.unr-lcssa ]
  %.0428475584 = phi i32 [ %.0428475, %.loopexit463 ], [ %90, %.preheader462 ], [ %.0428475, %.lr.ph515.epil ], [ %.0428475, %.preheader.loopexit.unr-lcssa ]
  %.0430479583 = phi i32 [ 0, %.loopexit463 ], [ 0, %.preheader462 ], [ %.0430479, %.lr.ph515.epil ], [ %.0430479, %.preheader.loopexit.unr-lcssa ]
  %.1431520 = add nsw i32 %.0430479583, -1
  %329 = icmp sgt i32 %.1431520, %.0421467586
  br i1 %329, label %.lr.ph523.preheader, label %._crit_edge524

.lr.ph523.preheader:                              ; preds = %.preheader
  %330 = sext i32 %.1431520 to i64
  %331 = sext i32 %.0421467586 to i64
  br label %.lr.ph523

.lr.ph515:                                        ; preds = %.lr.ph515, %.lr.ph515.preheader.new
  %indvars.iv563 = phi i64 [ 0, %.lr.ph515.preheader.new ], [ %indvars.iv.next564.3, %.lr.ph515 ]
  %niter = phi i64 [ 0, %.lr.ph515.preheader.new ], [ %niter.next.3, %.lr.ph515 ]
  %332 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv563
  %333 = load i32, ptr %332, align 4, !tbaa !22
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds i32, ptr %27, i64 %334
  store i32 -1, ptr %335, align 4, !tbaa !22
  %indvars.iv.next564 = or disjoint i64 %indvars.iv563, 1
  %336 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv.next564
  %337 = load i32, ptr %336, align 4, !tbaa !22
  %338 = sext i32 %337 to i64
  %339 = getelementptr inbounds i32, ptr %27, i64 %338
  store i32 -1, ptr %339, align 4, !tbaa !22
  %indvars.iv.next564.1 = or disjoint i64 %indvars.iv563, 2
  %340 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv.next564.1
  %341 = load i32, ptr %340, align 4, !tbaa !22
  %342 = sext i32 %341 to i64
  %343 = getelementptr inbounds i32, ptr %27, i64 %342
  store i32 -1, ptr %343, align 4, !tbaa !22
  %indvars.iv.next564.2 = or disjoint i64 %indvars.iv563, 3
  %344 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv.next564.2
  %345 = load i32, ptr %344, align 4, !tbaa !22
  %346 = sext i32 %345 to i64
  %347 = getelementptr inbounds i32, ptr %27, i64 %346
  store i32 -1, ptr %347, align 4, !tbaa !22
  %indvars.iv.next564.3 = add nuw nsw i64 %indvars.iv563, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader.loopexit.unr-lcssa, label %.lr.ph515, !llvm.loop !38

.loopexit:                                        ; preds = %446, %.thread
  %.6.lcssa = phi i32 [ %.5, %.thread ], [ %.8, %446 ]
  %indvars.iv.next572 = add nsw i64 %indvars.iv571, -1
  %348 = icmp sgt i64 %indvars.iv.next572, %331
  br i1 %348, label %.lr.ph523, label %._crit_edge524, !llvm.loop !39

.lr.ph523:                                        ; preds = %.lr.ph523.preheader, %.loopexit
  %indvars.iv571 = phi i64 [ %330, %.lr.ph523.preheader ], [ %indvars.iv.next572, %.loopexit ]
  %.4521 = phi i32 [ %.0428475584, %.lr.ph523.preheader ], [ %.6.lcssa, %.loopexit ]
  %349 = getelementptr inbounds i32, ptr %28, i64 %indvars.iv571
  %350 = load i32, ptr %349, align 4, !tbaa !22
  %351 = sext i32 %350 to i64
  %352 = getelementptr inbounds i32, ptr %16, i64 %351
  %353 = load i32, ptr %352, align 4, !tbaa !22
  %354 = add nsw i32 %353, 1
  %355 = srem i32 %354, 2
  store i32 %355, ptr %352, align 4, !tbaa !22
  %356 = getelementptr inbounds i32, ptr %18, i64 %351
  %357 = load i32, ptr %356, align 4, !tbaa !22
  %358 = getelementptr inbounds i32, ptr %20, i64 %351
  %359 = load i32, ptr %358, align 4, !tbaa !22
  store i32 %359, ptr %356, align 4, !tbaa !22
  store i32 %357, ptr %358, align 4, !tbaa !22
  %360 = icmp eq i32 %357, 0
  br i1 %360, label %361, label %380

361:                                              ; preds = %.lr.ph523
  %362 = getelementptr inbounds i32, ptr %24, i64 %351
  %363 = load i32, ptr %362, align 4, !tbaa !22
  %.not451 = icmp eq i32 %363, -1
  br i1 %.not451, label %.thread, label %364

364:                                              ; preds = %361
  %365 = getelementptr inbounds i32, ptr %8, i64 %351
  %366 = load i32, ptr %365, align 4, !tbaa !22
  %367 = getelementptr i8, ptr %365, i64 4
  %368 = load i32, ptr %367, align 4, !tbaa !22
  %369 = icmp slt i32 %366, %368
  br i1 %369, label %370, label %.thread

370:                                              ; preds = %364
  %371 = add nsw i32 %.4521, -1
  %372 = sext i32 %371 to i64
  %373 = getelementptr inbounds i32, ptr %26, i64 %372
  %374 = load i32, ptr %373, align 4, !tbaa !22
  %375 = sext i32 %363 to i64
  %376 = getelementptr inbounds i32, ptr %26, i64 %375
  store i32 %374, ptr %376, align 4, !tbaa !22
  %377 = load i32, ptr %362, align 4, !tbaa !22
  %378 = sext i32 %374 to i64
  %379 = getelementptr inbounds i32, ptr %24, i64 %378
  store i32 %377, ptr %379, align 4, !tbaa !22
  store i32 -1, ptr %362, align 4, !tbaa !22
  br label %.thread

380:                                              ; preds = %.lr.ph523
  %381 = icmp sgt i32 %357, 0
  br i1 %381, label %382, label %.thread

382:                                              ; preds = %380
  %383 = getelementptr inbounds i32, ptr %24, i64 %351
  %384 = load i32, ptr %383, align 4, !tbaa !22
  %385 = icmp eq i32 %384, -1
  br i1 %385, label %386, label %.thread

386:                                              ; preds = %382
  %387 = sext i32 %.4521 to i64
  %388 = getelementptr inbounds i32, ptr %26, i64 %387
  store i32 %350, ptr %388, align 4, !tbaa !22
  %389 = add nsw i32 %.4521, 1
  store i32 %.4521, ptr %383, align 4, !tbaa !22
  br label %.thread

.thread:                                          ; preds = %361, %364, %370, %386, %382, %380
  %.5 = phi i32 [ %371, %370 ], [ %389, %386 ], [ %.4521, %382 ], [ %.4521, %380 ], [ %.4521, %364 ], [ %.4521, %361 ]
  %390 = getelementptr inbounds i32, ptr %10, i64 %351
  %391 = load i32, ptr %390, align 4, !tbaa !22
  %392 = sext i32 %355 to i64
  %393 = getelementptr inbounds i32, ptr %22, i64 %392
  %394 = load i32, ptr %393, align 4, !tbaa !22
  %395 = add nsw i32 %394, %391
  store i32 %395, ptr %393, align 4, !tbaa !22
  %396 = load i32, ptr %390, align 4, !tbaa !22
  %397 = and i32 %355, 1
  %398 = xor i32 %397, 1
  %399 = zext nneg i32 %398 to i64
  %400 = getelementptr inbounds i32, ptr %22, i64 %399
  %401 = load i32, ptr %400, align 4, !tbaa !22
  %402 = sub nsw i32 %401, %396
  store i32 %402, ptr %400, align 4, !tbaa !22
  %403 = getelementptr inbounds i32, ptr %8, i64 %351
  %404 = load i32, ptr %403, align 4, !tbaa !22
  %405 = getelementptr i8, ptr %403, i64 4
  %406 = load i32, ptr %405, align 4, !tbaa !22
  %407 = icmp slt i32 %404, %406
  br i1 %407, label %.lr.ph518.preheader, label %.loopexit

.lr.ph518.preheader:                              ; preds = %.thread
  %408 = sext i32 %404 to i64
  br label %.lr.ph518

.lr.ph518:                                        ; preds = %.lr.ph518.preheader, %446
  %indvars.iv568 = phi i64 [ %408, %.lr.ph518.preheader ], [ %indvars.iv.next569, %446 ]
  %.6516 = phi i32 [ %.5, %.lr.ph518.preheader ], [ %.8, %446 ]
  %409 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv568
  %410 = load i32, ptr %409, align 4, !tbaa !22
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds i32, ptr %16, i64 %411
  %413 = load i32, ptr %412, align 4, !tbaa !22
  %414 = icmp eq i32 %355, %413
  %415 = getelementptr inbounds i32, ptr %14, i64 %indvars.iv568
  %416 = load i32, ptr %415, align 4, !tbaa !22
  %417 = sub nsw i32 0, %416
  %418 = select i1 %414, i32 %416, i32 %417
  %419 = getelementptr inbounds i32, ptr %18, i64 %411
  %420 = load i32, ptr %419, align 4, !tbaa !22
  %421 = add nsw i32 %420, %418
  store i32 %421, ptr %419, align 4, !tbaa !22
  %422 = getelementptr inbounds i32, ptr %20, i64 %411
  %423 = load i32, ptr %422, align 4, !tbaa !22
  %424 = sub nsw i32 %423, %418
  store i32 %424, ptr %422, align 4, !tbaa !22
  %425 = getelementptr inbounds i32, ptr %24, i64 %411
  %426 = load i32, ptr %425, align 4, !tbaa !22
  %.not452 = icmp ne i32 %426, -1
  %427 = icmp eq i32 %423, %418
  %or.cond = select i1 %.not452, i1 %427, i1 false
  br i1 %or.cond, label %.thread456, label %437

.thread456:                                       ; preds = %.lr.ph518
  %428 = add nsw i32 %.6516, -1
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds i32, ptr %26, i64 %429
  %431 = load i32, ptr %430, align 4, !tbaa !22
  %432 = sext i32 %426 to i64
  %433 = getelementptr inbounds i32, ptr %26, i64 %432
  store i32 %431, ptr %433, align 4, !tbaa !22
  %434 = load i32, ptr %425, align 4, !tbaa !22
  %435 = sext i32 %431 to i64
  %436 = getelementptr inbounds i32, ptr %24, i64 %435
  store i32 %434, ptr %436, align 4, !tbaa !22
  store i32 -1, ptr %425, align 4, !tbaa !22
  %.pre = load i32, ptr %422, align 4, !tbaa !22
  br label %439

437:                                              ; preds = %.lr.ph518
  %438 = icmp eq i32 %426, -1
  br i1 %438, label %439, label %446

439:                                              ; preds = %.thread456, %437
  %440 = phi i32 [ %.pre, %.thread456 ], [ %424, %437 ]
  %.7458 = phi i32 [ %428, %.thread456 ], [ %.6516, %437 ]
  %441 = icmp sgt i32 %440, 0
  br i1 %441, label %442, label %446

442:                                              ; preds = %439
  %443 = sext i32 %.7458 to i64
  %444 = getelementptr inbounds i32, ptr %26, i64 %443
  store i32 %410, ptr %444, align 4, !tbaa !22
  %445 = add nsw i32 %.7458, 1
  store i32 %.7458, ptr %425, align 4, !tbaa !22
  br label %446

446:                                              ; preds = %437, %439, %442
  %.8 = phi i32 [ %445, %442 ], [ %.7458, %439 ], [ %.6516, %437 ]
  %indvars.iv.next569 = add nsw i64 %indvars.iv568, 1
  %447 = load i32, ptr %405, align 4, !tbaa !22
  %448 = sext i32 %447 to i64
  %449 = icmp slt i64 %indvars.iv.next569, %448
  br i1 %449, label %.lr.ph518, label %.loopexit, !llvm.loop !40

._crit_edge524:                                   ; preds = %.loopexit, %.preheader
  %.4.lcssa = phi i32 [ %.0428475584, %.preheader ], [ %.6.lcssa, %.loopexit ]
  store i32 %.0426471585, ptr %65, align 8, !tbaa !30
  store i32 %.4.lcssa, ptr %66, align 8, !tbaa !31
  %450 = load i32, ptr %55, align 8, !tbaa !26
  %451 = and i32 %450, 8
  %.not450 = icmp eq i32 %451, 0
  br i1 %.not450, label %453, label %452

452:                                              ; preds = %._crit_edge524
  tail call void @libmetis__Print2WayRefineStats(ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, float noundef 0.000000e+00, i32 noundef %.0421467586)
  br label %453

453:                                              ; preds = %452, %._crit_edge524
  %454 = icmp slt i32 %.0421467586, 1
  %455 = icmp eq i32 %.0426471585, %70
  %or.cond455 = select i1 %454, i1 true, i1 %455
  %456 = add nuw nsw i32 %.0432526, 1
  %exitcond574.not = icmp eq i32 %456, %3
  %or.cond611 = select i1 %or.cond455, i1 true, i1 %exitcond574.not
  br i1 %or.cond611, label %._crit_edge529, label %69, !llvm.loop !41

._crit_edge529:                                   ; preds = %453, %59
  tail call void @libmetis__rpqDestroy(ptr noundef %52) #7
  tail call void @libmetis__rpqDestroy(ptr noundef %53) #7
  tail call void @libmetis__wspacepop(ptr noundef nonnull %0) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %5) #7
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #2

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

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
declare dso_local void @libmetis__Print2WayRefineStats(ptr noundef, ptr noundef, ptr noundef, float noundef, i32 noundef) local_unnamed_addr #0

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

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

declare void @libmetis__rpqReset(ptr noundef) local_unnamed_addr #2

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

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

; 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 #2

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

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

declare i32 @libmetis__rpqGetTop(ptr noundef) local_unnamed_addr #2

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

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

declare void @libmetis__rpqDestroy(ptr noundef) local_unnamed_addr #2

declare void @libmetis__wspacepop(ptr noundef) local_unnamed_addr #2

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

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nounwind }
attributes #8 = { 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 = !{!10, !10, i64 0}
!26 = !{!27, !7, i64 8}
!27 = !{!"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, !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, !10, i64 232, !29, i64 240, !29, i64 248, !29, 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}
!28 = !{!"double", !8, i64 0}
!29 = !{!"long", !8, i64 0}
!30 = !{!6, !7, i64 112}
!31 = !{!6, !7, i64 136}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !37}
!37 = !{!"llvm.loop.unroll.disable"}
!38 = distinct !{!38, !33}
!39 = distinct !{!39, !33}
!40 = distinct !{!40, !33}
!41 = distinct !{!41, !33}


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