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

; 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 }
%struct.nrinfo_t = type { [2 x i32] }

@.str = external hidden unnamed_addr constant [52 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [136 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided = external hidden unnamed_addr constant [67 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 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 [65 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [55 x i8], align 1

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

124:                                              ; preds = %3
  %125 = load ptr, ptr %21, align 8, !tbaa !5
  %126 = getelementptr inbounds i32, ptr %125, i64 0
  %127 = load i32, ptr %126, align 4, !tbaa !9
  %128 = load ptr, ptr %21, align 8, !tbaa !5
  %129 = getelementptr inbounds i32, ptr %128, i64 1
  %130 = load i32, ptr %129, align 4, !tbaa !9
  %131 = load ptr, ptr %5, align 8, !tbaa !5
  %132 = getelementptr inbounds %struct.graph_t, ptr %131, i32 0, i32 0
  %133 = load i32, ptr %132, align 8, !tbaa !11
  %134 = load ptr, ptr %5, align 8, !tbaa !5
  %135 = getelementptr inbounds %struct.graph_t, ptr %134, i32 0, i32 21
  %136 = load i32, ptr %135, align 8, !tbaa !28
  %137 = load ptr, ptr %5, align 8, !tbaa !5
  %138 = getelementptr inbounds %struct.graph_t, ptr %137, i32 0, i32 17
  %139 = load i32, ptr %138, align 8, !tbaa !29
  %140 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %127, i32 noundef %130, i32 noundef %133, i32 noundef %136, i32 noundef %139)
  br label %141

141:                                              ; preds = %124, %3
  store i32 0, ptr %36, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %1477, %141
  %143 = load i32, ptr %36, align 4, !tbaa !9
  %144 = load i32, ptr %6, align 4, !tbaa !9
  %145 = icmp slt i32 %143, %144
  br i1 %145, label %146, label %1480

146:                                              ; preds = %142
  %147 = load i32, ptr %13, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = load ptr, ptr %27, align 8, !tbaa !5
  %150 = call ptr @libmetis__iset(i64 noundef %148, i32 noundef -1, ptr noundef %149)
  %151 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 0
  %152 = load ptr, ptr %151, align 16, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %152)
  %153 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 1
  %154 = load ptr, ptr %153, align 8, !tbaa !5
  call void @libmetis__rpqReset(ptr noundef %154)
  store i32 -1, ptr %35, align 4, !tbaa !9
  %155 = load ptr, ptr %5, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.graph_t, ptr %155, i32 0, i32 17
  %157 = load i32, ptr %156, align 8, !tbaa !29
  store i32 %157, ptr %33, align 4, !tbaa !9
  store i32 %157, ptr %34, align 4, !tbaa !9
  %158 = load ptr, ptr %5, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.graph_t, ptr %158, i32 0, i32 21
  %160 = load i32, ptr %159, align 8, !tbaa !28
  store i32 %160, ptr %14, align 4, !tbaa !9
  %161 = load i32, ptr %14, align 4, !tbaa !9
  %162 = load ptr, ptr %28, align 8, !tbaa !5
  %163 = load i32, ptr %14, align 4, !tbaa !9
  call void @libmetis__irandArrayPermute(i32 noundef %161, ptr noundef %162, i32 noundef %163, i32 noundef 1)
  store i32 0, ptr %8, align 4, !tbaa !9
  br label %164

164:                                              ; preds = %232, %146
  %165 = load i32, ptr %8, align 4, !tbaa !9
  %166 = load i32, ptr %14, align 4, !tbaa !9
  %167 = icmp slt i32 %165, %166
  br i1 %167, label %168, label %235

168:                                              ; preds = %164
  %169 = load ptr, ptr %23, align 8, !tbaa !5
  %170 = load ptr, ptr %28, align 8, !tbaa !5
  %171 = load i32, ptr %8, align 4, !tbaa !9
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds i32, ptr %170, i64 %172
  %174 = load i32, ptr %173, align 4, !tbaa !9
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds i32, ptr %169, i64 %175
  %177 = load i32, ptr %176, align 4, !tbaa !9
  store i32 %177, ptr %7, align 4, !tbaa !9
  %178 = load ptr, ptr %20, align 8, !tbaa !5
  %179 = load i32, ptr %7, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %178, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !9
  %183 = icmp eq i32 %182, 2
  br i1 %183, label %195, label %184

184:                                              ; preds = %168
  %185 = call i32 (ptr, ...) @printf(ptr noundef @.str.1, i32 noundef 74, ptr noundef @.str.2)
  %186 = load ptr, ptr %20, align 8, !tbaa !5
  %187 = load i32, ptr %7, align 4, !tbaa !9
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds i32, ptr %186, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !9
  %191 = icmp eq i32 %190, 2
  br i1 %191, label %192, label %193

192:                                              ; preds = %184
  br label %194

193:                                              ; preds = %184
  call void @__assert_fail(ptr noundef @.str.3, ptr noundef @.str.2, i32 noundef 74, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

194:                                              ; preds = %192
  br label %195

195:                                              ; preds = %194, %168
  %196 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 0
  %197 = load ptr, ptr %196, align 16, !tbaa !5
  %198 = load i32, ptr %7, align 4, !tbaa !9
  %199 = load ptr, ptr %18, align 8, !tbaa !5
  %200 = load i32, ptr %7, align 4, !tbaa !9
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds i32, ptr %199, i64 %201
  %203 = load i32, ptr %202, align 4, !tbaa !9
  %204 = load ptr, ptr %30, align 8, !tbaa !5
  %205 = load i32, ptr %7, align 4, !tbaa !9
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds %struct.nrinfo_t, ptr %204, i64 %206
  %208 = getelementptr inbounds %struct.nrinfo_t, ptr %207, i32 0, i32 0
  %209 = getelementptr inbounds [2 x i32], ptr %208, i64 0, i64 1
  %210 = load i32, ptr %209, align 4, !tbaa !9
  %211 = sub nsw i32 %203, %210
  %212 = sitofp i32 %211 to float
  %213 = call i32 @libmetis__rpqInsert(ptr noundef %197, i32 noundef %198, float noundef %212)
  %214 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 1
  %215 = load ptr, ptr %214, align 8, !tbaa !5
  %216 = load i32, ptr %7, align 4, !tbaa !9
  %217 = load ptr, ptr %18, align 8, !tbaa !5
  %218 = load i32, ptr %7, align 4, !tbaa !9
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %217, i64 %219
  %221 = load i32, ptr %220, align 4, !tbaa !9
  %222 = load ptr, ptr %30, align 8, !tbaa !5
  %223 = load i32, ptr %7, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds %struct.nrinfo_t, ptr %222, i64 %224
  %226 = getelementptr inbounds %struct.nrinfo_t, ptr %225, i32 0, i32 0
  %227 = getelementptr inbounds [2 x i32], ptr %226, i64 0, i64 0
  %228 = load i32, ptr %227, align 4, !tbaa !9
  %229 = sub nsw i32 %221, %228
  %230 = sitofp i32 %229 to float
  %231 = call i32 @libmetis__rpqInsert(ptr noundef %215, i32 noundef %216, float noundef %230)
  br label %232

232:                                              ; preds = %195
  %233 = load i32, ptr %8, align 4, !tbaa !9
  %234 = add nsw i32 %233, 1
  store i32 %234, ptr %8, align 4, !tbaa !9
  br label %164, !llvm.loop !30

235:                                              ; preds = %164
  %236 = load ptr, ptr %5, align 8, !tbaa !5
  %237 = load i32, ptr %14, align 4, !tbaa !9
  %238 = call i32 @libmetis__CheckNodeBnd(ptr noundef %236, i32 noundef %237)
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %249, label %240

240:                                              ; preds = %235
  %241 = call i32 (ptr, ...) @printf(ptr noundef @.str.4, i32 noundef 79, ptr noundef @.str.2)
  %242 = load ptr, ptr %5, align 8, !tbaa !5
  %243 = load i32, ptr %14, align 4, !tbaa !9
  %244 = call i32 @libmetis__CheckNodeBnd(ptr noundef %242, i32 noundef %243)
  %245 = icmp ne i32 %244, 0
  br i1 %245, label %246, label %247

246:                                              ; preds = %240
  br label %248

247:                                              ; preds = %240
  call void @__assert_fail(ptr noundef @.str.5, ptr noundef @.str.2, i32 noundef 79, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

248:                                              ; preds = %246
  br label %249

249:                                              ; preds = %248, %235
  %250 = load ptr, ptr %5, align 8, !tbaa !5
  %251 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %250)
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %261, label %253

253:                                              ; preds = %249
  %254 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef 80, ptr noundef @.str.2)
  %255 = load ptr, ptr %5, align 8, !tbaa !5
  %256 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %255)
  %257 = icmp ne i32 %256, 0
  br i1 %257, label %258, label %259

258:                                              ; preds = %253
  br label %260

259:                                              ; preds = %253
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.2, i32 noundef 80, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

260:                                              ; preds = %258
  br label %261

261:                                              ; preds = %260, %249
  %262 = load ptr, ptr %4, align 8, !tbaa !5
  %263 = getelementptr inbounds %struct.ctrl_t, ptr %262, i32 0, i32 13
  %264 = load i32, ptr %263, align 4, !tbaa !32
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %276

266:                                              ; preds = %261
  %267 = load i32, ptr %14, align 4, !tbaa !9
  %268 = mul nsw i32 5, %267
  %269 = icmp sge i32 %268, 400
  br i1 %269, label %270, label %271

270:                                              ; preds = %266
  br label %274

271:                                              ; preds = %266
  %272 = load i32, ptr %14, align 4, !tbaa !9
  %273 = mul nsw i32 5, %272
  br label %274

274:                                              ; preds = %271, %270
  %275 = phi i32 [ 400, %270 ], [ %273, %271 ]
  br label %286

276:                                              ; preds = %261
  %277 = load i32, ptr %14, align 4, !tbaa !9
  %278 = mul nsw i32 2, %277
  %279 = icmp sge i32 %278, 300
  br i1 %279, label %280, label %281

280:                                              ; preds = %276
  br label %284

281:                                              ; preds = %276
  %282 = load i32, ptr %14, align 4, !tbaa !9
  %283 = mul nsw i32 2, %282
  br label %284

284:                                              ; preds = %281, %280
  %285 = phi i32 [ 300, %280 ], [ %283, %281 ]
  br label %286

286:                                              ; preds = %284, %274
  %287 = phi i32 [ %275, %274 ], [ %285, %284 ]
  store i32 %287, ptr %39, align 4, !tbaa !9
  store i32 0, ptr %16, align 4, !tbaa !9
  %288 = load ptr, ptr %25, align 8, !tbaa !5
  %289 = getelementptr inbounds i32, ptr %288, i64 0
  store i32 0, ptr %289, align 4, !tbaa !9
  %290 = load ptr, ptr %21, align 8, !tbaa !5
  %291 = getelementptr inbounds i32, ptr %290, i64 0
  %292 = load i32, ptr %291, align 4, !tbaa !9
  %293 = load ptr, ptr %21, align 8, !tbaa !5
  %294 = getelementptr inbounds i32, ptr %293, i64 1
  %295 = load i32, ptr %294, align 4, !tbaa !9
  %296 = sub nsw i32 %292, %295
  %297 = call i32 @llvm.abs.i32(i32 %296, i1 true)
  store i32 %297, ptr %41, align 4, !tbaa !9
  %298 = load ptr, ptr %21, align 8, !tbaa !5
  %299 = getelementptr inbounds i32, ptr %298, i64 0
  %300 = load i32, ptr %299, align 4, !tbaa !9
  %301 = load ptr, ptr %21, align 8, !tbaa !5
  %302 = getelementptr inbounds i32, ptr %301, i64 1
  %303 = load i32, ptr %302, align 4, !tbaa !9
  %304 = icmp slt i32 %300, %303
  %305 = zext i1 %304 to i64
  %306 = select i1 %304, i32 0, i32 1
  store i32 %306, ptr %37, align 4, !tbaa !9
  store i32 0, ptr %15, align 4, !tbaa !9
  br label %307

307:                                              ; preds = %1089, %286
  %308 = load i32, ptr %15, align 4, !tbaa !9
  %309 = load i32, ptr %13, align 4, !tbaa !9
  %310 = icmp slt i32 %308, %309
  br i1 %310, label %311, label %1092

311:                                              ; preds = %307
  %312 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 0
  %313 = load ptr, ptr %312, align 16, !tbaa !5
  %314 = call i32 @libmetis__rpqSeeTopVal(ptr noundef %313)
  %315 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  store i32 %314, ptr %315, align 4, !tbaa !9
  %316 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 1
  %317 = load ptr, ptr %316, align 8, !tbaa !5
  %318 = call i32 @libmetis__rpqSeeTopVal(ptr noundef %317)
  %319 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  store i32 %318, ptr %319, align 4, !tbaa !9
  %320 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %321 = load i32, ptr %320, align 4, !tbaa !9
  %322 = icmp ne i32 %321, -1
  br i1 %322, label %323, label %401

323:                                              ; preds = %311
  %324 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %325 = load i32, ptr %324, align 4, !tbaa !9
  %326 = icmp ne i32 %325, -1
  br i1 %326, label %327, label %401

327:                                              ; preds = %323
  %328 = load ptr, ptr %18, align 8, !tbaa !5
  %329 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %330 = load i32, ptr %329, align 4, !tbaa !9
  %331 = sext i32 %330 to i64
  %332 = getelementptr inbounds i32, ptr %328, i64 %331
  %333 = load i32, ptr %332, align 4, !tbaa !9
  %334 = load ptr, ptr %30, align 8, !tbaa !5
  %335 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %336 = load i32, ptr %335, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds %struct.nrinfo_t, ptr %334, i64 %337
  %339 = getelementptr inbounds %struct.nrinfo_t, ptr %338, i32 0, i32 0
  %340 = getelementptr inbounds [2 x i32], ptr %339, i64 0, i64 1
  %341 = load i32, ptr %340, align 4, !tbaa !9
  %342 = sub nsw i32 %333, %341
  %343 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 0
  store i32 %342, ptr %343, align 4, !tbaa !9
  %344 = load ptr, ptr %18, align 8, !tbaa !5
  %345 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %346 = load i32, ptr %345, align 4, !tbaa !9
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds i32, ptr %344, i64 %347
  %349 = load i32, ptr %348, align 4, !tbaa !9
  %350 = load ptr, ptr %30, align 8, !tbaa !5
  %351 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %352 = load i32, ptr %351, align 4, !tbaa !9
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds %struct.nrinfo_t, ptr %350, i64 %353
  %355 = getelementptr inbounds %struct.nrinfo_t, ptr %354, i32 0, i32 0
  %356 = getelementptr inbounds [2 x i32], ptr %355, i64 0, i64 0
  %357 = load i32, ptr %356, align 4, !tbaa !9
  %358 = sub nsw i32 %349, %357
  %359 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 1
  store i32 %358, ptr %359, align 4, !tbaa !9
  %360 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 0
  %361 = load i32, ptr %360, align 4, !tbaa !9
  %362 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 1
  %363 = load i32, ptr %362, align 4, !tbaa !9
  %364 = icmp sgt i32 %361, %363
  br i1 %364, label %365, label %366

365:                                              ; preds = %327
  br label %378

366:                                              ; preds = %327
  %367 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 0
  %368 = load i32, ptr %367, align 4, !tbaa !9
  %369 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 1
  %370 = load i32, ptr %369, align 4, !tbaa !9
  %371 = icmp slt i32 %368, %370
  br i1 %371, label %372, label %373

372:                                              ; preds = %366
  br label %376

373:                                              ; preds = %366
  %374 = load i32, ptr %36, align 4, !tbaa !9
  %375 = srem i32 %374, 2
  br label %376

376:                                              ; preds = %373, %372
  %377 = phi i32 [ 1, %372 ], [ %375, %373 ]
  br label %378

378:                                              ; preds = %376, %365
  %379 = phi i32 [ 0, %365 ], [ %377, %376 ]
  store i32 %379, ptr %37, align 4, !tbaa !9
  %380 = load ptr, ptr %21, align 8, !tbaa !5
  %381 = load i32, ptr %37, align 4, !tbaa !9
  %382 = sext i32 %381 to i64
  %383 = getelementptr inbounds i32, ptr %380, i64 %382
  %384 = load i32, ptr %383, align 4, !tbaa !9
  %385 = load ptr, ptr %18, align 8, !tbaa !5
  %386 = load i32, ptr %37, align 4, !tbaa !9
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 %387
  %389 = load i32, ptr %388, align 4, !tbaa !9
  %390 = sext i32 %389 to i64
  %391 = getelementptr inbounds i32, ptr %385, i64 %390
  %392 = load i32, ptr %391, align 4, !tbaa !9
  %393 = add nsw i32 %384, %392
  %394 = load i32, ptr %40, align 4, !tbaa !9
  %395 = icmp sgt i32 %393, %394
  br i1 %395, label %396, label %400

396:                                              ; preds = %378
  %397 = load i32, ptr %37, align 4, !tbaa !9
  %398 = add nsw i32 %397, 1
  %399 = srem i32 %398, 2
  store i32 %399, ptr %37, align 4, !tbaa !9
  br label %400

400:                                              ; preds = %396, %378
  br label %450

401:                                              ; preds = %323, %311
  %402 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %403 = load i32, ptr %402, align 4, !tbaa !9
  %404 = icmp eq i32 %403, -1
  br i1 %404, label %405, label %410

405:                                              ; preds = %401
  %406 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %407 = load i32, ptr %406, align 4, !tbaa !9
  %408 = icmp eq i32 %407, -1
  br i1 %408, label %409, label %410

409:                                              ; preds = %405
  br label %1092

410:                                              ; preds = %405, %401
  %411 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %412 = load i32, ptr %411, align 4, !tbaa !9
  %413 = icmp ne i32 %412, -1
  br i1 %413, label %414, label %428

414:                                              ; preds = %410
  %415 = load ptr, ptr %21, align 8, !tbaa !5
  %416 = getelementptr inbounds i32, ptr %415, i64 0
  %417 = load i32, ptr %416, align 4, !tbaa !9
  %418 = load ptr, ptr %18, align 8, !tbaa !5
  %419 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 0
  %420 = load i32, ptr %419, align 4, !tbaa !9
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds i32, ptr %418, i64 %421
  %423 = load i32, ptr %422, align 4, !tbaa !9
  %424 = add nsw i32 %417, %423
  %425 = load i32, ptr %40, align 4, !tbaa !9
  %426 = icmp sle i32 %424, %425
  br i1 %426, label %427, label %428

427:                                              ; preds = %414
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %448

428:                                              ; preds = %414, %410
  %429 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %430 = load i32, ptr %429, align 4, !tbaa !9
  %431 = icmp ne i32 %430, -1
  br i1 %431, label %432, label %446

432:                                              ; preds = %428
  %433 = load ptr, ptr %21, align 8, !tbaa !5
  %434 = getelementptr inbounds i32, ptr %433, i64 1
  %435 = load i32, ptr %434, align 4, !tbaa !9
  %436 = load ptr, ptr %18, align 8, !tbaa !5
  %437 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 1
  %438 = load i32, ptr %437, align 4, !tbaa !9
  %439 = sext i32 %438 to i64
  %440 = getelementptr inbounds i32, ptr %436, i64 %439
  %441 = load i32, ptr %440, align 4, !tbaa !9
  %442 = add nsw i32 %435, %441
  %443 = load i32, ptr %40, align 4, !tbaa !9
  %444 = icmp sle i32 %442, %443
  br i1 %444, label %445, label %446

445:                                              ; preds = %432
  store i32 1, ptr %37, align 4, !tbaa !9
  br label %447

446:                                              ; preds = %432, %428
  br label %1092

447:                                              ; preds = %445
  br label %448

448:                                              ; preds = %447, %427
  br label %449

449:                                              ; preds = %448
  br label %450

450:                                              ; preds = %449, %400
  %451 = load i32, ptr %37, align 4, !tbaa !9
  %452 = add nsw i32 %451, 1
  %453 = srem i32 %452, 2
  store i32 %453, ptr %38, align 4, !tbaa !9
  %454 = load i32, ptr %37, align 4, !tbaa !9
  %455 = sext i32 %454 to i64
  %456 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 %455
  %457 = load ptr, ptr %456, align 8, !tbaa !5
  %458 = call i32 @libmetis__rpqGetTop(ptr noundef %457)
  store i32 %458, ptr %31, align 4, !tbaa !9
  %459 = load ptr, ptr %27, align 8, !tbaa !5
  %460 = load i32, ptr %31, 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 = icmp eq i32 %463, -1
  br i1 %464, label %465, label %472

465:                                              ; preds = %450
  %466 = load i32, ptr %38, align 4, !tbaa !9
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 %467
  %469 = load ptr, ptr %468, align 8, !tbaa !5
  %470 = load i32, ptr %31, align 4, !tbaa !9
  %471 = call i32 @libmetis__rpqDelete(ptr noundef %469, i32 noundef %470)
  br label %472

472:                                              ; preds = %465, %450
  %473 = load ptr, ptr %24, align 8, !tbaa !5
  %474 = load i32, ptr %31, align 4, !tbaa !9
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i32, ptr %473, i64 %475
  %477 = load i32, ptr %476, align 4, !tbaa !9
  %478 = icmp ne i32 %477, -1
  br i1 %478, label %490, label %479

479:                                              ; preds = %472
  %480 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef 120, ptr noundef @.str.2)
  %481 = load ptr, ptr %24, align 8, !tbaa !5
  %482 = load i32, ptr %31, align 4, !tbaa !9
  %483 = sext i32 %482 to i64
  %484 = getelementptr inbounds i32, ptr %481, i64 %483
  %485 = load i32, ptr %484, align 4, !tbaa !9
  %486 = icmp ne i32 %485, -1
  br i1 %486, label %487, label %488

487:                                              ; preds = %479
  br label %489

488:                                              ; preds = %479
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 120, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

489:                                              ; preds = %487
  br label %490

490:                                              ; preds = %489, %472
  %491 = load i32, ptr %16, align 4, !tbaa !9
  %492 = load ptr, ptr %17, align 8, !tbaa !5
  %493 = load i32, ptr %31, align 4, !tbaa !9
  %494 = add nsw i32 %493, 1
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds i32, ptr %492, i64 %495
  %497 = load i32, ptr %496, align 4, !tbaa !9
  %498 = add nsw i32 %491, %497
  %499 = load ptr, ptr %17, align 8, !tbaa !5
  %500 = load i32, ptr %31, align 4, !tbaa !9
  %501 = sext i32 %500 to i64
  %502 = getelementptr inbounds i32, ptr %499, i64 %501
  %503 = load i32, ptr %502, align 4, !tbaa !9
  %504 = sub nsw i32 %498, %503
  %505 = load i32, ptr %13, align 4, !tbaa !9
  %506 = mul nsw i32 2, %505
  %507 = sub nsw i32 %506, 1
  %508 = icmp sge i32 %504, %507
  br i1 %508, label %509, label %510

509:                                              ; preds = %490
  br label %1092

510:                                              ; preds = %490
  %511 = load ptr, ptr %18, align 8, !tbaa !5
  %512 = load i32, ptr %31, align 4, !tbaa !9
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds i32, ptr %511, i64 %513
  %515 = load i32, ptr %514, align 4, !tbaa !9
  %516 = load ptr, ptr %30, align 8, !tbaa !5
  %517 = load i32, ptr %31, align 4, !tbaa !9
  %518 = sext i32 %517 to i64
  %519 = getelementptr inbounds %struct.nrinfo_t, ptr %516, i64 %518
  %520 = getelementptr inbounds %struct.nrinfo_t, ptr %519, i32 0, i32 0
  %521 = load i32, ptr %38, align 4, !tbaa !9
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds [2 x i32], ptr %520, i64 0, i64 %522
  %524 = load i32, ptr %523, align 4, !tbaa !9
  %525 = sub nsw i32 %515, %524
  %526 = load ptr, ptr %21, align 8, !tbaa !5
  %527 = getelementptr inbounds i32, ptr %526, i64 2
  %528 = load i32, ptr %527, align 4, !tbaa !9
  %529 = sub nsw i32 %528, %525
  store i32 %529, ptr %527, align 4, !tbaa !9
  %530 = load ptr, ptr %21, align 8, !tbaa !5
  %531 = load i32, ptr %37, align 4, !tbaa !9
  %532 = sext i32 %531 to i64
  %533 = getelementptr inbounds i32, ptr %530, i64 %532
  %534 = load i32, ptr %533, align 4, !tbaa !9
  %535 = load ptr, ptr %18, align 8, !tbaa !5
  %536 = load i32, ptr %31, align 4, !tbaa !9
  %537 = sext i32 %536 to i64
  %538 = getelementptr inbounds i32, ptr %535, i64 %537
  %539 = load i32, ptr %538, align 4, !tbaa !9
  %540 = add nsw i32 %534, %539
  %541 = load ptr, ptr %21, align 8, !tbaa !5
  %542 = load i32, ptr %38, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds i32, ptr %541, i64 %543
  %545 = load i32, ptr %544, align 4, !tbaa !9
  %546 = load ptr, ptr %30, align 8, !tbaa !5
  %547 = load i32, ptr %31, align 4, !tbaa !9
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds %struct.nrinfo_t, ptr %546, i64 %548
  %550 = getelementptr inbounds %struct.nrinfo_t, ptr %549, i32 0, i32 0
  %551 = load i32, ptr %38, align 4, !tbaa !9
  %552 = sext i32 %551 to i64
  %553 = getelementptr inbounds [2 x i32], ptr %550, i64 0, i64 %552
  %554 = load i32, ptr %553, align 4, !tbaa !9
  %555 = sub nsw i32 %545, %554
  %556 = sub nsw i32 %540, %555
  %557 = call i32 @llvm.abs.i32(i32 %556, i1 true)
  store i32 %557, ptr %42, align 4, !tbaa !9
  %558 = load ptr, ptr %21, align 8, !tbaa !5
  %559 = getelementptr inbounds i32, ptr %558, i64 2
  %560 = load i32, ptr %559, align 4, !tbaa !9
  %561 = load i32, ptr %33, align 4, !tbaa !9
  %562 = icmp slt i32 %560, %561
  br i1 %562, label %573, label %563

563:                                              ; preds = %510
  %564 = load ptr, ptr %21, align 8, !tbaa !5
  %565 = getelementptr inbounds i32, ptr %564, i64 2
  %566 = load i32, ptr %565, align 4, !tbaa !9
  %567 = load i32, ptr %33, align 4, !tbaa !9
  %568 = icmp eq i32 %566, %567
  br i1 %568, label %569, label %579

569:                                              ; preds = %563
  %570 = load i32, ptr %42, align 4, !tbaa !9
  %571 = load i32, ptr %41, align 4, !tbaa !9
  %572 = icmp slt i32 %570, %571
  br i1 %572, label %573, label %579

573:                                              ; preds = %569, %510
  %574 = load ptr, ptr %21, align 8, !tbaa !5
  %575 = getelementptr inbounds i32, ptr %574, i64 2
  %576 = load i32, ptr %575, align 4, !tbaa !9
  store i32 %576, ptr %33, align 4, !tbaa !9
  %577 = load i32, ptr %15, align 4, !tbaa !9
  store i32 %577, ptr %35, align 4, !tbaa !9
  %578 = load i32, ptr %42, align 4, !tbaa !9
  store i32 %578, ptr %41, align 4, !tbaa !9
  br label %622

579:                                              ; preds = %569, %563
  %580 = load i32, ptr %15, align 4, !tbaa !9
  %581 = load i32, ptr %35, align 4, !tbaa !9
  %582 = sub nsw i32 %580, %581
  %583 = load i32, ptr %39, align 4, !tbaa !9
  %584 = mul nsw i32 2, %583
  %585 = icmp sgt i32 %582, %584
  br i1 %585, label %601, label %586

586:                                              ; preds = %579
  %587 = load i32, ptr %15, align 4, !tbaa !9
  %588 = load i32, ptr %35, align 4, !tbaa !9
  %589 = sub nsw i32 %587, %588
  %590 = load i32, ptr %39, align 4, !tbaa !9
  %591 = icmp sgt i32 %589, %590
  br i1 %591, label %592, label %621

592:                                              ; preds = %586
  %593 = load ptr, ptr %21, align 8, !tbaa !5
  %594 = getelementptr inbounds i32, ptr %593, i64 2
  %595 = load i32, ptr %594, align 4, !tbaa !9
  %596 = sitofp i32 %595 to double
  %597 = load i32, ptr %33, align 4, !tbaa !9
  %598 = sitofp i32 %597 to double
  %599 = fmul double 1.100000e+00, %598
  %600 = fcmp ogt double %596, %599
  br i1 %600, label %601, label %621

601:                                              ; preds = %592, %579
  %602 = load ptr, ptr %18, align 8, !tbaa !5
  %603 = load i32, ptr %31, align 4, !tbaa !9
  %604 = sext i32 %603 to i64
  %605 = getelementptr inbounds i32, ptr %602, i64 %604
  %606 = load i32, ptr %605, align 4, !tbaa !9
  %607 = load ptr, ptr %30, align 8, !tbaa !5
  %608 = load i32, ptr %31, align 4, !tbaa !9
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds %struct.nrinfo_t, ptr %607, i64 %609
  %611 = getelementptr inbounds %struct.nrinfo_t, ptr %610, i32 0, i32 0
  %612 = load i32, ptr %38, align 4, !tbaa !9
  %613 = sext i32 %612 to i64
  %614 = getelementptr inbounds [2 x i32], ptr %611, i64 0, i64 %613
  %615 = load i32, ptr %614, align 4, !tbaa !9
  %616 = sub nsw i32 %606, %615
  %617 = load ptr, ptr %21, align 8, !tbaa !5
  %618 = getelementptr inbounds i32, ptr %617, i64 2
  %619 = load i32, ptr %618, align 4, !tbaa !9
  %620 = add nsw i32 %619, %616
  store i32 %620, ptr %618, align 4, !tbaa !9
  br label %1092

621:                                              ; preds = %592, %586
  br label %622

622:                                              ; preds = %621, %573
  br label %623

623:                                              ; preds = %622
  %624 = load ptr, ptr %24, align 8, !tbaa !5
  %625 = load i32, ptr %31, align 4, !tbaa !9
  %626 = sext i32 %625 to i64
  %627 = getelementptr inbounds i32, ptr %624, i64 %626
  %628 = load i32, ptr %627, align 4, !tbaa !9
  %629 = icmp ne i32 %628, -1
  br i1 %629, label %641, label %630

630:                                              ; preds = %623
  %631 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef 143, ptr noundef @.str.2)
  %632 = load ptr, ptr %24, align 8, !tbaa !5
  %633 = load i32, ptr %31, align 4, !tbaa !9
  %634 = sext i32 %633 to i64
  %635 = getelementptr inbounds i32, ptr %632, i64 %634
  %636 = load i32, ptr %635, align 4, !tbaa !9
  %637 = icmp ne i32 %636, -1
  br i1 %637, label %638, label %639

638:                                              ; preds = %630
  br label %640

639:                                              ; preds = %630
  call void @__assert_fail(ptr noundef @.str.9, ptr noundef @.str.2, i32 noundef 143, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

640:                                              ; preds = %638
  br label %641

641:                                              ; preds = %640, %623
  %642 = load ptr, ptr %23, align 8, !tbaa !5
  %643 = load i32, ptr %14, align 4, !tbaa !9
  %644 = add nsw i32 %643, -1
  store i32 %644, ptr %14, align 4, !tbaa !9
  %645 = sext i32 %644 to i64
  %646 = getelementptr inbounds i32, ptr %642, i64 %645
  %647 = load i32, ptr %646, align 4, !tbaa !9
  %648 = load ptr, ptr %23, align 8, !tbaa !5
  %649 = load ptr, ptr %24, align 8, !tbaa !5
  %650 = load i32, ptr %31, align 4, !tbaa !9
  %651 = sext i32 %650 to i64
  %652 = getelementptr inbounds i32, ptr %649, i64 %651
  %653 = load i32, ptr %652, align 4, !tbaa !9
  %654 = sext i32 %653 to i64
  %655 = getelementptr inbounds i32, ptr %648, i64 %654
  store i32 %647, ptr %655, align 4, !tbaa !9
  %656 = load ptr, ptr %24, align 8, !tbaa !5
  %657 = load i32, ptr %31, align 4, !tbaa !9
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds i32, ptr %656, i64 %658
  %660 = load i32, ptr %659, align 4, !tbaa !9
  %661 = load ptr, ptr %24, align 8, !tbaa !5
  %662 = load ptr, ptr %23, align 8, !tbaa !5
  %663 = load i32, ptr %14, align 4, !tbaa !9
  %664 = sext i32 %663 to i64
  %665 = getelementptr inbounds i32, ptr %662, i64 %664
  %666 = load i32, ptr %665, align 4, !tbaa !9
  %667 = sext i32 %666 to i64
  %668 = getelementptr inbounds i32, ptr %661, i64 %667
  store i32 %660, ptr %668, align 4, !tbaa !9
  %669 = load ptr, ptr %24, align 8, !tbaa !5
  %670 = load i32, ptr %31, align 4, !tbaa !9
  %671 = sext i32 %670 to i64
  %672 = getelementptr inbounds i32, ptr %669, i64 %671
  store i32 -1, ptr %672, align 4, !tbaa !9
  br label %673

673:                                              ; preds = %641
  br label %674

674:                                              ; preds = %673
  %675 = load ptr, ptr %18, align 8, !tbaa !5
  %676 = load i32, ptr %31, align 4, !tbaa !9
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds i32, ptr %675, i64 %677
  %679 = load i32, ptr %678, align 4, !tbaa !9
  %680 = load ptr, ptr %21, 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 = add nsw i32 %684, %679
  store i32 %685, ptr %683, align 4, !tbaa !9
  %686 = load i32, ptr %37, align 4, !tbaa !9
  %687 = load ptr, ptr %20, align 8, !tbaa !5
  %688 = load i32, ptr %31, align 4, !tbaa !9
  %689 = sext i32 %688 to i64
  %690 = getelementptr inbounds i32, ptr %687, i64 %689
  store i32 %686, ptr %690, align 4, !tbaa !9
  %691 = load i32, ptr %15, align 4, !tbaa !9
  %692 = load ptr, ptr %27, align 8, !tbaa !5
  %693 = load i32, ptr %31, align 4, !tbaa !9
  %694 = sext i32 %693 to i64
  %695 = getelementptr inbounds i32, ptr %692, i64 %694
  store i32 %691, ptr %695, align 4, !tbaa !9
  %696 = load i32, ptr %31, align 4, !tbaa !9
  %697 = load ptr, ptr %28, align 8, !tbaa !5
  %698 = load i32, ptr %15, align 4, !tbaa !9
  %699 = sext i32 %698 to i64
  %700 = getelementptr inbounds i32, ptr %697, i64 %699
  store i32 %696, ptr %700, align 4, !tbaa !9
  %701 = load ptr, ptr %17, align 8, !tbaa !5
  %702 = load i32, ptr %31, align 4, !tbaa !9
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds i32, ptr %701, i64 %703
  %705 = load i32, ptr %704, align 4, !tbaa !9
  store i32 %705, ptr %9, align 4, !tbaa !9
  br label %706

706:                                              ; preds = %1036, %674
  %707 = load i32, ptr %9, align 4, !tbaa !9
  %708 = load ptr, ptr %17, align 8, !tbaa !5
  %709 = load i32, ptr %31, align 4, !tbaa !9
  %710 = add nsw i32 %709, 1
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds i32, ptr %708, i64 %711
  %713 = load i32, ptr %712, align 4, !tbaa !9
  %714 = icmp slt i32 %707, %713
  br i1 %714, label %715, label %1039

715:                                              ; preds = %706
  %716 = load ptr, ptr %19, align 8, !tbaa !5
  %717 = load i32, ptr %9, align 4, !tbaa !9
  %718 = sext i32 %717 to i64
  %719 = getelementptr inbounds i32, ptr %716, i64 %718
  %720 = load i32, ptr %719, align 4, !tbaa !9
  store i32 %720, ptr %10, align 4, !tbaa !9
  %721 = load ptr, ptr %20, align 8, !tbaa !5
  %722 = load i32, ptr %10, align 4, !tbaa !9
  %723 = sext i32 %722 to i64
  %724 = getelementptr inbounds i32, ptr %721, i64 %723
  %725 = load i32, ptr %724, align 4, !tbaa !9
  %726 = icmp eq i32 %725, 2
  br i1 %726, label %727, label %789

727:                                              ; preds = %715
  %728 = load ptr, ptr %18, align 8, !tbaa !5
  %729 = load i32, ptr %10, 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 = load ptr, ptr %30, align 8, !tbaa !5
  %734 = load i32, ptr %10, align 4, !tbaa !9
  %735 = sext i32 %734 to i64
  %736 = getelementptr inbounds %struct.nrinfo_t, ptr %733, i64 %735
  %737 = getelementptr inbounds %struct.nrinfo_t, ptr %736, i32 0, i32 0
  %738 = load i32, ptr %37, align 4, !tbaa !9
  %739 = sext i32 %738 to i64
  %740 = getelementptr inbounds [2 x i32], ptr %737, i64 0, i64 %739
  %741 = load i32, ptr %740, align 4, !tbaa !9
  %742 = sub nsw i32 %732, %741
  store i32 %742, ptr %32, align 4, !tbaa !9
  %743 = load ptr, ptr %18, align 8, !tbaa !5
  %744 = load i32, ptr %31, align 4, !tbaa !9
  %745 = sext i32 %744 to i64
  %746 = getelementptr inbounds i32, ptr %743, i64 %745
  %747 = load i32, ptr %746, align 4, !tbaa !9
  %748 = load ptr, ptr %30, align 8, !tbaa !5
  %749 = load i32, ptr %10, align 4, !tbaa !9
  %750 = sext i32 %749 to i64
  %751 = getelementptr inbounds %struct.nrinfo_t, ptr %748, i64 %750
  %752 = getelementptr inbounds %struct.nrinfo_t, ptr %751, i32 0, i32 0
  %753 = load i32, ptr %37, align 4, !tbaa !9
  %754 = sext i32 %753 to i64
  %755 = getelementptr inbounds [2 x i32], ptr %752, i64 0, i64 %754
  %756 = load i32, ptr %755, align 4, !tbaa !9
  %757 = add nsw i32 %756, %747
  store i32 %757, ptr %755, align 4, !tbaa !9
  %758 = load ptr, ptr %27, align 8, !tbaa !5
  %759 = load i32, ptr %10, 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 = icmp eq i32 %762, -1
  br i1 %763, label %774, label %764

764:                                              ; preds = %727
  %765 = load ptr, ptr %27, align 8, !tbaa !5
  %766 = load i32, ptr %10, align 4, !tbaa !9
  %767 = sext i32 %766 to i64
  %768 = getelementptr inbounds i32, ptr %765, i64 %767
  %769 = load i32, ptr %768, align 4, !tbaa !9
  %770 = load i32, ptr %38, align 4, !tbaa !9
  %771 = add nsw i32 2, %770
  %772 = sub nsw i32 0, %771
  %773 = icmp eq i32 %769, %772
  br i1 %773, label %774, label %788

774:                                              ; preds = %764, %727
  %775 = load i32, ptr %38, align 4, !tbaa !9
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 %776
  %778 = load ptr, ptr %777, align 8, !tbaa !5
  %779 = load i32, ptr %10, align 4, !tbaa !9
  %780 = load i32, ptr %32, align 4, !tbaa !9
  %781 = load ptr, ptr %18, align 8, !tbaa !5
  %782 = load i32, ptr %31, 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 = sub nsw i32 %780, %785
  %787 = sitofp i32 %786 to float
  call void @libmetis__rpqUpdate(ptr noundef %778, i32 noundef %779, float noundef %787)
  br label %788

788:                                              ; preds = %774, %764
  br label %1035

789:                                              ; preds = %715
  %790 = load ptr, ptr %20, align 8, !tbaa !5
  %791 = load i32, ptr %10, align 4, !tbaa !9
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds i32, ptr %790, i64 %792
  %794 = load i32, ptr %793, align 4, !tbaa !9
  %795 = load i32, ptr %38, align 4, !tbaa !9
  %796 = icmp eq i32 %794, %795
  br i1 %796, label %797, label %1034

797:                                              ; preds = %789
  %798 = load ptr, ptr %24, align 8, !tbaa !5
  %799 = load i32, ptr %10, align 4, !tbaa !9
  %800 = sext i32 %799 to i64
  %801 = getelementptr inbounds i32, ptr %798, i64 %800
  %802 = load i32, ptr %801, align 4, !tbaa !9
  %803 = icmp eq i32 %802, -1
  br i1 %803, label %828, label %804

804:                                              ; preds = %797
  %805 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 162, ptr noundef @.str.2)
  %806 = load i32, ptr %10, align 4, !tbaa !9
  %807 = load ptr, ptr %24, align 8, !tbaa !5
  %808 = load i32, ptr %10, align 4, !tbaa !9
  %809 = sext i32 %808 to i64
  %810 = getelementptr inbounds i32, ptr %807, i64 %809
  %811 = load i32, ptr %810, align 4, !tbaa !9
  %812 = load ptr, ptr %20, align 8, !tbaa !5
  %813 = load i32, ptr %10, align 4, !tbaa !9
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds i32, ptr %812, i64 %814
  %816 = load i32, ptr %815, align 4, !tbaa !9
  %817 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %806, i32 noundef %811, i32 noundef %816)
  %818 = call i32 (ptr, ...) @printf(ptr noundef @.str.12)
  %819 = load ptr, ptr %24, align 8, !tbaa !5
  %820 = load i32, ptr %10, 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 = icmp eq i32 %823, -1
  br i1 %824, label %825, label %826

825:                                              ; preds = %804
  br label %827

826:                                              ; preds = %804
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.2, i32 noundef 162, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

827:                                              ; preds = %825
  br label %828

828:                                              ; preds = %827, %797
  br label %829

829:                                              ; preds = %828
  %830 = load ptr, ptr %24, align 8, !tbaa !5
  %831 = load i32, ptr %10, align 4, !tbaa !9
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds i32, ptr %830, i64 %832
  %834 = load i32, ptr %833, align 4, !tbaa !9
  %835 = icmp eq i32 %834, -1
  br i1 %835, label %847, label %836

836:                                              ; preds = %829
  %837 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef 163, ptr noundef @.str.2)
  %838 = load ptr, ptr %24, align 8, !tbaa !5
  %839 = load i32, ptr %10, align 4, !tbaa !9
  %840 = sext i32 %839 to i64
  %841 = getelementptr inbounds i32, ptr %838, i64 %840
  %842 = load i32, ptr %841, align 4, !tbaa !9
  %843 = icmp eq i32 %842, -1
  br i1 %843, label %844, label %845

844:                                              ; preds = %836
  br label %846

845:                                              ; preds = %836
  call void @__assert_fail(ptr noundef @.str.13, ptr noundef @.str.2, i32 noundef 163, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

846:                                              ; preds = %844
  br label %847

847:                                              ; preds = %846, %829
  %848 = load i32, ptr %10, align 4, !tbaa !9
  %849 = load ptr, ptr %23, align 8, !tbaa !5
  %850 = load i32, ptr %14, align 4, !tbaa !9
  %851 = sext i32 %850 to i64
  %852 = getelementptr inbounds i32, ptr %849, i64 %851
  store i32 %848, ptr %852, align 4, !tbaa !9
  %853 = load i32, ptr %14, align 4, !tbaa !9
  %854 = add nsw i32 %853, 1
  store i32 %854, ptr %14, align 4, !tbaa !9
  %855 = load ptr, ptr %24, align 8, !tbaa !5
  %856 = load i32, ptr %10, align 4, !tbaa !9
  %857 = sext i32 %856 to i64
  %858 = getelementptr inbounds i32, ptr %855, i64 %857
  store i32 %853, ptr %858, align 4, !tbaa !9
  br label %859

859:                                              ; preds = %847
  br label %860

860:                                              ; preds = %859
  %861 = load i32, ptr %10, align 4, !tbaa !9
  %862 = load ptr, ptr %26, align 8, !tbaa !5
  %863 = load i32, ptr %16, align 4, !tbaa !9
  %864 = add nsw i32 %863, 1
  store i32 %864, ptr %16, align 4, !tbaa !9
  %865 = sext i32 %863 to i64
  %866 = getelementptr inbounds i32, ptr %862, i64 %865
  store i32 %861, ptr %866, align 4, !tbaa !9
  %867 = load ptr, ptr %20, align 8, !tbaa !5
  %868 = load i32, ptr %10, align 4, !tbaa !9
  %869 = sext i32 %868 to i64
  %870 = getelementptr inbounds i32, ptr %867, i64 %869
  store i32 2, ptr %870, align 4, !tbaa !9
  %871 = load ptr, ptr %18, align 8, !tbaa !5
  %872 = load i32, ptr %10, align 4, !tbaa !9
  %873 = sext i32 %872 to i64
  %874 = getelementptr inbounds i32, ptr %871, i64 %873
  %875 = load i32, ptr %874, align 4, !tbaa !9
  %876 = load ptr, ptr %21, align 8, !tbaa !5
  %877 = load i32, ptr %38, align 4, !tbaa !9
  %878 = sext i32 %877 to i64
  %879 = getelementptr inbounds i32, ptr %876, i64 %878
  %880 = load i32, ptr %879, align 4, !tbaa !9
  %881 = sub nsw i32 %880, %875
  store i32 %881, ptr %879, align 4, !tbaa !9
  %882 = load ptr, ptr %30, align 8, !tbaa !5
  %883 = load i32, ptr %10, align 4, !tbaa !9
  %884 = sext i32 %883 to i64
  %885 = getelementptr inbounds %struct.nrinfo_t, ptr %882, i64 %884
  %886 = getelementptr inbounds %struct.nrinfo_t, ptr %885, i32 0, i32 0
  %887 = getelementptr inbounds [2 x i32], ptr %886, i64 0, i64 0
  store ptr %887, ptr %22, align 8, !tbaa !5
  %888 = load ptr, ptr %22, align 8, !tbaa !5
  %889 = getelementptr inbounds i32, ptr %888, i64 1
  store i32 0, ptr %889, align 4, !tbaa !9
  %890 = load ptr, ptr %22, align 8, !tbaa !5
  %891 = getelementptr inbounds i32, ptr %890, i64 0
  store i32 0, ptr %891, align 4, !tbaa !9
  %892 = load ptr, ptr %17, align 8, !tbaa !5
  %893 = load i32, ptr %10, align 4, !tbaa !9
  %894 = sext i32 %893 to i64
  %895 = getelementptr inbounds i32, ptr %892, i64 %894
  %896 = load i32, ptr %895, align 4, !tbaa !9
  store i32 %896, ptr %11, align 4, !tbaa !9
  br label %897

897:                                              ; preds = %997, %860
  %898 = load i32, ptr %11, align 4, !tbaa !9
  %899 = load ptr, ptr %17, align 8, !tbaa !5
  %900 = load i32, ptr %10, align 4, !tbaa !9
  %901 = add nsw i32 %900, 1
  %902 = sext i32 %901 to i64
  %903 = getelementptr inbounds i32, ptr %899, i64 %902
  %904 = load i32, ptr %903, align 4, !tbaa !9
  %905 = icmp slt i32 %898, %904
  br i1 %905, label %906, label %1000

906:                                              ; preds = %897
  %907 = load ptr, ptr %19, align 8, !tbaa !5
  %908 = load i32, ptr %11, align 4, !tbaa !9
  %909 = sext i32 %908 to i64
  %910 = getelementptr inbounds i32, ptr %907, i64 %909
  %911 = load i32, ptr %910, align 4, !tbaa !9
  store i32 %911, ptr %12, align 4, !tbaa !9
  %912 = load ptr, ptr %20, align 8, !tbaa !5
  %913 = load i32, ptr %12, align 4, !tbaa !9
  %914 = sext i32 %913 to i64
  %915 = getelementptr inbounds i32, ptr %912, i64 %914
  %916 = load i32, ptr %915, align 4, !tbaa !9
  %917 = icmp ne i32 %916, 2
  br i1 %917, label %918, label %934

918:                                              ; preds = %906
  %919 = load ptr, ptr %18, align 8, !tbaa !5
  %920 = load i32, ptr %12, align 4, !tbaa !9
  %921 = sext i32 %920 to i64
  %922 = getelementptr inbounds i32, ptr %919, i64 %921
  %923 = load i32, ptr %922, align 4, !tbaa !9
  %924 = load ptr, ptr %22, align 8, !tbaa !5
  %925 = load ptr, ptr %20, align 8, !tbaa !5
  %926 = load i32, ptr %12, align 4, !tbaa !9
  %927 = sext i32 %926 to i64
  %928 = getelementptr inbounds i32, ptr %925, i64 %927
  %929 = load i32, ptr %928, align 4, !tbaa !9
  %930 = sext i32 %929 to i64
  %931 = getelementptr inbounds i32, ptr %924, i64 %930
  %932 = load i32, ptr %931, align 4, !tbaa !9
  %933 = add nsw i32 %932, %923
  store i32 %933, ptr %931, align 4, !tbaa !9
  br label %996

934:                                              ; preds = %906
  %935 = load ptr, ptr %18, align 8, !tbaa !5
  %936 = load i32, ptr %12, align 4, !tbaa !9
  %937 = sext i32 %936 to i64
  %938 = getelementptr inbounds i32, ptr %935, i64 %937
  %939 = load i32, ptr %938, align 4, !tbaa !9
  %940 = load ptr, ptr %30, align 8, !tbaa !5
  %941 = load i32, ptr %12, align 4, !tbaa !9
  %942 = sext i32 %941 to i64
  %943 = getelementptr inbounds %struct.nrinfo_t, ptr %940, i64 %942
  %944 = getelementptr inbounds %struct.nrinfo_t, ptr %943, i32 0, i32 0
  %945 = load i32, ptr %38, align 4, !tbaa !9
  %946 = sext i32 %945 to i64
  %947 = getelementptr inbounds [2 x i32], ptr %944, i64 0, i64 %946
  %948 = load i32, ptr %947, align 4, !tbaa !9
  %949 = sub nsw i32 %939, %948
  store i32 %949, ptr %32, align 4, !tbaa !9
  %950 = load ptr, ptr %18, align 8, !tbaa !5
  %951 = load i32, ptr %10, align 4, !tbaa !9
  %952 = sext i32 %951 to i64
  %953 = getelementptr inbounds i32, ptr %950, i64 %952
  %954 = load i32, ptr %953, align 4, !tbaa !9
  %955 = load ptr, ptr %30, align 8, !tbaa !5
  %956 = load i32, ptr %12, align 4, !tbaa !9
  %957 = sext i32 %956 to i64
  %958 = getelementptr inbounds %struct.nrinfo_t, ptr %955, i64 %957
  %959 = getelementptr inbounds %struct.nrinfo_t, ptr %958, i32 0, i32 0
  %960 = load i32, ptr %38, align 4, !tbaa !9
  %961 = sext i32 %960 to i64
  %962 = getelementptr inbounds [2 x i32], ptr %959, i64 0, i64 %961
  %963 = load i32, ptr %962, align 4, !tbaa !9
  %964 = sub nsw i32 %963, %954
  store i32 %964, ptr %962, align 4, !tbaa !9
  %965 = load ptr, ptr %27, align 8, !tbaa !5
  %966 = load i32, ptr %12, align 4, !tbaa !9
  %967 = sext i32 %966 to i64
  %968 = getelementptr inbounds i32, ptr %965, i64 %967
  %969 = load i32, ptr %968, align 4, !tbaa !9
  %970 = icmp eq i32 %969, -1
  br i1 %970, label %981, label %971

971:                                              ; preds = %934
  %972 = load ptr, ptr %27, align 8, !tbaa !5
  %973 = load i32, ptr %12, align 4, !tbaa !9
  %974 = sext i32 %973 to i64
  %975 = getelementptr inbounds i32, ptr %972, i64 %974
  %976 = load i32, ptr %975, align 4, !tbaa !9
  %977 = load i32, ptr %37, align 4, !tbaa !9
  %978 = add nsw i32 2, %977
  %979 = sub nsw i32 0, %978
  %980 = icmp eq i32 %976, %979
  br i1 %980, label %981, label %995

981:                                              ; preds = %971, %934
  %982 = load i32, ptr %37, align 4, !tbaa !9
  %983 = sext i32 %982 to i64
  %984 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 %983
  %985 = load ptr, ptr %984, align 8, !tbaa !5
  %986 = load i32, ptr %12, align 4, !tbaa !9
  %987 = load i32, ptr %32, align 4, !tbaa !9
  %988 = load ptr, ptr %18, align 8, !tbaa !5
  %989 = load i32, ptr %10, align 4, !tbaa !9
  %990 = sext i32 %989 to i64
  %991 = getelementptr inbounds i32, ptr %988, i64 %990
  %992 = load i32, ptr %991, align 4, !tbaa !9
  %993 = add nsw i32 %987, %992
  %994 = sitofp i32 %993 to float
  call void @libmetis__rpqUpdate(ptr noundef %985, i32 noundef %986, float noundef %994)
  br label %995

995:                                              ; preds = %981, %971
  br label %996

996:                                              ; preds = %995, %918
  br label %997

997:                                              ; preds = %996
  %998 = load i32, ptr %11, align 4, !tbaa !9
  %999 = add nsw i32 %998, 1
  store i32 %999, ptr %11, align 4, !tbaa !9
  br label %897, !llvm.loop !33

1000:                                             ; preds = %897
  %1001 = load ptr, ptr %27, align 8, !tbaa !5
  %1002 = load i32, ptr %10, align 4, !tbaa !9
  %1003 = sext i32 %1002 to i64
  %1004 = getelementptr inbounds i32, ptr %1001, i64 %1003
  %1005 = load i32, ptr %1004, align 4, !tbaa !9
  %1006 = icmp eq i32 %1005, -1
  br i1 %1006, label %1007, label %1033

1007:                                             ; preds = %1000
  %1008 = load i32, ptr %37, align 4, !tbaa !9
  %1009 = sext i32 %1008 to i64
  %1010 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 %1009
  %1011 = load ptr, ptr %1010, align 8, !tbaa !5
  %1012 = load i32, ptr %10, align 4, !tbaa !9
  %1013 = load ptr, ptr %18, align 8, !tbaa !5
  %1014 = load i32, ptr %10, align 4, !tbaa !9
  %1015 = sext i32 %1014 to i64
  %1016 = getelementptr inbounds i32, ptr %1013, i64 %1015
  %1017 = load i32, ptr %1016, align 4, !tbaa !9
  %1018 = load ptr, ptr %22, align 8, !tbaa !5
  %1019 = load i32, ptr %38, align 4, !tbaa !9
  %1020 = sext i32 %1019 to i64
  %1021 = getelementptr inbounds i32, ptr %1018, i64 %1020
  %1022 = load i32, ptr %1021, align 4, !tbaa !9
  %1023 = sub nsw i32 %1017, %1022
  %1024 = sitofp i32 %1023 to float
  %1025 = call i32 @libmetis__rpqInsert(ptr noundef %1011, i32 noundef %1012, float noundef %1024)
  %1026 = load i32, ptr %37, align 4, !tbaa !9
  %1027 = add nsw i32 2, %1026
  %1028 = sub nsw i32 0, %1027
  %1029 = load ptr, ptr %27, align 8, !tbaa !5
  %1030 = load i32, ptr %10, align 4, !tbaa !9
  %1031 = sext i32 %1030 to i64
  %1032 = getelementptr inbounds i32, ptr %1029, i64 %1031
  store i32 %1028, ptr %1032, align 4, !tbaa !9
  br label %1033

1033:                                             ; preds = %1007, %1000
  br label %1034

1034:                                             ; preds = %1033, %789
  br label %1035

1035:                                             ; preds = %1034, %788
  br label %1036

1036:                                             ; preds = %1035
  %1037 = load i32, ptr %9, align 4, !tbaa !9
  %1038 = add nsw i32 %1037, 1
  store i32 %1038, ptr %9, align 4, !tbaa !9
  br label %706, !llvm.loop !34

1039:                                             ; preds = %706
  %1040 = load i32, ptr %16, align 4, !tbaa !9
  %1041 = load ptr, ptr %25, align 8, !tbaa !5
  %1042 = load i32, ptr %15, align 4, !tbaa !9
  %1043 = add nsw i32 %1042, 1
  %1044 = sext i32 %1043 to i64
  %1045 = getelementptr inbounds i32, ptr %1041, i64 %1044
  store i32 %1040, ptr %1045, align 4, !tbaa !9
  %1046 = load ptr, ptr %4, align 8, !tbaa !5
  %1047 = getelementptr inbounds %struct.ctrl_t, ptr %1046, i32 0, i32 2
  %1048 = load i32, ptr %1047, align 8, !tbaa !27
  %1049 = and i32 %1048, 32
  %1050 = icmp ne i32 %1049, 0
  br i1 %1050, label %1051, label %1088

1051:                                             ; preds = %1039
  %1052 = load i32, ptr %31, align 4, !tbaa !9
  %1053 = load i32, ptr %37, align 4, !tbaa !9
  %1054 = load i32, ptr %37, align 4, !tbaa !9
  %1055 = sext i32 %1054 to i64
  %1056 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 %1055
  %1057 = load i32, ptr %1056, align 4, !tbaa !9
  %1058 = load i32, ptr %38, align 4, !tbaa !9
  %1059 = sext i32 %1058 to i64
  %1060 = getelementptr inbounds [2 x i32], ptr %44, i64 0, i64 %1059
  %1061 = load i32, ptr %1060, align 4, !tbaa !9
  %1062 = load ptr, ptr %18, align 8, !tbaa !5
  %1063 = load i32, ptr %37, align 4, !tbaa !9
  %1064 = sext i32 %1063 to i64
  %1065 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 %1064
  %1066 = load i32, ptr %1065, align 4, !tbaa !9
  %1067 = sext i32 %1066 to i64
  %1068 = getelementptr inbounds i32, ptr %1062, i64 %1067
  %1069 = load i32, ptr %1068, align 4, !tbaa !9
  %1070 = load ptr, ptr %18, align 8, !tbaa !5
  %1071 = load i32, ptr %38, align 4, !tbaa !9
  %1072 = sext i32 %1071 to i64
  %1073 = getelementptr inbounds [2 x i32], ptr %43, i64 0, i64 %1072
  %1074 = load i32, ptr %1073, align 4, !tbaa !9
  %1075 = sext i32 %1074 to i64
  %1076 = getelementptr inbounds i32, ptr %1070, i64 %1075
  %1077 = load i32, ptr %1076, align 4, !tbaa !9
  %1078 = load ptr, ptr %21, align 8, !tbaa !5
  %1079 = getelementptr inbounds i32, ptr %1078, i64 0
  %1080 = load i32, ptr %1079, align 4, !tbaa !9
  %1081 = load ptr, ptr %21, align 8, !tbaa !5
  %1082 = getelementptr inbounds i32, ptr %1081, i64 1
  %1083 = load i32, ptr %1082, align 4, !tbaa !9
  %1084 = load ptr, ptr %21, align 8, !tbaa !5
  %1085 = getelementptr inbounds i32, ptr %1084, i64 2
  %1086 = load i32, ptr %1085, align 4, !tbaa !9
  %1087 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, i32 noundef %1052, i32 noundef %1053, i32 noundef %1057, i32 noundef %1061, i32 noundef %1069, i32 noundef %1077, i32 noundef %1080, i32 noundef %1083, i32 noundef %1086)
  br label %1088

1088:                                             ; preds = %1051, %1039
  br label %1089

1089:                                             ; preds = %1088
  %1090 = load i32, ptr %15, align 4, !tbaa !9
  %1091 = add nsw i32 %1090, 1
  store i32 %1091, ptr %15, align 4, !tbaa !9
  br label %307, !llvm.loop !35

1092:                                             ; preds = %601, %509, %446, %409, %307
  %1093 = load i32, ptr %15, align 4, !tbaa !9
  %1094 = add nsw i32 %1093, -1
  store i32 %1094, ptr %15, align 4, !tbaa !9
  br label %1095

1095:                                             ; preds = %1426, %1092
  %1096 = load i32, ptr %15, align 4, !tbaa !9
  %1097 = load i32, ptr %35, align 4, !tbaa !9
  %1098 = icmp sgt i32 %1096, %1097
  br i1 %1098, label %1099, label %1429

1099:                                             ; preds = %1095
  %1100 = load ptr, ptr %28, align 8, !tbaa !5
  %1101 = load i32, ptr %15, align 4, !tbaa !9
  %1102 = sext i32 %1101 to i64
  %1103 = getelementptr inbounds i32, ptr %1100, i64 %1102
  %1104 = load i32, ptr %1103, align 4, !tbaa !9
  store i32 %1104, ptr %31, align 4, !tbaa !9
  %1105 = load ptr, ptr %5, align 8, !tbaa !5
  %1106 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %1105)
  %1107 = icmp ne i32 %1106, 0
  br i1 %1107, label %1116, label %1108

1108:                                             ; preds = %1099
  %1109 = call i32 (ptr, ...) @printf(ptr noundef @.str.6, i32 noundef 204, ptr noundef @.str.2)
  %1110 = load ptr, ptr %5, align 8, !tbaa !5
  %1111 = call i32 @libmetis__CheckNodePartitionParams(ptr noundef %1110)
  %1112 = icmp ne i32 %1111, 0
  br i1 %1112, label %1113, label %1114

1113:                                             ; preds = %1108
  br label %1115

1114:                                             ; preds = %1108
  call void @__assert_fail(ptr noundef @.str.7, ptr noundef @.str.2, i32 noundef 204, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

1115:                                             ; preds = %1113
  br label %1116

1116:                                             ; preds = %1115, %1099
  %1117 = load ptr, ptr %20, align 8, !tbaa !5
  %1118 = load i32, ptr %31, align 4, !tbaa !9
  %1119 = sext i32 %1118 to i64
  %1120 = getelementptr inbounds i32, ptr %1117, i64 %1119
  %1121 = load i32, ptr %1120, align 4, !tbaa !9
  store i32 %1121, ptr %37, align 4, !tbaa !9
  %1122 = load i32, ptr %37, align 4, !tbaa !9
  %1123 = add nsw i32 %1122, 1
  %1124 = srem i32 %1123, 2
  store i32 %1124, ptr %38, align 4, !tbaa !9
  br label %1125

1125:                                             ; preds = %1116
  %1126 = load ptr, ptr %18, align 8, !tbaa !5
  %1127 = load i32, ptr %31, 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 = load ptr, ptr %21, align 8, !tbaa !5
  %1132 = getelementptr inbounds i32, ptr %1131, i64 2
  %1133 = load i32, ptr %1132, align 4, !tbaa !9
  %1134 = add nsw i32 %1133, %1130
  store i32 %1134, ptr %1132, align 4, !tbaa !9
  %1135 = load ptr, ptr %18, align 8, !tbaa !5
  %1136 = load i32, ptr %31, align 4, !tbaa !9
  %1137 = sext i32 %1136 to i64
  %1138 = getelementptr inbounds i32, ptr %1135, i64 %1137
  %1139 = load i32, ptr %1138, align 4, !tbaa !9
  %1140 = load ptr, ptr %21, align 8, !tbaa !5
  %1141 = load i32, ptr %37, align 4, !tbaa !9
  %1142 = sext i32 %1141 to i64
  %1143 = getelementptr inbounds i32, ptr %1140, i64 %1142
  %1144 = load i32, ptr %1143, align 4, !tbaa !9
  %1145 = sub nsw i32 %1144, %1139
  store i32 %1145, ptr %1143, align 4, !tbaa !9
  br label %1146

1146:                                             ; preds = %1125
  br label %1147

1147:                                             ; preds = %1146
  %1148 = load ptr, ptr %20, align 8, !tbaa !5
  %1149 = load i32, ptr %31, align 4, !tbaa !9
  %1150 = sext i32 %1149 to i64
  %1151 = getelementptr inbounds i32, ptr %1148, i64 %1150
  store i32 2, ptr %1151, align 4, !tbaa !9
  br label %1152

1152:                                             ; preds = %1147
  %1153 = load ptr, ptr %24, align 8, !tbaa !5
  %1154 = load i32, ptr %31, align 4, !tbaa !9
  %1155 = sext i32 %1154 to i64
  %1156 = getelementptr inbounds i32, ptr %1153, i64 %1155
  %1157 = load i32, ptr %1156, align 4, !tbaa !9
  %1158 = icmp eq i32 %1157, -1
  br i1 %1158, label %1170, label %1159

1159:                                             ; preds = %1152
  %1160 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, i32 noundef 210, ptr noundef @.str.2)
  %1161 = load ptr, ptr %24, align 8, !tbaa !5
  %1162 = load i32, ptr %31, align 4, !tbaa !9
  %1163 = sext i32 %1162 to i64
  %1164 = getelementptr inbounds i32, ptr %1161, i64 %1163
  %1165 = load i32, ptr %1164, align 4, !tbaa !9
  %1166 = icmp eq i32 %1165, -1
  br i1 %1166, label %1167, label %1168

1167:                                             ; preds = %1159
  br label %1169

1168:                                             ; preds = %1159
  call void @__assert_fail(ptr noundef @.str.16, ptr noundef @.str.2, i32 noundef 210, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

1169:                                             ; preds = %1167
  br label %1170

1170:                                             ; preds = %1169, %1152
  %1171 = load i32, ptr %31, align 4, !tbaa !9
  %1172 = load ptr, ptr %23, align 8, !tbaa !5
  %1173 = load i32, ptr %14, align 4, !tbaa !9
  %1174 = sext i32 %1173 to i64
  %1175 = getelementptr inbounds i32, ptr %1172, i64 %1174
  store i32 %1171, ptr %1175, align 4, !tbaa !9
  %1176 = load i32, ptr %14, align 4, !tbaa !9
  %1177 = add nsw i32 %1176, 1
  store i32 %1177, ptr %14, align 4, !tbaa !9
  %1178 = load ptr, ptr %24, align 8, !tbaa !5
  %1179 = load i32, ptr %31, align 4, !tbaa !9
  %1180 = sext i32 %1179 to i64
  %1181 = getelementptr inbounds i32, ptr %1178, i64 %1180
  store i32 %1176, ptr %1181, align 4, !tbaa !9
  br label %1182

1182:                                             ; preds = %1170
  br label %1183

1183:                                             ; preds = %1182
  %1184 = load ptr, ptr %30, align 8, !tbaa !5
  %1185 = load i32, ptr %31, align 4, !tbaa !9
  %1186 = sext i32 %1185 to i64
  %1187 = getelementptr inbounds %struct.nrinfo_t, ptr %1184, i64 %1186
  %1188 = getelementptr inbounds %struct.nrinfo_t, ptr %1187, i32 0, i32 0
  %1189 = getelementptr inbounds [2 x i32], ptr %1188, i64 0, i64 0
  store ptr %1189, ptr %22, align 8, !tbaa !5
  %1190 = load ptr, ptr %22, align 8, !tbaa !5
  %1191 = getelementptr inbounds i32, ptr %1190, i64 1
  store i32 0, ptr %1191, align 4, !tbaa !9
  %1192 = load ptr, ptr %22, align 8, !tbaa !5
  %1193 = getelementptr inbounds i32, ptr %1192, i64 0
  store i32 0, ptr %1193, align 4, !tbaa !9
  %1194 = load ptr, ptr %17, align 8, !tbaa !5
  %1195 = load i32, ptr %31, align 4, !tbaa !9
  %1196 = sext i32 %1195 to i64
  %1197 = getelementptr inbounds i32, ptr %1194, i64 %1196
  %1198 = load i32, ptr %1197, align 4, !tbaa !9
  store i32 %1198, ptr %9, align 4, !tbaa !9
  br label %1199

1199:                                             ; preds = %1253, %1183
  %1200 = load i32, ptr %9, align 4, !tbaa !9
  %1201 = load ptr, ptr %17, align 8, !tbaa !5
  %1202 = load i32, ptr %31, align 4, !tbaa !9
  %1203 = add nsw i32 %1202, 1
  %1204 = sext i32 %1203 to i64
  %1205 = getelementptr inbounds i32, ptr %1201, i64 %1204
  %1206 = load i32, ptr %1205, align 4, !tbaa !9
  %1207 = icmp slt i32 %1200, %1206
  br i1 %1207, label %1208, label %1256

1208:                                             ; preds = %1199
  %1209 = load ptr, ptr %19, align 8, !tbaa !5
  %1210 = load i32, ptr %9, align 4, !tbaa !9
  %1211 = sext i32 %1210 to i64
  %1212 = getelementptr inbounds i32, ptr %1209, i64 %1211
  %1213 = load i32, ptr %1212, align 4, !tbaa !9
  store i32 %1213, ptr %10, align 4, !tbaa !9
  %1214 = load ptr, ptr %20, align 8, !tbaa !5
  %1215 = load i32, ptr %10, align 4, !tbaa !9
  %1216 = sext i32 %1215 to i64
  %1217 = getelementptr inbounds i32, ptr %1214, i64 %1216
  %1218 = load i32, ptr %1217, align 4, !tbaa !9
  %1219 = icmp eq i32 %1218, 2
  br i1 %1219, label %1220, label %1236

1220:                                             ; preds = %1208
  %1221 = load ptr, ptr %18, align 8, !tbaa !5
  %1222 = load i32, ptr %31, align 4, !tbaa !9
  %1223 = sext i32 %1222 to i64
  %1224 = getelementptr inbounds i32, ptr %1221, i64 %1223
  %1225 = load i32, ptr %1224, align 4, !tbaa !9
  %1226 = load ptr, ptr %30, align 8, !tbaa !5
  %1227 = load i32, ptr %10, align 4, !tbaa !9
  %1228 = sext i32 %1227 to i64
  %1229 = getelementptr inbounds %struct.nrinfo_t, ptr %1226, i64 %1228
  %1230 = getelementptr inbounds %struct.nrinfo_t, ptr %1229, i32 0, i32 0
  %1231 = load i32, ptr %37, align 4, !tbaa !9
  %1232 = sext i32 %1231 to i64
  %1233 = getelementptr inbounds [2 x i32], ptr %1230, i64 0, i64 %1232
  %1234 = load i32, ptr %1233, align 4, !tbaa !9
  %1235 = sub nsw i32 %1234, %1225
  store i32 %1235, ptr %1233, align 4, !tbaa !9
  br label %1252

1236:                                             ; preds = %1208
  %1237 = load ptr, ptr %18, align 8, !tbaa !5
  %1238 = load i32, ptr %10, 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 = load ptr, ptr %22, align 8, !tbaa !5
  %1243 = load ptr, ptr %20, align 8, !tbaa !5
  %1244 = load i32, ptr %10, align 4, !tbaa !9
  %1245 = sext i32 %1244 to i64
  %1246 = getelementptr inbounds i32, ptr %1243, i64 %1245
  %1247 = load i32, ptr %1246, align 4, !tbaa !9
  %1248 = sext i32 %1247 to i64
  %1249 = getelementptr inbounds i32, ptr %1242, i64 %1248
  %1250 = load i32, ptr %1249, align 4, !tbaa !9
  %1251 = add nsw i32 %1250, %1241
  store i32 %1251, ptr %1249, align 4, !tbaa !9
  br label %1252

1252:                                             ; preds = %1236, %1220
  br label %1253

1253:                                             ; preds = %1252
  %1254 = load i32, ptr %9, align 4, !tbaa !9
  %1255 = add nsw i32 %1254, 1
  store i32 %1255, ptr %9, align 4, !tbaa !9
  br label %1199, !llvm.loop !36

1256:                                             ; preds = %1199
  %1257 = load ptr, ptr %25, align 8, !tbaa !5
  %1258 = load i32, ptr %15, align 4, !tbaa !9
  %1259 = sext i32 %1258 to i64
  %1260 = getelementptr inbounds i32, ptr %1257, i64 %1259
  %1261 = load i32, ptr %1260, align 4, !tbaa !9
  store i32 %1261, ptr %9, align 4, !tbaa !9
  br label %1262

1262:                                             ; preds = %1422, %1256
  %1263 = load i32, ptr %9, align 4, !tbaa !9
  %1264 = load ptr, ptr %25, align 8, !tbaa !5
  %1265 = load i32, ptr %15, align 4, !tbaa !9
  %1266 = add nsw i32 %1265, 1
  %1267 = sext i32 %1266 to i64
  %1268 = getelementptr inbounds i32, ptr %1264, i64 %1267
  %1269 = load i32, ptr %1268, align 4, !tbaa !9
  %1270 = icmp slt i32 %1263, %1269
  br i1 %1270, label %1271, label %1425

1271:                                             ; preds = %1262
  %1272 = load ptr, ptr %26, align 8, !tbaa !5
  %1273 = load i32, ptr %9, align 4, !tbaa !9
  %1274 = sext i32 %1273 to i64
  %1275 = getelementptr inbounds i32, ptr %1272, i64 %1274
  %1276 = load i32, ptr %1275, align 4, !tbaa !9
  store i32 %1276, ptr %10, align 4, !tbaa !9
  %1277 = load ptr, ptr %20, align 8, !tbaa !5
  %1278 = load i32, ptr %10, 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 = icmp eq i32 %1281, 2
  br i1 %1282, label %1294, label %1283

1283:                                             ; preds = %1271
  %1284 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, i32 noundef 225, ptr noundef @.str.2)
  %1285 = load ptr, ptr %20, align 8, !tbaa !5
  %1286 = load i32, ptr %10, align 4, !tbaa !9
  %1287 = sext i32 %1286 to i64
  %1288 = getelementptr inbounds i32, ptr %1285, i64 %1287
  %1289 = load i32, ptr %1288, align 4, !tbaa !9
  %1290 = icmp eq i32 %1289, 2
  br i1 %1290, label %1291, label %1292

1291:                                             ; preds = %1283
  br label %1293

1292:                                             ; preds = %1283
  call void @__assert_fail(ptr noundef @.str.18, ptr noundef @.str.2, i32 noundef 225, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

1293:                                             ; preds = %1291
  br label %1294

1294:                                             ; preds = %1293, %1271
  %1295 = load i32, ptr %38, align 4, !tbaa !9
  %1296 = load ptr, ptr %20, align 8, !tbaa !5
  %1297 = load i32, ptr %10, align 4, !tbaa !9
  %1298 = sext i32 %1297 to i64
  %1299 = getelementptr inbounds i32, ptr %1296, i64 %1298
  store i32 %1295, ptr %1299, align 4, !tbaa !9
  br label %1300

1300:                                             ; preds = %1294
  %1301 = load ptr, ptr %18, align 8, !tbaa !5
  %1302 = load i32, ptr %10, align 4, !tbaa !9
  %1303 = sext i32 %1302 to i64
  %1304 = getelementptr inbounds i32, ptr %1301, i64 %1303
  %1305 = load i32, ptr %1304, align 4, !tbaa !9
  %1306 = load ptr, ptr %21, align 8, !tbaa !5
  %1307 = load i32, ptr %38, align 4, !tbaa !9
  %1308 = sext i32 %1307 to i64
  %1309 = getelementptr inbounds i32, ptr %1306, i64 %1308
  %1310 = load i32, ptr %1309, align 4, !tbaa !9
  %1311 = add nsw i32 %1310, %1305
  store i32 %1311, ptr %1309, align 4, !tbaa !9
  %1312 = load ptr, ptr %18, align 8, !tbaa !5
  %1313 = load i32, ptr %10, align 4, !tbaa !9
  %1314 = sext i32 %1313 to i64
  %1315 = getelementptr inbounds i32, ptr %1312, i64 %1314
  %1316 = load i32, ptr %1315, align 4, !tbaa !9
  %1317 = load ptr, ptr %21, align 8, !tbaa !5
  %1318 = getelementptr inbounds i32, ptr %1317, i64 2
  %1319 = load i32, ptr %1318, align 4, !tbaa !9
  %1320 = sub nsw i32 %1319, %1316
  store i32 %1320, ptr %1318, align 4, !tbaa !9
  br label %1321

1321:                                             ; preds = %1300
  br label %1322

1322:                                             ; preds = %1321
  br label %1323

1323:                                             ; preds = %1322
  %1324 = load ptr, ptr %24, align 8, !tbaa !5
  %1325 = load i32, ptr %10, align 4, !tbaa !9
  %1326 = sext i32 %1325 to i64
  %1327 = getelementptr inbounds i32, ptr %1324, i64 %1326
  %1328 = load i32, ptr %1327, align 4, !tbaa !9
  %1329 = icmp ne i32 %1328, -1
  br i1 %1329, label %1341, label %1330

1330:                                             ; preds = %1323
  %1331 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, i32 noundef 228, ptr noundef @.str.2)
  %1332 = load ptr, ptr %24, align 8, !tbaa !5
  %1333 = load i32, ptr %10, align 4, !tbaa !9
  %1334 = sext i32 %1333 to i64
  %1335 = getelementptr inbounds i32, ptr %1332, i64 %1334
  %1336 = load i32, ptr %1335, align 4, !tbaa !9
  %1337 = icmp ne i32 %1336, -1
  br i1 %1337, label %1338, label %1339

1338:                                             ; preds = %1330
  br label %1340

1339:                                             ; preds = %1330
  call void @__assert_fail(ptr noundef @.str.20, ptr noundef @.str.2, i32 noundef 228, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

1340:                                             ; preds = %1338
  br label %1341

1341:                                             ; preds = %1340, %1323
  %1342 = load ptr, ptr %23, align 8, !tbaa !5
  %1343 = load i32, ptr %14, align 4, !tbaa !9
  %1344 = add nsw i32 %1343, -1
  store i32 %1344, ptr %14, align 4, !tbaa !9
  %1345 = sext i32 %1344 to i64
  %1346 = getelementptr inbounds i32, ptr %1342, i64 %1345
  %1347 = load i32, ptr %1346, align 4, !tbaa !9
  %1348 = load ptr, ptr %23, align 8, !tbaa !5
  %1349 = load ptr, ptr %24, align 8, !tbaa !5
  %1350 = load i32, ptr %10, align 4, !tbaa !9
  %1351 = sext i32 %1350 to i64
  %1352 = getelementptr inbounds i32, ptr %1349, i64 %1351
  %1353 = load i32, ptr %1352, align 4, !tbaa !9
  %1354 = sext i32 %1353 to i64
  %1355 = getelementptr inbounds i32, ptr %1348, i64 %1354
  store i32 %1347, ptr %1355, align 4, !tbaa !9
  %1356 = load ptr, ptr %24, align 8, !tbaa !5
  %1357 = load i32, ptr %10, align 4, !tbaa !9
  %1358 = sext i32 %1357 to i64
  %1359 = getelementptr inbounds i32, ptr %1356, i64 %1358
  %1360 = load i32, ptr %1359, align 4, !tbaa !9
  %1361 = load ptr, ptr %24, align 8, !tbaa !5
  %1362 = load ptr, ptr %23, align 8, !tbaa !5
  %1363 = load i32, ptr %14, align 4, !tbaa !9
  %1364 = sext i32 %1363 to i64
  %1365 = getelementptr inbounds i32, ptr %1362, i64 %1364
  %1366 = load i32, ptr %1365, align 4, !tbaa !9
  %1367 = sext i32 %1366 to i64
  %1368 = getelementptr inbounds i32, ptr %1361, i64 %1367
  store i32 %1360, ptr %1368, align 4, !tbaa !9
  %1369 = load ptr, ptr %24, align 8, !tbaa !5
  %1370 = load i32, ptr %10, align 4, !tbaa !9
  %1371 = sext i32 %1370 to i64
  %1372 = getelementptr inbounds i32, ptr %1369, i64 %1371
  store i32 -1, ptr %1372, align 4, !tbaa !9
  br label %1373

1373:                                             ; preds = %1341
  br label %1374

1374:                                             ; preds = %1373
  %1375 = load ptr, ptr %17, align 8, !tbaa !5
  %1376 = load i32, ptr %10, align 4, !tbaa !9
  %1377 = sext i32 %1376 to i64
  %1378 = getelementptr inbounds i32, ptr %1375, i64 %1377
  %1379 = load i32, ptr %1378, align 4, !tbaa !9
  store i32 %1379, ptr %11, align 4, !tbaa !9
  br label %1380

1380:                                             ; preds = %1418, %1374
  %1381 = load i32, ptr %11, align 4, !tbaa !9
  %1382 = load ptr, ptr %17, align 8, !tbaa !5
  %1383 = load i32, ptr %10, align 4, !tbaa !9
  %1384 = add nsw i32 %1383, 1
  %1385 = sext i32 %1384 to i64
  %1386 = getelementptr inbounds i32, ptr %1382, i64 %1385
  %1387 = load i32, ptr %1386, align 4, !tbaa !9
  %1388 = icmp slt i32 %1381, %1387
  br i1 %1388, label %1389, label %1421

1389:                                             ; preds = %1380
  %1390 = load ptr, ptr %19, align 8, !tbaa !5
  %1391 = load i32, ptr %11, align 4, !tbaa !9
  %1392 = sext i32 %1391 to i64
  %1393 = getelementptr inbounds i32, ptr %1390, i64 %1392
  %1394 = load i32, ptr %1393, align 4, !tbaa !9
  store i32 %1394, ptr %12, align 4, !tbaa !9
  %1395 = load ptr, ptr %20, align 8, !tbaa !5
  %1396 = load i32, ptr %12, align 4, !tbaa !9
  %1397 = sext i32 %1396 to i64
  %1398 = getelementptr inbounds i32, ptr %1395, i64 %1397
  %1399 = load i32, ptr %1398, align 4, !tbaa !9
  %1400 = icmp eq i32 %1399, 2
  br i1 %1400, label %1401, label %1417

1401:                                             ; preds = %1389
  %1402 = load ptr, ptr %18, align 8, !tbaa !5
  %1403 = load i32, ptr %10, align 4, !tbaa !9
  %1404 = sext i32 %1403 to i64
  %1405 = getelementptr inbounds i32, ptr %1402, i64 %1404
  %1406 = load i32, ptr %1405, align 4, !tbaa !9
  %1407 = load ptr, ptr %30, align 8, !tbaa !5
  %1408 = load i32, ptr %12, align 4, !tbaa !9
  %1409 = sext i32 %1408 to i64
  %1410 = getelementptr inbounds %struct.nrinfo_t, ptr %1407, i64 %1409
  %1411 = getelementptr inbounds %struct.nrinfo_t, ptr %1410, i32 0, i32 0
  %1412 = load i32, ptr %38, align 4, !tbaa !9
  %1413 = sext i32 %1412 to i64
  %1414 = getelementptr inbounds [2 x i32], ptr %1411, i64 0, i64 %1413
  %1415 = load i32, ptr %1414, align 4, !tbaa !9
  %1416 = add nsw i32 %1415, %1406
  store i32 %1416, ptr %1414, align 4, !tbaa !9
  br label %1417

1417:                                             ; preds = %1401, %1389
  br label %1418

1418:                                             ; preds = %1417
  %1419 = load i32, ptr %11, align 4, !tbaa !9
  %1420 = add nsw i32 %1419, 1
  store i32 %1420, ptr %11, align 4, !tbaa !9
  br label %1380, !llvm.loop !37

1421:                                             ; preds = %1380
  br label %1422

1422:                                             ; preds = %1421
  %1423 = load i32, ptr %9, align 4, !tbaa !9
  %1424 = add nsw i32 %1423, 1
  store i32 %1424, ptr %9, align 4, !tbaa !9
  br label %1262, !llvm.loop !38

1425:                                             ; preds = %1262
  br label %1426

1426:                                             ; preds = %1425
  %1427 = load i32, ptr %15, align 4, !tbaa !9
  %1428 = add nsw i32 %1427, -1
  store i32 %1428, ptr %15, align 4, !tbaa !9
  br label %1095, !llvm.loop !39

1429:                                             ; preds = %1095
  %1430 = load i32, ptr %33, align 4, !tbaa !9
  %1431 = load ptr, ptr %21, align 8, !tbaa !5
  %1432 = getelementptr inbounds i32, ptr %1431, i64 2
  %1433 = load i32, ptr %1432, align 4, !tbaa !9
  %1434 = icmp eq i32 %1430, %1433
  br i1 %1434, label %1445, label %1435

1435:                                             ; preds = %1429
  %1436 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, i32 noundef 237, ptr noundef @.str.2)
  %1437 = load i32, ptr %33, align 4, !tbaa !9
  %1438 = load ptr, ptr %21, align 8, !tbaa !5
  %1439 = getelementptr inbounds i32, ptr %1438, i64 2
  %1440 = load i32, ptr %1439, align 4, !tbaa !9
  %1441 = icmp eq i32 %1437, %1440
  br i1 %1441, label %1442, label %1443

1442:                                             ; preds = %1435
  br label %1444

1443:                                             ; preds = %1435
  call void @__assert_fail(ptr noundef @.str.22, ptr noundef @.str.2, i32 noundef 237, ptr noundef @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #6
  unreachable

1444:                                             ; preds = %1442
  br label %1445

1445:                                             ; preds = %1444, %1429
  %1446 = load ptr, ptr %4, align 8, !tbaa !5
  %1447 = getelementptr inbounds %struct.ctrl_t, ptr %1446, i32 0, i32 2
  %1448 = load i32, ptr %1447, align 8, !tbaa !27
  %1449 = and i32 %1448, 8
  %1450 = icmp ne i32 %1449, 0
  br i1 %1450, label %1451, label %1462

1451:                                             ; preds = %1445
  %1452 = load i32, ptr %33, align 4, !tbaa !9
  %1453 = load i32, ptr %35, align 4, !tbaa !9
  %1454 = load ptr, ptr %21, align 8, !tbaa !5
  %1455 = getelementptr inbounds i32, ptr %1454, i64 0
  %1456 = load i32, ptr %1455, align 4, !tbaa !9
  %1457 = load ptr, ptr %21, align 8, !tbaa !5
  %1458 = getelementptr inbounds i32, ptr %1457, i64 1
  %1459 = load i32, ptr %1458, align 4, !tbaa !9
  %1460 = load i32, ptr %14, align 4, !tbaa !9
  %1461 = call i32 (ptr, ...) @printf(ptr noundef @.str.23, i32 noundef %1452, i32 noundef %1453, i32 noundef %1456, i32 noundef %1459, i32 noundef %1460)
  br label %1462

1462:                                             ; preds = %1451, %1445
  %1463 = load i32, ptr %33, align 4, !tbaa !9
  %1464 = load ptr, ptr %5, align 8, !tbaa !5
  %1465 = getelementptr inbounds %struct.graph_t, ptr %1464, i32 0, i32 17
  store i32 %1463, ptr %1465, align 8, !tbaa !29
  %1466 = load i32, ptr %14, align 4, !tbaa !9
  %1467 = load ptr, ptr %5, align 8, !tbaa !5
  %1468 = getelementptr inbounds %struct.graph_t, ptr %1467, i32 0, i32 21
  store i32 %1466, ptr %1468, align 8, !tbaa !28
  %1469 = load i32, ptr %35, align 4, !tbaa !9
  %1470 = icmp eq i32 %1469, -1
  br i1 %1470, label %1475, label %1471

1471:                                             ; preds = %1462
  %1472 = load i32, ptr %33, align 4, !tbaa !9
  %1473 = load i32, ptr %34, align 4, !tbaa !9
  %1474 = icmp sge i32 %1472, %1473
  br i1 %1474, label %1475, label %1476

1475:                                             ; preds = %1471, %1462
  br label %1480

1476:                                             ; preds = %1471
  br label %1477

1477:                                             ; preds = %1476
  %1478 = load i32, ptr %36, align 4, !tbaa !9
  %1479 = add nsw i32 %1478, 1
  store i32 %1479, ptr %36, align 4, !tbaa !9
  br label %142, !llvm.loop !40

1480:                                             ; preds = %1475, %142
  %1481 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 0
  %1482 = load ptr, ptr %1481, align 16, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1482)
  %1483 = getelementptr inbounds [2 x ptr], ptr %29, i64 0, i64 1
  %1484 = load ptr, ptr %1483, align 8, !tbaa !5
  call void @libmetis__rpqDestroy(ptr noundef %1484)
  %1485 = load ptr, ptr %4, align 8, !tbaa !5
  call void @libmetis__wspacepop(ptr noundef %1485)
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #5
  call void @llvm.lifetime.end.p0(i64 8, 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 4, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 16, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #5
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) #2

declare ptr @libmetis__rpqCreate(i64 noundef) #2

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

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

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

declare void @libmetis__rpqReset(ptr noundef) #2

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

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

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

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

declare i32 @libmetis__CheckNodePartitionParams(ptr noundef) #2

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

declare i32 @libmetis__rpqSeeTopVal(ptr 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 = { 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 #4 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 40}
!15 = !{!12, !6, i64 24}
!16 = !{!12, !6, i64 152}
!17 = !{!12, !6, i64 144}
!18 = !{!12, !6, i64 120}
!19 = !{!12, !6, i64 128}
!20 = !{!12, !6, i64 192}
!21 = !{!22, !6, i64 104}
!22 = !{!"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, !23, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !23, i64 128, !24, i64 136, !24, i64 144, !24, i64 152, !24, i64 160, !24, i64 168, !24, i64 176, !24, i64 184, !24, i64 192, !24, i64 200, !24, i64 208, !24, i64 216, !24, i64 224, !6, i64 232, !25, i64 240, !25, i64 248, !25, 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}
!23 = !{!"float", !7, i64 0}
!24 = !{!"double", !7, i64 0}
!25 = !{!"long", !7, i64 0}
!26 = !{!23, !23, i64 0}
!27 = !{!22, !10, i64 8}
!28 = !{!12, !10, i64 136}
!29 = !{!12, !10, i64 112}
!30 = distinct !{!30, !31}
!31 = !{!"llvm.loop.mustprogress"}
!32 = !{!22, !10, i64 52}
!33 = distinct !{!33, !31}
!34 = distinct !{!34, !31}
!35 = distinct !{!35, !31}
!36 = distinct !{!36, !31}
!37 = distinct !{!37, !31}
!38 = distinct !{!38, !31}
!39 = distinct !{!39, !31}
!40 = distinct !{!40, !31}


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

%struct.nrinfo_t = type { [2 x i32] }

@.str = external hidden unnamed_addr constant [52 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [136 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [14 x i8], align 1
@__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided = external hidden unnamed_addr constant [67 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [70 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [76 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [2 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 [65 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [55 x i8], align 1

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

51:                                               ; preds = %3
  %52 = load i32, ptr %1, align 8, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %1, i64 136
  %54 = load i32, ptr %53, align 8, !tbaa !28
  %55 = getelementptr inbounds i8, ptr %1, i64 112
  %56 = load i32, ptr %55, align 8, !tbaa !29
  %57 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %38, i32 noundef %40, i32 noundef %52, i32 noundef %54, i32 noundef %56)
  br label %58

58:                                               ; preds = %51, %3
  %59 = icmp sgt i32 %2, 0
  br i1 %59, label %.lr.ph614, label %._crit_edge615

.lr.ph614:                                        ; preds = %58
  %60 = getelementptr inbounds i8, ptr %1, i64 112
  %61 = getelementptr inbounds i8, ptr %1, i64 136
  %62 = getelementptr inbounds i8, ptr %0, i64 52
  %63 = icmp sgt i32 %7, 0
  %64 = getelementptr inbounds i8, ptr %5, i64 4
  %65 = getelementptr inbounds i8, ptr %6, i64 4
  %66 = add nsw i32 %32, -1
  %wide.trip.count652 = zext nneg i32 %7 to i64
  br label %67

67:                                               ; preds = %545, %.lr.ph614
  %.0441611 = phi i32 [ 0, %.lr.ph614 ], [ %547, %545 ]
  %68 = tail call ptr @libmetis__iset(i64 noundef %24, i32 noundef -1, ptr noundef %28) #6
  tail call void @libmetis__rpqReset(ptr noundef %25) #6
  tail call void @libmetis__rpqReset(ptr noundef %26) #6
  %69 = load i32, ptr %60, align 8, !tbaa !29
  %70 = load i32, ptr %61, align 8, !tbaa !28
  tail call void @libmetis__irandArrayPermute(i32 noundef %70, ptr noundef %29, i32 noundef %70, i32 noundef 1) #6
  %71 = icmp sgt i32 %70, 0
  br i1 %71, label %.lr.ph.preheader, label %._crit_edge

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

.lr.ph:                                           ; preds = %.lr.ph.preheader, %86
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %86 ]
  %72 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv
  %73 = load i32, ptr %72, align 4, !tbaa !26
  %74 = sext i32 %73 to i64
  %75 = getelementptr inbounds i32, ptr %15, i64 %74
  %76 = load i32, ptr %75, align 4, !tbaa !26
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds i32, ptr %19, i64 %77
  %79 = load i32, ptr %78, align 4, !tbaa !26
  %80 = icmp eq i32 %79, 2
  br i1 %80, label %86, label %81

81:                                               ; preds = %.lr.ph
  %82 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.1, i32 noundef 74, ptr noundef nonnull @.str.2)
  %83 = load i32, ptr %78, align 4, !tbaa !26
  %84 = icmp eq i32 %83, 2
  br i1 %84, label %86, label %85

85:                                               ; preds = %81
  tail call void @__assert_fail(ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, i32 noundef 74, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

86:                                               ; preds = %81, %.lr.ph
  %87 = getelementptr inbounds i32, ptr %13, i64 %77
  %88 = load i32, ptr %87, align 4, !tbaa !26
  %89 = getelementptr inbounds %struct.nrinfo_t, ptr %23, i64 %77
  %90 = getelementptr inbounds i8, ptr %89, i64 4
  %91 = load i32, ptr %90, align 4, !tbaa !26
  %92 = sub nsw i32 %88, %91
  %93 = sitofp i32 %92 to float
  %94 = tail call i32 @libmetis__rpqInsert(ptr noundef %25, i32 noundef %76, float noundef %93) #6
  %95 = load i32, ptr %87, align 4, !tbaa !26
  %96 = load i32, ptr %89, align 4, !tbaa !26
  %97 = sub nsw i32 %95, %96
  %98 = sitofp i32 %97 to float
  %99 = tail call i32 @libmetis__rpqInsert(ptr noundef %26, i32 noundef %76, float noundef %98) #6
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !30

._crit_edge:                                      ; preds = %86, %67
  %100 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %70) #6
  %.not467 = icmp eq i32 %100, 0
  br i1 %.not467, label %101, label %105

101:                                              ; preds = %._crit_edge
  %102 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4, i32 noundef 79, ptr noundef nonnull @.str.2)
  %103 = tail call i32 @libmetis__CheckNodeBnd(ptr noundef nonnull %1, i32 noundef %70) #6
  %.not468 = icmp eq i32 %103, 0
  br i1 %.not468, label %104, label %105

104:                                              ; preds = %101
  tail call void @__assert_fail(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, i32 noundef 79, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

105:                                              ; preds = %101, %._crit_edge
  %106 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not469 = icmp eq i32 %106, 0
  br i1 %.not469, label %107, label %111

107:                                              ; preds = %105
  %108 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef 80, ptr noundef nonnull @.str.2)
  %109 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not470 = icmp eq i32 %109, 0
  br i1 %.not470, label %110, label %111

110:                                              ; preds = %107
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.2, i32 noundef 80, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

111:                                              ; preds = %107, %105
  %112 = load i32, ptr %62, align 4, !tbaa !32
  %.not471 = icmp eq i32 %112, 0
  br i1 %.not471, label %117, label %113

113:                                              ; preds = %111
  %114 = mul nsw i32 %70, 5
  %115 = icmp sgt i32 %70, 79
  %116 = select i1 %115, i32 400, i32 %114
  br label %121

117:                                              ; preds = %111
  %118 = shl nsw i32 %70, 1
  %119 = icmp sgt i32 %70, 149
  %120 = select i1 %119, i32 300, i32 %118
  br label %121

121:                                              ; preds = %117, %113
  %122 = phi i32 [ %116, %113 ], [ %120, %117 ]
  store i32 0, ptr %31, align 4, !tbaa !26
  br i1 %63, label %.lr.ph561, label %.loopexit503

.lr.ph561:                                        ; preds = %121
  %123 = load i32, ptr %21, align 4, !tbaa !26
  %124 = load i32, ptr %39, align 4, !tbaa !26
  %125 = sub nsw i32 %123, %124
  %126 = tail call i32 @llvm.abs.i32(i32 %125, i1 true)
  %127 = and i32 %.0441611, 1
  %128 = shl nsw i32 %122, 1
  br label %129

129:                                              ; preds = %.lr.ph561, %393
  %indvars.iv649 = phi i64 [ 0, %.lr.ph561 ], [ %indvars.iv.next650, %393 ]
  %.0436559 = phi i32 [ %126, %.lr.ph561 ], [ %.1437, %393 ]
  %.0442558 = phi i32 [ -1, %.lr.ph561 ], [ %.1443, %393 ]
  %.0444557 = phi i32 [ %69, %.lr.ph561 ], [ %.1445, %393 ]
  %.0446556 = phi i32 [ %70, %.lr.ph561 ], [ %.1447.lcssa, %393 ]
  %.0451554 = phi i32 [ 0, %.lr.ph561 ], [ %.1452.lcssa, %393 ]
  %130 = tail call i32 @libmetis__rpqSeeTopVal(ptr noundef %25) #6
  store i32 %130, ptr %5, align 4, !tbaa !26
  %131 = tail call i32 @libmetis__rpqSeeTopVal(ptr noundef %26) #6
  store i32 %131, ptr %64, align 4, !tbaa !26
  %132 = icmp ne i32 %130, -1
  %133 = icmp ne i32 %131, -1
  %or.cond = select i1 %132, i1 %133, i1 false
  %134 = trunc nuw nsw i64 %indvars.iv649 to i32
  br i1 %or.cond, label %135, label %162

135:                                              ; preds = %129
  %136 = sext i32 %130 to i64
  %137 = getelementptr inbounds i32, ptr %13, i64 %136
  %138 = load i32, ptr %137, align 4, !tbaa !26
  %139 = getelementptr inbounds %struct.nrinfo_t, ptr %23, i64 %136, i32 0, i64 1
  %140 = load i32, ptr %139, align 4, !tbaa !26
  %141 = sub nsw i32 %138, %140
  store i32 %141, ptr %6, align 4, !tbaa !26
  %142 = sext i32 %131 to i64
  %143 = getelementptr inbounds i32, ptr %13, i64 %142
  %144 = load i32, ptr %143, align 4, !tbaa !26
  %145 = getelementptr inbounds %struct.nrinfo_t, ptr %23, i64 %142
  %146 = load i32, ptr %145, align 4, !tbaa !26
  %147 = sub nsw i32 %144, %146
  store i32 %147, ptr %65, align 4, !tbaa !26
  %148 = icmp sgt i32 %141, %147
  %149 = icmp slt i32 %141, %147
  %spec.select = select i1 %149, i32 1, i32 %127
  %150 = select i1 %148, i32 0, i32 %spec.select
  %151 = zext nneg i32 %150 to i64
  %152 = getelementptr inbounds i32, ptr %21, i64 %151
  %153 = load i32, ptr %152, align 4, !tbaa !26
  %154 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 %151
  %155 = load i32, ptr %154, align 4, !tbaa !26
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds i32, ptr %13, i64 %156
  %158 = load i32, ptr %157, align 4, !tbaa !26
  %159 = add nsw i32 %158, %153
  %160 = icmp sgt i32 %159, %47
  %161 = zext i1 %160 to i32
  %spec.select490 = xor i32 %150, %161
  br label %179

162:                                              ; preds = %129
  %163 = icmp eq i32 %130, -1
  %164 = icmp eq i32 %131, -1
  %or.cond5 = select i1 %163, i1 %164, i1 false
  br i1 %or.cond5, label %.loopexit503, label %165

165:                                              ; preds = %162
  br i1 %132, label %166, label %172

166:                                              ; preds = %165
  %167 = load i32, ptr %21, align 4, !tbaa !26
  %168 = sext i32 %130 to i64
  %169 = getelementptr inbounds i32, ptr %13, i64 %168
  %170 = load i32, ptr %169, align 4, !tbaa !26
  %171 = add nsw i32 %170, %167
  %.not472 = icmp sgt i32 %171, %47
  br i1 %.not472, label %172, label %179

172:                                              ; preds = %166, %165
  br i1 %164, label %.loopexit503, label %173

173:                                              ; preds = %172
  %174 = load i32, ptr %39, align 4, !tbaa !26
  %175 = sext i32 %131 to i64
  %176 = getelementptr inbounds i32, ptr %13, i64 %175
  %177 = load i32, ptr %176, align 4, !tbaa !26
  %178 = add nsw i32 %177, %174
  %.not474 = icmp sgt i32 %178, %47
  br i1 %.not474, label %.loopexit503, label %179

179:                                              ; preds = %135, %173, %166
  %.0440 = phi i32 [ %spec.select490, %135 ], [ 0, %166 ], [ 1, %173 ]
  %180 = xor i32 %.0440, 1
  %181 = zext nneg i32 %.0440 to i64
  %182 = getelementptr inbounds [2 x ptr], ptr %4, i64 0, i64 %181
  %183 = load ptr, ptr %182, align 8, !tbaa !19
  %184 = tail call i32 @libmetis__rpqGetTop(ptr noundef %183) #6
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i32, ptr %28, i64 %185
  %187 = load i32, ptr %186, align 4, !tbaa !26
  %188 = icmp eq i32 %187, -1
  br i1 %188, label %189, label %194

189:                                              ; preds = %179
  %190 = zext nneg i32 %180 to i64
  %191 = getelementptr inbounds [2 x ptr], ptr %4, i64 0, i64 %190
  %192 = load ptr, ptr %191, align 8, !tbaa !19
  %193 = tail call i32 @libmetis__rpqDelete(ptr noundef %192, i32 noundef %184) #6
  br label %194

194:                                              ; preds = %189, %179
  %195 = getelementptr inbounds i32, ptr %17, i64 %185
  %196 = load i32, ptr %195, align 4, !tbaa !26
  %.not475 = icmp eq i32 %196, -1
  br i1 %.not475, label %197, label %201

197:                                              ; preds = %194
  %198 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef 120, ptr noundef nonnull @.str.2)
  %199 = load i32, ptr %195, align 4, !tbaa !26
  %.not476 = icmp eq i32 %199, -1
  br i1 %.not476, label %200, label %201

200:                                              ; preds = %197
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 120, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

201:                                              ; preds = %197, %194
  %202 = getelementptr i32, ptr %9, i64 %185
  %203 = getelementptr i8, ptr %202, i64 4
  %204 = load i32, ptr %203, align 4, !tbaa !26
  %205 = add nsw i32 %204, %.0451554
  %206 = load i32, ptr %202, align 4, !tbaa !26
  %207 = sub i32 %205, %206
  %.not477 = icmp slt i32 %207, %66
  br i1 %.not477, label %208, label %.loopexit503

208:                                              ; preds = %201
  %209 = getelementptr inbounds i32, ptr %13, i64 %185
  %210 = load i32, ptr %209, align 4, !tbaa !26
  %211 = getelementptr inbounds %struct.nrinfo_t, ptr %23, i64 %185
  %212 = zext nneg i32 %180 to i64
  %213 = getelementptr inbounds [2 x i32], ptr %211, i64 0, i64 %212
  %214 = load i32, ptr %213, align 4, !tbaa !26
  %.neg = sub i32 %214, %210
  %215 = load i32, ptr %42, align 4, !tbaa !26
  %216 = add i32 %.neg, %215
  store i32 %216, ptr %42, align 4, !tbaa !26
  %217 = getelementptr inbounds i32, ptr %21, i64 %181
  %218 = load i32, ptr %217, align 4, !tbaa !26
  %219 = load i32, ptr %209, align 4, !tbaa !26
  %220 = getelementptr inbounds i32, ptr %21, i64 %212
  %221 = load i32, ptr %220, align 4, !tbaa !26
  %222 = load i32, ptr %213, align 4, !tbaa !26
  %.neg478 = add i32 %219, %218
  %223 = sub i32 %.neg478, %221
  %224 = add i32 %223, %222
  %225 = tail call i32 @llvm.abs.i32(i32 %224, i1 true)
  %226 = icmp slt i32 %216, %.0444557
  br i1 %226, label %243, label %227

227:                                              ; preds = %208
  %228 = icmp eq i32 %216, %.0444557
  %229 = icmp slt i32 %225, %.0436559
  %or.cond491 = select i1 %228, i1 %229, i1 false
  br i1 %or.cond491, label %243, label %230

230:                                              ; preds = %227
  %231 = sub nsw i32 %134, %.0442558
  %232 = icmp sgt i32 %231, %128
  br i1 %232, label %240, label %233

233:                                              ; preds = %230
  %234 = icmp sgt i32 %231, %122
  br i1 %234, label %235, label %243

235:                                              ; preds = %233
  %236 = sitofp i32 %216 to double
  %237 = sitofp i32 %.0444557 to double
  %238 = fmul double %237, 1.100000e+00
  %239 = fcmp olt double %238, %236
  br i1 %239, label %240, label %243

240:                                              ; preds = %235, %230
  %241 = add i32 %219, %216
  %242 = sub i32 %241, %222
  store i32 %242, ptr %42, align 4, !tbaa !26
  br label %.loopexit503

243:                                              ; preds = %208, %227, %235, %233
  %.1445 = phi i32 [ %.0444557, %235 ], [ %.0444557, %233 ], [ %.0444557, %227 ], [ %216, %208 ]
  %.1443 = phi i32 [ %.0442558, %235 ], [ %.0442558, %233 ], [ %134, %227 ], [ %134, %208 ]
  %.1437 = phi i32 [ %.0436559, %235 ], [ %.0436559, %233 ], [ %225, %227 ], [ %225, %208 ]
  %244 = load i32, ptr %195, align 4, !tbaa !26
  %.not479 = icmp eq i32 %244, -1
  br i1 %.not479, label %245, label %249

245:                                              ; preds = %243
  %246 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef 143, ptr noundef nonnull @.str.2)
  %247 = load i32, ptr %195, align 4, !tbaa !26
  %.not480 = icmp eq i32 %247, -1
  br i1 %.not480, label %248, label %249

248:                                              ; preds = %245
  tail call void @__assert_fail(ptr noundef nonnull @.str.9, ptr noundef nonnull @.str.2, i32 noundef 143, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

249:                                              ; preds = %245, %243
  %250 = phi i32 [ %247, %245 ], [ %244, %243 ]
  %251 = add nsw i32 %.0446556, -1
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds i32, ptr %15, i64 %252
  %254 = load i32, ptr %253, align 4, !tbaa !26
  %255 = sext i32 %250 to i64
  %256 = getelementptr inbounds i32, ptr %15, i64 %255
  store i32 %254, ptr %256, align 4, !tbaa !26
  %257 = load i32, ptr %195, align 4, !tbaa !26
  %258 = sext i32 %254 to i64
  %259 = getelementptr inbounds i32, ptr %17, i64 %258
  store i32 %257, ptr %259, align 4, !tbaa !26
  store i32 -1, ptr %195, align 4, !tbaa !26
  %260 = load i32, ptr %209, align 4, !tbaa !26
  %261 = load i32, ptr %217, align 4, !tbaa !26
  %262 = add nsw i32 %261, %260
  store i32 %262, ptr %217, align 4, !tbaa !26
  %263 = getelementptr inbounds i32, ptr %19, i64 %185
  store i32 %.0440, ptr %263, align 4, !tbaa !26
  store i32 %134, ptr %186, align 4, !tbaa !26
  %264 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv649
  store i32 %184, ptr %264, align 4, !tbaa !26
  %265 = load i32, ptr %202, align 4, !tbaa !26
  %invariant.gep545 = getelementptr [2 x i32], ptr %23, i64 0, i64 %181
  %266 = load i32, ptr %203, align 4, !tbaa !26
  %267 = icmp slt i32 %265, %266
  br i1 %267, label %.lr.ph551, label %._crit_edge552

.lr.ph551:                                        ; preds = %249
  %invariant.gep = getelementptr [2 x i32], ptr %23, i64 0, i64 %212
  %268 = sub nuw nsw i32 -2, %.0440
  %.neg483 = add nuw nsw i32 %.0440, -3
  %269 = getelementptr inbounds [2 x ptr], ptr %4, i64 0, i64 %212
  %270 = sext i32 %265 to i64
  br label %271

271:                                              ; preds = %.lr.ph551, %367
  %indvars.iv646 = phi i64 [ %270, %.lr.ph551 ], [ %indvars.iv.next647, %367 ]
  %.1447548 = phi i32 [ %251, %.lr.ph551 ], [ %.2448, %367 ]
  %.1452547 = phi i32 [ %.0451554, %.lr.ph551 ], [ %.2453, %367 ]
  %272 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv646
  %273 = load i32, ptr %272, align 4, !tbaa !26
  %274 = sext i32 %273 to i64
  %275 = getelementptr inbounds i32, ptr %19, i64 %274
  %276 = load i32, ptr %275, align 4, !tbaa !26
  %277 = icmp eq i32 %276, 2
  br i1 %277, label %278, label %294

278:                                              ; preds = %271
  %279 = getelementptr inbounds i32, ptr %13, i64 %274
  %280 = load i32, ptr %279, align 4, !tbaa !26
  %gep546 = getelementptr %struct.nrinfo_t, ptr %invariant.gep545, i64 %274
  %281 = load i32, ptr %gep546, align 4, !tbaa !26
  %282 = load i32, ptr %209, align 4, !tbaa !26
  %283 = add nsw i32 %282, %281
  store i32 %283, ptr %gep546, align 4, !tbaa !26
  %284 = getelementptr inbounds i32, ptr %28, i64 %274
  %285 = load i32, ptr %284, align 4, !tbaa !26
  %286 = icmp eq i32 %285, -1
  %287 = icmp eq i32 %285, %.neg483
  %or.cond492 = select i1 %286, i1 true, i1 %287
  br i1 %or.cond492, label %288, label %367

288:                                              ; preds = %278
  %289 = load ptr, ptr %269, align 8, !tbaa !19
  %290 = load i32, ptr %209, align 4, !tbaa !26
  %291 = add i32 %281, %290
  %292 = sub i32 %280, %291
  %293 = sitofp i32 %292 to float
  tail call void @libmetis__rpqUpdate(ptr noundef %289, i32 noundef %273, float noundef %293) #6
  br label %367

294:                                              ; preds = %271
  %295 = icmp eq i32 %276, %180
  br i1 %295, label %296, label %367

296:                                              ; preds = %294
  %297 = getelementptr inbounds i32, ptr %17, i64 %274
  %298 = load i32, ptr %297, align 4, !tbaa !26
  %299 = icmp eq i32 %298, -1
  br i1 %299, label %309, label %300

300:                                              ; preds = %296
  %301 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef 162, ptr noundef nonnull @.str.2)
  %302 = load i32, ptr %297, align 4, !tbaa !26
  %303 = load i32, ptr %275, align 4, !tbaa !26
  %304 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %273, i32 noundef %302, i32 noundef %303)
  %305 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12)
  %306 = load i32, ptr %297, align 4, !tbaa !26
  %307 = icmp eq i32 %306, -1
  br i1 %307, label %309, label %308

308:                                              ; preds = %300
  tail call void @__assert_fail(ptr noundef nonnull @.str.13, ptr noundef nonnull @.str.2, i32 noundef 162, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

309:                                              ; preds = %300, %296
  %310 = sext i32 %.1447548 to i64
  %311 = getelementptr inbounds i32, ptr %15, i64 %310
  store i32 %273, ptr %311, align 4, !tbaa !26
  %312 = add nsw i32 %.1447548, 1
  store i32 %.1447548, ptr %297, align 4, !tbaa !26
  %313 = add nsw i32 %.1452547, 1
  %314 = sext i32 %.1452547 to i64
  %315 = getelementptr inbounds i32, ptr %33, i64 %314
  store i32 %273, ptr %315, align 4, !tbaa !26
  store i32 2, ptr %275, align 4, !tbaa !26
  %316 = getelementptr inbounds i32, ptr %13, i64 %274
  %317 = load i32, ptr %316, align 4, !tbaa !26
  %318 = load i32, ptr %220, align 4, !tbaa !26
  %319 = sub nsw i32 %318, %317
  store i32 %319, ptr %220, align 4, !tbaa !26
  %320 = getelementptr inbounds %struct.nrinfo_t, ptr %23, i64 %274
  %321 = getelementptr inbounds i8, ptr %320, i64 4
  store i32 0, ptr %321, align 4, !tbaa !26
  store i32 0, ptr %320, align 4, !tbaa !26
  %322 = getelementptr inbounds i32, ptr %9, i64 %274
  %323 = load i32, ptr %322, align 4, !tbaa !26
  %324 = getelementptr i8, ptr %322, i64 4
  %325 = load i32, ptr %324, align 4, !tbaa !26
  %326 = icmp slt i32 %323, %325
  br i1 %326, label %.lr.ph543.preheader, label %._crit_edge544

.lr.ph543.preheader:                              ; preds = %309
  %327 = sext i32 %323 to i64
  br label %.lr.ph543

.lr.ph543:                                        ; preds = %.lr.ph543.preheader, %353
  %indvars.iv643 = phi i64 [ %327, %.lr.ph543.preheader ], [ %indvars.iv.next644, %353 ]
  %328 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv643
  %329 = load i32, ptr %328, align 4, !tbaa !26
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %19, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !26
  %.not482 = icmp eq i32 %332, 2
  %333 = getelementptr inbounds i32, ptr %13, i64 %330
  %334 = load i32, ptr %333, align 4, !tbaa !26
  br i1 %.not482, label %340, label %335

335:                                              ; preds = %.lr.ph543
  %336 = sext i32 %332 to i64
  %337 = getelementptr inbounds i32, ptr %320, i64 %336
  %338 = load i32, ptr %337, align 4, !tbaa !26
  %339 = add nsw i32 %338, %334
  store i32 %339, ptr %337, align 4, !tbaa !26
  br label %353

340:                                              ; preds = %.lr.ph543
  %gep = getelementptr %struct.nrinfo_t, ptr %invariant.gep, i64 %330
  %341 = load i32, ptr %gep, align 4, !tbaa !26
  %342 = load i32, ptr %316, align 4, !tbaa !26
  %343 = sub nsw i32 %341, %342
  store i32 %343, ptr %gep, align 4, !tbaa !26
  %344 = getelementptr inbounds i32, ptr %28, i64 %330
  %345 = load i32, ptr %344, align 4, !tbaa !26
  %346 = icmp eq i32 %345, -1
  %347 = icmp eq i32 %345, %268
  %or.cond494 = select i1 %346, i1 true, i1 %347
  br i1 %or.cond494, label %348, label %353

348:                                              ; preds = %340
  %349 = sub i32 %334, %341
  %350 = load i32, ptr %316, align 4, !tbaa !26
  %351 = add nsw i32 %349, %350
  %352 = sitofp i32 %351 to float
  tail call void @libmetis__rpqUpdate(ptr noundef %183, i32 noundef %329, float noundef %352) #6
  br label %353

353:                                              ; preds = %340, %335, %348
  %indvars.iv.next644 = add nsw i64 %indvars.iv643, 1
  %354 = load i32, ptr %324, align 4, !tbaa !26
  %355 = sext i32 %354 to i64
  %356 = icmp slt i64 %indvars.iv.next644, %355
  br i1 %356, label %.lr.ph543, label %._crit_edge544, !llvm.loop !33

._crit_edge544:                                   ; preds = %353, %309
  %357 = getelementptr inbounds i32, ptr %28, i64 %274
  %358 = load i32, ptr %357, align 4, !tbaa !26
  %359 = icmp eq i32 %358, -1
  br i1 %359, label %360, label %367

360:                                              ; preds = %._crit_edge544
  %361 = load i32, ptr %316, align 4, !tbaa !26
  %362 = getelementptr inbounds i32, ptr %320, i64 %212
  %363 = load i32, ptr %362, align 4, !tbaa !26
  %364 = sub nsw i32 %361, %363
  %365 = sitofp i32 %364 to float
  %366 = tail call i32 @libmetis__rpqInsert(ptr noundef %183, i32 noundef %273, float noundef %365) #6
  store i32 %268, ptr %357, align 4, !tbaa !26
  br label %367

367:                                              ; preds = %278, %288, %._crit_edge544, %360, %294
  %.2453 = phi i32 [ %.1452547, %288 ], [ %313, %360 ], [ %313, %._crit_edge544 ], [ %.1452547, %294 ], [ %.1452547, %278 ]
  %.2448 = phi i32 [ %.1447548, %288 ], [ %312, %360 ], [ %312, %._crit_edge544 ], [ %.1447548, %294 ], [ %.1447548, %278 ]
  %indvars.iv.next647 = add nsw i64 %indvars.iv646, 1
  %368 = load i32, ptr %203, align 4, !tbaa !26
  %369 = sext i32 %368 to i64
  %370 = icmp slt i64 %indvars.iv.next647, %369
  br i1 %370, label %271, label %._crit_edge552, !llvm.loop !34

._crit_edge552:                                   ; preds = %367, %249
  %.1452.lcssa = phi i32 [ %.0451554, %249 ], [ %.2453, %367 ]
  %.1447.lcssa = phi i32 [ %251, %249 ], [ %.2448, %367 ]
  %indvars.iv.next650 = add nuw nsw i64 %indvars.iv649, 1
  %371 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv.next650
  store i32 %.1452.lcssa, ptr %371, align 4, !tbaa !26
  %372 = load i32, ptr %48, align 8, !tbaa !27
  %373 = and i32 %372, 32
  %.not481 = icmp eq i32 %373, 0
  br i1 %.not481, label %393, label %374

374:                                              ; preds = %._crit_edge552
  %375 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %181
  %376 = load i32, ptr %375, align 4, !tbaa !26
  %377 = getelementptr inbounds [2 x i32], ptr %6, i64 0, i64 %212
  %378 = load i32, ptr %377, align 4, !tbaa !26
  %379 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 %181
  %380 = load i32, ptr %379, align 4, !tbaa !26
  %381 = sext i32 %380 to i64
  %382 = getelementptr inbounds i32, ptr %13, i64 %381
  %383 = load i32, ptr %382, align 4, !tbaa !26
  %384 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 %212
  %385 = load i32, ptr %384, align 4, !tbaa !26
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds i32, ptr %13, i64 %386
  %388 = load i32, ptr %387, align 4, !tbaa !26
  %389 = load i32, ptr %21, align 4, !tbaa !26
  %390 = load i32, ptr %39, align 4, !tbaa !26
  %391 = load i32, ptr %42, align 4, !tbaa !26
  %392 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, i32 noundef %184, i32 noundef %.0440, i32 noundef %376, i32 noundef %378, i32 noundef %383, i32 noundef %388, i32 noundef %389, i32 noundef %390, i32 noundef %391)
  br label %393

393:                                              ; preds = %._crit_edge552, %374
  %exitcond653.not = icmp eq i64 %indvars.iv.next650, %wide.trip.count652
  br i1 %exitcond653.not, label %.loopexit503, label %129, !llvm.loop !35

.loopexit503:                                     ; preds = %393, %162, %173, %172, %201, %121, %240
  %.0449525 = phi i32 [ %134, %240 ], [ 0, %121 ], [ %7, %393 ], [ %134, %162 ], [ %134, %173 ], [ %134, %172 ], [ %134, %201 ]
  %.0446520 = phi i32 [ %.0446556, %240 ], [ %70, %121 ], [ %.1447.lcssa, %393 ], [ %.0446556, %162 ], [ %.0446556, %173 ], [ %.0446556, %172 ], [ %.0446556, %201 ]
  %.0444515 = phi i32 [ %.0444557, %240 ], [ %69, %121 ], [ %.1445, %393 ], [ %.0444557, %162 ], [ %.0444557, %173 ], [ %.0444557, %172 ], [ %.0444557, %201 ]
  %.0442510 = phi i32 [ %.0442558, %240 ], [ -1, %121 ], [ %.1443, %393 ], [ %.0442558, %162 ], [ %.0442558, %173 ], [ %.0442558, %172 ], [ %.0442558, %201 ]
  %.1450603 = add nsw i32 %.0449525, -1
  %394 = icmp sgt i32 %.1450603, %.0442510
  br i1 %394, label %.lr.ph608.preheader, label %._crit_edge609

.lr.ph608.preheader:                              ; preds = %.loopexit503
  %395 = sext i32 %.0449525 to i64
  %396 = add nsw i64 %395, -1
  %397 = sext i32 %.0442510 to i64
  br label %.lr.ph608

.loopexit.loopexit:                               ; preds = %._crit_edge597
  %398 = trunc nsw i64 %indvars.iv.next663 to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %._crit_edge591
  %.4.lcssa = phi i32 [ %433, %._crit_edge591 ], [ %398, %.loopexit.loopexit ]
  %indvars.iv.next668 = add nsw i64 %indvars.iv667, -1
  %399 = icmp sgt i64 %indvars.iv.next668, %397
  %indvars.iv.next670 = add nsw i64 %indvars.iv669, -1
  br i1 %399, label %.lr.ph608, label %._crit_edge609, !llvm.loop !36

.lr.ph608:                                        ; preds = %.lr.ph608.preheader, %.loopexit
  %indvars.iv669 = phi i64 [ %395, %.lr.ph608.preheader ], [ %indvars.iv.next670, %.loopexit ]
  %indvars.iv667 = phi i64 [ %396, %.lr.ph608.preheader ], [ %indvars.iv.next668, %.loopexit ]
  %.3605 = phi i32 [ %.0446520, %.lr.ph608.preheader ], [ %.4.lcssa, %.loopexit ]
  %400 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv667
  %401 = load i32, ptr %400, align 4, !tbaa !26
  %402 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not486 = icmp eq i32 %402, 0
  br i1 %.not486, label %403, label %407

403:                                              ; preds = %.lr.ph608
  %404 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.6, i32 noundef 204, ptr noundef nonnull @.str.2)
  %405 = tail call i32 @libmetis__CheckNodePartitionParams(ptr noundef nonnull %1) #6
  %.not487 = icmp eq i32 %405, 0
  br i1 %.not487, label %406, label %407

406:                                              ; preds = %403
  tail call void @__assert_fail(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.2, i32 noundef 204, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

407:                                              ; preds = %403, %.lr.ph608
  %408 = sext i32 %401 to i64
  %409 = getelementptr inbounds i32, ptr %19, i64 %408
  %410 = load i32, ptr %409, align 4, !tbaa !26
  %411 = add nsw i32 %410, 1
  %412 = srem i32 %411, 2
  %413 = getelementptr inbounds i32, ptr %13, i64 %408
  %414 = load i32, ptr %413, align 4, !tbaa !26
  %415 = load i32, ptr %42, align 4, !tbaa !26
  %416 = add nsw i32 %415, %414
  store i32 %416, ptr %42, align 4, !tbaa !26
  %417 = load i32, ptr %413, align 4, !tbaa !26
  %418 = sext i32 %410 to i64
  %419 = getelementptr inbounds i32, ptr %21, i64 %418
  %420 = load i32, ptr %419, align 4, !tbaa !26
  %421 = sub nsw i32 %420, %417
  store i32 %421, ptr %419, align 4, !tbaa !26
  store i32 2, ptr %409, align 4, !tbaa !26
  %422 = getelementptr inbounds i32, ptr %17, i64 %408
  %423 = load i32, ptr %422, align 4, !tbaa !26
  %424 = icmp eq i32 %423, -1
  br i1 %424, label %430, label %425

425:                                              ; preds = %407
  %426 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, i32 noundef 210, ptr noundef nonnull @.str.2)
  %427 = load i32, ptr %422, align 4, !tbaa !26
  %428 = icmp eq i32 %427, -1
  br i1 %428, label %430, label %429

429:                                              ; preds = %425
  tail call void @__assert_fail(ptr noundef nonnull @.str.16, ptr noundef nonnull @.str.2, i32 noundef 210, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

430:                                              ; preds = %425, %407
  %431 = sext i32 %.3605 to i64
  %432 = getelementptr inbounds i32, ptr %15, i64 %431
  store i32 %401, ptr %432, align 4, !tbaa !26
  %433 = add i32 %.3605, 1
  store i32 %.3605, ptr %422, align 4, !tbaa !26
  %434 = getelementptr inbounds %struct.nrinfo_t, ptr %23, i64 %408
  %435 = getelementptr inbounds i8, ptr %434, i64 4
  store i32 0, ptr %435, align 4, !tbaa !26
  store i32 0, ptr %434, align 4, !tbaa !26
  %436 = getelementptr inbounds i32, ptr %9, i64 %408
  %437 = load i32, ptr %436, align 4, !tbaa !26
  %438 = getelementptr i8, ptr %436, i64 4
  %invariant.gep586 = getelementptr [2 x i32], ptr %23, i64 0, i64 %418
  %439 = load i32, ptr %438, align 4, !tbaa !26
  %440 = icmp slt i32 %437, %439
  br i1 %440, label %.lr.ph590.preheader, label %._crit_edge591

.lr.ph590.preheader:                              ; preds = %430
  %441 = sext i32 %437 to i64
  br label %.lr.ph590

.lr.ph590:                                        ; preds = %.lr.ph590.preheader, %459
  %indvars.iv654 = phi i64 [ %441, %.lr.ph590.preheader ], [ %indvars.iv.next655, %459 ]
  %442 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv654
  %443 = load i32, ptr %442, align 4, !tbaa !26
  %444 = sext i32 %443 to i64
  %445 = getelementptr inbounds i32, ptr %19, i64 %444
  %446 = load i32, ptr %445, align 4, !tbaa !26
  %447 = icmp eq i32 %446, 2
  br i1 %447, label %448, label %452

448:                                              ; preds = %.lr.ph590
  %449 = load i32, ptr %413, align 4, !tbaa !26
  %gep587 = getelementptr %struct.nrinfo_t, ptr %invariant.gep586, i64 %444
  %450 = load i32, ptr %gep587, align 4, !tbaa !26
  %451 = sub nsw i32 %450, %449
  store i32 %451, ptr %gep587, align 4, !tbaa !26
  br label %459

452:                                              ; preds = %.lr.ph590
  %453 = getelementptr inbounds i32, ptr %13, i64 %444
  %454 = load i32, ptr %453, align 4, !tbaa !26
  %455 = sext i32 %446 to i64
  %456 = getelementptr inbounds i32, ptr %434, i64 %455
  %457 = load i32, ptr %456, align 4, !tbaa !26
  %458 = add nsw i32 %457, %454
  store i32 %458, ptr %456, align 4, !tbaa !26
  br label %459

459:                                              ; preds = %448, %452
  %indvars.iv.next655 = add nsw i64 %indvars.iv654, 1
  %460 = load i32, ptr %438, align 4, !tbaa !26
  %461 = sext i32 %460 to i64
  %462 = icmp slt i64 %indvars.iv.next655, %461
  br i1 %462, label %.lr.ph590, label %._crit_edge591, !llvm.loop !37

._crit_edge591:                                   ; preds = %459, %430
  %463 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv667
  %464 = load i32, ptr %463, align 4, !tbaa !26
  %465 = getelementptr inbounds i32, ptr %31, i64 %indvars.iv669
  %466 = load i32, ptr %465, align 4, !tbaa !26
  %467 = icmp slt i32 %464, %466
  br i1 %467, label %.lr.ph601, label %.loopexit

.lr.ph601:                                        ; preds = %._crit_edge591
  %468 = sext i32 %412 to i64
  %469 = getelementptr inbounds i32, ptr %21, i64 %468
  %invariant.gep592 = getelementptr [2 x i32], ptr %23, i64 0, i64 %468
  %470 = sext i32 %464 to i64
  %471 = sext i32 %433 to i64
  br label %472

472:                                              ; preds = %.lr.ph601, %._crit_edge597
  %indvars.iv662 = phi i64 [ %471, %.lr.ph601 ], [ %indvars.iv.next663, %._crit_edge597 ]
  %indvars.iv660 = phi i64 [ %470, %.lr.ph601 ], [ %indvars.iv.next661, %._crit_edge597 ]
  %473 = getelementptr inbounds i32, ptr %33, i64 %indvars.iv660
  %474 = load i32, ptr %473, align 4, !tbaa !26
  %475 = sext i32 %474 to i64
  %476 = getelementptr inbounds i32, ptr %19, i64 %475
  %477 = load i32, ptr %476, align 4, !tbaa !26
  %478 = icmp eq i32 %477, 2
  br i1 %478, label %484, label %479

479:                                              ; preds = %472
  %480 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.17, i32 noundef 225, ptr noundef nonnull @.str.2)
  %481 = load i32, ptr %476, align 4, !tbaa !26
  %482 = icmp eq i32 %481, 2
  br i1 %482, label %484, label %483

483:                                              ; preds = %479
  tail call void @__assert_fail(ptr noundef nonnull @.str.18, ptr noundef nonnull @.str.2, i32 noundef 225, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

484:                                              ; preds = %479, %472
  store i32 %412, ptr %476, align 4, !tbaa !26
  %485 = getelementptr inbounds i32, ptr %13, i64 %475
  %486 = load i32, ptr %485, align 4, !tbaa !26
  %487 = load i32, ptr %469, align 4, !tbaa !26
  %488 = add nsw i32 %487, %486
  store i32 %488, ptr %469, align 4, !tbaa !26
  %489 = load i32, ptr %485, align 4, !tbaa !26
  %490 = load i32, ptr %42, align 4, !tbaa !26
  %491 = sub nsw i32 %490, %489
  store i32 %491, ptr %42, align 4, !tbaa !26
  %492 = getelementptr inbounds i32, ptr %17, i64 %475
  %493 = load i32, ptr %492, align 4, !tbaa !26
  %.not488 = icmp eq i32 %493, -1
  br i1 %.not488, label %494, label %498

494:                                              ; preds = %484
  %495 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.19, i32 noundef 228, ptr noundef nonnull @.str.2)
  %496 = load i32, ptr %492, align 4, !tbaa !26
  %.not489 = icmp eq i32 %496, -1
  br i1 %.not489, label %497, label %498

497:                                              ; preds = %494
  tail call void @__assert_fail(ptr noundef nonnull @.str.20, ptr noundef nonnull @.str.2, i32 noundef 228, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

498:                                              ; preds = %494, %484
  %499 = phi i32 [ %496, %494 ], [ %493, %484 ]
  %indvars.iv.next663 = add nsw i64 %indvars.iv662, -1
  %500 = getelementptr inbounds i32, ptr %15, i64 %indvars.iv.next663
  %501 = load i32, ptr %500, align 4, !tbaa !26
  %502 = sext i32 %499 to i64
  %503 = getelementptr inbounds i32, ptr %15, i64 %502
  store i32 %501, ptr %503, align 4, !tbaa !26
  %504 = load i32, ptr %492, align 4, !tbaa !26
  %505 = sext i32 %501 to i64
  %506 = getelementptr inbounds i32, ptr %17, i64 %505
  store i32 %504, ptr %506, align 4, !tbaa !26
  store i32 -1, ptr %492, align 4, !tbaa !26
  %507 = getelementptr inbounds i32, ptr %9, i64 %475
  %508 = load i32, ptr %507, align 4, !tbaa !26
  %509 = getelementptr i8, ptr %507, i64 4
  %510 = load i32, ptr %509, align 4, !tbaa !26
  %511 = icmp slt i32 %508, %510
  br i1 %511, label %.lr.ph596.preheader, label %._crit_edge597

.lr.ph596.preheader:                              ; preds = %498
  %512 = sext i32 %508 to i64
  br label %.lr.ph596

.lr.ph596:                                        ; preds = %.lr.ph596.preheader, %524
  %513 = phi i32 [ %510, %.lr.ph596.preheader ], [ %525, %524 ]
  %indvars.iv657 = phi i64 [ %512, %.lr.ph596.preheader ], [ %indvars.iv.next658, %524 ]
  %514 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv657
  %515 = load i32, ptr %514, align 4, !tbaa !26
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds i32, ptr %19, i64 %516
  %518 = load i32, ptr %517, align 4, !tbaa !26
  %519 = icmp eq i32 %518, 2
  br i1 %519, label %520, label %524

520:                                              ; preds = %.lr.ph596
  %521 = load i32, ptr %485, align 4, !tbaa !26
  %gep593 = getelementptr %struct.nrinfo_t, ptr %invariant.gep592, i64 %516
  %522 = load i32, ptr %gep593, align 4, !tbaa !26
  %523 = add nsw i32 %522, %521
  store i32 %523, ptr %gep593, align 4, !tbaa !26
  %.pre = load i32, ptr %509, align 4, !tbaa !26
  br label %524

524:                                              ; preds = %.lr.ph596, %520
  %525 = phi i32 [ %513, %.lr.ph596 ], [ %.pre, %520 ]
  %indvars.iv.next658 = add nsw i64 %indvars.iv657, 1
  %526 = sext i32 %525 to i64
  %527 = icmp slt i64 %indvars.iv.next658, %526
  br i1 %527, label %.lr.ph596, label %._crit_edge597, !llvm.loop !38

._crit_edge597:                                   ; preds = %524, %498
  %indvars.iv.next661 = add nsw i64 %indvars.iv660, 1
  %528 = load i32, ptr %465, align 4, !tbaa !26
  %529 = sext i32 %528 to i64
  %530 = icmp slt i64 %indvars.iv.next661, %529
  br i1 %530, label %472, label %.loopexit.loopexit, !llvm.loop !39

._crit_edge609:                                   ; preds = %.loopexit, %.loopexit503
  %.3.lcssa = phi i32 [ %.0446520, %.loopexit503 ], [ %.4.lcssa, %.loopexit ]
  %531 = load i32, ptr %42, align 4, !tbaa !26
  %532 = icmp eq i32 %.0444515, %531
  br i1 %532, label %538, label %533

533:                                              ; preds = %._crit_edge609
  %534 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, i32 noundef 237, ptr noundef nonnull @.str.2)
  %535 = load i32, ptr %42, align 4, !tbaa !26
  %536 = icmp eq i32 %.0444515, %535
  br i1 %536, label %538, label %537

537:                                              ; preds = %533
  tail call void @__assert_fail(ptr noundef nonnull @.str.22, ptr noundef nonnull @.str.2, i32 noundef 237, ptr noundef nonnull @__PRETTY_FUNCTION__.libmetis__FM_2WayNodeRefine2Sided) #7
  unreachable

538:                                              ; preds = %533, %._crit_edge609
  %539 = load i32, ptr %48, align 8, !tbaa !27
  %540 = and i32 %539, 8
  %.not484 = icmp eq i32 %540, 0
  br i1 %.not484, label %545, label %541

541:                                              ; preds = %538
  %542 = load i32, ptr %21, align 4, !tbaa !26
  %543 = load i32, ptr %39, align 4, !tbaa !26
  %544 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.23, i32 noundef %.0444515, i32 noundef %.0442510, i32 noundef %542, i32 noundef %543, i32 noundef %.3.lcssa)
  br label %545

545:                                              ; preds = %541, %538
  store i32 %.0444515, ptr %60, align 8, !tbaa !29
  store i32 %.3.lcssa, ptr %61, align 8, !tbaa !28
  %546 = icmp eq i32 %.0442510, -1
  %.not485 = icmp sge i32 %.0444515, %69
  %or.cond495.not703 = select i1 %546, i1 true, i1 %.not485
  %547 = add nuw nsw i32 %.0441611, 1
  %exitcond674.not = icmp eq i32 %547, %2
  %or.cond701 = select i1 %or.cond495.not703, i1 true, i1 %exitcond674.not
  br i1 %or.cond701, label %._crit_edge615.loopexit, label %67, !llvm.loop !40

._crit_edge615.loopexit:                          ; preds = %545
  %.pre675 = load ptr, ptr %4, align 16, !tbaa !19
  br label %._crit_edge615

._crit_edge615:                                   ; preds = %._crit_edge615.loopexit, %58
  %548 = phi ptr [ %.pre675, %._crit_edge615.loopexit ], [ %25, %58 ]
  tail call void @libmetis__rpqDestroy(ptr noundef %548) #6
  tail call void @libmetis__rpqDestroy(ptr noundef %26) #6
  tail call void @libmetis__wspacepop(ptr noundef nonnull %0) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %4) #6
  ret void
}

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

declare void @libmetis__wspacepush(ptr noundef) local_unnamed_addr #2

declare ptr @libmetis__rpqCreate(i64 noundef) local_unnamed_addr #2

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

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #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 void @libmetis__irandArrayPermute(i32 noundef, ptr noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

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

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

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

declare i32 @libmetis__CheckNodePartitionParams(ptr noundef) local_unnamed_addr #2

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

declare i32 @libmetis__rpqSeeTopVal(ptr 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

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 = { 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 #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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn nounwind }

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

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


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